使用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)
对应的图表:
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))
对应的图表:
请问我是否采用了正确的方法来展示模型得出的结果?
解答
这两种方法展示的不是同一类结果,可视化差异是必然的:
- 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
相关产品推荐
相关产品推荐

