Rozważmy ten hipotetyczny zestaw danych:
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)
możemy użyć lme
do modelowania odpowiedzi za pomocą modelu efektu losowego:
require(nlme)
model <- lme(response ~ dose + group + dose*group,
random = ~1|subject, df)
Chciałbym wykorzystać predict
wynik tego modelu, aby uzyskać na przykład odpowiedź ogólnego podmiotu z grupy 1 na dawkę 10:
pred <- predict(model, newdata=list(dose=10, group=1))
Jednak z tym kodem pojawia się następujący błąd:
Error in predict.lme(model, newdata = list(dose = 10, group = 1)) :
cannot evaluate groups for desired levels on 'newdata'
Aby się go pozbyć, muszę na przykład zrobić
pred <- predict(model, newdata=list(dose=10, group=1, subject=5))
Nie ma to jednak dla mnie większego sensu ... temat jest czynnikiem uciążliwym w moim modelu, więc w jakim sensie musi to uwzględniać predict
? Jeśli wstawię numer podmiotu nieobecny w zbiorze danych, predict
zwraca NA
.
Czy jest to pożądane zachowanie predict
w tej sytuacji? Czy brakuje mi czegoś naprawdę oczywistego?
model
Odpowiedzi:
Jeśli spojrzysz na pomoc
predict.lme
, zobaczysz, że ma onalevel
argument, który określa, na którym poziomie dokonać prognoz. Wartością domyślną jest najwyższa lub najbardziej wewnętrzna, co oznacza, że jeśli nie określisz poziomu, próbuje on przewidzieć na poziomie przedmiotu. Jeśli określiszlevel=0
jako część pierwszegopredict
połączenia (bezsubject
), poda ono prognozę na poziomie populacji i nie będzie potrzebować numeru przedmiotu.źródło