卷 IV · 算出来CH 18深度 18/24

「控制变量」到底控制了什么

回归大概是你最熟的工具之一。这一章把它的盖子掀开——不是为了教你怎么用,是为了让你看清「加一个控制变量」这个动作在数据上的确切操作,然后你会明白前面几章那些灾难为什么必然发生。

FWL 定理残差化卷 IV 收尾

▷ 先判一次

在回归 Y ~ X + C 里,X 的系数可以被理解成?

A 保持 C 不变时,X 每增加一单位 Y 的变化B 把 X 和 Y 里能被 C 预测的部分都扣掉之后,剩余部分之间的斜率C X 对 Y 的因果效应D A 和 B 是同一件事的两种说法

A 是教科书上的标准说法。B 是这一章要给的说法。它们的区别,在有对撞机的时候会变成生死之别。

把「控制」拆成三步

1933 年 Frisch 和 Waugh、1963 年 Lovell 各自证明了一件事,今天叫 FWL 定理。它说的是:

◆ Frisch–Waugh–Lovell 定理

Y ~ X + C 里 X 的系数,精确等于下面三步的结果:

  1. YC 回归,取残差 ——这是「Y 里 C 解释不了的部分」
  2. XC 回归,取残差 ——这是「X 里 C 解释不了的部分」
  3. 回归,取斜率

不是「近似相等」,是代数恒等

用第 12 章那台机器的数据,两万人:

一步到位:回归 Y 对 (X, C),取 X 的系数        4.963182
分三步走:Y 残差 对 X 残差 回归,取斜率         4.963182

两者之差 = 1.12e-12          # 浮点运算的舍入误差,不是方法的差

三张散点图从左到右讲的就是这三步:先看 Y 里属于 C 的那部分,再看 X 里属于 C 的那部分,把两者都扣掉,剩下的对剩下的画一张图——那张图的斜率,就是你的「控制后系数」。

✂ 「控制」的确切含义

控制 C,不是「让 C 保持不变」,是「把 C 的影子从两边都减掉」。

这个说法比「保持不变」更准确,也更有用。因为「保持不变」暗示了一个物理动作(你按住了 C),而实际发生的是一次投影和相减——纯粹的线性代数,和 C 能不能真的被按住毫无关系。

顺带解释了一个初学者常见的困惑:为什么可以「控制」一个根本不可能保持不变的东西(比如年龄、或者一个恒等式里的分量)。因为你做的从来不是按住它,只是减掉它。

用这个视角重看前面的灾难

「减掉」这个画面一旦立住,第 11、12 章那些事故就都变得显然了:

控制中介:你减掉了自己想量的东西

X → M → Y。M 里包含了 X 的影响。把 M 从 X 和 Y 里都减掉,意味着 X 通过 M 传给 Y 的那部分效应,被你亲手减没了。剩下的只有直接效应。

数字上:真总效应 1.293,控制 M 后剩 0.495——减掉的正好是间接效应 0.8 × 1.0 = 0.8

控制对撞机:你减出了一个不存在的关系

X → S ← Y。S 里同时包含了 X 和 Y 的信息。把 S 从 X 和 Y 里都减掉之后,两个残差之间就有了负的关系——因为「S 里属于 X 的部分」和「S 里属于 Y 的部分」加起来是固定的。

这就是第 7 章那个 0.015 → −0.501「减法」这个操作本身,是有可能造出东西的。

为什么「多控制点更保险」的直觉来自预测

在预测问题里,多减一点确实没坏处:你只关心最终预测得准不准,而多一个特征最多是浪费自由度。

但在因果问题里,你关心的是某一个特定系数的含义。而这个系数的含义,完全取决于你减掉了什么。减错了东西,系数还在,含义变了——而回归的输出长得一模一样,不会有任何警告。

◆ 回归给你一个数,不给你一个意义

lm(y ~ x + a + b + c) 永远会返回一个 x 的系数。它是不是因果效应,取决于 a, b, c 选得对不对,而这件事回归本身完全不知道

这也是为什么这本书前面十七章几乎没提回归:回归是最后一步,而所有决定成败的事情都发生在这一步之前。

