使用sjPlot绘制lmer多层模型交互图的问题求助
问题
我运行了一个多层模型,包含2个Level 2连续预测变量(A、B)、1个Level 1二分预测变量(cond,编码为-1和1),Y为因变量。拟合代码如下:
M2 <- lmer(Y ~ 1 + (1|subject) + A*cond + B*cond, data, na.action = na.omit) summary(M2) tab_model(M2)
输出里交互项显示为A × cond和cond × B,且用sjPlot绘制交互图时,执行代码:
plot_model(M2, type = "int", terms = "Pred*Mod", mdrt.values = c("minmax", "meansd", "zeromax", "quart", "all"), ci.lvl = NA)
得到的图默认是:A × cond以A为x轴,cond × B以cond为x轴。我需要每个交互都生成两种可视化:A × cond要增加以cond为x轴的图,cond × B要增加以B为x轴的图。
实现方法
sjPlot的plot_model函数中,terms参数的顺序直接决定了x轴变量(第一个元素)和分组/调节变量(第二个元素),通过手动指定terms的顺序,就能生成每个交互的两种方向的图:
1. 生成A×cond的两种交互图
(1)以A为x轴,cond为分组(默认方向)
# A作为x轴,cond作为分组线 plot_model(M2, type = "int", terms = c("A", "cond"), mdrt.values = "minmax", # 用A的最小值和最大值作为参考 ci.lvl = NA)
(2)以cond为x轴,A为分组
因为A是连续变量,需要指定其展示的参考水平(比如均值±标准差、最小值/最大值):
# cond作为x轴,A用均值±标准差作为分组线 plot_model(M2, type = "int", terms = c("cond", "A"), mdrt.values = "meansd", # 展示A的均值、均值+SD、均值-SD ci.lvl = NA)
2. 生成B×cond的两种交互图
(1)以cond为x轴,B为分组(默认方向)
# cond作为x轴,B用均值±标准差作为分组线 plot_model(M2, type = "int", terms = c("cond", "B"), mdrt.values = "meansd", ci.lvl = NA)
(2)以B为x轴,cond为分组
# B作为x轴,cond作为分组线 plot_model(M2, type = "int", terms = c("B", "cond"), mdrt.values = "minmax", ci.lvl = NA)
补充说明
mdrt.values参数可按需调整:"minmax"用变量的最小/最大值,"meansd"用均值±标准差,"quart"用四分位数,选择适合数据展示的水平即可。- 若需合并多个图,可使用
gridExtra::grid.arrange()或sjPlot自带的plot_grid()函数组合生成的图对象。
内容的提问来源于stack exchange,提问作者jwin
相关产品推荐
相关产品推荐

