当我尝试使用MuMIn
包的predict.averaging
从模型平均对象计算预测值时,我遇到了错误。我已经确信,当full
参数设置为FALSE
时,该函数应根据条件平均系数返回预测值。但是,它返回一个错误。请参见下面使用汽车数据集的示例。这与我的实际设置非常相似。
library(MuMIn)
options(na.action = "na.fail")
global.model <- glm(mpg ~ hp + drat + wt,
data=mtcars)
dr <- dredge(global.model)
mod.avg <- model.avg(dr, subset = delta < 2, fit = T)
summary(mod.avg)
predict(mod.avg, se.fit = TRUE, full = FALSE)
该错误表明full
被忽略,这意味着完整的模型系数用于预测值(不是我想要的)。我已经通过一些简单的手动检查值来确认了这一点。很明显,我正在检查predict()
的输出。注意这些值如何跳跃,表明系数设置为零或其他值。也有人建议将glm更改为lm可以解决此问题,但至少对我而言不会。
谢谢!
答案 0 :(得分:1)
将组件模型的预测与平均模型的预测进行比较,您会发现“完全平均”的预测属于组件预测的范围(应该如此)。
另一方面,“子集平均”系数产生的预测偏差很大。这是因为在计算平均值时,由于忽略了零系数,因此效果得到了增强。
# Full/subset averaged predictions
pyfa <- predict(mod.avg, full = TRUE)
pysa <- predict(mod.avg, full = FALSE)
# Note: full=FALSE works only with se.fit=FALSE
# Predictions from component models
pycm <- do.call("cbind", lapply(get.models(mod.avg, TRUE), predict))
n <- ncol(pycm)
k <- rep(1:3, c(n, 1, 1))
lty <- c(2,1,1); lwd <- c(1,2,2); col <- c(3,1,2)
matplot(cbind(pycm, pyfa, pysa), type = "l",
lty = lty[k], lwd = lwd[k], col = col[k],
ylab = "predicted")
legend("topleft", legend = c("component", "full average", "subset average"),
lty = lty, lwd = lwd, col = col)