手动计算2SLS回归稳健标准误差的问题求助
问题根源与修正方案
你的核心错误是计算稳健方差-协方差矩阵(VCE)时,使用了第二阶段的原始自变量矩阵X(包含实际H的矩阵),但2SLS的稳健标准误需要基于第一阶段拟合得到的预测值$\hat{H}$构建的自变量矩阵,而非原始内生变量。以下是修正后的完整步骤:
1. 提取第一阶段预测值
从systemfit结果中提取第一阶段对H的预测值:
H_hat <- predict(ivhfsystem$eq[[1]], data = DataControls)
2. 构建拟合自变量矩阵
用预测值$\hat{H}$替换原始H,生成2SLS对应的自变量矩阵$X^*$:
X_star <- model.matrix(Index ~ H_hat, data = DataControls)
3. 正确计算HC1稳健标准误
使用$X^*$结合第二阶段残差计算稳健VCE:
residuals <- ivhfsystem$eq[[2]]$residuals n <- nrow(DataControls) k <- length(coef) hc1 <- (n/(n - k)) * residuals^2 # 基于拟合自变量矩阵计算稳健VCE vce_hc1 <- solve(t(X_star) %*% X_star) %*% (t(X_star) %*% diag(hc1) %*% X_star) %*% solve(t(X_star) %*% X_star) se_robust <- sqrt(diag(vce_hc1))
4. 结果验证
此时计算出的se_robust会和iv_robust或ivreg结合coeftest(., vcov = vcovHC(., type = "HC1"))的结果一致。你也可以用以下代码快速对照:
library(ivreg) library(lmtest) iv_model <- ivreg(Index ~ H | HL1, data = DataControls) coeftest(iv_model, vcov = vcovHC(iv_model, type = "HC1"))
内容的提问来源于stack exchange,提问作者JJ1214
相关产品推荐
相关产品推荐

