ARIMA时间序列预测报错:EXPR must be a length 1 vector求助
R语言ARIMA模型预测报错排查求助
我用R语言处理月度时间序列数据,运行ARIMA模型时,数据读取、预处理、模型拟合等步骤均正常,但执行fcast = forecast(fit_arima,h=24)进行预测时,出现如下错误:
Error in switch(names(interval), day = "days", hour = "hours", minute = "mins", : EXPR must be a length 1 vector
自行排查数小时未解决,特来求助。以下是完整代码及数据集:
install.packages("fpp2") install.packages("fable") # 安装用于时间序列分析的fpp2包 library(fpp2) library(fable) # 清空工作区所有变量 rm(list = ls()) data = data.table(read.csv("spft.csv")) # 读取数据 # 将数据声明为时间序列(时间序列变量 = Y) Y = ts(data[,2],start=c(2019,1),frequency = 12) ########################################################################### # 初步分析 ########################################################################### # 时间序列图 autoplot(Y) + ggtitle("时间序列图:Sparefoot月度租金") + ylab("经通胀调整后数值") # 数据存在明显趋势,尝试转换处理 # 对数据做一阶差分以消除趋势 DY = diff(Y) # 差分后数据的时间序列图 autoplot(DY) + ggtitle("时间序列图:Sparefoot月度租金(一阶差分)") + ylab("经通胀调整后数值") # 差分序列呈现趋势平稳性,用于分析季节性 ggseasonplot(DY) + ggtitle("季节性图:Sparefoot租金变化") + ylab("Sparefoot租金") # 数据季节性很强——尤其是5-8月夏季期间上涨 # 数据季节性很强——8月至次年1月期间下跌 # 查看另一种季节性图:子序列图 ggsubseriesplot(DY) # 2、5、6、7、8月的平均变化为正 # 1、3、4、9、10、11、12月的平均变化为负 ############################################################## # 序列Y存在趋势和季节性 # 通过一阶差分消除趋势 # 一阶差分序列仍存在季节性 # 使用多种方法进行预测 ###################################### #### # 使用基准方法进行预测 # 选用季节性朴素法作为基准 # y_t = y_{t-s} + e_t # 因数据存在趋势,使用差分后的数据建模 #### fit = snaive(DY) # 残差标准差 = 2.86 print(summary(fit)) # 模型表现良好,ACF值在95%置信区间内 checkresiduals(fit) # 残差符合正态分布 ##### # 拟合ETS模型 ##### fit_ets = ets(Y) print(summary(fit_ets)) checkresiduals(fit_ets) # 该模型表现也很稳定 ##### # 拟合ARIMA模型 ##### fit_arima = auto.arima(Y,d=1,D=1, stepwise = FALSE, approximation = FALSE, trace = TRUE) # 拟合ARIMA模型,包含一阶差分(d=1)和季节性差分(D=1) # 自动选择最优ARIMA模型 print(summary(fit_arima)) # 计算均方根误差 checkresiduals(fit_arima) sqrt(4.526) # 2.12 # 该模型是当前数据的最优模型 ############################## # 使用ARIMA模型进行预测 ############################# fcast = forecast(fit_arima,h=24) autoplot(fcast)
编辑补充
数据集已整理为data.frame格式:
df1 <- structure(list(Time = structure(c(17897, 17928, 17956, 17987, 18017, 18048, 18078, 18109, 18140, 18170, 18201, 18231, 18262, 18293, 18322, 18353, 18383, 18414, 18444, 18475, 18506, 18536, 18567, 18597, 18628, 18659, 18687, 18718, 18748, 18779, 18809, 18840, 18871, 18901, 18932, 18962, 18993, 19024, 19052, 19083, 19113, 19144, 19174, 19205, 19236, 19266, 19297, 19327), class = "Date"), UnitPrice = c(84, 86.96, 87.26, 85.28, 84.29, 92.35, 91.26, 91.34, 89.95, 89.25, 87.49, 83.17, 82.64, 84.17, 80.49, 79.57, 80.46, 86.13, 89, 94, 94, 95, 94, 95, 93, 97, 97, 97, 99, 110, 112, 115, 114, 115, 113.8, 111.29, 110.66, 111.31, 112.58, 112.67, 112.34, 119.18, 122.15, 119.14, 114.37, 111.39, 108.09, 103.22)), class = "data.frame", row.names = c(NA, -48L)) Y <- ts(df1[, 2], start = c(2019, 1), frequency = 12)
内容的提问来源于stack exchange,提问作者Ryan Leveille
相关产品推荐
相关产品推荐

