Вы находитесь на странице: 1из 31

R: Uma introdu

c~
ao para economistas

11 de fevereiro de 2017
2
Sumario

1 Introduc~ao 5
2 Instalando o R e Basicos 7
2.1 Alguns tipos de objeto . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Pacotes 9
3.1 Instalando o Task View de Econometria . . . . . . . . . . . . . . 9
3.2 Alguns outros pacotes . . . . . . . . . . . . . . . . . . . . . . . . 10
4 Carregando dados 11
4.1 O pacote foreign . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2 Importando arquivos do Excel . . . . . . . . . . . . . . . . . . . . 12
4.3 Arrumando a planilha . . . . . . . . . . . . . . . . . . . . . . . . 13
4.4 Usando o attach e names . . . . . . . . . . . . . . . . . . . . . . 13
4.5 Alguns problemas adicionais de dados . . . . . . . . . . . . . . . 13
5 Regress~ao 15
5.1 Erros Robustos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.2 Teste F para comparar dois modelos . . . . . . . . . . . . . . . . 16
5.3 Regress~oes com umas das variaveis na forma logartima . . . . . 16
5.4 Probits e Logits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.5 Variaveis Instrumentais . . . . . . . . . . . . . . . . . . . . . . . 17
6 Loops e condicionais 19
7 Miscel^aneas 21
7.1 Vetor vazio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.2 Eliminando -Inf,Inf,NaN . . . . . . . . . . . . . . . . . . . . . . . 21
7.3 Trabalhando com vetores . . . . . . . . . . . . . . . . . . . . . . 21
8 Reproduzindo resultados do R 23
9 Exemplo pratico 25
9.1 Regress~ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
9.2 A Lei dos grandes numeros . . . . . . . . . . . . . . . . . . . . . 26
10 Livros e Links 29
11 Comandos importantes 31

3
4 
SUMARIO
Cap
tulo 1

Introduc~ao
Isso e so uma introduc~ao ao R, que sup~oe que voc^e passou no curso de
Econometria I N da PUC-Rio. Disponibilizei livros que tratam com muito mais
detalhes sobre o R. Eu usei muito o R Book e o Econometrics with R, que s~ao
muito uteis. Mas se voc^e n~ao quiser apanhar demais, estudar livros em pdf
longos, n~ao entende ingl^es o bastante ou simplesmente n~ao quer se cansar, seja
bem vindo.
Esse manual esta longe de ser completo: e uma introduc~ao, como o proprio
ttulo indica.
Lembrem-se que o maior problema do computador n~ao e que ele n~ao faz o
que voc^e quer, mas que ele faz exatamente o que voc^e manda.
Uma ultima observac~ao: esse manual tem aqueles observac~oes caractersticas
do autor que muitos v~ao achar irritantes. Relevem, ou recorram a um dos livros
(em ingl^es, mais de 200 paginas cada. Boa sorte.)
Este manual sofreu uma extens~ao em Julho de 2016: foram adicionados no-
vas sec~oes sobre loops, condicionais, probits, logits entre outros. Muitas dessas
adic~oes foram motivadas pela propria experi^encia do autor. O autor - pretensi-
osamente - mudou o formato para parecer mais um livro.
O manual quase n~ao aborda series temporais. Futuramente, este manual
sera expandido para abordar esse tema.

5
6 CAPITULO 1. INTRODUC ~
 AO
Cap
tulo 2

Instalando o R e Basicos
Instalar o R e uma tarefa obvia: va no site do Cran, baixe o R e instale. De-
pois disso, e fortemente recomendado que voc^e instale o R Studio, um programa
que funciona como \interface"para o R e vai facilitar varias tarefas. Procurem
no google por R Studio. Baixar e instalar ele deve ser bastante simples.
Tanto o R quanto o R Studio funcionam no Windows, no Mac e no Linux.
Para aqueles que n~ao loucos e usam Windows ou Mac, o R e instalado da maneira
normal: baixa, dois cliques no instalador etc etc. A mesma coisa vale para o R
Studio. Ja no Linux, recomenda-se buscar o tutorial no proprio Cran.
O R Studio tem dois ambientes de trabalho: o Console (a esquerda, embaixo)
e o ambiente \Source" (a esquerda, em cima do Console). O Console lembra o
nosso queridissmo Maple. Digite 2+2, aperte enter, e ele responde: 4.
O Source nos permite criar arquivos com comandos para o R que podem
ser salvos e o R Studio e capaz de rodar diretamente. Para criar um novo
arquivo desses -chamados de R Script - basta pressionar Ctrl + Shift + n. Ou
simplesmente, va no menu le, new le, R Script. Usem o R Script ao maximo,
ja que ele permite que voc^e salve os comandos e reaproveite mais tarde! Para
executar uma linha do script, va no m da linha e pressiona ctrl+enter. Para
rodar varias linhas, selecione as linhas e pressione ctrl+enter.
Para obter ajuda sobre uma determinada func~ao, basta digitar \?nome.da.func~ao".
Ou seja, se queremos saber mais sobre como usar o comando rnorm basta digitar
\?rnorm". Para obter ajuda em qualquer tema, basta digitar no R \??topico".
Assim, se voc^e quiser saber tudo que o R tem relacionado a distribuic~ao normal,
basta digitar \??normal".

2.1 Alguns tipos de objeto

Essa e uma sec~ao tradicionalmente chata. Se voc^e ja trabalhou com lingua-
gens de programac~ao, leia na diagonal. Se e a sua primeira vez usando o R, leia
na diagonal e volte para ela mais tarde.
Existem varios tipos de objetos no R, e tratarei de 4 aqui: listas, dataframes,
vetores e strings1 .
1 Ok, formalmente um vetor pode ser uma string e isso 
e um pouco fazer uma confus~ao entre
tipos e tipos de objetos. A ideia aqui e entender como trabalhar no R, ent~ao essa confus~ao
pode permanecer temporariamente.

