Давайте рассмотрим этот гипотетический набор данных:
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
в этой ситуации? Я что-то упускаю действительно очевидное?
model
Ответы:
Если вы посмотрите на справку,
predict.lme
вы увидите, что у нее естьlevel
аргумент, который определяет, на каком уровне делать прогнозы. Значение по умолчанию - самое высокое или самое внутреннее, что означает, что если вы не укажете уровень, он будет пытаться прогнозировать на уровне субъекта. Если вы укажетеlevel=0
как часть вашего первогоpredict
звонка (безsubject
), то он даст прогноз на уровне населения и не будет нуждаться в номере субъекта.источник