Primeiros passos no R Studio

Para facilitar a vida dos interessados em programação, estatística e/ou econometria, resolvi fazer esse post um pouco mais completo para quem está iniciando no R. Sendo mais específico, no R Studio.

O QUE É O R?

Wikipedia: R é uma linguagem e também um ambiente de desenvolvimento integrado para cálculos estatísticos e gráficos.

Em outras palavras, R é uma linguagem de programação gratuita que cientistas de dados e estatísticos utilizam para manipular dados de diversas formas.

O R Studio é uma interface para o R, com diversas utilidades diferentes que a tornam uma ferramenta mais simples em comparação ao R. O R Studio possui diversas ferramentas como seus painéis que o tornam mais prático e, por esse motivo o utilizaremos aqui.

INSTALAÇÃO

  • Na tela inicial você já vai ver DOWNLOAD RSTUDIO, clique no link
  • Em seguida, vá em DOWNLOAD RSTUDIO DESKTOP
  • Depois de baixado é simples, é só clicar no instalador e ir clicando em próximo e/ou avançar, como a maioria dos programas, não tem erro.
  • Na tela inicial você vai ver que o RStudio tem 4 janelas, diferente do R.

LAYOUT

Com relação às 4 janelas do R Studio:

  • No topo a esquerda é onde você vai escrever seus códigos. Você pode ter várias janelas de códigos, para abrir mais uma basta ir no sinal ‘+’ logo abaixo de FILE. Depois que você escrever seu código, você deve selecionar a linha que gostaria de executar e clicar em RUN.
  • Assim que você executar seu código você vai ver alterações no CONSOLE, a tela abaixo à esquerda. Você também pode escrever o código nessa tela, porém, é muito mais complicado manusear e fazer alterações. Seu código ficará mais desorganizado.
  • Acima a direita você tem duas abas: Environment e History. Environment, eu recomendo que vocês não se preocupem muito. Basicamente, você vai ter seus objetos nessa aba, seus dados e variáveis criadas. Em History você terá o histórico de seu script, ou seja, todo o código que você for executando vai aparecer lá. Isso é útil, pois caso você feche o R Studio e escolha salvar seu workplace, ao abri-lo você não perderá o histórico. Você terá seu script lá, facilitando o entendimento do que você estava executando;
  • Abaixo a direita uma outra janela que vai facilitar muito sua vida, nela há 5 abas: FILES, PLOTS, PACKAGES, HELP e VIEWER.

Em Files você terá o endereço do seu working directory. Basta executar o código getwd() que você saberá que endereço é aquele na aba Files. No R Studio você pode mover, renomear e deletar arquivos no seu computador. Esse diretório é onde você salva seus scripts e output no R.

Plots é onde você irá visualizar seus gráficos.

Packages possui uma lista de pacotes que você pode selecionar e instalar na hora.

Help é a aba de ajuda do R Studio. Se você é daqueles céticos do Help nos softwares, aqui no R Studio você vai mudar de opinião, realmente ajuda muito.

PACOTES

Os pacotes do R nada mais são do que conjunto de funções, dados e códigos compilados. Os pacotes fornecem funções que algum usuário já criou e você pode utilizá-las. Ou seja, para cada tema que você queira trabalhar, você pode buscar um pacote com funções que realizem todas as manipulações que você deseja.

Por exemplo, eu gostaria de trabalhar com séries temporais. Ao buscar “Time Series” dentre os pacotes existentes, eu vou encontrar alguns pacotes como AnalyzeTS, arfima, astsa, etc.

Você pode procurar os pacotes existentes através do próprio google, ou então ir direto no CRAN, onde os pacotes são mais confiáveis:

https://cran.r-project.org/web/packages/available_packages_by_name.html

Há mais de 100 pacotes com “Time Series” na descrição, como saber qual utilizar?

Ao clicar no nome de um dos pacotes você abrirá a seguinte página:

A página acima é idêntica para todos os pacotes. Todos os pacotes R terão o Reference Manual, com essa aparência:

Nesse manual você verá todas as funções que o pacote possui e uma breve explicação de cada uma. Com base nisso, você deve escolher qual pacote é mais apropriado para você. Ou então, o que eu costumo fazer sempre: GOOGLE!

PRIMEIRAS MANIPULAÇÕES

Conforme já disse acima, na primeira janela, no topo a esquerda, escreveremos nosso código. É lá então que vamos começar a brincar!

