//styles, look here: https://cdnjs.com/libraries/highlight.js/9.12.0

December 19, 2018

1577 palavras 8 mins

I Can't Get No Instruments: quando instrumentos são fracos

(O título desse post é uma piada com o título do capítulo do Mostly Harmless Econometrics sobre instrumentos)

Variáveis instrumentais são amplamente usadas em econometria, por n motivos: erros nas variáveis, simultaneidade, viés de variável omitida, outras violações da hipótese usual de MQO \(E(u|\textbf{X}) = 0\), em uma regressão \(\textbf{y} = \textbf{X}\beta + \textbf{u}\). Encontrar bons instrumentos é notávelmente difícil, porque os instrumentos precisam obedecer a duas hipóteses: exogenidade e relevância. Um instrumento \(z\) é exógeno se \(E(u|z) = 0\). Essa hipótse não é testável, em geral. A segunda hipótese, de relevância, significa que \(z\) é capaz de explicar alguma variação em \(x\). Ela é muitas vezes ignorada, mas vamos falar dela neste artigo, porque ele é importantíssima e testável.

Quando um instrumento é fraco e porque se preocupar

Como eu já adiantei, um instrumento é fraco se ele não consegue explicar muito da variação de \(X\). Vamos criar um problema em que há uma variável omitida \(h\), que fazem parte tanto da equação de \(y\) como da de \(x\) (o exemplo vai ter só um regressor pra ficar simples), mas \(x\) também é influenciada por \(z\) (novamente, univariado). Vamos começar com um caso em que as equação são:

\[ y = h + 2x + u\\ x = h + z + v\\ \]

Onde \(u\) e \(v\) são erros iid Normais com média zero, variância um e independentes entre si. Eu vou usar o pacote AER pra estimar a regressão \(y\) em \(x\) usando \(z\) como instrumentos, o conhecido MQ2E. Vamos usar 1000 observações,e vou fazer a regressão por MQO pra nós compararmos o resultado das duas:

set.seed(1928376)

u <- rnorm(1000)
v <- rnorm(1000)
h <- rnorm(1000)
z <- rnorm(1000)

x <- h + z + v
y <- h + 2*x + u

reg_mqo <- lm(y ~ x)
reg_iv <- ivreg(y ~x,~z)
stargazer(reg_iv,reg_mqo,type = "html", column.labels = c("MQ2E","MQO"),model.names = FALSE,omit.stat = c("ser","n"),style = "aer",omit.table.layout = "#")
y
MQ2E MQO
x 1.948*** 2.353***
(0.052) (0.025)
Constant 0.072 0.051
(0.045) (0.040)
R2 0.875 0.902
Adjusted R2 0.875 0.902
F Statistic 9,145.727*** (df = 1; 998)
Notes: ***Significant at the 1 percent level.
**Significant at the 5 percent level.
*Significant at the 10 percent level.

Nada mal: a estimativa está bem próxima do valor real, e é melhor que a de OLS.

Agora, vamos fazer uma simples alteração no processo gerador de dados. A equação de \(x\) vai ser:

\[x = h + 0.01z + v\]

Vamos repetir o nosso experimento:

x2 <- h + 0.01*z + v
y2 <- h + 2*x2 + u

reg_mqo <- lm(y2 ~ x2)
reg_iv <- ivreg(y2 ~x2,~z)

E eis os resultados:

stargazer(reg_iv,reg_mqo,type ="html", column.labels = c("MQ2E","MQO"),model.names = FALSE,omit.stat = c("ser","n"),style = "aer",omit.table.layout = "#")
y2
MQ2E MQO
x2 2.340*** 2.513***
(0.291) (0.027)
Constant 0.065* 0.062*
(0.039) (0.038)
R2 0.890 0.894
Adjusted R2 0.890 0.894
F Statistic 8,436.010*** (df = 1; 998)
Notes: ***Significant at the 1 percent level.
**Significant at the 5 percent level.
*Significant at the 10 percent level.

Veja que agora os resultado da regressão com variáveis instrumentais se aproxima dos resultados obtidos pelo MQO. Veja também que, olhando as tabelas acima, não há nenhuma maneira de advinhar que nossos instrumentos são fracos. Mas, ao contrário da exogenidade dos instrumentos, podemos testar se os instrumentos são forte.

