Прогнозирование с lme4 на новых уровнях

Я пытаюсь подогнать под модель смешанных эффектов, а затем использовать эту модель для создания оценок для нового набора данных, который может иметь разные уровни. Я ожидал, что оценки нового набора данных будут использовать среднее значение оцененных параметров, но, похоже, это не так. Вот минимальный рабочий пример:

library(lme4)
d = data.frame(x = rep(1:10, times = 3),
               y = NA,
               grp = rep(1:3, each = 10))
d$y[d$grp == 1] = 1:10 + rnorm(10)
d$y[d$grp == 2] = 1:10 * 1.5 + rnorm(10)
d$y[d$grp == 3] = 1:10 * 0.5 + rnorm(10)
fit = lmer(y ~ (1+x)|grp, data = d)
newdata = data.frame(x = 1:10, grp = 4)
predict(fit, newdata = newdata, allow.new.levels = TRUE)

В этом примере я, по сути, определяю три группы с разными уравнениями регрессии (наклон 1, 1,5 и 0,5). Однако, когда я пытаюсь предсказать новый набор данных с невидимым уровнем, я получаю постоянную оценку. Я ожидал, что ожидаемое значение наклона и точки пересечения будет использоваться для создания прогнозов для этих новых данных. Я жду не того? Или что я делаю не так со своим кодом?


person random_forest_fanatic    schedule 25.03.2015    source источник
comment
Я считаю, что predict.merMod просто использует коэффициенты из частей модели с фиксированными эффектами для новых уровней. y ~ x + (x|grp) - более разумная спецификация модели.   -  person Roland    schedule 25.03.2015
comment
Ах, в этом есть смысл! Если вы добавите это в качестве ответа, я приму это.   -  person random_forest_fanatic    schedule 26.03.2015


Ответы (2)


Я обычно не включаю случайный уклон без фиксированного уклона. Кажется, что predict.merMod со мной согласен, потому что он просто использует только фиксированные эффекты для предсказания новых уровней. В документации говорится, что «прогноз будет использовать безусловные (на уровне популяции) значения для данных с ранее ненаблюдаемыми уровнями», но эти значения, похоже, не оцениваются с помощью спецификации вашей модели.

Итак, предлагаю такую ​​модель:

fit = lmer(y ~ x + (x|grp), data = d)
newdata = data.frame(x = 1:10, grp = 4)
predict(fit, newdata = newdata, allow.new.levels = TRUE)
#       1         2         3         4         5         6         7         8         9        10 
#1.210219  2.200685  3.191150  4.181616  5.172082  6.162547  7.153013  8.143479  9.133945 10.124410

Это то же самое, что и использование только части модели с фиксированными эффектами:

t(cbind(1, newdata$x) %*% fixef(fit))
#         [,1]     [,2]    [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]    [,10]
#[1,] 1.210219 2.200685 3.19115 4.181616 5.172082 6.162547 7.153013 8.143479 9.133945 10.12441
person Roland    schedule 26.03.2015
comment
Я понимаю, что фиксированные эффекты будут использоваться только в новом прогнозе. Но как добавить случайные эффекты? - person Sapiens; 10.09.2020
comment
Я не понимаю твоего вопроса. - person Roland; 10.09.2020
comment
Как вы сказали ранее: «predic.merMod просто использует коэффициенты из частей модели с фиксированными эффектами для новых уровней». Есть ли способ также включить случайные эффекты (x | grp)? - person Sapiens; 10.09.2020
comment
Конечно, это по умолчанию. Вам просто нужно использовать значение по умолчанию allow.new.levels = FALSE. Конечно, вы не можете предсказать случайные эффекты для новых уровней (которые не были частью обучающих данных). Это концептуально невозможно. - person Roland; 10.09.2020
comment
Понятно. Мне интересно найти оценку случайных эффектов для совершенно нового предмета, полагаю, я использую неправильный подход. В любом случае спасибо. - person Sapiens; 12.09.2020

Может быть, это недостаточно ясно, но я думаю, что документация для ?predict.merMod ясно указывает (разумно), что происходит, когда allow.new.levels=TRUE. Я предполагаю, что двусмысленность может заключаться в том, что означают «безусловные (на уровне популяции) ценности» ...

allow.new.levels: логично, если разрешены новые уровни (или значения NA) в «новых данных». Если FALSE (по умолчанию), такие новые значения в «newdata» вызовут ошибку; если TRUE, то прогноз будет использовать безусловные (на уровне популяции) значения для данных с ранее ненаблюдаемыми уровнями (или NAs).

person Ben Bolker    schedule 26.03.2015