Как получить все значения имп (R мышей) во фрейме данных

Я использовал пакет mice для расчета импутаций (10 итераций, 5 импутаций). Поскольку я новичок в этой области, мой «методолог» очень терпелив со мной! - хотите судить о вмененных значениях (а не о завершенных наборах). Кажется, я не могу найти способ собрать все вмененные значения в одном чистом фрейме данных.

Данные касаются молодых людей, которые ответили на множество вопросов по 5-балльной шкале Лайкерта. У меня несколько imp на возрастную категорию. Например:

С помощью моей команды imp_val

'data.frame':   1 obs. of  5 variables:
 $ 1: Factor w/ 4 levels "2","3","4","5": 3
  ..- attr(*, "contrasts")= num [1:4, 1:3] 0 1 0 0 0 0 1 0 0 0 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr  "2" "3" "4" "5"
  .. .. ..$ : chr  "2" "3" "4"
 $ 2: Factor w/ 4 levels "2","3","4","5": 3
  ..- attr(*, "contrasts")= num [1:4, 1:3] 0 1 0 0 0 0 1 0 0 0 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr  "2" "3" "4" "5"
  .. .. ..$ : chr  "2" "3" "4"
etc., etc.
plus <- Filter(Negate(is.null), imp_15plus$imp) я могу видеть все вмененные значения для каждого вопроса и для каждого идентификатора. Так, например, imp_val_15plus[1:2] дает:

$X02_07
                                     1 2 3 4 5
qwertyuiop123456789                  4 4 4 4 4

$X02_12
                                     1 2 3 4 5
adfghjkl09823430233                  2 2 5 2 2
zcvnmoi987412597800                  1 2 1 1 2

Итак, вот два вопроса (X02_07 и X02_12). У первого есть один NA (id qwe...789), а у второго два NA (id adf...0233 и zcvn...7800).

Я хотел бы иметь такой кадр данных:

q_nr      id                                   1 2 3 4 5
$X02_07   qwertyuiop123456789                  4 4 4 4 4
$X02_12   adfghjkl09823430233                  2 2 5 2 2
$X02_12   zcvnmoi987412597800                  1 2 1 1 2

Поэтому я придумал способ извлечь нужные мне значения, а затем попытаться использовать цикл для всех этих значений. Я попытался извлечь значения:
names(imp_val_15plus[1]) дает мне номер вопроса [1] "X02_07"
row.names(imp_val_15plus[[1]]) дает мне идентификационный номер [1] "qwertyuiop123456789"

Но тогда я ошибаюсь с вмененными значениями. С as.integer(imp_val_15plus[[1]]) я получаю [1] 3 3 3 3 3 вместо того, что хотел [1] 4 4 4 4 4. Тройка логична из-за факторов, доступных для вопроса $X02_07. Обычно уровни факторов должны быть от 1 до 5, но ни один из подростков не использовал 1, поэтому мои уровни для этого вопроса 2-5.

Взгляните на str(imp_val_15plus[[1]]), это дает:

'data.frame':   1 obs. of  5 variables:
 $ 1: Factor w/ 4 levels "2","3","4","5": 3
  ..- attr(*, "contrasts")= num [1:4, 1:3] 0 1 0 0 0 0 1 0 0 0 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr  "2" "3" "4" "5"
  .. .. ..$ : chr  "2" "3" "4"
 $ 2: Factor w/ 4 levels "2","3","4","5": 3
  ..- attr(*, "contrasts")= num [1:4, 1:3] 0 1 0 0 0 0 1 0 0 0 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr  "2" "3" "4" "5"
  .. .. ..$ : chr  "2" "3" "4"
etc., etc.

Логично, что я получил тройку, потому что это номер фактора с уровнями "2", "3", "4", "5". Как получить значение самого значения (4) вместо 3? Или есть другой способ аккуратно представить все вмененные значения (не полный набор!!)?


person Marlein    schedule 12.06.2018    source источник
comment
Взгляните на мой ответ здесь: stripplot-in-mice/ Я думаю, что это выполняет то, что вы хотите. Вы можете добавить определенный фиктив для значений, которые вменены, создав отсутствующий индикатор impL$M_x <- rep(is.na(impL[which(impL$Imputed == "Observed"),'x']),imp$m +1). Используя этот манекен, вы можете конкретно посмотреть на вмененные значения для каждого набора данных impL[which(impL$Imputed == "Imputed" & impL$M_x == TRUE),c('.imp','x')]   -  person Niek    schedule 13.06.2018
comment
Проблема, которую вы упомянули с as.integer(imp_val_15plus[[1]]), возможно, может быть решена путем преобразования фактора в символ as.integer(as.character(imp_val_15plus[[1]])).   -  person Niek    schedule 13.06.2018
comment
Я получил много ошибок, используя ваше решение, но это привело меня к другому подходу, так что спасибо. Ваша вторая идея с использованием as.integer(as.character(imp_val_15plus[[1]])) не может работать, потому что она видит только значение и игнорирует факторные уровни. то есть вы получаете тот же ответ. Но спасибо за помощь!   -  person Marlein    schedule 13.06.2018
comment
Рад, что был чем-то полезен. Не могли бы вы опубликовать небольшой пример данных или какие-то данные, которые по структуре равны imp_val_15plus? Это может помочь ответить на ваш вопрос   -  person Niek    schedule 13.06.2018