使用交互术语模拟多重插补

时间:2015-11-23 06:49:29

标签: r statistics missing-data interaction r-mice

根据mice包的文档,如果我们想要在我们对交互术语感兴趣时想要数据,我们需要使用被动插补。这是通过以下方式完成的。

library(mice)
nhanes2.ext <- cbind(nhanes2, bmi.chl = NA)
ini <- mice(nhanes2.ext, max = 0, print = FALSE)

meth <- ini$meth
meth["bmi.chl"] <- "~I((bmi-25)*(chl-200))"

pred <- ini$pred
pred[c("bmi", "chl"), "bmi.chl"] <- 0

imp <- mice(nhanes2.ext, meth = meth, pred = pred, seed = 51600, print = FALSE)

据说

Imputations created in this way preserve the interaction of bmi with chl

此处,在原始数据集中创建了一个名为bmi.chl的新变量。 meth步骤说明了如何从现有变量推算出该变量。 pred步骤表示我们不希望从bmi预测chlbmi.chl。但是现在,如果我们想要应用模型,我们该如何进行? "~I((bmi-25)*(chl-200))"定义的产品是否只是一种控制主效应的估算值的方法,即bmichl

如果我们想要拟合的模型是glm(hyp~chl*bmi, family="binomial"),那么从插补数据中指定此模型的正确方法是什么? fit1fit2

fit1 <- with(data=imp, glm(hyp~chl*bmi, family="binomial"))
summary(pool(fit1))

或者我们是否必须以某种方式使用所创建的新变量的估算值,即bmi.chl

fit2 <- with(data=imp, glm(hyp~chl+bmi+bmi.chl, family="binomial"))
summary(pool(fit2))

1 个答案:

答案 0 :(得分:3)

使用被动估算,如果您使用被动估算变量,或者在调用glm时重新计算产品词,则无关紧要。 fit1fit2在您的示例中产生不同结果的原因是因为只是对产品术语进行被动插补。

相反,您正在将两个变量转换为乘法(即,您计算bmi-25chl-100)。因此,被动估算的变量bmi.chl不代表产品术语bmi*chl,而是(bmi-25)*(chl-200)

如果您只计算产品字词,那么fit1fit2会产生相同的结果:

library(mice)
nhanes2.ext <- cbind(nhanes2, bmi.chl = NA)
ini <- mice(nhanes2.ext, max = 0, print = FALSE)

meth <- ini$meth
meth["bmi.chl"] <- "~I(bmi*chl)"

pred <- ini$pred
pred[c("bmi", "chl"), "bmi.chl"] <- 0
pred[c("hyp"), "bmi.chl"] <- 1

imp <- mice(nhanes2.ext, meth = meth, pred = pred, seed = 51600, print = FALSE)

fit1 <- with(data=imp, glm(hyp~chl*bmi, family="binomial"))
summary(pool(fit1))
# > round(summary(pool(fit1)),2)
#                est    se     t    df Pr(>|t|)   lo 95 hi 95 nmis  fmi lambda
# (Intercept) -23.94 38.03 -0.63 10.23     0.54 -108.43 60.54   NA 0.41   0.30
# chl           0.10  0.18  0.58  9.71     0.58   -0.30  0.51   10 0.43   0.32
# bmi           0.70  1.41  0.49 10.25     0.63   -2.44  3.83    9 0.41   0.30
# chl:bmi       0.00  0.01 -0.47  9.67     0.65   -0.02  0.01   NA 0.43   0.33

fit2 <- with(data=imp, glm(hyp~chl+bmi+bmi.chl, family="binomial"))
summary(pool(fit2))
# > round(summary(pool(fit2)),2)
#                est    se     t    df Pr(>|t|)   lo 95 hi 95 nmis  fmi lambda
# (Intercept) -23.94 38.03 -0.63 10.23     0.54 -108.43 60.54   NA 0.41   0.30
# chl           0.10  0.18  0.58  9.71     0.58   -0.30  0.51   10 0.43   0.32
# bmi           0.70  1.41  0.49 10.25     0.63   -2.44  3.83    9 0.41   0.30
# bmi.chl       0.00  0.01 -0.47  9.67     0.65   -0.02  0.01   25 0.43   0.33

这并不奇怪,因为~I(bmi*chl)中的micebmi*chl中的glm完全相同。他们只计算两个变量的乘积。

<强>注:

请注意,我添加了一行,说明在bmi.chl输入时hyp应该用作预测变量。如果没有这一步,被动插补就没有目的,因为插补模型会忽略产品术语,因此与分析模型不一致。