病例对照研究 "exact" 与重叠时间间隔匹配

Case-control study "exact" match with overlapping time intervals

我想在考虑时间间隔的情况下进行病例对照匹配。 如果对照观察对于独立变量 X1、X2 和重叠时间间隔 X3 具有相同的值,我想要一个匹配项。

例如,假设以下 df1:

row Y   X1   X2              X3
1   0   1   1   2017-01-06 UTC--2017-01-10 UTC
2   0   1   1   2017-01-07 UTC--2017-01-11 UTC
3   0   1   1   2017-01-08 UTC--2017-01-12 UTC
4   0   1   1   2017-01-09 UTC--2017-01-13 UTC
5   0   1   1   2017-01-10 UTC--2017-01-14 UTC
6   1   1   1   2017-01-11 UTC--2017-01-15 UTC
7   0   1   1   2017-01-12 UTC--2017-01-16 UTC
8   0   1   1   2017-01-13 UTC--2017-01-17 UTC
9   0   1   1   2017-01-14 UTC--2017-01-18 UTC
10  0   1   1   2017-01-15 UTC--2017-01-19 UTC
11  0   1   1   2017-01-16 UTC--2017-01-20 UTC

使用以下代码创建:

library(lubridate)
library(MatchIt)

df1 <- data.frame(Y=c(0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0),     
              X1=rep(1, 11), 
              X2=rep(1,11), 
              X3=c(interval(ymd(20170106), ymd(20170110)),
                   interval(ymd(20170107), ymd(20170111)), 
                   interval(ymd(20170108), ymd(20170112)), 
                   interval(ymd(20170109), ymd(20170113)), 
                   interval(ymd(20170110), ymd(20170114)),
                   interval(ymd(20170111), ymd(20170115)),
                   interval(ymd(20170112), ymd(20170116)),
                   interval(ymd(20170113), ymd(20170117)),
                   interval(ymd(20170114), ymd(20170118)),
                   interval(ymd(20170115), ymd(20170119)),
                   interval(ymd(20170116), ymd(20170120))))

matchit(Y ~ X1 + X2 + X3, data=df1, method="exact")

输出:

summary(matchit(Y ~ X1 + X2 + X3, data=df1, method="exact"))

 Sample sizes:
          Control Treated
All            10       1
Matched        10       1
Unmatched       0       0

match.data(matchit(Y ~ X1 + X2 + X3, data=df1, method="exact"))

row Y   X1   X2              X3              weights   subclass
1   0   1   1   2017-01-06 UTC--2017-01-10 UTC   1   1
2   0   1   1   2017-01-07 UTC--2017-01-11 UTC   1   1
3   0   1   1   2017-01-08 UTC--2017-01-12 UTC   1   1
4   0   1   1   2017-01-09 UTC--2017-01-13 UTC   1   1
5   0   1   1   2017-01-10 UTC--2017-01-14 UTC   1   1
6   1   1   1   2017-01-11 UTC--2017-01-15 UTC   1   1
7   0   1   1   2017-01-12 UTC--2017-01-16 UTC   1   1
8   0   1   1   2017-01-13 UTC--2017-01-17 UTC   1   1
9   0   1   1   2017-01-14 UTC--2017-01-18 UTC   1   1
10  0   1   1   2017-01-15 UTC--2017-01-19 UTC   1   1
11  0   1   1   2017-01-16 UTC--2017-01-20 UTC   1   1

我想要 6(案例)和 2,3,4,5,7,8,9,10(对照)之间的匹配项,如果任何对照时间间隔介于 2017 年 1 月 11 日和2017 年 1 月 15 日我想要与该控件匹配

您可以体会到有 1:10 匹配而不是 1:8 匹配

编辑:我更改了之前的 df 示例:https://pastebin.com/nwzpyUAr

EDIT2:会话信息:https://pastebin.com/g2Q1t1E0

我得出的结论是我可以匹配除 X3(时间间隔)以外的所有变量,然后我们可以 select 案例 time_Interval 并使用 int_overlaps 函数来自 lubridate 包

result <- match.data(matchit(Y ~ X1 + X2, data=df1, method="exact"))
case_timeInterval <- result[result$Y == 1,]$X3

result <- result %>%
  filter(ifelse(int_overlaps(X3, case_timeInterval), 1, 0) == 1)