City Background
统计

理解独立变量

LOSSES

在「理解方差可加性」一记当中我们发现变量之间可能存在相关性,在本记中,我想继续和你聊聊这种「变量之间的相关性」对数据分析有什么影响。

在开篇,我想先引入一个重要的观念,之前我们从数据生成过程的角度建立了两套理论上完全正交的变量,但在现实世界当中,只要几个变量是由「同一个人」生成的,那么它们必然会存在某种关联,只是大小的差异,因为那是同一个人做出来的行为。

这种不同变量之间的关联,又被称作共线性(multicollinearity),用比较正式的方法讲,可以理解成模型里的预测变量(自变量)之间存在相关的情况。

让我们看一个相对简单的例子,比如「体重」和「腰围」一定是有相关性的,尽管高矮、体脂率之类的有影响,但整体来说,体重越重的人腰围就越大。换言之,如果我们知道一个,基本就能猜出另一个。

这种「共线性」不一定只发生在两两变量之间,也可以是多个变量联合起来能预测其中一个,比如 X₁ ≈ X₂ + X₃,即便 X₁、X₂、X₃ 两两之间看起来没那么相关。

我们在建立模型的时候,总是追求某个变量自己的「独立贡献」,而如果两个变量携带了高度重叠的信息,那么统计工具就很难把它们分开,这是一种相当棘手的情况。

影响

显著性

最典型的一类症状是,虽然模型作为一个整体是显著的,但是下面的各个变量却没一个是显著的。比如你在做线性回归的时候,各个 beta 值,或者方差分析当中的各个成分。

其中的原理相对来讲比较好理解,这些数据合在一起的确能对因变量做出解释,但是因为各个变量之间的信息高度重合,导致很把每个人「独立」的贡献拉出来。

统计参数混乱

我们以线性回归当中的 beta 为例,这个系数本来的意思是:在其他变量保持不变的情况下,当这个自变量增加一个单位时,因变量会发生几个单位的变化。

但「其他变量保持不变」这个前提,在共线性严重的情况下几乎不可能在数据里实现,因为一组共线性变量总是同步变动,你几乎找不到 X₁ 变了但 X₂ 没变的观测。

在极端共线性下,模型估计出来的 beta 可能大得很离谱,而且两个相关变量的 beta 往往一正一负,互相抵消,预测时合在一起结果还是准确的,但单独看每个系数毫无意义。换一批样本数据,这些极大的 beta 会完全变成另一套数字,甚至符号彻底翻转。

究其背后的原因,大多数的统计工具都会想办法让每个变量的 beta 只反映它自己能「唯一解释」的那部分,共享的部分两边都不算。共线性越严重,共享部分越大,两个变量各自的唯一方差就越小。

当 X₁ 和 X₂ 高度共线,在你的样本里几乎没有「X₁ 比 X₂ 高一点但 X₂ 没变」的观测。模型要分别估计两者的效应,只能依赖极少数两者恰好有一点差距的观测。猜猜这些「刚好有一点差异」的观测是什么?答案是一点点真实效应和大量的随机噪声。此时模型回归出来的参数几乎都是基于噪声的「过拟合」。而我们的实验设计没有「设计过噪声」(被设计过的噪声叫控制变量),换言之这些噪声全都是完全随机的,因而 beta 值才会变得如此不稳定。

最要命的是,在一些特殊情况下,方差分析当中的因子、回归分析中的 beta、双样本 t 检验中的 t 值如果很大,那么它很有可能会有非常小的 p 值。其结果是,你得到了一个完美到荒谬的噪声模型。

诊断方法

最直观的起点是看预测变量之间的两两相关系数矩阵。如果某两个变量的相关系数很高,就是明显的共线性警示。

但相关性矩阵有一个盲区:它只看两两之间的关系,看不到多变量联合造成的共线性。比如 X₁、X₂、X₃ 两两相关系数都只有 0.3,看矩阵会觉得没问题,但如果 X₂ 和 X₃ 加在一起能把 X₁ 预测得很好,X₁ 的共线性问题就很严重。

因此我们需要引入另外一个工具,方差膨胀因子 VIF。这个统计工具会对每个自变量都做一系列的线性回归。它的计算方式是:把一个变量当成因变量,用其他所有预测变量去预测它,看能解释多少比例的方差(也就是 R²)。

