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<-lm(gdp~tbrate+cpi) summary(simult.test) vchapeu<-simult.test$resid simult.test2<-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.

Valeu ✌️… mas tem alguma forma de ajustar 2sls por grupo?? Ou seja varios ajustes.