今天繼續就指數平滑法中最復雜的一種時間序列:有增長或者減少趨勢而且存在季節性波動的時間序列的預測算法即Holt-Winters和大家分享。這樣的序列能夠被分解為水平趨勢部分、季節波動部分,因此這兩個因素應該在算法中有相應的參數來控制。
Holt-Winters算法中提供了alpha、beta和gamma 來分別相應當前點的水平、趨勢部分和季節部分。參數的去執法范圍都是0-1之間,而且參數接近0時。最近的觀測值的影響權重就越小。我們以澳大利亞昆士蘭州海濱紀念商品的月度銷售日子為分析對象。老套路。咱先錄入數據,並繪制出該時間序列。撈個總體印象:
souvenir <- scan("http://robjhyndman.com/tsdldata/data/fancy.dat") souvenirtimeseries <- ts(souvenir, frequency=12, start=c(1987,1)) logsouvenirtimeseries <- log(souvenirtimeseries) plot.ts(logsouvenirtimeseries)

我們採用R中提供的HoltWinters算法進行預測,實現和結果例如以下:
souvenirtimeseriesforecasts <- HoltWinters(logsouvenirtimeseries)

Alpha=0.4,意味着當期預測基於平衡了近期和較遠期的觀測值。Beta 為0表明趨勢部分的斜率在整個時間序列上市不變的,且等於初始值。這個也符合我們的直觀感受,水平改變許多,可是趨勢部分斜率是基本不變的,於此相反gamma=0.96表明當期季節部分預測只基於近期的觀測值。
我們同一時候畫出預測值和觀測值來看下預測的效果怎樣:
plot(souvenirtimeseriesforecasts)

可見Holt-Winters算法很成功的預測了季節峰值,為了預測未來期數的值。我們相同採用forecast函數包,以預測未來48個月銷售為例:
library("forecast") souvenirtimeseriesforecasts2 <- forecast.HoltWinters(souvenirtimeseriesforecasts, h=48) plot.forecast(souvenirtimeseriesforecasts2)

圖中藍色線條顯示的為預測值,深灰色部分為80%的置信區間。淺灰色為95的置信區間。
接下來老套路採用Ljung-Box 和畫出直方圖來檢查預測誤差的隨機性,就不反復貼代碼了,有忘記的童鞋請轉前兩篇。我這里就直接貼結果圖了:

三張圖的結果表示咱們R提供的Holt-Winters()算法還是特別牛掰的,關於指數平滑就到此就徹底結束啦。