在使用 `esttab` 输出 Stata 工具变量回归(IV regression)结果时,一个常见问题是:**如何正确保存并输出 `ivregress` 或 `ivreg2` 的估计结果,使第一阶段和第二阶段的关键统计量(如弱工具变量检验、过度识别检验)一并显示在最终表格中?**
用户常发现 `esttab` 仅默认输出第二阶段系数,缺失 F 统计量、Cragg-Donald Wald F 统计量或 P 值等关键诊断信息。此外,当使用 `eststo` 存储 `ivreg2` 结果时,部分标量(如 `endogeneity test` 或 `underid test`)无法自动提取到 `esttab` 表格中,导致结果报告不完整。如何通过手动提取并添加 `estadd` 命令将这些统计量整合进 `esttab` 输出,是实现规范化学术呈现的技术难点。
1条回答 默认 最新
曲绿意 2025-09-21 08:02关注一、问题背景与核心挑战
在使用 Stata 进行工具变量回归(IV regression)分析时,研究者常采用
ivregress或更强大的ivreg2命令进行两阶段最小二乘法(2SLS)估计。然而,在将结果输出为学术论文所需的表格格式时,esttab通常仅默认展示第二阶段的系数和标准误,而忽略了第一阶段的关键诊断统计量,如弱工具变量检验的 F 统计量、Cragg-Donald Wald F 统计量、过度识别检验(Overidentification test)以及内生性检验(Endogeneity test)等。这些缺失的信息对于评估 IV 模型的有效性至关重要。例如,若第一阶段 F 统计量小于 10,则可能存在“弱工具变量”问题;若模型存在多个工具变量,Sargan 或 Hansen J 检验可用于判断工具变量是否外生。因此,如何通过
eststo存储模型,并利用estadd手动提取并附加这些标量至存储结果中,是实现完整、规范输出的技术关键。二、Stata 中 IV 回归与结果存储机制解析
- ivregress:Stata 官方命令,支持 2SLS、LIML 和 GMM,但返回的 e() 标量有限,不利于扩展输出。
- ivreg2:由 Baum, Schaffer 和 Stillman 开发的增强型命令,提供丰富的诊断信息,包括:
- 第一阶段 F 统计量(F-statistic for first stage)
- Cragg-Donald Wald F 统计量(cd_f)
- Kleibergen-Paap rk Wald F 统计量(用于弱识别检验)
- Sargan/Hansen J 检验(overid)
- Endogeneity test(endogtest)
- Underidentification test(underid)
- eststo 与 esttab:属于
estout包,用于存储和导出回归结果,但默认不自动提取ivreg2的所有诊断统计量。
三、解决方案框架:从提取到整合
- 使用
ivreg2执行工具变量回归并存储结果。 - 通过
return list或ereturn list查看可用标量。 - 利用
estadd将关键诊断值手动添加到estimates store中。 - 在
esttab输出时通过stats()选项调用这些自定义统计量。
四、代码实现示例
// 安装必要包(若未安装) ssc install estout, replace ssc install ivreg2, replace // 示例数据 sysuse auto, clear // 工具变量回归:mpg 对 price,工具变量为 weight 和 length ivreg2 price mpg (weight = length turn), robust first // 存储模型 eststo model_iv: ivreg2 price mpg (weight = length turn), robust // 提取并添加关键统计量 estadd scalar f_first = r(fstat) // 第一阶段 F 统计量 estadd scalar cd_f = r(cd_f) // Cragg-Donald F estadd scalar p_cd = r(p_cd) // CD F 对应 P 值 estadd scalar overid = r(j) // Sargan J 统计量 estadd scalar p_overid = r(p_j) // Sargan P 值 estadd scalar endog = r(endog) // 内生性检验统计量 estadd scalar p_endog = r(p_endog) // 内生性检验 P 值 estadd scalar underid = r(weakid_stat) // 不可识别检验统计量 // 输出包含所有诊断信息的表格 esttab model_iv /// using iv_results.txt, /// stats(N f_first cd_f p_cd overid p_overid endog p_endog underid, /// labels("Observations" "First-stage F" "CD F" "CD P-value" /// "Sargan J" "Sargan P" "Endogeneity Stat" "Endogeneity P" /// "Underid Stat")) /// b(%6.3f) se(%6.3f) star(* 0.1 ** 0.05 *** 0.01) /// title("IV Regression Results with Diagnostics") /// replace五、关键统计量说明表
统计量名称 Stata 返回名 含义 临界参考值 First-stage F r(fstat) 第一阶段联合显著性 >10 避免弱工具变量 Cragg-Donald F r(cd_f) 多工具变量强度 >16.38(Stock-Yogo) Sargan J r(j) 过度识别检验 P > 0.05 接受外生性 Endogeneity Test r(endog) 内生性检验 P < 0.05 支持内生 Underidentification Test r(weakid_stat) 不可识别检验 应显著拒绝 H0 Kleibergen-Paap F r(kp_f) 稳健弱识别检验 参考 KP 临界值 Hansen J r(j_hans) GMM 版本 Sargan 适用于异方差情形 Anderson LM r(arub) 不可识别拉格朗日乘子检验 应显著 Weak ID F r(weakid_fk) Angrist-Pischke 弱识别检验 关注单个内生变量 LIML Estimator r(liml_b) 有限信息最大似然估计值 与 2SLS 对比稳健性 六、流程图:IV 结果提取与输出全流程
graph TD A[运行 ivreg2] --> B{成功估计?} B -- 是 --> C[ereturn list 查看结果] C --> D[使用 eststo 存储模型] D --> E[通过 r() 或 e() 提取诊断统计量] E --> F[使用 estadd 添加标量] F --> G[调用 esttab 输出] G --> H[生成含诊断信息的 LaTeX/CSV 表格] B -- 否 --> I[检查工具变量有效性或模型设定]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报