回归还有一件事值得知道

回归系数其实是一个加权平均,而权重不由你选。

更精确地说:Y ~ X + C 里 X 的系数,等于各层内效应的加权平均,权重正比于该层内 X 的方差

后果是:那些「处理组和对照组人数比较均衡」的层,权重大;那些几乎全是一边的层,权重小。如果不同层里的真实效应不一样(效应异质性),那么回归给你的那个数,既不是 ATE 也不是 ATT,而是一个由方差决定权重的、没有直接解释的加权平均

这在计量经济学里有一系列结果(Angrist 的「回归权重」、以及近年关于双向固定效应模型的一大批批评论文)。实用上的启示很直接:

  • 如果你要的是明确的 ATE 或 ATT,用加权(第 17 章)或标准化,别指望回归系数自动给你
  • 回归系数和 IPW 估计不一致时,第一个该怀疑的不是 bug,是效应异质性
▸ 在现实里

FWL 定理有一个非常实在的工程用途:调试。

当你的回归结果不符合预期时,把它拆成三步跑一遍,你能看见到底哪一步出了问题:

  • X 的残差方差几乎为零?——说明 X 几乎被 C 完全解释了,共线性严重,这个系数是靠极少的信息估出来的。
  • X 的残差和 Y 的残差画出来是一团完全没有结构的云?——那个系数本来就没什么内容。
  • 残差散点图上有几个点离得特别远?——你的系数可能是被那几个点决定的。

这些在「一步到位」的回归输出里全都看不见,只能看到一个系数和一个 p 值。拆开跑,是把黑箱变回白箱的最便宜的办法。

另外,FWL 也是很多现代方法的实现基础:固定效应模型就是先把组均值减掉再回归(那正是「对分组虚拟变量残差化」),第 17 章的双重机器学习也是同一个骨架——先各自残差化,再对残差做回归

✗ 这个直觉是错的
回归系数的解释是「保持其他变量不变时,X 变一单位 Y 变多少」。 代数上,它是「把其他变量的影子从 X 和 Y 里都减掉之后,残差之间的斜率」。这个描述永远正确;而「保持不变」那个描述,只在其他变量确实是可以独立拨动的前因时才对得上因果解释

差别在哪?「保持 C 不变」这句话隐含了一个因果承诺——它暗示存在一个世界,在那里你可以只动 X 不动 C。如果 C 是 X 的后果(中介),这个世界根本不存在;如果 C 是对撞机,这句话就更没有意义了。

教科书那句话之所以流传,是因为它在最简单的情形下是对的。而这本书前面十七章,讲的全是不那么简单的情形。

◇ 判词

B把 X 和 Y 里能被 C 预测的部分都扣掉之后,剩余部分之间的斜率。

这是 FWL 定理,是代数恒等式:一步到位 4.963182,分三步走 4.963182,差 1.12e-12

A 「保持 C 不变」——在 C 是外生前因时和 B 一致,其他情况下会误导。它最大的问题是让你以为「加一个变量」总是安全的:既然只是「保持它不变」,那多保持几个总没坏处吧?——而第 12 章那个 3.31 就是这么来的。 C 「就是因果效应」——只有在控制变量满足后门准则时才是。回归本身不知道也不检查这件事。 D 「A 和 B 是同一件事」——在最简单的情形下结论一致,但它们说的不是同一件事。B 描述的是算法真的做了什么,A 描述的是我们希望它意味着什么。这本书一直在做的,就是把这两者分开。

这一章的一句话

「控制 C」不是按住 C,是把 C 的影子从 X 和 Y 里都减掉;减对了得到因果效应,减错了得到一个长得一模一样、但意义已经变了的数。

卷 IV 到此结束。你现在会算了——只要后门堵得上。

卷 V 处理堵不上的情况:混淆存在、测不到、也没有前门。这时候唯一的出路是去世界上找一次别人替你抛的硬币。下一章从最经典的一种开始:一个只影响处理、不直接影响结果的变量。你会看到普通回归给出 2.5881(真值 2.000),而借了这把剪刀之后是 1.9964