用于异常检测的具有缺失值的时间序列的 STL

机器算法验证 r 时间序列 异常值 缺失数据
2022-03-04 07:46:02

我正在尝试检测气候数据时间序列中的异常值,其中一些缺失的观测值。在网上搜索我发现了许多可用的方法。其中,stl 分解似乎很有吸引力,因为它去除了趋势和季节性成分并研究了其余部分。阅读STL: A Seasonal-Trend Decomposition Procedure Based on Loessstl似乎在确定分配可变性的设置方面很灵活,不受异常值的影响,并且尽管有缺失值也可以应用。但是,尝试将其应用于R,经过四年的观察并根据http://stat.ethz.ch/R-manual/R-patched/library/stats/html/stl.html定义所有参数,我遇到错误:

"time series contains internal NAs"(当na.action=na.omit)和
"series is not periodic or has less than two periods"(当na.action=na.exclude)。

我已经仔细检查了频率是否正确定义。我在博客中看到了相关问题,但没有找到任何可以解决此问题的建议。是不是不能stl在有缺失值的系列中申请?我非常不愿意插入它们,因为我不想引入(并因此检测......)伪影。出于同样的原因,我不知道改用 ARIMA 方法有多可取(如果缺失值仍然是一个问题)。

如果您知道stl在缺少值的系列中应用的方法,或者您认为我的选择在方法上不合理,或者您有更好的建议,请分享。我是该领域的新手,并且被大量(看似......)相关信息所淹没。

3个回答

ARIMA 模型很容易结合虚拟变量来处理缺失值。这些被称为脉冲指示器。该方法很简单,并记录在http://www.unc.edu/~jbhill/tsay.pdf中。通常,该方法从有关脉冲、电平转换、季节性脉冲和本地时间趋势的当前剩余序列信息中提取。

根据这篇文章中的@Julius 的说法,是否可以使用stlwith na.approx、 from zoopackage 、 using stl(x, na.action = na.approx, ...)这会进行某种插值

您可能还想查看Hafen 的stlplus包裹细节在他的论文中。

您可以从 CRAN 安装它

install.packages("stlplus")

或直接从 github 使用

devtools::install_github("hafen/stlplus").