第 4 周:DiD 方法的前沿拓展——匹配、合成、交错与实战
中国人民大学商学院
2026-05-23
核心要点
本节课目标
六个层层递进的环节
提示
配套实验室
所有 Stata 代码在 2026Spring/Labs/L4-Diff-in-Diffs-More.ipynb 中可独立运行。
潜在结果与 ATT
ATT = E[Y_i^1 - Y_i^0 \mid D_i = 1,\, \boldsymbol{X}_i]
观测差异的分解
\underbrace{E[Y_i \mid D=1, \boldsymbol{X}] - E[Y_i \mid D=0, \boldsymbol{X}]}_{\text{观测差异}} = \underbrace{ATT \mid \boldsymbol{X}}_{\text{真实效应}} + \underbrace{E[Y_i^0 \mid D=1,\boldsymbol{X}] - E[Y_i^0 \mid D=0, \boldsymbol{X}]}_{\textcolor{red}{\text{选择偏误}}}
选择偏误是阻挡“简单比较”识别 ATT 的核心障碍。
CIA 假设
Y_i^0 \perp D_i \mid \boldsymbol{X}_i
在 \boldsymbol{X}_i 条件下,处理分配相当于随机;此时 Bias(\boldsymbol{X}_i) = 0,ATT 可被识别。
CIA 何时失效
Angrist-Pischke 的观察
“Regression can be motivated as a particular sort of weighted matching estimator.”
权重差异
提示
共同支撑(Common Support)要求
0 < \Pr(D_i = 1 \mid \boldsymbol{X}_i) < 1
若某些 \boldsymbol{X} 值下只有处理组(或只有对照组),匹配/回归的权重无法定义。
Rosenbaum-Rubin (1983) 的降维
当 \boldsymbol{X} 维度高,逐维匹配困难。PSM 把 \boldsymbol{X} 压缩为一维倾向得分:
P(\boldsymbol{Z}_i) = \Pr(D_i = 1 \mid \boldsymbol{Z}_i)
匹配改在 P(\boldsymbol{Z}_i) 上进行。
Heckman-Ichimura-Todd (1998) 的结构解释
PSM-DID 估计量
\hat{\delta}^{PSM\text{-}DID} = E[Y_{i1} - Y_{i0} \mid \boldsymbol{X}_i, D_{i1} = 1] - E[Y_{i1} - Y_{i0} \mid \boldsymbol{X}_i, D_{i1} = 0]
匹配处理组与对照组在 P(\boldsymbol{Z}_i) 上相近的单位,对差分后的结果取平均。
PSM-DID 优于简单 PSM 之处
三步走
probit / logit 估计 P(\boldsymbol{Z}_i)提示
推断:Abadie & Imbens (2006) 的解析标准误;Stata 命令 teffects psmatch 直接支持。
* ===== DGP:500 个体 × 2 期面板(选入处理依赖 x)=====
clear all
set seed 10101
set obs 500
g id = _n
g lambda = rnormal(0, 0.5) // 个体固定效应
expand 2
bys id: g t = _n - 1 // 0/1 两期
g x = rnormal(0, 1)
g u1 = rnormal(0, 0.2)
g u0 = rnormal(0, 0.2)
g v = rnormal(0, 1) if t == 1 // 选择方程噪声
scalar delta = 0.1 // 时间趋势
scalar alpha1 = 0.1
scalar alpha2 = 0.2
g y0 = alpha1*x + alpha2*x^2 + lambda + delta*t + u0
g y1 = alpha1*x + alpha2*x^2 + lambda + delta*t + u1
g D = 0
bys id (t): replace D = 1 if t == 1 & x > v // x 大的单位进入处理
g tau_u = cond(D == 1, 0.15, 0) // 真实 ATT = 0.15
replace y1 = y1 + tau_u if D == 1
g y = D*y1 + (1 - D)*y0
save simdata_did1.dta, replace* ===== Step 2:生成差分结果,Step 3:匹配 =====
tsset id t
g dy = y - l.y // 差分结果
* 1 近邻 PSM-DID
teffects psmatch (dy) (D x, probit) if t==1, atet nn(1) vce(robust)
* 2 近邻 PSM-DID
teffects psmatch (dy) (D x, probit) if t==1, atet nn(2) vce(robust)
* 3 近邻 PSM-DID
teffects psmatch (dy) (D x, probit) if t==1, atet nn(3) vce(robust)选择近邻数的权衡:近邻越多 → 偏误越小,但方差越大。
matrix Res = J(10, 3, .)
forv i = 1/10 {
qui teffects psmatch (dy) (D x, probit) if t==1, atet nn(`i') vce(robust)
matrix Res[`i', 1] = (_b[r1vs0.D], _se[r1vs0.D], `i')
}
drop _all
set obs 10
svmat double Res, names(c)
twoway connected c1 c3 || connected c2 c3, ///
legend(order(1 "ATT" 2 "SE")) xtitle("# of Neighbors")提示
实操经验
条件平行趋势下的 ATT 权重表达
ATT = E\left[\frac{Y_{i1} - Y_{i0}}{\textcolor{blue}{P(D = 1)}} \cdot \textcolor{red}{\frac{D_{i1} - P(D = 1 \mid \boldsymbol{X})}{1 - P(D = 1 \mid \boldsymbol{X})}}\right]
直观:用倾向得分对差分结果加权重,使得“对照组”被重新标定为处理组的可比反事实。
为什么重要
absdidSCM(Abadie-Diamond-Hainmueller, JASA 2010)
单一处理单位的反事实用对照池的加权组合构造:
\hat{Y}_{1t}^{SCM} = \sum_{j=2}^{J+1} \omega_j^* \cdot Y_{jt}, \quad \omega^* \geq 0,\ \sum_j \omega_j^* = 1
何时 SCM 不够用
Arkhangelsky et al. (AER 2021) 的融合
合成 DiD(Synthetic DiD, SDiD)= SCM 的单位权重 + DiD 的时期权重 + TWFE 的面板结构
同时使用单位权重 \omega_i^{sc} 与时期权重 \lambda_t^{sc}
(\hat{\delta}^{sdid},\, \hat{\mu},\, \hat{\alpha}_i,\, \hat{\beta}_t) = \arg\min \sum_i \sum_t (Y_{it} - \mu - \alpha_i - \beta_t - \delta D_{it})^2 \cdot \textcolor{blue}{\hat{\omega}_i^{sc}} \cdot \textcolor{red}{\hat{\lambda}_t^{sc}}
直觉:
提示
实现:Stata sdid、R synthdid;支持 bootstrap 或 jackknife 推断。
use simdata_did1.dta, clear
g x2 = x^2
* 合成 DiD(自带单位 + 时期权重,bootstrap 推断)
sdid y id t D, covariates(x x2, projected) ///
vce(bootstrap) seed(123)
* 提取单位权重 omega(只存在于 t==1 且 D==0 的对照单位上)
g omega = .
qui sum D if t==1 & D==0
qui forv i = 1/`r(N)' {
scalar uw = e(omega)[`i', 1]
scalar ctr_id = e(omega)[`i', 2]
replace omega = uw if id == ctr_id
}为什么要看权重
分批推进的政策
现实中很少“一刀切”,绝大多数政策是分批实施:
TWFE 的直觉“扩展”
Y_{it} = \alpha_i + \lambda_t + \delta D_{it} + \varepsilon_{it}
看起来与 2×2 一样;但在交错处理下,\hat{\delta} 的含义已经面目全非。
Bacon 分解定理
交错处理下,TWFE 系数等于所有可能的 2×2 DiD 估计量的加权平均:
\hat{\delta}^{TWFE} = \sum_{j \neq U} \underbrace{s_{jU} \hat{\beta}_{jU}^{2\times 2}}_{\text{处理 vs 从未}} + \sum_{k < \ell} s_{k\ell} \left[\mu_{k\ell} \underbrace{\hat{\beta}_{k\ell}^{2\times 2, k}}_{\text{早 vs 晚}} + (1 - \mu_{k\ell}) \underbrace{\hat{\beta}_{k\ell}^{2\times 2, \ell}}_{\textcolor{red}{\text{晚 vs 早(已处理)}}}\right]
从未处理组 U、早处理组 k、晚处理组 \ell——TWFE 把它们两两组合做 2×2 DiD 再加权。
问题的关键
在“晚 vs 早”比较中,早处理组此时已处于处理后——其效应累积被错误地归为“控制组的趋势变化”。
权重的两个来源
s_{jU} = \frac{(n_j + n_U)^2 \hat{V}_{jU}^D}{\hat{V}^D},\ s_{k\ell}^k = \frac{[(n_k + n_\ell)(1 - \bar{D}_\ell)]^2 \hat{V}_{k\ell}^{D,k}}{\hat{V}^D},\ s_{k\ell}^\ell = \frac{[(n_k + n_\ell) \bar{D}_k]^2 \hat{V}_{k\ell}^{D,\ell}}{\hat{V}^D}
提示
直觉
TWFE 并不“公平地”加权所有处理效应。它放大规模相当、时点居中的比较;缩小边缘样本。
Goodman-Bacon 的因果解释
\hat{\delta}^{TWFE} = \underbrace{VWATT}_{\text{方差加权 ATT}} - \underbrace{VWCT}_{\text{方差加权共同趋势}} + \underbrace{\Delta ATT}_{\textcolor{red}{\text{偏误项}}}
负权重的出现
\Delta ATT = \sum_{k \neq U} \sum_{\ell > k} \sigma_{k\ell} \cdot [ATT_k^{post(\ell)} - ATT_k^{mid(k,\ell)}]
早处理组在晚处理组的“post”期继续累积效应时,它作为对照反而拉低了对“新处理”的估计——估计量可能给出错误符号。
Stevenson & Wolfers (2006)
bacondecomp 重新审视 → 发现 TWFE 的权重结构严重扭曲了估计
事件研究估计:post 期的平均效应 ≈ -4.92
TWFE 系数(未分解):-3.08
差距从何而来? 正是 Bacon 分解揭示的已处理对照组偏误。

时点比较权重(问题区)
s_{k\ell}^k + s_{k\ell}^\ell = 0.26 + 0.11 = 0.37
处理-从未对照权重
s_{jU} = 0.38 + 0.24 = 0.62
清理后
* ===== 交错处理 DGP(Borusyak et al. 2021 模板)=====
clear all
set seed 10
global T = 15
global I = 500
set obs `=$I * $T'
gen i = int((_n - 1)/$T) + 1
gen t = mod((_n - 1), $T) + 1
tsset i t
gen Ei = ceil(runiform() * 7) + $T - 6 if t == 1 // 首次处理年份 10..16
bys i (t): replace Ei = Ei[1]
gen K = t - Ei // 相对处理期
gen D = K >= 0 & Ei != .
gen tau = cond(D == 1, (t - 12.5), 0) // 动态效应
gen Y = i + 3*t + tau*D + rnormal()四个现代方法的修复路径
下面依次介绍四种主流方法:Wooldridge Mundlak、Sun-Abraham、Callaway-Sant’Anna、de Chaisemartin-D’Haultfoeuille、Borusyak-Jaravel-Spiess。
核心思想
“There is nothing inherently wrong with TWFE; the problem is that it imposes strong restrictions on effect heterogeneity.”
解决办法:把组群-时期虚拟交互项全部放入回归:
E(Y_{it} \mid \boldsymbol{G}) = \eta + \sum_{g=2}^T \lambda_g G_{ig} + \sum_{s=2}^T \theta_s \mathbf{1}(t = s) + \sum_{g=2}^T \sum_{s = g}^T \tau_{g,s} (G_{ig} \cdot \mathbf{1}(t = s))
识别假设
交互加权估计量(Interaction-Weighted, IW)
Y_{it} = \sum_{g} \sum_{e \neq 0} \delta_{g,e} \cdot G_{ig} \cdot \mathbf{1}(t - g + 1 = e) + \lambda_i + \lambda_t + \varepsilon_{it}
组群-时期 ATT
ATT(g, t) = E[Y_t(g) - Y_t(\infty) \mid G_g = 1]
对照组两种选择
对应的估计量:
\widehat{ATT}^{ny}(g, t) = \frac{\sum_i G_{ig}(Y_{it} - Y_{i,g-1})}{\sum_i G_{ig}} - \frac{\sum_i C_i(1 - G_{ig})(Y_{it} - Y_{i,g-1})}{\sum_i C_i(1 - G_{ig})}
瞬时处理效应
\hat{\delta}^{dCdH} = \sum_{g=2}^T \hat{P}(G_g = 1 \mid \text{Treated})\cdot \widehat{ATT}(g, g)
只估计刚被处理那一瞬间的效应,按组群规模加权。
插补估计量
BJS 的卖点:在齐次方差下效率最优(BLUE);推断基于“随机化”——小样本可靠,自带预趋势的正式检验。
| 维度 | CS | SA | dCdH | BJS |
|---|---|---|---|---|
| 框架 | 非参数 | 回归(IW) | 匹配式 | 插补 |
| 关注对象 | ATT(g, t) | \delta_{g, e} | 即期 ATT | 所有 (i, t) |
| 对照组 | 从未 / 尚未 | 最后处理 | 从未 + 尚未 | 所有未处理观测 |
| 协变量 | 需显式加权 | 直接入回归 | 需显式加权 | 直接入回归 |
| 小样本 | Bootstrap | 渐近 | 渐近 | 正式随机化 |
提示
实务建议
至少报告两种结果,并说明一致性。若方法间差距悬殊——往往是处理效应异质性被某一种方法的聚合方式放大了。
提示
500 单位 × 15 期,处理时点在 10–16 年间随机分配,真实动态效应 \tau = t - 12.5。OLS 事件研究在 post 期系统性偏低;四种现代估计量与真值基本重合。
* OLS(传统事件研究)
reghdfe Y F*event L*event, a(i t) cluster(i)
estimates store ols
* Sun-Abraham
eventstudyinteract Y L*event F*event, vce(cluster i) ///
absorb(i t) cohort(Ei) control_cohort(lastcohort)
matrix sa_b = e(b_iw)
matrix sa_v = e(V_iw)
* Callaway-Sant'Anna
csdid Y, ivar(i) time(t) gvar(gvar) notyet
estat event, estore(cs)
* de Chaisemartin & D'Haultfoeuille
did_multiplegt Y i t D, robust_dynamic dynamic(5) placebo(5) breps(100) cluster(i)
* Borusyak-Jaravel-Spiess
did_imputation Y i t Ei, allhorizons pretrend(5)
* 一键出图
event_plot btrue# bjs dcdh_b#dcdh_v cs sa_b#sa_v ols, ///
stub_lag(tau# tau# Effect_# T+# L#event L#event) ///
stub_lead(pre# pre# Placebo_# T-# F#event F#event) together许多经济变量天然具有自相关
Y_{it} = \rho Y_{i, t-1} + X_{it}^\prime \alpha + \lambda_t + \mu_i + \varepsilon_{it}
三种尺度的处理效应
Ashenfelter (1978)
职业培训参与者在培训前收入就出现下降。这个“坑”是触发培训决定的冲击(失业、家庭变故)留下的痕迹。
直接比较培训前后会把这个 dip 误读为培训带来的显著正效应。
修正后的平行趋势
E[Y_{it}(0) - Y_{i,t-1}(0) \mid D_{it}, \{Y_{i,t-\ell}\}_{\ell=1}^L, \boldsymbol{X}_{it}] = E[Y_{it}(0) - Y_{i,t-1}(0) \mid \{Y_{i,t-\ell}\}_{\ell=1}^L, \boldsymbol{X}_{it}]
只有在控制了 L 期滞后 Y 之后,平行趋势才能站得住脚。
\begin{array}{c|cccc|l} & t=1 & t=2 & t=3 & t=4 & \text{类型} \\ \hline i=1 & 0 & 1 & 1 & 1 & \text{稳定处理} \\ i=2 & 0 & 1 & 0 & 1 & \text{不稳定 I} \\ i=3 & 0 & 1 & 1 & 0 & \text{不稳定 II} \\ i=4 & 0 & 0 & 1 & 0 & \text{不稳定 III} \\ i=5 & 0 & 0 & 0 & 0 & \text{从未处理} \end{array}
三种处理方式
L-period 历史条件下的效应
ATT(F, L) = E[Y^{01}_{it+F}(L) - Y^{00}_{it+F}(L) \mid D_{it} = 1, D_{i,t-1} = 0] ART(F, L) = E[Y^{10}_{it+F}(L) - Y^{11}_{it+F}(L) \mid D_{it} = 0, D_{i,t-1} = 1]
提示
F 与 L 的选择权衡
| 参数 | 大值的好处 | 大值的代价 |
|---|---|---|
| L | 更可信的历史条件 | 匹配样本缩小 |
| F | 长期效应 | 单位可能切换状态 |
匹配集合
\mathcal{M}_{it}^{ATT} = \{(m, t) \mid m \neq i,\ D_{mt} = 0,\ (D_{m, t-\ell})_{\ell=1}^L = (D_{i, t-\ell})_{\ell=1}^L\}
同样的历史路径、相同的当期处理变动的单位进入匹配集合。
估计量
\widehat{ATT(F, L)} = \frac{1}{\sum G_{it}} \sum_{i, t} G_{it} \left[Y^{01}_{it+F} - Y^0_{it-1} - \sum_{m \in \mathcal{M}_{it}} w_{it}^m (Y_{m, t+F} - Y_{m, t-1})\right]
横轴是时间:每个处理单位寻找过去 L 期处理路径相同、当期刚切换的对照单位,然后比较 F 期后的结果。
Chen (2023) 动态处理下的生产率估计

示例:绿色 vs. 污染技术的独立生产率过程

时点:m_{it} 是静态选择,(k_{it}, l_{it}, D_{it}) 是动态选择
层层递进的应对
不该做的事
Roth, Sant’Anna, Bilinski & Poe (JoE 2023):一份写在论文审稿评论里的“必做清单”。
Stata:csdid、eventstudyinteract、did_multiplegt、did_imputation、sdid、bacondecomp、honestdid R:did、fixest(sunab()、i())、synthdid、DIDmultiplegt、didimputation、HonestDiD
sdid / synthdid 正在成为默认方法第 5 周:因果机器学习
doubleml / econml / grf核心思想
当控制变量数量与样本量可比(甚至更大)时,传统线性回归会失效。ML 提供预测能力——但预测 ≠ 因果。DML 通过正交化让两者结合。