基於R語言的時間序列指數模型


時間序列:

(或稱動態數列)是指將同一統計指標的數值按其發生的時間先后順序排列而成的數列。時間序列分析的主要目的是根據已有的歷史數據對未來進行預測。(百度百科)

主要考慮的因素

1.長期趨勢(Long-term trend) : 時間序列可能相當穩定或隨時間呈現某種趨勢。

時間序列趨勢一般為線性的(linear),二次方程式的 (quadratic)或指數函數(exponential function)。

2.季節性變動(Seasonal variation) 按時間變動,呈現重復性行為的序列。 季節性變動通常和日期或氣候有關。 季節性變動通常和年周期有關。

3.周期性變動(Cyclical variation) 相對於季節性變動,時間序列可能經歷“周期性變動”。 周期性變動通常是因為經濟變動。

4.隨機影響(Random effects)

時間序列的預測方法

1.指數平滑法:描述時間序列數據的變化規律和行為,不去試圖解釋和理解這種變化的原因

2.ARIMA模型:描述時間序列數據的變化規律和行為,它允許模型中包含趨勢變動、季節變動、循環變動和隨機波動等綜合因素影響。具有較高的預測精度,可以把握過去數據變動模式,有助於解釋預測變動規律

##################################################################################

在本文中主要介紹指數平滑法在R語言時間序列預測中的應用,最后以實例操作指數平滑法時間序列預測。

##################################################################################

含義:

指數平滑法(Exponential Smoothing,ES)是布朗(Robert G..Brown)所提出,布朗認為時間序列的態勢具有穩定性或規則性,所以時間序列可被合理地順勢推延;他認為最近的過去態勢,在某種程度上會持續到未來,所以將較大的權數放在最近的資料。

模型分類及適用條件

1.簡單指數平滑 適用條件:相加模型,並且處於恆定水平和沒有季節性變動的時間序列

X1<-HoltWinters(rainseries, beta=FALSE, gamma=FALSE)

2.霍爾特指數平滑法  適用條件:一個增長或降低趨勢的、沒有季節性相加模型,X2<-HoltWinters(skirtsseries, gamma=FALSE)

3.Holt-Winters 指數平滑法   適用條件:一個增長或降低趨勢並存在季節性可被描述成為相加模型的時間序列。

X3<-HoltWinters(rainseries),其中平滑化依靠三個參數來控制:alpha,beta 和 gamma,分別對應當前時間點上的水平,趨勢部分的斜率和季節性部分,參數 alpha,beta 和 gamma

的取值都在 0 和 1 之間,並且當其取值越接近 0 意味着對未來的預測值而言最近的觀測值占據相對較小的權重。參數為默認為TRUE,

以上指數平滑只給出原始時間序列所覆蓋時期內的預測。但可以通過指定“l.start” 和“b.start” 參數去指定水平和趨勢的斜率的初始值。

最后:指數平滑法計算出預測區間,那么預測誤差必須是不相關的,而且必須是服從零均值、方差不變的正態分布

實例:以data Market中leading economic indicator數據為例進行分析預測。

1.導入原始數據,並制作時序圖進行數據初步判斷,代碼如下:

library(xlsx)  #導入xlsx包

library(forecast)

library(tseries)

indicator<-read.xlsx(“C:/pythonshu/indicator.xlsx”,1)#導入數據

indicatortimeseries<-ts(indicator,frequency = 12,start =c(2010,1))

plot.ts(indicatortimeseries)#時序圖,上升趨勢無季節

Rplot01

2.判斷為可以使用holt指數模型,故使用holt指數命令進行操作,代碼如下:

fithot<-HoltWinters(indicatortimeseries,gamma = FALSE,l.start = 95.1)#指定模型初始值

plot(fithot)#時序圖

Rplot06

3.利用構建好的模型進行后10期數據的預測。其中深色為置信區間為95%的預測范圍,淺色為80%。

fithot2<-forecast.HoltWinters(fithot,h=10)#預測后10期數據

plot(fithot2)#時序圖

Rplot07

4.殘差檢驗:

Box.test(fithot2$residuals,lag=6,type=’Ljung’)#白噪聲檢驗,結果中P值=0.035<0.05,殘差為非白噪聲序列,說明殘差中還蘊含信息,模型可以繼續優化

5.模型優化:

用decompose()函數對時間序列進行分解,發現其有明顯的上升與季節趨勢,故選用Holt-Winters 指數平滑法對其優化。

優化模型及對后12期數據的預測代碼:

fithot<-HoltWinters(indicatortimeseries)#指定模型初始值

plot(fithot)#時序圖

fithot2<-forecast.HoltWinters(fithot,h=10)#預測后10期數據

plot(fithot2)#時序圖

fen

houyu

6.對優化后模型的檢驗:

Box.test(fithot2$residuals,lag=10,type=’Ljung’)#白噪聲檢驗,結果為0.6265>0.05殘差為白噪聲序列,模型擬合有效

acf(fithot2$residuals,lag.max = 20)#自相關圖,非0時不相關

plotForecastErrors <- function(forecasterrors)

{

# make a red histogram of the forecast errors:

mysd <- sd(forecasterrors)

hist(forecasterrors, col=”red”, freq=FALSE)

# freq=FALSE ensures the area under the histogram = 1

# generate normally distributed data with mean 0 and standard deviation mysd

mynorm <- rnorm(10000, mean=0, sd=mysd)

myhist <- hist(mynorm, plot=FALSE)

# plot the normal curve as a blue line on top of the histogram of forecast errors:

points(myhist$mids, myhist$density, type=”l”, col=”blue”, lwd=2)

}

plotForecastErrors(fithot2$residuals)#殘差直方圖, 預測誤差是正態分布,並且均值為零,方差不變。

acfzhi

###########################################################################################

以上就是利用指數平滑構建時間序列預測模型的簡單案例,你學會了嗎?

部分文獻參考:1、百度百科相關詞條

2、沈浩老師:時間序列預測技術http://shenhaolaoshi.blog.sohu.com/137698400.html

3, http://www.shujudata.top/基於r語言的時間序列指數模型/


免責聲明!

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



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