使用 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
我应该已经成功地使用 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