使用最近邻域方法与 R 中的权重进行倾向得分匹配

  • 本文关键字:权重 邻域 最近 方法 r
  • 更新时间 :
  • 英文 :


我正在使用我的一个变量作为加权因子(即权重(在 R 中执行倾向分数匹配。我想使用最近邻方法进行匹配。我的数据示例为:dput(dat2) structure(list(ID = c(1, 2, 3, 4, 6, 7), Weight = c(2.4740626, 2.4740626, 2.4740626, 2.4740626, 1.9548149, 1.9548149), Age = c("35-44", "<15-24", "25-34", "35-44", ">45", "25-34"), Treatment = c(1, 0, 0, 1, 0, 0), Outcome = c(1, 1, 1, 0, 1, 1)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame")))
我正在使用表一包来创建预匹配表。我的代码在这里:

`model1<-lm(formula = dat2$Outcome ~ dat2$Treatment + dat2$Age, 
data = dat2,weights = Weights)
model1
Effect<- model1$coeff[2]
Effect
pscores.model<-glm(dat2$Treatment ~ dat2$Age,
family = binomial("logit"), data = dat2, weights = dat2$Weights)
summary(pscores.model)
Propensity_scores<-pscores.model
dat2$Pscores_1<-pscores.model$fitted.values
require(tableone)
xvars<-c("Age")
table1<-svyCreateTableOne(vars = xvars, strata = "Treatment", data = dat2, test = FALSE)
print(table1,smd = TRUE)
require(MatchIt)
match2 <- matchit(pscores.model, method="nearest", radio=1,data=dat2)
match2
ATE_ATT_2.1<-ATE(Y = dat2$Outcome,
Ti = dat$Treatment,
X = dat$Age,
ATT = TRUE
)
ATE_ATT_2.1
ATE_ATT_2.2<-ATE(Y = dat$Outcome,
Ti = dat$Treatment,
X = dat$Age,
ATT = FALSE
)
ATE_ATT_2.2
match2.data <- match.data(match2)
#Create the tableone for nearest matching
table_match2 <- CreateTableOne(vars = xvars,
strata = "Treatment",
data = match2.data,test = FALSE)
print(table_match2, smd = TRUE)`

但是当我运行此代码时,它给出的结果没有权重因子,并且它不会将权重作为 CreateTableOne 函数中的参数。 请帮助我解决这个问题。

提前谢谢。

此代码存在几个问题。

首先,要使用svyCreateTableOne函数,您需要在data参数中为其提供一个svydesign对象,而您还没有这样做。您需要使用survey包装并为其提供重量。在您的情况下,看起来您无论如何都在未加权的数据上使用此函数,因此您可能不应该使用它。

其次,在你呼吁matchit()时,你有论据radio=1radio不是matchit()的合适论据。你可能的意思是ratio.幸运的是,这可能不会影响任何事情。

我不知道你为什么在那里有ATE()代码。它与问题无关。

我不知道你打算在最终表格中出现什么权重,但你没有提供任何权重供它使用。在第一个表中,您可以为其提供不匹配、未加权的数据。在第二个表中,您为其提供匹配的未加权数据。您想提供什么砝码?如果要为其提供加权数据,则需要使用svyCreateTableOne和具有权重的svydesign对象提供这些权重。

最新更新