教程 ·

双重差分法(DID)用 AI 一句话完成 — 政策评估、平行趋势检验、事件研究法全攻略

双重差分法(DID)完整教程:用 AI 一句话完成政策评估因果推断,自动输出 ATT 估计、平行趋势检验、事件研究图,以及可直接复制进论文的 APA 7th 格式报告句式。

你拿到一份政策干预前后的面板数据,想知道这项政策是否真的起了作用——但随机对照试验在现实中根本做不了。这篇教程教你用 AI 一句话跑完整套双重差分(DID)分析,从平行趋势检验到事件研究图,60 秒全齐,结果可直接写进论文。


为什么政策评估那么难?

经济学、公共政策、医疗卫生领域的核心问题往往是:某个政策/干预是否产生了因果效应?

直觉上,比较政策前后的变化就够了——但这忽视了一个根本问题:即便没有政策,结局指标也可能随时间变化(宏观趋势、季节效应、其他并发政策……)。

简单前后比较(Pre-Post)的致命缺陷:

  • 无法排除时间趋势的干扰
  • 无法剔除非政策因素的混杂
  • 无法构建"如果没有政策,结局会怎样"的反事实

双重差分法(Difference-in-Differences,DID) 正是应对这一挑战的准实验方法:通过同时引入"处理组 vs 对照组"和"政策前 vs 政策后"两个差分维度,差分掉时间趋势和组间固有差异,从观测数据中识别因果效应。

然而在传统软件中实现 DID:SPSS 几乎没有现成菜单;Stata 需要手动构造交互项、指定固定效应、调用 xtregreghdfe;R 要拼接 lfefixestDiD 等多个包并手写绘图代码。从数据到一张规范的事件研究图,往往需要数小时。

ChatSRS 把全套流程压到一句话。


DID 的核心逻辑

双重差分估计量

DID 的基本思路是:

DID = (处理组政策后均值 - 处理组政策前均值)
       - (对照组政策后均值 - 对照组政策前均值)

用符号表示:

DID = (Y_treatment,post - Y_treatment,pre)
      - (Y_control,post - Y_control,pre)

这个估计量的含义是:扣除对照组同期变化(代表"没有政策时的反事实趋势")后,处理组所发生的净变化量,即政策对被处理单元的平均处理效应(Average Treatment Effect on the Treated,ATT)。

四格均值表

政策前(Pre)政策后(Post)差分(Post - Pre)
处理组(Treatment)ABB - A
对照组(Control)CDD - C
DID(B - A) - (D - C)

通过回归方程实现时,标准规范写法为:

Y_it = alpha + beta_1 * Treated_i + beta_2 * Post_t
        + beta_3 * (Treated_i x Post_t) + gamma * X_it + u_it

其中 b_3 即为 DID 估计量(ATT),是关注的核心系数。

平行趋势假设(Parallel Trends Assumption)

DID 的关键前提:在没有政策干预的情况下,处理组和对照组的结局变量应当遵循相同的时间趋势

这一假设无法被直接检验(因为反事实不可观测),但可以通过以下方式提供证据:

  1. 图形诊断:绘制政策前各期处理组与对照组均值趋势线,目视是否平行
  2. 统计检验:对政策前各期的事前系数(pre-treatment coefficients)做联合显著性检验(F 检验),若均不显著则支持平行趋势
  3. 事件研究法(Event Study):将每期的处理效应系数单独估计并绘图,是当前实证研究的黄金标准

案例数据:最低工资政策对就业率的影响

研究背景

参考经典的 Card & Krueger(1994)框架:某省在 2022 年第二季度调整了最低工资标准,相邻省份作为对照。研究问题:最低工资上调是否影响了餐饮业就业率?

数据结构

面板数据,含 2020 Q1 至 2024 Q4 共 20 个季度,200 个城市(100 处理 + 100 对照):

city_id     城市编号(面板个体 ID)
quarter     季度(时间变量,如 2020Q1=1, ..., 2024Q4=20)
treated     是否为处理组(1 = 政策实施省份,0 = 对照省份)
post        是否为政策后(1 = 2022Q2 起,0 = 之前)
emp_rate    餐饮业就业率(%,因变量)
gdp_growth  城市 GDP 增长率(控制变量)
pop_size    城市人口规模(控制变量,取对数)
industry_share  制造业占比(控制变量)

政策冲击点:第 9 期(2022 Q2)。


用 AI 一句话完成 DID 分析

chatsrs.com 上传数据后输入:

