如何用R的ggplot在零模型LM线上绘制预测值及复现基础代码
嘿,我来帮你搞定这两个关于ggplot和零模型回归的问题!
问题1:在ggplot中给零模型LM回归线添加预测值及垂直线
零模型(也就是只有截距的lm(wgt ~ 1))本质上是预测所有样本的响应变量均值。要在ggplot里实现这个,你可以按以下步骤来:
- 先拟合模型并生成预测值(或者直接计算均值,因为零模型的预测值就是响应变量的平均值)
- 用ggplot的图层添加回归线,再用线段连接每个点到它的预测值
问题2:复现基础R代码的正确ggplot实现
你写的ggplot代码有两个关键问题:
geom_smooth的formula参数写错了——应该用y ~ 1(ggplot会自动关联你在aes里定义的y变量),而不是硬写bdims$hgt ~ 1- 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
相关产品推荐
相关产品推荐