A partir daqui, vou tentar ser mais direto. O código que vou postar é exatamente a saída do Console, sendo que em azul teremos o código que escrevi e em vermelho o output do R. Você notará o símbolo “>” antes de cada linha de código escrita e o [1] antes do output do R.

Primeiramente, o R, assim como outras tantas linguagens, serve como uma calculadora. Afinal, muitas vezes você precisará manipular seus dados, fazer algumas alterações nos valores de tabelas, e para isso é importante saber os operadores aritméticos do R, que são: +, -, * e / para adição, subtração, multiplicação e divisão respectivamente. Veja abaixo exemplos com operações feitas no R:

> 2+2
[1] 4
> 10-2
[1] 8
> 2*5
[1] 10
> 10/2
[1] 5

Ao escrever o código na primeira janela, você precisa separar cada tarefa que você quer que o R execute pulando linhas ou então utilizando “;”. Eu prefiro pular linhas.

Além dos operadores, o R possui algumas funções básicas como o log, exponencial e raiz quadrada:

> log(100)
[1] 4.60517
> exp(10)
[1] 22026.47
> sqrt(10000)
[1] 100

O R também possui operadores lógicos:

> 10<2
[1] FALSE
> 10>=10
[1] TRUE

Resumo dos operadores:

CRIANDO VARIÁVEIS

Para criar novas variáveis, atribuindo algum valor que você deseja, basta utilizar o símbolo “=” ou “<-“:

> x <- 100
> y = 10
> x*y
[1] 1000

No caso de se atribuir diversos valores, ou seja, criar um vetor, você utiliza a função c(). Veja os exemplos abaixo com o comentário de cada comando utilizando ‘#’:

> #x recebe os números de 1 a 4
> x=c(1,2,3,4)
> x
[1] 1 2 3 4

Podemos gerar nossas próprias sequências no R, seja uma sequência simples, com intervalo entre os elementos ou com o comprimento que gostaríamos:

