1. 程式人生 > >時間序列分析這件小事(六)--非平穩時間序列與差分

時間序列分析這件小事(六)--非平穩時間序列與差分

1.非平穩時間序列

之前我們說明了怎麼樣的時間序列是序列平穩的,但是世界並不是那麼美好,很多時間序列都不是平穩序列,所以這裡就要求我們做一些處理了。

首先我們來看一下非平穩時間序列長什麼樣。在AR模型中,只要自迴歸係數都絕對值都是小於1的,那麼序列就是平穩的,所以這樣一個序列,自迴歸係數等於1,就是不平穩的序列了。

yt = yt-1 + c

c是一個服從正態分佈的噪音。

#example 10
set.seed(12345)
ut = rnorm(50,0,1.5)
xt = cumsum(ut)
plot(xt,type = 'o');abline(h = 0)
其中,cumsum是一個計算累計數的函式。比如cumsum(c(1,2,3,4,5))=(1,1+2,1+2+3,1+2+3+4.....)=(1,3,6,10......)



這就是對非平穩序列的一個直觀的感受了。

2.非平穩序列的平穩方法--差分

非平穩序列往往一次到兩次差分之後,就會變成平穩序列。什麼是差分呢?就是後一時間點的值減去當前時間點,也就是yt-yt-1。

#example 11
x = 1:10
diff(x,d=1)
diff(x,d=2)

這裡,我們對1,2,3,4,5......這個序列做了兩次差分,都是後一個數減去前一個數。


值得注意的一點是,每一次差分之後,都會少一個序列值。

#example 12
plot(diff(xt,d = 1),type = 'o');abline(h = 0)
plot(diff(xt,d = 2),type = 'o');abline(h = 0)
我們用之前的序列試一下水,可以看到,一階差分和二階差分後,看上去都平穩了呢!




3.判斷序列是否平穩

前面我們用肉眼看了序列的平穩性,但是作為一個時間序列分析者,竟然用眼睛主觀判斷,這有點不合邏輯。很幸運的是,我們根據單位根過程(有興趣的讀者查詢相關資料),可以進行假設檢驗,譬如DF與ADF檢驗。

adf檢驗函式包含在tseries這個包中,使用前我們要先引用它。

#example 13
adf.test(xt)
adf.test(diff(xt))
adf.test(diff(xt,d=2))


大家注意看哦,當沒有做差分的時候,p-value是0.47+,而備擇假設是stationary,也就是平穩時間序列,所以零假設就是非平穩時間序列。p-value>0.05的時候,在95%的置信度下,我們是不能拒絕原假設的,所以我們不能說xt原序列是時序平穩的,但是對於一階差分和二階差分就是可以的了。