9 Wing (2024) 输出效果
- Wing, C., Yozwiak, M., Hollingsworth, A., Freedman, S., & Simon, K. (2024). Designing Difference-in-Difference Studies with Staggered Treatment Adoption: Key Concepts and Practical Guidelines. Annual Review of Public Health, 45(1), 485–505. Link, PDF, Google.
本文写作过程中使用了 AI 工具 ChatGPT 进行辅助。
ChatGPT 对话:点击查看。
9.1 写在前面:为什么你可能用错了 DID?
Difference-in-Differences(DID)是因果推断中最常用的工具之一,尤其在政策评估和公共卫生研究中几乎成了“标配”。许多论文,特别是关于地方政策变更(如最低工资调整、医保扩张、补贴计划)等主题,都会自然而然地落入“分期处理”(staggered adoption)的情境:有些地区早一点实施,有些则晚一点,甚至永远不实施。
在这种设定下,研究者往往直接将 TWFE(two-way fixed effects,双向固定效应)模型套入数据,便得出了所谓的“平均处理效应”。然而,这种做法隐藏着一个深层次的统计陷阱——即使你满足了并行趋势假设(common trends),即使你严格控制了协变量,也很可能得出了错误的估计。
9.1.1 一个看似无害的例子
设想如下的情境:某项公共卫生政策(例如提供免费疫苗)在三个州分批推行:
- A 州在 2018 年推行;
- B 州在 2020 年推行;
- C 州从未推行。
你收集了 2016–2022 年的各州健康数据,然后运行如下 TWFE 回归模型:
\[ Y_{it} = \alpha_i + \lambda_t + \beta D_{it} + \varepsilon_{it} \]
结果显示 $ = -3.7$,你欣喜地认为该政策平均每年使死亡率下降了 3.7。问题是:这个估计是否真的可信?它真的等于我们关心的因果效应(Average Treatment Effect on the Treated, ATT)吗?
很可能不是。事实上,近期的研究清晰地表明:当政策是“错峰推出”的,而且处理效应在时间上具有异质性(即效应在不同时间点不同),TWFE 给出的估计可能是方向错误的加权平均值,甚至完全偏离真实效应。
9.1.2 来自最新研究的警示
Wing 等人(2024)在《Annual Review of Public Health》中发表的重要综述文章,专门讨论了这一问题。他们指出:在存在异质效应与分期处理的情境下,TWFE 估计量往往混杂了“坏的比较”(bad comparisons),尤其是晚处理组与早处理组之间的比较,由于这些“对照组”其实已经接受了处理,导致估计量偏误难以察觉。
他们以模拟实验为例,展示了 TWFE 可能产生方向相反的估计结果——即明明政策是有效的,却因为使用了“错误的对照组”,得出了“政策增加死亡率”的结论。
我们必须认识到:传统 DID 方法的便利性背后,隐藏的是对研究设计粗心大意的风险。
9.1.3 这篇推文能帮你解决什么问题?
本推文旨在以通俗的方式向博士生与青年教师解释:
- 为什么传统 DID 方法可能失效;
- 如何理解 staggered DID 中的估计陷阱;
- 如何选择合适的方法来估计分期处理的因果效应;
- 如何将这些方法应用到你自己的论文中。
我们会用一个贯穿始终的公共卫生政策模拟例子,图文并茂地解释各种方法的核心思想、数学表达与结果含义,确保你在理解的基础上,能操作、能解释、能写入你的论文。
9.2 最基础的 2×2 DID:你还记得它的含义吗?
在深入介绍 staggered DID 之前,我们有必要回顾最基础的 Difference-in-Differences(DID)设计。许多方法的出发点,都是对这个简单 2×2 DID 框架的延展与修正。理解这一框架不仅能帮助我们把握估计量的本质,也能明确识别分期处理下的偏误源头。
9.2.1 什么是 2×2 DID?
最简单的 DID 设计包含两个组、两个时间点:
- 一组是“处理组”(treatment group),另一组是“对照组”(control group);
- 两个时间点:$t=0$(处理前),$t=1$(处理后);
- 只有处理组在 $t=1$ 之后接受了处理,对照组始终未被处理。
我们关心的因果效应是:在 $t=1$ 时,处理组相对于它自己在 $t=0$ 的变化,减去对照组在 $t=1$ 相对于 $t=0$ 的变化。
这个思路可以写作一个标准的 DID 估计量:
\[ \widehat{\text{DID}} = (Y_{T,1} - Y_{T,0}) - (Y_{C,1} - Y_{C,0}) \]
其中:
- $Y_{T,t}$ 表示处理组在时间 $t$ 的平均结果;
- $Y_{C,t}$ 表示对照组在时间 $t$ 的平均结果。
若我们将该估计量视为一个回归模型,它可以形式化为:
\[ Y_{it} = \alpha + \delta \cdot \text{Post}_t + \gamma \cdot \text{Treat}_i + \beta \cdot (\text{Treat}_i \times \text{Post}_t) + \varepsilon_{it} \]
其中,$$ 就是我们要估计的因果效应(ATT)。
9.2.2 倍分法成立的两个关键假设
DID 的识别依赖于两个关键但强约束的假设:
9.2.2.1 (1)并行趋势假设(Common Trends)
即如果没有接受处理,处理组和对照组的结果变量在时间上的变化趋势应该是一致的。
形式化地说:
\[ E[Y_{T,1}(0) - Y_{T,0}(0)] = E[Y_{C,1}(0) - Y_{C,0}(0)] \]
这个假设无法直接检验,因为我们无法观察所有单位的“未处理状态下的潜在结果”。但我们可以通过检查处理前的趋势是否一致(“pre-trends”)来佐证其合理性。
9.2.2.2 (2)无预期行为(No Anticipation)
处理组不会因为“预期”将来会接受处理而提前调整行为。
形式化地写为:
\[ E[Y_{T,0}(1) - Y_{T,0}(0)] = 0 \]
换句话说,处理的影响只能在实际处理开始之后才出现。
9.2.3 例子:疫苗政策对死亡率的影响
我们沿用 Wing 等人(2024)的模拟例子:设想一种疫苗政策只在 A 州推出,其它州未推出。
- 年份 $t=0$(2019):A、B 两州都未实施政策;
- 年份 $t=1$(2020):A 州开始实施,B 州未实施;
- 我们观察到 A 州死亡率下降了 10,B 州下降了 2;
- 那么 DID 估计值为:$(-10) - (-2) = -8$。
这意味着,政策可能将死亡率额外降低了 8。
9.2.4 是后续方法的出发点?
Wing 等人提出的核心观点是:复杂的 staggered DID,可以看作是众多 2×2 DID 子实验的加权平均。只有真正理解了 2×2 DID 的估计逻辑,才能意识到在何种条件下这些子实验会给出可靠的估计,在何种条件下却引入了偏误。
在接下来的章节中,我们将看到,当各个单位的处理时间不同(staggered adoption),处理效应随时间变化(treatment heterogeneity),且我们又将所有单位一起放入 TWFE 模型中分析时,这个估计量已不再是上面那种简单 DID 的平均,而可能被“坏的子比较”严重扭曲。
因此,重温 2×2 DID 的基本逻辑,就是理解分期处理挑战的起点。
9.3 分期处理的挑战:当处理时间不同步时,会发生什么?
上一节我们介绍了标准的 2×2 DID 框架,它建立在“单一处理时间”“统一比较结构”的理想设定上。但现实中,政策往往以错峰方式(staggered adoption)在不同单位中推广。这类设定在文献中极其常见,例如:
- 最低工资在不同州的分批调整;
- 医疗补贴政策在不同县的滚动推出;
- 城市限购、限行政策在各地陆续上马。
这种设定使得我们面对的,不再是 2 组 × 2 时间点的比较,而是多个处理组、多个时间点、多个处理路径交织在一起。
9.3.1 TWFE 在这种情境下是如何工作的?
研究者往往使用如下的 TWFE 模型进行估计:
\[ Y_{it} = \alpha_i + \lambda_t + \beta D_{it} + \varepsilon_{it} \]
其中,$D_{it}$ 表示个体 $i$ 在时间 $t$ 是否接受了处理。
这种做法有两个表面上的优势:
- 控制了单位固定效应 $_i$ 和时间固定效应 $_t$;
- 所有组和所有时期的数据都被用上,提升了估计效率。
但问题也正在于此:并非所有被用上的比较,都是有效的因果识别来源。
9.3.2 Goodman-Bacon decomposition:将复杂 DID 拆解为 2×2 子实验
Goodman-Bacon(2021)的突破性研究表明,TWFE 模型中估计量 $$ 实际上是多个 2×2 DID 子估计的加权平均。每一个子 DID 来自两个组在某一时间窗口内的比较。
比如,设有三个处理时间:
- A 州:2018;
- B 州:2020;
- C 州:未处理。
TWFE 模型包含的子比较包括:
- A 州 vs. C 州(t=2017–2019);
- B 州 vs. C 州(t=2019–2021);
- A 州 vs. B 州(t=2019–2021);
- B 州 vs. A 州(t=2017–2019)……
其中 3 和 4 是最危险的,它们将已经处理过的组当作“对照组”,可能严重违反了并行趋势假设和未处理状态的可识别性。
这些子估计被 Goodman-Bacon 分为三类:
- treated vs. untreated;
- early treated vs. late treated;
- late treated vs. early treated(最容易出偏误的一类)。
每个子估计都被赋予一个权重,构成最终的 TWFE 估计。
9.3.3 示例图解:sulfa drugs 实验(来自 Wing 等人)
Wing 等人构造了一个模拟实验:假设磺胺药物分别在三个时点推广到三个州组(早、中、晚),还有一个州组从未获得该药物。在图 2 中,他们展示了每一种 2×2 比较的估计值与权重。
其中,“1940 vs. 1930”这种 late vs. early 比较给出的估计结果是正的,而真实效应是负的,说明这是典型的偏误方向翻转。
更糟的是,这类比较可能被赋予高达 18% 的权重,极大地污染了整体估计量。
9.3.4 什么时候偏误会严重?
偏误的严重程度取决于两个因素:
- 处理效应是否随时间变化(event-time heterogeneity);
- “坏的比较”的权重有多大。
只要处理效应不是恒定的(实际上几乎从不恒定),且“坏的比较”在样本中占据一定比例,TWFE 就可能产生严重偏误,甚至估计方向完全错误。
这正是为什么 Goodman-Bacon decomposition 成为现代 DID 方法中不可绕过的基础工具。
9.3.5 一个警示性的结论
TWFE 在 staggered DID 情境下不是“无害的平均”,而是“危险的混合物”。
正如 Wing 等人指出的那样:“如果我们不能明确理解哪些子比较被包含在估计中,就不能断言我们的估计结果具有因果含义。”
这一观察直接推动了后续方法的发展,如 stacked DID、Callaway & Sant’Anna 等方法,目的就是控制或剔除这些“坏的比较”。
9.4 五种实用方法一图总览:你可以怎么做?
面对 staggered DID 的复杂结构与 TWFE 的偏误问题,近年来方法学文献提出了多种新的解决方案。这些方法各有侧重,但都建立在如下共识基础上:
“我们必须控制或规避掉那些由处理过单位构成的对照组。”
9.4.1 方法概览表(简化)
以下是 5 种主流方法的直观对比:
方法名称 | 是否使用回归? | 估计结果形式 | 是否输出组 × 时间 ATT? | 控制组设定 | 推荐软件 |
---|---|---|---|---|---|
TWFE | 是 | 单一 $$ | 否 | 所有单位 | 所有软件 |
Stacked DID | 是 | event-study 图 | 是(自动加总) | 干净对照组 | 手工回归 / stackedev |
Callaway & Sant’Anna | 否 | ATT(a,t) 列表 | 是(可加总) | 可选未处理 / 延迟处理 | did (R), csdid (Stata) |
Sun & Abraham | 是 | event-study 图 | 是 | 最近处理组 | eventstudyinteract |
Gardner (did2s) | 是 | ATT 或图 | 是 | 所有未处理单位 | did2s |
9.4.2 一图看懂逻辑差异
我们可以用一张结构图来解释这些方法的核心逻辑差异(此处建议在讲义中插入图表):
- TWFE:使用所有比较(包括坏的);
- Stacked DID:仅使用“干净”的 2×2 子实验,拼接构成估计;
- Callaway & Sant’Anna:精确估计每个组 × 时间效应;
- Sun & Abraham:对 event-time 效应进行交互建模;
- Gardner:先做回归残差去噪,再估计效应。
9.4.3 方法选择的三个基本维度
选择方法时,应重点考虑以下三个问题:
- 你的处理效应是否异质?
- 你是否希望估计动态路径(event-study)?
- 你是否能接受对照组被限定为“未来将处理”的单位?
在后续章节中,我们将逐一介绍这些方法的原理、估计公式、应用条件,并与 Wing 等人的实操建议一一对应。
好的,继续输出 Section 5 至 Section 8 的内容。
9.5 方法逐个讲
以下是对五种主要方法的逐一介绍。每种方法包括基本思想、数学表达、适用情境、结果解释方式,并明确与 Section 6 的实操建议的对应关系。
9.5.1 5.1 TWFE(Two-Way Fixed Effects)
基本思想:最常见的做法,将所有单位、所有时间点的处理状态编码为一个 0/1 变量,在回归中加入单位固定效应与时间固定效应。
模型形式:
\[ Y_{it} = \alpha_i + \lambda_t + \beta D_{it} + \varepsilon_{it} \]
其中 $$ 被解释为平均处理效应。
适用场景:
- 所有单位几乎同时接受处理;
- 处理效应不随时间变化;
- 没有严重的预期效应或政策滞后反应。
结果解释:
当上述条件被破坏时,$$ 可能是多个子比较的有偏加权平均,甚至方向错误。
对应建议(Section 6):
- 不推荐在 staggered adoption 情境下单独使用 TWFE;
- 可用 TWFE 作基准估计,但需搭配 Bacon 分解或敏感性分析。
9.5.2 5.2 Stacked DID(Cengiz et al. 2019)
基本思想:
将每一个“政策推出”的处理组及其对应的干净控制组视为一个独立的 2×2 实验,进行事件研究式建模,再将所有子实验合并为一个 stacked 数据集,在其上进行统一回归。
事件时间定义:
\[ e = t - A_s,\quad \text{即实际时间减去政策首次实施年份} \]
回归模型:
\[ Y_{ised} = \sum_{k \neq -1} \beta_k \cdot D_{sd} \cdot \mathbb{1}[e = k] + \alpha_{sd} + \lambda_{ed} + \varepsilon_{ised} \]
适用场景:
- 多次政策推出(如多个州分批推出政策);
- 可构造干净对照组(未处理或延迟处理);
- 关注动态效应路径。
结果解释:
$_k$ 表示事件时间为 $k$ 的平均处理效应(如政策实施后第 $k$ 年的效应)。
对应建议(Section 6):
- 强烈推荐在 staggered DID 中使用;
- 注意选择合理的事件窗口(如 -2 到 +4 年);
- 推荐搭配平衡样本设计,确保每个 $k$ 都有足够样本。
9.5.3 5.3 Callaway & Sant’Anna(2021)
基本思想:
将每一个组(单位)的处理时间作为组别指标,直接估计各组在各时间的 ATT,然后加权汇总,形成总体效应。
核心量:ATT(a, t)
表示处理组在第 $a$ 年接受处理,在第 $t$ 年观测时的平均处理效应。
加权方式:
\[ \delta_q = \sum_a \text{Pr}(A_s = a) \cdot \text{ATT}(a, a + q) \]
其中 $q$ 为事件时间,$a$ 为组的处理时间。
适用场景:
- 有多个处理时间;
- 明确关心各组的异质性与动态路径;
- 对结果解释要求细致。
结果解释:
可视化输出一系列 $(a, t)$ 或加总后展示 $_q$(如 event-study 图)。
对应建议(Section 6):
- 推荐作为主方法之一;
- 可用
csdid
命令(Stata)或did
(R)实现; - 可配合 covariates 做 IPW 加权。
9.5.4 5.4 Sun & Abraham(2020)
基本思想:
使用回归框架,将不同处理时间组与 event time 进行交互,构建 saturated event study 模型,避免组别混杂。
模型核心:
\[ Y_{it} = \sum_{g,e} \delta_{g,e} \cdot \mathbb{1}[G_i = g] \cdot \mathbb{1}[t - g = e] + \alpha_i + \lambda_t + \varepsilon_{it} \]
其中 $G_i$ 是单位 $i$ 的处理时间,$e$ 是事件时间。
适用场景:
- 想使用 OLS 框架;
- 希望得到处理组特异的动态路径;
- 数据处理时间结构相对密集。
结果解释:
每个 $_{g,e}$ 表示第 $g$ 组在事件时间 $e$ 下的效应,结果较为细致。
对应建议(Section 6):
- 推荐作为对照方法;
- 可使用
eventstudyinteract
命令(Stata)实现; - 注意回归中 reference period 设置。
9.5.5 5.5 Gardner & Wooldridge:Two-stage DID(did2s)
基本思想:
第一阶段仅使用未处理单位估计单位和时间固定效应;第二阶段估计处理效应。
估计框架:
- 第一步:残差提取;
- 第二步:回归残差对处理变量,估计处理效应。
适用场景:
- 样本较小、担心 overfitting;
- 希望用经典 OLS 工具获得稳健性与精度。
结果解释:
输出单一 $$ 或 event study 系数,但具有较强理论基础和可解释性。
对应建议(Section 6):
- 适合与 stacked DID / csdid 结果交叉验证;
- 推荐
did2s
包(R)实现。
9.6 作者推荐的六条实操建议
Wing 等人以公共卫生领域的经验为基础,总结出六条关键实操建议。这些建议适用于任何采用 staggered DID 的研究,尤其适合政策干预类论文。
S1. 明确定义研究问题(What do you want?)
- 是估计整体效应,还是某个子群体的效应?
- 是估计短期效应,还是长期路径?
要点: 不同目标对应不同加权策略与估计方法。
S2. 避免污染的对照组
- 不要将已被处理的单位作为对照;
- 只使用“干净对照组”(未处理或延迟处理的单位);
- 推荐方法:stacked DID, csdid。
S3. 谨慎使用 TWFE,尤其在存在异质效应时
- TWFE 的估计结果需要 Bacon 分解解释;
- 若你无法判断哪些子比较构成估计量,就不要直接使用 TWFE。
S4. 优先使用 group × time ATT 方法
- 推荐使用 Callaway & Sant’Anna, stacked DID;
- 输出 ATT(a, t) 能让你判断哪一类单位在何时受到影响;
- 有助于理解政策异质性与动态反应。
S5. 如果估计 dynamic effects,请使用事件时间框架
- 明确区分 event time(相对政策开始的时间)与 calendar time;
- 使用事件时间窗口(如 -2 到 +4)做图或估计;
- 推荐配图展示。
S6. 保留原始图表与诊断分析
- 附带展示 pre-trends 检验图;
- 展示不同方法下的估计结果对比图;
- 强调稳健性与诊断,而非单一显著性。
9.7 你的论文中该如何选择?三种典型应用场景推荐
为了将方法与实操建议真正用到论文中,我们以三类常见论文结构为例,推荐可操作的分析策略。
9.7.1 应用场景一:一次性处理,时间清晰
比如:全国统一施行某项补贴政策,2020 年一月生效。
建议方法:
- 可使用 2×2 DID 或 TWFE;
- 若关注动态效应,推荐 event study + csdid;
- 对照组为“从未处理”单位。
9.7.2 应用场景二:错峰处理,政策在不同地区逐步推出
比如:医保扩张政策 2018–2021 年间在各州陆续施行。
建议方法:
- 不使用 TWFE;
- 使用 stacked DID(平衡事件窗口);
- 对照组为未来处理或从未处理组;
- 搭配图形展示与敏感性分析。
9.7.3 应用场景三:关注异质性反应或动态路径
比如:某补贴政策对不同收入群体影响可能不同,且效应随时间演化。
建议方法:
- 使用 Callaway & Sant’Anna;
- 输出 ATT(a, t),聚焦群体与时间异质性;
- 可扩展为组内回归、分层事件研究。
9.8 附录:常用命令、图形模板与推荐资料
以下是建议你实际操作时参考的命令、工具与学习资料。
Stata 命令对照表
方法 | 命令 | 说明 |
---|---|---|
TWFE | xtreg y d i.time, fe |
不推荐用于 staggered DID |
Bacon 分解 | bacondecomp |
拆解 TWFE 中的子比较 |
csdid | csdid y time id gvar |
官方推荐,功能强大 |
stacked DID | 手动 reshape + event-study | 需要写循环或使用 stackedev 包 |
Sun & Abraham | eventstudyinteract |
事件时间交互建模 |
did2s | R 包 did2s |
两阶段 OLS 建模,精确稳健 |
推荐资料
- Wing et al. (2024) 官方 replication repo:GitHub
- Callaway & Sant’Anna R 教程:R package documentation
csdid
官方指南(Stata):PDF