实证方法教程 / sdid

Synthetic DID

把处理组、对照组和政策时点落到代码里

这节课解决什么适合政策评估、处理组/对照组和处理时间明确的准实验问题。
先准备哪些变量因变量 / 个体 ID / 时间变量
会看到哪张表sdid_results.csv
论文里怎么克制解释报告处理组定义、对照组来源、样本窗口和识别假设。

Synthetic DID是什么?

Synthetic DID 问的是能否同时利用合成控制的加权思想和 DID 的差分思想。它用单位权重构造更可比的对照组,也用时间权重强调更可比的政策前时期。

先用一句话理解

把 Synthetic DID 想成先找相似对照,再找更有参考价值的政策前时间段,最后再做处理前后差分。它不是普通 DID,也不是单纯合成控制。

什么时候用

判断项教科书式判断
适合用在面板政策评估中处理组和对照组政策前水平或趋势不完全可比。
先不要用在政策前时期太短,或没有足够 untreated 单位构造权重。
最关键的前提加权后的处理组和对照组在政策前应更接近。
读表顺序先看权重和政策前拟合,再看 SDID 估计量和不确定性。
论文表述边界SDID 是加权 DID,不应写成普通 TWFE 系数。

把它和相近方法分清楚

容易混淆的对象怎么区分初学者记法
DID通常等权比较处理组和对照组。依赖平行趋势。
合成控制为处理单位构造 donor 权重。常用于少数处理单位。
Synthetic DID同时使用单位权重和时间权重。让 DID 比较更接近。

核心直觉和模型公式

单位权重和时间权重

Synthetic DID 的估计量可理解为加权后的差分:

\[\hat{\tau}_{SDID}=\sum_{i,t}w_i\lambda_t\left(Y_{it}-\widehat{Y}_{it}(0)\right)\]

w_i 是单位权重,λ_t 是时间权重;两类权重共同决定反事实比较。

公式里的符号怎么读

符号含义在本页怎么理解
w_i单位权重让对照单位组合更像处理组。
λ_t时间权重强调更能预测政策后的政策前时期。
Y_it观察结果单位 i 在时间 t 的结果。
Y_hat_it(0)未处理反事实加权结构下的未处理预测。
τ_SDIDSynthetic DID 效应加权 DID 的平均处理效应。

专业使用口径

专业 SDID 报告要讲清权重和政策前平衡,而不是只报一个处理效应。

口径专业写法
单位权重报告 donor 权重是否过度集中。
时间权重说明哪些政策前时期更重要。
预处理拟合展示加权后政策前趋势是否改善。
不确定性使用合适的 bootstrap 或随机化推断。

一步一步做:从问题到结果的五步

步骤这一页具体做什么做到什么程度才算读懂
1. 确定面板结构明确处理单位、对照单位和政策时间。没有政策前时期无法加权。
2. 估计单位权重让 untreated 组合接近 treated。权重集中要披露。
3. 估计时间权重强调更有预测力的政策前时期。时间过少会不稳定。
4. 计算 SDID 效应在加权结构下做差分。不是普通 TWFE。
5. 做敏感性检查权重、窗口和不确定性。单一结果不够。

结果怎么读:先读口径,再读数字

本页案例读表时,先记住这个口径:本案例的 ATT / DID 系数是 -0.0338,p 值是 0.6629。

读表顺序本页怎么读不要这样读
先看权重是否由少数单位或时期支配。极端权重会让结论脆弱。
再看政策前拟合加权后处理组和对照组是否接近。拟合差时效应不可信。
然后看 τSDID 估计效应方向和量级。不要和 TWFE 直接混写。
最后看不确定性置信区间或 placebo 是否支持。只看点估计不够。

初学者最容易错在哪里

误读为什么错
把 SDID 写成普通 DID错。它是加权 DID。
不报告权重不够。权重决定反事实。
政策前时期太短仍硬做风险很高。时间权重不稳定。
忽略拟合质量错。政策前拟合是可信度核心。

先看这个案例的结论

  • 本案例的 ATT / DID 系数是 -0.0338,p 值是 0.6629。
  • 2017 年政策前组间 gap 是 0.0824,2020 年政策后 gap 是 0.0425。
  • 政策评估页必须把处理组定义、政策前差距和处理效应放在一起读,不能只截一行交互项。

变量要求和案例口径

字段口径
数据CSMAR 风格 A 股企业创新面板
原始样本196 家上市公司,2015-2020 年,约 1200 个公司-年观测;各方法有效样本以本页输出表 N 为准
因变量patent_count;回归页通常使用 ln(1 + patent_count)
核心解释变量dfi_index,数字普惠金融指数;部分案例输出展示的是标准化后的 dfi_index
控制变量roa、lev、size、growth、cashflow、tobinq、top1、dual、board、indep、soe、age
输出文件sdid_results.csv
角色要求因变量、个体 ID、时间变量
依赖包sdid

实际代码

下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。

import delimited "$DATA_PATH", clear varnames(1) encoding(UTF-8)
gen ln_patent1 = ln(1 + patent_count)
egen firm_id = group(stkcd)
xtset firm_id year

global y ln_patent1
global count_y patent_count
global x dfi_index
global controls roa lev size growth cashflow tobinq top1 dual board indep soe age
gen post = year >= 2018
bysort firm_id: egen pre_dfi = mean(cond(year < 2018, dfi_index, .))
quietly summarize pre_dfi, detail
gen treat = pre_dfi >= r(p50)
gen did = treat * post
gen high_patent = patent_count > 2
gen running_dfi = dfi_index - 260
gen rdd_treat = running_dfi >= 0

sdid $y firm_id year treat, vce(placebo) reps(100)
export delimited using "$JOB_DIR/sdid_results.csv", replace

实际输出表

这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。

指标数值解释
样本1200 obs / 196 firms / 2015-2020来自共用案例 CSV
因变量ln(1 + patent_count)企业创新产出
核心解释变量dfi_index数字普惠金融指数
输出文件sdid_results.csvempirical-wizard 对应方法产物
ATT / DID 系数-0.0338Synthetic DID 在共用案例里的处理效应读数
p 值0.6629用于判断处理效应是否稳定
2017 组间 gap0.0824政策前一年 treated-control 差距
2020 组间 gap0.0425政策后三年 treated-control 差距

案例图

这是一张由同一份案例数据生成的页面内诊断图。

Synthetic DID 的共用案例输出图。
Synthetic DID 的共用案例输出图。

论文里怎么写

本文进一步采用Synthetic DID检验数字普惠金融变化对企业创新的影响。处理组、对照组和政策后变量均基于同一 firm-year 样本构造,结果报告在 sdid_results.csv 中。若处理效应方向与基准回归一致,可作为政策评估维度的补充证据;若不一致,应优先解释识别假设和样本切分差异。

检查清单

  • 先确认处理单位和处理时间清楚,Synthetic DID 需要可比的对照路径。
  • 同时查看单位权重和时间权重,避免少数对照或少数时期主导结果。
  • 政策前拟合质量不足时,不要强解释政策后差异。

返回教程库 · 查看共用案例