常用时间序列分析方法
2019獨角獸企業重金招聘Python工程師標準>>>
#平滑法
? ?? #滑動平均法
? ?? #霍爾特指數平滑法
? ?? #霍爾特-溫特指數平滑法
? ?? #平滑法應用場景
? ??? ?? #平滑法之移動平均法
? ??? ??? ?? #簡單移動平滑(Single Moving Average)
? ??? ??? ?? #指數平滑(Exponential Moving Average)
? ? ? ? ? ?? #簡單的移動平滑和指數平滑法案例
? ? ? ? ? #平滑法之霍爾特指數平滑法
? ? ? ? ? #平滑法之霍爾特溫特指數平滑法
? ??? ??? ?? #霍爾特溫特指數平滑法案例
#ARMA(ARIMA)法
?
附件是數據
?
?
- ?平滑法
滑動平均法
? ? 處于恒定水平和沒有季節性變動的時間序列
?
霍爾特指數平滑法
? ? 有趨勢性但沒有季節性因素的時間序列
?
霍爾特-溫特指數平滑法
? ? 有趨勢性且有季節性變動趨勢的時間序列
?
- ARMA(ARIMA)法
? ??理論上可以針對數據產生的機理構建動態模型,實際上是根據數據擾動項之間相關性結構構建預測模型
? ? 優點:該方法在一個統一的框架下適用與所有的時間序列
? ? 缺點:模型形成需要基于知識和經驗判定
?
- 平滑法應用場景
? ??? ??? ??? ??? ??? ??? ??? ??滑動平均法
?
? ??? ??? ??? ??? ??霍爾特指數平滑法
? ??? ??? ??霍爾特-溫特指數平滑法
?
?
?
- 平滑法之移動平均法
? ??
簡單移動平滑(Single?Moving?Average)
? ? 簡單移動平均認為最近 N 期的數據對當前數據有預測作用,而且認為這 N 期數據的影響大小是相等的
?
數學表達式
? ??n表示移動平均的期數,n越長,擬合曲線越平滑;n越短,對近期變化越敏感
?
?
指數平滑(Exponential?Moving?Average)
? ??指數平滑認為最近各期的影響權重會隨著時間間隔的變大而呈現指數衰減
?
數學表達式
?
? ??平滑系數α設定較大時,近期數據的權重變大,適合預測對近期敏感的時間序列數據,而α設定較小時則適合變化緩慢的時間序列數據, α的經驗值為0.05到0.3之間
?
簡單的移動平滑和指數平滑法案例
#簡單的移動平滑和指數平滑法 #股票預測案例> library(TTR) > data(ttrc)#股票數據#SMA() 表示簡單的移動平滑 > SMA(1:5,n=3) # n=3 表示平均移動的期數3 [1] NA NA 2 3 4#EMA() 表示指數平滑 > EMA(1:5,n=3,ratio = 0.2) # ratio表示系數α,例如最后一個預測數據根據公式等于2.92 = 5.0*0.2+2.40*2.92 [1] NA NA 2.00 2.40 2.92> sma.20 <-SMA(ttrc[,"Close"], 20) #去前面的20期做平滑統計 > tail(sma.20) #獲取向量、矩陣、表、數據框架或函數或最后一個部分,head()開頭部分 [1] 51.6855 51.6930 51.7640 51.8470 51.8945 51.9440 > plot.ts(sma.20) #如下圖?
- 平滑法之霍爾特指數平滑法
當 不考慮周期性時,并且當數據有 向上或向下的線性趨勢時,可以使用 霍爾特指數平滑法(Holt Exponential Moving Average)進行預測
?
這種方法是指數平滑方法中的一種,其認為序列是存在一個較固定的趨勢γ,那么第 t 期的估計值應該為第 t-1 期的觀測值加上固定趨勢的影響
每一期的固定趨勢會受到隨機因素的影響不恒等于r,所以r本身是一個隨機序列:
?
加入平滑系數 ? 得到第 t 期的平滑值為:
?
由于r本身是一個隨機序列,自然也可以被平滑:
?
?_?稱為趨勢序列,所以霍爾特指數平滑法是含有兩個參數α和β的平滑方法
?
?
- 平滑法之霍爾特溫特指數平滑法
當時間序列 除了趨勢性之外,還表現出 明顯的周期性或季節性時,可以使用 霍爾特溫特指數平滑法(HoltWinters)進行預
? ??
HoltWinters來源于Holt指數平滑法,在其基礎上增加了季節項,而季節效應可分為累加與累積兩種
?
累加公式如下
累積公式如下
?
兩者比較
?
霍爾特溫特指數平滑法案例
#方式一> par(mfrow = c(2,1)) > tsHW <- HoltWinters(tsdata)#霍爾特溫特指數平滑法默認是累加的 > plot(tsHW) #下圖中上部分 > tsHW <- HoltWinters(tsdata,seasonal = 'multi') #默認是累加的,這里用累乘的方法 > plot(tsHW) #下圖中下部分,紅色線是預測值,藍色是置信區間 > tsHW.Pred<-predict(tsHW,12, prediction.interval = TRUE) #模型進行預測 predict()等于調用predict.HolWinters()進行預測#prediction.interval = TRUE 給出預測區#12表示預測 12個月 > tsHW.Predfit upr lwr Jan 1961 447.0559 466.8057 427.3061 Feb 1961 419.7123 440.2920 399.1326 Mar 1961 464.8671 486.7712 442.9630 Apr 1961 496.0839 519.3350 472.8329 May 1961 507.5326 531.9278 483.1375 Jun 1961 575.4509 602.1935 548.7083 Jul 1961 666.5923 696.5558 636.6288 Aug 1961 657.9137 688.6454 627.1821 Sep 1961 550.3088 578.9777 521.6398 Oct 1961 492.9853 520.9553 465.0153 Nov 1961 420.2073 446.9458 393.4688 Dec 1961 465.6345 487.9686 443.3004 > plot(tsHW,tsHW.Pred)?
#方式二:使用 forecast包中的 hw方法()> library(forecast) > par(mfrow = c(2,1)) > plot(hw(tsdata,h = 12)) #如下圖上部分 > plot(hw(tsdata,seasonal='multi',h = 12)) #如下圖下部分?
?
轉載于:https://my.oschina.net/u/1785519/blog/1572616
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的常用时间序列分析方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac Supervisor 管理进程
- 下一篇: IBM heapAnalyzer