方差膨胀因子VIF原理
方差膨胀因子(Variance Inflation Factor,VIF)的计算原理,本质上是通过回归模型来量化一个自变量与其他自变量之间的线性相关程度,从而检测多重共线性(multicollinearity)。
📌 一句话速览
VIF 把每一个自变量都当成一次“因变量”,用其余变量去拟合它;如果拟合得太好(R² 高),就说明这个变量能被“队友”线性表达,于是 VIF 暴涨,提示多重共线性。
1、为什么会有 VIF?——多重共线性的坑
在多元线性回归中,如果两个或多个自变量高度相关,就会出现:
- 系数符号颠倒(理论上正,估计出负)
- 标准误膨胀,t 检验统统不显著
- 模型预测能力还行,但解释性差到怀疑人生
相关系数矩阵只能抓两两关系,但 VIF 能揪住一群变量之间的“合谋”。
2、VIF 的计算原理与公式推导
2.1 思路
把每个自变量 Xᵢ 轮流当作“伪因变量”,用其它所有自变量去回归它:
X i = β 0 + β 1 X 1 + ⋯ + β i − 1 X i − 1 + β i + 1 X i + 1 + ⋯ + β k X k + ε X_i = \beta_0 + \beta_1 X_1 + \dots + \beta_{i-1} X_{i-1} + \beta_{i+1} X_{i+1} + \dots + \beta_k X_k + \varepsilon Xi=β0+β1X1+⋯+βi−1Xi−1+βi+1Xi+1+⋯+βkXk+ε
得到该模型的决定系数 Rᵢ²。
Rᵢ² 越接近 1,说明 Xᵢ 越能被队友线性复现,共线性越严重。
2.2 公式
VIF i = 1 1 − R i 2 \text{VIF}_i = \frac{1}{1-R_i^2} VIFi=1−Ri21
- 如果 Rᵢ² = 0.9 → VIF = 10
- 如果 Rᵢ² = 0 → VIF = 1(完全独立)
3、阈值到底怎么定?5?10?
区间 | 经验解释 |
---|---|
VIF < 5 | 一般可接受 |
5 ≤ VIF < 10 | 轻度共线性,需关注 |
VIF ≥ 10 | 严重共线性,建议处理 |
注:社会科学/小样本可放宽到 5;金融风控/高维数据常压到 2.5。
4、总结一句话
VIF 是通过 “用每个变量去预测其他变量” 的方式来检测它是否冗余,值越大,说明这个变量越可能是其他变量的“线性组合”,也就越可能引发多重共线性问题。
5、在进行环境变量筛选时,应是先用Pearson相关性,还是先用VIF呢?
一句话结论: “先做 Pearson 粗筛,再做 VIF 精筛” —— 两步法最稳。
-
Pearson 粗筛:先快速丢掉“明显撞车”的变量
- 直接算两两相关系数,把 |r|>0.9(或你定的 0.8)的一对变量中业务意义弱/测量误差大/缺失值多的那一个先删掉。
- 优势:计算量极低,瞬间把“一眼假”的高相关排除,减小下一步 VIF 的矩阵维度。
- 注意:这一步只是降维,不保证消除多重共线性,因为 3 个以上变量仍可能“抱团”。
-
VIF 精筛:再检查“团队作案”的多重共线性
- 在剩下的变量里跑 VIF,看每个变量被其余所有变量线性解释的 R²。
- 如果 VIF>阈值(通常 5 或 10)就继续删或做正则化/主成分。
- 优势:能捕捉“低两两相关、高多重共线”的隐藏套路。
5.1、反着做会怎样?
-
先做 VIF
19+3+18=40 个原始变量直接丢进去,协方差矩阵 40×40,计算量大不说,变量之间“明显撞车”的噪声也会让 VIF 结果虚高,导致误删。 -
只做 Pearson
如你之前遇到的情况,可能留下 3 个变量两两 r<0.8,但三者线性组合却高度相关,VIF 依旧爆表。
Pearson相关性分析结果(40个变量):
按照阈值0.8筛选之后的环境变量的Pearson相关性分析结果(11个变量):
由此可见相同的环境变量,在不同的数量组合之下,其Pearson相关性系数可能有非常大的区别。因此需要结合着VIF来筛选。
5.2、推荐流程一句话总结
“Pearson 剪枝 → VIF 体检 → 业务复核”,既省算力又保稳健,还能避免漏网之鱼。