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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:39:58