首页 > 解决方案 > 函数 MatchIt::matchit 的问题

问题描述

嗨,我想通过调整倾向得分来进行逻辑回归。但首先我想根据倾向得分来匹配条约和非条约。这是我的第一个脚本:

mod_match<-matchit(Treatment~Prop.score, method = "nearest", data = Epidemio.prop,caliper = 0.05)

这是错误消息

matchit 中的错误(Treatment~Prop.score, method = "nearest", data = Epidemio.prop, : 数据中存在缺失值

因此,我从模型中删除了除没有缺失数据的两个感兴趣变量之外的所有其他变量。

mod_match<-matchit(Treatment~Prop.score, 
method = "nearest",  data = Epidemio.prop[c("Treatment","Prop.score")],
caliper = 0.1)

我仍然有错误消息。

weights.matrix(match.matrix,treat,discarded) 中的错误:没有匹配的单位另外:警告消息:

1:在 max(pscore[treat == 0]) 中:max 没有非缺失参数;返回-Inf

2:在 max(pscore[treat == 1]) 中:max 没有非缺失参数;返回-Inf

3:在 min(pscore[treat == 0]) 中:min 没有非缺失参数;返回 Inf

4:在 min(pscore[treat == 1]) 中:min 没有非缺失参数;返回 Inf

标签: rpropensity-score-matching

解决方案


问题是您没有给出用于倾向得分计算的任何变量(即,您只给出Treatmentand Prop.score,我不清楚其含义)。您需要传递一组辅助变量,这些变量将用于拟合预测倾向得分的模型。

此外,根据我的使用经验MatchIt,无论缺失与模型中包含的变量无关,它都会引发与缺失值相关的错误。

我建议您使用要在模型中使用的变量创建一个辅助数据框,并删除(或估算)任何这些变量中具有缺失值的任何观察值。

像这样的东西:

vars_to_keep <- c("Treatment", "x1", "x2", "x3", ... )
aux_df <- df[vars_to_keep]

# Select only complete cases (i.e. drop observations with at least one missing)
aux_df <- aux_df[complete.cases(aux_df), ]

mod_match <- matchit(Treatment ~ x1 + x2 + x3 + ..., method = "nearest", data = aux_df) 

不过,本教程是一个更全面的帮助。我建议看看它。

祝你好运!


推荐阅读