Множественное вменение, разделенное gpoup

В моем примере данных

    data=structure(list(groupvar = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 
2L, 1L), v1 = c(27L, 52L, 92L, 86L, NA, 19L, 94L, NA, 26L, 94L, 
NA, 58L, 96L, 74L, 8L, 66L, 65L, 41L, 70L, 21L, 64L, 40L, 17L, 
7L, NA, 14L, 63L), v2 = c(59L, 91L, 45L, 40L, 56L, 17L, 72L, 
78L, 19L, 62L, 87L, NA, 79L, 62L, 40L, 67L, 93L, 1L, 64L, 22L, 
NA, 98L, 44L, 85L, 67L, 88L, 92L), v3 = c(97L, 15L, 27L, 55L, 
86L, 66L, NA, 61L, 27L, 47L, 93L, 68L, 72L, 4L, 35L, 69L, 65L, 
NA, 83L, 60L, 42L, NA, 90L, 81L, NA, 27L, 60L)), .Names = c("groupvar", 
"v1", "v2", "v3"), class = "data.frame", row.names = c(NA, -27L
))

Есть групвар (1 группа и вторая группа). У меня много переменных, а здесь только три. И в этих переменных много пропущенных значений. Как я могу выполнить множественное вменение для каждой переменной (тип переменной может быть числовым, целым и т. Д.), Но для каждой группы отдельно, используя MICE

Редактировать

simple imp <- mice(data) не дает нужного вывода, т.к. мне нужно по группам я хочу чтобы результат был

groupvar    v1  v2  v3
1          27   59  97
1          52   91  15
1          92   45  27
1          86   40  55
1         *64*  56  86
2          7    85  81
2          58*61,8* 68
2        64 *61,8*  42

** я отметил пример вмененной стоимости


person D.Joe    schedule 13.07.2018    source источник
comment
Можем ли мы увидеть вашу попытку, а также ожидаемый результат?   -  person Sotos    schedule 13.07.2018
comment
@Sotos, я отредактировал сообщение, пожалуйста, проверьте его   -  person D.Joe    schedule 13.07.2018


Ответы (1)


Группа 'groupvar' как фактор.

data <- structure(list(groupvar = as.factor(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 
                                    2L, 1L)), 
                       v1 = c(27L, 52L, 92L, 86L, NA, 19L, 94L, NA, 26L, 94L, 
                              NA, 58L, 96L, 74L, 8L, 66L, 65L, 41L, 70L, 21L, 64L, 40L, 17L, 
                              7L, NA, 14L, 63L), 
                       v2 = c(59L, 91L, 45L, 40L, 56L, 17L, 72L, 
                              78L, 19L, 62L, 87L, NA, 79L, 62L, 40L, 67L, 93L, 1L, 64L, 22L, 
                              NA, 98L, 44L, 85L, 67L, 88L, 92L), 
                       v3 = c(97L, 15L, 27L, 55L, 
                              86L, 66L, NA, 61L, 27L, 47L, 93L, 68L, 72L, 4L, 35L, 69L, 65L, 
                              NA, 83L, 60L, 42L, NA, 90L, 81L, NA, 27L, 60L)),
                  .Names = c("groupvar", 
                             "v1", "v2", "v3"), class = "data.frame", row.names = c(NA, -27L
                             ))

Затем используйте пакет mouses, предполагая, что пакет mouses установлен правильно.

library(mice)
imp <- mice(data)
complete(imp)

   groupvar v1 v2 v3
1         1 27 59 97
2         1 52 91 15
3         1 92 45 27
4         1 86 40 55
5         1 21 56 86
6         1 19 17 66
7         1 94 72  4
8         1 66 78 61
9         1 26 19 27
10        2 94 62 47
11        2  8 87 93
12        2 58 72 68
13        2 96 79 72
14        2 74 62  4
15        2  8 40 35
16        2 66 67 69
17        2 65 93 65
18        2 41  1 47
19        2 70 64 83
20        2 21 22 60
21        2 64 62 42
22        1 40 98 27
23        1 17 44 90
24        2  7 85 81
25        1 63 67 55
26        2 14 88 27
27        1 63 92 60
person Agriculturist    schedule 13.07.2018
comment
Спасибо Агроному, но как сделать, чтобы вменение было для каждой группы отдельно 1 и 2. потому что теперь я вижу, что оно выполняется для всей группы сразу. Возможно ли его разделить? - person D.Joe; 13.07.2018
comment
imp ‹- мыши (данные [data $ groupvar == 1,]) - person Agriculturist; 13.07.2018
comment
если там не 2 группы, а 100 групп, как мне быть. я не могу написать 1000 строк. Ты понимаешь меня? - person D.Joe; 13.07.2018
comment
Лучший способ — метод разделения-применения-объединения с использованием пакета plyr. Преобразование чисел в строки с помощью функции as.character(). Вы можете использовать числа, но числа могут рассматриваться как индексы. Поэтому, если 2 находится в позиции 3, номера групп могут не иметь смысла. Существует множество руководств по разделению-применению-объединению. - person Agriculturist; 13.07.2018