2016-01-17 2 views
1

У меня есть mids объект создан из mice. Я хотел бы перекодировать некоторые вмененные переменные и сохранить объект mids. Я знаю, что я мог бы преобразовать объект mids в «long» с complete(), но я хочу сохранить объект mids, так как он имеет некоторые дополнительные возможности.recode mice mids объект

Вот пример использования набора данных nhanes. Запуск mice() создает 5 вмененных наборов данных для переменных в nhanes. Я сосредоточен на 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 

Как можно перекодировать приписываемые hyp значения внутри mids объекта imp (например, 1-х стал 5-х).

Мои только идеи до сих пор включает в себя преобразование imp долго, извлекая переменные, представляющие интерес в новую dataframe, перекодирования, преобразовывая новый dataframe через as.mids, затем положить обратно в imp через cbind.mids().

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 

Это работает, но я думаю, что я должен быть в состоянии изменить hyp в imp середине объект непосредственно.

+0

Возможная Дубликат [Выполнить операцию на каждом вмененный наборе данных в MICE АиР] (http://stackoverflow.com/questions/26667162/выполнения-операция-на-каждый-вмененного-набор данные-в-RS-мышей) – wjchulme

ответ

1

Оказывается, что хитрость заключается в том, чтобы изменить данные и $ $ имп:

imp <- mice(nhanes, print = FALSE) 
l1 <- complete(imp, "long") 
table(l1$hyp) 
# 1 2 
#92 33 

imp$data$hyp[imp$data$hyp==1] <- 5 
imp$imp$hyp[imp$imp$hyp==1] <- 5 
l2 <- complete(imp, "long") 
table(l2$hyp) 
# 2 5 
#33 92 
Смежные вопросы