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
相关产品推荐
相关产品推荐

