使用stl和arima预测数据的季节性和趋势

9

我有一组带有季节性、趋势和ARMA部分的数据系列,我想根据历史数据来预测这个系列。

我可以使用以下步骤:

data_ts <- ts(data, frequency = 24)
data_deseason <- stl(data_ts, t.window=50, s.window='periodic', robust=TRUE) 
f <- forecast(data_deseason, method='arima', h = N)

但是我不能选择Arima模型的参数,这是我想做的。上述代码似乎使用了类似auto.arima的方法,自动选择Arima模型的参数 - 但是执行速度非常快,比auto.arima还要快 - 所以不确定会发生什么。

或者,我可以使用上述代码将数据分成季节、趋势和余数三部分,但是如何进行预测呢?我应该为趋势和余数分别建立ARMA模型吗?

trend_arima <- Arima(data_deseason$time.series[,'trend'], order = c(1,1,1))
remainder_arima <- Arima(data_deseason$time.series[,'remainder'], order = c(1,1,1))

然后使用forecast()函数加上上述两个组件和季节。或者有没有一些方法可以提取stl找到的趋势模型呢?

谢谢任何提示 :) 本杰明


stl使用loess(局部回归)将时间序列分解为季节性、趋势和不规则成分,详见?stl。因此,这不是ARIMA模型。如果您知道您的时间序列遵循具有季节性和趋势的ARIMA过程,为什么不适配一个季节性ARIMA模型并相应地差分数据呢?请参见例如https://www.otexts.org/fpp/8/9。STL或ARIMA哪个表现更好取决于解释/测试。 - thie1e
谢谢,@Khl4v。我正在查看https://www.otexts.org/fpp/6/6,其中描述了stl,作者写道:“要预测季节性调整分量,可以使用任何非季节性预测方法。例如,随机漫步模型、霍尔特方法(在下一章中讨论)或非季节性ARIMA模型。”这就是为什么我尝试使用ARIMA模型来建模非季节性部分,然后将季节性、趋势和余数组合在一起进行预测。但你认为这不是正确的方法吗?再次感谢 :) - bbiegel
好的,所以你已经读过了。我只是想知道为什么你认为这是一个ARIMA过程,却没有使用ARIMA模型。 - thie1e
谢谢回复!:) 是的,我会尝试季节性ARIMA和STL+ARIMA方法,看哪个表现最好。 - bbiegel
1个回答

10

forecast.stl函数在剩余系列中使用auto.arima。它非常快速,因为它不需要考虑季节性ARIMA模型。

您可以通过forecastfunction参数选择特定参数的特定模型。例如,假设您想使用一个具有参数0.7的AR(1),则以下代码将执行此操作:

data_ts <- ts(data, frequency = 24)
data_deseason <- stl(data_ts, t.window=50, s.window='periodic', robust=TRUE) 
f <- forecast(data_deseason, h=N,
        forecastfunction=function(x,h,level){
        fit <- Arima(x, order=c(1,0,0), fixed=0.7, include.mean=FALSE)
        return(forecast(fit,h=N,level=level))})
plot(f)

如果您只想选择ARIMA阶数,而不是参数,则省略fixed参数。


非常感谢,我真的很感激!有一个问题:当预测函数的输入是stl时间序列时,预测是否会同时预测周期、趋势和余项,并将这三者相加? - bbiegel
它预测季节性项和季节性调整系列,并将它们相加。 - Rob Hyndman
非常感谢你,Rob! :) - bbiegel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接