我目前正试图帮助同事,但我无法找到解决方案。所以我希望有人能够帮助我们。
我有一个数据集,其中包含使用不同研究设计对不同物种进行评估的重量数据(一项研究包括多个设计和多个物种)。我想调查体重与研究设计之间的关系,使用研究和物种作为嵌套随机效应。
模型如下,并且运行良好:
m <- lmer(weight ~ design +(1|study/species), data=dataset)
我试图为不同的物种做出预测,但只进行了一项通用研究: 我创建了一个名为new.dt的新数据表,其中包含原始数据集中唯一的设计-物种组合,并添加了一个报告列。
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)
merTools
包,通过模拟生成混合效应模型的预测结果。文档链接在这里。 - ulfelderspecies:study
)的值为8.15——如果这是问题的正确答案。 - I HoVarCorr(m)
返回的方差 -- 只是一个想法,如果方差非常小/接近零,那么预测结果可能没有什么差异。只是一个想法。 - user20650re.form=NA
或re.form=~0
相同,即没有随机效应。我想知道这是否相关:“对于以前未观察到的水平(或NAs)的数据,预测将使用无条件(人口水平)值。” - user20650