You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:17:01