Прогнозирование на моделях со смешанным эффектом: что делать со случайными эффектами?

13

Давайте рассмотрим этот гипотетический набор данных:

set.seed(12345)

num.subjects <- 10

dose <- rep(c(1,10,50,100), num.subjects)
subject <- rep(1:num.subjects, each=4)
group <- rep(1:2, each=num.subjects/2*4)

response <- dose*dose/10 * group + rnorm(length(dose), 50, 30)

df <- data.frame(dose=dose, response=response, 
                 subject=subject, group=group)

мы можем использовать lmeдля моделирования ответа с моделью случайного эффекта:

require(nlme)
model <- lme(response ~ dose + group + dose*group, 
             random = ~1|subject, df)

Я хотел бы использовать predictрезультат этой модели, чтобы получить, например, ответ общего субъекта группы 1 на дозу 10:

pred <- predict(model, newdata=list(dose=10, group=1))

Однако с этим кодом я получаю следующую ошибку:

Error in predict.lme(model, newdata = list(dose = 10, group = 1)) : 
cannot evaluate groups for desired levels on 'newdata'

Чтобы избавиться от этого мне нужно сделать, например

pred <- predict(model, newdata=list(dose=10, group=1, subject=5))

Это, однако, на самом деле не имеет особого смысла для меня ... предмет является неприятным фактором в моей модели, так какой смысл включать его в predict? Если я поставлю номер темы, которой нет в наборе данных, predictвозвращается NA.

Это желаемое поведение predictв этой ситуации? Я что-то упускаю действительно очевидное?

Nico
источник
modelИксβ+ZγY~N(Иксβ+Zγ,σ2я)Z
usεr11852
@ user11852: просто чтобы уточнить, я думаю об этом как о модели, которая будет использоваться, например, в случае повторных измерений для одного и того же предмета.
Нико
Z
2
@ user11852: Я не ищу оценку по той же теме. Я делаю повторные измерения по различным предметам, чтобы получить оценки населения. Меня не волнуют предметы, которые я уже тестировал, так как у меня уже есть экспериментальный ответ ... Я хочу быть в состоянии предсказать, как новый субъект определенной группы отреагирует на стимул. Грег ответ действительно решает проблему.
Нико

Ответы:

17

Если вы посмотрите на справку, predict.lmeвы увидите, что у нее есть levelаргумент, который определяет, на каком уровне делать прогнозы. Значение по умолчанию - самое высокое или самое внутреннее, что означает, что если вы не укажете уровень, он будет пытаться прогнозировать на уровне субъекта. Если вы укажете level=0как часть вашего первого predictзвонка (без subject), то он даст прогноз на уровне населения и не будет нуждаться в номере субъекта.

Грег Сноу
источник