Stacked DID 分 cohort 稳健性是什么?
Stacked DID 把交错处理拆成多个局部 DID:每一个处理 cohort 都有自己的小样本、自己的处理前后窗口和自己的对照组,最后把这些局部样本堆叠起来估计平均效应。
先用一句话理解
把 Stacked DID 想成一个 cohort 一个小实验。先把 2017 年处理的单位和它的可用对照放在一个篮子里,再把 2018 年处理的单位和它的可用对照放在另一个篮子里,最后把这些篮子合并。
什么时候用
| 判断项 | 教科书式判断 |
|---|---|
| 适合用在 | 处理分批发生,且希望透明展示每个 cohort 的对照组构造。 |
| 先不要用在 | 没有 id/time/treatment/post/cohort/event-time 信息,或每个 cohort 的局部对照不足。 |
| 最关键的前提 | 每个局部 DID 内部仍需要可信的平行趋势和清楚的对照组。 |
| 读表顺序 | 先看 cohort 样本构造,再看总体系数和 cohort 结果表。 |
| 论文表述边界 | 它是交错 DID 的专用稳健性或扩展估计,不应伪装成普通主规格。 |
把它和相近方法分清楚
| 容易混淆的对象 | 怎么区分 | 初学者记法 |
|---|---|---|
| 普通 DID | 一个处理组、一个对照组、一个政策时间。 | 适合单一处理时点。 |
| CSDID | 直接估计 ATT(g,t)。 | 输出 cohort-time 效应和聚合效应。 |
| Stacked DID | 先构造 cohort-specific 局部 DID,再堆叠估计。 | 对照组构造更容易检查。 |
核心直觉和模型公式
堆叠后的局部 DID
堆叠样本中常见的估计式为:
\[Y_{igt}=\beta D_{igt}+\alpha_{ig}+\lambda_{gt}+\varepsilon_{igt}\]
g 表示 cohort,D_igt 是在该 cohort 样本内的处理状态;固定效应通常也要按 cohort 重新定义。
公式里的符号怎么读
| 符号 | 含义 | 在本页怎么理解 |
|---|---|---|
| g | cohort | 首次处理时间相同的一批单位。 |
| i | 单位 | 企业、地区或个人。 |
| t | 时间 | 真实时间或相对处理时间。 |
| D_igt | 局部处理状态 | 在 cohort g 的堆叠样本中,单位 i 在 t 是否处于处理后。 |
| α_ig | cohort × unit 固定效应 | 控制单位在每个局部样本中的不变差异。 |
| λ_gt | cohort × time 固定效应 | 控制每个 cohort 样本中的共同时间冲击。 |
专业使用口径
Stacked DID 的重点是样本构造,而不是把模型名称写得更高级。
| 口径 | 专业写法 |
|---|---|
| cohort 样本 | 逐个 cohort 构造处理组和可用对照。 |
| 对照来源 | 说明是 never-treated、not-yet-treated,还是两者组合。 |
| 窗口设置 | 说明每个 cohort 保留哪些处理前后时期。 |
| 结果定位 | 报告为专用稳健性/扩展 DID,不替代主规格显著性。 |
一步一步做:从问题到结果的五步
| 步骤 | 这一页具体做什么 | 做到什么程度才算读懂 |
|---|---|---|
| 1. 定义 cohort | 找出每个单位首次处理时间。 | cohort 不清楚时应跳过。 |
| 2. 构造局部样本 | 每个 cohort 单独选择处理组、对照组和时间窗口。 | 不要让已经处理的单位污染对照组。 |
| 3. 添加堆叠标识 | 同一单位可能出现在多个 cohort 样本中。 | 标准误和固定效应要考虑堆叠结构。 |
| 4. 估计堆叠模型 | 使用 cohort-specific 固定效应。 | 不能当普通 TWFE 直接解释。 |
| 5. 对照 cohort 表 | 总体结果要和 cohort-level 结果一起读。 | 某一个 cohort 驱动结果时要说明。 |
结果怎么读:先读口径,再读数字
| 读表顺序 | 本页怎么读 | 不要这样读 |
|---|---|---|
| 先看构造状态 | 是否生成 stacked_did_results 和 cohort 结果。 | 构造失败时只能披露 skipped。 |
| 再看总体 β | 它是堆叠局部 DID 的平均效应。 | 不要写成单一政策时点 DID。 |
| 然后看 cohort 表 | 各 cohort 的方向和样本量是否一致。 | 小 cohort 驱动时要谨慎。 |
| 最后看对照来源 | never-treated 与 not-yet-treated 的含义不同。 | 不说明对照组来源,结果难以评估。 |
初学者最容易错在哪里
| 误读 | 为什么错 |
|---|---|
| 把 Stacked DID 当 CSDID 的别名 | 错。一个是堆叠局部样本,一个是估计 ATT(g,t)。 |
| 忽略 cohort 样本构造 | 错。构造过程就是方法可信度的一部分。 |
| 把它作为显著性补丁 | 错。它应作为专用稳健性或扩展 DID。 |
| 缺少 cohort 仍硬跑 | 错。没有处理时间结构就无法构造堆叠样本。 |
变量要求和案例口径
| 字段 | 口径 |
|---|---|
| 数据 | CSMAR 风格 A 股企业创新面板 |
| 原始样本 | 196 家上市公司,2015-2020 年,约 1200 个公司-年观测;各方法有效样本以本页输出表 N 为准 |
| 因变量 | patent_count;回归页通常使用 ln(1 + patent_count) |
| 核心解释变量 | dfi_index,数字普惠金融指数;部分案例输出展示的是标准化后的 dfi_index |
| 控制变量 | roa、lev、size、growth、cashflow、tobinq、top1、dual、board、indep、soe、age |
| 输出文件 | stacked_did_results.csv |
| 角色要求 | 因变量、个体 ID、时间变量、处理变量、处理后时期 |
| 依赖包 | 无额外 Stata 社区包要求 |
实际代码
下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。
* case code has not been generated yet
实际输出表
这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。
该方法的案例输出表还没有生成。
案例图
这是一张由同一份案例数据生成的页面内诊断图。

论文里怎么写
本文进一步采用Stacked DID 分 cohort 稳健性检验数字普惠金融变化对企业创新的影响。处理组、对照组和政策后变量均基于同一 firm-year 样本构造,结果报告在 stacked_did_results.csv 中。若处理效应方向与基准回归一致,可作为政策评估维度的补充证据;若不一致,应优先解释识别假设和样本切分差异。
检查清单
- 逐个 cohort 检查对照组来自 never-treated 还是 not-yet-treated。
- 堆叠样本要有 cohort 固定效应和相对时间口径,不能退化成普通 TWFE DID。
- 报告平均效应时同时看 cohort 表,避免一个 cohort 主导整体结论。