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

使用sjplot与ggplot绘制模型结果存差异,求正确展示方法

问题描述

我之前用sjPlot绘制二元数据的模型输出结果效果不错,但在绘制不同性别对应的错误概率时,sjPlot和ggplot的脚本得到了不同的可视化结果。

sjPlot 实现代码

sexorder <- c( "Female", "Male")

plot_model(model1, type = "pred",show.p=TRUE, terms = "Sex",ci.lvl=0.95,show.data = F,
           axis.title = c("","Probability of Error"),
           title="")+scale_x_discrete(limits=sexorder)

对应的图表:
sjplot绘制的错误概率图

ggplot 实现代码

library(scales)

ggplot(Mdb, aes(Sex, Erreur)) +
  stat_summary(fun.data=mean_cl_boot, geom="errorbar", width=0.2) +
  stat_summary(fun.y=mean, geom="point", shape=21, fill="red", size=2) +
  scale_y_continuous(labels=percent_format(), limits=c(0,1))+
  coord_cartesian(ylim=c(0,0.15))

对应的图表:
ggplot绘制的错误概率图

请问我是否采用了正确的方法来展示模型得出的结果?


解答

这两种方法展示的不是同一类结果,可视化差异是必然的:

  • sjPlot的plot_model(type="pred")是从你拟合的model1(应该是逻辑回归这类二元模型)中,基于模型参数预测不同性别对应的错误概率,同时给出模型层面的置信区间。它反映的是模型对群体概率的推断结果,还会自动将模型中其他协变量固定在均值/参考水平,排除无关变量干扰。
  • 你的ggplot代码是直接对原始数据Mdb中的Erreur变量做统计:用自助法计算原始数据中不同性别组的均值和置信区间,完全没有用到拟合后的model1,只是展示原始数据的分组统计特征,和模型推断无关。

如果你的目标是展示模型得出的结果,那sjPlot的方法是正确的——它直接基于模型输出的预测值,体现的是模型对性别与错误概率关系的推断。而当前的ggplot代码只是描述原始数据的分组均值,不能用来展示模型结果。

要是想用ggplot复刻sjPlot的模型预测结果,你需要先从model1中提取预测概率(包含置信区间),再把这些预测数据传给ggplot绘图。比如可以用predict()函数生成模型预测值,或者用sjPlot::get_model_data()提取预测数据,再基于这些数据做ggplot可视化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:15:06