基於R語言的ARIMA模型


A

IMA模型是一種著名的時間序列預測方法,主要是指將非平穩時間序列轉化為平穩時間序列,然后將因變量僅對它的滯后值以及隨機誤差項的現值和滯后值進行回歸所建立的模型。ARIMA模型根據原序列是否平穩以及回歸中所含部分的不同,包括移動平均過程(MA)、自回歸過程(AR)、自回歸移動平均過程(ARMA)以及ARIMA過程。其中ARIMA(p,d,q)稱為差分自回歸移動平均模型,AR是自回歸, p為自回歸項; MA為移動平均,q為移動平均項數,d為時間序列成為平穩時所做的差分次數。

通常的建立ARIMA模型需要以下幾步:

1.數據的預處理。對時間序列數據的平穩性和純隨機性進行檢驗,根據檢驗結果來判斷時間序列的類型,以便選擇合適的方法建立模型。

平穩性是指圍繞着一個常數上下波動且波動范圍有限,即有常數均值和常數方差。如果有明顯的上升或下降趨勢或周期性,那它通常不是平穩序列。

三種常用的檢驗平穩性的方法:

(1)時序圖。通過時序圖來觀察。一般而言,平穩序列始終在一個常數值附近隨機波動,且波動范圍有界;非平穩序列則有明顯的趨勢性或周期性。

(2)自相關與偏相關系數檢驗。在自相關圖中,在那一階數值高於虛線即表明自相關系數>0.5,就存在那一階自相關(偏自相關一樣)。隨着滯后數(延遲期數)的增加,平穩序列自相關系數會很快衰減至0而非平穩序列衰減速度通常較慢。若自相關圖呈現三角對稱性則為單調趨勢的非平穩序列。自相關系數長期位於零軸一邊表示有單調趨勢序列。自相關系數呈現明顯正弦波動規律則表明有周期變化規律

(3)單位根檢驗(ADF)。單位根檢驗是指檢驗序列中是否存在單位根,如果存在單位根就是非平穩時間序列。若P值<0.05,為平穩

如果時間序列不平穩該怎么辦?

(1)對數變換。對數變換主要是為了減小數據的振動幅度,使其線性規律更加明顯,對數變換相當於增加了一個懲罰機制,數據越大其懲罰越大,數據越小懲罰越小。這里強調一下,變換的序列需要滿足大於0,小於0的數據不存在對數變換。

(2)差分。k階差分就是相距k期的兩個序列值之間相減。若有季節趨勢還可以進行k-4步差分,年度趨勢則相應的K-12差分。

(3)平滑。

(4)分解,即將將時序數據分離成不同的成分。

純隨機性檢驗:

純隨機序列,又稱白噪聲序列,序列的各項數值之間沒有任何相關關系,序列在進行完全無序的隨機波動,可以終止對該序列的分析白噪聲序列是沒有信息可提取的平穩序列。若檢驗后P<0.05,說明不是白噪聲序列。

2.對(處理后的)平穩數據進行建模。若某個時間序列數據經過預處理之后,被判定為平穩非白噪聲序列,就可以進行時間序列建模。

3.對模型的檢驗、優化及應用。

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

案       例

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

 

數據來源SPSS Clementine 案例中關於男裝生產線月銷量,詳細見Clementine中catalog_forecast.str 流。

步驟一:導入xlsx格式數據。

library(xlsx)  #導入xlsx包

library(forecast)

library(tseries)

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

步驟二:建立模型並檢驗。

saletimeseries<-ts(sale,frequency = 12,start =c(1989,1))#構造時間序列

plot.ts(saletimeseries)#時序圖。分析時序圖可以看出,該時間序列成明顯的季節上升趨勢,通過自相關和偏自相關檢驗也驗證了這一觀點。

1

adf.test(saletimeseries)#平穩性檢驗0.01,為平穩性數據

a1<-auto.arima(saletimeseries,trace = TRUE)#auto.arima自動定階

a2<-arima(saletimeseries,order = c(0,0,0),seasonal = c(0,1,1))#建立模型

a3<-forecast.Arima(a2,h=12,level=c(99.5))#預測

plot(a3)

Box.test(a3$residuals)#0.2388<0.05殘差非白噪聲,說明可能還有信息沒有提取出。

3:模型的優化。

選擇利用1-12階差分優化模型。差分后的數據依然平穩,但在1階、12階、24階時可能存在自相關,且認為是偶然因素造成。

diff1<-diff(saletimeseries,1)

adf.test(diff1)#p<0.01,平穩

acf(diff1,lag.max = 24)

Box.test(diff1)#3.511e-06<0.05,為平穩非白噪聲

a4<-auto.arima(diff1,trace = TRUE)#定階,

a5<-arima(saletimeseries,order = c(5,0,0),seasonal = c(1,1,0))#建立模型

a6<-forecast.Arima(a5,h=12,level=c(99.5))#對后12期進行預測。#設置預測期數h與置信度水平

plot(a6)

Box.test(a6$residuals)#P=0.5866>0.05,殘差序列為白噪聲,說明建模成功。

4

5

 

對后12期的預測數據如下表所示。

%e6%90%9c%e7%8b%97%e6%88%aa%e5%9b%be16%e5%b9%b409%e6%9c%8819%e6%97%a52254_1

轉自:http://www.shujudata.top/基於r語言的arima模型/


免責聲明!

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



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