【问题标题】:Propensity Score Matching by using Nearest Neighborhood Method with weights in R通过使用最近邻法与 R 中的权重进行倾向得分匹配
【发布时间】:2019-12-25 10:05:41
【问题描述】:

我通过使用我的变量之一作为加权因子(即权重)在 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")))
我正在使用 tableone 包来创建一个预匹配表。我的代码在这里:

`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 函数中的参数。 请帮我解决这个问题。

提前致谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    这段代码有几个问题。

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

    其次,在您对matchit() 的调用中,您有参数radio=1radio 不是 matchit() 的合适参数。你的意思可能是ratio。幸运的是,这可能不会影响任何事情。

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

    我不知道您打算在决赛桌中出现什么权重,但您没有提供任何权重供它使用。在您的第一个表中,您为其提供了无与伦比的未加权数据。在第二个表中,您为其提供匹配的未加权数据。你想提供什么重量?如果要为其提供加权数据,则需要使用 svyCreateTableOne 和具有权重的 svydesign 对象来提供这些权重。

    【讨论】:

      猜你喜欢
      • 2021-02-20
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      相关资源
      最近更新 更多