爱吃大米饭123
发布于

秒破高维固定效应!Stata 工具变量回归代码,解决内生性 + 矩阵溢出难题


秒破高维固定效应!Stata 工具变量回归代码,解决内生性 + 矩阵溢出难题

在企业类实证研究中,内生性问题与高维固定效应仿佛一对 “难缠的搭档”。为了排除随时间变化的行业冲击对企业投资或决策的干扰,越来越多研究者会在模型中加入行业 × 年份(Industry×Year)交互固定效应。

可现实往往不尽如人意:当样本涵盖数千家上市公司、长达十几年的数据时,引入行业 × 年份交互项会生成成千上万个虚拟变量。这时传统的xtivreg2命令或手动去均值方法,要么因 “矩阵维度过大(Matsize too small)” 直接罢工,要么计算耗时久到让人崩溃。

今天就给大家分享一款实证研究 “神器”——ivreghdfe命令,它凭借高维吸收算法,能快速搞定复杂交互固定效应,还能完整输出工具变量各类诊断统计量,让高维 IV 回归效率翻倍!

一、ivreghdfe核心优势,解决传统命令痛点

1. 第一阶段结果输出更简单

ivreghdfe本质兼容 OLS 和 2SLS,无需像xtivreg2那样依赖复杂的savefirst选项,也不用切换到xtreg命令。只需一句简单语法ivreghdfe Endog IV Controls, absorb(...),就能直接获得第一阶段回归的系数和标准误,保证第一阶段与第二阶段在样本使用、固定效应处理上的一致性,后续用esttab并列输出结果也更便捷。

2. 轻松突破矩阵维度限制

这是它最亮眼的优势!无需显式生成虚拟变量,就能轻松 “吸收” 包含数千个类别的交互固定效应(如industry#year),即便在普通配置的电脑上,也能秒级完成复杂 IV 回归,彻底告别卡顿与报错。

3. 自动校正标准误,结果更可靠

处理多维固定效应时,自由度计算直接影响结果准确性。ivreghdfe会自动校正因吸收大量固定效应导致的自由度损失,确保 T 值和 P 值真实可信,避免因统计偏差影响研究结论。

4. 一键输出关键诊断指标

与esttab完美适配,可直接报告审稿人重点关注的不可识别检验(Under-identification)和弱工具变量检验(Weak IV)统计量,不用手动计算,省去大量繁琐工作。

二、实操案例:企业研究场景代码演示

下面以 “公司治理对企业投资的影响” 为例,带大家直观感受ivreghdfe的用法,涵盖基础双向固定效应和高维交互固定效应两种场景。

变量设定

  • 因变量:invest(企业投资水平)
  • 内生变量:gov_score(公司治理指标 / ESG 评分)
  • 工具变量:
  • Z_geo:地理维度工具变量(如企业所在地地理特征)
  • Z_hist:历史维度工具变量(如历史政策冲击)
  • 控制变量:size(企业规模)、lev(资产负债率)、roa(资产收益率)、cash_flow(现金流)、age(企业年龄)
  • 固定效应:
  • 模型 1-2:控制个体(stkcd)+ 年份(year)双向固定效应
  • 模型 3-4:控制个体(stkcd)+ 行业 × 年份(industry#year)交互固定效应

完整代码

* 设定面板数据结构
xtset stkcd year

* 定义控制变量组(一次性定义,后续直接调用)
global controls "size lev roa cash_flow age"

* ============================================================
* 策略一:基础双向固定效应 (个体 + 年份)
* 使用地理维度工具变量 (Z_geo)
* ============================================================
* 1. 第一阶段回归 (First Stage)
* 目的:验证工具变量与内生变量的相关性
qui ivreghdfe gov_score Z_geo $controls, absorb(stkcd year) res
eststo m1

* 2. 2SLS 回归 (Two-Stage Least Squares)
* 说明:标准双向固定效应,计算速度极快
qui ivreghdfe invest (gov_score = Z_geo) $controls, absorb(stkcd year) res
eststo m2

* ============================================================
* 策略二:高维交互固定效应 (个体 + 行业×年份)
* 使用历史维度工具变量 (Z_hist)
* 重点:展示处理 "industry#year" 高维交互项的能力
* ============================================================
* 3. 第一阶段回归 (First Stage) (控制行业-年份交互冲击)
* 注意:无需手动生成虚拟变量,命令自动吸收高维效应
qui ivreghdfe gov_score Z_hist $controls, absorb(stkcd industry#year) res
eststo m3

* 4. 2SLS 回归 (高维固定效应下的IV估计)
* 自动输出校正后的诊断统计量
qui ivreghdfe invest (gov_score = Z_hist) $controls, absorb(stkcd industry#year) res
eststo m4

* ============================================================
* 结果导出:生成规范实证表格,直接用于论文
* ============================================================
* 处理固定效应标签,让表格更易读
estfe m1 m2 m3 m4, labels(
    stkcd "Firm FE" 
    year "Year FE" 
    industry#year "Industry*Year FE"
)

* 导出回归表格到RTF文件
esttab m1 m2 m3 m4 using "Table_Corp_IV.rtf", append nogap compress ///
    star(* 0.10 ** 0.05 *** 0.01) /// 显著性标记(10%/5%/1%)
    b(%9.3f) se(%9.3f) /// 系数和标准误保留3位小数
    title("Table 2: The Effect of Governance on Investment (IV-2SLS)") /// 表格标题
    indicate(`r(indicate_fe)') /// 显示各模型是否控制对应固定效应
    order(gov_score Z_geo Z_hist) /// 指定变量输出顺序
    stat(N r2 idstat widstat, /// 输出关键统计量
          labels(
              "Observations" "样本量" 
              "R-squared" "R²" 
              "Under-id Test (LM)" "不可识别检验(LM)" 
              "Weak-id Test (Wald F)" "弱工具变量检验(Wald F)"
          ) /// 统计量标签汉化,更直观
          fmt(0 3 3 3)) /// 格式设定(样本量整数,其余保留3位小数)

三、关键解读与使用注意事项

1. 交互固定效应的写法技巧

代码中absorb(stkcd industry#year)里的#号,是 Stata 处理交互项的核心操作符。ivreghdfe借助这一语法,无需显式生成海量虚拟变量,就能自动剔除 “特定行业 - 特定年份” 的共同冲击,这也是它优于xtivreg2的核心原因。

2. 诊断统计量的解读重点

  • widstat(Kleibergen-Paap rk Wald F):弱工具变量检验核心指标。若控制行业 × 年份效应后,该值仍大于临界值 10,说明工具变量剥离行业时变冲击后依然强有效,可回应审稿人对工具变量有效性的质疑。
  • idstat(Kleibergen-Paap rk LM):不可识别检验指标,用于验证模型是否可识别,避免出现识别不足问题。

3. 适用场景与稳健性回应

这款代码特别适合高阶实证设计:当审稿人质疑 “模型遗漏行业层面时变特征” 时,采用 “个体 + 行业 × 年份” 的高维固定效应设定,能有效控制此类干扰,大幅提升研究的稳健性。

无论是处理基础双向固定效应,还是突破高维交互固定效应的矩阵限制,ivreghdfe都能以高效、精准的表现助力实证研究。希望这份代码和解读能帮大家少走弯路,让数据说话,让研究发光~

如果在使用过程中有疑问,或者需要其他实证方法的代码分享,欢迎在评论区留言交流!

#Stata 实证 #工具变量回归 #高维固定效应 #企业研究 #内生性处理


浏览 (206)
点赞
收藏
删除
评论