7
8 CAPITULO 2. INSTALANDO O R E BASICOS


O dataframe e o objeto mais obvio para trabalhar com dados: ele e uma
tabela, como uma planilha do excel. Cada variavel deve ocupar uma coluna do
dataframe. O dataframe aceita de tudo: numeros, texto, por exemplo. Nor-
malmente, quando importamos arquivos do excel (mais embaixo trataremos de
como fazer isso), eles v~ao virar objetos do tipo dataframe.
O vetor e o objeto matematico vetor, e e bastante util. Suponha que quere-
mos um vetor de todos os numeros entre 1 e 5. Podemos fazer:
c(1,2,3,4,5)

Onde a letra c e o responsavel por concatenar os numeros 1,2,3,4,5. Ob-


serve que n~ao podemos reaproveitar este - ou seja, usar ele mais tarde - vetor:
resolveremos isso mais na frente.
Vetores podem ser multiplicados por inteiros e por outros vetores. Aqui, vale
chamar a atenc~ao que multiplicar dois vetores n~ao e multiplicar duas matrizes:
ele vai multiplicar elemento a elemento. Por exemplo, se zermos c(1,2,3,4,5)
* c(1,2,3,4,5), teremos como resultado 1,4,9,16,25)
O list e a \geleia geral": qualquer coisa vai, qualquer serve. Voc^e pode ter
uma lista de vetores, uma lista de variaveis etc. A beleza da lista - alem de ela
ser multiuso - e que voc^e pode dar nomes as coisas dentro dela e chamar pelo
nome2 . Por exemplo, se zermos:
um.teste <- list(Ola = "Ol
a", Dia = date())

E depois digitarmos um.teste$Dia), ele deve exibir qual a data atual. Digite
um.teste$Ola) e ele deve exibir um Ola na sua tela.
Observem que eu usei um \Ola", entre aspas na lista. Aspas s~ao bastante
importante. Por exemplo, faca: c("Bom","Dia"). O R vai mostrar na tela as
duas palavras. Agora, suponha que voc^e esquecesse as aspas no Dia. Agora, o
R dara um erro: ele a rma que o objeto Dia n~ao foi encontrado.
Assim, se quisermos digitar palavras, frases, letras, devemos colocar eles
entre aspas. Caso contrario, o R vai buscar o objeto com aquele nome. De
maneira bastante grosseira, express~oes desse tipo s~ao chamadas de string.

2 Isso tamb
em e verdade para um dataframe, mas para chamar pelo nome e necessario dar
attach() no dataframe. Mais sobre isso mais para frente
Cap
tulo 3

Pacotes
O R e open source, ou seja, qualquer um pode baixar ele de graca e criar
pacotes e alterac~oes para ele. Muita gente cria pacotes, para todo tipo de coisa...
inclusive econometria.
O mais bacana e que o Cran mantem alguns \conjuntos de pacotes", cha-
mados de Task View. Eu recomendo fortissimamente a instalac~ao do task view
de Econometria.
Para instalar um pacote qualquer basta digitar:
install.packages("nome-do-pacote")

Sim, precisa colocar o nome do pacote entre aspas. Depois de instalado,


sempre que voc^e quiser carregar o pacote, basta digitar
library(nome-do-pacote)

Dessa vez sem aspas. Ou com aspas, n~ao faz nenhuma diferenca no caso do
comando library.

3.1 Instalando o Task View de Econometria

A primeira coisa a ser feita e instalar o pacote do task views, o que e feito
usando o comando acima:
install.packages("ctv")

Alguns mais assustados podem ser surpreendidos aqui com um pedido para
escolher o servidor. Escolha qualquer um. Normalmente, eu escolho o da Co-
lombia (por nenhum motivo em particular). Evitem o 0-cloud, entretanto.1 .
Daqui em diante eu sugiro prosseguir usando o R puro, sem o R Studio,
o que acelera o processo. Depois de instalar, simplesmente carregue usando o
library(ctv).
Para instalar o pacote de econometria, simplesmente digite na sess~ao do R:
install.views("Econometrics")
1 Se voc^e estiver usando o R Studio, ele ira selecionar automaticamente.

9
10 CAPITULO 3. PACOTES

Para atualizar a view, basta digitar update.views("Econometrics")


Normalmente demora (horas) para instalar uma view, ent~ao eu sugiro muita
paci^encia. Tambem pode dar alguns problemas, e ele vai informar que tem al-
guns warnings. A melhor maneira de resolver e dar update.views("Econometrics")
ate funcionar (um metodo meio tosco, mas funciona). Voc^e tambem pode ins-
talar os pacotes que deram problema individualmente se o problema persistir.
Existem outras views, como a de Financas, a de Series Temporais, estatstica
bayesiana, etc etc etc. Os mais curiosos podem olhar no Cran a lista.
Eu assumirei daqui em diante que voc^es instalaram a view de Eco-
nometria e a usarei. N~ao se esquecam que sempre que abrirem a
sec~ao, voc^es precisam carregar os pacotes que estiverem usando 2

3.2 Alguns outros pacotes

Eu n~ao discuto o uso de alguns outros pacotes que s~ao uteis neste manual.
A lista a seguir e n~ao exaustiva (por motivos obvios: o R tem mais de oito mil
pacotes em 11 de fevereiro de 2017!)
 ggplot2: Gra cos mais bonitos do que os padr~oes do R. Mais ou menos
