)
从理论到实战Stata实现DID双重差分模型的完整指南在实证研究领域双重差分法(Difference-in-Differences, DID)已成为评估政策效果的主流方法。不同于简单的OLS回归DID通过巧妙的设计能够控制时间趋势和组间固有差异更准确地识别因果效应。本文将带您从零开始用Stata完成一次完整的DID分析流程。1. DID模型的核心原理与适用条件DID方法本质上是通过两次差分来剥离混杂因素第一次差分消除时间趋势第二次差分消除组间固有差异。其核心模型可表示为Y β0 β1*treated β2*post δ*(treated×post) ε其中δ就是我们关注的政策效应估计值。要保证DID估计的有效性必须满足以下关键假设平行趋势假设在没有干预的情况下实验组和对照组的结果变量随时间变化的趋势相同无预期效应政策实施前个体行为不会因预期政策而改变无溢出效应对照组的个体不会受到政策影响提示在实际应用中平行趋势假设最为关键但也最难验证后文将详细介绍检验方法2. 数据准备与变量构建我们以虚构的教育政策评估为例假设某地区在2015年对部分学校实施了新的教学方案需要评估该政策对学生成绩的影响。原始数据结构应包含个体层面学生ID、所属学校时间层面观测年份如2013-2018结果变量标准化考试成绩分组变量是否属于政策实施学校时间变量是否在政策实施后在Stata中构建关键变量的典型代码如下// 生成时间虚拟变量 gen post (year 2015) !missing(year) // 生成处理组虚拟变量 gen treated (school_type 1) !missing(school_type) // 生成交互项 gen did treated * post变量说明表变量名类型描述取值post虚拟变量政策后时期0政策前1政策后treated虚拟变量处理组标识0对照组1处理组did交互项政策效应treated×post3. 基础DID模型估计在Stata中DID模型可以通过多种方式实现以下是三种常用方法3.1 手动回归法reg score treated post did, robust这种方法最直观可以直接读取did项的系数作为政策效应估计。3.2 diff命令法Stata的diff命令专为DID设计语法更简洁diff score, t(treated) p(post) cov(control_vars) robust3.3 xtreg法对于面板数据使用固定效应模型可能更高效xtset id year xtreg score i.post##i.treated, fe robust模型结果解读要点did项的系数δ反映政策平均处理效应(ATE)treated项反映组间固有差异post项反映共同时间趋势应同时报告标准误和显著性水平4. 平行趋势检验实战平行趋势假设是DID有效性的关键以下是三种主流检验方法4.1 事件研究法通过引入政策前后各期的交互项来检验趋势// 生成相对时间变量 gen rel_year year - 2015 // 创建各期虚拟变量 forvalues k -3/3 { gen prek (rel_year k) treated } // 回归模型 reg score pre_3 pre_2 pre_1 current post1 post2 post3 /// i.year treated, robust // 可视化结果 coefplot, keep(pre_* current post_*) vertical /// yline(0) xline(4, lpattern(dash))4.2 平行趋势图直观展示政策前后两组的趋势egen mean_score mean(score), by(year treated) twoway (connect mean_score year if treated1) /// (connect mean_score year if treated0, lp(dash)), /// xline(2015) legend(label(1 处理组) label(2 对照组))4.3 提前政策检验虚构政策实施时间检验政策前效应gen placebo_post (year 2014) // 假设政策提前1年 gen placebo_did treated * placebo_post reg score treated placebo_post placebo_did if year 2015, robust注意若政策前虚拟处理效应显著则平行趋势假设可能不成立5. 稳健性检验与扩展分析为确保结果可靠还需进行以下检验5.1 安慰剂检验// 随机分配处理状态 set seed 1234 gen random_treated runiform() 0.5 gen random_did random_treated * post // 估计虚假政策效应 reg score random_treated post random_did, robust5.2 不同对照组选择尝试不同的对照组组合观察结果稳定性// 仅使用邻近地区作为对照 reg score treated post did if region 1 | region 2, robust // 使用倾向得分匹配后的样本 psmatch2 treated x1 x2 x3, logit neighbor(3) reg score treated post did [pw_weight], robust5.3 动态效应分析考察政策效果的时效性gen year_2015 (year 2015) * treated gen year_2016 (year 2016) * treated gen year_2017 (year 2017) * treated reg score treated year_2015 year_2016 year_2017 i.year, robust6. 常见问题与解决方案在实际应用中研究者常遇到以下挑战样本流失问题处理组和对照组在不同时期的样本构成发生变化解决方案检查样本平衡性加入个体固定效应政策实施时间不一不同个体接受处理的时间不同解决方案采用事件研究法或转向更灵活的异时DID模型溢出效应对照组成员可能间接受政策影响解决方案剔除邻近地区样本或估计溢出效应范围多重政策冲击研究期间发生其他相关改革解决方案加入其他政策虚拟变量或缩小研究窗口Stata实现中的典型错误错误设定时间变量// 错误直接使用年份作为post gen post_wrong year // 正确应生成虚拟变量 gen post_correct (year policy_year)忽略聚类标准误// 不佳仅使用robust选项 reg y treated post did, robust // 更佳考虑个体或组别聚类 reg y treated post did, vce(cluster school_id)错误解释交互项不能仅看交互项系数需结合主效应综合判断建议使用margins命令计算边际效应7. 高级应用与扩展对于更复杂的研究设计可考虑以下进阶方法7.1 三重差分法(DDD)当存在第二维度差异时可采用三重差分gen triple_diff treated * post * group2 reg y treated post group2 /// treated#post treated#group2 post#group2 triple_diff, robust7.2 连续型处理强度处理变量非二元时的扩展gen treatment_intensity ... // 连续型处理强度变量 gen did_cont treatment_intensity * post reg y treatment_intensity post did_cont, robust7.3 非线性DID模型当结果变量非连续时// 二元结果变量 logit y treated post did, vce(robust) margins, dydx(did) // 计数数据 poisson y treated post did, vce(robust)8. 结果呈现与可视化专业的结果展示能提升研究可信度8.1 回归结果输出// 使用esttab输出专业表格 eststo did1: reg score treated post did, robust eststo did2: xtreg score i.post##i.treated, fe robust esttab did1 did2, star(* 0.1 ** 0.05 *** 0.01) /// stats(N r2, fmt(%9.0g %9.3f)) /// mtitle(OLS FE)8.2 系数图绘制coefplot, keep(treated post did) /// vertical rename(did政策效应) /// yline(0) ciopts(recast(rcap))8.3 趋势对比图twoway (lpoly score year if treated1, lw(*2)) /// (lpoly score year if treated0, lp(dash)), /// xline(2015) legend(label(1 处理组) label(2 对照组)) /// xtitle(年份) ytitle(平均成绩)在实际分析中我发现处理组和对照组的基线特征平衡性检查常被忽视。建议在报告DID结果前先展示两组在政策前的特征对比表这能大大增强结果的可信度。另外当使用coefplot绘制动态效应时调整置信区间显示方式如改用I型误差条能使图形更专业清晰。