時間序列分解-STL分解法
【轉載時請注明來源】:http://www.cnblogs.com/runner-ljt/
Ljt
作為一個初學者,水平有限,歡迎交流指正。
STL(’Seasonal and Trend decomposition using Loess‘ )是以魯棒局部加權回歸作為平滑方法的時間序列分解方法。
其中Loess(locally weighted scatterplot smoothing,LOWESS or LOESS)為局部多項式回歸擬合,是對兩維散點圖
進行平滑的常用方法,它結合了傳統線性回歸的簡潔性和非線性回歸的靈活性。當要估計某個響應變量值時,先從其預
測變量附近取一個數據子集,然后對該子集進行線性回歸或二次回歸,回歸時采用加權最小二乘法,即越靠近估計點的
值其權重越大,最后利用得到的局部回歸模型來估計響應變量的值。用這種方法進行逐點運算得到整條擬合曲線。
Robust Loess 為魯棒局部加權回歸,具體算法可以參看之前的博文 魯棒局部加權回歸 。
STL對異常點具有健壯性,僅能處理加法模式的分解,對於乘法模式需要先轉換為加法模式處理最后在逆變換回去。
魯棒局部加權回歸法方法的LOESS 過程和魯棒性過程分別在STL 的內部環 和外部環中嵌套實現.
用R做時間序列的STL分解:
stl(x, s.window, s.degree = 0,
t.window = NULL, t.degree = 1,
robust = FALSE,
na.action = na.fail)
s.window----提取季節性時的loess算法時間窗口寬度,須為奇數
s.degree -----提取季節性時局部擬合多項式的階數,須為0或1
t.window----提取趨勢性時的loess算法時間窗口寬度,須為奇數
t.degree-----提取趨勢性時局部擬合多項式的階數,須為0或1
robust -----在loess過程中是否使用魯棒擬合
library(quantmod)
###時間序列STL分解法###### ##STL是’Seasonal and Trend decomposition using Loess‘ 的以魯棒局部加權回歸作為平滑方 #法的時間序列分解方法。其中Loess(locally weighted scatterplot smoothing, #LOWESS or LOESS)為局部多項式回歸擬合。 getSymbols('^IXIC',src='yahoo',from='2008-1-1',to='2015-10-1') sdata.month=to.monthly(IXIC) sdata.close=sdata.month$IXIC.Close head(sdata.close) sdata=ts(as.double(sdata.close),frequency=12,start=c(2008,1)) #as.double(sdata.close)為避免出現‘只允許單變量序列’的報錯 fit=stl(sdata,t.window=13,s.window='periodic',robust=T) #時間序列的STL分解是以魯棒局部加權回歸作為平滑方法的時間序列分解方法 #故應使robust=T,s.window='periodic'指使用均值平滑季節性子序列 plot(fit)
(上圖4個板塊的最右側的高度不等的灰色柱條對應各板塊數值大小的一個可視化度量,它們對應的數值大小是一樣的)