Импутация с использованием мышей с кластерными данными
Так что я использую mice
пакет для вменения недостающих данных. Я новичок в вменении, поэтому я дошел до точки, но столкнулся с крутой кривой обучения. Чтобы привести пример игрушки:
library(mice)
# Using nhanes dataset as example
df1 <- mice(nhanes, m=10)
Итак, как вы можете видеть, я вменял df1 10 раз, используя в основном настройки по умолчанию - и мне удобно использовать этот результат в регрессионных моделях, результатах объединения и т. Д. Однако в моих реальных данных у меня есть данные опросов из разных стран. Таким образом, уровни пропусков различаются в зависимости от страны, равно как и значения конкретных переменных - например, возраст, уровень образования и т. Д. Поэтому я хотел бы отразить пропуски, с учетом кластеризации по стране. Поэтому я создам группирующую переменную, в которой нет пропущенных (конечно, в этом игрушечном примере корреляции с другими переменными отсутствуют, но в моих реальных данных они существуют)
# Create a grouping variable
nhanes$country <- sample(c("A", "B"), size=nrow(nhanes), replace=TRUE)
Так как мне сказать mice()
что эта переменная отличается от других - то есть это уровень в многоуровневом наборе данных?
2 ответа
Если вы думаете о кластерах, как в моделях "смешанных эффектов", то вам следует использовать методы, предоставленные mice
предназначен для кластерных данных. Эти методы можно найти в руководстве и обычно имеют префикс как 2l.something
,
Разнообразие методов для кластеризованных данных несколько ограничено mice
, но я могу рекомендовать использовать 2l.pan
за отсутствующие данные в единицах нижнего уровня и 2l.only.norm
на уровне кластера.
В качестве альтернативы моделям со смешанными эффектами вы можете рассмотреть возможность использования фиктивных индикаторов для представления структуры кластера (то есть одну фиктивную переменную для каждого кластера). Этот метод не идеален, когда вы думаете о кластерах с точки зрения моделей со смешанными эффектами. Поэтому, если вы хотите провести анализ смешанных эффектов, тогда, когда можете, придерживайтесь моделей смешанных эффектов.
Ниже я покажу пример для обеих стратегий.
Приготовление:
library(mice)
data(nhanes)
set.seed(123)
nhanes <- within(nhanes,{
country <- factor(sample(LETTERS[1:10], size=nrow(nhanes), replace=TRUE))
countryID <- as.numeric(country)
})
Случай 1: вменение с использованием моделей со смешанными эффектами
Этот раздел использует 2l.pan
вменять три переменные с отсутствующими данными. Обратите внимание, что я использую clusterID
в качестве переменной кластера, указав -2
в матрице предиктора. Для всех остальных переменных я назначаю только фиксированные эффекты (1
).
# "empty" imputation as a template
imp0 <- mice(nhanes, maxit=0)
pred1 <- imp0$predictorMatrix
meth1 <- imp0$method
# set imputation procedures
meth1[c("bmi","hyp","chl")] <- "2l.pan"
# set predictor Matrix (mixed-effects models with random intercept
# for countryID and fixed effects otherwise)
pred1[,"country"] <- 0 # don't use country factor
pred1[,"countryID"] <- -2 # use countryID as cluster variable
pred1["bmi", c("age","hyp","chl")] <- c(1,1,1) # fixed effects (bmi)
pred1["hyp", c("age","bmi","chl")] <- c(1,1,1) # fixed effects (hyp)
pred1["chl", c("age","bmi","hyp")] <- c(1,1,1) # fixed effects (chl)
# impute
imp1 <- mice(nhanes, maxit=20, m=10, predictorMatrix=pred1, method=meth1)
Случай 2: Вменение с использованием фиктивных индикаторов (DI) для кластеров
Этот раздел использует pmm
для вменения, и кластеризованная структура представляется "ad hoc". То есть кластеризованные представлены не случайными эффектами, а фиксированными эффектами. Это может преувеличивать изменчивость переменных на уровне кластера с отсутствующими данными, поэтому убедитесь, что вы знаете, что делаете, когда используете их.
# create dummy indicator variables
DIs <- with(nhanes, contrasts(country)[country,])
colnames(DIs) <- paste0("country",colnames(DIs))
nhanes <- cbind(nhanes,DIs)
# "empty" imputation as a template
imp0 <- mice(nhanes, maxit=0)
pred2 <- imp0$predictorMatrix
meth2 <- imp0$method
# set imputation procedures
meth2[c("bmi","hyp","chl")] <- "pmm"
# for countryID and fixed effects otherwise)
pred2[,"country"] <- 0 # don't use country factor
pred2[,"countryID"] <- 0 # don't use countryID
pred2[,colnames(DIs)] <- 1 # use dummy indicators
pred2["bmi", c("age","hyp","chl")] <- c(1,1,1) # fixed effects (bmi)
pred2["hyp", c("age","bmi","chl")] <- c(1,1,1) # fixed effects (hyp)
pred2["chl", c("age","bmi","hyp")] <- c(1,1,1) # fixed effects (chl)
# impute
imp2 <- mice(nhanes, maxit=20, m=10, predictorMatrix=pred2, method=meth2)
Если вы хотите узнать, что думать об этих методах, взгляните на одну или две из этих статей.
Вы должны настроить ForexMatrix, чтобы сообщить мышам, какую переменную использовать для вменения другой. Быстрый способ сделать это - использовать predictorM<-quickpred(nhanes)
Затем вы меняете 1 в матрице на 2, если это нормальная переменная, и на -2, если это переменная второго уровня для разных стран, и отправляете ее в команду mouse как predictorMatrix =predictorM
, В команде метода вы должны установить методы 2l.norm
если это метрическая переменная или 2l.binom
если это двоичная переменная. Для последнего вам нужна функция, написанная Сабиной Зинн ( https://www.neps-data.de/Portals/0/Working%20Papers/WP_XXXI.pdf). К сожалению, мне неизвестно, существуют ли какие-либо методы для подсчета двухуровневых данных в мире.
Имейте в виду, что использование многоуровневых наборов данных сильно замедлит процесс. По моему опыту, метод повторной выборки, такой как PMM или пакет Baboon, хорошо работает в сохранении иерархической структуры данных и намного быстрее в использовании.