【发布时间】:2016-04-22 20:39:17
【问题描述】:
我有一个从mice 创建的mids 对象。我想重新编码一些估算变量并保留mids 对象。我知道我可以使用complete() 将mids 对象转换为“long”对象,但我想保留mids 对象,因为它还有一些其他用途。
这是一个使用 nhanes 数据集的示例。运行mice() 为nhanes 中的变量创建5 个插补数据集。我专注于hyp。
library(mice)
names(nhanes)
nhanes$hyp
#[1] NA 1 1 NA 1 NA 1 1 1 NA NA NA 1 2 1 NA 2 2 1 2 NA 1 1 1
imp <- mice(nhanes, print = FALSE)
imp$imp$hyp
# 1 2 3 4 5
# 1 1 1 1 1 1
# 4 2 1 1 2 2
# 6 1 1 1 1 1
# 10 1 1 1 1 1
# 11 1 1 2 1 1
# 12 1 1 1 1 2
# 16 1 1 2 1 1
# 21 1 1 2 1 1
我如何重新编码 mids 对象 imp 内的估算 hyp 值(例如,1 变成 5)。
到目前为止,我唯一的想法是将imp 转换为long,将感兴趣的变量提取到新的数据帧中,重新编码,通过as.mids 转换新的数据帧,然后通过cbind.mids() 放回imp。
imp_long <- complete(imp, "long", include=T)
hyp <- imp_long[, "hyp"]
hyp2 <- hyp
hyp2[hyp2==1] <- 5
hyp4mids <- data.frame(.imp = rep(0:5, each = nrow(nhanes)),
.id = rep(1:nrow(nhanes), times = 6),
hyp2,
TMP = NA)
hyp4mids <- as.mids(hyp4mids, .imp = 1, .id = 2)
hyp4mids$chainMean <- hyp4mids$chainVar <- array(NA, dim = c(2, 25, 5),
dimnames = list(
c("hyp2", "TMP"),
1:25,
paste0("Chain ", 1:5)))
imp2 <- cbind.mids(imp, hyp4mids)
imp2$imp$hyp2
# 1 2 3 4 5
# 1 5 5 5 5 5
# 4 2 5 5 2 2
# 6 5 5 5 5 5
# 10 5 5 5 5 5
# 11 5 5 2 5 5
# 12 5 5 5 5 2
# 16 5 5 2 5 5
# 21 5 5 2 5 5
它可以工作,但我想我应该可以直接在imp mids 对象中修改hyp。
【问题讨论】: