Случайные эффекты в продольных моделях многоуровневого вменения с использованием MICE

Я пытаюсь ввести данные в набор данных с помощью продольного дизайна. Существует два предсказателя (экспериментальная группа и время) и одна переменная результата (оценка). Переменная кластеризации - это id.

Вот данные игрушки

set.seed(345)
A0 <- rnorm(4,2,.5)
B0 <- rnorm(4,2+3,.5)
A1 <- rnorm(4,6,.5)
B1 <- rnorm(4,6+2,.5)
A2 <- rnorm(4,10,.5)
B2 <- rnorm(4,10+1,.5)
A3 <- rnorm(4,14,.5)
B3 <- rnorm(4,14+0,.5)
score <- c(A0,B0,A1,B1,A2,B2,A3,B3)
id <- rep(1:8,times = 4, length = 32)
time <- rep(0:3, each = 8, length = 32)
group <- rep(c("A","B"), times =2, each = 4, length = 32)
df <- data.frame(id = id, group = group, time = time,  score = score)

# plots
(ggplot(df, aes(x = time, y = score, group = group)) + 
    stat_summary(fun.y = "mean", geom = "line", aes(linetype = group)) +
    stat_summary(fun.y = "mean", geom = "point", aes(shape = group), size = 3) +
    coord_cartesian(ylim = c(0,18)))

# now place some NAs
df[sample(1:nrow(df), 10, replace = F),"score"] <- NA

df

Если я правильно понимаю этот пост, в матрице предсказателя я должен указать переменную кластеризации id с -2 и двумя фиксированными предсказателями time и group с a 1. Таким образом

library(mice)

(ini <- mice(df, maxit=0))
(pred <- ini$predictorMatrix)
(pred["score",] <- c(-2, 1, 1, 0))
(imp <- mice(df, 
            method = c("", "", "", "2l.pan"),
            pred = pred, 
            maxit = 1, 
            seed = 71152))

Что я хотел бы знать:

  • Это продольная случайная перехватывающая модель вменения? Указание переменной id в качестве -2 обозначает ее как переменную класса, но в этот праймер для мыши, это говорит о том, что для многоуровневых моделей вы должны создать переменная всех 1 в кадре данных как константа, которая затем определяется как случайный перехват через 2 в матрице предсказателя. Однако (i) это основано на функции 2l.norm, а не на функции 2l.pan, поэтому я не уверен, где я здесь. Не требует ли функция 2l.pan этот столбец или спецификация случайных эффектов?
  • Можно ли указать модель продольных случайных склонов, и если да, то как?

Ответ 1

Этот ответ, вероятно, немного для вас, но он может помочь некоторым людям, которые читают это в будущем:

Как работать с 2l.pan

Ниже приведены некоторые сведения об определении многоуровневых моделей вменения с mice. Поскольку приложение является продольным, я использую термин "люди" для обозначения единиц на уровне 2. Это наиболее важные аргументы для 2l.pan, как указано в документации mice:

type

Вектор длины ncol(x), определяющий случайные и переменные класса. Случайные эффекты идентифицируются с помощью 2. Групповая переменная (только одна разрешено) кодируется как -2. Случайные эффекты также включают фиксированный эффект. Если для ковариаций X1 необходимо вычислить средства группы и в качестве дополнительных фиксированных эффектов выберите 3. В добавок к эффекты в 3, спецификация 4 также включает случайные эффекты X1.

Существует 5 разных кодов, которые вы можете использовать в матрице предикторов для переменных, вмененных в 2l.pan. Идентификатор человека кодируется как -2 (это отличается от 2l.norm). Чтобы включить предикторные переменные с фиксированными или случайными эффектами, эти переменные кодируются с помощью 1 или 2, соответственно. Если кодируется как 2, автоматически включается соответствующий фиксированный эффект.

Кроме того, 2l.pan предлагает коды 3 и 4, которые имеют похожие значения как 1 и 2, но будут включать дополнительный фиксированный эффект для среднего значения этой переменной. Это полезно, если вы пытаетесь моделировать переменные предиктора, изменяющиеся во времени, и между людьми.