假设我们发现「体重」解释了「90%」的腰围变异,那么把二者放在同一个模型当中时,腰围的独特变异就只剩下 10% 了,换言之,对回归系数的估计主要依赖的就是这剩下的 10% 的信息。信号被压缩到原来的 1/10,进一步地,参数估计的不确定性(方差)被大约放大了整整 10 倍。

因此,每个预测变量都有自己的 VIF,有几个变量就有几个 VIF。经验上讲 VIF > 5 需要关注,VIF > 10 是严重问题,但这个阈值本身只是一个参照指标,也有研究者认为 VIF 低至 3-4 时就可能已经影响系数稳定性。

VIF 是一个很概略性的描述,它不能细致地告诉你究竟具体哪些变量抱团了。如果你真的下定决心挖细节,那么可以试试共通性分析。它在做的和 VIF 差不多,也是做一火车皮的线性回归模型,但是自变量和因变量的设置不同。假设你的研究有三个自变量:「身高」、「体重」、「腰围」,一个因变量「幸福指数」。那么它先做「幸福指数」和「身高」之间的回归模型、和「体重」之间的回归模型,和「腰围」之间的回归模型,然后再做一组纳入两个变量的所有组合,最后再做一个包含三个变量的全模型,这样我们就得到了七个模型。

通过这样的遍历方式,我们得以将方差的解释(R²)拆成两类:每个变量唯一解释的部分,以及所有变量组合之间共同解释的部分。

这里面的技术细节很多,而且对于社科领域研究者来讲通常是不必要的,所以在这里我只浅谈一嘴原理不做深究。从统计原理上讲,当两个模型预测的是同一个因变量 Y,并且使用的是同一份数据时,哪怕多个模型的自变量不一样,R² 依然是可比的,换言之你建的那一火车皮模型当中的每一个 R² 都是等距的,你可以方心地把它们加加减减。加减法产生的结果,依然在同一把尺子上。

具体而言,身高和体重的共同解释 = (R²(身高) + R²(体重)) - R²(身高,体重)

它的优势是把共线性的位置和量级明确地呈现出来,你能看到共享方差到底有多大,来自哪几个变量之间的互动。但麻烦的地方想必你也心里有数:你最好有那个脑容量能把每个格子都解释清楚,我的朋友!

处理方式

最简单的方法是合成变量。但这要求你必须有理论支持一个「变量合成公式」。毕竟你不能瞎把两个变量胡乱叠在一起。例如,如果你同时测量了身高和体重,它们共线性严重,那你完全可以把它们合成一个 BMI。这样共线性从根源上消失了,你感兴趣的信息也没有被丢掉。

另一种做法是只保留其中一个变量在主模型里,然后用另一个独立的模型来描述两个变量之间的关系。这样主模型避开了共线性,而变量之间的关联结构也没有被忽视,只是放到了另一个层次去处理。这个思路在概念上和 SEM 的中介分析有相似之处,但更轻量,适合在理论框架不够完整、还不足以建立完整结构方程的情况下使用。

如果两个变量高度共线,且理论上没有充分的理由同时保留两者,那么为什么不删掉一个呢?毕竟,看上去两个变量在描述的根本是一回事,不然也不可能会有那么强的相关。但这需要理论判断,不能纯靠统计决定留谁删谁。删掉的那个变量如果其实对结果有独立贡献,删掉它会引入遗漏变量偏差,影响剩余变量系数的估计。

删了一个变量之后,你也可以用 F 检验做模型比较,我们知道 F 分布描述的就是两个方差之比,所以你大可以直接把两个模型的误差解释总量除一下,放进 F 分布里面看看哪个模型更优,差异是否足够显著。但这个做法的局限是,如果两个变量携带了高度重叠的信息, F 检验也很可能比不出显著差异。

最后,我们也可以修改共享方差的归属权问题。共线性的核心问题就是共享方差的归属不明确,因此大多数统计软件选择把共享的部分全都扬了,但是你也可以手工指定应该把它划给谁。Type I 方差(序列回归)就是这样的一个工具。它按照你规定的顺序依次纳入变量,排在前面的变量优先拿走它能解释的所有方差(先来通吃),自然也包括和后面变量共享的部分,后面的变量只能得到前面变量「吃剩」的那部分。但这个做法的代价是:你依然必须有充分的理论依据来规定顺序。结果直接取决于你把谁放前面,换一个顺序就会得到完全不同的结论。

