【问题标题】:Filtering seasonal time series outliers过滤季节性时间序列异常值
【发布时间】:2012-08-26 11:06:26
【问题描述】:

我有一些季节性很强的天气相关数据,我想做的是 识别一些“异常值”并将这些异常值更改为合理的值(我不想删除它们)。

我正在使用 pracma 包中的 hampel 过滤器来识别和纠正这些异常值,但问题是某些季节性峰值被降低了太多。我猜 这个函数没有考虑季节性。 下图显示了这一点(24 个月的窗口),红线是过滤后的数据。

有没有办法纠正这个问题?换句话说,取“峰值”并在季节之间平均它们? 谢谢!

【问题讨论】:

  • 我怀疑这种对数据的修改是个好主意。我发现?hampel 中的“注释”很有启发性。
  • 当每年发生一次的概率约为 50% 时,它们真的可以被称为异常值吗?
  • 是的 - 这些高值与厄尔尼诺有关,如果我忽略它们,我的模型给出的预测太高(自 1931 年/1 月以来从未发生过)。
  • 如果您确实认为数据集中存在异常值,则需要先移除季节性趋势,从去趋势数据中移除异常值,然后重新调整数据趋势。
  • 谢谢,它似乎有效!

标签: r filtering time-series outliers


【解决方案1】:

正如@Michael 所建议的,这里有一些代码删除了季节性组件,对剩余的系列应用异常值过滤器,并再次添加季节性组件(使用风险自负):

filter.outliers = function(serie.orig)
{
require(forecast)
require(pracma)

## get a stl decomposition object
stl.decomp = stl(serie.orig, s.window = 'periodic', t.window = 13, robust = T)

## remove the seasonal component
serie.desaz = seasadj(stl.decomp)

## apply a hampel filter
serie.desaz2 = hampel(serie.desaz, k = 12)$y

## put back the seasonal component
return(serie.desaz2 + stl.decomp$time.series[, 'seasonal'])
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2013-11-06
    相关资源
    最近更新 更多