0

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

代码如下:

导入测试数据

sleepstudy <- as_tibble(sleepstudy) %>%
  mutate(id = rep(1:18, each = 10)) %>%
  dplyr::select(id, Days, Reaction) %>%
  filter(id <= 16)

lme4 的多级模型

lmerfit <- lmer(Reaction ~ Days + (Days | id), data = sleepstudy)

生成预测

这是为了比较simpreditInterval稍后生成的中值。

sleepstudy$predicted <- predict(lmerfit, newdata=sleepstudy, allow.new.levels=T)

使用手臂的 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)

使用 merTols 的 CI

preds <- predictInterval(lmerfit, 
newdata = sleepstudy, 
n.sims = 1000, 
include.resid.var=FALSE, 
level=0.95, 
stat="median")
sleepstudy <- cbind(sleepstudy, preds)

例如,我将第一个数据与两个不同的 CI 预测一起绘制。黑点是数据。红点是来自 的预测值lmerfit。黑线和黑色虚线分别是中位数和 95% CI arm::sim。红线和虚线分别是中位数和 95% CI merTools::predictInterval

预测值和模拟中值相同,但 CI 有很大不同。可能是什么原因?哪一个是准确的?

ggplot(data =  filter(sleepstudy, id == 1), aes(x=Days, y=Reaction)) +
  geom_point() +
  geom_point(aes(y=predicted), col = "red") +
  geom_line(aes(y=median), col ="black" ) +
  geom_line(aes(y=lower), col ="black", lty = 2) +
  geom_line(aes(y=upper), col ="black", lty = 2) +
  geom_line(aes(y=fit), col = "red") +
  geom_line(aes(y=lwr), col = "red", lty = 2) +
  geom_line(aes(y=upr), col = "red", lty = 2)
4

1 回答 1

0

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

于 2019-01-03T17:21:22.780 回答