intercept

Логическое определение того, автоматически ли добавляется перехват.

По умолчанию 2l.pan включает в себя перехват как фиксированного, так и случайного эффекта. По этой причине нет необходимости включать постоянный член в матрицу предсказателя. Если задано intercept=FALSE, это поведение изменяется, а перехват удаляется из модели вменения.

groupcenter.slope

Если TRUE, в случае группового значения (type есть 3 или 4), среднее значение группы центрирование для этих предикторов проводится перед тем, как делать вменения. По умолчанию используется FALSE.

Используя эту опцию, можно центрировать предикторные переменные вокруг значения человека вместо включения предикторной переменной "как есть" (т.е. без центрирования). Это относится только к переменным, закодированным как 3 или 4. Для предикторов, закодированных как 3, это не очень важно, потому что модели с центрированием и без него идентичны.

Однако, когда предикторные переменные кодируются как 4 (т.е. со случайным наклоном), то центрирование изменяет значение случайного эффекта, так что случайный уклон больше не применяется к переменной "как есть", но к отклонение от этой переменной внутри человека.


В вашем примере вы можете включить простой случайный уклон для time следующим образом:

library(mice)
ini <- mice(df, maxit=0)

# predictor matrix (following 'type')
pred <- ini$predictorMatrix
pred["score",] <- c(-2, 1, 2, 0)

# imputation method
meth <- c("", "", "", "2l.pan")

imp <- mice(df, method=meth, pred=pred, maxit=10, m=10)

В этом примере кодирование time как 3 или 4 не будет иметь большого смысла, потому что средство для лица time идентично для всех лиц. Однако, если у вас есть изменяющиеся во времени ковариаты, которые вы хотите включить как предикторные переменные в модели вменения, могут быть полезны 3 и 4.

Дополнительные аргументы, такие как intercept и groupcenter.slope, могут быть указаны непосредственно в вызове mice(), например:

imp <- mice(df, ..., groupcenter.slope=TRUE)

Относительно ваших вопросов

Итак, чтобы ответить на ваши вопросы, как указано в сообщении:

1) Да, 2l.pan предоставляет многоуровневую (или, скорее, двухуровневую) модель вменения. Перехват включен как фиксированный, так и случайный эффект по умолчанию (может быть изменен с помощью intercept=FALSE) и не нужно указывать в матрице предсказателя (это контрастирует с 2l.norm).

2) Да, вы можете указать случайные наклоны с помощью 2l.pan. Для этого предсказатели со случайными склонами кодируются как 2 или 4 в матрице предсказателя. Если закодировано как 2, включен случайный наклон. Если кодируется как 4, включается случайный наклон, а также дополнительный фиксированный эффект для средства пользователя этой переменной. Если кодируется как 4, значение случайного наклона может быть изменено с помощью groupcenter.slope=TRUE (см. Выше).

В этой статье также содержатся некоторые примеры работы с 2l.pan и другими функциями для вменения mutlivel: [Ссылка]

Ответ 2

Библиотека pan не требует перехвата.

Вы можете выполнить поиск в функции с помощью

library(pan)
?pan

Тем не менее mice использует обертку вокруг кастрюля под названием mice.impute.2l.pan с загруженной библиотекой mice, вы можете посмотреть справку для этой функции. В нем указано: у него есть параметры с именем intercept, который равен [a] Logical [and] determin[es] whether the intercept is automatically added. По умолчанию TRUE. Это определяется как случайный перехват по умолчанию. Обнаружил это после просмотра кода R для оболочки для мышей:

if (intercept) { x <- cbind(1, as.matrix(x)) type <- c(2, type) }

Где параметр функции pan type равен Vector of length ncol(x) identifying random and class variables. Перехват добавляется по умолчанию и определяется как случайный эффект.

Они предоставляют и пример, например, вы указали с 1 для "x" в матрице предсказания для фиксированных эффектов.

Он также указывает на 2l.norm, The random intercept is automatically added in mice.impute.2l.norm().

В нем есть несколько примеров с описаниями. Документация CRAN для pan может помочь вам.