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

如何基于glm预测值在ggplot中添加回归线

问题根因
  • geom_smooth()的调用逻辑错误:该图层本身的作用是根据传入的原始数据、指定的模型自动完成拟合+绘图,不需要提前用predict()计算预测值再传入
  • 代码里data$列名的写法不符合ggplot的映射逻辑,ggplot默认从ggplot(data=xx)传入的全局数据中调取列,额外加数据集前缀很容易出现变量长度不匹配的问题
  • 缺失值警告是因为原始数据集里有2行同时存在 predictor1/predictor2/响应变量的缺失值,拟合时会被自动剔除
正确实现方案

分为两种场景按需选择:

方案1:使用提前计算好的预测值绘图

如果已经通过predict()得到了预测结果,直接用geom_line()绘制即可,不需要调用geom_smooth():

  1. 先将预测值合并到数据集(如果要画平滑的回归线,建议单独生成预测用的均匀自变量序列,避免原数据自变量取值零散导致线不连贯)
# 假设原数据集为df,拟合好的回归模型为model
# 生成用于预测的标准化数据集:predictor1取原数据范围内的100个均匀值,predictor2固定为均值(也可按需固定为中位数等其他定值)
new_df <- data.frame(
  predictor1 = seq(min(df$predictor1, na.rm = TRUE), max(df$predictor1, na.rm = TRUE), length.out = 100),
  predictor2 = mean(df$predictor2, na.rm = TRUE)
)
# 计算对应预测值
new_df$predicted.values <- predict(model, newdata = new_df)
  1. 绘图时单独指定线图层的数据源
ggplot(df, aes(x = predictor1, y = 响应变量)) +
  geom_point(na.rm = TRUE) + # na.rm=TRUE可以跳过缺失值警告
  geom_line(data = new_df, aes(y = predicted.values), color = "red", linewidth = 1)

方案2:直接用geom_smooth完成双变量回归拟合

不需要提前计算预测值,直接在geom_smooth()里指定模型和公式即可得到完全一致的回归线:

ggplot(df, aes(x = predictor1, y = 响应变量)) +
  geom_point(na.rm = TRUE) +
  # method指定用线性回归,formula里补充第二个自变量,se控制是否显示置信区间
  geom_smooth(method = "lm", formula = y ~ x + predictor2, se = FALSE, color = "red", linewidth = 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:07