Stata中的單位根檢驗

今天幫連玉君老師的stata連享會翻譯了一篇文章,原文鏈接。第一次嘗試用markdown編輯,發現CSDN竟然支持markdown,所以順手po上來試試效果。以下爲正文:
檢驗序列的平穩性是時間序列分析的關鍵步驟。時間序列中很多估計量的統計特性都依賴於數據是否平穩。一般意義上,一個(弱)平穩過程的期望、方差和自相關係數應不隨時間變化。
然而在大多可觀測的時間序列中,趨勢項的存在總會使得序列不具有平穩性。趨勢項包括確定趨勢項和隨機趨勢項,趨勢項的類型決定了我們需要使用什麼方法將時間序列轉換成平穩序列。比如,含有隨機趨勢項的單位根過程可以通過差分變得平穩。然而,對實際上含有確定趨勢項的序列進行差分則會得到含單位根的移動平均過程。因此,在做轉換之前,識別出序列的非平穩性到底是源於確定趨勢項還是隨機趨勢項是非常重要的。
在這篇文章中,我會介紹檢驗單位根的三個命令。

隨機趨勢

隨機趨勢的一個簡單例子是隨機遊走過程。

隨機遊走

考慮以下AR(1)過程:
(1)yt=yt1+εty_t=y_{t-1}+\varepsilon_t \tag{1}
其中yty_t是被解釋變量。誤差項εt\varepsilon_t期望爲0,方差爲σ2\sigma^2且獨立同分布。如果這個過程的初值爲y0=0y_0=0,則yty_t可以寫成:
yt=i=1tεty_t=\sum_{i=1}^{t} \varepsilon_t
其中等式右端爲隨機趨勢項i=1tεt\sum_{i=1}^{t} \varepsilon_tyty_t的期望爲0,方差爲σ2\sigma^2。顯然期望是常數,而方差隨時間變化。

帶漂移項的隨機遊走

向隨機遊走過程加入一個常數項即可得到帶漂移項的隨機遊走:
(2)yt=α+yt1+εty_t=\alpha+y_{t-1}+\varepsilon_t \tag{2}
其中α\alpha是常數項。如果這個過程的初值爲0,則yty_t可以寫成:

yt=αt+i=1tεt y_t=\alpha t+\sum_{i=1}^{t} \varepsilon_t
現在等式右端是一個確定性趨勢項αt\alpha t和一個隨機趨勢項i=1tεt\sum_{i=1}^{t} \varepsilon_t的和。yty_t的期望爲αt\alpha t,方差爲σ2\sigma^2。期望和方差都隨着時間tt的增加而增加。注意如果漂移項α\alpha的值接近於0,則帶漂移項的隨機遊走將非常接近普通的隨機遊走。

確定趨勢

考慮如下帶有線性確定趨勢的隨機過程:
yt=α+δt+ϕyt1+εt y_t=\alpha+\delta t+\phi y_{t-1}+\varepsilon_t
其中δ\delta是時間tt的係數,ϕ\phi是AR過程的參數且ϕ<1\left| \phi\right|<1。注意到帶漂移項的隨機遊走過程也與有線性確定趨勢的過程相似,只是前者在確定趨勢之外還包含一個隨機趨勢。

非平穩過程繪圖

首先,我分別根據隨機遊走模型和漂移項爲0.1的隨機遊走模型模擬生成數據並畫圖,代碼在附錄中提供。

從上圖來看,兩個時間序列都沒有明顯的趨勢,並且紅線相當於藍線總是有正向的調整。如果將這兩個序列分別畫到兩張圖上,幾乎不可能區分出哪個纔是帶漂移項的隨機遊走過程。然而,由於兩個序列都包含隨機趨勢,我們仍然可以通過將兩個序列差分來獲得平穩的時間序列。
類似地,我分別根據漂移項爲1的隨機遊走模型和帶有確定性趨勢的模型分別模擬數據並畫圖。

如上圖所示,兩個序列看起來非常相像。藍線在一個確定的趨勢線上下浮動。紅線的隨機趨勢則在樣本開始時緩慢增長,而在樣本後期迅速增長。在這種情況下想要轉換爲平穩的時間序列,就像前面提到的,應用正確的轉換方式是非常重要的。

