0

当我尝试使用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 将解决该问题,但至少对我而言没有。

谢谢!

4

1 回答 1

2

将组件模型的预测与平均预测进行比较,您可以看到“完全平均”预测属于组件预测(这是应该的)。

另一方面,“子集平均”系数产生的预测相当有偏差。这是因为在计算平均值时忽略零系数会增加效果。

# 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)

模型预测的比较

于 2018-10-30T23:50:51.533 回答