簡易時間序列分析的方法總結(R實現)


【預備操作】

以下方法請先安裝和加載forecast/fpp包

install.packages("forecast")
install.packages("fpp")
library('forecast')
library('fpp')

以下方法被筆者實用在自己論文實驗中,相關論文發表在ICTAI 2013

Detecting Impolite Crawler by using Time Series Analysis.

Zhiqian ChenWenya Feng

25th International Conference on Tools and Artificial Intelligence

 

移動平均分解法

用經典的移動平均分解時序為季節性,趨勢和不規則部分,使用加法或乘法季節部分。

(Decompose a time series into seasonal, trend and irregular components using moving averages. Deals with additive or multiplicative seasonal component.)

1 births <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat") 
2 birthstimeseries <- ts(births, frequency=12, start=c(1946,1))
注意這里的frequency要和最小單周期長度匹配效果才好(待學習
3 如需查看可以 birthstimeseries 或 plot.ts(birthstimeseries)
4 birthstimeseriescomponents <- decompose(birthstimeseries) 估計出的季節性、趨勢的和不規則部分現在被存儲在變量birthstimeseriescomponents$seasonal, birthstimeseriescomponents$trend 和 birthstimeseriescomponents$random 6 plot(birthstimeseriescomponents)

以下是去掉季節性的時序 

  7 birthstimeseriesseasonallyadjusted <- birthstimeseries - birthstimeseriescomponents$seasonal

  8 plot(birthstimeseriesseasonallyadjusted)

  7 birthstimeseriesadj <- seasadj(birthstimeseries)

  8 plot(birthstimeseriesadj)

 

局部加權回歸法

STL分解基於Loess,即局部加權回歸散點平滑法,是1990年由密歇根大學的R. B. Cleveland教授以及AT&T Bell實驗室的W. S. Cleveland等人提出來的一種對時間序列進行分解的方法。STL分解將時間序列分解成季節項、趨勢項及殘余項。 

1 births <- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat") 

2 birthstimeseries <- ts(births, frequency=12, start=c(1946,1))

3 如需查看可以 birthstimeseries 或 plot.ts(birthstimeseries)
4 birthstimeseriescomponents <- stl(birthstimeseries,s.window="periodic") 

5 plot(birthstimeseriescomponents)

  6 birthstimeseriescomponents <- forecast(birthstimeseriescomponents)

  7 plot(birthstimeseriescomponents)

筆者嘗試用STL預測手頭的一個時序數據(第一列是實際觀察值(a),第二列是預測值(b),第三列是1-(b-a)/a的百分比格式數據),總體偏大5%-10%,還是不錯的:

55701279 58251140 95.42%
64829888 71947199 89.02%
65720870 72256152 90.06%
65596679 69039714 94.75%
64781972 70811590 90.69%
60384601 62627480 96.29%
54116447 56363455 95.85%

  

指數平滑法(HoltWinters)

如果你的時間序列可以被描述為一個增長或降低趨勢的、沒有季節性的相加模型,你可以使用霍爾特指數平滑法對其進行短期預測。Holt指數平滑法估計當前時間點的水平和斜率。其平滑化是由兩個參數控制的,alpha,用於估計當前時間點的水平,beta,用於估計當前時間點趨勢部分的斜率。正如簡單指數平滑法一樣,alpha和beta參數都介於0到1之間,並且當參數越接近0,大多數近期的觀測則將占據預測更小的權重。

1 skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5) 

2 skirtsseries <- ts(skirts,start=c(1866)) 3 plot.ts(skirtsseries) 4 skirtsseriesforecasts <- HoltWinters(skirtsseries, gamma=FALSE) 樣本內預測,意義? 5 plot(skirtsseriesforecasts) 6 skirtsseriesforecasts2 <- forecast.HoltWinters(skirtsseriesforecasts, h=19) 7 plot.forecast(skirtsseriesforecasts2)

和簡單指數平滑法一樣,我們瞧瞧樣本內預測誤差是否在延遲1-20階時是非零自相關的,以此來檢驗模型是否還
可以被優化。如裙邊數據中,我們可以創建一個相關圖,進行Ljung-Box檢驗

1 acf(skirtsseriesforecasts2$residuals, lag.max=20) 

2 Box.test(skirtsseriesforecasts2$residuals, lag=20, type="Ljung-Box") 

一般取20階,而且統計量Q的P值>0.05則不能拒絕隨機時序假設(就說無自相關性的隨機了,時序無信息。概率越大越確定?),反之則使非白噪聲序列。純隨機性檢驗,P值小於5%,序列為非白噪聲

在拿不准情況下可以做正太直方圖

 

自回歸整合移動平均(ARIMA)

指數平滑法對於預測來說是非常有幫助的,而且它對時間序列上面連續的值之間相關性沒有要求。但是,如果你想使用指數平滑法計算出預測區間,那么預測誤差必須是不相關的,而且必須是服從零均值、方差不變的正態分布。 即使指數平滑法對時間序列連續數值之間相關性沒有要求,在某種情況下,我們可以通過考慮數據之間的相關性來創建更好的預測模型。自回歸移動平均模型(ARIMA)包含一個確定(explicit)的統計模型用於處理時間序列的不規則部分,它也允許不規則部分可以自相關。

1 volcanodust <- scan("http://robjhyndman.com/tsdldata/annual/dvi.dat", skip=1) 

2 volcanodustseries <- ts(volcanodust,start=c(1500)) 

3 plot.ts(volcanodustseries) 

4 auto.arima(volcanodust)
根據給出來的參數在下一步選擇建模參數order(q,d,p)

5 volcanodustseriesarima <- arima(volcanodustseries, order=c(2,0,0)) 

6 volcanodustseriesforecasts <- forecast.Arima(volcanodustseriesarima, h=31) 

7 plot.forecast(volcanodustseriesforecasts) 

 

參考文獻:

本文主要參考, http://a-little-book-of-r-for-time-series.readthedocs.org/en/latest/src/timeseries.html

某sina網友對STL方法的理解,http://blog.sina.com.cn/s/blog_5ffd41cf01012i5e.html

STL方法發源論文, http://cs.wellesley.edu/~cs315/Papers/stl%20statistical%20model.pdf

fpp使用理論和具體方法, http://otexts.com/fpp/

robjhyndman教授網站, http://robjhyndman.com/?s=seasadj

robjhyndman教授的課件, http://maths-people.anu.edu.au/~johnm/courses/r/ASC2008/pdf/Rtimeseries-ohp.pdf

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM