使用sjPlot绘制glmer模型的随机斜率

6
过去,我使用了来自sjPlot包的sjp.glmer来可视化广义混合效应模型中不同斜率。然而,使用这个新包,我无法弄清楚如何绘制单个斜率,就像这里所示的固定效应概率随(随机)组水平变化的图形。

这是我认为可以生成该图的代码。但是在新版本的sjPlot中,我似乎无法做到这一点。

library(lme4)
library(sjPlot)
data(efc)
# create binary response
efc$hi_qol = 0
efc$hi_qol[efc$quol_5 > mean(efc$quol_5,na.rm=T)] = 1
# prepare group variable
efc$grp = as.factor(efc$e15relat)
# data frame for 2nd fitted model
mydf <- na.omit(data.frame(hi_qol = as.factor(efc$hi_qol),
                           sex = as.factor(efc$c161sex),
                           c12hour = as.numeric(efc$c12hour),
                           neg_c_7 = as.numeric(efc$neg_c_7),
                           grp = efc$grp))
# fit 2nd model
fit2 <- glmer(hi_qol ~ sex + c12hour + neg_c_7 + (1|grp),
              data = mydf,
              family = binomial("logit"))

我尝试使用以下代码绘制模型。
plot_model(fit2,type="re")
plot_model(fit2,type="prob")
plot_model(fit2,type="eff") 

我认为可能缺少某个标志,但是在阅读了文档之后,我找不到这个标志是什么。


只是想澄清一下:您所说的来自链接博客文章的 type = "ri.prob" 是什么意思?您能具体说明一下您尝试过什么以及出了什么问题吗? - Ben Bolker
我在谈论的是 plot 类型 = "ri.prob"。我将编辑我的问题以展示我尝试过的内容。 - user44796
2个回答

7
看起来这个可能符合您的需求:
(pp <- plot_model(fit2,type="pred",
       terms=c("c12hour","grp"),pred.type="re"))
  • type="pred": 绘制预测值
  • terms=c("c12hour", "grp"): 在预测中包括c12hour(作为x轴变量)和grp
  • pred.type="re": 随机效应

我还无法得到置信区间带(尝试了ci.lvl=0.9,但没有成功...)

pp+facet_wrap(~group)更接近于链接的博客文章中显示的图表(每个随机效应级别都有自己的面板...)

enter image description here


1
我正在使用您在此处提供的代码:http://bbolker.github.io/mixedmodels-misc/glmmFAQ.html#predictions-andor-confidence-or-prediction-intervals-on-predictions 来计算混合模型的置信区间或预测区间,但是我不确定当绘制随机效应的特定水平时,如何获取随机效应的CI/PI。 - Daniel

3

Ben已经发布了正确的答案。sjPlot使用ggeffects-package进行边际效应图绘制,因此另一种选择是直接使用ggeffects:

ggpredict(fit2, terms = c("c12hour", "grp"), type="re") %>% plot()

这里有一篇新的小品文,描述如何获取混合模型/随机效应的边际效应。然而,目前该图类型不支持置信区间。

在链接的博客文章中,type = "ri.prob"选项未对协变量进行调整,因此我首先删除了该选项,然后在ggeffects/sjPlot中正确重新实现了它。链接博客文章中显示的置信区间也不正确。一旦我弄清楚如何获得CI或预测区间,我也将添加此选项。


是否可以对预测值和置信区间进行exp()转换,以便获得曲线而不是直线?我一直在尝试在ggpredict中使用变换,但是我始终得到非平行的线。 - Rosa Maria
不,只能在响应比例上绘制预测。但是,您可以尝试 modelbased::estimate_link() 在链接比例上绘制预测。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接