导读:本期聚焦于向日葵创作的《如何使用Stata进行因果推断?倾向得分匹配PSM与双重差分DID方法详解》,敬请观看详情。因果推断是实证研究的核心难题,而Stata提供了两套被广泛使用的工具:倾向得分匹配PSM和双重差分DID。本文从选择偏差和遗漏变量这两个经典问题入手,先讲解PSM的基本原理与共同支撑域假设,演示psmatch2命令的完整操作流程,包括Logit估计、近邻匹配、卡尺匹配、平衡性检验与ATT结果解读;再介绍DID的平行趋势假设,通过diff命令和双向固定效应回归实现政策效应估计;最后讨论PSM-DID组合方法的适用场景,帮助你在面对 observational data时选出合适的因果识别策略,并正确报告估计结果。

因果推断是经济学、公共卫生、社会学等学科实证研究中最核心的问题。我们想知道的不是简单的相关性,而是“处理组如果没有接受处理,结果会怎样”——这个反事实问题无法被直接观测。Stata作为计量分析的主力工具,提供了成熟命令来应对这一问题。本文围绕两套最常用的识别策略:倾向得分匹配(PSM)和双重差分(DID),从原理、代码实现到结果解读进行详细讲解,最后说明二者如何组合使用。

如何使用Stata进行因果推断?倾向得分匹配PSM与双重差分DID方法详解

为什么需要因果推断:从选择偏差说起

假设我们想评估一项职业培训项目对收入的影响。最直接的做法是对比参加培训者和未参加者的平均收入,但这个比较是有偏的:参加培训的人往往本身就更积极、受教育程度更高,即使不参加培训,他们的收入也可能高于对照组。这就是典型的自选择偏差

另一个来源是混杂因素,即同时影响处理概率和结果变量的因素。比如年龄既影响一个人是否参保,也影响健康 outcomes。如果忽略这些因素,简单组间差异就无法解释为因果效应。

因果推断的核心思路就是构造一个可信的“反事实”。PSM通过匹配协变量相似但处理状态不同的个体来实现,DID则通过处理组与对照组前后变化量的差来消除不随时间变化的不可观测因素。两者的识别假设不同,适用场景也不同。

倾向得分匹配PSM:原理与Stata实现

基本原理与关键假设

Rosenbaum和Rubin在1983年提出,与其在高维协变量空间中匹配,不如先估计每个个体接受处理的概率,即倾向得分,然后在单一维度上匹配。PSM依赖两个关键假设:一是条件独立性(CIA),即给定协变量X,潜在结果与处理状态独立;二是共同支撑域,即处理组与对照组的倾向得分分布存在重叠区域。匹配后落在共同支撑域之外的样本会被剔除。

用psmatch2命令完成匹配

psmatch2是Stata中做PSM最常用的第三方命令,需要先用ssc install psmatch2安装。下面是一个完整的操作示例:

* 安装命令(只需一次)
ssc install psmatch2, replace

* 导入数据,d为处理变量(1=参加培训,0=未参加)
use training.dta, clear

* 第一步:用Logit估计倾向得分并做1:3近邻匹配
set seed 12345
psmatch2 d age edu gender exper, logit neighbor(3) ties common ate

* 第二步:平衡性检验,检查匹配后协变量是否平衡
pstest age edu gender exper, both graph

* 第三步:查看共同支撑域
psgraph

执行后Stata会输出多个结果表。重点关注三个部分:首先是Logit回归的系数,它揭示了哪些因素影响进入处理组的概率;其次是ATT(参与者平均处理效应)估计值及其标准误,这是核心结果;最后是pstest给出的平衡性检验,匹配后各协变量的标准化偏差(%bias)应降到10%以内,且t检验不能拒绝“均值相等”的原假设。

匹配方法的敏感性分析

近邻匹配对数据质量敏感,稳健的做法是尝试多种匹配方式并比较ATT是否稳定:

* 卡尺为0.05的卡尺匹配
psmatch2 d age edu gender exper, logit caliper(0.05)

* 核匹配
psmatch2 d age edu gender exper, logit kernel kerneltype(epan)

* 半径匹配
psmatch2 d age edu gender exper, logit radius caliper(0.01)

