9  Wing (2024) 输出效果

本文写作过程中使用了 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.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 模型包含的子比较包括:

  1. A 州 vs. C 州(t=2017–2019);
  2. B 州 vs. C 州(t=2019–2021);
  3. A 州 vs. B 州(t=2019–2021);
  4. 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 方法选择的三个基本维度

选择方法时,应重点考虑以下三个问题:

  1. 你的处理效应是否异质?
  2. 你是否希望估计动态路径(event-study)?
  3. 你是否能接受对照组被限定为“未来将处理”的单位?

在后续章节中,我们将逐一介绍这些方法的原理、估计公式、应用条件,并与 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 建模,精确稳健

推荐资料