【问题标题】:Use MatchIt for multi-site data set does not work对多站点数据集使用 MatchIt 不起作用
【发布时间】: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


    【解决方案1】:

    任何解决方法都比创建新的处理变量更复杂。您可以编写足够简单的代码来检查每个站点中控制单元或处理单元是否更丰富,并基于此切换处理变量的值,然后正常运行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() 在您给予它较少的控制权时会失败,因为当焦点组发生变化时,估计效果的含义会完全改变。当前的行为迫使用户考虑他们是否做出了正确的选择。

    另外,我希望您知道您匹配的不是性别和年龄,而是使用性别和年龄组的逻辑回归估计的倾向得分。成对的单位在性别和年龄上实际上可能并不接近。

    【讨论】:

    • 另外,我希望你知道你不是在性别和年龄上匹配,而是在使用性别和年龄组的逻辑回归估计的倾向得分上。成对的单位在性别和年龄上实际上可能并不接近。 感谢您对此的关注。我确实想要在性别和年龄上接近的配对单元(即,对于少数群体中的每个单元,在多数群体中找到一个在年龄和性别方面最接近的对应单元)。我必须做什么才能实现这一目标?
    • 设置distance = "mahalanobis"做马氏距离匹配,根据马氏距离对单位进行配对,与欧几里得距离有关。它往往会导致具有更相似协变量值的对。在MatchIt 4.0.0 中,您还可以将卡尺放在特定的协变量上,以确保成对的单位在这些协变量上接近。
    • 我不确定我是否可以关注你。我做了什么根本错误的事情,还是你只是提出了一种替代和“更好”的方法?我认为使用我当前的代码,我只是根据最近的邻居 w.r. 匹配单位。倾向得分?
    • 我提出了一种替代方法,该方法更符合您在感兴趣的变量上创建对的目标。听起来您不需要倾向得分匹配,但您编写的代码执行倾向得分匹配。
    • 这将导致组具有相似的协变量分布,但不是具有相似协变量值的对。有可能(并且很可能)两个具有相似倾向得分的单位在协变量上会有很大差异。有关这方面的信息,请参阅King & Nielsen (2019)(忽略论文的标题)。不要使用 t 检验来评估平衡。有关这方面的信息,请参阅Imai, King, & Stuart (2008)。使用标准化均值差和 KS 统计量。
    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多