此外还建议用psmatch2自带的敏感性分析或Rosenbaum bound方法检验隐藏偏差的影响。如果未观测变量稍微变化就导致结论反转,说明结果稳健性不足,报告时必须说明这一局限。

双重差分DID:平行趋势与Stata实现

DID的识别逻辑

DID适用于有政策冲击的自然实验场景。其核心是平行趋势假设:在没有政策干预的情况下,处理组和对照组的结果变量会保持相同的变化趋势。政策效应由“处理组前后变化量减去对照组前后变化量”识别,这样所有不随时间变化的个体异质性(如能力、性格)都被差分消掉了。

DID的标准实现是双向固定效应回归,即在面板数据中加入个体固定效应、时间固定效应以及二者的交互项。需要注意的是,加入个体固定效应后,主效应项会被吸收,真正起作用的是政策虚拟变量与时期虚拟变量的交互项。

用diff命令和回归法估计

Stata自带的diff用户命令(需ssc install diff)适合重复截面数据,而面板数据更推荐双向固定效应回归:

* 方法一:diff命令,适合两期数据
ssc install diff, replace
* y为结果变量,t为政策实施后时期,treated为处理组标识
diff y, t(t) p(treated)

* 方法二:双向固定效应回归(面板数据)
xtset id year
gen did = treat * post
reghdfe y did controls, absorb(id year) vce(cluster id)

* 平行趋势检验:事件研究法
gen event = year - policy_year
forvalues k = 2/4 {
    gen pre_`k' = (event == -`k')
}
gen current = (event == 0)
forvalues k = 1/3 {
    gen post_`k' = (event == `k')
}
* 以政策前一期为基准组,绘制动态效应图
reghdfe y pre_* current post_*, absorb(id year) vce(cluster id)
coefplot, keep(pre_* current post_*) vertical yline(0)

事件研究法(Event Study)是检验平行趋势的标准做法:如果政策前各期的系数都不显著异于零,说明两组在政策前没有系统性差异,平行趋势假设得到支持。政策后的系数则展示了效应的动态演变过程。reghdfe和coefplot都是第三方命令,分别用ssc install reghdfessc install coefplot安装。

PSM-DID组合:取长补短的实践方案

单独使用PSM要求“可观测协变量能解释所有选择”,DID要求“平行趋势”,两个假设都比较强。组合方法的基本思想是:先用PSM为处理组找到倾向得分相似的对照个体,剔除匹配不上的样本,再对保留下来的样本做DID回归。这样既缓解了可观测协变量的不平衡,又通过DID消除了不可观测的时间固定差异。

* 第一步:逐年估计倾向得分并匹配(以截面方式处理面板)
* 先将面板堆叠成宽格式或分年份匹配
bysort year: psmatch2 treat age edu gender, logit neighbor(1) common

* 保留匹配上的样本(_weight不为缺失即为匹配成功的对照)
keep if treat == 1 | _weight != .

* 第二步:对匹配样本做DID
xtset id year
gen did = treat * post
reghdfe y did x1 x2, absorb(id year) vce(cluster id)

组合方法的细节值得注意:倾向得分应分年份估计,避免政策本身污染得分;匹配时建议同时报告共同支撑域的样本损失比例;稳健性检验中可以更换匹配方式(近邻、核、卡尺)看did系数是否稳定。部分文献还采用逐年匹配加频率权重的方式,把psmatch2生成的_weight作为权重代入DID回归,这也是可行的替代方案。

方法选择与结果报告建议

选择哪种方法取决于数据结构和识别假设的可信度。如果是横截面数据且无法追踪个体,PSM是自然选择;如果有面板数据和政策冲击,DID通常更受审稿人认可;若担心可观测和不可观测因素同时存在,PSM-DID组合是最稳妥的方案。近年学界也在推广合成控制法、断点回归等工具,可结合处理变量的性质灵活选用。

结果报告方面有几条经验:PSM必须报告平衡性检验表和匹配前后偏差图;DID必须报告平行趋势检验图;无论哪种方法,都要做更换协变量集、更换样本区间、聚类标准误等多组稳健性检验。因果推断的说服力不在于某一个漂亮的系数,而在于识别假设是否可信、结论在多种检验下是否一致。把这套流程做扎实,你的实证部分才经得起推敲。

Stata倾向得分匹配双重差分修改时间:2026-09-05 10:30:40

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/50850.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。