将MatchIt用于多站点数据集不起作用

问题描述

我想使用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之外,还有其他解决方法吗?对我来说,如果丢弃患者或对照,那并不重要。逻辑将是:“从少数群体中的每个单元中找出多数群体中的最佳匹配,并丢弃所有剩余的单元”

解决方法

任何解决方法都比创建新的处理变量更复杂。您可以编写足够简单的代码来检查每个站点中控制单元或已处理单元是否更丰富,并基于此切换处理变量的值,然后照常运行MatchIt。这是您可能的方法:

if (sum(site_df$group_boolean == 1) > sum(site_df$group_boolean == 0) {
  site_df$group_boolean <- 1 - site_df$group_boolean
}

那很简单。请注意,在MatchIt 4.0.0(尚未在CRAN中使用)中,有一个新的estimand参数,您可以在"ATT"(默认)和"ATC"(即后者可根据需要在匹配中切换治疗组和对照组的角色。但是您仍然必须告诉matchit()您想要哪个,因此必须执行该检查。重要的是,matchit()失败时,其对处理单位的控制较少,因为当焦点组发生变化时,估计效果的含义会完全改变。当前的行为迫使用户考虑他们是否在做出正确的选择。

我也希望您知道您在性别和年龄上不匹配,而在对性别和年龄组进行逻辑回归的估计倾向得分上。配对的单位实际上在性别和年龄上可能并不彼此接近。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...