如何用sjPlot/ggplot绘制多预测模型的两条回归直线及置信区间
解决方案
要把两个预测变量的主效应(带置信区间)合并到同一幅图中,你可以直接用ggpredict提取每个变量的预测数据,手动合并后用ggplot2绘图,这样就能避免plot_model默认生成交互项的问题。具体步骤如下:
提取两个变量的预测数据
用ggpredict分别获取disp和hp的预测值及置信区间,这是plot_model底层使用的函数:library(sjPlot) library(ggplot2) dat = mtcars fit = lm(mpg ~ disp + hp + drat + wt + qsec, data = dat) # 获取每个变量的预测数据 pred_disp <- ggpredict(fit, terms = "disp") pred_hp <- ggpredict(fit, terms = "hp")标记并合并数据集
给每个数据集添加标识列,区分是哪个预测变量的结果,再合并成一个数据集:# 添加变量标识 pred_disp$predictor <- "发动机排量(disp)" pred_hp$predictor <- "马力(hp)" # 合并数据 pred_combined <- rbind(pred_disp, pred_hp)用ggplot2绘制合并图
基于合并后的数据集绘图,同时展示两条回归线和各自的置信区间:ggplot(pred_combined, aes(x = x, y = predicted, color = predictor, fill = predictor)) + # 绘制回归线 geom_line(linewidth = 1) + # 绘制置信区间(半透明填充) geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = 0.2, color = NA) + # 设置标签 labs(x = "预测变量值(6点量表)", y = "mpg预测值", color = "预测变量", fill = "预测变量") + # 可选:使用简洁主题 theme_minimal()
为什么terms = c("disp", "hp")会生成交互项?
plot_model的terms参数传入多个变量时,默认逻辑是绘制条件效应:即第一个变量在第二个变量的不同水平下的效应(也就是交互视角的展示),而非两个变量各自的主效应。所以要实现你的需求,必须手动提取单个变量的预测数据再合并。
内容的提问来源于stack exchange,提问作者format_0
相关产品推荐
相关产品推荐

