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

sjPlot包plot_model函数重排序项失效问题求助

解决sjPlot中plot_model预测图分类项与数据同步重排序的问题

核心问题在于:plot_model(type="pred")的绘图顺序由数据中分类变量的因子水平顺序决定,而非模型系数顺序或事后轴标签调整。之前的方法无效,是因为没有从数据层面定义变量顺序,以下是正确解决方案:

步骤1:将分类变量转换为自定义顺序的因子

在拟合模型前,先把ee2变量转换为因子,指定你需要的水平顺序(同时可直接设置标签,省去后续调整步骤):

# 直接修改原数据中的ee2为因子(或创建新变量避免修改原数据)
noday3$ee2 <- factor(
  noday3$ee2,
  levels = c("bl.b", "bl.a", "bag", "bed", "box", "digbox", "complex"),
  labels = c("Baseline \n (Pre)", "Baseline \n (Post)", "Bag", "Bed", "Box", "Dig-box", "Complex \n environment")
)

步骤2:重新拟合模型

用处理后的数据集重新拟合geeglm模型,此时模型会遵循因子水平的顺序处理变量:

lai <- geeglm(point.lai ~ ee2 + Observer + month,
              data = noday3, 
              id = ferret.id, 
              family = binomial, 
              corstr = "exchangeable")

步骤3:绘制预测图

直接调用plot_model即可,此时X轴项和对应数据会完全按照你定义的顺序显示,无需额外调整:

plot_model(lai, type = "pred", terms = c("ee2"),
           title = "",
           axis.title = c("EE on Day 1 and Baselines", "Probability (%) of Lying awake inattentive")) +
  theme_bw() +
  theme(axis.text.x = element_text(size = 14),
        axis.text.y = element_text(size = 14),
        axis.title.x = element_text(size = 16),
        axis.title.y = element_text(size = 16))

为什么之前的方法无效?

  • order.terms参数仅针对模型系数的排序,对type="pred"的预测值绘图不生效;
  • scale_x_discrete(limits)仅修改X轴标签的显示顺序,但底层预测数据的顺序未改变,导致标签与数据错位。

内容的提问来源于stack exchange,提问作者AMMD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:30:44