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

如何用sjPlot/ggplot绘制多预测模型的两条回归直线及置信区间

解决方案

要把两个预测变量的主效应(带置信区间)合并到同一幅图中,你可以直接用ggpredict提取每个变量的预测数据,手动合并后用ggplot2绘图,这样就能避免plot_model默认生成交互项的问题。具体步骤如下:

  1. 提取两个变量的预测数据
    用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")
    
  2. 标记并合并数据集
    给每个数据集添加标识列,区分是哪个预测变量的结果,再合并成一个数据集:

    # 添加变量标识
    pred_disp$predictor <- "发动机排量(disp)"
    pred_hp$predictor <- "马力(hp)"
    
    # 合并数据
    pred_combined <- rbind(pred_disp, pred_hp)
    
  3. 用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:21:57