【发布时间】:2021-02-08 17:55:12
【问题描述】:
我想使用MatchIt 包来匹配多站点数据集中的患者组和对照组。对于匹配,应同时使用性别和年龄,并且匹配过程应不替换。基本原理应该是遍历每个站点,进行每个站点内的匹配,然后将匹配的数据帧连接起来以获得具有匹配样本的多站点数据帧。
这就是我的数据集的样子(只有前七行可以让您快速直观):
> multi_site_df
age site group group_boolean sex_boolean
1 53 site_B patient 1 0
2 30 site_B patient 1 0
3 27 site_B control 0 0
4 32 site_B patient 1 1
5 63 site_B control 0 0
6 34 site_B control 0 0
7 34 site_B patient 1 0
...
关于这个多站点数据集的一件事是,在某些站点中,患者的数量比对照多,而在其他站点中,情况正好相反:
site group n
1 site_A control 44
2 site_A patient 44
3 site_B control 100
4 site_B patient 79
5 site_C control 26
6 site_C patient 32
7 site_D control 25
8 site_D patient 33
我开始为多站点数据集的每个子集编写一些使用MatchIt 的代码:
# get unique sites
sites <- unique(multi_site_df$site)
# iterate over sites and do the matching for each site
for (site in sites) {
site_df <- multi_site_df[which(multi_site_df$site == site),]
m.out <- matchit(formula=as.formula('group_boolean ~ sex_boolean + age'),
data=site_df,
method='nearest')
m.out
site_df_matched <- get_matches(m.out,site_df)
}
但它给了我这个错误:
Warnmeldungen: 1: 在 matchit2nearest(c(
180= 0L,181= 1L,182= 0L,183= 1L, : 控制少于处理单元和匹配 无需更换。并非所有处理过的单位都会收到匹配。 处理后的单位将按照 m.order 指定的顺序进行匹配: 最大 2:在 matchit2nearest(c(238= 0L,239= 0L,240= 0L,241= 0L, : 控制比处理单元少,匹配没有 替换。并非所有处理过的单位都会收到匹配。处理过的 单位将按照 m.order: 最大的顺序匹配
此警告会导致匹配的数据帧仅包含 NA 值。这似乎与this StackOverflow post 以及某些站点包含的患者多于对照这一事实有关,反之亦然。除了为每个站点创建一个新的结果变量notY 之外,还有什么解决方法吗?对我来说,是否丢弃患者或对照并不重要。逻辑是:'从多数组中为少数组中的每个单元找到最佳匹配,并丢弃所有剩余单元"
【问题讨论】:
标签: r matching propensity-score-matching