ARIMA模型的基本思想是將非平穩時間序列轉化為平穩時間序列,然後將因變量僅對它的滯後值以及隨機誤差項的現值和滯後值進行回歸所建立的模型。ARMIA模型有四種形式:移動平均模型-MA(q)、自回歸模型-AR(p)、自回歸移動平均模型ARMA(p,q)以及差分自回歸移動平均模型ARIMA(p,d,q ),可以說所有模型都是ARIMA(p,d,q )的變體。
ARIMA(p,d,q)模型的說明:
1. 差分
這個過程是ARIMA模型相比ARMA模型而言多的一個過程,在時間序列為非平穩序列時,可以對原序列做差分來得到平穩時間序列,可能會需要做多次差分。d這個參數就是定義原時間序列需要做幾次差分,若時間序列本身就是平穩的,數據不需要做差分,則ARMIA模型為ARIMA(p,0,q),等同於ARMA(p,q)。
2. 自回歸
如果時間序列{yt}滿足
其中{εt}是獨立同分布的隨機變量序列,對於任意t,
則稱時間序列服從p階自回歸模型,記為AR(p),等同於ARIMA(p,0,0)。稱為自回歸係數。
3. 移動平均
如果時間序列{yt}滿足
則稱時間序列服從q階移動平均模型,記為MA(q),等同於ARIMA(0,0,q)。稱為移動平均係數。
4. 自回歸移動平均
如果時間序列{yt}滿足
則稱時間序列服從(p,q)階自回歸移動模型,記為ARMA(p,q),等同於ARIMA(p,0,q)。
p,d,q參數的確定及其原則
1. d是時間序列做差分的次數,做差分的目的是將時間序列轉為平穩時間序列,什麼樣的時間序列能稱為平穩時間序列呢?時間序列取自某一隨機過程,次隨機過程的隨機特徵不隨時間變化,則我們稱過程是平穩的,這是教科書上的說法。我的理解是,時間序列滿足加性模型,即時間序列整體沒有明顯的上升或者下降趨勢,隨機波動的規模隨時間的變化也是大致相同的。
2. p和q,對平穩時間序列做其自相關圖和偏自相關圖,根據自相關偏自相關圖的拖尾截尾的性質來確定p和q的值。基本原則如下表:
截尾是指時間序列的自相關函數(ACF)或偏自相關函數(PACF)在某階後均為0的性質(比如AR的PACF);拖尾是ACF或PACF並不在某階後均為0的性質(比如AR的ACF)。判斷過程中拖尾截尾並不一定是以0為標準,可能只是趨於0。
在一個實際的問題中,可能多個模型都適用與這個問題,這時選擇的標準是精簡預測,使參數儘量少。例如一個實際問題,可能ARMA(3,0),ARMA(0,1)和ARMA(p,q)模型都能用,ARMA(p,q)模型參數p+q>2,ARMA(3,0)參數有3個,ARMA(0,1)參數有1個,所以這裡選擇ARMA(0,1)模型。
(作者:EchoCaiCai
來源:CSDN
原文:https://blog.csdn.net/cl1143015961/article/details/41448181 )
案 例
https://blog.csdn.net/oxuzhenyi/article/details/76615816
1.1 實驗內容
本實驗主要探討了幾種時間序列的預測模型,首先帶領大家對時間序列有一個初步的認識再在這個基礎之上,向讀者介紹當下最常用的 ARIMA 模型來預測時間序列,接著為讀者展示幾種指數平滑的方法來預測,最後通過幾種模型的對比,讓大家可以從中選擇出一個最佳的模型來實現預測。
1.2 實驗知識點
· 時間序列預測
· ARIMA 模型
· 指數平滑
1.3 實驗環境
· R version 3.4.1
· RStudio
二、實驗內容
2.1 時間序列預測
時間序列預測法就是通過編制和分析時間序列,根據時間序列所反映出來的發展過程、方向和趨勢,進行類推或延伸,藉以預測下一段時間或以後若干年內可能達到的水平。
2.2 時間序列預測法的步驟
第一步收集歷史資料,加以整理,編成時間序列,並根據時間序列繪成統計圖
第二步分析時間序列。時間序列中的每一時期的數值都是由許許多多不同的因素同時發生作用後的綜合結果。
第三步求時間序列的長期趨勢(T)季節變動(s)和不規則變動(I)的值,並選定近似的數學模式來代表它們
第四步利用時間序列資料求出長期趨勢、季節變動和不規則變動的數學模型後,就可以利用它來預測未來的長期趨勢值 T 和季節變動值 s,在可能的情況下預測不規則變動值 I。
2.3 時間序列預測法的分類
時間序列預測法可用於短期預測、中期預測和長期預測。根據對資料分析方法的不同,又可分為:簡單序時平均數法、加權序時平均數法、移動平均法、加權移動平均法、趨勢預測法、指數平滑法、季節性趨勢預測法、市場壽命周期預測法等。
三、實驗步驟
本次實驗主要使用的是自回歸移動平均和指數平滑法。
3.1 ARIMA 模型
自回歸移動平均模型(ARIMA)包含一個確定(explicit)的統計模型用於處理時間序列的不規則部分,它允許不規則部分可以自相關。
3.1.1 數據準備
加載相應數據包
install.packages('zoo')
install.packages('xts')
install.packages('TTR')
library(zoo)
library(xts)
library(TTR)
本實驗選用的是 42 位英國國王的去世年齡數據,然後將其轉化成時間序列數據,並用圖形的形式展示出來。
kings<-scan("http://robjhyndman.com/tsdldata/misc/kings.dat",skip=3)
kingstimeseries<-ts(kings)
plot.ts(kingstimeseries)
3.1.2 數據差分
ARIMA 模型定義的是一個平穩時間序列。因此,如果從一個非平穩的時間序列開始,那麼首先就需要做時間序列差分直到得到一個平穩時間序列。如果必須對時間序列做 d 階差分才能得到一個平穩序列,那麼就使用 ARIMA(p,d,q) 模型,其中 d 是差分的階數。
可以通過下面的代碼來得到時間序列數據的一階差分,並畫出差分序列的圖:
kingstimeseriesdiff1<-diff(kingstimeseries,differences=1)
plot.ts(kingstimeseriesdiff1)
從一階差分的圖中可以看出,數據已經是平穩的。如果不平穩就需要繼續差分。所以對於英國國王去世年齡時間序列選擇 ARIMA(p,1,q) 的模型。
3.1.3 尋找 ARIMA 模型
當我們的獲得的時間序列是平穩的,或者經過 d 次差分後的到了一個平穩序列,接下來就是選擇一個合適的 ARIMA 模型,通常我們需要檢查平穩時間序列的自相關圖和偏相關圖,也就是尋找 ARIMA(p,d,q) 中合適的 p 值和 q 值。
我們通常採用ARMA模型的AIC法則。我們知道:增加自由參數的數目提高了擬合的優良性,AIC鼓勵數據擬合的優良性但是儘量避免出現過度擬合(Overfitting)的情況。所以優先考慮的模型應是AIC值最小的那一個。赤池信息準則的方法是尋找可以最好地解釋數據但包含最少自由參數的模型。不僅僅包括AIC準則,目前選擇模型常用如下準則:
* AIC=-2 ln(L) + 2 k 中文名字:赤池信息量 akaike information criterion
* BIC=-2 ln(L) + ln(n)*k 中文名字:貝葉斯信息量 bayesian information criterion
* HQ=-2 ln(L) + ln(ln(n))*k hannan-quinn criterion
構造這些統計量所遵循的統計思想是一致的,就是在考慮擬合殘差的同時,依自變量個數施加「懲罰」。但要注意的是,這些準則不能說明某一個模型的精確度,也即是說,對於三個模型A,B,C,我們能夠判斷出C模型是最好的,但不能保證C模型能夠很好地刻畫數據,因為有可能三個模型都是糟糕的。
acf(kingstimeseriesdiff1,lag.max=20)
acf(kingstimeseriesdiff1,lag.max=20,plot=FALSE)
從上面圖中可以看出在滯後 1 階的自相關值超出了置信邊界,但是其他所有在滯後1-20 階的自相關值都沒有超出置信邊界。
pacf(kingstimeseriesdiff1,lag.max=20)
pacf(kingstimeseriesdiff1,lag.max=20,plot=FALSE)
偏相關圖顯示在滯後 1,2 和 3 階時的偏自相關係數超出了置信邊界,為負值,且在等級上隨著滯後階數的增加而緩慢減少。
安裝 forecast 包並載入:
install.packages("forecast")
library(forecast)
根據 acf 和 pacf 我們可以先擬合 ARIMA(1,1,3) 模型:
kings.arima <- arima(kingstimeseries, order = c(1,1,3))
summary(kings.arima)
3.1.4 模型預測
未來 5 位國王的預測值
kingsarimaforecast <- forecast(kings.arima, h = 5)
kingsarimaforecast
plot(kingsarimaforecast)
3.1.5 模型誤差檢驗
在指數平滑模型下,觀察 ARIMA 模型的預測誤差是否服從零均值、方差不變的正態分布,同時也可以觀察連續預測誤差是否(自)相關。
同時對國王去世年齡使用 ARIMA(1,1,3) 模型後所產生的預測誤差做(自)相關圖,和 Ljung-Box 檢驗:
acf(kingsarimaforecast$residuals,lag.max=20)
Box.test(kingsarimaforecast$residuals, lag=20, type="Ljung-Box")
相關圖顯示出在滯後 1-20 階中樣本自相關值都沒有超出顯著(置信)邊界,而且 Ljung-Box 檢驗的 p 值為 0.9515,所以我們推斷在滯後 1-20 階中沒有明顯證據說明預測誤差是非零自相關的。
Ljung-Box test是對randomness的檢驗,或者說是對時間序列是否存在滯後相關的一種統計檢驗。對於滯後相關的檢驗,我們常常採用的方法還包括計算ACF和PCAF並觀察其圖像,但是無論是ACF還是PACF都僅僅考慮是否存在某一特定滯後階數的相關。LB檢驗則是基於一系列滯後階數,判斷序列總體的相關性或者說隨機性是否存在。
時間序列中一個最基本的模型就是高斯白噪聲序列。而對於ARIMA模型,其殘差被假定為高斯白噪聲序列,所以當我們用ARIMA模型去擬合數據時,擬合後我們要對殘差的估計序列進行LB檢驗,判斷其是否是高斯白噪聲,如果不是,那麼就說明ARIMA模型也許並不是一個適合樣本的模型。
3.1.6 ARIMA 模型自動預測
我們也可以通過 forecast 包裡的 auto.arima 這個函數進行 ARIMA 模型自動的預測。
kings.arima1 <- auto.arima(kingstimeseries)
summary(kings.arima1)
重新生成模型,通過以下的代碼完成:
kings.arima_new <- arima(kingstimeseries, order=c(0,1,1))
summary(kings.arima_new)
使用自動生成的模型進行預測:
kingsarimaforecast <- forecast(kings.arima_new, h = 5 )
kingsarimaforecast
plot(kingsarimaforecast)
進行模型誤差檢驗
acf(kingsarimaforecast$residuals,lag.max=20)
Box.test(kingsarimaforecast$residuals, lag=20,type="Ljung-Box")
在時間序列下通過對比自動擬合的模型,這也不失為一種參照的標準。
個人總結,參數很重要,對q,d,p 的檢驗,對預測結果可以觀察ARIMA模型的殘差是否是平均值為0且方差為常數的正態分布(服從零均值、方差不變的正態分布),同時也要觀察連續殘差是否(自)相關。
R語言時間序列完整教程:
https://www.analyticsvidhya.com/blog/2015/12/complete-tutorial-time-series-modeling/