使用 1:5 比率在 R 中使用 Matchit 仅获取完全匹配的案例

Get only the fully matched cases using Matchit in R using 1:5 ratio

我用 1:5 比率匹配了我的两个组,并注意到我的两个结果组没有 1:5 比率,类似于这里发布的这个问题:

我进行了这样的匹配:

    match_out <- matchit(as.formula(paste0("treat~",covar)),
                      data = data, replace = FALSE,
                      caliper = .2, ratio = 5, method = "nearest") 

我的输出如下所示:

> match_out 

Call: 
matchit(formula = as.formula(paste0("treat~", covar)), data = data, 
    method = "nearest", replace = FALSE, caliper = 0.2, ratio = 5)

Sample sizes:
          Control Treated
All          7594      13
Matched        42      10
Unmatched    7552       3
Discarded       0       0


> match_out$match.matrix
     1      2      3      4      5     
14   "3891" NA     NA     NA     NA    
300  "5160" "2282" "2634" "6349" NA    
578  "5343" "5486" "4433" "2026" "249" 
997  "1121" "3928" "6464" "5015" "1863"
1534 NA     NA     NA     NA     NA    
1787 "7517" "7053" "5187" "4157" "919" 
4016 "525"  "5514" NA     NA     NA    
4082 "5548" "2951" "7282" "3378" "2642"
4894 "1009" "6386" "946"  "1819" "1727"
5812 NA     NA     NA     NA     NA    
5954 "7298" "6898" "1503" "7004" "7110"
6825 NA     NA     NA     NA     NA    
7389 "4286" "3044" "985"  "1471" "3591"

据我正确理解,我的输出现在包含至少匹配一个的所有情况。

现在我想知道,是否有一种(简单的)方法可以只获得那些完全匹配每 1 个处理的 5 个控件(在我的情况下是 7 个)的控件。

只是回答我自己的问题:您似乎可以通过向函数添加 method = "optimal" 来强制进行完整的 1:5 匹配。 在这里阅读更多:https://cran.r-project.org/web/packages/MatchIt/vignettes/matching-methods.html#optimal-pair-matching-method-optimal

然而这会降低匹配的成功率。谁知道从原始输出中仅选择那些 1:5 个案例的方法?

编辑:正如 Noah 指出的那样,可以强制进行 1:5 匹配,但这会忽略卡尺。请参阅此处的文档:https://rdrr.io/cran/MatchIt/man/method_optimal.html 我认为它有点隐藏,但您可以在 header“参数”下看到它说:“参数 replace、caliper 和 m.order 被忽略并发出警告。”

要限制只有恰好有 5 个匹配项的单位,您可以在 match.matrix 输出上只 运行 na.omit()。这将生成一个矩阵,其中仅包含具有所有 5 个匹配项的处理单元和控制单元。从那里您可以对 match.data() 输出进行子集化以获得您需要的输出,例如

m_data <- match.data(match_out, data = data)

mm <- na.omit(match_out$match.matrix)

m_data <- m_data[rownames(m_data) %in% rownames(mm) |
                   rownames(m_data) %in% mm,]

然后您可以 运行 在 m_data 中估算您的效果。请注意,您提出的建议不是一个好主意;您正在不必要地丢弃没有明显好处的单位。