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

時間序列:html

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

主要考慮的因素dom

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

時間序列趨勢通常爲線性的(linear),二次方程式的 (quadratic)或指數函數(exponential function)。優化

2.季節性變更(Seasonal variation) 按時間變更,呈現重複性行爲的序列。 季節性變更一般和日期或氣候有關。 季節性變更一般和年週期有關。spa

3.週期性變更(Cyclical variation) 相對於季節性變更,時間序列可能經歷「週期性變更」。 週期性變更一般是由於經濟變更。orm

4.隨機影響(Random effects)htm

時間序列的預測方法blog

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

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

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

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

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

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

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

相關文章
相關標籤/搜索