"使用面板数据做双重差分(DID)分析,评估最低工资政策对餐饮业就业率的影响。 因变量:emp_rate;处理变量:treated;政策后虚拟变量:post;控制变量:gdp_growth、ln_pop_size、industry_share;面板个体:city_id;时间变量:quarter。 请输出:

  1. 描述统计:处理组与对照组政策前后均值对比(四格表)
  2. 基准 DID 回归(含城市固定效应 + 时间固定效应),报告 ATT 系数、标准误(城市级聚类稳健)、95% CI、p 值
  3. 平行趋势检验:对政策前所有期进行联合 F 检验
  4. 事件研究图(Event Study Plot):逐期系数 + 95% CI 误差棒,以政策前一期(t-1)为参照
  5. 稳健性检验:安慰剂检验(placebo test,随机置换处理分配 1000 次)
  6. APA 格式中文文字描述"

输出结果怎么读

输出 1: 四格均值对比

表 1  处理组与对照组政策前后就业率均值对比(N = 200 城市)

                政策前均值(SD)    政策后均值(SD)    差分(Post - Pre)
处理组(n=100)  42.3 (6.8)          45.1 (7.2)          +2.8
对照组(n=100)  43.1 (7.1)          44.2 (7.4)          +1.1
双重差分(DID)                                           +1.7 ***

注:*** p < .001(t 检验)。就业率单位:%。

四格表解读:处理组政策后上升 2.8 个百分点,对照组同期上升 1.1 个百分点,净效应(DID)为 +1.7 个百分点。对照组的上升量代表"时间趋势",差分掉之后才是政策的净贡献。


输出 2: 双向固定效应 DID 回归

表 2  双重差分回归结果(因变量:餐饮业就业率,城市 + 时间固定效应)

变量                    系数 (beta)    聚类稳健 SE    t        p         95% CI
Treated x Post(ATT)   1.68           0.42          4.00     < .001    [0.85, 2.51]
gdp_growth              0.31           0.09          3.44     .001      [0.13, 0.49]
ln_pop_size             0.47           0.18          2.61     .009      [0.12, 0.82]
industry_share         -0.22           0.11         -2.00     .046     [-0.44, -0.00]

城市固定效应              Yes
时间固定效应              Yes
N(城市-季度观测)        4,000
城市数                   200
R^2(within)             0.41
聚类层级                 城市(city_id)

注:SE 为城市级聚类稳健标准误。*** p < .001。

核心系数解读

  • Treated x Post 系数 b_3 = 1.68(ATT),表示在控制城市固定效应、时间固定效应及协变量后,政策使处理组就业率相比反事实水平平均提升约 1.68 个百分点,效应显著(p < .001,95% CI [0.85, 2.51] 不含 0)。
  • 城市固定效应控制了城市间不随时间变化的差异(地理、历史禀赋等)。
  • 时间固定效应控制了所有城市共同面临的宏观冲击(全国经济周期等)。
  • 聚类标准误在城市层面聚类,修正了同一城市各期观测之间的序列相关。

输出 3: 平行趋势检验

平行趋势检验(政策前期联合显著性检验)

逐期事前系数(以 t-1 为参照):
  t-8:  b = -0.31, SE = 0.38, p = .414
  t-7:  b =  0.18, SE = 0.35, p = .607
  t-6:  b = -0.22, SE = 0.36, p = .542
  t-5:  b =  0.09, SE = 0.33, p = .785
  t-4:  b = -0.14, SE = 0.31, p = .651
  t-3:  b =  0.21, SE = 0.30, p = .482
  t-2:  b = -0.08, SE = 0.28, p = .774
  t-1:  [参照组,系数固定为 0]

联合 F 检验(H0:所有事前系数 = 0):
  F(7, 199) = 0.83, p = .562
  -> 未拒绝 H0,支持平行趋势假设

怎么看:政策前 8 期的逐期系数均不显著(单个 p 值全部 > .05),联合 F 检验也未达到显著(p = .562),提供了支持平行趋势假设的统计证据。这是 DID 结论可信的必要条件。


输出 4: 事件研究图(Event Study)

事件研究图(Event Study Plot)是当前政策评估实证研究的标准诊断图,横轴为相对政策冲击点的期数(负数 = 政策前,正数 = 政策后),纵轴为逐期处理效应估计值,误差棒为 95% CI。

事件研究逐期系数(以 t-1 为参照,t=0 为政策实施期)

期数    系数      SE      95% CI 下限   95% CI 上限
t-8    -0.31     0.38    -1.06          0.44
t-7     0.18     0.35    -0.51          0.87
t-6    -0.22     0.36    -0.93          0.49
t-5     0.09     0.33    -0.56          0.74
t-4    -0.14     0.31    -0.75          0.47
t-3     0.21     0.30    -0.38          0.80
t-2    -0.08     0.28    -0.63          0.47
t-1     0.00     [参照]
t=0     1.12     0.38     0.37          1.87
t+1     1.45     0.40     0.66          2.24
t+2     1.68     0.42     0.85          2.51
t+3     1.79     0.44     0.92          2.66
t+4     1.83     0.45     0.94          2.72
t+5     1.80     0.46     0.89          2.71
t+6     1.77     0.47     0.84          2.70
t+7     1.74     0.48     0.79          2.69
t+8     1.71     0.49     0.74          2.68
t+9     1.69     0.50     0.70          2.68
t+10    1.67     0.51     0.67          2.67
t+11    1.65     0.52     0.62          2.68

