Aula de laboratório - Variáveis Instrumentais

Autor

Rafael Bressan

Data de Publicação

7 de agosto de 2023

Retornos da educação para mulheres casadas

Vamos analizar os retornos de educação para mulheres casadas com os dados mroz do pacote wooldridge. Filtraremos para usar somente as observações que onde salário não seja faltante. Como variável instrumental para educação usaremos a educação do pai. Você acha que este é um bom instrumento? Por quê?

library(wooldridge)
library(fixest)
library(ggplot2)
library(data.table)
library(modelsummary)
data("mroz")

df <- mroz[!is.na(mroz$wage), ]

Crie uma tabela com as estatíticas descritivas dos dados. Vamos usar o Copilot para criar o código para nós. Uma sugestão de prompt é:

Prompt
Copilot usando a linguagem R, crie uma tabela de estatísticas descritivas para todas as variáveis do data frame df utilizando a função datasummary do pacote modelsummary. As estatísticas devem ser número de observações, número de valores únicos, média e desvio padrão.
Código
datasummary(All(df) ~ Ncol + NUnique + Mean + SD + Min + Median + Max, data = df)
Ncol NUnique Mean SD Min Median Max
inlf (N = 428) 1 1.00 0.00 1.00 1.00 1.00
hours (N = 428) 305 1302.93 776.27 12.00 1365.50 4950.00
kidslt6 (N = 428) 3 0.14 0.39 0.00 0.00 2.00
kidsge6 (N = 428) 7 1.35 1.32 0.00 1.00 8.00
age (N = 428) 31 41.97 7.72 30.00 42.00 60.00
educ (N = 428) 13 12.66 2.29 5.00 12.00 17.00
wage (N = 428) 373 4.18 3.31 0.13 3.48 25.00
repwage (N = 428) 164 3.19 2.44 0.00 3.20 9.98
hushrs (N = 428) 277 2233.46 582.91 175.00 2106.50 5010.00
husage (N = 428) 31 44.61 7.95 30.00 45.00 60.00
huseduc (N = 428) 14 12.61 3.04 4.00 12.00 17.00
huswage (N = 428) 401 7.23 3.57 0.51 6.68 26.58
faminc (N = 428) 380 24130.42 11671.26 2400.00 21961.00 91044.00
mtr (N = 428) 22 0.67 0.08 0.44 0.69 0.94
motheduc (N = 428) 9 9.52 3.31 0.00 10.00 17.00
fatheduc (N = 428) 9 8.99 3.52 0.00 7.00 17.00
unem (N = 428) 7 8.55 3.03 3.00 7.50 14.00
city (N = 428) 2 0.64 0.48 0.00 1.00 1.00
exper (N = 428) 39 13.04 8.06 0.00 12.00 38.00
nwifeinc (N = 428) 425 18.94 10.59 -0.03 17.08 91.00
lwage (N = 428) 373 1.19 0.72 -2.05 1.25 3.22
expersq (N = 428) 39 234.72 270.04 0.00 144.00 1444.00

Regressão simples

Estimamos primeiro um MQO simples com a função feols do pacote fixest.

Prompt
Copilot estime um modelo linear com a função feols do pacote fixest. A variável dependente é o logaritmo do salário (lwage) e a variável independente é o número de anos de educação (educ).
Código
s_ols <- feols(lwage ~ educ, data = df) 

Leia a ajuda da função feols (?feols) e descubra como especificar um modelo de variáveis instrumentais (IVs).

Em seguida rode a regressão com fatheduc como instrumento para educ, e apresente os resultados das duas regressões lado a lado em uma tabela.

Prompt
Copilot em R, usando a função feols, estime um modelo linear lwage contra educ onde a variavel instrumental para educ será fatheduc. Apresente os resultados das duas regressões lado a lado em uma tabela usando a função etable.
Código
iv_ols <- feols(lwage ~ 1 | educ ~ fatheduc, data = df)
etable(list(OLS = s_ols, VI = iv_ols))
                               OLS               VI
Dependent Var.:              lwage            lwage
                                                   
Constant          -0.1852 (0.1852)  0.4411 (0.4461)
educ            0.1086*** (0.0144) 0.0592. (0.0351)
_______________ __________________ ________________
S.E. type                      IID              IID
Observations                   428              428
R2                         0.11788          0.09344
Adj. R2                    0.11581          0.09131
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Adicionando regressores exógenos

A abordagem de variáveis instrumentais pode facilmente ser estendida para a inclusão de outros regressores exógenos na regressão.

Inclua em ambas as regressões anteriores os regressores experiência (exper) e experiência ao quadrado (expersq). Faça também um modelo de MQ2E manualmente e apresente os resultados.