当然,如果你方法玩得很溜,路径分析与结构方程模型(SEM),且你有足够清晰的理论,能够画出一个清晰的数据间互动结构(比如 X₁ 通过 X₂ 影响 Y),那么路径分析或结构方程是最彻底的解法。它把共线性背后的结构关系显式建模,不再让共享方差成为不明不白的问题。当然这玩意对理论明确性的要求非常高,你必须事先有足够充分的理论来规定变量之间的结构,不能从数据里枚举、盲猜。在理论积累薄弱的领域,随意指定 SEM 结构反而带来更严重的问题。

最后,一个比较糟糕的做法,通过主成分分析把变量拆成自然正交的几组变量组合(PCA 是一种把所有预测变量压缩成几个互相不相关主成分的方法)拿着这些毫无相关性的变量建模,你就可以从根源上消除共线性。

但它有一个很麻烦的地方:通常为了彻底分解,会创造出来一大堆「主成分」,实操层面研究者需要丢弃掉那些对数据概括能力很小的「主成分」,但概括能力和「与结果变量的关系」是两码子事。因此,被丢弃的低方差主成分,恰恰可能是和结果变量关系最密切的信号。你可能丢掉的正是最有解释力的部分,而不自知。

此外,主成分本身是原始变量的线性组合,通常难以用实质性语言解释,分析结果的可解释性会受到很大损伤。

共线性是研究设计问题

从上面的讨论中,你会看到,几乎所有处理共线性的方法都要求你有很强的理论模型,或者被迫地做出一大堆解释。

尽管精明的研究者会在研究设计的时候刻意设计包含多重共线性的变量,并且细致拆解分析内在原因。但是,大多数发生多重共线性的情况都是研究者在设计实验的时候没把问题想明白,胡乱塞了一大堆变量,希望撞个大运,结果搞出来了一大堆很难收拾的麻烦。

但这并不意味着研究者可以通过实验设计彻底根绝共线性。从数据生成过程的角度来看,现实世界里几乎不存在真正独立的变量。睡眠、运动、饮食、压力、社交关系、文化、基因,这些变量在真实世界里互相影响、互相预测,共线性是它们之间关联结构的自然反映,而不是数据出了什么问题。在观察性数据里,研究者无法「修复」或者「根除」共线性。

实验设计可以缓解这件事。当研究者对自变量有控制权,可以通过随机分配和操控条件,人为地切断变量之间在现实世界里的自然关联,让它们在样本里保持一定程度上的正交。随机对照实验的核心价值之一,恰是在于它尝试打破这个天然存在的东西,让原本共线的变量在实验条件下变得洗那个对独立,统计估计因此变得更加清洁。

不过值得再次强调,这只是「控制」的手段,不能魔术般地把变量变得彼此不相关,只要是同一个人产出的数据,就不可能做到变量间在事实层面上的零相关。

请务必牢记:

观察性研究里,共线性无法根本解决,只能如实面对。 如果数据告诉你两个变量无法被分开,那可能是因为在产生数据的过程里它们本来就分不开。这时候能做的是如实报告共线性的存在,谨慎解读单个系数,并承认你的结论只能针对这两个变量的整体,无法分别归因。

实验研究里,事后发现共线性是一个设计层面的失误。 研究者在选择操控变量和测量变量的时候,就应该考虑这些变量在理论上和经验上是否存在重叠,以及如果存在重叠,自己的分析策略是什么。把这个问题留到数据收集完毕之后再处理,意味着在设计阶段做了一个没有明说的赌注。

研究者的贪婪

最后一个实践层面的提醒。

只要你往模型里添加变量,R² 就一定会升高,哪怕你加进去的是完全随机的噪声变量。这意味着单纯追求高 R² 是没有意义的,你总能通过堆变量来让它看起来更好,但背后可能只是在拟合噪声。

矫正 R²(Adjusted R²)正是为了应对这个问题而存在的。它在 R² 的基础上对模型复杂度施加惩罚:每增加一个变量,如果它带来的解释力增量没有超过纯粹由自由度减少所能带来的期望改善,矫正 R² 就会下降。所以矫正 R² 只在新变量真正有贡献的时候才上升。

因此负责任的研究者永远应当让统计软件输出矫正 R² 并诚实地在研究中报告矫正 R²。

把过多变量纳进模型,某种程度上是一种贪婪。这种贪婪在共线性的语境下尤其需要警惕,因为共线性严重时,多一个变量不只是「多解释一点」,它还会搅动整个模型里其他变量的系数估计,让原本稳定的结论变得不可靠。

Comments

Loading animation

Loading comments...