R中的季节性ARIMA建模

机器算法验证 时间序列 数理统计 预测 有马
2022-03-14 23:44:41

我有从 2007 年到 2017 年的商品月度价格数据。您可以在以下链接中找到它: https ://drive.google.com/open?id=0BxRCOgKAL4itcUZlOExrUmVOanc 我需要使用 R 中的季节性 ARIMA 模型来预测它以供下一个年。当我使用auto.arima函数时,它建议我最好的模型ARIMA(0,1,1)而不是ARIMA(p,d,q)(P,D,Q)12. 的季节性部分model(P,D,Q)不知何故丢失了。我不知道为什么会这样。我的数据不是季节性的还是我的代码有问题。此外,模型给出的预测值在接下来的几个月中是恒定的,这是微不足道的。请帮忙!这是代码:

data <- read.delim("C:/Users/hp/Desktop/heckyl/forecasting model/Soybean_Prices.txt", header=F)
View(data)
summary(data)
summary(data)
ts.data = ts(data, frequency=12, start=c(2007,6))
ts.data
plot(ts.data)

dim(as.matrix(ts.data))
################################################################################

# Training and Testing Dataset
data.train = window(ts.data, start = c(2007,6), end = c(2013,12)) 
plot(data.train)
dim(as.matrix(data.train))
data.test = window(ts.data, start = c(2014,1))
plot(data.test)
dim(as.matrix(data.test))
################################################################################

# Developing an SARIMA model and Analysis of Model
library(forecast)
arima1 = auto.arima(data.train, trace=FALSE, test="kpss",  ic="aic")
summary(arima1)
confint(arima1)

# Residual Diagonostics
plot.ts(arima1$residuals)
Box.test(arima1$residuals,lag=20, type="Ljung-Box")
acf(arima1$residuals, lag.max=24, main="ACF of the Model")
Box.test(arima1$residuals^2,lag=20, type="Ljung-Box")
library(tseries)
jarque.bera.test(arima1$residuals)

arima1.forecast= forecast.Arima(arima1, h=41)
arima1.forecast
plot(arima1.forecast, xlab="Years", ylab="Price for Soybean")

library(TSPred)
plotarimapred(data.test, arima1, xlim=c(2014, 2017), range.percent = 0.05)
accuracy(arima1.forecast, data.test)
4个回答

您可以通过设置 D=1 或添加回归量来“强制”季节性。如果您认为有更复杂的季节性,您可以考虑使用傅立叶项?请参阅此链接复杂的季节性 Hyndman

尝试使用此命令而不是您用于获取 ARIMA 参数的命令。

arima1 = auto.arima(data.train, trace=FALSE, test="kpss", ic="aic", 
                    stepwise=FALSE, approximation=FALSE)

有时使用这些命令可以提供最佳模型。

您的数据表明以下模型在此处输入图像描述

在此处输入图像描述. 实际的、适合的和预测的都在这里在此处输入图像描述数据表明水平变化(视觉上很明显)和两个静态显着的季节性指标(4 月和 9 月)和一些异常情况 (6)。我使用 R 进行分析。不幸的是,auto.arima 对模型形式做出了一些关键假设,即没有电平变化、没有季节性脉冲/指标,当然也没有异常。阅读细则总是好的。

一年中只有两个月表现出“季节性”这一事实可以解释为什么 auto.arima 交付的模型“不知何故缺少季节性成分”。即使是一个坏掉的时钟一天两次也是正确的,在这种情况下,时钟是“几乎正确的”,因为没有实质性的自投影季节性成分/效应,只是 4 月和 9 月的确定性成分/效应。

6期预测...

在此处输入图像描述

也许您可以像这样使用强制函数 auto.arima() 返回季节性模型

auto.arima(database,seasonal=T)