facil de aprender a usar. O proprio R Studio tem um tutorial.
 car e lmtest: Func~oes para realizar testes de hipotese e analise de re-
gress~ao. Funcionam com uma variedade de modelos
 vars Para VARs
 urca Para testes de raiz unitaria e cointegrac~ao
 Forecast Ferramentas para forecasting

2 Assim como voc^es precisavam usar o with(plots) no Maple


Cap
tulo 4

Carregando dados
Existem varios arquivos que podem ser carregados no R para inserir dados.
E varias maneiras. Se voc^e for louco, voc^e sempre pode carregar na m~ao ( cara
mais evidente mais na frente). Felizmente, existem maneiras mais racionais.

4.1 O pacote foreign

Para carregar dados vindo do Stata (como os que eram usados no curso
de Econometria I), sera necessario carregar o pacote foreign1 . Lembrando que
basta digitar library(foreign) para carregar o pacote.
Para carregar um arquivo do stata, basta digitar:

read.dta("caminho do arquivo")

So que tem dois problemas:

1. Isso carrega o arquivo, mas voc^e n~ao consegue usar os dados para nada.
Ele vai mostrar os dados e m.
2. Procurar o caminho do arquivo - algo do tipo C:/Usuario/Fulano/Documentos/arquivo.txt
- e chatssimo.

Para resolver o primeiro, nos precisamos atribuir os dados a uma variavel.


Ou seja, os dados v~ao ser salvos pelo programa sobre uma variavel, que podera
ser \chamada"2 . No Maple, empregavamos o mesmo procedimento para guardar
func~oes, sobre o nome de f(x), por exemplo.
Para atribuir uma variavel, basta usar < (smbolo de menor e traco).
Assim: se voc^e zer a < 2, apertar enter, digitar a e der enter, ele ira exibir
o numero 2. Podemos usar o igual para atribuir valores, ent~ao a = 2 teria o
mesmo efeito de a < 2. Logo:

dados<-read.dta("caminho do arquivo")
1 Acho que esse pacote j a vem instalado. Sen~ao, se re ra a sec~ao sobre instalar pacotes
2 Esse 
e um jarg~ao tpico da area

11
12 CAPITULO 4. CARREGANDO DADOS

O nome da variavel pode ser o nome que voc^e quiser:a,b,c,dados,nossasenhoraessetutorialehchato


etc. Mas lembre que voc^e vai digitar desse nome sempre que quiser usar os da-
dos mais tarde... Assim, os nomes devem ser curtos, mas informativos. Caso
contrario, quando voc^e abrir o arquivo no dia seguinte, voc^e di cilmente vai
ser capaz de lembrar o que e cada uma das variaveis que voc^e de niu as 2
da manh~a do dia anterior... Como o R n~ao aceita variaveis com nomes com
espaco - por exemplo, \anos de escolaridade"n~ao e um nome aceitavel pelo R -
o padr~ao e separar as palavras com ponto: a variavel \anos de escolaridade"vira
\anos.de.escolaridade".
Uma coisa importante de se notar e que o nome da variavel e sensvel ao uso
da maiuscula. Logo, dados e Dados seriam duas variaveis diferentes (porque
uma usa o d maiusculo)
E como resolver o problema do caminho?
Felizmente, os Deuses do R sorriram sobre nos e criaram uma alternativa:
ao inves de digitar o caminho do arquivo, basta digitar file.choose(). Apos
executar o comando, o programa deve abrir uma janela para voc^e procurar o
arquivo (a mesma que abre quando voc^e mandar o word abrir um arquivo, por
exemplo)
Nosso comando caria, no m:
dados<-read.dta(file.choose())

N~ao esquecam do par^enteses que abre e fecha sem nada no le.choose.


Observem, entretanto, que n~ao usar o nome do caminho pode di cultar a
sua vida. Se voc^e criar um script e mandar ele rodar, ele vai parar para voc^e
escolher o local do arquivo, o que pode ser inconveniente. Assim, temos bons
motivos para - as vezes - usar o caminho.

4.2 Importando arquivos do Excel

O R n~ao l^e, nativamente, arquivos do excel (.xls). Felizmente, ele l^e uma
bizarrice chamada \texto (separado por tabulac~oes)"3 . A boa notcia e que o
excel salva este tipo de arquivo. Assim, temos que salvar o arquivo nesse formato
no excel (esse formato so salva uma planilha por vez).
Notem que o R l^e os dados como \vetores"coluna, logo se tivermos uma base
de dados cross-section com idade, educac~ao, renda, precisamos ter uma coluna
com idade, outra com renda, outra com educac~ao.
Supondo que os dados tem a primeira linha como nome da variavel em
quest~ao (logo, no exemplo acima, a primeira linha da Planilha teria escrito
\Educac~ao", \Renda", etc.) e que o separador de casas decimais e a vrgula,
podemos usar o comando read.delim2:
dados<-read.delim2(file.choose())

O R l^e muitos outros formatos, inclusive o formato .csv. O csv (sigla para
comma sepparated values ) e o formato que muitas bases de dados disponibili-
zam os dados - incluindo aqui o BCB e o ipeadata. O R e capaz de ler csv e
disponibiliza dois comandos: read.csv e read.csv2. O primeiro caso e quando o
3 Existem varias maneiras de salvar como texto. So serve texto (Separado por ta-
bulaco
~es)
4.3. ARRUMANDO A PLANILHA 13

