跳转至

8.1   相关与因果

本节学习目标

  • 分清 相关 (correlation)因果 (causation)
  • 识别 混杂变量、反向因果、巧合 三大陷阱
  • 知道想证因果,得靠 实验(RCT、自然实验、因果图)
  • 记住一条铁律:先画散点图,再下结论

8.1.1   冰淇淋与溺水的『高相关』

每年夏天,沿海城市的卫生局都会注意到一个诡异的统计结果:冰淇淋销量溺水死亡人数 的月度相关系数高达 0.8。报纸标题写着:『甜食危机:冰淇淋让孩子无法游泳?』

均哥, 这个 r=0.8 看着铁证如山, 是不是该禁止泳池边卖冰淇淋?
慢着——这是 相关, 不是 因果。 真凶是气温

冰淇淋只是『跟着出现』,并没有 导致 任何事。这样的例子不是孤例:『家里书多的孩子成绩好』『喝咖啡的人更长寿』『吃巧克力多的国家诺奖也多』——每一个都是漂亮的相关,但背后可能藏着第三个变量、藏着反过来的因果、或者纯属巧合。

本节就把『相关』和『因果』分清楚,让你不再被这类新闻骗。

金句:Correlation does not imply causation.(相关不蕴含因果。)


8.1.2   把幕后的气温画进去

那 r=0.8 不能信, 到底要看啥?
看真因。 把第三个变量画进去, 谜底就露出来。

先把冰淇淋和溺水画成散点:横轴是某月冰淇淋销量,纵轴是当月溺水人数,每个点是一个月份。你会看到一条向右上斜的点云——卖得多的月份,淹得也多。

但这条云的『斜』来自一个看不见的推手:气温。把气温也画进去(用颜色深浅表示),整张图一下就清楚了:高温的月份挤在右上角(冰淇淋卖得多、溺水也多),低温的月份挤在左下角。冰淇淋和溺水之间根本没有手伸过去,它们只是 同一个时钟下的两根指针。这种结构有个名字:虚假相关 (spurious correlation)

        气温 ↑
        /      \
   冰淇淋 ↑     溺水 ↑     (两者只是被气温一起推高)

图 8.1.1 不同相关程度示例

图 8.1.1   强正相关、中负相关、无相关三种典型散点——形态决定一切,光看一个数字会骗人。

下面这个动画让你亲手拖动相关程度,看『冰淇淋 vs 溺水』的点云怎么变形:

原来一团斜的点云, 背后真正拉它的是气温!

8.1.3   相关系数的脾气:怕离群点、只认直线

怎么把『一起涨一起跌』压成一个数?这正是 §4.8 手把手算过的——先算 协方差 定方向,再除以两个标准差洗掉单位,得到 相关系数,落在 −1 到 +1 之间。这里不再重算,直接拿来用,只补两条它的『脾气』,免得被它骗:

  • 它只认直线。 相关系数为 0,只说明没有 直线 关系。数据完全可以是一条 U 形曲线(先升后降),明明紧紧绑在一起,却照样被它判成『无关』。所以看见 0,别急着说两者没关系。
  • 它怕离群点。 一个离群的极端点,就能把相关系数从 0 一把拽到 0.8。这也是为什么我们反复强调——先画散点图,再报相关系数
那相关系数等于 0, 是不是就说明两个变量没关系了?
只是没直线关系。 U 形曲线 r 也能是 0, 关系却很紧。

8.1.4   骗人的相关有三种花样

那骗人的『相关』, 到底有几种套路?
三类——混杂、反向、巧合。 挨个拆给你看。

回到冰淇淋的故事,把骗人的『相关』归成三类:

(1)混杂变量 (Confounder)。 背后有个第三者同时影响两边。气温→冰淇淋、气温→溺水,就是最经典的混杂——这正是我们这一节的主角。

(2)反向因果 (Reverse causation)。 看到 X 和 Y 一起变,以为是 X 推动 Y,其实是 Y 在推动 X。比如『朋友多的人更幸福』——也可能是 先幸福、才更容易交到朋友,方向反了。

(3)纯属巧合。 样本不随机,或者运气太好两条线刚好一起漂。有人专门收集这种离谱例子:『某州离婚率 vs 人造黄油消费量,相关高达 0.99』——其实只是两条各自下降的曲线撞在了一起。

所以看到漂亮的相关, 得先反问自己三句?
对。 有没有第三者? 方向反没反? 是不是纯巧合? 三连问过一遍再下结论。

陷阱:r 一高就喊因果

任何想用观察数据声称『X 导致 Y』的说法,都得先过三个反问:有没有混杂变量?因果方向反了没?是不是纯巧合?


8.1.5   想证因果,得靠实验

那要是真想证明因果, 该怎么走?
三条路: 随机试验、自然实验、因果图

要从『相关』升级到『因果』,统计学有三条主流路子:

方法 思路 例子
随机对照试验 (RCT) 随机分组,强行打散一切混杂 临床新药试验
自然实验 借一个外部偶然事件做随机化 政策断点
因果图 (DAG) / 工具变量 用因果图理论把混杂识别出来 经济计量学

放回冰淇淋的故事:如果真要证因果,就得找一群条件差不多的人,随机 分配吃或不吃冰淇淋,再看溺水率——你会发现两组根本没差别。这类方法的细节见 §16.5 因果推断。

应用场景

医学新药、教育政策、广告效果、A/B 测试——所有真想说『我做了 X,导致了 Y』的场合,背后撑腰的都是 RCT 或类 RCT 设计。媒体里只靠观察数据得出的『研究发现』,先打七折再读。


8.1.6   用 scipy 算一行相关系数

Python 算相关, 是不是一行就行?
一行没错。 但永远先画图, 再看这个数。
import numpy as np
from scipy import stats

# 12 个月的数据(拟真合成):幕后真凶是气温
rng = np.random.default_rng(0)
temp     = rng.uniform(10, 35, 12)             # 气温
icecream = 50 + 4.0 * temp + rng.normal(0, 8, 12)   # 冰淇淋销量
drown    = 2 + 0.3 * temp + rng.normal(0, 1, 12)    # 溺水人数

r, p = stats.pearsonr(icecream, drown)
print(f"冰淇淋 vs 溺水: r = {r:.2f}")
# r 算出来很高,但两者谁也没导致谁——真凶是没进模型的气温

冰淇淋和溺水的相关系数会很高,可它们之间没有任何因果。一行代码能算出 r,却算不出『谁导致谁』——那永远得靠前面说的实验来回答。

你知道吗

Pearson 在 1896 年提出相关系数,本意是想量化达尔文表弟 Galton 发现的现象:高个父亲的孩子,身高会 回归到平均。『回归』这个词(regression)就是从这儿来的——它原本描述的是一种『被拉回平均』的趋势,而不是『拟合一根线』。下一节我们就来认识这根线。


8.1.7   本节小结

  • 相关 ≠ 因果:看到漂亮的相关,先警惕 混杂、反向、巧合 三大陷阱。
  • 相关系数只认 直线、还怕离群点;等于 0 不代表两者独立(可能是曲线关系)。它怎么算,§4.8 已手把手讲过。
  • 看相关系数之前 先画散点图——形态决定一切。
  • 想要因果,就做 实验 或用因果推断方法(RCT、自然实验、因果图),细节见 §16.5。
  • 下节 §8.2 进入 简单线性回归,把『相关』升级成『带方程的预测』。