使用 arima 模型进行预测

机器算法验证 r 时间序列 预测 有马
2022-03-18 23:16:27

我正在尝试使用 arima(0,1,1) 预测值。在执行predict(mod,n.ahead=5)(in R) 之后,所有预测的值都相同:

5947.681 5947.681 5947.681 5947.681 5947.681 

这是对的吗?

4个回答

将来请为您的问题提供一个可重复的示例,因为我对您的数据集的特征一无所知。正如@Irishstat 所提到的,您的数据可能没有趋势/模式,并且可能有水平偏移。

扩展我的评论:

arima(0,1,1) 是一个简单的指数平滑。预测水平将是平坦的,即实际值的最后一个值。

以下是说明我的评论的示例。

library("fma")
library("forecast")

## Without Drift
fit.m <- Arima(eggs,order = c(0,1,1))
forecast.m <- plot(forecast(fit.m,h=10))

#with Drift
fit.t <- Arima(eggs,order = c(0,1,1),include.drift=TRUE)
forecast.t <- plot(forecast(fit.t,h=10))

如您所见,第一个没有漂移的模型没有捕捉到下降趋势。预测持平。

forecast.m$mean
Time Series:
Start = 1994 
End = 2003 
Frequency = 1 
 [1] 62.87244 62.87244 62.87244 62.87244 62.87244 62.87244 62.87244 62.87244 62.87244 62.87244

在此处输入图像描述

带有漂移项的第二个模型捕获了下降趋势,因为它包括漂移项:

forecast.t$mean
Time Series:
Start = 1994 
End = 2003 
Frequency = 1 
 [1] 60.13606 57.75869 55.38132 53.00396 50.62659 48.24922 45.87186 43.49449 41.11712 38.73976

在此处输入图像描述

正如您所注意到的,您的 $\text{ARIMA}(0,1,1)$ 的预测是不变的。没有什么不对劲。ARIMA(0,1,1) are constant. Nothing is amiss.

让我们从考虑差分序列开始。这是 $\text{MA}(1)$ 模型的简单情况,$0$ 均值:$y(t) = \varepsilon(t) + θ\, \varepsilon(t-1)$。MA(1) model with 0 mean: y(t)=ε(t)+θε(t1).

如果我们在时间 $T$,我们有 $T+1$ 的观测预测:T, we have for the forecast of the observation at T+1:

E[yT+1|T]=E[εT+1|T]+θE[εT|T]=0+θε^T|T

最后一项,$\hat{\varepsilon}$,是数据的函数,但它的确切形式对我们目前的目的并不重要;这只是一些预测值。ε^, is a function of the data, but its exact form doesn't matter for our present purpose; it's just some forecasted value.

现在,让我们预测下一个:

E[yT+2|T]=E[εT+2|T]+θE[εT+1|T]=0+θ0=0

... 同样,所有后续预测都是 0 美元。0.

现在对于集成的 $\text{MA}$,这些是该系列的预测差异。所以对于无差预测,一旦你有了第一个预测,所有额外的预测都等于它。MA, those are the predicted differences of the series. So for the undifferenced predictions, once you have the first forecast, all additional forecasts are equal to it.

同样,例如,如果您有一个 $\text{ARIMA}(0,1,2)$ 模型,那么第二个预测将与第一个不同,然后所有后续预测都将保持不变。ARIMA(0,1,2) model, then the second forecast would differ from the first and then all subsequent forecasts would be constant.

您正在使用的模型(简单指数平滑)的一个特征是,无论 ma(1) 系数的特定值如何,未来每个时期的预测都是相同的。对于仅具有常数(均值模型)或最近水平偏移(最后局部均值)的模型也是如此

我认为您需要将数据转换为时间序列格式。预测是平坦的,因为模型无法知道预测是针对哪个月/年/时间段以及从中学习的模式。