Apython
IMA模型是一種著名的時間序列預測方法,主要是指將非平穩時間序列轉化爲平穩時間序列,而後將因變量僅對它的滯後值以及隨機偏差項的現值和滯後值進行迴歸所創建的模型。ARIMA模型根據原序列是否平穩以及迴歸中所含部分的不一樣,包括移動平均過程(MA)、自迴歸過程(AR)、自迴歸移動平均過程(ARMA)以及ARIMA過程。其中ARIMA(p,d,q)稱爲差分自迴歸移動平均模型,AR是自迴歸, p爲自迴歸項; MA爲移動平均,q爲移動平均項數,d爲時間序列成爲平穩時所作的差分次數。優化
一般的創建ARIMA模型須要如下幾步:spa
1.數據的預處理。對時間序列數據的平穩性和純隨機性進行檢驗,根據檢驗結果來判斷時間序列的類型,以便選擇合適的方法創建模型。ast
平穩性是指圍繞着一個常數上下波動且波動範圍有限,即有常數均值和常數方差。若是有明顯的上升或降低趨勢或週期性,那它一般不是平穩序列。class
三種經常使用的檢驗平穩性的方法:test
(1)時序圖。經過時序圖來觀察。通常而言,平穩序列始終在一個常數值附近隨機波動,且波動範圍有界;非平穩序列則有明顯的趨勢性或週期性。變量
(2)自相關與偏相關係數檢驗。在自相關圖中,在那一階數值高於虛線即代表自相關係數>0.5,就存在那一階自相關(偏自相關同樣)。隨着滯後數(延遲期數)的增長,平穩序列自相關係數會很快衰減至0而非平穩序列衰減速度一般較慢。若自相關圖呈現三角對稱性則爲單調趨勢的非平穩序列。自相關係數長期位於零軸一邊表示有單調趨勢序列。自相關係數呈現明顯正弦波動規律則代表有周期變化規律。方法
(3)單位根檢驗(ADF)。單位根檢驗是指檢驗序列中是否存在單位根,若是存在單位根就是非平穩時間序列。若P值<0.05,爲平穩im
若是時間序列不平穩該怎麼辦?數據
(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)#時序圖。分析時序圖能夠看出,該時間序列成明顯的季節上升趨勢,經過自相關和偏自相關檢驗也驗證了這一觀點。
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,殘差序列爲白噪聲,說明建模成功。
對後12期的預測數據以下表所示。
轉自:http://www.shujudata.top/基於r語言的arima模型/