library(lme4)
fm1 <- lmer(Reaction ~ Days + (Days|Subject), data = sleepstudy)
要生成95%的CI,我可以使用软件包predictInterval()
中的merTools
函数。
library(merTools)
head(predictInterval(fm1, level = 0.95, seed = 123, n.sims = 100))
# fit upr lwr
# 1 255.4179 313.8781 184.1400
# 2 273.2944 333.2005 231.3584
# 3 291.8451 342.8701 240.8226
# 4 311.3562 359.2908 250.4980
# 5 330.3671 384.2520 270.7094
# 6 353.4378 409.9307 289.4760
在文档中,它说明了predictInterval()
函数
此功能提供了一种在多层模型预测中捕获模型不确定性的方法 适合lme4。通过绘制随机和固定效果的采样分布,然后 估算该分布上的拟合值,可以为 拟合值,其中包括模型中的所有变化(协方差参数的变化除外), θ。对于适合大中型数据集的模型,这比引导引导要快得多。
我的目标是获取所有拟合值,而不是上下CI,即对于每一行,我需要 原始n个模拟,可以从中计算这95%的CI。我检查了文档中的参数, 遵循此:
head(predictInterval(fm1, n.sims = 100, returnSims = TRUE, seed = 123, level = 0.95))
# fit upr lwr
# 1 255.4179 313.8781 184.1400
# 2 273.2944 333.2005 231.3584
# 3 291.8451 342.8701 240.8226
# 4 311.3562 359.2908 250.4980
# 5 330.3671 384.2520 270.7094
# 6 353.4378 409.9307 289.4760
它并没有得到100个模拟,而是给了我相同的输出。我在这里做错什么了?
第二个问题虽然我相信这更多是一个StatsExchange问题。
”通过绘制随机和固定样本分布 效果,然后。”`
如果有人可以解释我的话,它将如何绘制抽样分布?
答案 0 :(得分:1)
如果在predictInterval()
函数中指定newdata,则可以得到模拟值。
predInt <- predictInterval(fm1, newdata = sleepstudy, n.sims = 100,
returnSims = TRUE, seed = 123, level = 0.95)
simValues <- attr(predInt, "sim.results")
有关如何创建参数采样分布的详细信息,请参见帮助页面的“详细信息”部分。您可以通过以下方式获得拟合,上下边界的估计值:
fit <- apply(simValues, 1, function(x){quantile(x, probs=0.500) } )
lwr <- apply(simValues, 1, function(x){quantile(x, probs=0.025) } )
upr <- apply(simValues, 1, function(x){quantile(x, probs=0.975) } )