r - MatchIT 函数返回相等的连续变量但不相等的分类变量
问题描述
我使用 MatchIt 函数得出一个 1:4 比例的已处理:未处理数据集,试图达到相似的平均年龄和性别频率。
我有一个小的治疗组(n = 44)和一个更大的对照组(n = 980)。为了减少对照组的数量并排除年龄和性别作为混杂因素,我尝试使用 MatchIt 函数创建一个 176 人的对照组,其平均年龄和性别平衡与治疗组相似。
m.out <- matchit(Treated ~ AGE + SEX, data = d,
method = "optimal",
ratio = 4)
输出总结如下:
Summary of balance for matched data:
Means Treated Means Control SD Control Mean Diff eQQ Med
distance 0.0602 0.0603 0.0250 -0.0001 0
AGE 57.5227 58.4034 7.9385 -0.8807 1
SEXF 0.4318 0.1477 0.3558 0.2841 0
SEXM 0.5682 0.8523 0.3558 -0.2841 0
年龄变量效果很好 - 它没有显着差异,但性别似乎有所不同(对照组为 85% 男性,治疗组为 57%),因此我对治疗后的性别数据进行了卡方检验。它在性别上表现出非常显着的差异:
chisq <- with(m.data, chisq.test(SEX, Treated))
data: SEX and Treated
X-squared = 15.758, df = 1, p-value = 7.199e-05
我如何解释这里的差异?我的 MatchIT 函数有问题(方法不正确?)还是它有效但我已将卡方应用于不正确的问题?
解决方案
在这种情况下,倾向得分匹配不起作用的原因有很多。一般来说,不能保证在小样本中平衡协变量;倾向得分的理论特性适用于大样本并且倾向得分正确(而你的倾向得分几乎肯定不正确)。
一些更具体的原因可能是在进行 4:1 匹配时,许多远离处理单元的控制单元与您处理的单元匹配。您可以通过更改比率来查看匹配较少的控制单元是否可以解决此问题。可能是最优匹配不是一个好的匹配方法。最佳匹配根据倾向得分找到最佳配对,但您希望在协变量上保持平衡,而不是倾向得分。您可以尝试基因匹配(即使用method = "genetic"
),尽管这也可能会失败(就像在图钉上使用锤子一样)。
一种建议是使用该designmatch
包执行基数匹配,它允许您施加平衡约束并执行匹配,而无需估计倾向得分。但是,只有两个协变量,性别的精确匹配和年龄的最近邻匹配应该做得相当好。设置exact = d$gender
并查看是否效果更好distance = d$age
。matchit()
对于这个问题,您不需要倾向得分。
最后,不要使用假设检验来评估平衡。平衡输出就足够了。在您的平衡无法再改善之前,不要停止尝试寻找合适的匹配项。有关这方面的更多信息,请参见 Ho、Imai、King 和 Stuart (2007)。他们也是作者MatchIt
。
Ho, DE, Imai, K., King, G. 和 Stuart, EA (2007)。匹配作为非参数预处理以减少参数因果推理中的模型依赖性。政治分析,15(3),199-236。https://doi.org/10.1093/pan/mpl013
推荐阅读
- python - django storages - 在数据库中保存绝对路径?
- python - 如何通过将列表传递给请求抓取每个请求的链接来抓取网站
- python - 如何根据时间条件进行 cumsum - 重新采样熊猫?
- html - 该代码显示一个列表中的对象,但不显示另一个列表中的对象
- reactjs - react如何在同一个应用程序中实现单页和多页路由的组合
- elasticsearch - 如何在 elasticsearch 7.3.1 中安装 Marvel 插件?
- hana - 如何将 HANA 视图定义从测试环境移动到生产环境
- java - 为 spring 云配置服务器创建 docker 文件
- pyspark - 带有pycharm的Linux上的PySpark-第一个异常错误
- jquery - 如何使用标题复选框选中和取消选中所有复选框?