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

如何用R的ggplot在零模型LM线上绘制预测值及复现基础代码

嘿,我来帮你搞定这两个关于ggplot和零模型回归的问题!

问题1:在ggplot中给零模型LM回归线添加预测值及垂直线

零模型(也就是只有截距的lm(wgt ~ 1))本质上是预测所有样本的响应变量均值。要在ggplot里实现这个,你可以按以下步骤来:

  • 先拟合模型并生成预测值(或者直接计算均值,因为零模型的预测值就是响应变量的平均值)
  • 用ggplot的图层添加回归线,再用线段连接每个点到它的预测值
问题2:复现基础R代码的正确ggplot实现

你写的ggplot代码有两个关键问题:

  1. geom_smooth的formula参数写错了——应该用y ~ 1(ggplot会自动关联你在aes里定义的y变量),而不是硬写bdims$hgt ~ 1
  2. ggplot里没有segments()这个基础R函数,得用geom_segment()来绘制线段,还要正确映射x、y、xend、yend这些变量

完整可运行代码

先确保加载了需要的包:

library(ggplot2)
library(broom) # 和你原代码一样用augment生成预测数据

然后按照你的流程复现:

# 拟合零模型并生成带预测值的数据框
model1 <- lm(wgt ~ 1, data = bdims)
model1_null <- augment(model1)

# 用ggplot复现基础R的绘图效果
ggplot(model1_null, aes(x = hgt, y = wgt)) +
  geom_point() + # 绘制散点
  # 添加零模型的蓝色回归线(线宽2,去掉置信区间)
  geom_smooth(method = "lm", formula = y ~ 1, se = FALSE, color = "blue", linewidth = 2) +
  # 绘制每个点到预测值的红色垂直线
  geom_segment(aes(xend = hgt, yend = .fitted), color = "red")

额外简化方案

其实零模型的回归线就是一条水平的均值线,你完全可以不用geom_smooth,直接用geom_hline更高效,甚至不需要拟合模型:

# 直接计算均值并添加到数据框
bdims <- bdims %>% mutate(pre_null = mean(wgt))

ggplot(bdims, aes(x = hgt, y = wgt)) +
  geom_point() +
  geom_hline(yintercept = mean(bdims$wgt), color = "blue", linewidth = 2) +
  geom_segment(aes(xend = hgt, yend = pre_null), color = "red")

这个结果和基础R代码完全一致,代码还更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:56:41