全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
2837 0
2025-08-28

第一步:准备工作与基准回归

在进行平行趋势检验前,首先需要设定你的数据并运行基准DID回归。

* 假设你的数据已加载* 设定面板数据格式xtset id year* 生成政策虚拟变量和处理组虚拟变量* D: 处理组虚拟变量 (Treat = 1)* Post: 政策后虚拟变量 (Policy year and after = 1)gen did = D * Post* 执行标准的双向固定效应 (TWFE) 模型作为基准回归reghdfe outcome did, absorb(id year) vce(robust)estimates store baseline

第二步:进行事件研究法(Event Study)绘制平行趋势图

这是诊断平行趋势和发现“事前一期显著”问题的关键步骤。

* 1. 生成相对时间变量* 假设政策发生在 year = 2015gen rel_time = year - 2015* 2. 将政策实施前很远的一期(或政策实施当期)作为基准期(omit)* 这里我们选择政策前一期 (rel_time = -1) 作为基准,这是常见做法tab rel_time, gen(time_dummy)* 查看生成的时间虚拟变量,确认哪一列对应 rel_time = -1* 假设 -1 是第4个生成的变量,我们将其省略reghdfe outcome time_dummy1 time_dummy2 time_dummy3 time_dummy5 time_dummy6..., absorb(id year) vce(robust)* 更优雅的方法:使用 `coefplot` 或 `esttab` 前手动省略* 我们使用 `ibn.rel_time` 来省略某个类别reghdfe outcome ibn.rel_time, absorb(id year) vce(robust) nocons omit(-1.rel_time)estimates store event_study* 3. 绘制系数图,直观查看是否存在事前趋势coefplot event_study, keep(*.rel_time) vertical recast(connect) yline(0) xline(0, lpattern(dash))* 注意:如果政策前一期(-1)的系数置信区间不包含0,且在经济学上显著,这就是“事前一期显著”问题。

第三步:怎么办?—— 解决方案与实战代码

当你在图表上看到事前一期(rel_time = -2 或 -1)显著时,可以尝试以下策略:

方案一:改变基准期(Omitted Period)

有时事前一期显著是因为基准期选择不当。尝试将基准期改为政策前更早的时期。

* 将基准期从 policy前1期 (-1) 改为 policy前2期 (-2)reghdfe outcome ibn.rel_time, absorb(id year) vce(robust) nocons omit(-2.rel_time)estimates store event_study_omit2coefplot event_study_omit2, keep(*.rel_time) vertical recast(connect) yline(0) xline(0, lpattern(dash))* 比较两次回归的结果,看事前显著的问题是否消失或减弱。

方案二:剔除政策前数据并进行安慰剂检验

如果改变基准期无效,最严谨的做法是承认平行趋势可能不完全满足,并采取更保守的估计。

* 1. 剔除政策前一期(有问题的时期)重新跑事件研究* 生成一个样本范围变量:只包含政策前2期及之前 + 政策后所有期gen sample_robust = 1 if rel_time <= -2 | rel_time >= 0reghdfe outcome ibn.rel_time if sample_robust == 1, absorb(id year) vce(robust) nocons omit(-2.rel_time)estimates store event_study_robustcoefplot event_study_robust, keep(*.rel_time) vertical recast(connect) yline(0) xline(0, lpattern(dash))* 此时图表从 policy前2期 开始,跳过了有问题的 policy前1期。* 2. 基于新样本重新运行基准DID* 注意:此时的DID定义需基于新样本gen post_robust = (year >= 2015)gen did_robust = D * post_robustreghdfe outcome did_robust if sample_robust == 1, absorb(id year) vce(robust)* 汇报这个结果作为核心结论,并在论文中说明:“为避免政策前一期存在的潜在趋势干扰,我们采用了保守的样本选择...”

方案三:安慰剂检验(Placebo Test)

这是一种“证伪”测试,用于确认事前一期显著是否是偶然现象。

* 虚构一个假的政策实施时间,比如在真实政策发生前2年gen placebo_year = 2013gen post_placebo = (year >= placebo_year)gen did_placebo = D * post_placebo* 在“假政策”前的样本中运行DID* 选取假政策点前后足够长的窗口期,例如2009-2012reghdfe outcome did_placebo if year <= 2012, absorb(id year) vce(robust)* 如果这个虚构的 `did_placebo` 系数不显著,说明之前的事前一期显著可能只是偶然。* 如果它依然显著,则强烈表明你的处理组和控制组在政策前就存在系统性差异,DID的估计结果很可能有偏。

第四步:结果呈现与报告

在论文中,你需要清晰地展示整个过程。

* 使用 esttab 输出所有存储的模型结果,便于比较esttab baseline event_study_omit2 event_study_robust, star(* 0.1 ** 0.05 *** 0.01) se ar2 keep(did *.rel_time)* 使用 coefplot 将多个结果合并到一张图上,展示稳健性coefplot (event_study, keep(*.rel_time) label(Full Sample)) (event_study_robust, keep(*.rel_time) label(Robust Sample)), vertical recast(connect) yline(0) xline(0, lpattern(dash))
  • 诊断优先:首先通过 coefplot 可视化事件研究结果,确认问题。
  • 尝试简单调整:首先尝试方案一(改变基准期),看问题是否解决。
  • 采取保守策略:如果问题依然存在,方案二(剔除问题样本) 是最诚实、最令人信服的做法。在论文中明确解释你为什么这样做。
  • 进行证伪检验:务必运行方案三(安慰剂检验),这能为你的结论提供强有力的支持或提出警告。
  • 透明化:在论文的附录中,同时展示包含所有时期和剔除问题时期的结果,让审稿人和读者能看到你的分析是稳健的。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群