Многократное вменение с помощью МЫШИ обеспечивает вдвое большее ожидаемое количество строк

#r #r-mice

Вопрос:

Я запустил следующий код, чтобы вменить 10 кадров данных из 2120 наблюдений.

Я ожидал получить длинный кадр данных 10 Х 2120 = 21200 наблюдений, но я получил 42400 наблюдений, как будто весь процесс выполнялся дважды. Первые 3 столбца выглядят так, как показано ниже.

Это не большая проблема, потому что я могу подмножествовать первую половину, но мне было интересно, есть ли у кого-нибудь объяснение этому. Что-то не так с моим кодом?

Спасибо

 for (group in 0:1) {
  predictor.selection <- quickpred(imputed_df, mincor=0.1, minpuc=0.5,method='pearson',
                                   exclude=c("idme"))
  imputation <- mice(imputed_df, m=10, method="pmm", visitSequence="monotone",
                     predictorMatrix = predictor.selection)
 
  long.imputation = rbind(long.imputation,complete(imputation, action="long"))
} ````

row#   .imp   .id    idme
1       1       1     5001
2       1       2     5002
3       1       3     5003
4       1       4     5004
...
2121    1       2120   8288
2122    2       1      5001
2123    2       2      5002
2124    2       3      5003
...
21200  10      2120   8288
21201   1       1     5001
21202   1       2     5002
21203   1       3     5003
21204   1       4     5004
...
23320   1       2120   8288
23321   2       1      5001
23322   2       2      5002
23324   2       3      5003
...
42400  10      2120   8288
 

Комментарии:

1. Вы проходите цикл дважды и складываете результаты с rbind таким количеством 2 * 21200. Я предполагаю, что вы пропустили код, созданный long.imputation вне цикла.

Ответ №1:

Поскольку group значения ( 0:1 ) не используются в цикле, использование lapply / replicate было бы хорошим вариантом.

 imputed_dataset <- function() {
  predictor.selection <- quickpred(imputed_df, mincor=0.1, minpuc=0.5,method='pearson',
                                   exclude=c("idme"))
  imputation <- mice(imputed_df, m=10, method="pmm", visitSequence="monotone",
                     predictorMatrix = predictor.selection)
  return(imputation)
}

result <- do.call(rbind, replicate(2, imputed_dataset(), simplify = FALSE))
result