1. 程式人生 > >時間序列 R 09 ARIMA

時間序列 R 09 ARIMA

1.1 穩定性與差分

1.1.1 穩定性 stationarity

穩定性是指時間序列的屬性不在隨時間變化。因此有趨勢和季節性的時間序列不是穩定的序列。但是有一些具有周期性cyclic的時間序列因為其週期時間不一定,所以也是穩定性序列。

1.1.2 差分 Differencing

下圖a,b分別是道瓊斯指數與道瓊斯指數每天的變化量
這裡寫圖片描述
下圖是兩幅圖的ACF
這裡寫圖片描述
第二幅中僅有一個是稍大於95%線,而且Ljung-Box Q∗的p-value值為0.153 (for h=10h=10),可見b是穩定的,而顯然a是不穩定的。這種計算連續值的differences的方法就叫做differencing

(差分)。

1.1.3 隨機遊動 random walk

ytyt1=c+etoryt=c+yt1+et:.
這種模式有一個常數c,因此有不斷增長或者降低的趨勢,期預測方法為drift法。

1.1.4 二階差分

在差分的基礎之上在進行一次差分為二次差分:

y′′t=ytyt1=(ytyt1)(yt1yt2)=yt2yt1+yt2.
實際中一般很少需要二階以上差分,一階差分只有t-1個值,二階差分只有t-2個值。

1.1.5 lag-m差分Seasonal differences

在對季節性資料進行查分時往往不是進行相鄰資料的差分,而是用下式進行差分:

yt=ytytmm= number of seasons.
這叫做m滯後差分,也叫Seasonal differences 。
如果得到的差分結果是白噪聲,其預測方法用naive seasonal 方法,直接以最後一個週期為預測值
下圖是在進行log轉換後進行了一次seasonal差分,發現可能還不穩定,然後又進行了一次一階差分
這裡寫圖片描述
這樣兩次差分的方程為:
y′′t=ytyt1=(ytytm)(yt1ytm1)=ytyt1ytm+ytm1.
可見這兩次差分誰在前面都是一樣的結果,但是如果週期性比較好,建議先進行週期性差分,這樣可能只進行週期性差分就可以得到一個穩定序列,但是如果只進行一階差分一般得到的結果還是週期性的結果。

1.1.6 單位根檢驗 Unit root tests

關於什麼是單位根,http://blog.sina.com.cn/s/blog_6d0417a501017jrq.html
這裡我們只要知道單位根檢驗就看時間序列是否穩定的檢驗就可以了。
文中介紹了兩種方法Augmented Dickey-Fuller (ADF) test和Kwiatkowski-Phillips-Schmidt-Shin (KPSS)
ADF的迴歸方程為:

yt=ϕyt1+β1yt1+β2yt2++βkytk,
如果原算式yt是不穩定的,ϕ^將是接近於0的,如果是穩定的將是小於0的。
R中的命令是
adf.test(x, alternative = "stationary")

其零假設為原序列是不穩定的,所以得到的P-value越小越穩定
而在KPSS中預期相反,得到的值越大越穩定
KPSS的Rcode是

kpss.test(x)

另外,R語言中ndiffs()是一個很有用函式,可以判斷一個序列需要的差分數。nsdiffs()是判斷一個季節性序列所需要的差分數,一般季節性差分可能需要與lag-1差分混合使用,下面是使季節性資料穩定的栗子:

ns <- nsdiffs(x)
if(ns > 0) {
  xstar <- diff(x,lag=frequency(x),differences=ns)
} else {
  xstar <- x
}
nd <- ndiffs(xstar)
if(nd > 0) {
  xstar <- diff(xstar,differences=nd)
}

結果儲存在xstar中。

1.2 backshift notation

backshift的定義如下:

Byt=yt1.
並定義:
B(Byt)=B2yt=yt2.
一階差分用B表達
yt=ytyt1=ytByt=(1B)yt
二階差分
y′′t=yt2yt1+yt2=(1