图形解读要点

  • 政策前(t < 0):系数围绕 0 波动,95% CI 均包含 0 — 视觉直观地支持平行趋势
  • 政策实施时(t=0):效应跳升至 1.12,95% CI 不含 0
  • 政策后(t > 0):效应持续稳定在 1.6-1.8 百分点区间,未见消退或持续扩大,提示政策效果较为持久

ChatSRS 自动生成此图的可发表版本:竖虚线标注政策冲击点,参照期误差棒为 0,图例含处理效应均值标注。


输出 5: 稳健性检验

安慰剂检验(Placebo Test)

随机置换 1000 次处理组分配,每次重新估计 Treated x Post 系数,生成系数分布:

安慰剂检验结果(B = 1000 次随机置换)

安慰剂系数分布:均值 = 0.001, SD = 0.31
真实 ATT 系数:1.68
真实系数在分布中的位置:p < .001(在 1000 次模拟中无一达到 1.68)

-> 真实系数显著偏离安慰剂分布右尾,安慰剂检验通过

怎么看:安慰剂系数均值接近 0(符合随机分配无效应的期望),真实 ATT = 1.68 远超安慰剂分布的 99.9 百分位数,说明观测到的效应不可能由随机因素产生,结论稳健。

其他稳健性检验(DID 研究惯例报告)

检验类型操作目的
安慰剂政策时间假设政策发生在 t-2,重新估计检验是否存在预期效应(anticipation effect)
剔除邻近期删除政策实施前后各 1 期重跑检验结果是否受过渡期扰动
替换对照组换用更相似的对照城市(PSM 匹配后)检验对照组选择的敏感性
改变聚类层级从城市级换为省级聚类检验推断对聚类层级的依赖性
Callaway-Sant'Anna多期 DID(处理时间异质时)处理 Staggered DID 的异质效应偏误

在 ChatSRS 中,告知"做 DID 完整稳健性检验套餐"即可自动执行并汇总以上全部检验。


论文里怎么报告(APA 7th 格式)

方法节写法

采用双重差分法(Difference-in-Differences, DID)估计最低工资上调政策对餐饮业就业率的因果效应。构建双向固定效应(Two-Way Fixed Effects, TWFE)回归模型,同时控制城市固定效应和季度时间固定效应,以吸收不随时间变化的城市特质差异及各城市共同的时间趋势。协变量包括城市 GDP 增长率、人口规模(对数)和制造业占比。标准误在城市层面聚类以修正组内序列相关。平行趋势假设通过事前系数联合 F 检验和事件研究图进行诊断。安慰剂检验(置换检验,B = 1000)用于评估结果的稳健性。统计分析以 R 4.4(fixest 包)实施,检验水准 alpha = .05(双尾)。

结果节写法

平行趋势假设的检验结果支持 DID 识别策略的有效性。政策前 8 期的处理效应系数联合 F 检验结果不显著,F(7, 199) = 0.83, p = .562,事件研究图亦显示政策前各期系数均围绕 0 波动且 95% CI 包含 0。

双向固定效应 DID 估计结果显示,最低工资政策显著提高了处理城市的餐饮业就业率,ATT = 1.68, 95% CI [0.85, 2.51], p < .001(城市级聚类稳健标准误 SE = 0.42)。即在控制城市和时间固定效应及协变量后,政策使处理组城市的餐饮业就业率相比反事实水平平均提升约 1.68 个百分点。事件研究图显示,效应于政策实施当期(t = 0)即显现(b = 1.12),并于随后 2-3 个季度内稳定在约 1.7 个百分点水平,未见衰减。安慰剂检验(B = 1000 次置换)中,真实 ATT 系数偏离安慰剂分布右尾,p < .001,排除了结果由随机因素驱动的可能性。

APA 格式报告要点速查

要素格式示例
ATT 系数 + CIATT = 1.68, 95% CI [0.85, 2.51]
聚类稳健 SESE = 0.42(城市级聚类)
联合 F 检验F(7, 199) = 0.83, p = .562
p 值p < .001(小数点前不写 0)
样本量N = 4,000 城市-季度观测(200 城市 x 20 期)
软件R 4.4(fixest 包)