csv e,de fato, separado por vrgulas, ou seja, o sistema separa cada campo com
uma vrgula. Porem, em pases como o Brasil, que usam a vrgula para separar
as casas decimais, isso surge como um problema: a vrgula esta separando dois
campos no csv ou a parte decimal? Uma soluc~ao para isso e separar os campos
com ponto e vrgula. Nesse caso, para importar o csv, voc^e deve usar o comando
read.csv2.
O excel tambem e capaz de salvar arquivos em .csv, e como no caso do .txt,
ele so salva uma planilha por vez.
 possvel importar um arquivo .xlsx para o R, mas para isso e necessario
E
um pacote espec co. O autor nunca viu necessidade em fazer isso e n~ao conhece
nenhum pacote com essa func~ao

4.3 Arrumando a planilha

Para as regress~oes rodarem corretamente, a planilha deve estar corretamente


organizada. N~ao e difcil: cada coluna deve conter uma variavel de interesse.
Deve car mais claro com um exemplo: suponha que queremos rodar a
regress~ao de efeitos do tamanho da turma sobre a nota media da turma em um
exame. Ainda adicionamos como variavel de controle a renda media dos pais
da turma. Temos os dados de 5 turmas. Teramos a seguinte organizac~ao da
tabela:

Numero da Turma Nota Media Numero de Alunos Renda Media


1 8 20 10000
2 5 40 3000
3 6 30 4000
4 4 35 4000
5 7 35 8000

(De fato, o numero da turma n~ao e de nenhum interesse para a regress~ao)

4.4 Usando o attach e names

Uma vez carregados os dados, para voc^e poder efetivamente usa-los, voc^e
ainda precisa indicar ao R que aquele conjunto de dados e o principal. Com
isso, as variaveis que voc^e de niu na planilha ser~ao acessveis via o nome delas.
Faca:

attach(dados)
names(dados)

O primeiro comando explica ao R que \dados"deve ser a fonte de dados


e que as variaveis ali devem poder ser chamadas pelo \nome". O segundo
comando exibe o nome das variaveis. Normalmente, ele n~ao e alterado em
relac~ao ao arquivo importado, mas o R troca todos os espacos por ponto.
Logo, uma variavel chamada \Renda per capita"passaria a se chamar, no R,
\Renda.per.capita".
D^e uma respirada agora e tente colocar um arquivo qualquer para o R ler.
14 CAPITULO 4. CARREGANDO DADOS

4.5 Alguns problemas adicionais de dados

O R tem algumas idiocrasias para selecionar dados, mas que uma vez que
voc^e se acostuma e muito facil usar. A forma mais inteligente de ilustrar essa
sec~ao e com um exemplo. Suponha que voc^e tem um conjunto de dados (que voc^e
chamou de \dados") com as variaveis salario, anos de estudo, mulher (Dummy
de valor 1 se e mulher)4 .
Se quisessemos selecionar da primeira a decima linha do nosso conjunto de
dados, poderamos fazer:
dados2<-dados[1:10,]

Explicando o que cada um deles faz: dados2 e simplesmente o nome do novo


conjunto de dados, que tera apenas dados da primeira a decima linha. Os col-
chetes simplesmente servem para especi car o que voc^e esta selecionando dentro
do seu conjunto de dados. O 1:10 escolhe as linhas que estamos selecionando
(da primeira a decima).
Suponha agora que queremos escolher os dados apenas para mulheres e criar
um novo conjunto de dados apenas com os dados para mulheres. Basta digitar:
dadosm<-dados[mulher==1,]

Explicando o que cada um deles faz: dadosm e simplesmente o nome do


novo conjunto de dados, que tera apenas dados de mulheres. Os colchetes
simplesmente servem para especi car o que voc^e esta selecionando dentro do seu
conjunto de dados. Como voc^e apenas quer mulheres, selecione apenas valores
da Dummy \mulher"que s~ao iguais a 1. E  exatamente isso que \mulher==1"faz.
Observe que usamos dois iguais. Ha ainda uma vrgula depois disso, indicando
que queremos todas as colunas da base de dados.
Observe que o R e muito esperto. Suponha que o inves de voc^e ter uma
dummy, voc^e tem um campo \sexo" com opc~oes masculino e feminino. O R
e capaz de interpretar essas duas opc~oes e rodar a regress~ao, sem a necessi-
dade de criar uma dummy explicitamente. Apenas teramos que selecionar
[sexo=="mulher"], ao inves de digitar [mulher==1]

4 Eu estou supondo que voc^e usou attach neste conjunto de dados


Cap
tulo 5

Regress~ao
Ate agora n~ao zemos nada alem de instalar pacotes e importar dados.
Vamos nalmente fazer econometria, e comecaremos com a regress~ao simples
usando MQO.
Rodar uma regress~ao e absolutamente banal. Vamos supor que voc^e im-
portou e deu \attach"em uma planilha que tem como dados y,x1,x2,x3,x4.1
Suponha que voc^e quer explicar y em func~ao de x1,x2,x3, ou seja, fazer uma
regress~ao de y sobre x1,x2,x3. Faca:
lm(y~x1+x2+x3)
 melhor fazer:
