在R中用回归做预测:将图表X轴从观测值改为年份
解决R中回归模型预测图表X轴替换为年份的问题
1. 核心问题分析
你当前的as.ts(df_new2)没有指定时间维度参数,导致生成的时间序列对象默认用观测序号作为X轴刻度。要显示年份,需要先给时间序列绑定正确的时间索引,再自定义图表的X轴显示。
2. 修正代码步骤
步骤一:构建带时间索引的时间序列对象
因为每年有35条观测数据,时间范围是2015-2021,我们给ts()函数指定start=2015和frequency=35,让每个观测对应到正确的年份区间:
library(forecast) library(fpp) # 生成带时间索引的ts对象,每年35条数据,起始年份2015 ts_df <- ts(df_new2, start = 2015, frequency = 35) # 拟合时间序列线性回归模型 ts_model <- tslm(Life_expectancy ~ Age + Gender + Race, data = ts_df)
步骤二:生成预测并自定义X轴刻度
生成预测后,先隐藏默认的观测值X轴,再手动添加年份刻度:
# 生成预测(如需用新数据预测,保留newdata参数;否则用模型拟合值) fcast <- forecast(ts_model) # 用新数据则改为 forecast(ts_model, newdata = df_new2) # 绘制预测图,先隐藏默认X轴 plot(fcast, xaxt = "n") # 设置年份刻度位置和标签 year_breaks <- 2015:2021 axis(1, at = year_breaks, labels = as.character(year_breaks))
备选方案:用ggplot2绘制更灵活的图表
如果需要更精细化的样式调整,推荐用ggplot2重构图表,先把预测结果转成数据框,再绑定年份信息:
library(ggplot2) # 将预测结果转换为数据框 fcast_df <- as.data.frame(fcast) # 计算每条观测对应的年份 fcast_df$Year <- 2015 + (0:(nrow(fcast_df)-1))/35 # 绘制带年份X轴的预测图 ggplot(fcast_df, aes(x = Year)) + geom_line(aes(y = Point.Forecast), color = "#2c3e50", linewidth = 1) + geom_ribbon(aes(ymin = Lo.80, ymax = Hi.80), fill = "#3498db", alpha = 0.2) + geom_ribbon(aes(ymin = Lo.95, ymax = Hi.95), fill = "#3498db", alpha = 0.1) + labs(x = "年份", y = "预期寿命", title = "预期寿命回归模型预测") + scale_x_continuous(breaks = 2015:2021, labels = 2015:2021) + theme_minimal()
关键说明
frequency=35是核心参数,它告诉R每年有35条观测,时间序列会自动将观测映射为2015, 2015+1/35, 2015+2/35...这样的连续年份值。- 手动添加X轴时,直接用年份数值作为刻度位置即可,因为ts对象的时间刻度已经是年份为单位的连续值。
内容的提问来源于stack exchange,提问作者Priscilla Raj
相关产品推荐
相关产品推荐

