множественное вменение и многогрупповой SEM в R

Я хочу выполнить многогрупповой SEM для вмененных данных, используя пакеты R mice и semTools, в частности функцию runMI, которая вызывает Lavaan.

Я могу сделать это при одновременном вменении всего набора данных, но, просматривая stackoverflow / stackexchange, я натолкнулся на рекомендацию вменять данные отдельно для каждого уровня группирующей переменной (например, мужчин, женщин), чтобы особенности каждая группа сохраняется (например, https://stats.stackexchange.com/questions/149053/questions-on-multiple-imputation-with-mice-for-a-multigroup-sem-analysis-inclu). Однако мне не удалось найти никаких ссылок в поддержку этого курса.

Мой вопрос и концептуальный, и практический -

1) Разделяется ли набор данных по группам до определения правильного курса? Может ли кто-нибудь указать мне на ссылки, сообщающие об этом?

2) Если да, то как я могу объединить наборы данных, вмененные по группе с использованием мышей, вместе, сохранив при этом несколько вмененных наборов данных в списке фреймов данных среднего класса? Я пытался это сделать, но в итоге получил целое число

set.seed(12345)
HSMiss <- HolzingerSwineford1939[ , paste("x", 1:9, sep = "")]
HSMiss$x5 <- ifelse(HSMiss$x1 <= quantile(HSMiss$x1, .3), NA, HSMiss$x5)
HSMiss$x9 <- ifelse(is.na(HSMiss$x5), NA, HSMiss$x9)
HSMiss$school <- HolzingerSwineford1939$school

HS.model <- '
visual  =~ x1 + a*x2 + b*x3
textual =~ x4 + x5 + x6
x7 ~ textual + visual + x9
'

group1 <- subset(HSMiss, school =='Pasteur')
group2 <- subset(HSMiss, school =='Grant-White')

imputed.group1 <- mice(group1, m = 3, seed = 12345) 
imputed.group2 <- mice(group2, m = 3, seed = 12345) 


 #attempted merging:
    imputed.both <- nrow(complete(rbind(imputed.group1, imputed.group2)))

Я был бы невероятно благодарен, если бы кто-нибудь мог мне помочь. Как вы можете сказать, я все еще очень много изучаю R и вменение, поэтому извиняюсь, если это глупый вопрос - однако я не смог найти ничего по этому конкретному запросу в другом месте.


person S Atkins    schedule 13.02.2018    source источник


Ответы (1)


При слиянии вы получаете только целое число, потому что вы вызываете nrow(). Удалите этот вызов, и вы получите объединенный фрейм данных.

imputed.both <- complete(rbind(imputed.group1, imputed.group2))

Если вы обнаружите, что у вас есть наборы данных, состоящие из нескольких групп, вы можете сделать что-то вроде следующего, чтобы упростить эту задачу.

imputed.groups <- lapply(split(HSMiss, HSMiss$school), function(x) {
  complete(mice(x, m = 3, seed = 12345))
})

imputed.both <- do.call(args = imputed.groups, what = rbind)

Насколько подходит этот подход для вменения, этот вопрос, вероятно, лучше подходит для перекрестной проверки.

person Juan Bosco    schedule 14.02.2018
comment
Прошло некоторое время с момента последнего обновления этого вопроса ... Код отлично работает с моими данными, но в итоге я получаю список, содержащий данные, сохраненные для каждой группы, но как полный набор данных. Итак, в чем смысл последней строки кода и какой из вмененных списков взять? Спасибо - person Juan; 11.11.2019
comment
Последняя строка связывает списки, созданные с помощью lapply, по очереди. Это просто шаг для удобства, который можно пропустить, если вам не нужен единый фрейм данных со всеми вашими результатами. Выбор вмененного набора данных зависит от конкретного случая. - person Juan Bosco; 12.11.2019