Isso vai apenas exibir os resultados da regress~ao. E
modelo1<-lm(y~x1+x2+x3)
O til separa o que e variavel explicativa (a direita do til) de variaveis expli-
cadas (a esquerda do til). A soma somente estabelece que as variaveis x1,x2,x3
s~ao as variaveis explicativas e que n~ao ha interac~ao entre elas. Vale notar que o
sistema automaticamente adiciona o intercepto.
E se quisessemos criar uma interac~ao entre variaveis? Suponha que x4 e
uma dummy e queremos criar uma interac~ao entre ela e a variavel explicativa
x1. Basta fazer:
modelo1<-lm(y~x1*x4+x2+x3)
O sistema adiciona x4 no intercepto automaticamente, bem como o x1 sem
a interac~ao da dummy. O que a formula acima faz em termos econometricos e
estimar: y = 0 + 0 x4 + 1 x1 + 1 (x1 x4 ) + 2 x2 + 3 x3
Podemos usar o comando lm para realizar um mnimo quadrado ponderado:
o comando lm aceita um "peso" para ponderar os dados. Suponha que temos
uma regress~ao de y em x1 e sabemos que o peso que deixa os dados homo-
cedasticos e 1/x1. Para estimar essa regress~ao:
modelo1<-lm(y~x1, weight = 1/x1)
A func~ao summary nos da um resultado muito parecido com o resultado do
gretl. Basta fazer:
1A aus^encia de criatividade e notoria

15
16 CAPITULO 5. REGRESSAO
~

summary(modelo1)

O valor estimado, o erro padr~ao, a estatstica-t, o p-valor, o teste F para


todas as variaveis explicativas, o R-quadrado ajustado s~ao exibidos no sumario.

5.1 Erros Robustos

Precisaremos carregar o pacote sandwich e o pacote lmtest. Felizmente, ao


carregar o pacote AER, ambos os pacotes s~ao carregados. Simplesmente digite
library(AER). Para obter os erros padr~oes robustos e estatsticas t associadas
para o modelo1, basta fazer:
coeftest(modelo1,vcovHC)

Pode se usar varios tipos de estimador robustos. Para obter resultados iguais
ao gretl, temos que usar o HC1. Basta fazer:
coeftest(modelo1,vcovHC(modelo1,"HC1"))
 possvel obter estimadores robustos a heterocedasticidade e a autocor-
E
relac~ao usando a opc~ao vcovHAC ao inves de vcovHC. Assim, teramos:
coeftest(modelo1,vcovHAC)

5.2 Teste F para comparar dois modelos

Suponha agora que temos a base de dados salario, escolaridade, experi^encia


