我想在考虑时间间隔的同时执行案例对照匹配。如果控制观测值对自变量X1,X2具有相同的值,并且时间间隔X3与情况重叠,则需要匹配。
例如,假设以下df1:
Y X1 X2 X3
1 44 1978 2017-01-01 UTC--2019-01-01 UTC
0 44 1978 2014-01-01 UTC--2015-01-01 UTC
0 44 1978 2018-01-01 UTC--2020-01-01 UTC
0 45 1978 2018-01-01 UTC--2020-01-01 UTC
使用以下代码创建:
library(lubridate)
library(MatchIt)
df1 <- data.frame(Y=c(1, 0, 0, 0), X1=c(44, 44, 44, 45),
X2=c(1978, 1978, 1978, 1978),
X3=c(interval(ymd(20170101), ymd(20190101)),
interval(ymd(20140101), ymd(20150101)),
interval(ymd(20180101), ymd(20200101)),
interval(ymd(20180101), ymd(20200101))))
matchit(Y ~ X1 + X2 + X3, data=df1, method="exact")
#Error in weights.subclass(psclass, treat) : No units were matched
我想要第一行和第三行之间的匹配。
有可能吗?
您可以使用intersect
创建带有间隔重叠的新列X3i
,并使用它。
df1$X3i <- intersect(df1$X3, df1$X3)
m <- matchit(Y ~ X1 + X2 + X3i, data=df1, method="exact")
m
# Call:
# matchit(formula = Y ~ X1 + X2 + X3i, data = df1, method = "exact")
#
# Exact Subclasses: 1
#
# Sample sizes:
# Control Treated
# All 3 1
# Matched 2 1
# Unmatched 1 0
检查:
m$subclass
# 1 2 3 4
# 1 NA 1 NA