Prompt
Copilot inclua nos dois modelos anteriores os regressores exper e expersq. Em seguida, faça um modelo de minimos quadrados em dois estagios manualmente e apresente os resultados.
Código
s_ols <- feols(lwage ~ educ + exper + expersq, data = df)
iv_ols <- feols(lwage ~ exper + expersq | educ ~ fatheduc, data = df)
stage_1 <- feols(educ ~ exper + expersq + fatheduc, data = df)
mq2e_df <- df
mq2e_df$pred_educ <- fitted(stage_1)
stage_2 <- feols(lwage ~ pred_educ + exper + expersq, data = mq2e_df)
etable(list(OLS = s_ols, MQ2E = stage_2, VI = iv_ols))
                               OLS              MQ2E                VI
Dependent Var.:              lwage             lwage             lwage
                                                                      
Constant        -0.5220** (0.1986)  -0.0611 (0.4594)  -0.0611 (0.4364)
educ            0.1075*** (0.0141)                    0.0702* (0.0344)
exper            0.0416** (0.0132) 0.0437** (0.0141) 0.0437** (0.0134)
expersq          -0.0008* (0.0004) -0.0009* (0.0004) -0.0009* (0.0004)
pred_educ                           0.0702. (0.0363)                  
_______________ __________________ _________________ _________________
S.E. type                      IID               IID               IID
Observations                   428               428               428
R2                         0.15682           0.05041           0.14302
Adj. R2                    0.15085           0.04369           0.13696
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Teste de endogeneidade de Hausman

Tanto MQO quanto MQ2E serão consistentes se todas as variáveis forem exógenas. Se os estimadores diferirem de forma significativa, concluímos que o regressor era de fato endógeno (qual hipótese estamos fazendo aqui?).

Portanto, é sempre uma boa ideia calcular tanto o MQO quanto o MQ2E e compará-los. Para determinar se as estimativas são estatisticamente diferentes, então um teste de regressão é mais adequado. O teste de Hausman faz esse papel.

O teste é separado em dois passos:

  1. estime a forma reduzida de variável endógena e salve os resíduos

  2. inclua estes resíduos como um regressor adicional na equação estrutural

Um teste t ou F no coeficiente dos resíduos nos fornecerá evidência sobre a endogeneidade do regressor caso rejeite-se a hipótese nula.

Implemente o teste de Hausman

mq2e_df$resid_educ <- residuals(stage_1)
hausman <- feols(lwage ~ educ + exper + expersq + resid_educ, data = mq2e_df)
summary(hausman)
OLS estimation, Dep. Var.: lwage
Observations: 428 
Standard-errors: IID 
             Estimate Std. Error   t value Pr(>|t|)    
(Intercept) -0.061117   0.432695 -0.141247 0.887742    
educ         0.070226   0.034147  2.056606 0.040337 *  
exper        0.043672   0.013285  3.287296 0.001096 ** 
expersq     -0.000882   0.000397 -2.219417 0.026988 *  
resid_educ   0.044974   0.037514  1.198879 0.231246    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
RMSE: 0.662175   Adj. R2: 0.151729

Teste de restrições sobreidentificadoras

Se temos mais instrumentos válidos que variáveis endógenas, a princípio pode-se usar qualquer ou todos os instrumentos. Se todos forem de fato válidos, então, usar todos trará ganhos de eficiência no estimador MQ2E.

  1. Estime a equação estrutural por MQ2E, usando mais instrumentos que variáveis endógenas, e salve os resíduos \(\hat u_1\)

  2. Regrida \(\hat u_1\) em todas as variáveis exógenas e salve o \(R^2\) desta regressão

  3. Sob a hipótese nula de que todas as VI são exógenas, a estatística de teste \(n R^2\) é assintoticamente distribuída como uma Qui-quadrado com \(q\) graus de liberdade, onde \(q\) é a diferença entre o número de instrumentos e de variáveis endógenas.

Faça o teste de restrições sobreidentificadoras considerando que a educação da mãe (motheduc) também é um instrumento váldio para educação.

sobre_iv <- feols(lwage ~ exper + expersq | educ ~ fatheduc + motheduc, data = df)
sobre_df <- df
sobre_df$resid <- residuals(sobre_iv)
resid_reg <- feols(resid ~ exper + expersq + fatheduc + motheduc, data = sobre_df)
n <- nobs(resid_reg)
r2 <- r2(resid_reg, type = "r2")
sobre_stat <- n * r2
pchisq(sobre_stat, df = 1, lower.tail = FALSE)
       r2 
0.5386372