6.6 STL 分解法

STL(Seasonal and Trend decomposition using Loess)是一个非常通用和稳健强硬的分解时间序列的方法,其中Loess是一种估算非线性关系的方法。STL分解法由 Cleveland, Cleveland, McRae, & Terpenning (1990) 提出。

相比于经典、SEATS和X-11分解法STL分解法有几点优势:

-与SEATS和X-11不同的是,STL可以处理任何类型的季节性,不仅仅是月度数据和季度数据。

-季节项可以随时间变化而变换,并且变化的速率可以由用户掌控。

  • 趋势-周期项的平滑程度也可以由用户掌控。

  • 可以不受离群点干扰(例如,用户可以指定一个稳健的分解)

另一方面,STL也有一些不足之处。具体来讲,它不能自动地处理交易日或是其他有变动的日子,并且它提供了处理加法分解的方式。

为了得到乘法分解我们可以首先对数据取对数,然后对各成分进行反向变换。对数据进行 \(0<\lambda<1\) 的Box-Cox变换可以得到加法分解与乘法分解。 其中 \(\lambda=0\) 的值对应于乘法分解,\(\lambda=1\) 等价于加法分解。

开始学习如何使用STL的最好方法是查看一些示例并对设置进行尝试。图 6.2 展示了STL应用于电气设备订单数据的一个例子。 图 6.13 展示了一种替代的STL分解,其中趋势-周期项更灵活,季节项不随时间变化,并且更加稳健。在这里,更明显的是,在该系列的末尾出现了向下转向,并且2009中的订单量异常低(对应于余数成分中的一些大的负值)。

elecequip %>%
  stl(t.window=13, s.window="periodic", robust=TRUE) %>%
  autoplot()
电气设备订单(顶部)和它的由稳健的STL分解得出的具有灵活的趋势周期性和固定的季节性的三个加法分解项。

图 6.13: 电气设备订单(顶部)和它的由稳健的STL分解得出的具有灵活的趋势周期性和固定的季节性的三个加法分解项。

使用STL时要选择的两个主要参数是趋势-周期窗口(t.window) 和季节性窗口(s.window)。这些参数控制了趋势-周期项和季节项的变化速度,它们的值越小允许变化的速度越快。在估计趋势-周期项和季节项的时候 t.windows.window都需要是奇数,并且所用的数据年份应是连续的。用户必须设定 s.window,因为它没有默认值,如果将该值设为无穷大就相当于令季节项为周期性的(即,各年相同)。t.window是可选项,若没有填写它则使用默认值。

mstl() 函数提供了一方便的自动STL分解,其中s.window=13t.window也是自动选择的。它一般情况下平衡了季节性过拟合与允许其随时间缓慢变化。但是与其他自动化过程一样,对于某些时间序列默认设置需要调整。

同本书中讨论的其他分解方法一样,要获取如图 6.8 中的各个分量,使用 seasonal() 函数获取季节项,用 trendcycle() 函数获取趋势-周期项,用 remainder()函数获取残差项。 seasadj() 函数可以用于计算经季节调整后的时间序列。

参考文献

Cleveland, R. B., Cleveland, W. S., McRae, J. E., & Terpenning, I. J. (1990). STL: A seasonal-trend decomposition procedure based on loess. Journal of Official Statistics, 6(1), 3–33. http://bit.ly/stl1990