Skip to content

PSM-DID 教程

DID 诊断

先做倾向得分匹配,再比较政策前后的组间变化。

常用 Stata 命令psmatch2 treat x1 x2 x3, outcome(y) neighbor(1) reghdfe y did controls, absorb(id year) cluster(id)
在 STATAU 中打开此功能
PSM-DID倾向得分匹配匹配后 DID

这个页面解决什么问题

PSM-DID 适合在处理组和对照组基础差异较大时先做样本匹配,再进入 DID 比较。你可以把它理解成“先尽量找相似样本,再比较政策前后变化”。

适用数据与前提

需要处理组变量、结果变量,以及一组用于匹配的协变量。

STATAU 页面中每个位置应该放什么变量

网站位置应放入的变量说明
处理组变量是否进入处理组的标识决定谁需要被匹配。
结果变量政策影响结果变量用于后续 DID 比较。
匹配协变量匹配前特征变量集合用于让处理组和对照组在政策前尽量相似。
匹配方法与口径最近邻 / 半径 / 核 / 卡尺等决定样本如何被匹配。

Stata 等效代码

psmatch2 [处理组变量] [匹配协变量], outcome([结果变量]) neighbor(1)
reghdfe [结果变量] [DID变量] [控制变量], absorb([个体固定效应] [时间固定效应]) cluster([聚类变量])
Stata 代码位置STATAU 网站对应位置应放入什么
[处理组变量]处理组变量决定倾向得分和匹配方向。
[匹配协变量]匹配协变量决定匹配前样本相似性的依据。
[结果变量]结果变量匹配后继续进入 DID 比较的核心指标。
可删除代码段提示
  • 如果你不需要卡尺或半径限制,相关匹配约束参数可以先留空。
  • 如果只是想先看匹配平衡改善,不必一开始就把所有 DID 展示项全部打开。

网页选项如何对应 psmatch2

下面这张表只对应 PSM 配置区本身。匹配后的固定效应、聚类标准误和回归控制变量,属于后续回归部分,不属于 psmatch2 本身。

STATAU 页面选项psmatch2 对应写法说明
处理组变量(treat)psmatch2 treat ... 里的第一个处理变量例如 Treattreatedpolicy_group
匹配协变量psmatch2 treat x1 x2 x3 ... 里的协变量列表这里放的是用于估计倾向得分并做匹配的变量,不一定等于后续回归控制变量。
结果变量outcome(y)out(y)对应匹配效果摘要里计算 ATT / ATE 的结果变量。
匹配效应口径:ATT默认不写 atepsmatch2 默认就是 ATT。
匹配效应口径:ATEate例如 psmatch2 ..., ate
倾向得分模型:Logitlogit若不写 logitpsmatch2 默认走 Probit。
倾向得分模型:Probit默认不写 logit页面里显式选 Probit 时,对应 Stata 默认写法。
匹配尺度:概率值默认不写直接用预测概率 _pscore 做匹配。
匹配尺度:对数优势比oddsln(p / (1-p)) 匹配。
匹配尺度:线性预测值index按 Logit / Probit 的线性预测值匹配。
匹配方法:最近邻匹配默认最近邻,再配 neighbor(#)例如 neighbor(1)neighbor(3)
匹配方法:卡尺匹配最近邻 + caliper(#)例如 neighbor(1) caliper(0.05)。如果 Stata 代码里同时有 neighbor()caliper(),页面里应选“卡尺匹配”,不是“最近邻匹配”。
匹配方法:半径匹配radius caliper(#)这里的 caliper(#) 就是半径窗口。
匹配方法:核匹配kernel kerneltype(...) bwidth(#)例如 kernel kerneltype(epan) bwidth(0.06)
匹配方法:局部线性回归匹配llr kerneltype(...) bwidth(#)例如 llr kerneltype(epan) bwidth(0.06)
匹配比例neighbor(#)n(#)例如 1:1 对应 neighbor(1)1:3 对应 neighbor(3)
Caliper / 半径caliper(#)对卡尺匹配是卡尺限制;对半径匹配是半径窗口。
核函数kerneltype(epan)kerneltype(normal)用于核匹配和局部线性回归匹配。
带宽bwidth(#)用于核匹配和局部线性回归匹配。
有放回匹配:勾选默认不写 noreplacementpsmatch2 最近邻默认允许有放回。
有放回匹配:不勾选noreplacement表示控制组样本匹配一次后不再重复使用。
共同支撑域:勾选common只保留共同支撑域内样本。
共同支撑域:不勾选默认不写 common不强制做共同支撑域筛选。
并列最近邻:勾选ties若多个候选样本距离完全相同,一并纳入。
并列最近邻:不勾选默认不写 ties只保留单个最近邻。

最容易选错的一种情况

如果你的 Stata 代码是:

stata
psmatch2 treat x1 x2 x3, outcome(y) neighbor(1) caliper(0.05) noreplacement logit

那么在 STATAU 页面里应当这样选:

  • 匹配效应口径:ATT
  • 倾向得分模型:Logit
  • 匹配尺度:概率值
  • 匹配方法:卡尺匹配
  • 匹配比例:1:1
  • Caliper / 半径:0.05
  • 有放回匹配:不勾选
  • 共同支撑域:不勾选
  • 并列最近邻:不勾选

注意:这类命令虽然写了 neighbor(1),但因为同时写了 caliper(0.05),页面里应对应到“卡尺匹配”。

在 STATAU 中操作步骤

  1. 先选择处理组变量和匹配协变量。
  2. 再决定匹配方法和口径,完成后再看 DID 结果。

结果怎么看

  • 先看匹配前后样本平衡是否改善,再看 DID 系数。
  • 如果匹配后平衡性仍很差,PSM-DID 的说服力会明显下降。
论文表述示例
  • 可以写成:“在倾向得分匹配后,处理组与对照组样本可比性提高,随后基于匹配样本实施 DID 估计。”

常见使用误区

  • 匹配并不会自动解决所有识别问题,关键还是看匹配协变量是否选得合理。
  • 如果匹配后样本流失太多,要同时报告保留下来的样本规模和代表性变化。

相关页面