Я сейчас пытаюсь помочь коллеге и просто не могу найти решение. Поэтому я надеюсь, что кто-то еще сможет нам помочь.
У меня есть набор данных, содержащий данные о весе, оцененные по разным планам исследований, для разных видов в разных исследованиях (исследование включало несколько схем и несколько видов). Я хочу исследовать связь между весом и планом исследования, используя исследование и виды в качестве вложенного случайного эффекта.
Модель выглядит следующим образом и работает нормально:
m <- lmer(weight ~ design +(1|study/species), data=dataset)
Я пытался делать прогнозы для разных видов, но с помощью общего исследования c: я создал новый data.table new.dt, который содержит уникальные комбинации design-видов-комбинаций исходного набора данных, и добавил столбец для отчета.
new.dt <- unique(dataset[,.(design, species))
new.dt$study <- "xyz"
Затем я использовал функцию предсказания и разрешил новые уровни.
new.dt$p <- predict(m, newdata=new.dt, re.form= NULL, allow.new.levels=TRUE)
Я не получаю ошибку, но я получаю одно и то же предсказание для каждого вида в дизайне.
Есть ли способ сохранить исходные уровни одной части вложенного случайного эффекта и сделать другую часть новым уровнем?
Заранее спасибо!
ОБНОВЛЕНИЕ - рабочий пример : Эта проблема не зависит от набора данных.
library(data.table)
library(lme4)
dt <- data.table(expand.grid(design=c("a", "b"), species=c("x", "y", "z"), report=c("1", "2", "3"), count=seq(1, 10, 1)))
dt$weight <- 0
dt[species=="x"]$weight <- rnorm(60, 70, 10)
dt[species=="y"]$weight <- rnorm(60, 80, 15)
dt[species=="z"]$weight <- rnorm(60, 90, 20)
dt[design=="a"]$weight <- dt[design=="a"]$weight- 0.1*dt[design=="a"]$weight
dt[report=="1"]$weight <- dt[report=="1"]$weight+0.15*dt[report=="1"]$weight
dt[report=="2"]$weight <- dt[report=="2"]$weight-0.15*dt[report=="1"]$weight
m <-lmer(weight~design+(1|report/species), data=dt)
dt.pred <- unique(dt[,c(1:2)])
dt.pred$report<- "xyz"
dt.pred$pred<-predict(m, newdata=dt.pred, re.form= NULL, allow.new.levels=TRUE)