从模型平均值预测间隔

时间:2018-02-06 21:34:41

标签: r prediction lme4 mumin

是否可以从R中的模型平均值获得预测区间?

我已经使用MuMIn软件包对几个线性混合模型进行了模型平均(我使用lme4::lmer()拟合)。 MuMIn包支持模型预测& ST。估计误差(如果所有组件模型都支持估计误差),这便于获得预测的[估计] [1]置信区间。

要使用lme4::lmer()从单个线性混合模型得到预测区间,我可以关注Ben Bolker's instructions

library(lme4)
data("Orthodont",package="MEMSS")
fm1 <- lmer(
    formula = distance ~ age*Sex + (age|Subject)
    , data = Orthodont
)
newdat <- expand.grid(
    age=c(8,10,12,14)
    , Sex=c("Female","Male")
    , distance = 0
)
newdat$distance <- predict(fm1,newdat,re.form=NA)
mm <- model.matrix(terms(fm1),newdat)
## or newdat$distance <- mm %*% fixef(fm1)
pvar1 <- diag(mm %*% tcrossprod(vcov(fm1),mm))
tvar1 <- pvar1+VarCorr(fm1)$Subject[1]  ## must be adapted for more complex models
cmult <- 2 ## could use 1.96
newdat <- data.frame(
    newdat
    , plo = newdat$distance-cmult*sqrt(pvar1) # Confidence Interval
    , phi = newdat$distance+cmult*sqrt(pvar1) # Confidence Interval
    , tlo = newdat$distance-cmult*sqrt(tvar1) # Prediction Interval
    , thi = newdat$distance+cmult*sqrt(tvar1) # Prediction Interval
)

但是我怎么能为几个平均在一起的模型做到这一点?这给了我一个[粗略] [1]置信区间,但我不清楚如何平均模型间的预测区间:

library(lme4)
library(MuMIn)
data("Orthodont",package="MEMSS")
fit_full <- lmer(
   formula = distance ~ age*Sex + (age|Subject), 
   data = Orthodont,
   REML = FALSE, 
   na.action = 'na.fail'
)

fit_dredge <- dredge(fit_full)

fit_ma <- model.avg(object = get.models(fit_dredge, subset = delta <= 4))

newdat <- expand.grid(
   age=c(8,10,12,14),
   Sex=c("Female","Male"),
   distance = 0
)

predicted <- predict(fit_ma,newdat,re.form=NA, se.fit = TRUE)
newdat$distance <- predicted$fit
newdat$distance_lower_CI <- predicted$fit - 1.96*predicted$se.fit
newdat$distance_upper_CI <- predicted$fit + 1.96*predicted$se.fit

[1]正如Ben Bolker所指出的here,这些置信区间仅考虑固定效应的不确定性,而不是随机效应的不确定性。 lme4::bootMer()将更好地估计置信区间,但它仅适用于单个模型,而不适用于模型平均值。

0 个答案:

没有答案