在 Stata 中使用倾向得分匹配法(Propensity Score Matching, PSM)进行因果推断时,平衡性检验(Balance Test)是关键步骤之一。若在运行平衡性检验时出现错误,可能是因为命令使用不当、数据格式问题或变量选择中的问题。以下是一些常见错误的原因及解决方案。
---
### **1. 常见的平衡性检验错误及解决方法**
倾向得分匹配常用的 Stata 包如 `teffects psmatch` 和 `psmatch2`,都支持平衡性检验,但也可能因数据或设置问题出现错误。以下描述了常见情况:
---
#### **
(1) 数据未正确匹配**
- **错误原因**:
- 如果运行平衡性检验时,数据中没有完成倾向得分匹配,或者匹配结果未正确保存,平衡性检验可能无法执行。
- 这是因为平衡性检验通常需要处理组和控制组的匹配后数据。
- **解决方法**:
- 确保在运行平衡性检验前,已完成倾向得分匹配。例如,使用 `psmatch2`:
```stata
psmatch2 treatment (y x1 x2 x3), logit kernel
```
其中:
- `treatment` 是处理组变量。
- `y` 是因变量。
- `x1 x2 x3` 是协变量。
- 然后,使用平衡性检验:
```stata
pstest
```
---
#### **
(2) 缺少 `pstest` 命令(未安装相关包)**
- **错误原因**:
- 如果您使用的是 `psmatch2` 命令,但未安装 `pstest` 命令,运行平衡性检验会报错。
- 一些平衡性检验功能需要额外的扩展包支持。
- **解决方法**:
- 安装必要的扩展包:
```stata
ssc install psmatch2
```
```stata
ssc install pstest
```
- 检查是否成功安装:
```stata
help pstest
```
---
#### **
(3) 协变量中存在问题**
- **错误原因**:
- 如果协变量中包含缺失值、分类变量未正确编码(如未转为虚拟变量),或者变量未标准化,可能会导致平衡性检验报错。
- 协变量的异常值也可能导致匹配结果偏差,从而引发平衡性检验问题。
- **解决方法**:
- 检查协变量格式:
```stata
summarize x1 x2 x3
```
- 确保协变量不存在缺失值。
- 如果是分类变量,使用 `tabulate` 检查分类类型,并转为虚拟变量(`
i.` 前缀可自动生成虚拟变量)。
- 处理缺失值:
```stata
replace x1 = . if x1 < 0 // 替换异常值为缺失值
drop if missing(x1, x2, x3) // 删除缺失值
```
- 如果变量量纲差异较大,可以对协变量进行标准化:
```stata
gen z_x1 = (x1 - r(mean))/r(sd)
```
---
#### **
(4) 使用了不支持平衡性检验的命令**
- **错误原因**:
- 某些命令如 `teffects` 不直接提供平衡性检验功能,而是侧重于倾向得分匹配的因果效应估计。如果您误以为它可以直接进行平衡性检验,可能会报错。
- **解决方法**:
- 如果使用 `teffects`,需要结合其它方法进行平衡性检验。例如,先匹配数据,再使用 `pstest`:
```stata
teffects psmatch (y) (treatment x1 x2 x3), atet
pstest
```
- 或者切换到 `psmatch2`:
```stata
psmatch2 treatment (x1 x2 x3), logit neighbor
(1)
pstest
```
---
#### **
(5) 变量选择不当**
- **错误原因**:
- 倾向得分匹配中,协变量的选择至关重要。如果选择了与处理无关或低相关性的变量,可能导致倾向得分估计不稳定,从而影响平衡性检验。
- 如果匹配后处理组和控制组的协变量分布仍然显著不同,则平衡性检验可能会失败。
- **解决方法**:
- 检查协变量是否显著相关:
```stata
logit treatment x1 x2 x3
```
- 查看协变量的显著性(`p-value`)。
- 删除不显著的协变量,重新进行倾向得分估计。
---
#### **
(6) 匹配后样本量不足**
- **错误原因**:
- 如果匹配后处理组和控制组的样本量太小(例如,匹配后丢失了大部分样本),可能会导致平衡性检验无法运行或结果无效。
- 样本量不足还可能导致协变量平衡失败。
- **解决方法**:
- 检查匹配后样本数量:
```stata
summarize _pscore
summarize if _weight > 0 // 检查匹配后非零权重的样本数
```
- 尝试放宽匹配条件,例如增加匹配的邻居数量(`neighbor(#)`)或使用较宽的卡尺(`caliper(#)`):
```stata
psmatch2 treatment (x1 x2 x3), caliper(0.
2) neighbor
(5)
```
---
### **2. 平衡性检验的关键命令**
以下是 Stata 中常用的倾向得分匹配和平衡性检验步骤:
#### **
(1) 使用 `psmatch2` 完成匹配**
安装 `psmatch2`:
```stata
ssc install psmatch2
```
执行匹配:
```stata
psmatch2 treatment (x1 x2 x3), logit neighbor
(1) caliper(0.2)
```
#### **
(2) 检查匹配结果**
运行平衡性检验:
```stata
pstest
```
典型输出包括:
- **协变量的标准化差异**:匹配前后各协变量的标准化均值差值。如果差值接近 0,则表示协变量匹配良好。
- **t 检验结果**:匹配后处理组和控制组的协变量差异是否显著(目标是 p-value > 0.05)。
#### **
(3) 可视化平衡性**
为了更直观地检查匹配的效果,可以绘制平衡性图:
```stata
pstest, graph
```
---


雷达卡


京公网安备 11010802022788号







