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

时间:2015-03-30 13:42:18

标签: r stl time-series forecasting

我有一个包含季节性组件,趋势和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找到的趋势模型?

感谢任何提示:) 本杰明

1 个答案:

答案 0 :(得分: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参数。