VIF共线性诊断
这个方法是做什么的
回答一个问题:这批变量里,有没有哪一个近似等于其余变量的线性组合。做法是以每个变量为因变量、其余变量为自变量各做一次辅助回归,得到这个变量被其余变量解释掉的比例 R²ᵢ,于是 VIF = 1 / (1 − R²ᵢ),容忍度 = 1/VIF = 1 − R²ᵢ。“方差膨胀”这个名字来自它的实用含义:与“完全不共线”相比,√VIF 就是这个变量的回归系数标准误被放大的倍数——VIF = 4 意味着标准误翻倍、置信区间宽一倍。
除了 VIF 与容忍度,报告还给出每个辅助回归的 R²ᵢ 及其 F 检验、VIF 的 Bootstrap 95% 置信区间、变量之间的零阶 Pearson 相关矩阵与热力图,以及 Belsley-Kuh-Welsch 条件指数与方差分解比例。最后这一项比 VIF 更进一步:VIF 只能告诉你某个变量整体上有多共线,条件指数能指出是哪几个变量凑成了一条近似线性关系。
需要准备什么数据
- 分析变量(定量):至少 2 个,定量变量(数值)
数据要求
- 数据表至少 30 行。
- 单列缺失率不超过 20%。
- 不接受取值全都一样的列(零方差列没有可分析的变异)。
以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。
什么时候用它
- 建回归之前先摸底一批候选自变量彼此重叠到什么程度
- 回归系数的符号与常识相反,或者整体 F 很显著、单个系数却都不显著时,回头查共线
- 一批高度同源的量表维度(工作压力、情绪耗竭、职业倦怠)要不要一起进模型
- 论文需要单独报告共线性诊断,且要给出条件数与方差分解比例
参与诊断的变量必须全部是定量的,定类变量要先做哑变量编码再进来;至少 2 个变量;样本量必须大于变量个数,否则辅助回归没有残差自由度,VIF 会发散。缺失按列表删除,任一变量缺失即整行剔除。还要注意 VIF 是诊断指标而不是假设检验,它不要求变量正态、也不要求变量之间是线性关系,所以卡① 只核查“能不能算、算得稳不稳”,不做正态性与方差齐性检验。「线性回归 (最小二乘法)」的第一张卡本来就带一张 VIF 与容忍度的表,本模块是把这件事做深,而且不需要指定因变量。
什么时候不要用它
- 你已经在跑回归、只想看一眼有没有共线:「线性回归 (最小二乘法)」的第一张卡已经给了 VIF、容忍度与判定,不必单开本模块;要条件指数、方差分解比例或 VIF 置信区间时再过来。
- 已经确认严重共线、又不想删变量:用「岭回归(Ridge)」或「Lasso回归」,正则化能把系数估计稳住;若干个相互替代的变量也可以先用「主成分分析(PCA)」压成综合维度再进模型。
- 你想知道的是两个变量之间关系有多强:用「Pearson相关性分析」。反过来也成立——两两相关全都不高,仍然可能存在“一个变量 ≈ 其余若干变量的线性组合”的多元共线,这正是 VIF 相对于相关矩阵的价值。
- 目的是从一大堆候选变量里挑出该进模型的那些:用「特征筛选」或「逐步回归」。VIF 只诊断不筛选,而且样本量勉强大于变量数时它自己就不稳——辅助回归的残差自由度 df₂ = n − k 太小,会让 R²ᵢ 被高估、VIF 虚高。
- 你怀疑的依赖关系不是线性的:VIF 和它背后的辅助回归度量的都是线性相依,变量之间若是阈值型或 U 形依赖,VIF 可以全部接近 1。单调的非线性依赖用「Spearman相关分析」更容易看出来,非单调的只能靠散点图。
容易误读的地方
- VIF 高不等于模型不能用,取决于你要做预测还是解释单个系数。 共线性不影响模型整体的 R² 与整体 F 检验,对预测的影响也有限;它伤的是单个系数:标准误被放大 √VIF 倍,于是系数不稳定、p 值容易不显著、换一批相似的数据符号都可能变。所以目的是预测时,较高的 VIF 常常可以不处理;而在小样本、要逐个解释系数、要报告某个变量净效应的研究里,VIF = 5 就可能已经致命。“整体 F 很显著、单个系数却都不显著”正是共线性最典型的症状。
- VIF > 10 只是常用经验阈值,不是定论。 报告采用的 <5 良好 / 5~10 中度 / >10 严重这套判读没有分布理论支撑,不同学科的惯例也不一样。要不要处理得同时看三件事:研究目的是预测还是解释、样本量有多大(同样的 VIF,n = 1000 时系数照样估得准,n = 60 时就危险)、以及你关心的那个系数的置信区间宽到了什么程度。把阈值当门禁用,会既漏掉真问题、又删掉不该删的变量。
- 不要用辅助回归的 p 值判断共线严重不严重。 那个 F 检验的原假设是“该变量与其余变量线性无关”,也就是 R²ᵢ = 0、VIF = 1——门槛低到几乎必然被拒绝。示例里三个变量的 VIF 分别是 1.892、1.693、1.610,全部判读为“良好”,而三个辅助回归的 p 全都小于 0.001。共线性严重与否只看 VIF 的大小,不看 p。
- VIF 与条件数可能给出不一样的印象,别只挑好看的那个报。 VIF 只说某个变量整体有多共线,说不出是哪几个变量凑在一起;第四张卡的条件指数与方差分解比例才回答后一个问题,判据是同一行(同一个主成分)里条件指数大于 30、且有两个及以上变量的方差分解比例大于 0.5。两者不总是同步:示例最大 VIF 只有 1.892(良好),条件数却是 20.24(弱到中度共线)。原因在于条件指数把常数项也放进设计矩阵、并且按列缩放而不中心化,因此对变量的量纲与均值水平更敏感。两者结论不一致时,要说清楚你依据的是哪一个。
- 哑变量组、交互项与其主效应之间天然共线,不能按 VIF 逐个剔除。 同一个定类变量拆出来的一组哑变量彼此互斥,本来就相关;交互项 X·Z 与 X、Z 也必然相关。这类高 VIF 是结构性的,正确做法是让它们整组进出模型(交互项通常先把主效应中心化,能消掉相当一部分这种非本质的共线),而不是看谁 VIF 高就删谁。同样地,删变量也不是唯一出路——把相互替代的变量合并成综合指标、做主成分回归、改用正则化方法,都能解决问题而且不丢信息。
报告里有什么
- 输出结果一:数据概览与前提检验
- 输出结果二:VIF 共线性诊断主结果表
- 输出结果三:可视化
- 输出结果四:效应量与深入诊断
- 输出结果五:结论与学术表述
柱状图展示各变量的 VIF,橙色虚线为中度共线阈值(5),红色虚线为严重共线阈值(10);右上角切换器可改看条形图/折线图或明细表(契约 §3)。
热力图展示变量之间的零阶 Pearson 相关系数(红=正相关,蓝=负相关)。