双重差分(DID)
DIDFEPanel

经典 2×2 双重差分(DID):模型设定、估计与推断

系统讲解经典双重差分法的模型设定、双向固定效应估计、聚类标准误选择,配套完整Stata代码。

作者:计量科研导航站发布:2025-03-10★★★

本文结构

  1. 原理:DID 的识别逻辑与核心假设
  2. 直觉:Card & Krueger 最低工资自然实验
  3. 代码:完整 Stata 实现(模拟数据 + 估计 + 可视化)

第一层:原理

DID 的核心思想

双重差分法通过比较两次差分来识别因果效应:

τ^DID=(YˉT,postYˉT,pre)处理组前后差(YˉC,postYˉC,pre)控制组前后差\hat{\tau}_{DID} = \underbrace{(\bar{Y}_{T,post} - \bar{Y}_{T,pre})}_{\text{处理组前后差}} - \underbrace{(\bar{Y}_{C,post} - \bar{Y}_{C,pre})}_{\text{控制组前后差}}

回归框架

经典 2×2 DID 模型:

Yit=α+β1Treati+β2Postt+τ(Treati×Postt)+εitY_{it} = \alpha + \beta_1 \cdot Treat_i + \beta_2 \cdot Post_t + \tau \cdot (Treat_i \times Post_t) + \varepsilon_{it}

其中 τ\tau 即为 DID 估计量,即处理效应(ATT)。

双向固定效应(TWFE)

等价地,使用个体和时间固定效应:

Yit=αi+λt+τDit+εitY_{it} = \alpha_i + \lambda_t + \tau \cdot D_{it} + \varepsilon_{it}

其中 αi\alpha_i 为个体固定效应,λt\lambda_t 为时间固定效应,Dit=Treati×PosttD_{it} = Treat_i \times Post_t

核心假设:平行趋势

E[Y(0)postY(0)preTreat=1]=E[Y(0)postY(0)preTreat=0]E[Y(0)_{post} - Y(0)_{pre} \mid Treat = 1] = E[Y(0)_{post} - Y(0)_{pre} \mid Treat = 0]

即在没有处理的情况下,处理组和控制组的时间趋势相同。

⚠️ 平行趋势假设不可直接检验,但可以通过预趋势检验提供间接证据(详见下一篇)。

聚类标准误

当面板数据中误差项在个体层面存在序列相关时,需要使用聚类标准误:

V^cluster=(XX)1(g=1GXgε^gε^gXg)(XX)1\hat{V}_{cluster} = (X'X)^{-1} \left(\sum_{g=1}^{G} X_g' \hat{\varepsilon}_g \hat{\varepsilon}_g' X_g \right) (X'X)^{-1}

一般规则:聚类层级选择处理变量变化的层级


第二层:直觉

Card & Krueger (1994):最低工资与就业

新泽西(处理组) 宾夕法尼亚(控制组) 差分
政策前 20.44 23.33 -2.89
政策后 21.03 21.17 -0.14
前后差 +0.59 -2.16 +2.76

DID 估计:τ^=2.76\hat{\tau} = 2.76(最低工资提高反而增加了就业)

这一反直觉的结果挑战了传统劳动经济学的预测,成为因果推断方法论的里程碑之一。


第三层: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

常见错误

  1. 忘记聚类标准误:面板DID必须聚类,否则标准误严重低估
  2. 聚类层级错误:应在处理变量变化的层级聚类(通常是个体或地区层级)
  3. 混淆 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.

关联代码文件