满= FALSE

时间:2018-10-29 22:52:16

标签: r mumin

当我尝试使用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可以解决此问题,但至少对我而言不会。

谢谢!

1 个答案:

答案 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)

comparison of model predictions