特别提醒:APA 格式中 95% CI 用方括号 [ ] 表示,p 值小数点前不写 0(写 p = .562,不写 p = 0.562)。DID 的因果效应陈述须搭配平行趋势证据,不可单独声称因果关系。


DID 常见误区与诊断

误区 1:忽略固定效应,只做简单 OLS

简单 OLS 回归 Y = alpha + beta * Treated * Post + epsilon 不控制个体和时间固定效应,无法排除处理组与对照组之间不随时间变化的差异,以及不同时期的宏观冲击。正确做法是加入双向固定效应(城市 + 时间)

误区 2:没有进行平行趋势检验就声称因果

平行趋势假设是 DID 的灵魂。投稿顶级期刊,如果方法节和结果节没有事件研究图,几乎必然被审稿人要求补做。事件研究法是当前标准,不是可选项

误区 3:Staggered DID 用传统 TWFE 估计

当不同城市/单元在不同时期陆续受到政策影响(交错处理,Staggered Treatment)时,传统 TWFE 估计量可能被"污染"——已受处理的早期组会被用作晚期组的对照,产生有偏估计(Goodman-Bacon, 2021)。此时应改用 Callaway-Sant'Anna(2021)或 Sun & Abraham(2021)等稳健估计量。ChatSRS 在检测到交错处理结构时会自动警示并提供替代方案。

误区 4:混淆 ATT 与 ATE

DID 估计的是ATT(Average Treatment Effect on the Treated,对被处理单元的平均处理效应),而非 ATE(全体单元的平均处理效应)。ATT 的外推性受限:若处理组与对照组的可观测特征差异较大,ATT 不能直接推广到整个人群。论文中应在结果解释部分明确区分。


常见问题 FAQ

Q1:对照组应该怎么选?选得不好会怎样?

A:对照组的核心要求是在没有政策干预时,与处理组具有相似的时间趋势(平行趋势)。实践中的选取原则:(1) 经济结构、发展水平相似的地区;(2) 未受到同期其他政策干预的地区;(3) 地理上相邻(或通过倾向得分匹配 PSM 筛选)。对照组选择不当是 DID 失效的首要原因——即使平行趋势检验"通过"(政策前期恰好相似),若对照组本质上不可比,结论仍不可信。ChatSRS 可在给出 PSM 匹配数据后直接进入 DID 分析。

Q2:样本量要求是什么?单位数越多越好吗?

A:DID 中的有效样本量主要取决于处理单元数(如城市、个人、企业的数量),而非总观测量(单元数 x 时期数)。当处理单元数 < 50 时,常规的聚类稳健标准误可能严重低估方差,导致过度拒绝 H0(I 类错误膨胀);此时应改用 Wild Cluster Bootstrap 或 Randomization Inference 方法推断。此外,时期数越多(尤其是政策前期),事件研究图的诊断效力越强,单位数 >= 50、政策前期数 >= 4 是常见的最低要求。

Q3:平行趋势检验"通过"了,DID 就一定有效吗?

A:平行趋势检验是必要条件,而非充分条件。通过检验只说明政策前历史趋势相似,并不能排除以下威胁:(1) SUTVA 违反:处理组的政策通过"溢出"影响了对照组(如劳动力跨城市流动);(2) 同期混杂事件:政策实施同期,处理组遭遇了其他同向政策冲击;(3) 外推偏误:政策前的平行趋势不代表政策后的反事实路径。这些威胁需要通过学科知识、安慰剂检验、排他性限制条件等综合论证,而非仅依赖统计检验。

Q4:DID 和倾向得分匹配(PSM)可以结合吗?

A:可以,两种方法优势互补,组合使用称为 PSM-DID。PSM 先确保处理组与对照组在可观测特征上可比(降低选择偏误),DID 再差分掉不随时间变化的不可观测特征差异(降低遗漏变量偏误)。在 ChatSRS 中,可先输入"用 PSM 匹配处理组与对照组,匹配变量为……",待匹配后再接着说"对匹配后的数据做 DID 分析",两步无缝衔接。


小结

双重差分法是政策评估、因果推断研究中最常用的准实验方法,难点集中在四处:正确构建双向固定效应模型、严格检验平行趋势假设、用事件研究图可视化逐期效应,以及识别并应对 Staggered DID 的估计偏误。

ChatSRS 把全套流程压到一句话:自动输出 ATT 系数(聚类稳健 SE)、平行趋势联合检验、事件研究图(可发表版本)、安慰剂置换检验,并生成可直接复制进论文的 APA 7th 格式中文描述。

记住最重要的一条:DID 的因果解释依赖于平行趋势假设,事件研究图不是装饰,是必须展示的核心证据


相关阅读


本文首发于 ChatSRS 官方博客。如有问题或反馈,欢迎在 ChatSRS 站内 [用户中心 -> 帮助与反馈] 联系我们。