Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 季节性时间序列异常值的过滤_R_Filtering_Time Series_Outliers - Fatal编程技术网

R 季节性时间序列异常值的过滤

R 季节性时间序列异常值的过滤,r,filtering,time-series,outliers,R,Filtering,Time Series,Outliers,我有一些季节性很强的天气相关数据,我想做的是 识别一些“异常值”,并将这些异常值更改为合理值(我不想删除它们) 我正在使用pracma软件包中的hampel过滤器来识别和纠正这些异常值,但问题是一些季节性峰值降低得太多。我猜 此函数不考虑季节性。 下图显示了这一点(24个月窗口),红线是过滤后的数据 有没有办法纠正这个问题?换句话说,取“峰值”并在季节之间取平均值? 谢谢 根据@Michael的建议,这里有一些代码可以删除季节性成分,对剩余系列应用异常值过滤器,然后再次添加季节性成分(由您自己的

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

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

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

根据@Michael的建议,这里有一些代码可以删除季节性成分,对剩余系列应用异常值过滤器,然后再次添加季节性成分(由您自己的风险使用):


我怀疑这样修补数据是否是个好主意。我发现《汉佩尔》中的“注意事项”很有启发性。当每年都有大约50%的几率发生一次时,它们真的可以被称为异常值吗?是的-这些高值与厄尔尼诺现象有关,如果我忽略它们,我的模型给出的预测太高(1931/1月以来从未发生过)。如果你真的相信数据集中存在异常值,您需要首先删除季节性趋势,从去趋势数据中删除异常值,然后重新趋势数据。谢谢,这似乎有效!
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'])
}