本人在进行病例对照匹配,想要匹配比是1:2,匹配条件是年龄±3岁,孕周±3周,我之前用的R语言代码是MatchIt代码,代码如下。这个代码有两个问题,一个是匹配方法”method“中没有范围的选项,只能按照”nearest“或者”exact“等去匹配,不能按照范围匹配,另一个问题是,匹配出来的对照不仅有1:2,还有1:1,1:3等,怎么解决这两个问题呢
install.packages("optmatch")
library(MatchIt)
data<- read.csv("MatchIt.csv")
names(data)
matchlist <- matchit(抑郁分类 ~ age+Gestationalweek, data=data,
method = "nearest",
distance = "glm", #
caliper = 0.05, #卡钳值
ratio = 2, #1:N匹配
replace = F) #不替换
help("distance")
summary(matchlist)
#提取匹配后的病例对照
matchdata<- match.data(matchlist,
group = "all",
distance = "distance",
weights = "weights",
subclass = "subclass",
data = NULL,
include.s.weights = TRUE,
drop.unmatched =TRUE)
table(duplicated(matchdata$id))
table(matchdata$Group) #匹配后
table(data$Group) #匹配前
排序配对子
matchdata$subclass<-sort(matchdata$subclass)
#查看配对子情况,有的病例只有一个对照
a=table(matchdata$subclass);table(a)
match2data <- data.frame()
for (i in seq_along(table(matchdata$subclass))){
if(table(matchdata$subclass)[i]==2){
match2data[i,1]=i}}
write.csv(matchdata, file = "matchnew1.csv" , na = "NA")