调试时,“取消管道”代码很有用,这样您就可以看到哪里出了问题(我认为有一些帮助程序包用于此目的,但不记得它们是什么......)
p1 <- lmer(y.axis ~ x.axis + (1|rf1/rf2), data = df)
## fine
p2 <- predict(p1, se = TRUE, newdata = list(x.axis = c("A","B","C","D"),
rf1 = c("W","X","Y","Z"),
rf2 = c("1","2")))
所以我们可以看到问题发生在predict
。第一个明显的问题是predict
方法用于merMod
对象(即由lmer
: see ?predict.merMod
)没有se
参数(如果你想要预测的标准错误,你可能需要看看像这样的包ggeffects
);这会导致“忽略未使用的参数”警告。
然而,采取se = TRUE
out 仍然给我们同样的错误......但是newdata
数据框而不是列表似乎可以工作(这也在?predict.merMod
).
newdat <- data.frame(x.axis = c("A","B","C","D"),
rf1 = c("W","X","Y","Z"),
rf2 = c("1","2"))
p2 <- predict(p1, newdata = newdat)
但是,您的其余代码将无法工作,因为(与predict
线性模型的方法),predict()
不返回包含预测和标准错误的列表。
仔细一看,我不认为ggpredict
会做你想做的事。您可以使用GLMM 常见问题解答中的食谱 https://bbolker.github.io/mixedmodels-misc/glmmFAQ.html#lme用于计算预测的 SE(请注意,这仅包含固定效应中的不确定性——剩下的就是一堆蠕虫)。
mm <- model.matrix(delete.response(terms(p1)), newdat)
se.fit <- sqrt(diag(mm %*% tcrossprod(vcov(p1),mm)))
或者,您可以使用参数引导(slow但准确):
bb <- bootMer(p1, function(m) predict(m, newdat), nsim = 1000, seed = 101)
confint(bb)
2.5 % 97.5 %
1 0.7713446 1.451530
2 1.1581111 1.825785
3 0.9152968 1.570501
4 0.7163327 1.446359