R中扩展模型绘图X轴时,如何同步延伸模型线与置信区间?
解决ggplot扩展X轴后模型线与置信区间不延伸的问题
问题根源
你当前的预测数据wpred仅基于原始数据集的Year范围(1967-2019)生成,扩展X轴到2100后,超出原始数据范围的部分没有对应的拟合值和置信区间,因此模型线和置信区间无法延伸。
解决步骤
需要生成覆盖1967到2100的完整Year序列,用该序列重新预测模型的拟合值与置信区间,再基于新数据绘图:
- 生成扩展范围的Year序列
# 创建包含1967到2100所有年份的新数据框 new_data <- data.frame(Year = seq(from = 1967, to = 2100, by = 1))
- 基于新序列预测拟合值与置信区间
# 使用drm模型预测扩展范围的结果,包含95%置信区间 wpred_extended <- predict(wmod, newdata = new_data, interval = 'conf', level = 0.95) # 合并新年份数据与预测结果 y_extended <- cbind(new_data, wpred_extended)
- 重新绘制图形
注:原代码中geom_line(aes(y=fitted(w2)))的w2应为wmod(笔误修正),绘图时用原始数据点,用扩展后的预测数据画模型线和置信区间:
ggplot() + # 绘制原始数据点 geom_point(data = women, aes(x = Year, y = Time)) + # 绘制扩展范围的模型拟合线 geom_line(data = y_extended, aes(x = Year, y = fit)) + # 绘制扩展范围的置信区间 geom_ribbon(data = y_extended, aes(x = Year, ymin = Lower, ymax = Upper), alpha = 0.3, fill = "pink") + theme_minimal() + ggtitle('Womens Fitted Model') + theme(plot.title = element_text(hjust = 0.5, face = "bold")) + # 设置X轴范围 scale_x_continuous(limits = c(1967, 2100))
额外说明
- 你使用的
Year-1967是中心化处理,predict函数会自动识别新数据中的Year并完成中心化计算,无需手动转换。 - 如果需要更平滑的曲线,可以调整
seq的by参数(比如设为0.5),生成更密集的Year序列。
内容的提问来源于stack exchange,提问作者L B
相关产品推荐
相关产品推荐

