本文结构
- 原理:DID 的识别逻辑与核心假设
- 直觉:Card & Krueger 最低工资自然实验
- 代码:完整 Stata 实现(模拟数据 + 估计 + 可视化)
第一层:原理
DID 的核心思想
双重差分法通过比较两次差分来识别因果效应:
回归框架
经典 2×2 DID 模型:
其中 即为 DID 估计量,即处理效应(ATT)。
双向固定效应(TWFE)
等价地,使用个体和时间固定效应:
其中 为个体固定效应, 为时间固定效应,。
核心假设:平行趋势
即在没有处理的情况下,处理组和控制组的时间趋势相同。
⚠️ 平行趋势假设不可直接检验,但可以通过预趋势检验提供间接证据(详见下一篇)。
聚类标准误
当面板数据中误差项在个体层面存在序列相关时,需要使用聚类标准误:
一般规则:聚类层级选择处理变量变化的层级。
第二层:直觉
Card & Krueger (1994):最低工资与就业
| 新泽西(处理组) | 宾夕法尼亚(控制组) | 差分 | |
|---|---|---|---|
| 政策前 | 20.44 | 23.33 | -2.89 |
| 政策后 | 21.03 | 21.17 | -0.14 |
| 前后差 | +0.59 | -2.16 | +2.76 |
DID 估计:(最低工资提高反而增加了就业)
这一反直觉的结果挑战了传统劳动经济学的预测,成为因果推断方法论的里程碑之一。
第三层:Stata 代码
// ═══════════════════════════════════════════════
// 经典 2×2 DID 完整实现
// ═══════════════════════════════════════════════
clear all
set seed 12345
// ═══ 模拟数据 ═══════════════════════════════
set obs 1000
gen id = _n
gen treat = (id > 500)
gen post = (runiform() > 0.5)
// DGP: 真实处理效应 τ = 3
gen y = 2 + 0.5*treat + 1.5*post + 3*treat*post + rnormal(0, 1)
// ═══ 方法一:交互项回归 ═══════════════════
reg y i.treat##i.post, robust
// treat#post 的系数即为 DID 估计量
// ═══ 方法二:reghdfe(推荐)═══════════════
reghdfe y treat#post, absorb(id post) cluster(id)
// ═══ 可视化 ═══════════════════════════════
preserve
collapse (mean) y, by(treat post)
twoway (connected y post if treat==0, lcolor(blue)) ///
(connected y post if treat==1, lcolor(red)), ///
legend(order(1 "控制组" 2 "处理组")) ///
title("DID:处理组与控制组趋势")
restore常见错误
- 忘记聚类标准误:面板DID必须聚类,否则标准误严重低估
- 聚类层级错误:应在处理变量变化的层级聚类(通常是个体或地区层级)
- 混淆 FE 和 DID:加入个体和时间固定效应 ≠ DID,还需要正确定义处理变量
参考文献
- Card, D., & Krueger, A. B. (1994). Minimum Wages and Employment. AER, 84(4), 772-793.
- Angrist, J. D., & Pischke, J. S. (2009). Mostly Harmless Econometrics. Princeton.
- Correia, S. (2016). reghdfe: Estimating Linear Models with Multi-way Fixed Effects. Stata Journal.