Uncategorized

Exemplo de 2SLS em R (Momento R do Dia)

Tomo de empréstimo a base de dados do exercício 19.4 da 5a edição de Gujarati (agora Gujarati & Porter).

Trata-se de um sistema de oferta e demanda de moeda.

Mdt= b0 + b1Yt + b2Rt+b3Pt+u1t

Mst = a0 + a1Yt + u2t

As variáveis R (taxa de juros) e P (índice de preços) são exógenas por hipótese. Percebe-se que existem duas variáveis que não estão na equação de oferta que são, justamente, estas duas. Logo, há duas formas de se identificar a equação de oferta, o que a caracteriza como uma equação sobre-identificada. A equação de demanda, como se vê, é não-identificada (ou sub-identificada).

O exercício de Gujarati pede as formas reduzidas, pergunta sobre identificação e depois faz uma aplicação do teste de simultaneidade e de exogeneidade. Mas nós vamos partir da identificação e usar o pacote systemfit do R para estimar o sistema. Depois, vamos comparar o resultado com aquele obtido por meio do comando ivreg do pacote AER.

Para importar os dados, fazemos:

# importar Table 19.4.xls

base <- read.table(file = "clipboard", sep = "\t", header=TRUE)
head(base)
m2<-ts(base$M2, start=c(1970),freq=1)
gdp<-ts(base$GDP, start=c(1970),freq=1)
tbrate<-ts(base$TBRATE, start=c(1970),freq=1)
cpi<-ts(base$CPI, start=c(1970),freq=1)

Feito isto, vamos aos dois métodos de estimação.

Estimando o sistema com “systemfit”

Neste pacote – que está bem exemplificado pelos autores do mesmo aqui – a sintaxe dos comandos exige que se escreva o sistema. Assim, temos as seguintes linhas de comando.

library(systemfit)
demand1<-m2~gdp+tbrate+cpi
supply1<-m2~gdp
system<-list(demand=demand1,supply=supply1)
inst1<-~tbrate+cpi

Repare que definimos as duas equações e o sistema. Em seguida, informamos ao programa a lista de instrumentos. Para resolver o sistema, usamos o comando systemfit. Note que escolhi o método de Mínimos Quadrados em Dois Estágios (2SLS).

fit2sls2<-systemfit(system,"2SLS",inst=inst1)
print(fit2sls2)
summary(fit2sls2)

Note que a diferença entre print e summary é de detalhamento. Também note que, com esta biblioteca, o sistema é estimado, mesmo que a equação de demanda não seja identificável. Isto fica claro quando usamos o summary.

> print(fit2sls2)

systemfit results
method: 2SLS

Coefficients:
demand_(Intercept)        demand_gdp        demand_tbrate     demand_cpi
-795.817242                      0.165427             -64.865418         26.393878
supply_(Intercept)      supply_gdp
-2517.944548             0.805575
> summary(fit2sls2)

systemfit results
method: 2SLS

              N  DF     SSR      detRCov         OLS-R2   McElroy-R2
system 74 68  6339723   4258428053   0.974049     0.967006

                N DF SSR MSE RMSE R2 Adj R2
demand 37 33 4265631 129261.5 359.530 0.965079 0.961904
supply 37 35 2074092 59259.8 243.433 0.983020 0.982535

The covariance matrix of the residuals
demand supply
demand 129261.5 58323.1
supply 58323.1 59259.8

The correlations of the residuals
demand supply
demand 1.000000 0.666386
supply 0.666386 1.000000
2SLS estimates for ‘demand’ (equation 1)
Model Formula: m2 ~ gdp + tbrate + cpi
Instruments: ~tbrate + cpi

                    Estimate          Std.Error         t value    Pr(>|t|)
(Intercept)     -7.95817e+02    2.25516e+09    0          1
gdp                1.65427e-01      8.70873e+05    0          1
tbrate             -6.48654e+01    7.93049e+07    0         1
cpi                 2.63939e+01      3.61958e+07    0          1

Residual standard error: 359.529607 on 33 degrees of freedom
Number of observations: 37 Degrees of Freedom: 33
SSR: 4265630.767425 MSE: 129261.538407 Root MSE: 359.529607
Multiple R-Squared: 0.965079 Adjusted R-Squared: 0.961904
2SLS estimates for ‘supply’ (equation 2)
Model Formula: m2 ~ gdp
Instruments: ~tbrate + cpi

                            Estimate      Std. Error             t value      Pr(>|t|)
(Intercept)        -2.51794e+03  1.32467e+02    -19.0081   < 2.22e-16 ***
gdp                    8.05575e-01  1.81658e-02       44.3456   < 2.22e-16 ***

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 243.433303 on 35 degrees of freedom
Number of observations: 37 Degrees of Freedom: 35
SSR: 2074092.061577 MSE: 59259.773188 Root MSE: 243.433303
Multiple R-Squared: 0.98302 Adjusted R-Squared: 0.982535

Repare como os teste “t” e os p-valores da equação estimada de demanda não fazem sentido algum. Agora, vamos fazer o mesmo exercício com o comando ivreg do pacote AER.

Estimação com variáveis instrumentais, por meio do pacote AER

Bem, aqui vão os comandos.