e a dummy mulher. Queremos saber se o fato de ser mulher afeta o rendimento,
considerando interac~oes entre a dummy e escolaridade experi^encia. O modelo
1 e o modelo restrito (salario sendo explicado por escolaridade e experi^encia) e
o modelo 2 e o modelo irrestrito (salario sendo explicado pela dummy mulher,
escolaridade, experi^encia e pela interac~ao entre a dummy e escolaridadee
a dummy e experi^encia. Como realizar o teste F para comparar os dois
modelos? O comando anova executa o teste:

anova(modelo1,modelo2)

O valor da estatstica F e o p-valor s~ao apresentados.

5.3 Regress~
oes com umas das vari
aveis na forma

logar
tima

Suponha que queremos realizar uma regress~ao com uma das variaveis com
log. A soluc~ao mais facil e criar uma nova variavel que e a log da outra. Suponha
que queremos regredir log(y) sobre x. Faca:
ly<-log(y)
modelo1<-lm(ly~x)
5.4. PROBITS E LOGITS 17

Onde ly e simplesmente o nome da variavel de log(y), e pode ser dado qual-


quer nome. A mesma ideia vale para variaveis ao quadrado:
xquadrado<-x^2
modelo1<-lm(y~x+xquadrado)

5.4 Probits e Logits

Os modelos probit e logit s~ao muito usados quando observamos uma esco-
lha - entrar ou n~ao no mercado do trabalho, dar ou n~ao um emprestimo - e
queremos entender os determinantes daquela escolha. Em particular, a variavel
dependente e uma probabilidade, logo so pode assumir valores entre 0 e 1.
O R tem um comando unico para probit e logit: o glm(). O comando pode
ser usado ate mesmo para regress~oes por MQO, mas nos focaremos aqui no caso
de probit e logit.
Como o glm e uma generalizac~ao do comando lm, ele e bastante parecido:
podemos escrever a regress~ao igual faramos no comando lm. O que muda e que
o comando nos permite escolher a \famlia"da variavel dependente: gaussiana
(MQO padr~ao), binomial, poisson. Nos interessa aqui o caso da binomial: a nal,
variaveis que so assumem valor 0 e 1 tem distribuic~ao de bernoulli, que n~ao
passa de um caso especial da binomial. O logit e o probit s~ao as duas opc~oes
que podemos considerar para resolver o problema de maxima verossimilhanca.
S~ao, em outras palavras, as duas maneiras de ligar a variavel dummy com as
nossas variaveis independentes.
Assim, o comando toma duas opc~oes, alem das tradicionais opc~oes do co-
mando lm: family e link. Family e a famlia da distribuic~ao - no nosso caso, a
binomial. E link e como nos vamos ligar a dummy com a variavel explicativa:
no nosso caso, ou e a distribuic~ao logstica (logit) ou a normal (probit).
Se as variaveis que queremos regredir s~ao y em x, o comando para a probit
e:

glm(y ~ x, family = binomial(link="probit"))

Para usarmos o logit, basta mudar a opc~ao link de "probit\ para "logit\. O
comando nos da as estatsticas as quais estamos acostumados, alem de algumas
outras, incluindo o numero de iterac~oes ate o problema ser resolvido.
Sabemos que, quando estimamos o probit ou logit, a interpretac~ao do par^ametro
n~ao e facil: como o modelo n~ao e linear, o efeito da variavel independente sobre
a variavel dependente depende do valor da variavel independente. Alguns pa-
cotes ajudam a visualizar o efeito neste caso. Um deles e o e ect. Vale a pena
tambem consultar o task view de econometria para ver possveis sugest~oes.

5.5 Vari
aveis Instrumentais

O pacote AER fornece uma opc~ao facil de fazer a estimac~ao por variaveis
instrumentais via o comando ivreg:
ivreg(y~x1+x2+x3+x4|z1+z2+z3+z4)
18 CAPITULO 5. REGRESSAO
~

Explicando: a parte do y x1+x2+x3+x4 e a formula da regress~ao. E |z1+z2+z3+z4


s~ao os instrumentos. Observe que, se x1 e instrumento para x1, ele deve ser
adicionado a lista de instrumentos, exatamente como e feito no Gretl. Se ti-
vermos uma unica variavel endogena, x1; dois instrumentos, z1 e z2; e 3 variaveis
exogenas, x2,x3,x4, podemos rodar uma regress~ao de variaveis instrumentais:
ivreg(y~x1+x2+x3+x4|z1+z2+x2+x3+x4)
Cap
tulo 6

Loops e condicionais
Como qualquer linguagem de programaca~o, o R aceita loops e condicio-
nais. A ideia do condicional e permitir a linguagem a realizar uma determinada
operac~ao se uma condic~ao e satisfeita. Caso contrario, ela faz outra operac~ao.
Os loops permitem automatizar tarefas que requerem repetir uma determinada
operac~ao n vezes. Os conceitos parecem bastante abstratos, mas caram obvios
com os exemplos que seguem nesse captulo.
Existem dois operadores muito usados para fazer loops : o while e o for.
O for permite que voc^e faca uma operac~ao n vezes, com n sendo um numero
fechado. Por exemplo, suponha que voc^e quer somar todos os numeros entre 0
e 10. Podemos fazer isso usando o for:
a <- 0

for (i in 1:10){
a <- a+i
}

Primeiro, criamos uma variavel a, com valor zero. No for, de nimos que
queremos que i varie entre 1 e 10. Assim, o programa vai fazer o seguinte:
1. Primeira etapa: i = 1
(a) Pegue a (Que e igual a zero)
(b) Faca a + 1
(c) De na a como a + 1, ou seja, a = 1
2. Segunda etapa: i = 2
(a) Pegue a (Que e igual a 1)
(b) Faca a + 2
(c) De na a como a + 2, ou seja, a = 3
3. Terceira etapa: i = 3
(a) Pegue a (Que e igual a 3)
(b) Faca a + 3

19
20 CAPITULO 6. LOOPS E CONDICIONAIS

(c) De na a como a + 3, ou seja, a = 6


etc etc etc...
A soma disso dara 55. Observe que seria muito mais simples fazer sum(1:10).
O exemplo e meramente ilustrativo, e para muitas situac~oes e melhor usar os co-
mandos como sum, por exemplo. O for e muito usado para realizar simulac~oes,
que e uma area muito interessante e exploraremos na sec~ao de exemplos.
O operador de condic~oes e o if. Por exemplo, suponha que queremos separar
quais s~ao os numeros maiores que 1 em um vetor gerado aleatoriamente pelo R,
a partir de uma distribuic~ao normal. Ainda melhor, queremos que ele diga - em
palavras - se o numero e maior que 1 ou n~ao. Vamos ter que usar um for e um
if.

test <- rnorm(100,2)

for (i in 1:100){
if (test[i] > 1){
print ("Maior que 1")
} else{
print("menor que 1")
}
}

Dissecando o codigo:
 O test <- rnorm(100,2) gera um vetor com numeros 100 aleatorios ge-
rados de uma normal de media 2
 O for permite com que o teste seja realizado para cada um dos numeros
do vetor
 O if funciona da seguinte maneira: pegue a i-esima posic~ao do vetor
test. Essa posic~ao vai variar gracas ao for. No par^entese, estabelecemos
a condic~ao: o numero na posic~ao i do vetor test e maior que 1. Se isso
acontece, ent~ao realizamos a operac~ao dentro das chaves: o sistema mostra
"Maior que 1". E se o numero n~ao for maior que 1? Nesse caso, o programa
avanca para a posic~ao else e executa o que esta dentro das chaves: nesse
caso, pedimos para ele mostrar "menor do que 1"
Cap
tulo 7

Miscel^aneas
Essa sec~ao e apenas um conjunto de comandos e truques que n~ao encontrei
espaco em outras sec~oes

7.1 Vetor vazio

As vezes e necessario criar um vetor vazio. Para isso, basta:


v<-length(x)

Onde v e o nome do novo vetor e length(x) estabelece o tamanho do vetor (x).


Logo, v<-length(100) cria um vetor vazio com 100 espacos. Podemos sempre
criar um vetor com 100 posic~oes iguais e depois substituir o que queremos. Para
isso, basta fazer v<-rep(0,100), o que vai gerar um vetor com 100 zeros.

7.2 Eliminando -Inf,Inf,NaN

N~ao e raro que, ao realizar transformac~oes, coisas inutilizaveis como -Inf,Inf


ou NaN aparecam. Basta pensar que ao tirar log(0), voc^e obtem -Inf, e e
impossvel rodar uma regress~ao neste caso. A melhor soluc~ao para isso e usar o
comando which(). Neste caso, suponha que ly e log(y). Para substituir os -Inf
por NA (N~ao observavel, o R simplesmente ignora), basta fazer:
ly[which(ly=="-Inf")]<-NA

E agora e possvel realizar a regress~ao

7.3 Trabalhando com vetores

O R e excelente para trabalhar com vetores, e todos os dados carregados s~ao


lidos como vetores. A beleza do programa e que ele consegue realizar operac~oes
para cada \item"do vetor e criar um novo vetor sem di culdades. Eu usei isso
durante todo o manual sem fazer essa observac~ao: pense no caso de elevar um
conjunto de variaveis ao quadrado, por exemplo. No R, basta elevar o vetor ao
quadrado, como zemos na sec~ao 5.3.

21
22 CAPITULO 7. MISCELANEAS
^

Isso se aplica a quase tudo: se voc^e tem um vetor de numero de alunos


na escola e outro do numero de professores na escola, para obter a raz~ao alu-
nos/professor, basta dividir um vetor pelo outro. Apesar de parecer absoluta-
mente banal, muitos programas n~ao s~ao capazes de fazer isso.
Cap
tulo 8

Reproduzindo resultados do
R
Obviamente, depois de estimar diversos modelos etc, voc^e vai querer re-
produzir os resultados obtidos. O R Studio tem uma opc~ao propria chamada
Markdown, que permite trabalhar com o word e outros formatos. O R Studio
tambem e capaz de trabalhar com o LATEX, amplamente usado no meio cient co.
Se voc^e n~ao tem nenhum interesse no LATEX, pule os proximos 2 paragrafos.
Latex (formalmente, LATEX) e um editor de texto/linguagem de programaca~o
amplamente usado na comunidade cient ca. Este manual, por exemplo, foi todo
feito usando LATEX. Porem, e completamente fora do escopo deste texto tratar
sobre o tema. Vale dizer, entretanto, que o LATEX gera belssimos documentos
(como esse1 ) e que a Wikipedia tem um livro de como usar o LATEX.
Voltando ao R, o R Studio tras uma ferramenta interna que permite usar
comandos LATEX e reproduzir resultados obtidos no R diretamente em docu-
mentos .tex: e o Sweave. Basta ir em les, new le, R Sweave, e pronto. Os
que sabem usar LATEX devem olhar o ultimo captulo do Applied Econometrics
with R.
O Markdown permite que voc^e crie documentos html, pdf(atraves do LATEX)
e Word. Ele tem integrac~ao direta com o R Studio, e pode ser acessado no
les/new le/R Markdown. O R Studio tem dois tutoriais de como usar o
Markdown e o site do R Studio oferece alguns tutoriais para usar essa opc~ao.
A ideia dessa integrac~ao e que voc^e poderia digitar, diretamente, comandos
do R no arquivo de texto. Mas esse comandos geram os mesmos resultados
apresentados no programa. E bom, o sumario de regress~ao do R e util, mas
feio. Uma soluc~ao s~ao os pacotes xtable e stargazer, apesar do primeiro so
gerar resultados para o LATEX e para o Markdown. O stargazer serve para
sumarios de regress~ao, e colocando a opc~ao type="text" gera uma tabela que
pode ser prontamente copiada para o word. Existem opc~oes para Markdown e
LATEXtambem. O stargazer permite gerar tabelas com resultados de diferentes
modelos na mesma tabela. Se temos dois modelos estimados por MQO que
chamamos de m1 e m2, podemos fazer:

stargazer(m1,m2,type="text")
1 Ou n~ao

23
24 CAPITULO 8. REPRODUZINDO RESULTADOS DO R

O stargazer tambem permite reproduzir os coe cientes estimados com testes


robustos a heterocedasticidade.
Cap
tulo 9

Exemplo pratico

9.1 Regress~
ao

Chega de bla bla bla! Vamos a um exemplo pratico. Carregue o pacote


AER. O AER traz diversas bases de dados - incluindo dados do livro do Stock
e Watson.
Carregue os dados das escolas da California, que s~ao os dados usados nos
captulos 4 e 5 do Stock e Watson. Para isso, basta digitar data(``CASchools").
D^e attach e names para obter os nomes. A lista provavelmente sera: district,
school, county, grades, students, teachers, calworks, lunch, computer, expendi-
ture, income, english, read e math. A lista do que cada uma dessas variaveis
signi ca e de onde foram obtidos os dados podem ser encontradas na docu-
mentac~ao do pacote do AER (ver a sec~ao 10) ou no livro do Stock e Watson.
O que importa e que read e math s~ao as notas medias de leitura e matematica,
respectivamente. O resto que usaremos e auto-explicativo.
Vamos comecar estudando como a quantidade de alunos por professor afeta
a nota de matematica. A primeira coisa a se fazer e criar uma nova variavel.
Chamarei de spt (students per teachers ), mas o nome ca a gosto do fregu^es.
Ela deve ser de nida como students/teachers.
Rodaremos a regress~ao. Primeiro, faca uma regress~ao simples usando ma-
tematica como variavel explicada e a nossa variavel de alunos por professores
como variavel dependente. Chame esse modelo de "modelo.0".
Voc^e deve descobrir que ao aumentar em um o numero de alunos por profes-
sores, a nota de matematica cai por aproximadamente dois pontos. O resultado
e estatisticamente signi cante a qualquer nvel de signi c^ancia usual.
Podemos criar variac~oes em cima disso. Controlar pela renda parece inte-
ressante, pelos motivos que ja conhecemos. Faca outro modelo, o modelo.1, no
qual usamos como variaveis dependentes a quantidade de alunos por professores
e a renda. Dessa vez, spt n~ao e estatisticamente signi cante, mas a renda e -
um resultado bastante curioso.
Vamos adicionar mais um controle: os gastos por aluno, que e a variavel
expenditure. Faca o modelo tr^es sendo a regress~ao da nota de matematica sobre
spt, renda e gastos por aluno. Curiosamente, se voc^e aumentar o gasto por
aluno, os dados apontam uma reduc~ao da nota de matematica - e o coe ciente
e estatisticamente signi cante. Em compensac~ao, a variavel de estudante por

25
26 CAPITULO 9. EXEMPLO PRATICO


professor (spt) volta a ser signi cante e a renda continua ser signi cante - e
ambos os coe cientes tem os sinais esperados.
Sera que, uma vez controlando os gastos por aluno, as outras variaveis s~ao
irrelevantes? Isto e, sera que n~ao importa a renda dos pais nem a quantidade
de alunos por professor, mas apenas o gasto por aluno? Podemos testar esta
hipotese de maneira simples. De na o modelo 3 como sendo a regress~ao de nota
de matematica sobre gastos por aluno (expenditure), e apenas essa variavel
explicativa. Para testar a nossa hipotese, basta usar o comando anova e com-
parar os modelos 2 e 3. Descobrimos que rejeitamos a hipotese nula de que os
coe cientes associados a spt e renda s~ao zero.

9.2 A Lei dos grandes n


umeros

Todos nos sabemos a lei dos grandes numeros. De maneira bastante informal,
um numero grande o bastante de observac~oes nos permite estimar corretamente
a media de uma distribuic~ao. Por exemplo, se jogarmos duas moedas para o alto
e calcular a probabilidade de dar cara, pode ser que a probabilidade sai 1 (duas
caras), 0 (duas coroas), ou meio (uma cara e uma coroa). Ninguem negaria que
so a ultima estimativa esta correta. Como podemos testar isso no R?
Precisaremos de fazer o seguinte: faca um numero n(alto, mais de 500) de
observac~oes de uma bernoulli. Assim, temos uma moeda: 1 e cara e 0 e coroa
(ou o contrario). Sabemos que E(x) = p, se x tem distribuica~o de Bernouli(p).
Logo, se tirarmos a media para cada etapa - ou seja, para cada lancamento
da moeda virtual do R - deveramos ter a probabilidade de obter um valor 1.
Fazendo isso no R:
v <- rbinom(500,1,p = 1/2)
zz <- c(v[1],rep(0,499))
for (i in 2:500){
zz[i] <- sum(v[1:i])/i
}
plot(zz)
lines(x = 1:500, y = rep(0.5,500),col = 2, lwd= 3)

O codigo acima merece atenc~ao: primeiro, fazemos v, um vetor com 500


valores obtidos de uma binomial com n = 1 (ou seja, uma bernoulli) e com
probabilidade de sucesso de 1/2. Na linha seguinte, o vetor zz tem como primeiro
valor o primeiro valor de v e o valor seguinte e um conjunto de zeros. Por que
zero? Porque usaremos o for para colocar a media depois de cada lancamento.
A media e a soma de todos os lancamentos ate o i-esimo (por isso sum(v[1:i]))
dividido pelo numero de lancamentos ate aquela etapa (i). Cada media vai
tomar uma posic~ao no vetor zz. Pedimos o plot de zz e criamos uma linha que
tem valor no eixo y = 0:5, 8x. Colorimos ela de vermelho (col = 2) e deixamos
ela mais grossa (lwd = 3). Devemos obter algo como na Figura 9.1.
Observem que o meu codigo n~ao e o mais e ciente e nem sequer e bonito.
O gra co pode ser ligeramente diferente: vai depender dos valores escolhidos
pela aleatorizac~ao. O importante e que, conforme o numero de simulac~oes vai
crescendo, a probabilidade vai se aproximando mais de 0.5: a probabilidade
verdadeira, que e indicada pela linha vermelha.

9.2. A LEI DOS GRANDES NUMEROS 27

Figura 9.1: A Lei dos Grandes Numeros, ilustrada


28 CAPITULO 9. EXEMPLO PRATICO

Cap
tulo 10

Livros e Links
O site do cran permite voc^e baixar o R. Alem disso, e sempre uma boa
refer^encia para procurar pacotes e onde voc^e pode encontrar os task views:
https://cran.r-project.org/
O R Book do Michael Crawley e bastante util para aprender sobre o funci-
onamento do R em geral, apesar de ele n~ao usar nenhum pacote, o que faz com
que algumas soluc~oes dele para os problemas sejam extremamente ine cientes e
trabalhosas - mas muito uteis para aprender como o R funciona.
O Applied Econometrics with R traz como fazer basicamente tudo que e
coberto no curso de Econometria I usando o R - regress~oes, estimadores robustos,
dados em painel e variaveis instrumentais.
Cada pacote tem uma documentac~ao, muitas vezes com exemplo, que pode
ser util para entender como usar os comandos do pacote. Esta documentac~ao
pode ser acessada no site do cran

29
30 CAPITULO 10. LIVROS E LINKS
Cap
tulo 11

Comandos importantes
 remove(x)/rm(x):Remove x do R. x pode ser uma func~ao, vetor, da-
taframe. Para limpar tudo, use rm(list=ls()). Use com cuidado esse co-
mando!
 attach(x):Faz os nomes de x serem diretamente acessveis ao R. x e um
dataframe
 names(x):nomes das variaveis em um dataframe dataframe
 lm(y x,...):Faz uma regress~ao linear. Y e a variavel dependente e
x s~ao as variaveis independentes. Aceita varias opc~oes, inclusive pesos,
dataframes. Ver sec~ao 5 e a propria documentac~ao do R.
 plot(y,x,...):Faz o plot da varavel y no eixo y e x no eixo x. Pode n~ao se
especi car a variavel x. Nesse caso, o plot e valor da variavel no eixo y e
a posic~ao daquele valor no vetor no eixo x. Pode ser usado para multiplas
classes, logo plot com um objeto do tipo Serie temporal coloca no eixo x
as datas.

31

Вам также может понравиться