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

R语言forecast包ggplot2绘制预测线为平直直线的问题咨询

问题概述

使用ggplot2与forecast包绘制年平均气温时间序列预测图时,代码无报错可正常运行,但输出的蓝色预测线为完全平直的无波动状态,与预期的带趋势/波动的预测效果、以及公开forecasting相关示例的输出存在明显差异。本次分析目标为预测未来10年的年平均气温。

分析用数据集

AvgTMeanYear <- structure(list(year = 1980:2021, AvgTMean = c(24.2700686838937, 
23.8852956598276, 25.094446596092, 24.1561175050287, 24.157183605977, 
24.3047482638362, 24.7899738481466, 24.5756232655603, 24.5833086228592, 
24.7344695534483, 25.3094451071121, 25.2100615173707, 24.3651692293534, 
24.5423890611494, 25.2492166633908, 24.7005097837931, 24.2491591827443, 
25.0912281781322, 25.0779264303305, 24.403294248319, 24.4983991453592, 
24.4292324356466, 24.8179824927011, 24.7243948463075, 24.5086534543966, 
24.2818632071983, 24.4567195220259, 24.8402224356034, 24.6574465515086, 
24.5440715673563, 23.482670620977, 24.9979594684914, 24.5452453980747, 
24.9271462811494, 24.7443215819253, 25.8929839790805, 25.1801908261063, 
25.2079308058908, 25.0722425561207, 25.4554644289799, 25.4548979078736, 
25.0756772250287)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-42L))

初始运行代码

library(tidyverse)
library(forecast)

p = ggplot(aes(x = year, y = AvgTMean), data = AvgTMeanYear)
p = p + geom_line()
p + geom_forecast()

错误输出效果

平直预测线错误结果示意图

平直预测线的核心原因
  • 初始代码直接传入普通tibble数据框给geom_forecast(),没有将气温序列转换为标准时间序列对象,函数的自动选模逻辑无法正确识别序列的时间结构、趋势特征,最终默认选用了简单均值模型:该模型的点预测值固定为历史所有观测值的算术平均,因此输出完全平直的预测线。
  • 其他参考示例中输出带波动/趋势的预测线,普遍提前将输入数据转换为了ts类时间序列对象,或是显式指定了可捕捉趋势、自相关的预测模型(如ARIMA、ETS),自动选模逻辑可正常识别序列特征。
结果解读说明

平直预测线不代表未来气温无变化趋势,属于模型选择错误产生的无效输出,是典型的预测结果解读偏差。
从1980-2021年的观测数据可观察到明显的长期升温趋势,简单均值模型完全没有捕捉到这一特征,输出结果不具备参考价值。
额外说明:年平均气温序列已经消除了季节波动,历史数据中的上下起伏属于年际随机噪声,本身是不可预测的部分,正确建模后的点预测线是平滑的趋势线,不会复刻历史数据中的随机波动——如果参考示例中的预测线存在高频上下波动,对应的大多是月、日尺度的高频时间序列,年尺度序列的点预测本身不会出现这类噪声波动。

修正代码
library(tidyverse)
library(forecast)

# 将年平均气温转换为年度频率的标准时间序列对象
temp_ts <- ts(AvgTMeanYear$AvgTMean, start = 1980, frequency = 1)

# 绘制预测图,指定预测时长为10年,选用自动ARIMA模型捕捉趋势
autoplot(temp_ts) +
  geom_forecast(method = "auto.arima", h = 10) +
  labs(x = "年份", y = "年平均气温")

修正后模型会自动识别序列的长期升温趋势,输出匹配趋势的预测线,预测区间也会随预测期延长合理拓宽。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:54:27