單位根檢驗

單位根檢驗的原假設是真正的隨機過程爲隨機遊走過程(1)(1)或者是一個帶漂移項的隨機遊走過程(2)(2)。考慮如下的AR(1)模型:
yt=ϕyt1+εt y_t=\phi y_{t-1}+\varepsilon_t
其中εt\varepsilon_t服從獨立同分布的N(0,σ2)N(0,\sigma^2)分佈。原假設意味着ϕ=1\phi=1,而備擇假設意味着ϕ<1\left| \phi\right|<1
如果ϕ\phi確實是1,則隨着樣本量的擴大,OLS估計值ϕ^\hat{\phi}相對於平穩序列以一個更快的速度收斂於其真實值1。然而,由於ϕ^\hat{\phi}的漸近分佈不是標準分佈,因此tt檢驗在這裏並不適用。
此外,在迴歸中是否包含常數或時間趨勢項會導致檢驗統計量有不同的漸近分佈,這也意味着在做這類檢驗時清楚設定原假設和備擇假設是非常重要的。

ADF檢驗

在單位根檢驗的原假設下,真實的過程要麼是隨機遊走,要麼是帶漂移項的隨機遊走。對於模型(3)(3),原假設成立意味着ϕ=1\phi=1。使用OLS估計模型(3)(3)將忽略殘差的序列相關性。
(3)yt=α+δt+ϕyt1+εt y_t=\alpha+\delta t+\phi y_{t-1}+\varepsilon_t \tag{3}
爲了解決這個問題,ADF檢驗通過將模型(3)(3)變形爲模型(4)(4)的差分形式並檢驗是否β=0\beta=0
(4)Δyt=α+δt+βϕyt1+I=1kγiΔyti+εt \Delta y_t=\alpha+\delta t+\beta \phi y_{t-1}+\sum_{I=1}^{k}\gamma_i \Delta y_{t-i}+\varepsilon_t \tag{4}
注意(4)(4)可以約束α\alphaδ\delta其中一個等於0或同時爲0,但是不同的約束會對應不同的檢驗統計量。Hamilton(1994)1給出了四種可能情況下檢驗統計量的分佈。
我分別模擬了兩列時間序列,其中yrwd2是漂移項爲1的隨機遊走過程,yt是有線性趨勢的模型。我用dfuller命令來做ADF檢驗。我感興趣的原假設I是yrwd2爲有漂移項的隨機遊走過程,其備擇假設爲yrwd2是一個有線性趨勢的平穩過程。因此爲了檢驗(4)(4),我會加入dfuller命令的選項trend

. dfuller yrwd2, trend

Dickey-Fuller test for unit root        Number of obs   =   149

               ---------- Interpolated Dickey-Fuller ---------
                  Test         1% CV      5% CV    10%CV
               Statistic                                   
-------------------------------------------------------------------
 Z(t)           -2.664        -4.024     -3.443   -3.143
-------------------------------------------------------------------
MacKinnon approximate p-value for Z(t) = 0.2511

和預期一樣,yrwd2的檢驗結果顯示不能拒絕該過程爲帶漂移的隨機遊走過程的原假設。接下來,我們對yt序列也做類似的檢驗。

. dfuller yt, trend

Dickey-Fuller test for unit root       Number of obs   =  149

                       ------- Interpolated Dickey-Fuller ------
                  Test         1% CV      5% CV     10% CV
               Statistic                           
----------------------------------------------------------------
 Z(t)           -5.328        -4.024     -3.443     -3.143
----------------------------------------------------------------
MacKinnon approximate p-value for Z(t) = 0.0000

和預期一樣,yt序列的檢驗結果拒絕了原假設。

Phillips–Perron檢驗

Phillips(1987)2和Phillips and Perron(1988)3開發出這個檢驗主要是爲了解決殘差項中潛在的序列相關和異方差問題,其檢驗統計量的漸進分佈和臨界值與ADF檢驗相同。
stata中,PP檢驗的命令pperrondfuller的用法類似。使用pperronyrwd2yt可以得到與ADF檢驗類似的結果。

GLS去勢的ADF檢驗

