如何分解具有多个季节性成分的时间序列?

机器算法验证 r 时间序列 预测 分解 多重季节性
2022-02-10 15:14:13

我有一个包含双季节性成分的时间序列,我想将该系列分解为以下时间序列成分(趋势、季节性成分 1、季节性成分 2 和不规则成分)。据我所知,在 R 中分解系列的 STL 程序只允许一个季节性分量,所以我尝试过两次分解系列。首先,通过使用以下代码将频率设置为第一个季节性分量:

ser = ts(data, freq=48)
dec_1 = stl(ser, s.window="per")

然后,我通过将频率设置为第二个季节性分量来分解分解序列 ( dec_1) 的不规则分量,这样:

ser2 = ts(dec_1$time.series[,3], freq=336)
dec_2 = stl(ser2, s.window="per")

我对这种方法不是很有信心。而且我想知道是否还有其他方法可以分解具有多个季节性的系列。另外,我注意到tbats()R预测包中的函数允许将模型拟合到具有多个季节性的序列,但是,它没有说明如何用它分解序列。

3个回答

R 的forecastbats()tbats()函数可以将 BATS 和 TBATS 模型拟合到数据中。这些函数返回具有“bats”或“tbats”类属性的列表。此列表中的元素之一是状态向量的时间序列,每个时间x(t)t

有关公式的信息,请参见http://robjhyndman.com/papers/complex-seasonality/,有关 ETS 模型的更好描述,请参见 Hyndman 等人 (2008)。BATS 和 TBATS 是 ETS 的扩展。

例如:

fit <- bats(myTimeseries)
fit$x

在这种情况下,每一行都x将是傅立叶状谐波。

还有自动分解和查看组件的功能plot.tbats()plot.bats()

R 的forecast包现在具有mstl()处理多个季节性时间序列分解的功能。

此页面有更多详细信息如何使用它:https ://pkg.robjhyndman.com/forecast/reference/mstl.html

facebook先知包支持多种季节性

每年、每周和每日季节性是内置的,但可以指定自定义季节性。

这是一个自定义的每月季节性:

df <- ...     # data to build model on or decompose
future <- ... # data to make forecasts on

m <- prophet(weekly.seasonality = FALSE)
m <- add_seasonality(m, name = 'monthly', period = 30.5, fourier.order = 5)
m <- fit.prophet(m, df)
forecast <- predict(m, future)
prophet_plot_components(m, forecast)

如果predict()在没有传入数据框的情况下调用,那么它将分解用于构建模型的时间序列。