library(AER)
oferta <- ivreg(m2 ~ gdp | tbrate+cpi,)
summary(oferta)
summary(oferta, vcov = sandwich, df = Inf, diagnostics = TRUE)
demanda<-ivreg(m2~gdp+tbrate+cpi |tbrate+cpi )

Neste pacote, os comandos são mais intuitivos. Você define uma equação de cada vez. Aproveitei para mostrar o absurdo que é tentar estimar a curva de demanda usando os mesmo instrumentos da oferta. Além disso, para a curva de oferta, apresento os erros-padrão robustos para os estimadores.

> oferta <- ivreg(m2 ~ gdp | tbrate+cpi,)
> summary(oferta)

Call:
ivreg(formula = m2 ~ gdp | tbrate + cpi)

Residuals:
Min 1Q Median 3Q Max
-471.89 -123.96 39.56 144.45 434.82

Coefficients:
                     Estimate     Std. Error     t value    Pr(>|t|)
(Intercept)    -2.518e+03   1.325e+02   -19.01 <2e-16 ***
gdp                8.056e-01    1.817e-02     44.35 <2e-16 ***

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 243.4 on 35 degrees of freedom
Multiple R-Squared: 0.983, Adjusted R-squared: 0.9825
Wald test: 1967 on 1 and 35 DF, p-value: < 2.2e-16

> summary(oferta, vcov = sandwich, df = Inf, diagnostics = TRUE)

Call:
ivreg(formula = m2 ~ gdp | tbrate + cpi)

Residuals:
Min 1Q Median 3Q Max
-471.89 -123.96 39.56 144.45 434.82

Coefficients:
                       Estimate        Std. Error   z value  Pr(>|z|)
(Intercept)        -2.518e+03   1.066e+02   -23.61  <2e-16 ***
gdp                    8.056e-01   1.899e-02     42.41  <2e-16 ***

Diagnostic tests:
                                      df1 df2 statistic p-value
Weak instruments        2   34   575.139 <2e-16 ***
Wu-Hausman               1   34      0.047    0.829
Sargan                          1   NA     0.166    0.684

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 243.4 on Inf degrees of freedom
Multiple R-Squared: 0.983, Adjusted R-squared: 0.9825
Wald test: 1799 on 1 DF, p-value: < 2.2e-16

> demanda<-ivreg(m2~gdp+tbrate+cpi |tbrate+cpi )
Warning message:
In ivreg.fit(X, Y, Z, weights, offset, …) :
more regressors than instruments

Percebe-se que os resultados são os mesmos. Quando se pede os diagnósticos, no caso da oferta, temos três testes: Wu-Hausman, Sargan e de exogeneidade fraca. Segundo a documentação:

diagnostics:  logical.

Should diagnostic tests for the instrumental-variable regression be carried out? These encompass an F test of the first stage regression for weak instruments, a Wu-Hausman test for endogeneity, and a Sargan test of overidentifying restrictions (only if there are more instruments than regressors).

O teste de Wu-Hausman está resumidamente explicado aqui. Já o teste de Sargan está aqui. Mais detalhes sobre o pacote AER podem ser encontrados aqui. O teste de instrumentos fracos pode ser encontrado em outros lugares, mas o Diffuse Prior tem um interessante texto sobre o tema. Como o teste indica evidências de rejeição da hipótese nula (H0: instrumentos excluídos são irrelevantes), a conclusão, para este exemplo, é a de que os instrumentos não são…irrelevantes, obviamente.

E os outros tópicos do exercício?

Não existe almoço grátis, não é? Portanto, você pode trabalhar sobre estes dados para responder as questões colocadas pelos autores. A bem da verdade, falar sobre a identificação da oferta, da demanda, encontrar as formas reduzidas…isto tudo é muito fácil.

O teste de simultaneidade envolve a estimação da forma reduzida do gdp, obtendo os resíduos e usando-os numa regressão de m2 em gdp e nos resíduos estimados. Na ausência de simultaneidade, os resíduos estimados não deveriam ajudar a explicar m2.

Estou me sentindo generoso hoje. Então, eis os comandos:

simult.test&lt;-lm(gdp~tbrate+cpi)
summary(simult.test)
vchapeu&lt;-simult.test$resid
simult.test2&lt;-lm(m2~gdp+vchapeu)
summary(simult.test2)

Coefficients:

Estimate    Std. Error   t value   Pr(>|t|)
(Intercept)           -2.518e+03  1.343e+02   -18.748   <2e-16 ***
gdp                       8.056e-01   1.842e-02   43.738   <2e-16 ***
vchapeu              -2.237e-02   1.043e-01   -0.214    0.832

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 246.8 on 34 degrees of freedom
Multiple R-squared: 0.983, Adjusted R-squared: 0.982
F-statistic: 985.6 on 2 and 34 DF, p-value: < 2.2e-16

Conclusão

Bem, por hoje é só. Mais um Momento R do Dia que facilita a vida de quem está aprendendo a caminhar no R. Claro, outros exercícios empíricos deveriam ser feitos por você mesmo. Já está aí o caminho das pedras. Faça sua parte.

2014-02-21 21.26.01
“Sorte a sua o professor não te passar um sistema de equações simultâneas mais completo, heim?”

2 comentários em “Exemplo de 2SLS em R (Momento R do Dia)

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s