如何在R中提取回归曲线及不确定带的x、y值并实现样条回归可视化
问题1:提取蓝色回归曲线对应的x、y数值
有两种常用实现方式:
- 直接提取ggplot内置计算结果:先将绘图结果保存为变量,再用
ggplot_build读取拟合数据
# 先保存绘图对象 p <- ggplot(train.data, aes(y, x) ) + geom_point() + stat_smooth(method = lm, formula = y ~ splines::bs(x, df =3)) # 提取曲线数据,第二组数据就是stat_smooth的计算结果 curve_data <- ggplot_build(p)$data[[2]] # 其中curve_data$x为原数据y列(绘图x轴)取值,curve_data$y为拟合的回归值,即曲线坐标
- 手动基于模型预测:生成均匀的自变量序列,用已训练的
model直接预测
# 生成覆盖自变量范围的均匀序列 seq_y <- seq(min(train.data$y), max(train.data$y), length.out = 100) # 预测拟合值 fit_value <- predict(model, newdata = data.frame(y = seq_y)) # 得到的seq_y和fit_value就是回归曲线的横、纵坐标点
问题2:base R的样条回归可视化方案
直接用base R的plot和lines函数即可实现,示例代码如下:
# 先绘制原始散点 plot(train.data$y, train.data$x, pch = 16, xlab = "y", ylab = "x") # 生成预测序列 seq_y <- seq(min(train.data$y), max(train.data$y), length.out = 100) fit_value <- predict(model, newdata = data.frame(y = seq_y)) # 绘制样条回归曲线 lines(seq_y, fit_value, col = "blue", lwd = 2)
如果需要绘制置信区间,补充如下代码即可:
# 计算置信区间上下限 ci_value <- predict(model, newdata = data.frame(y = seq_y), interval = "confidence") # 绘制灰色半透明置信带 polygon(c(seq_y, rev(seq_y)), c(ci_value[,"lwr"], rev(ci_value[,"upr"])), col = adjustcolor("gray", alpha.f = 0.3), border = NA)
问题3:灰色区间的类型与参数设置
你看到的灰色区间是拟合值的95%置信区间,是对回归曲线均值的不确定性估计,不是针对单个观测的预测区间。
参数调整可以直接在stat_smooth中配置:
- 调整置信水平:加
level参数,比如level = 0.99就会生成99%置信区间 - 切换为预测区间:加
method.args = list(interval = "prediction")即可切换为单个观测的预测区间 - 关闭置信区间:加
se = FALSE就会隐藏灰色区间
问题4:提取灰色不确定带的x、y数值
和提取曲线数据逻辑一致,两种实现方式:
- 从ggplot对象中提取:刚才拿到的
curve_data中,curve_data$ymin和curve_data$ymax分别是置信带的下、上限,对应横坐标还是curve_data$x - 手动预测得到:
seq_y <- seq(min(train.data$y), max(train.data$y), length.out = 100) ci_value <- predict(model, newdata = data.frame(y = seq_y), interval = "confidence") # seq_y是横坐标,ci_value[,"lwr"]是下限,ci_value[,"upr"]是上限
内容的提问来源于stack exchange,提问作者SophiaL
相关产品推荐
相关产品推荐

