我正在比较arm的CI
函数和sim()
的{{1}}产生的confidence-interval(predictInterval()
)。
我以merTools
中的sleepstudy
数据集为例。
我期望这两种方法的结果相同,但事实并非如此。我所缺少的两种方法之间的根本区别是什么?
代码如下:
lme4
sleepstudy <- as_tibble(sleepstudy) %>%
mutate(id = rep(1:18, each = 10)) %>%
dplyr::select(id, Days, Reaction) %>%
filter(id <= 16)
这是为了比较后来由 sim 和 preditInterval 生成的中值。
lmerfit <- lmer(Reaction ~ Days + (Days | id), data = sleepstudy)
sleepstudy$predicted <- predict(lmerfit, newdata=sleepstudy, allow.new.levels=T)
sims <- sim(lmerfit, n.sims = 1000)
yhat <- fitted(sims, lmerfit)
sleepstudy$lower <- apply(yhat, 1, quantile, prob=0.025)
sleepstudy$median <- apply(yhat, 1, quantile, prob=0.5)
sleepstudy$upper <- apply(yhat, 1, quantile, prob=0.975)
作为一个示例,我正在绘制第一个数据以及两个不同的CI预测。黑点是数据。红点是来自preds <- predictInterval(lmerfit,
newdata = sleepstudy,
n.sims = 1000,
include.resid.var=FALSE,
level=0.95,
stat="median")
sleepstudy <- cbind(sleepstudy, preds)
的预测值。
黑色线和黑色虚线分别是lmerfit
中的CI和95%CI。
红线和虚线分别是arm::sim
中的CI和95%CI。
预测值和模拟中值相同,但CI却大不相同。可能是什么原因?哪个是准确的?
merTools::predictInterval
答案 0 :(得分:0)
merTools CRAN页面进入此页面(https://cran.r-project.org/web/packages/merTools/vignettes/Using_predictInterval.html),直接比较sim和predictInterval。基本上,我的理解是,sim使用该模式作为点估计,忽略了随机截距的不确定性。预测间隔的间隔较宽,因为它们会造成这种额外的不确定性,因此可能更现实。