为什么arm :: sim与merTools :: predictInterval预测的共现间隔不同?

时间:2019-01-03 15:35:58

标签: r arm multilevel-analysis

我正在比较arm的CI函数和sim()的{​​{1}}产生的predictInterval())。 我以merTools中的sleepstudy数据集为例。 我期望这两种方法的结果相同,但事实并非如此。我所缺少的两种方法之间的根本区别是什么?

代码如下:

导入测试数据

lme4

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)

使用merTols的CI

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

1 个答案:

答案 0 :(得分:0)

merTools CRAN页面进入此页面(https://cran.r-project.org/web/packages/merTools/vignettes/Using_predictInterval.html),直接比较sim和predictInterval。基本上,我的理解是,sim使用该模式作为点估计,忽略了随机截距的不确定性。预测间隔的间隔较宽,因为它们会造成这种额外的不确定性,因此可能更现实。