Atenção: Esta lista não vale ponto e não precisa entregar, mas é útil para aplicar o conteúdo de variáveis instrumentais
Antes de iniciar, vamos instalar os pacotes necessários (comando install.packages) e depois requisitar eles (comando library). Depois de instalado em seu computador, não precisa instalar mais, só requisitar.
Por isso, depois de instalar, coloque um # em frente ao install.packages para que não instale novamente. (Quando se coloca um # em frente ao comando, esse comando se torna um comentário)
#install.packages("dplyr") #pacote para limpar as bases
#install.packages("AER") #pacote para fazer o MQ2E
#install.packages("stargazer") #pacote para deixar os resultados das regressões formatados
library(dplyr)
library(AER)
library(stargazer)
options(scipen = 999) #Desligamos a notação cientifica
A base de dados utilizada será a PNAD 2014-Pesquisa Nacional por Amostra de Domicílios, pois neste ano está disponível o suplemento de mobilidade, contendo a educação da mãe e do pai. Estamos utilizando somente a base de mulheres que trabalham (ou seja, que tem renda positiva). As variáveis contidas na base são as seguintes:
X | Variável identificadora da pessoa |
---|---|
uf | Codigo do estado |
salario | Rendimento mensal em dinheiro no trabalho principal da semana de referência |
raca | Dummy indicando 1=Branco,0=Negro |
educ | Educação da Mulher |
idade | Idade |
educpai | Educação do pai |
educpai | Educação da mãe |
Foram feitos alguns ajustes para facilitar o exercício: foram removidos observações que não continham alguma dessas variáveis, e a variável de educação foi codificado usando a estratégia de Mahlmeister et al. (2019). É válido lembrar que nem todas as mulheres da PNAD foram selecionadas para responder o suplemento de mobilidade, por isso o número de observações foi reduzido.
A base está no Stoa, na parte de Variáveis instrumentais e chama “Base de Dados PNAD-2014-adaptada”
Vamos abrir a base de dados e nomea-la como “df” (abreviação de data frame). Lembre-se que para abrir a base de dados, ela deve estar na pasta do seu projeto. Caso não esteja na pasta, você pode colocar o endereço completo de onde esteja.
df<-read.csv("Bases/PNAD2014.csv")
A ideia é reproduzir o exemplo 15.1 do Wooldridge, utilizando dados reais do Brasil
Vamos estimar o retorno sobre o salário da educação das mulheres. Ou seja, queremos estimar: \[log(salario)=\beta_0+\beta_1educ+u\]
Vamos primeiro estimar um MQO simples. Interprete os valores! Qual é o viés que podemos ter nessa regressão?
MQO<-lm(log(salario)~educ,df)
summary(MQO)
##
## Call:
## lm(formula = log(salario) ~ educ, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.4098 -0.5331 -0.2187 0.1302 21.3031
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.15239 0.11084 55.505 < 0.0000000000000002 ***
## educ 0.08777 0.01111 7.897 0.00000000000000353 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.422 on 4655 degrees of freedom
## Multiple R-squared: 0.01322, Adjusted R-squared: 0.01301
## F-statistic: 62.37 on 1 and 4655 DF, p-value: 0.000000000000003529
Quais são os pressupostos para que educação do pai seja um bom instrumento?
Primeiramente, educação do pai não pode estar correlacionado com \(u\) do MQO estimado anteriormente. Em segundo lugar, a educação das mulheres e educação do pai dessa mulher devem estar correlacionados. Vamos então estimar:
corr<-lm(educ~educpai,df)
summary(corr)
##
## Call:
## lm(formula = educ ~ educpai, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12.889 -1.489 1.078 2.078 7.078
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.35569 0.06048 138.16 <0.0000000000000002 ***
## educpai 0.28330 0.01084 26.14 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.982 on 4655 degrees of freedom
## Multiple R-squared: 0.128, Adjusted R-squared: 0.1278
## F-statistic: 683.3 on 1 and 4655 DF, p-value: < 0.00000000000000022
Vamos salvar os valores previstos da educação:
df$educ_pred <- corr$fitted.values
Após salvar, vamos fazer o salário como função da educação predita:
IV<-lm(log(salario)~educ_pred,df)
Vamos colocar as estimações de MQO e de IV lado a lado para podermos comparar is resultados. Interprete a diferença nas estimações. Qual é o sentido do viés?
stargazer(MQO,IV,type="text",column.labels = c("MQO","IV"))
##
## ============================================================
## Dependent variable:
## ----------------------------
## log(salario)
## MQO IV
## (1) (2)
## ------------------------------------------------------------
## educ 0.088***
## (0.011)
##
## educ_pred 0.192***
## (0.031)
##
## Constant 6.152*** 5.166***
## (0.111) (0.296)
##
## ------------------------------------------------------------
## Observations 4,657 4,657
## R2 0.013 0.008
## Adjusted R2 0.013 0.008
## Residual Std. Error (df = 4655) 2.422 2.428
## F Statistic (df = 1; 4655) 62.368*** 38.083***
## ============================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Vamos utilizar duas variáveis como variáveis instrumentais: educação da mãe e educação do pai. Para isso vamos fazer um MQ2E. Vamos primeiro fazer manualmente , e depois fazemos usando o comando no R.
#Primeiro estágio
prim_est<-lm(educ~educpai+educmae,df)
#Valor previsto
df$educ_predMQ2E<- prim_est$fitted.values
#Segundo estágio
MQ2Emanual<-lm(log(salario)~educ_predMQ2E,df)
summary(MQ2Emanual)
##
## Call:
## lm(formula = log(salario) ~ educ_predMQ2E, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.0847 -0.5374 -0.1992 0.1388 20.8790
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.49598 0.24598 22.343 < 0.0000000000000002 ***
## educ_predMQ2E 0.15724 0.02576 6.104 0.00000000112 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.428 on 4655 degrees of freedom
## Multiple R-squared: 0.007941, Adjusted R-squared: 0.007728
## F-statistic: 37.26 on 1 and 4655 DF, p-value: 0.000000001118
Porque é melhor fazer o MQ2E com pacote e não manualmente? (Veja página 488 Wooldridge)
Vamos usar o pacote AER, e dentro dele vamos usar o comando ivreg. Digite help(ivreg) para ver informações sobre o comando.
help(ivreg)
## starting httpd help server ... done
MQ2Epct<-ivreg(formula=log(salario)~educ|educmae+educpai,data=df)
Vamos comparar as três estimações: MQO, IV com educação do pai como instrumento e MQ2E com educação do pai e da mãe como instrumento (manual e com o pacote). Pense nos potenciais problemas com estas variáveis instruementais.
stargazer(MQO,IV,MQ2Emanual,MQ2Epct,type="text",column.labels = c("MQO","IV","MQ2Emanual","MQ2Epct"))
##
## ===========================================================================
## Dependent variable:
## -------------------------------------------
## log(salario)
## OLS instrumental
## variable
## MQO IV MQ2Emanual MQ2Epct
## (1) (2) (3) (4)
## ---------------------------------------------------------------------------
## educ 0.088*** 0.157***
## (0.011) (0.026)
##
## educ_pred 0.192***
## (0.031)
##
## educ_predMQ2E 0.157***
## (0.026)
##
## Constant 6.152*** 5.166*** 5.496*** 5.496***
## (0.111) (0.296) (0.246) (0.246)
##
## ---------------------------------------------------------------------------
## Observations 4,657 4,657 4,657 4,657
## R2 0.013 0.008 0.008 0.005
## Adjusted R2 0.013 0.008 0.008 0.005
## Residual Std. Error (df = 4655) 2.422 2.428 2.428 2.432
## F Statistic (df = 1; 4655) 62.368*** 38.083*** 37.260***
## ===========================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Extra: Como poderíamos fazer as estimações incluindo raça como variável explicativa? Se quiser, faça em casa este mesmo exercício incluindo raça.