Day 03 · 手写教程
多重共线性 VIF
VIF<10 不等于万事大吉
VIF 是什么?
VIF 检查的是解释变量之间是不是太像。它不看因变量,也不检验因果。直观地说,如果 dfi_index 几乎能被一组控制变量解释掉,那么回归就很难分清到底是 DFI 在起作用,还是控制变量在起作用。
本案例里,dfi_index 的 VIF 是 1.007,最大 VIF 是 1.030,出现在 indep。这组数字非常低,说明当前变量组合没有明显线性共线性压力。
这一步怎么做?
先跑一版包含核心解释变量和控制变量的普通回归,再执行 estat vif。VIF 必须依附于当前这组解释变量;你换了控制变量,VIF 也会变。
经验上,VIF 小于 5 通常比较安心,5 到 10 需要解释,超过 10 就要认真检查变量设计。但这只是经验线,不是法律条文。理论上必须控制的变量,不能为了让 VIF 好看就随手删掉。
结果应该怎么读?
先看核心变量自己的 VIF,再看全表最大 VIF。核心变量 VIF 低,说明它没有被控制变量严重“吃掉”。最大 VIF 低,说明整体设计矩阵比较干净。最后再回到相关矩阵确认:相关矩阵低、VIF 也低,通常就不需要做额外处理。
论文里怎么写?
可以写:为排除多重共线性对估计结果的影响,本文进一步计算各解释变量的方差膨胀因子。结果显示,核心变量 DFI 的 VIF 为 1.007,所有变量 VIF 均接近 1,远低于常用警戒线,说明模型不存在严重多重共线性问题。
常见错误
不要写“通过 VIF 检验,所以不存在内生性”。VIF 只处理解释变量之间的线性重合,不处理遗漏变量、反向因果或测量误差。
本页案例代码和输出
下面这部分是本教程对应的实际案例材料,方便你把前面的解释和真实输出对上。
Stata 代码
log using "/root/workspace/empirical-wizard/workspace/f53c25a3/analysis.log", replace text
global JOB_DIR "/root/workspace/empirical-wizard/workspace/f53c25a3"
set more off
adopath + "/root/ado/plus"
global DATA_PATH "/root/workspace/empirical-wizard/workspace/test_e2e/csmar_innovation.csv"
import delimited "/root/workspace/empirical-wizard/workspace/test_e2e/csmar_innovation.csv", clear case(preserve)
capture confirm global JOB_DIR
if _rc global JOB_DIR "."
quietly duplicates drop
local rhs "dfi_index roa lev size growth cashflow tobinq top1 dual board indep soe age"
tempname fh
capture file close `fh'
file open `fh' using "$JOB_DIR/vif_results.csv", write replace
file write `fh' "变量,VIF,1/VIF,判定" _n
foreach v of local rhs {
local others : list rhs - v
quietly regress `v' `others'
scalar __r2 = e(r2)
scalar __vif = 1 / (1 - __r2)
scalar __inv = 1 - __r2
local verdict = cond(__vif > 10, "严重共线性", cond(__vif > 5, "需关注", "可接受"))
local vif_str : display %9.3f __vif
local inv_str : display %9.3f __inv
file write `fh' "`v',`vif_str',`inv_str',`verdict'" _n
di "VIF: `v' = `vif_str' (`verdict')"
}
file close `fh'
di "VIF 检验完成"
log close
输出表
| 变量 | VIF | 1/VIF | 判定 |
|---|---|---|---|
| dfi_index | 1.007 | 0.993 | 可接受 |
| roa | 1.015 | 0.985 | 可接受 |
| lev | 1.014 | 0.986 | 可接受 |
| size | 1.017 | 0.983 | 可接受 |
| growth | 1.021 | 0.980 | 可接受 |
| cashflow | 1.016 | 0.984 | 可接受 |
| tobinq | 1.009 | 0.991 | 可接受 |
| top1 | 1.007 | 0.993 | 可接受 |
| dual | 1.013 | 0.987 | 可接受 |
| board | 1.012 | 0.988 | 可接受 |
| indep | 1.030 | 0.971 | 可接受 |
| soe | 1.006 | 0.994 | 可接受 |
| age | 1.018 | 0.982 | 可接受 |
案例图

写作检查
本文在共用企业面板样本上报告VIF 共线性检验,核心输出见 vif_results.csv。结果解释时同时关注样本口径、变量构造、系数方向、标准误和适用前提,避免只凭单个 p 值完成方法选择。
- 确认本页使用的因变量、核心解释变量、控制变量与论文主模型一致。
- 先看表格里的样本口径,再看系数、p 值或诊断指标。
- 代码里的输出文件名要能对应网页展示的结果表。