简介:本资源为斯坦福大学Stefan Wager于2024年9月更新的《Causal Inference: A Statistical Learning Approach》教科书草稿,面向数据科学、统计学、经济学与公共政策方向的研究生和研究者,帮助其系统掌握基于统计学习方法的因果推断框架。全书围绕随机对照试验中的估计方法、无混淆假设与倾向得分、双重稳健与双重机器学习、异质处理效应的半参数建模、政策学习与经验福利最大化、自适应实验设计、平衡估计器以及回归断点设计等主题展开,并附各章文献注记,结构完整、层次清晰,既涵盖经典基础理论,也引入近年方法学前沿进展。资源包内含1个PDF文件,大小约1.66MB,轻量便携,适合打印精读或在平板、电脑上随时查阅。目前已有2000人学习下载,可作为课程教材、组会研讨材料或因果推断研究的案头参考。
1. 因果推断到底在问什么:一句“如果当初没做”值多少钱
“因果推断”这四个字听着像统计学家的黑话,其实它回答的是每个人都问过的问题:这件事,到底是不是那件事造成的。早上头疼吃了一片药,半小时后不疼了,是药起效,还是本来就要好?你永远只能看到“吃了药”的那一个版本,另一个版本发生在平行时空里,永远拿不到手。这份 2024 年秋天仍在修订中的教材草稿,干的就是把那个看不见的版本用随机化和概率“补”出来,并且给补出来的数字配一个误差范围。值得搞懂的原因很朴素:改版页面、投放优惠、调整课程安排,只要你在做决策,你就已经在偷偷做因果推断,差别只在于做得严不严谨。搞清它的边界,你至少能分辨哪些结论是证据,哪些只是故事。
2. 随机对照试验:因果推断那把最硬的标尺
随机对照试验在因果推断里的地位,有点像长度测量里那根铂铱合金原器:它未必是唯一能做实验的方式,但别的设计多多少少都要拿它当参照系。教材把它排在第一章,不是因为它简单,而是因为后面所有观察性研究的方法——倾向得分、双重稳健、断点回归——几乎都能找到一条“如果当初能随机分配就好了”的动机线。看懂了随机试验为什么干净,你才知道别的办法到底在补哪一块缺口。
2.1 潜在结果:每个人身上都藏着一个看不见的平行版本
假设有一千人参加一项测试,每人被随机分到处理组或对照组。对第 i 个人,我们想象两个数:$Y_i(1)$ 是他接受处理后的结果,$Y_i(0)$ 是他没接受处理时的结果。这两个数叫潜在结果,它们的差 $\Delta_i = Y_i(1) - Y_i(0)$ 就是这个人的个体因果效应。麻烦在于,同一个人在同一时刻只能走一条路,你永远只能观察到一个潜在结果,另一个被锁在平行时空里。这就是因果推断的根本难题,也是它区别于普通预测的地方——预测只要猜得准,因果却要先构造一个看不见的反事实。
教材里还给了一个容易被忽略的前提,叫稳定单位处理值假设,英文缩写 SUTVA。它说的是:一个人的结果只取决于他自己接不接受处理,不受别人接不接受处理的影响。在医学场景里这通常成立,病人吃不吃药不会影响隔壁床的病人;但在社交网络、教育、经济这些有人与人互相影响的场景里就不一定了。一个人参加了培训,可能通过同事间的交流让没参加的人也受益,这时候“对照组”就不再干净。教材把溢出和干扰单独放到后面的章节,正是因为这个假设一旦破了,前面那些漂亮的无偏性结论都要重算。
理解了这一层,你就能明白为什么随机试验被叫作“金标准”。它没有消除平行时空,只是用抛硬币的方式,让两个组在期望上变得一模一样。你不需要知道每个人的 $\Delta_i$,也能知道这一群人的平均效应大概是多少。
2.2 差分均值估计器:最笨的算法为什么最难被糊弄
随机试验里最朴素的估计方法,叫差分均值估计:处理组的结果平均值,减去对照组的结果平均值。
$$\hat{\tau}{DM} = \frac{1}{n_1}\sum{W_i=1} Y_i - \frac{1}{n_0}\sum_{W_i=0} Y_i$$
它的无偏性几乎不需要任何分布假设。直觉是这样的:随机化保证了每个人进处理组的概率相同,所以处理组在期望上就是全体人群的一个随机切片,对照组也是。两个切片一减,个体差异被平均掉,剩下的就是处理效应。教材用定理的形式写下了这个结论,条件只有两条:SUTVA 成立,处理确实随机分配。
下面这段模拟代码把“上帝视角”和“研究者视角”分开摆了一遍,方便看清估计量到底在算什么。
import numpy as np rng = np.random.default_rng(7) n = 2000 w = rng.integers(0, 2, size=n) # 0 = 对照,1 = 处理 y0 = rng.normal(50, 10, size=n) # 每个人未处理时的潜在结果 tau = 2.0 # 真实平均处理效应,现实中未知 y1 = y0 + tau y = np.where(w == 1, y1, y0) # 现实里只能观察到这一列 # 差分均值估计:处理组均值减去对照组均值 estimate = y[w == 1].mean() - y[w == 0].mean() print(f"估计值 {estimate:.2f},真值 {tau}")这段代码里,w是处理指示变量,y0和y1是两份潜在结果,np.where模拟了“只能看到一个”的现实约束。estimate只用了观测到的w和y,没有碰y0、y1的真值。跑出来的估计值通常在 2 上下浮动,浮动幅度取决于样本量和结果的波动大小——这正是误差范围要解决的问题。
要把这个浮动说清楚,需要再加一个抽样假设:参与者是从某个更大的人群里独立抽出来的。在这个前提下,估计误差近似服从正态分布,方差可以拆成两部分:对照组的方差除以对照组人数,加上处理组的方差除以处理组人数。样本越大,区间越窄。很多报告里那句“效应为 2.0,95% 置信区间 [1.2, 2.8]”,背后就是这套计算。
差分均值估计还有一个常被低估的优点:它很难被“调参”调出想要的结果。研究者没有太多自由空间去换模型、换变量、换样本,直到跑出显著为止。在一个 researcher degree of freedom 到处都是的领域,这种“笨”反而是可信度的一部分。
2.3 回归调整:随机化之后再加一层保险
随机化保证了无偏,但不保证估计得准。如果结果的波动很大,差分均值估计的置信区间就会很宽,明明有效应也可能测不出来。这时候可以利用一个试验前就测好的信息:基线协变量。
比如一项减肥项目,参与者的初始体重差异巨大。即使随机分组,两组平均初始体重也可能差个一两公斤,这会污染结果。把初始体重作为协变量放进回归,相当于先按初始体重把比较“对齐”,再估计处理效应。模型大概长这样:
$$Y_i = \alpha + \tau W_i + \beta^\top (X_i - \bar{X}) + \varepsilon_i$$
其中 $X_i$ 是试验前测到的协变量,$\bar{X}$ 是样本均值,中心化只是为了解释方便。$\tau$ 仍然是我们要的处理效应。在完全随机设计下,这个回归给出的 $\tau$ 估计依然无偏,而且当协变量和结果的相关性越强,方差下降得越明显。换句话说,它没改变答案的期望,只是把答案的抖动压小了。
这里有一个反复被踩的坑:协变量必须是处理之前测的。如果把“参与后是否坚持打卡”这类处理后变量放进回归,就会把处理效应的一部分吸收掉,估计结果反而有偏。教材在回归调整这一节里特别强调了时间顺序,道理就在这。
另外,随机化的具体形式也会影响估计。伯努利试验是每个人独立地以概率 π 进处理组,处理组人数本身是随机的;完全随机试验则是先定好处理组人数,再从所有人里随机抽那么多个。两种设计都满足“每个人边际处理概率相同”,但方差公式和后续的推断细节略有差别。这些差别在单看一个平均值时不明显,到了要做区间估计、要做亚组分析的时候就会露出来。
回归调整还有个副作用值得记住:当处理效应本身随协变量变化时,用一个常数 $\tau$ 去拟合,得到的其实是某种加权平均,权重取决于协变量的分布。它不是错的,但它回答的问题可能和你以为的不一样。这一点在讲异质处理效应时还会再遇到。
3. 无混淆性与倾向得分:不能随机分配时怎么办
现实里大部分数据不是试验来的。是否参加职业培训、是否购买某个套餐、是否被选进某个项目,都是人自己或机构自己决定的。直接比较两组的平均结果,很可能把“谁选择了处理”和“处理本身的效果”混在一起。教材用一整章处理这个问题,核心思路只有一句话:想办法让观察性数据在分析时“看起来像”随机试验。
3.1 无混淆性:观察性研究最脆弱的那块地基
无混淆性的正式表述是:给定一组处理前协变量 $X$,处理分配与潜在结果无关。
$${Y_i(0), Y_i(1)} \perp W_i \mid X_i$$
翻译成大白话:只要把那些同时影响“是否接受处理”和“结果”的因素都记录下来了,那么在相同 $X$ 的人之间,谁接受处理就近似于随机。比如比较参加培训和不参加培训的收入效应,如果学历、年龄、之前的工作年限、地区都记录在案,并且这些就是决定参加与否的全部因素,那么在“同年龄、同学历、同工龄、同地区”的一小组人里,参加与否可以当作随机。
问题在于,这个假设没法用数据检验。你永远不知道有没有漏掉一个既影响选择又影响结果的变量,比如“个人上进心”。教材对此的态度很坦诚:无混淆性是一个需要领域知识来辩护的假设,不是靠跑个检验就能确认的。能做的辅助手段有限——用负对照结果看有没有明显漏洞,做敏感性分析看结论能承受多大的未观测混杂,但这些都只是探照灯,不是证明。
正因为地基脆弱,后面的方法都在做同一件事:在无混淆性成立的前提下,把 $X$ 用得更充分、更稳健,让估计不至于因为模型选错而崩掉。
3.2 倾向得分:把一堆协变量压成一个数
如果 $X$ 有二十个变量,直接按 $X$ 分层会炸掉——每一格里的样本都不够。倾向得分给出了一个降维的办法:把每个人接受处理的概率算出来,用这一个数代表他全部的协变量。
$$e(X) = P(W = 1 \mid X)$$
这个数叫倾向得分。它有一个很好的性质:在倾向得分相同的人之间,协变量的分布是平衡的,处理分配也近似随机。于是原本要在高维 $X$ 上做的比较,可以退化成在一维 $e(X)$ 上做的比较。
最直观的用法是分层估计:把倾向得分切成若干段,每一段内部比较处理组和对照组的结果,再按各段人数加权平均。每一段里的人倾向得分接近,可以近似看作“随机分配的一小组”。段切多细是个权衡:切太粗,段内残留混杂;切太细,每段样本太少、方差爆炸。实践中常用五段,再用标准化差异检查每段内的协变量是否平衡。
另一种用法是逆概率加权。思路是给每个人一个权重,让他“代表”那些和他倾向得分相同、但处于另一组的人。处理组的人权重是 $1/e(X)$,对照组的人权重是 $1/(1-e(X))$。
import numpy as np # e_hat 是倾向得分的预测值,w 是处理指示,y 是观测结果 # 处理组按 1/e 放大,对照组按 1/(1-e) 放大 ipw = np.mean(w * y / e_hat - (1 - w) * y / (1 - e_hat)) print(f"逆概率加权估计:{ipw:.2f}")这段代码里,e_hat通常来自一个逻辑回归或更复杂的分类模型,w * y / e_hat这一项只在处理组非零。权重的作用是把“被处理概率低却真的被处理了”的人放大,因为他们更能代表对照组的反事实。代价是权重可能非常不稳定:当e_hat接近 0 或 1 时,一个人的权重能顶上千个人,估计的方差会突然变大。这就是所谓的重叠性问题——如果某些人在现实中几乎不可能接受处理,你就没有足够的信息去推断他们接受处理会怎样。检查方法是看倾向得分的分布有没有明显分离,以及权重的最大值有多离谱。
3.3 双重稳健与双机器学习:两个模型互相兜底
倾向得分模型可能建错,结果模型也可能建错。双重稳健方法的设计目标是:只要这两个模型里有一个是对的,估计就是一致的。
典型的结构是这样的:先用协变量拟合一个结果模型 $\hat{m}_1(X)$ 预测处理组的结果,$\hat{m}_0(X)$ 预测对照组的结果;再用倾向得分 $\hat{e}(X)$ 做加权修正。修正项的形式保证了当倾向模型正确时,结果模型错了也没关系;当结果模型正确时,倾向模型错了也没关系。两个都对当然最好,两个都错就会偏。
这套思路和机器学习结合之后,就有了双机器学习。直接把机器学习模型塞进上面的公式会遇到一个问题:机器学习模型通常带有正则化,在小样本上是有偏的,这个偏倚会通过公式传导到最终的效应估计里。解决办法是两步:一是构造一个对 nuisance 模型误差不敏感(正交)的估计方程,二是用交叉拟合——把样本切成几折,用其他折训练模型,再对当前折做预测。
# 伪代码示意交叉拟合的切分逻辑 for k in range(K): train = folds != k test = folds == k m1_hat[test] = fit_model(X[train & (w == 1)], y[train & (w == 1)]).predict(X[test]) m0_hat[test] = fit_model(X[train & (w == 0)], y[train & (w == 0)]).predict(X[test]) e_hat[test] = fit_model(X[train], w[train]).predict_proba(X[test])[:, 1]这里folds是折号,K常取 5 或 10。关键点是每个样本的预测值都来自没见过它的模型,这样过拟合带来的乐观偏差就不会被算进最终估计。m1_hat、m0_hat、e_hat三列拼起来,再代入双重稳健公式,就得到效应估计。
这套方法对使用者的要求其实更高了:你仍然要选模型、调超参数、检查重叠性,只是容错空间比单模型大一些。教材在这一章的末尾把双重稳健和双机器学习放在一起讲,用意大概也在这里——稳健性是有条件的,不是免费的。
4. 从平均到“对谁有效”:异质处理效应与政策学习
平均处理效应回答的是“这个处理对一群人平均有没有用”,但做决策的人往往想知道另一件事:对哪群人更有用。一个优惠券活动平均提升 3% 的转化,可能年轻人提升 8%、老年人反而下降 1%。如果只看平均值,你既可能错过精准投放的机会,也可能把资源砸在没反应的人身上。教材从第四章开始,把镜头从“平均”拉近到“个体”。
4.1 平均效应藏起来的真相:CATE 与半参数建模
条件平均处理效应,英文缩写 CATE,定义是给定协变量取值 $x$ 时的平均效应:
$$\tau(x) = E[Y_i(1) - Y_i(0) \mid X_i = x]$$
它和 ATE 的关系是:ATE 是 $\tau(x)$ 在人群分布上的加权平均。平均值是正的,不代表每个 $\tau(x)$ 都是正的。这个道理简单,但在实际报告里经常被忽略——一张“整体显著提升”的图,底下可能藏着两个方向相反的群体。
估计 $\tau(x)$ 的难点还是那个老问题:每个人的两个潜在结果只能看到一个。如果用“处理组里 $X=x$ 的人的结果均值,减去对照组里 $X=x$ 的人的结果均值”这种粗暴做法,一旦 $x$ 的维度稍高,每个格子里的样本就少得可怜,估计出来的东西噪声比信号大。
半参数建模的思路是给 $\tau(x)$ 加一个结构假设,比如假设它是 $x$ 的线性函数,或者假设它只依赖少数几个变量。结构假设能大幅降低方差,但如果假设错了,就会引入偏倚。教材在这一节里花了不少篇幅讨论怎么在“假设太强”和“方差太大”之间找平衡,包括用基函数展开、用惩罚项控制复杂度。这些做法的共同点是:不指望模型完全正确,而是希望它在合理偏离下仍然给出可用的答案。
一个容易被混淆的点是“效应异质性”和“模型异质性”。前者是人群里真实存在的差异,后者是你换一个模型、换一组协变量导致估计结果变了。两者都会让 $\tau(x)$ 的曲线看起来弯弯曲曲,但只有前者值得写进决策。区分办法是看稳定性:换不同的估计方法、在不同的数据切片上重复,真正存在的异质性通常会稳定地出现,模型噪声则不会。
4.2 为“谁受益更多”设计的损失函数
估计 CATE 有个尴尬的地方:你没法直接定义损失函数,因为真实的 $\tau(x)$ 看不见。普通的回归可以拿预测值和观测值的差做损失,CATE 没有对应的观测值可减。
教材给出的解法是构造一个“伪结果”,让它的条件期望正好等于 $\tau(x)$。双重稳健伪结果的形式大致是:
$$\Gamma_i = \hat{m}_1(X_i) - \hat{m}_0(X_i) + \frac{W_i(Y_i - \hat{m}_1(X_i))}{\hat{e}(X_i)} - \frac{(1-W_i)(Y_i - \hat{m}_0(X_i))}{1-\hat{e}(X_i)}$$
这个式子里,前两项是结果模型给出的效应预测,后两项是用倾向得分加权的残差修正。它的性质是 $E[\Gamma_i \mid X_i] = \tau(X_i)$,也就是说,虽然每个 $\Gamma_i$ 都带着噪声,但它在 $X_i$ 上的条件平均就是我们要的 CATE。于是问题转化成:用 $\Gamma_i$ 当因变量,对 $X_i$ 做回归或拟合。这就是所谓 DR-learner 的思路。
这个转换的好处是把“不可见的反事实”变成了“可见的伪结果”,坏处是伪结果本身的噪声很大,尤其是倾向得分接近 0 或 1 的时候。所以用这类方法时,重叠性检查比估计 ATE 时更重要。教材在讲损失函数的那一节里还提到另一种思路,从残差出发构造加权最小二乘,形式不同,目标一致:让优化过程直接对准异质性,而不是先估一个平均效应再事后拆分。
4.3 政策学习:把估计结果变成一条可执行规则
知道 $\tau(x)$ 之后,下一步是定规则。政策学习要回答的是:给定每个人的特征 $x$,该不该对他施加处理?把规则写成一个函数 $\pi(x) \in {0, 1}$,目标是在人群中最大化期望结果。
如果 $\tau(x)$ 已知,最优规则很简单:$\tau(x) > 0$ 就处理,否则不处理。现实里 $\tau(x)$ 是估出来的,带着误差,直接按估计值的正负来定规则会把噪声也当成信号。教材讨论的做法是在评估阶段用双重稳健的方式估计某个候选规则的价值,再在候选规则集合里挑最好的。评估一个规则的价值,可以用逆概率加权:把实际接受的处理和规则要求的处理对照起来,用倾向得分调整。
这里最容易翻车的地方是“既当裁判又当运动员”:用同一批数据学习规则、又用同一批数据评估规则,评估结果会系统性偏乐观。正确的做法是样本分割或者交叉验证——一部分数据用来学规则,另一部分用来评估。教材在政策评估那一节里专门提醒了这一点,因为它在实践中太常见了。
政策学习和普通的异质效应分析还有一个区别:它不关心 $\tau(x)$ 估计得准不准,只关心最终规则选得对不对。一个 $\tau(x)$ 估计有偏但排序正确的方法,可能比一个估计很准但排序抖动的方法带来更高的实际收益。这个视角的转换,是把因果推断从“解释世界”推向“做决策”的关键一步。
5. 常见误区:五个初学者最容易踩的坑
因果推断的概念不难懂,难的是知道自己在什么时候用错了。下面这五条,是初学者(包括做过一段时间分析的人)最容易混淆的地方。每一条都按“容易混在哪、为什么会混、怎么区分”来说。
5.1 误区一:控制了变量,就等于排除了混杂
易混点:把“回归里放了很多控制变量”等同于“因果效应干净了”。
为什么混:多元回归的输出看起来非常正式,系数、标准误、显著性一应俱全,很容易让人觉得“控制得越多越严谨”。而且很多时候,加控制变量确实会让系数往预期方向变动,给人一种“找到真凶”的错觉。
怎么区分:控制变量只能处理你观测到并且正确建模的混杂。如果有未观测的混杂,比如个人动机、家庭背景、健康状况,回归系数仍然是有偏的。判断标准不是“控制变量多不多”,而是“处理分配机制能不能说清楚”。如果能说清楚所有影响分配的因素并且都测到了,才谈得上无混淆性;说不清楚,就应该把结论降级为相关性,或者用敏感性分析说明结论能承受多大的隐藏混杂。另一个实用的检查是加“负对照结果”——找一个理论上不应该受处理影响的变量,如果它在回归里也显著,说明模型可能有问题。
5.2 误区二:倾向得分能把混杂“消掉”
易混点:以为算出倾向得分、做匹配或加权之后,混杂就不存在了。
为什么混:倾向得分的名字里带“得分”,听起来像一个校正分数,好像算出来就自动修正了。加上很多教程直接展示“匹配后两组协变量平衡了”,更容易让人以为万事大吉。
怎么区分:倾向得分只平衡它建模时用到的那些协变量。没用到的变量,它一点办法都没有。而且倾向得分模型本身可能建错——用逻辑回归拟合了一个非线性关系,平衡性就会打折扣。正确的做法是匹配或加权之后检查协变量的标准化差异,而不是只看 p 值;同时明确写出“本分析假设无未观测混杂”,而不是暗示混杂已被消除。如果倾向得分的分布严重重叠不足,比如某些人几乎必然接受处理,那么这部分人实际上没有可比对象,强行加权只会放大方差。
5.3 误区三:平均处理效应就是每个人身上的效应
易混点:把报告里的一个 ATE 数字,当成对任何人都适用的效应。
为什么混:报告通常只给一个数,媒体和决策者也习惯引用一个数。“平均提升 3%”听起来像一条普适规律,而不是一个加权平均。
怎么区分:平均效应为正,可能是一部分人受益很大、一部分人几乎没变,也可能是一部分人受益、另一部分人受损。要判断该不该对特定群体施加处理,需要看 CATE 或者至少做几个关键维度的亚组分析。同时要意识到亚组分析本身有多重比较问题,切太多组总会切出“显著”的。一个折中的做法是先想清楚哪几个维度的异质性有理论依据,再看数据,而不是把数据切个遍再找故事。
5.4 误区四:双重稳健意味着两个模型都错也没关系
易混点:把“双重稳健”理解成“双保险”,以为结果模型和倾向模型同时建错也能得到正确估计。
为什么混:“双重”和“稳健”两个词叠在一起,听起来容错率很高。加上方法的名字里常带“机器学习”,更容易让人觉得它是自动的、免调的。
怎么区分:双重稳健的保证是“两个模型里至少一个正确时一致”。两个都错,估计仍然有偏,而且偏多少没法从数据里看出来。除此之外,双重稳健方法还依赖重叠性——倾向得分不能太接近 0 或 1,否则加权项会爆炸。实务上的检查包括:分别看结果模型和倾向模型的拟合情况、看权重的分布、用不同模型设定做敏感性分析。把它当成“降低犯错概率的工具”,而不是“允许犯错的许可证”。
5.5 误区五:工具变量和断点回归估的是“全体人的效应”
易混点:看到工具变量或断点回归输出一个效应数字,就当成总体的平均处理效应来解读。
为什么混:这两类方法在论文里经常被当作“解决内生性”的万能钥匙,输出格式和普通回归一样,系数、标准误、显著性,看起来没有区别。
怎么区分:工具变量在存在异质效应时,估计的是“依从者”的局部平均处理效应——也就是那些会因为工具变化而改变处理状态的人。这部分人未必代表全体,甚至可能和全体有系统性差异。断点回归估的是断点附近的局部效应,离开断点越远,外推越不可靠,因为断点两侧的人在不可观测维度上可能完全不同。判断一个局部效应能不能推广,要问的是:依从者或断点附近的人,和你关心的政策对象是不是同一群人?如果不是,那个数字只能回答一个更窄的问题。
6. 什么时候该用、什么时候别硬用:几条边界判断
因果推断的方法再多,落到一次具体分析上,第一步永远不是选模型,而是问:处理是怎么被分配的?这个问题的答案,基本决定了你该走哪条路,以及哪些结论你不能说。
| 你手上的数据长什么样 | 优先考虑的方法 | 需要盯住的边界 |
|---|---|---|
| 能主动随机分配,且人与人之间不互相影响 | 差分均值、回归调整 | 随机化是否真的执行到位,有没有人中途换组 |
| 观察性数据,处理前协变量记录得比较全 | 倾向得分分层、逆概率加权、双重稳健 | 无混淆性能不能站住,重叠性够不够 |
| 有一条明确的阈值规则决定谁接受处理 | 断点回归、局部线性回归 | 断点附近有没有人为操纵,带宽选得合不合理 |
| 有外生冲击或制度性变化影响处理 | 工具变量、局部平均处理效应 | 排除性约束是否可信,依从者代表谁 |
| 政策在某个时间点落地,有多期面板数据 | 双重差分、合成控制 | 平行趋势是否成立,有没有同期其他冲击 |
| 人与人之间存在溢出或干扰 | 曝光映射、有限总体方法 | 别默认 SUTVA 成立,处理组会污染对照组 |
这张表不是选型指南,更像一张“先别急着动手”的清单。每一行的最后一列,才是真正决定分析能不能成立的东西。方法选错了还可以换,假设不成立,换什么方法都是白搭。
举个具体的例子。某地曾经用抽签的方式分配一批职业培训名额,报名的人远多于名额,抽中的人可以去,没抽中的不能去。这种场景天然适合做随机试验式的分析:抽签就是随机化,比较抽中和没抽中两组的后续收入,差分均值估计就能给出一个可信的效应。但即便如此,也有两个边界要守住。一是“抽中”不等于“参加”,有些人抽中了却没去,这时候估出来的是“被允许参加”的效应,不是“实际参加”的效应,两者不是一回事。二是抽签只覆盖了报名的人,那些没报名的人完全不在样本里,结论不能直接推广到他们身上。这两条如果不写清楚,一个好设计也会被解读坏。
反过来,什么情况下别硬用?当你连处理是怎么分配的都说不上来,只能靠“加控制变量”来救场的时候;当倾向得分的分布严重分离,处理组和对照组几乎没有重叠的时候;当断点两侧的人在断点之外差异巨大,你却想外推到全体的时候。这些时候,一个诚实的相关性描述,比一个假装严谨的因果结论更有价值。
我自己刚接触这套东西的时候,拿到数据第一反应就是跑回归、加变量、看显著性,跑出一串星号就觉得很踏实。后来有一次,一个同事问我“这个处理是谁决定给的”,我答不上来,才发现前面那些控制变量都建在沙子上。从那以后,我每拿到一份数据,都先强制自己走一遍这个问题:处理是怎么被分配的,我能不能把它当成随机?答不上来,我就把结论降级,把“因果”两个字去掉。这个习惯救过我很多次,也让我少写了不少看起来很厉害但站不住脚的结论。希望帮到你。
本文还有配套的精品资源,点击获取