Elliott et al. (1996)4提出的GLS-ADF檢驗與ADF檢驗類似,只是在對模型(4)(4)進行估計之前,需要先對時間序列進行GLS迴歸。Elliott et al. (1996)4證明了這個檢驗比ADF檢驗表現更好。
爲了檢驗yrwd2是否是一個帶漂移項的隨機遊走過程,我使用設定最大4階滯後的dfgls命令對模型(4)(4)進行估計:

. dfgls yrwd2, maxlag(4)

DF-GLS for yrwd2                                      Number of obs =   145

               DF-GLS tau      1% Critical     5% Critical     10% Critical
  [lags]     Test Statistic        Value           Value            Value
---------------------------------------------------------------------------
    4            -1.404           -3.520          -2.930           -2.643
    3            -1.420           -3.520          -2.942           -2.654
    2            -1.638           -3.520          -2.953           -2.664
    1            -1.644           -3.520          -2.963           -2.673

Opt Lag (Ng-Perron seq t) = 0 [use maxlag(0)]
Min SC   =   3.31175 at lag  1 with RMSE  5.060941
Min MAIC =  3.295598 at lag  1 with RMSE  5.060941

注意,與dfullerpperon命令不同的是,dfgls默認控制了線性時間趨勢項。結果仍然顯示不能拒絕yrwd2是帶漂移項的隨機遊走過程的原假設。
最後,我對yt序列做了同樣的檢驗:

. dfgls yt, maxlag(4)

DF-GLS for yt                                         Number of obs =   145

               DF-GLS tau      1% Critical     5% Critical     10% Critical
  [lags]     Test Statistic        Value           Value            Value
---------------------------------------------------------------------------
    4            -4.013           -3.520          -2.930           -2.643
    3            -4.154           -3.520          -2.942           -2.654
    2            -4.848           -3.520          -2.953           -2.664
    1            -4.844           -3.520          -2.963           -2.673

Opt Lag (Ng-Perron seq t) = 0 [use maxlag(0)]
Min SC   =  3.302146 at lag  1 with RMSE  5.036697
Min MAIC =  3.638026 at lag  1 with RMSE  5.036697

與期望一致,我們拒絕了yt序列爲帶漂移項的隨機遊走過程的原假設。

結論

在這篇文章中,我討論了時間序列非平穩主要是由於存在隨機趨勢項或確定趨勢項或二者都有,同時還使用介紹瞭如何使用dfullerpperrondfgls命令檢驗是否存在單位根。

附錄

這是生成隨機遊走過程、帶漂移項的隨機遊走過程以及帶線性趨勢過程的代碼:

clear all
set seed 2016
local T = 200
set obs `T'
gen time = _n
label var time "Time"
tsset time
gen eps = rnormal(0,5)
 
/*Random walk*/
gen yrw = eps in 1
replace yrw = l.yrw + eps in 2/l
 
/*Random walk with drift*/
gen yrwd1 = 0.1 + eps in 1
replace yrwd1 = 0.1 + l.yrwd1 + eps in 2/l
 
/*Random walk with drift*/
gen yrwd2 = 1 + eps in 1
replace yrwd2 = 1 + l.yrwd2 + eps in 2/l
 
/*Stationary around a time trend model*/
gen yt = 0.5 + 0.1*time + eps in 1
replace yt = 0.5 + 0.1*time +0.8*l.yt+ eps in 2/l
drop in 1/50
 
tsline yrw yrwd1, title("Stochastic trend")          ///
        legend(label(1 "Random walk")                ///
        label(2 "Random walk with drift"))
tsline yt yrwd2,                                     ///
        legend(label(1 "Deterministic time trend")   ///
        label(2 "Random walk with drift"))           ///
        title("Stochastic and deterministic trend")

  1. Hamilton, J. D. 1994. Time Series Analysis. Princeton: Princeton University Press. ↩︎

  2. Phillips, P. C. B. 1987. Time series regression with a unit root. Econometrica 55: 277–301. ↩︎

  3. Phillips, P. C. B., and P. Perron. 1988. Testing for a unit root in time series regression. Biometrika 75: 335–346. ↩︎

  4. Elliott, G. R., T. J. Rothenberg, and J. H. Stock. 1996. Efficient tests for an autoregressive unit root. Econometrica 64: 813–836. ↩︎ ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章