stata回归估计

Stata 提示 omitted because of collinearity(变量被共线性剔除)

不是 bug,是数学上算不出来。同时放原变量和对数、固定效应里放不随时间变化的变量,都会触发。

报错原文

note: x2 omitted because of collinearity

为什么会报这个错

这条是 note 不是 error,回归照样出结果,但某个变量被剔除了。含义是「这个变量能被其他变量线性表示,信息重复了」。

三个高频场景:

  1. 同时放入 size 和 ln(size)。两者完全共线。
  2. xtreg, fe 里放了不随时间变化的变量。固定效应会吸收所有个体层面不随时间变化的差异,性别、行业、注册地这类变量必然被剔除。
  3. 虚拟变量陷阱。k 个类别放了 k 个虚拟变量又带常数项,必有一个被剔除。

第 2 种最容易被误判成 bug——它其实是固定效应的数学性质,不是模型写错了。

怎么解决

第一步:确认是哪种共线

corr x1 x2

相关系数接近 ±1,就是近似完全共线。

第二步:按场景处理

  • 原变量 + 对数 → 只留一个
  • FE 里的时不变变量 → 这是正常的,系数本来也不可识别。如果确实要估计它的效应,改用 reghdfe 的 absorb() 配合随机效应,或用 Mundlak 方法
  • 虚拟变量陷阱 → 少放一个类别作基准组

第三步:系统性检查共线性

estat vif

VIF > 10 提示严重共线。

注意:FE 模型里时不变变量被剔除是预期行为,不用修。真正要担心的是时变变量之间的共线。

代码示例

* 场景 1:原变量与对数同时放入
gen ln_size = ln(size)
reg y size ln_size    // 必有一个被剔除

* 场景 2:FE 中的时不变变量
xtset id year
xtreg y x1 x2 i.industry, fe   // industry 被剔除

* 共线性诊断
reg y x1 x2
estat vif

延伸阅读

方差膨胀因子(VIF)是什么?如何用它诊断多重共线性? →

假设你用三个自变量——教育年限、工作经验、年龄——去解释工资。直觉上,这三个变量之间肯定有关系:年龄大的人通常工作经验也更多。但具体来说,这种\"自变量之间的相关性\"对你的回归估计有什么影响?

报错解决了,但方法还没搞懂?

报错只是表象。因果推断、面板数据、稳健性检验这些方法背后的逻辑,知识库里按「原理 × 直觉 × 代码」讲清楚了。

进入知识库 →