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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:43:13