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

输出表

变量VIF1/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 共线性检验 的共用案例输出图。

写作检查

本文在共用企业面板样本上报告VIF 共线性检验,核心输出见 vif_results.csv。结果解释时同时关注样本口径、变量构造、系数方向、标准误和适用前提,避免只凭单个 p 值完成方法选择。

  • 确认本页使用的因变量、核心解释变量、控制变量与论文主模型一致。
  • 先看表格里的样本口径,再看系数、p 值或诊断指标。
  • 代码里的输出文件名要能对应网页展示的结果表。

返回方法库 · 打开 empirical-wizard