为什么 stl 函数使用随机数据给出显着的季节性变化

机器算法验证 时间序列 季节性 黄土
2022-03-25 04:10:34

我使用 stl(黄土对时间序列的季节性分解)函数绘制了以下代码:

plot(stl(ts(rnorm(144), frequency=12), s.window="periodic"))

它显示了显着的季节性变化,上面代码中的随机数据(rnorm 函数)。每次运行时都会看到显着的变化,尽管模式不同。两种这样的模式如下所示:

在此处输入图像描述

在此处输入图像描述

当某些数据显示季节性变化时,我们如何依赖 stl 函数。考虑到其他一些参数,是否需要看到这种季节性变化?感谢您的洞察力。

代码取自此页面:这是测试自杀计数数据中季节性影响的合适方法吗?

2个回答

黄土分解旨在通过对数据应用平均值来平滑序列,以便将其分解为对数据分析感兴趣的组件,例如趋势或季节性。但这种方法并不打算对季节性的存在进行正式测试

尽管在您的示例中stl返回了季节性周期性的平滑模式,但此模式与解释序列的动态无关。为了看到这一点,我们可以将每个分量的方差与原始序列的方差进行比较。

set.seed(123)
x <- ts(rnorm(144, sd=1), frequency=12)
a <- stl(x, s.window="periodic")
apply(a$time.series, 2, var) / var(x)
#   seasonal      trend  remainder 
# 0.07080362 0.07487838 0.81647852 

我们可以看到,余数解释了数据中的大部分方差(正如我们对白噪声过程所期望的那样)。

如果我们采用具有季节性的序列,则季节性成分的相对方差更为相关(尽管我们没有直接的方法来测试它,因为 loess 不是参数)。

y <- diff(log(AirPassengers))
b <- stl(y, s.window="periodic")
apply(b$time.series, 2, var) / var(y)
#    seasonal       trend   remainder 
# 0.875463620 0.001959407 0.117832537 

相对方差表明季节性是解释序列动态的主要成分。


粗心地看情节stl可能具有欺骗性。返回的漂亮模式stl可能会让我们认为可以在数据中识别出相关的季节性模式,但仔细观察可能会发现事实并非如此。如果目的是确定是否存在季节性,黄土分解可以作为初步视图,但应辅以其他工具。

以类似的方式,我已经看到将傅立叶模型用于非季节性数据,迫使季节性结构进入拟合和预测值,从而导致类似的(喘气!)结果。拟合假定的模型为用户提供了他正在强加/假定的内容,这并不总是好的分析会建议/提供的内容。