2012-08-31 56 views
3

我有一些高度季節性的天氣相關數據,我想要做的是 來確定一些「異常值」並將這些異常值更改爲合理值(我不想刪除它們) 。過濾季節性時間序列異常值

我使用Hampel的過濾器從pracma包找出並糾正這些異常值,但問題是,一些季節性的峯被降低太多。我猜 這個功能沒有考慮到季節性。 下圖顯示了這個(24個月的窗口),紅線是過濾的數據。

有沒有辦法糾正這個問題?換句話說,採取'峯值'和平均他們之間的季節? 謝謝! enter image description here

+1

我懷疑這樣修補數據是個好主意。我發現'hampel'中的「註釋」很有啓發性。 – Roland

+0

每年有一次發生機率爲50%時,他們真的可以被稱爲離羣值嗎? –

+0

是的 - 這些高價值與厄爾尼諾有關,如果我忽視它們,我的模型給出的預測值太高(自1931年以來從未發生/ 1月)。 – Fernando

回答

3

至於建議由@邁克爾,這裏的一些代碼,除去季節性成分,應用異常過濾器上剩餘的意甲,並再次增加了季節性的組件(由您自己承擔風險使用):

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']) 
} 

enter image description here