使用 glm 的多重插补(小鼠):"argument to 'which' is not logical"

Multiple imputation (mice) with glm: "argument to 'which' is not logical"

我应该已经成功地使用 mice 对数据框进行了多重插补。我现在想 运行 glm 在那个数据集上。我的结果变量是“MI”,我的自变量是“高血压”和“糖尿病”。 我试过:

dat <- mice(regression)
model <- which(dat, glm(MI ~ Hypertension + Diabetes, family = "binomial"))

但我收到以下错误:

Error in which(dat, glm(MI ~ Hypertension + Diabetes, family = "binomial")):
argument to 'which' is not logical.

有人知道这是为什么吗?

我认为您遇到错误是因为您使用的是 which() 而不是 with()which() 是一个函数,它询问(用外行人的话来说)“这些值中哪些 是真的?”您必须指定可以为真或为假的内容。

with() 是一个函数,类似于“使用 这个数据集,评估其中的某些东西。”您必须提供某种数据环境(例如,列表、数据框),并使用内部的向量而无需再次命名该数据环境。

with() 可以像这样与 mice 包一起使用:

# example data frame
set.seed(123)
df <- data.frame(
    MI = factor(rep(c(0,1),5)), 
    Hypertension = c(rnorm(9), NA), 
    Diabetes = c(NA, rnorm(9)))

# imputation
library(mice)

dat <- mice(df)

with(dat, glm(MI ~ Hypertension + Diabetes, family = "binomial"))

with(dat, glm(MI ~ Hypertension + Diabetes, family = "binomial")) 向您显示 dat 中每个插补的 glm() 输出。 mice() 默认进行五次插补。

glm.mids()

的替代方案

为什么 glm(MI ~ Hypertension + Diabetes, family = "binomial", data = dat) 不起作用?它给出了一个错误,“Error cannot coerce class ‘mids’ to a data.frame” 因为估算的 dat 不是数据框。

相反,mice 具有 运行 glm() 的函数,具有多元估算数据(“mids”),glm.mids():

#glm(MI ~ Hypertension + Diabetes, family = "binomial", data = dat) # it does not work

glm.mids(MI ~ Hypertension + Diabetes, family = "binomial", data = dat) # it works

with(dat, glm(MI ~ Hypertension + Diabetes, family = "binomial")) # does the same thing

编辑备注

当你在使用 mice 包时使用 with(),我认为它实际上从 mice 包的“with.mids”调用了 with(),这允许你使用 with() 和 mice 包的“中频”数据 class。它取代 glm.mids()。详情请看这里:https://rdrr.io/cran/mice/man/with.mids.html