两阶段最小二乘回归的标准误差,Stata

机器算法验证 计量经济学 状态 标准错误 工具变量
2022-03-20 05:02:03

我用Stata。我正在尝试复制手动执行第一阶段的回归的ivreg输出,在第一阶段之后预测仪器,并使用仪器代替结构模型中的内生回归器运行第二阶段回归。自然地,我的第二阶段回归的标准误差没有考虑到我使用的是估计回归量这一事实:它们与ivreg命令的输出不同。我的问题是:如何在不使用ivreg命令的情况下获得可靠的推理?是否有一个选项我应该添加到第二阶段回归以获得可靠的标准误差?如果不是,我如何从第二阶段手动回归开始获得可靠的标准误差?

2个回答

相关公式为

Var(βIV)=σ2(XPZX)1,
在哪里
σ2=(yXβIV)(yXβIV)/(nkSS),

PZ=Z(ZZ)1Z,
kSS是第二阶段的回归者数量。有些人只会使用n或者nkFS因为选择渐近无关紧要。

Kit Baum在 Old Statalist 的这个线程中有代码。我已经稍微调整了它以使用ivregress而不是ivreg2

// how to fix 2SLS estimates done 'by hand'
sysuse auto, clear
ivregress 2sls price headroom (weight = turn foreign)
estat vce
di e(rmse)
mat v2sls = e(V)
  
// First stage reg
qui reg weight turn foreign headroom
predict double what, xb

// Second stage reg
qui reg price what headroom
scalar rmsebyhand = e(rmse)

// the 'wrong' VCE, calculated from the instruments
mat vbyhand = e(V)
scalar dfk = e(df_r)

// the correct resids: orig regressors * second stage coeffs 
gen double eps2 = (price - _b[what]*weight - _b[headroom]*headroom - _b[_cons])^2
qui su eps2

// corrected RMSE, based on the correct resids
scalar rmsecorr = sqrt(r(sum) / dfk)

// corrected VCE, using the right s^2
mat vcorr = (rmsecorr / rmsebyhand)^2 * vbyhand
mat li vcorr

// check to see that it equals the real 2SLS VCE
mat diff = v2sls - vcorr
mat li diff

一个可能的解决方法是引导第一阶段和第二阶段。

在 Stata 中,这将是这样的:

// use an example data set
webuse nlswork

// do the 2SLS regression with corrected s.e. for comparison
ivreg2 ln_wage age (grade = south)

// write your own 2SLS program
program my2sls
* first stage regression
reg grade age south
* get predicted values
predict grade_hat, xb
* second stage regression
reg ln_wage grade_hat age
drop grade_hat
end

// bootstrap the standard errors
bootstrap, reps(200): my2sls

在这里,我们估计了额外一年教育对收入的影响。由于多年教育的内生性,我们用south来衡量一个人是否来自美国南部各州(当然这个工具没有意义,它只是为了激励代码)。确保在执行此操作时在第一阶段和第二阶段包含所有外生变量。

引导程序需要该drop grade_hat部件才能正常运行。此过程将通过重新抽样估计数量来修复标准误差。作为参考,您可以查看 Cameron 和 Trivedi (2009) “使用 Stata 的微观计量经济学”。