时间序列上的STL具有缺失值以进行异常检测


12

我正在尝试在气候数据的时间序列中检测到一些异常值,但缺少一些观测值。在网上搜索,我发现了许多可用的方法。从消除趋势和季节性成分并研究其余部分的意义上讲,其中的stl分解似乎很有吸引力。阅读STL:一种基于黄土的季节性趋势分解程序stl在确定分配可变性的设置方面似乎很灵活,不受异常值的影响,即使缺少值也可以应用。但是,尝试使用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于缺失值的系列的方法,或者您认为我的选择在方法上不合理,或者您有更好的建议,请分享。我是该领域的新手,但堆满了(似乎...)相关信息。


我有同样的问题。STL方法应该能够仅通过LOESS来填充缺失值,但是此R实现似乎没有这样做。
jf328

Answers:


5

ARIMA模型可以轻松地合并虚拟变量以处理缺失值。这些称为脉冲指示器。该方法简单明了,并记录在http://www.unc.edu/~jbhill/tsay.pdf中。通常,该方法从当前的残差序列信息中提取有关脉冲,水平移动,季节性脉冲和本地时间趋势的信息。


感谢您的建议和非常有趣的文章!
effie 2012年

3

根据@Julius在这篇文章中说,可以从包中使用stlwith 。这会进行某种插值na.approxzoostl(x, na.action = na.approx, ...)


0

您可能还需要检查Hafen的stlplus包裹。细节在他的论文中。

您可以使用以下命令从CRAN安装它

install.packages("stlplus")

或直接从github与

devtools::install_github("hafen/stlplus").
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.