RStudio中调用forecast函数触发ets()报错:y应为单变量时间序列
问题原因与修正方案
错误根源
你当前的ds1是包含年份+12个月数据的多列数据框,而forecast包的forecast()函数要求输入必须是单变量时间序列对象(比如R自带的ts类型),不是这种宽格式的多列结构,所以才会报y should be a univariate time series的错误。
修正步骤与代码
你需要先把宽格式的月度数据转换成长格式的单变量时间序列,具体操作如下:
1. 加载必要的包
如果还没安装tidyr包(用于转换数据格式),先执行安装命令,再加载所需包:
install.packages("tidyr") library(tidyr) library(forecast)
2. 读取数据并转换为长格式
把年份和12个月的列,转成「年份-月份」+「数值」的两列结构:
setwd("F:/Business Analytics/PowerBi/Data") SF <- read.csv("test.csv", stringsAsFactors = F, header=T) # 转长格式:保留Year列,将Jan-Dec列拆分为month(月份)和value(对应数值)两列 long_data <- pivot_longer(SF, cols = Jan:Dec, names_to = "month", values_to = "value")
3. 转换为时间序列对象(ts)
根据数据的起始年份,生成对应的月度时间序列(频率设为12):
# 合并年份与月份为日期格式,确定时间序列的起始点 long_data$date <- as.Date(paste(long_data$Year, long_data$month, "01", sep="-"), format="%Y-%b-%d") # 生成ts对象:value是待预测的数值,start为起始年份+月份,frequency=12代表月度数据 ts_data <- ts(long_data$value, start = c(min(long_data$Year), 1), frequency = 12)
4. 生成预测并绘制折线图
现在可以正常使用forecast()函数生成预测并绘图:
# 预测未来12个月的数据,h参数指定预测期数 fc <- forecast(ts_data, h=12) # 绘制预测折线图 plot(fc)
基础R替代方案(无需tidyr包)
如果不想用tidyr,可以用基础R的reshape函数转换长格式:
long_data <- reshape(SF, direction = "long", varying = list(names(SF)[2:13]), v.names = "value", timevar = "month", times = names(SF)[2:13])
内容的提问来源于stack exchange,提问作者Shrikant Shirodkar
相关产品推荐
相关产品推荐

