as.mids заменяет добавленные значения на NA

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

library(mice)
d1 = as.data.frame(matrix(rnorm(100), nrow = 10))
missingness = matrix(as.logical(rbinom(100,1,.2)), ncol = 10)
d1[which(missingness, arr.ind = T)] = NA     #replace some values with NA
d.mids = mice(d1, printFlag = F)             #make the imputations
d.long = complete(d.mids, "long", T)         #extract the original dataset and the imputed ones
added = data.frame(rowSums(d.long[,3:12]))   #make a new column
d.long.aug = cbind(d.long,added)             #add it to the data.frame
d.remids = as.mids(d.long.aug)               #turn it back into a mids object
d.relong = complete(d.remids,"long",T)       #extract it from the mids object
sum(is.na(d.long.aug[11:30,13]))             #0, unless a variable failed to impute due to collinearity
sum(is.na(d.relong[11:30,13]))               #should be the same as  previous value, but almost never is

В приведенном выше примере я создал новый длинный data.frame и применил к нему as.mdids(), но я получаю те же результаты, если использую cbind для добавления новой переменной в d.long или если я назначаю новую переменную d.long$added.

Как я могу убедиться, что значения в новой переменной останутся там после повторной сборки объекта mids?


person Paul de Barros    schedule 09.04.2016    source источник
comment
Вы нашли решение этого? У меня такая же проблема. Я также попробовал альтернативный метод, предложенный в ответах здесь: stackoverflow.com/questions/26667162/ - но это создало другие проблемы   -  person user2498193    schedule 14.07.2016
comment
На самом деле я это исправил. В моем случае операция, которую я выполнял, чтобы создать новый столбец, имела тихую ошибку, которая иногда выбрасывала NA!   -  person user2498193    schedule 14.07.2016
comment
Я рад, что вы нашли решение. Я считаю, что мое решение состояло в том, чтобы добавить переменные перед вменением и использовать пассивное вменение для их вычисления. Я также должен был убедиться, что вменение других переменных не основывалось на добавленных. Если бы мне пришлось вернуться и сделать это снова, я бы выбрал другой пакет, например mi или Amelia.   -  person Paul de Barros    schedule 14.07.2016