如何为ggformula包的geom_spline添加置信区间?
为geom_spline添加置信区间的方法
geom_spline本身没有像geom_smooth那样内置的置信区间绘制参数,需要手动拟合样条模型并计算置信区间,再用geom_ribbon添加到图中。以下是具体实现步骤:
1. 拟合模型并计算置信区间
按分组拟合样条模型,生成包含预测值和置信区间的数据集:
library(ggplot2) library(splines) library(dplyr) # 按condition分组处理,拟合样条模型并计算置信区间 pred_data <- data_long4 %>% group_by(condition) %>% do({ # 用自然样条拟合模型,df参数与geom_spline保持一致 model <- lm(Area ~ ns(time, df = 3), data = .) # 生成更平滑的time序列用于预测 new_time <- seq(min(.$time), max(.$time), length.out = 100) # 计算预测值及95%置信区间 pred <- predict(model, newdata = data.frame(time = new_time), interval = "confidence") # 整理结果为数据框 data.frame( time = new_time, fit = pred[, "fit"], lwr = pred[, "lwr"], upr = pred[, "upr"], condition = .$condition[1] ) })
2. 绘制带置信区间的图形
将散点、样条曲线和置信区间组合绘制:
ggplot(data_long4, aes(x = time, y = Area, color = condition)) + geom_point() + # 绘制样条拟合曲线 geom_spline(nknots = 5, df = 3) + # 添加置信区间带,alpha控制透明度 geom_ribbon( data = pred_data, aes(y = fit, ymin = lwr, ymax = upr, fill = condition), alpha = 0.2, color = NA # 隐藏置信区间带的边框 )
说明
- 这里使用
ns()自然样条函数拟合模型,参数df与geom_spline中的设置保持一致,确保拟合曲线和置信区间的匹配度。 - 如果需要使用其他类型的样条(如B样条),可替换为
bs()函数,同时调整geom_spline的对应参数即可。
内容的提问来源于stack exchange,提问作者user4730784
相关产品推荐
相关产品推荐