Em um exemplo mais dramático do tamanho do problema, eu vou usar um vetor inventado \(zi\) que nada tem nenhuma relação com o nosso processo gerador de dados e usar como instrumento e comparar com o nosso instrumento fraco. Só que, ao invés da nossa amostra relativamente grande de 1000 obs, eu usarei apenas 100 para gerar \(y_3\),\(x_3\),\(z_3\):

u <- rnorm(100)
v <- rnorm(100)
h <- rnorm(100)
z3 <- rnorm(100)

x3 <- h + 0.01*z3 + v
y3 <- h + 2*x3 + u

reg1 <- lm(y3 ~ x3)
reg2 <- ivreg(y3 ~x3,~z3)
zi <- rnorm(100)
reg3 <- ivreg(y3~x3,~zi)
stargazer(reg1,reg2,reg3,type ="html", column.labels = c("MQO","MQ2E","MQ2E com instrumento inventado"),model.names = FALSE,omit.stat = c("ser","n"),style = "aer",omit.table.layout = "#")
y3
MQO MQ2E MQ2E com instrumento inventado
x3 2.579*** 3.416*** 2.625
(0.095) (1.108) (2.580)
Constant 0.015 0.097 0.020
(0.123) (0.197) (0.280)
R2 0.883 0.790 0.883
Adjusted R2 0.882 0.788 0.882
F Statistic 740.809*** (df = 1; 98)
Notes: ***Significant at the 1 percent level.
**Significant at the 5 percent level.
*Significant at the 10 percent level.

Apesar do desvio padrão alto, o resultado da variável instrumental inventada é numericamente mais próximo do real que o instrumento fraco! Isso não ocorre só em amostras pequenas. O livro Econometria, de Stock e Watson, diz que esse mesmo efeito pode ocorrer com amostras grandes!

“Mas isso é só uma regressão, você não pode fazer inferência com uma única observação!” Ok, vamos fazer uma simulação de monte carlo e ver qual é o beta médio que sai. Eu serei generoso o suficiente e usarei 1000 obs e farei mil replicações:

beta <- rep(0,1000)

for(k in 1:1000){
  z <- rnorm(1000)
  h <- rnorm(1000)
  v <- rnorm(1000)
  u <- rnorm(1000)
  x <- h + 0.01*z + v
  y <- h + 2*x + u
  beta[k] <- ivreg(y ~ x,~z)$coef[2]
} 

tabela <- matrix(c(max(beta),min(beta),mean(beta),sd(beta)),ncol=1)
rownames(tabela) <- c(paste0("Max dos ",'\u03b2'),paste0("Min dos ",'\u03b2'),paste0("Média dos ",'\u03b2'),paste0("Desvio Padrão dos ",'\u03b2'))
knitr::kable(tabela,row.names = T,col.names = "Resultados da simulação")
Resultados da simulação
Max dos β 224.204857
Min dos β -692.931448
Média dos β 1.516544
Desvio Padrão dos β 25.760984

O desvio padrão é tão absurdamente alto que eu decidi colocar o máximo e o mínimo. A tabela fala por si só: com instrumentos fracos, regressões por MQ2E não merecem confiança. Temos que saber se nossos instrumentos são fortes (ou não).

##Testando se instrumentos fracos

Se fizermos a regressão de x em z - do intrumentado em cima do instrumento, o que é conhecido como primeiro estágio do MQ2E - podemos olhar a estatística F da regressão para saber se o instrumento é forte ou não. Veja que isso só vale se for uma variável instrumentada. Stock e Watson dão como regra de bolso \(F > 10\) para consideramos o instrumento forte. Vamos testar isso para o nosso caso:

primeiro_estagio1 <- lm(x ~z)
primeiro_estagio2 <- lm(x2 ~z)

E os resultados são:

stargazer(primeiro_estagio1,primeiro_estagio2, type = "html", column.labels = c("Instrumento Forte","Instrumento Fraco"),model.names = FALSE,omit.stat = c("ser","n"),style = "aer",omit.table.layout = "#")
x x2
Instrumento Forte Instrumento Fraco
z 0.069 0.001
(0.046) (0.045)
Constant 0.011 0.013
(0.044) (0.044)
R2 0.002 0.000
Adjusted R2 0.001 -0.001
F Statistic (df = 1; 998) 2.294 0.000
Notes: ***Significant at the 1 percent level.
**Significant at the 5 percent level.
*Significant at the 10 percent level.

Seguindo a regra de bolso do Stock e Watson, veríamos que o nosso instrumento de fato é fraco. Veja que esse teste vale para mais de um instrumento, mas não para mais de uma variável instrumentadada. Trocando em miúdos: podemos ter muitos \(z\), mas apenas um \(x\). Vamos fazer um exemplo em que temos duas variáveis instrumentais, \(z_1\) e \(z_2\), e em um dos casos ambas serão fortes e em outro ambas serão fracas:

z1 <- rnorm(1000)
z2 <- rnorm(1000)
h <- rnorm(1000)


x1 <- h + z1 - z2 + rnorm(1000)
x2 <- h + 0.01*z1 - 0.0001*z2 + rnorm(1000)

y1 <- h - x1 + rnorm(1000)
y2 <- h - x2 + rnorm(1000)

modelo2 <- ivreg(y1 ~x1,~z1+z2)
modelo3 <- ivreg(y2 ~x2,~z1+z2)
modelo4 <- lm(y2 ~x2)

pri_estg1 <- lm(x1 ~z1+z2)
pri_estg2 <- lm(x2 ~z1+z2)

Vamos começar vendo os resultados para a regressão que nós teríamos mais interesse, na qual usamos \(z_1\) e \(z_2\) como instrumento:

stargazer(modelo2,modelo3,modelo4,type ="html", column.labels = c("Inst Forte","Inst Fraco", "MQO"),model.names = FALSE,omit.stat = c("ser","n"),style = "aer",omit.table.layout = "#")
y1 y2
Inst Forte Inst Fraco MQO
x1 -0.986***
(0.033)
x2 -0.624 -0.488***
(0.388) (0.028)
Constant -0.023 -0.032 -0.034
(0.045) (0.040) (0.039)
R2 0.480 0.213 0.231
Adjusted R2 0.479 0.212 0.230
F Statistic 299.732*** (df = 1; 998)
Notes: ***Significant at the 1 percent level.
**Significant at the 5 percent level.
*Significant at the 10 percent level.

Veja que na regressão com instrumentos fracos, o coeficiente saiu com metade do valor verdadeiro e não significante. Um pesquisador levando essa regressão a sério teria obtido resultados totalmente enganosos. Vamos checar a regressão de primeiro estágio:

stargazer(pri_estg1,pri_estg2,type ="html", column.labels = c("Inst Forte","Inst Fraco"),model.names = FALSE,omit.stat = c("ser","n"),style = "aer",omit.table.layout = "#")
x1 x2
Inst Forte Inst Fraco
z1 0.972*** -0.107**
(0.047) (0.046)
z2 -1.004*** -0.002
(0.045) (0.044)
Constant -0.048 0.021
(0.045) (0.044)
R2 0.483 0.005
Adjusted R2 0.482 0.003
F Statistic (df = 2; 997) 464.957*** 2.710*
Notes: ***Significant at the 1 percent level.
**Significant at the 5 percent level.
*Significant at the 10 percent level.

Veja que o valor da estatística F para a regressão com instrumentos fracos está muito abaixo do valor da regra de bolso do Stock Watson. E esse exemplo também ilustra o perigo de olhar para a significância de cada um dos regressores numa regressão de primeiro estágio: \(z_2\) é significante a 5% na regressão em que os instrumentos são fracos; mas isso não impede os instrumentos de serem fracos! A razão de usar a estatítica F não é apenas por um teste conjunto de significância, mas por outros motivos teóricos. Uma limitação deste teste é que ele só vale para uma variável instrumentada. Mas em muitas aplicações, só temos uma variável a ser instrumentsda, então ele é valioso - principalmente por ser extremamente simples.

Então, sempre que for usar um instrumento, lembre de olhar a regressão de primeiro estágio e ver se a estatística F é maior que 10. Senão, cuidado: suas estimativas devem ser viesadas.