r - 在 PSM(R 的 Matchit 包)中使用卡尺会改变匹配并使平衡变得更糟,即使匹配处理的数量保持不变?
问题描述
我想出了这个问题的答案......请参阅我在下面发布的答案。
A) 我对卡尺功能的了解(如有错误请更正):
在使用 R 的 matchit 包进行匹配时添加一个卡尺(例如 caliper = 0.2),意味着仅在它们彼此相距 0.2 个标准差(在这种情况下为倾向得分)之内时才匹配一个对照组点和一个治疗组点。因此,在 0.2 sd 内没有对照组点的治疗组点将不匹配,因此被丢弃。这应该可以改善平衡(减少偏差),因为只有当它们彼此“足够相似”时,它才会产生匹配的控制和治疗。
B)我的主要问题:
那么,使用重采样(replace = TRUE)并使用最近邻方法,这是否意味着包括卡尺只能通过减少匹配的治疗组数量以及可能用于匹配的对照组点数来改变匹配?
即治疗组点与控制组点在 0.2 sd 内的匹配方式与没有卡尺的方式相同(假设种子是恒定的),通过匹配最近的邻居。那些在 0.2 sd 内没有对照组点的治疗组点将被丢弃。
在下面的例子中,这不是发生的事情,所以我很困惑。任何解释/纠正我对卡尺的理解将不胜感激!
C)我上面的问题的例子:
在以下示例中(代码取自https://sejdemyr.github.io/r-tutorials/statistics/tutorial8.html),我使用卡尺和不使用卡尺运行 PSM,两次我的所有治疗组点都匹配( 1352)。所以我希望这意味着卡尺没有效果(因为它没有阻止任何治疗组点匹配),因此匹配的对照组点应该是相同的。
但事实并非如此。没有卡尺,匹配的对照组点数 = 1164,使用卡尺,它增加到 1185,结果改变了我对治疗效果的估计。它似乎也使平衡变得更糟(从图片中可以看出,附加链接)。有人可以向我解释这是怎么发生的吗?
没有卡尺,我得到以下结果(Matched Control = 1164,Matched Treated 1352):
Call:
matchit(formula = catholic ~ race_white + w3income + p5hmage +
p5numpla + w3momed_hsb, data = ecls_nomiss, method = "nearest",
distance = "logit", replace = TRUE)
Sample sizes:
Control Treated
All 7915 1352
Matched 1164 1352
Unmatched 6751 0
Discarded 0 0
治疗效果(作为天主教徒),使用线性回归 = -0.176:
Call:
lm(formula = c5r2mtsc_std ~ catholic, data = dta_m)
Residuals:
Min 1Q Median 3Q Max
-3.4783 -0.5803 0.0647 0.5997 3.0473
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.38637 0.02677 14.432 < 2e-16 ***
catholic -0.17670 0.03652 -4.838 1.39e-06 ***
平衡(通过比较倾向得分的控制和治疗的每个协方差)似乎非常匹配:[1] https://i.stack.imgur.com/pyU6s.png
使用卡尺,我得到以下结果(匹配控制 = 1185,匹配处理 1352):
Call:
matchit(formula = catholic ~ race_white + w3income + p5hmage +
p5numpla + w3momed_hsb, data = ecls_nomiss, method = "nearest",
distance = "logit", replace = TRUE, caliper = 0.2)
Sample sizes:
Control Treated
All 7915 1352
Matched 1185 1352
Unmatched 6730 0
Discarded 0 0
治疗效果估计 = -0.1151,即减少:
Call:
lm(formula = c5r2mtsc_std ~ catholic, data = dta_m)
Residuals:
Min 1Q Median 3Q Max
-3.4167 -0.5649 0.0608 0.5947 3.1089
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.32477 0.02635 12.326 < 2e-16 ***
catholic -0.11510 0.03609 -3.189 0.00144 **
平衡(通过比较倾向得分的控制和治疗的每个协方差)似乎变得更糟,控制和治疗之间的匹配也变得更糟:[2]:https ://i.stack.imgur.com/Z9uLK.png
解决方案
刚刚检查了 R 文档 ---如果指定了卡尺,则随机选择卡尺内用于处理单元的控制单元作为该处理单元的匹配项。 所以这说明了一切,它随机选择匹配的控制单元。
当我设置 caliper = 0.0000001 时,平衡得到改善。原来 caliper = 0.2 对于我的数据集来说太大了。
推荐阅读
- laravel - 如何在laravel中将计划任务作业放入链中?
- javascript - 我无权访问数组,但需要删除逗号
- c# - 在 if 语句中使用字符串抛出错误“运算符'||' 不能应用于操作数字符串和字符串"
- python - Python:计算非线性拟合的置信区间
- python - 输入形状 Keras RNN
- django - 使用 Nginx 和 uWSGI 为 Google Cloud Run 定制 Dockerfile
- python - 使用 Flask 请求我的 API 时出现 SSLError
- linux - 创建一个空的 tar 文件,然后将其名称存储在变量中
- objective-c - AVAsset 它不适用于 HLS 流文件
- powershell - 如何在同一目录的 BAT 文件中运行 powershell