【发布时间】:2015-02-05 23:46:39
【问题描述】:
这可能更像是一个错误报告而不是一个问题,但是:为什么显式使用 newdata 参数来预测使用与训练数据相同的数据集有时会产生不同的预测,而不是省略 newdata 参数并使用显式训练数据集?
library(lme4)
packageVersion("lme4") # 1.1.8
m1 <- glmer(myformula, data=X, family="binomial")
p1 <- predict(m1, type="response")
p2 <- predict(m1, type="response", newdata=X)
all(p1==p2) # FALSE
这不仅仅是一个舍入错误。我看到cor(p1,p2) 返回 0.8。
这似乎只适用于有坡度的模型。在下图中,implicit 表示没有新数据的 predict(..., type="response"),explicit 表示 predict(..., type="response", newdata=X),其中 X 与训练相同。模型 1 与其他模型的唯一区别是模型 1 只包含(随机)截距,而其他模型具有随机截距和随机斜率。
【问题讨论】:
-
向reproducible example 提供示例输入数据会很有帮助,这样我们也可以运行代码进行验证。请务必包括您指定公式的方式。
-
@MrFlick;试试
m1 <- lmer(Reaction ~ Days + (Days||Subject), sleepstudy) -
嗯,使用
newX而不是newdata,预测结果是相等的 -
@user20650 你是对的! newX 可以解决问题。对于那些在家玩的人,请尝试
?lme4::predict.merMod。但是为什么lme4::predict.merMod对待newdata和newX的方式不同呢? -
对话在github.com/lme4/lme4/issues/279 继续。我很难思考这些平台之间可能有什么不同(FWIW,我不知道预测方法在 1.1-7 和 1.1-8 之间有任何变化......)