Интервалы прогнозирования от среднего по модели
Можно ли получить интервалы прогнозирования из среднего значения модели в R?
Я использовал MuMIn
пакет, чтобы моделировать в среднем несколько линейных смешанных моделей (которые я использую, используя lme4::lmer()
). MuMIn
Пакет поддерживает модельные прогнозы & st. ошибки оценок (если все модели компонентов поддерживают оценку ошибок.), которые удобны для получения [оценочного][1] доверительного интервала для прогноза.
Чтобы получить интервал прогнозирования из одной линейной смешанной модели, используя lme4::lmer()
Я мог бы следовать инструкциям Бена Болкера:
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] Как отмечает Бен Болкер, эти доверительные интервалы учитывают только неопределенность фиксированных эффектов, а не неопределенность случайных эффектов. lme4::bootMer()
даст более точную оценку доверительного интервала, но он работает только для одной модели, а не для средней модели.