> #y recebe a sequência de 1 a 10
> y=c(1:10)
> y
[1]  1  2  3  4  5  6  7  8  9 10
> #z recebe a sequência de 2 a 11
> z=c(2:11)
> z
[1]  2  3  4  5  6  7  8  9 10 11
> #s recebe a sequência de 1 a 10 com diferença de duas unidades
> s=seq(1,10, by=2)
> s
[1] 1 3 5 7 9
> #r recebe a sequência com 10 números, começando de -10 com diferença de 0.2 unidades
> r=seq(length=10,from=-5,by=.2)
> r
[1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2

Podemos realizar qualquer tipo de operação com os vetores. Se o multiplicarmos um número qualquer pelo vetor, ele irá multiplicar cada elemento do vetor por esse número. A mesma lógica vale para divisão, soma e subtração:

> 2*w
[1]  6 10 14 18 22 26 30 34 38 42
> w+1
[1]  4  6  8 10 12 14 16 18 20 22

Ao realizarmos uma soma (ou subtração) entre vetores, os elementos na mesma posição realizam a operação:

> y+z
[1]  3  5  7  9 11 13 15 17 19 21

Visualizando seus gráficos

Em outros sites, você veria muito mais explicações antes de entrar neste tópico. Faz sentido, afinal, ainda há muito o que se aprender no R. Eu sequer mencionei caracteres, lidar com textos, missing, etc. Entretanto, queria fornecer uma introdução rápida para o leitor e já deixar o básico para que ele possa dar sequência sozinho no aprendizado. Como postarei constantemente, o leitor aqui poderá também consultar os posts futuros. Aqui, no entanto, quero ser breve. Vamos aos gráficos!

HISTOGRAMA E GRÁFICO DE DISPERSÃO

Já falei sobre histograma nesse post, e não tem segredo no R, basta utilizar a função hist(). Apenas para deixar mais interessante, vou mostrar como importar um arquivo em .txt utilizando a função read.table().

O arquivo .txt aqui utilizado é o turma_1 já mencionado acima, dessa vez eu o salvei no meu desktop:

read.table("C:/Users/Yukio/Desktop/turma_1.txt",header=TRUE)

Veja que se você simplismente digitar a linha de código acima, o seu software vai demonstrar toda a tabela. Se ela for muito extensa, é uma péssima ideia. Para isso, eu acho bem mais sensato nós atribuírmos a tabela a um elemento:

turma_1 = read.table("C:/Users/Yukio/Desktop/turma_1.txt",header=TRUE)

Se você quiser visualizar sua tabela no R Studio, uma boa idéia é utilizar a função View():

View(turma_1)

Veja que na janela inicial acima a esquerda você terá uma nova aba com sua tabela, isso é bem prático.

Vamos finalmente ao histograma das notas dos alunos:

hist(turma_1$notas)

E o gráfico de dispersão:

plot(turma_1$notas)

Quer um título no gráfico? Incluir algo diferente no eixo x? Alterar as legendas?
Simples, para legenda utilize xlab e ylab, para o título principal utilize o main, e para escolher os eixos, basta pensar que o R está lendo a função da seguinte forma: plot(eixo x, eixo y). Sendo assim:

plot(turma_1$faltas,turma_1$notas,main="Gráfico de Dispersão",xlab="Faltas",ylab="Notas")


Por fim, e se quisermos comprovar a existência ou não de uma correlação?

> cor(turma_1$faltas,turma_1$notas)
[1] -0.9793377

Pois bem, assim termina os primeiros passos no R Studio. Acredito que passar por tudo isso leve menos de uma hora e acrescenta uma baita bagagem. Vou continuar postando códigos de R, gráficos mais coloridos, novas funções, pacotes, etc. Como eu disse, esse daqui é só para ser o começo da sua jornada no R. Qualquer dúvida, é só comentar aí embaixo.

Erros? Por favor, me avise também!

Criando classes / categorias no SAS

Já expliquei no post Percentil – Conceito e Código SAS o que é percentil e como obtê-lo no SAS. Agora, uma coisa que é interessante, e eu precisei usar recentemente, é criar classes no SAS. Há uma forma bem direta de fazer isso através do proc rank. Porém, já havia um código mais “roots” para fazer isso e acho legal compartilhar. É interessante ver alternativas ao que já está preparado (outros softwares podem não ter o comando).

Para demonstrar melhor como criar classes, eu aumentei minha base de dados contendo as alturas dos indivíduos de uma amostra. Para não confundir com a tabela AMOSTRA, eu criei uma nova tabela chamada POPULACAO, contendo 60 alturas. O que vamos fazer no exemplo é criar uma coluna adicional na tabela com as letras de A a J indicando a qual percentil a altura do indivíduo pertence. Isso pode ser útil para obter dummies para regressões e até mesmo para tomar estatística descritiva dos indivíduos, e desse jeito é mais fácil do que utilizando o IF.

Para obter as classes, há dois passos:

  • Primeiro você deve obter o valor de cada percentil, nesse exemplo, comecei do 10° percentil e utilizei intervalos de 10 em 10, mas você pode dividir como for melhor para sua análise:
proc univariate data= work.populacao;
    var altura; output OUT=work.altura 
       pctlpre=p_altura_ pctlpts= 10 to 100 by 10;
run;
  • Agora, vou utilizar o CASE WHEN, que é uma função para lidar com condições no SAS. Veja abaixo que a gente inicia o código com o proc sql seguido de ponto e vírgula como sempre, até aí nenhuma novidade. Em seguida ‘dizemos’ para o SAS criar uma tabela (create table) com o nome populacao_classes na nossa work. Como nós queremos gerar essa nossa nova base a partir da base populacao criada anteriormente, é preciso dizer ao SAS quais campos ele deve trazer da base original. O asterisco após o select indica que o SAS vai trazer todos os campos da base de origem, que no caso é a tabela populacao que está na work. Em seguida vem o case when, que dá o comando ao SAS para atribuir uma letra caso a altura do indivíduo esteja no percentil em questão:
proc sql;
    create table populacao_classes as select *,

      case
      when altura <= (select p_altura_10 from work.altura) then 'A'
      when altura <= (select p_altura_20 from work.altura) then 'B'
      when altura <= (select p_altura_30 from work.altura) then 'C'
      when altura <= (select p_altura_40 from work.altura) then 'D'
      when altura <= (select p_altura_50 from work.altura) then 'E'
      when altura <= (select p_altura_60 from work.altura) then 'F'
      when altura <= (select p_altura_70 from work.altura) then 'G'
      when altura <= (select p_altura_80 from work.altura) then 'H'
      when altura <= (select p_altura_90 from work.altura) then 'I'
      when altura <= (select p_altura_100 from work.altura) then 'J'
      else 'outros'
    end AS classe_altura

    from work.populacao;
proc print;
run;

Para os que ainda estão com dúvidas, segue uma imagem para facilitar o entendimento (veja que as bases na imagem abaixo vão até a linha 25, e não até a linha 60 que é a última linha):

Acompanhando o processo no SAS utilizando o Sysecho

Algumas pessoas escrevem programas grandes, ou demorados, no SAS e colocam para rodar tudo que está dentro de uma vez só. Esses programas podem ter vários data step ou ‘procs’, e é sempre interessante saber em qual etapa exatamente o SAS está. Para isso nós temos o sysecho.

É bem simples, após escrever seu data step ou proc, você inclui o sysecho seguido por um texto (a sua escolha) entre aspas descrevendo o que está sendo executado. Veja o exemplo abaixo:

data base_1;
    sysecho "Cria a variavel coluna_nova";
    set base_de_dados;
    coluna_nova = coluna_1 + coluna_2;
run;

proc sql;
    sysecho "Une com a base 2";
    create table base_2 as
    select a.*,b.*
    from base_1 as a
    left join base_nova as b
    on a.coluna_1 = b.coluna_1;
run;

data base_3;
    sysecho "Cria variavel coluna_x";
    set base_2;
    if coluna_1 > 0 then coluna_x = 'positivo';
    else if coluna_1 = 0 then coluna_x = 'nulo';
    else if coluna_1 < 0 then coluna_x = 'negativ;
    else coluna_x = 'missing';
run;

Veja que fácil agora. Quando você apertar o F3 e deixar esse código rodando, você saberá exatamente em que trecho do programa o SAS está, basta olhar no canto inferior esquerdo que você verá o nome que está ao lado do sysecho do data ou proc em execução!

Como calcular a diferença entre duas datas no SAS?

Novamente vou falar de datas no SAS. É sempre mais difícil trabalhar com datas em qualquer linguagem de programação. Por isso sempre que eu lembro de algo a respeito disso eu trato de escrever aqui porque acho que pode ajudar alguém. Dessa vez vamos aprender como descobrir a distância entre duas datas de algumas formas diferentes.

Voltando ao nosso exemplo dos alunos, nós já tínhamos suas notas e número de faltas, agora vamos acrescentar a data de nascimento deles:

data turma_1;
 input notas faltas dt_nasc ddmmyy10.; 
 format dt_nasc date9.; 
 datalines;
 3.6 13 20/02/1999
 3.6 15 15/04/1999
 5 9 02/10/1999
 6.4 8 01/05/1999
 6.6 7 10/03/1999
 6.6 8 12/11/1998
 6.8 8 14/08/1999
 7.5 5 23/02/1999
 8 4 30/07/1999
 8.7 3 08/03/1999
 9 1 24/02/1999
 9.5 1 15/11/1999
 ;
 proc print;
 run;

Veja como calcular a diferença entre as datas, primeiro de uma forma bem intuitiva apenas com a subtração entre a data de hoje e a do nascimento. Em seguida com as funções datdif e yrdif.

/*Acrescentando as colunas com diferença entre as datas*/
data Turma_1_v1;
    set Turma_1;
    dif_Dias=today()-dt_nasc;
    dif_Dias_2=datdif(dt_nasc,today(),'act/act');
    dif_Dias_3=datdif(dt_nasc,today(),'30/360');
    idade=yrdif(dt_nasc,TODAY());
run;

Como vocês podem ver, foram criados 3 campos utilizando fórmulas diferentes:

  1. Dif_Dias = Diferença entre o dia de hoje e a data de nascimento em dias;
  2. Dif_Dias2 = Diferença entre o dia de hoje e a data de nascimento em dias, utilizando o parâmetro ‘act/act’ para que o SAS entenda que a gente quer que o cálculo considere os dias reais entre as duas datas, considerando o número de dias que cada mês tem de acordo com o calendário;
  3. Dif_Dias3 = Diferença entre o dia de hoje e a data de nascimento em dias, utilizando como padrão que cada mês tem 30 dias e cada ano 360 dias. Isso pode ser útil para pessoas da área de finanças que precisam calcular retorno de alguns títulos;
  4. Idade = Diferença entre o dia de hoje e a data de nascimento em anos. Como não especificamos nada no terceiro parâmetro, o SAS nos traz a diferença considerando o calendário. O mesmo método utilizado em dif_dias poderia ter sido utilizado aqui.

Agora, ficou bem ruim essa idade com várias casas decimais. Eu recomendo trocar aquela linha por esse código com a função round:

idade=round(yrdif(dt_nasc,today()));

Função INTCK

Essa é mais uma função do SAS para lidar com datas, veja só como é intuitiva:

data Turma_1_v2;
set Turma_1;
    dif_meses=intck('month',dt_nasc,today());
    dif_anos=intck('year',dt_nasc,today());
    dif_dias=intck('day',dt_nasc,today());
    dif_semestres=intck('semiyear',dt_nasc,today());
    dif_trimestres=intck('qtr',dt_nasc,today());
run;

Nota: Se você estiver comparando duas datas do mesmo ano, dif_anos retornará zero. O mesmo vale para os demais. Caso você se confunda e coloque a data mais recente antes da data mais antiga, você receberá valores negativos (o que é intuitivo mas vale lembrar).

Gostou do post? Por favor, não vá embora sem deixar uma curtida ou um comentário. Parece algo bobo, mas é um feedback bastante importante para este trabalho. Se encontrou algum erro ou tem alguma sugestão, dúvida, elogio ou crítica, pode escrever nos comentários ou me enviar uma mensagem diretamente em Sobre o Estatsite. E visite também a conta do Twitter @EstatSite.

Forte abraço e bons estudos!

Média Móvel: Explicação, Comando SAS e Função LAG

A maioria das pessoas conhece e utiliza a média no dia a dia. O que alguns não conhecem é a média móvel. O que seria isso?

A média móvel nada mais é do que a média de um determinado número de observações recentes. Por exemplo, suponha que você seja dono de uma oficina e venda peças para automóveis. Suas vendas trimestrais estão representadas pela tabela abaixo:

Você é cauteloso com o seu orçamento, e, para decidir quanto gastar no ano seguinte, você quer verificar a tendência das vendas. Uma alternativa é utilizar a média móvel trimestral, que seria nada mais do que a média dos últimos três meses. Ou seja, você irá sempre pegar a média dos últimos três meses. Isso é útil para verificar se está havendo uma tendência de crescimento ou uma reversão, pois você captura movimentos recentes de vendas:

Simples, não?

Bônus – Média Móvel no SAS:

Para calcular a média móvel no SAS você precisará de algo que identifique os meses anteriores ao que você está analisando, isso pode ser obtido com a função lag().

Vamos supor que a tabela do exemplo acima foi criada no SAS com o nome BASE_VENDAS, contendo as variáveis: Ano e Vendas. Ao utilizar LAG(vendas), obteremos a variável vendas com uma defasagem. Ao utilizar LAG2(vendas), obteremos a variável vendas com duas defasagens:

data Variaveis_Defasadas;
    set Base_Vendas;
    Vendas_M1 = lag(vendas);
    Vendas_M2 = lag2(vendas);
run;

Esse é o resultado:


Agora ficou fácil descobrir como chegar a média móvel, certo?

data Media_Movel;
    set Variaveis_Defasadas;
    Media_3M = SUM(Vendas,Vendas_M1,Vendas_M2)/3;
    DROP Vendas_M1 Vendas_M2;
run;

Simples não?

Apenas para sanar quaisquer dúvidas:

SUM = Soma as variáveis, utilizando a vírgula para separá-las.

DROP = Exclui da tabela as variáveis (as colunas) que você não precisa mais.

R

Se você é estatístico, muito provavelmente já ouviu falar do R. Se é matemático, economista, cientista de dados ou trabalha com modelagem, já deve ter ouvido também.

R é tanto uma linguagem de programação, um software de análise de dados e um software estatístico. É  uma ferramenta muito útil para quem trabalha minerando dados, criando modelos estatísticos, realizando análises em cima de um grande volume de dados, etc. Esse software estatístico é muito utilizado por ser gratuito e possuir diversos pacotes com funções que vão facilitar sua vida seja para montar algum gráfico para uma apresentação, seja para rodar uma regressão linear qualquer. É

Eu nunca achei a linguagem do R tão trivial. Para mim, o SAS acabou sendo muito mais intuitivo. Porém, não é nada assustador, além de existir várias vídeo aulas no youtube, posts no Stackoverflow e diversos sites por aí, irei auxiliá-los aqui o quanto for possível postando códigos que faço no dia a dia. E convenhamos, hoje em dia é só jogar a dúvida no google que você encontra.

Você pode baixá-lo nesse link: R-Project.

Esses são alguns exemplos do que pode ser feito em R: