幫Stata連享會翻譯的第二篇文章:協整還是僞迴歸?。由於markdown語言還不是很成熟,尤其是在數學公式上有很多bug,所以我自己的博客就是我的測試001啦。以下爲原文:
Source: Ashish Rajbhandari → Cointegration or spurious regression?
時間序列數據經常是不平穩而且序列之間往往有一定程度上的共同聯動關係。一組時間序列協整意味着這組序列內存在一個長期的均衡關係。如果這種長期的均衡關係不存在,則表面上的聯動則是無意義的。
分析多個不平穩的時間序列是否協整可以幫助理解它們的長期表現。把30年的美國政府債券的利率看作是長期利率,把3個月的同種債券的利率看做是短期利率。根據相關理論,長期利率應該是短期利率的未來預期收益的平均值。這意味着這兩個利率之間在一定時間段內不可能有太大的偏離。也就是說,如果這兩個利率有協整關係,任何影響短期利率的因素也將帶來長期利率的調整。這個見解在做一些政策和投資決策的時候非常有用。
在協整分析中,我們會將一個不平穩的序列對一系列其他不平穩序列進行迴歸。令人驚訝的是,在有限樣本中,用不平穩序列對其他不平穩序列進行迴歸往往都能得到很顯著的係數和很高的。這種情況雖然看起來很像協整,但實際上往往是僞迴歸。
在這篇文章中,我會用模擬數據來分別展示在協整和僞迴歸下OLS估計量的漸近性質,然後使用Engle and Granger (1987)的方法來檢驗協整關係。
1. 協整
我們考慮兩個一階協整的兩個變量和,這意味着它們各自是,也就是說它們各自可以通過一階差分變成平穩序列。
如果和的線性組合是,這意味着,其中是協整向量,是平穩的均衡誤差項。一般來說,在多變量的協整中可能不止存在一個協整關係。然而, Engle–Granger方法假設不管有多少個變量都只存在一個協整關係。
一個標準的假設是將協整向量的其中一個係數標準化爲1來唯一地識別一組完全共線的協整關係。這種標準化的設定決定了哪些變量會出現在等式左邊,而哪些變量會出現在等式右邊,顯然標準化係數的選擇並不會產生實質性影響。以爲例,這意味如下的迴歸設定:
上面的等式描述了和之間的長期關係,這也被稱爲“靜態”迴歸因爲假設該等式中沒有其他變量的動態變化或誤差項的序列相關。
OLS估計量爲。由於和都是,當 $T \rightarrow \infty $ 時,分子和分母都會收斂於複雜的布朗運動函數。然而,無論是否和相關,都會收斂於真實的。實際上,這種情況下的估計量具有超一致性,這意味着該估計量會以比平穩序列迴歸下的OLS估計量更快的速度收斂於真實值。推斷的過程並不是很直接,因爲它的漸近分佈並不是標準分佈同時也依賴於常數項和趨勢項是否已經給出。
2. 蒙特卡洛模擬
我通過重複1000次的蒙特卡洛模擬畫出了OLS估計量在協整和僞迴歸下的經驗分佈。在僞迴歸下,的經驗分佈即使在擴大樣本後也不會收斂到真實值,這意味着OLS估計量在僞迴歸下不具有一致性。相對地,如果序列是協整的,我們可以看到的經驗分佈會收斂到其真實值。
2.1 僞迴歸的數據生成過程
我通過以下設定生成了僞迴歸的和:
其中和~。和是相互獨立的隨機遊走過程。由於和的線性組合是過程,所以該回歸是僞迴歸。
2.2 協整的數據生成過程
我通過以下設定生成了協整的和:
其中是唯一的過程。通過將誤差項和設定爲有1階滯後的VMA過程,我允許存在同期相關和序列相關。VMA過程由以下設定給出:
其中和由正態分佈生成,其均值爲0,方差矩陣爲
下圖畫出了經驗分佈,蒙特卡洛模擬的代碼在附錄中提供。
僞迴歸中的OLS估計量不具有一致性,因爲即使把樣本量從100擴大到1000後該估計量也不會收斂於其真實值0.7。不僅如此,在有限樣本中,僞迴歸的係數通常很顯著並且有很高的。事實上,Phillips(1986)指出了當$T \rightarrow \infty tF$統計量是發散的,因此以此爲推斷依據是不可信的。
在協整關係中,我人爲地在誤差項的生成過程中引入了序列相關,這導致在樣本量爲100時的結果有偏,而當樣本量擴大到200時有所改善,當樣本量擴大到1000時有顯著改善。由於協整關係中的仍然滿足一致性,因此雖然此時的漸近分佈不是標準分佈,我們仍然可以用做統計推斷。
2.3 協整關係的檢驗
我們在前面的部分我們看到了協整關係下OLS估計量具有一致性,甚至在誤差項序列相關時仍然滿足。爲了檢驗協整關係,我們可以首先對模型進行OLS估計得到殘差項,然後檢驗該殘差項是否存在單位根。如果序列是協整的,則誤差項一定是平穩的,這種方法叫做Engle–Granger兩步法。ADF(Augmented Dickey–Fuller)檢驗和PP(Phillips–Perron)檢驗可以用於第二步檢驗單位根的操作,見上一篇文章。
協整檢驗的原假設和備擇假設分別爲:
原假設意味着是非平穩的,也即是和之間不存在協整關係。備擇假設則說明是平穩的,也意味着協整關係的存在。
如果真實的協整向量已知,基於估計殘差的ADF檢驗在原假設下不會服從標準的DF分佈(Phillips and Ouliaris, 1990)。此外,Hansen(1992)認爲ADF統計量的分佈也依賴於和中的常數和線性趨勢項。Hamilton(1994)則提供了在這種情況下進行統計推斷的臨界值。
3. 例子
這裏有兩個之前進行蒙特卡洛模擬時生成的數據集。spurious.dta包含根據方程組生成的兩個用於僞迴歸的變量和。coint.dta則包含根據方程組生成的兩個具有協整關係的變量和。
首先,我對數據集spurious.dta中的協整關係進行檢驗。
. use spurious, clear
. reg y x, nocons
Source | SS df MS Number of obs = 100
-------------+---------------------------------- F(1, 99) = 6.20
Model | 63.4507871 1 63.4507871 Prob > F = 0.0144
Residual | 1013.32308 99 10.2355867 R-squared = 0.0589
-------------+---------------------------------- Adj R-squared = 0.0494
Total | 1076.77387 100 10.7677387 Root MSE = 3.1993
------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | -.1257176 .0504933 -2.49 0.014 -.2259073 -.0255279
------------------------------------------------------------------------------
的係數是負的且是顯著的。我使用帶resid
選項的predict
命令來獲得殘差,用dfuller
命令來做ADF檢驗。我使用noconstant
選項使迴歸中不包含殘差項,用lags(2)
選項來對序列相關做出調整。dfuller
命令中的noconstant
選項意味着擬合隨機遊走模型。
. predict spurious_resd, resid
. dfuller spurious_resd, nocons lags(2)
Augmented Dickey-Fuller test for unit root Number of obs = 97
---------- Interpolated Dickey-Fuller ---------
Test 1% Critical 5% Critical 10% Critical
Statistic Value Value Value
------------------------------------------------------------------------------
Z(t) -1.599 -2.601 -1.950 -1.610
正如之前提到的,DF分佈的臨界值在這種情況下並不適用。根據 Hamilton(1994),其臨界值應爲-2.76。該檢驗統計量爲-1.60意味着不能拒絕不存在協整關係的原假設。
我對數據集coint.dta也做了同樣的檢驗:
. use coint, clear
. reg y x, nocons
Source | SS df MS Number of obs = 100
-------------+---------------------------------- F(1, 99) = 3148.28
Model | 4411.48377 1 4411.48377 Prob > F = 0.0000
Residual | 138.72255 99 1.40123788 R-squared = 0.9695
-------------+---------------------------------- Adj R-squared = 0.9692
Total | 4550.20632 100 45.5020632 Root MSE = 1.1837
------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | .7335899 .0130743 56.11 0.000 .7076477 .7595321
------------------------------------------------------------------------------
. predict coint_resd, resid
. dfuller coint_resd, nocons lags(2)
Augmented Dickey-Fuller test for unit root Number of obs = 97
---------- Interpolated Dickey-Fuller ---------
Test 1% Critical 5% Critical 10% Critical
Statistic Value Value Value
------------------------------------------------------------------------------
Z(t) -5.955 -2.601 -1.950 -1.610
該DF檢驗統計量的值爲-5.95,顯然大於臨界值-2.76,因此在水平下拒絕不存在協整關係的原假設。
3. 結論
在這篇文章中,我使用蒙特卡洛模擬展示了OLS估計量在協整關係下的一致性。同時,我還使用Engle–Granger兩步法檢驗了模擬數據中的協整關係。
參考文獻
1.Engle, R. F., and C. W. J. Granger. 1987. Co-integration and error correction: Representation, estimation, and testing. Econometrica 55: 251–276.
2.Hamilton, J. D. 1994. Time Series Analysis. Princeton: Princeton University Press.
Hansen, B. E. 1992. Effcient estimation and testing of cointegrating vectors in the presence of deterministic trends. Journal of Econometrics 53: 87–121.
3.Phillips, P. C. B. 1986. Understanding spurious regressions in econometrics. Journal of Econometrics 33: 311–340.
4.Phillips, P. C. B., and S. Ouliaris. 1990. Asymptotic properties of residual based tests for cointegration. Econometrica 58: 165–193.
附錄
僞迴歸代碼
cscript
set seed 2016
local MC = 1000
quietly postfile spurious beta_t100 using t100, replace
forvalues i=1/`MC' {
quietly {
drop _all
set obs 100
gen time = _n
tsset time
gen nu_y = rnormal(0,0.7)
gen nu_x = rnormal(0,1.5)
gen err_y = nu_y in 1
gen err_x = nu_x in 1
replace err_y = l.err_y + nu_y in 2/l
replace err_x = l.err_x + nu_x in 2/l
gen y = err_y in 1
gen x = err_x
replace y = 0.7*x + err_y in 2/l
if (`i'==1) save spurious, replace
qui reg y x, nocons
}
post spurious (_b[x])
}
postclose spurious
協整代碼
cscript
set seed 2016
local MC = 1000
quietly postfile coint beta_t100 using t100, replace
forvalues i=1/`MC' {
quietly {
drop _all
set obs 100
gen time = _n
tsset time
matrix V = (1,0.7\0.7,1.5)
drawnorm nu_y nu_x, cov(V)
gen err_y = nu_y in 1
gen err_x = nu_x in 1
replace err_y = 0.3*l.nu_y + 0.4*l.nu_x ///
+ nu_y in 2/l
replace err_x = 0.7*l.nu_y + 0.1*l.nu_x ///
+ nu_x in 2/l
gen x = err_x in 1
replace x = l.x + err_x in 2/l
gen y = 0.7*x + err_y
if (`i'==1) save coint, replace
qui reg y x, nocons
}
post coint (_b[x])
}
postclose coint
畫圖代碼
/*Spurious regression*/
use t100, clear
quietly merge 1:1 _n using t200
drop _merge
quietly merge 1:1 _n using t1000
drop _merge
kdensity beta_t100, n(1000) generate(x_100 f_100) ///
kernel(gaussian) nograph
label variable f_100 "T=100"
kdensity beta_t200, n(1000) generate(x_200 f_200) ///
kernel(gaussian) nograph
label variable f_200 "T=200"
kdensity beta_t1000, n(1000) generate(x_1000 f_1000) ///
kernel(gaussian) nograph
label variable f_1000 "T=1000"
graph twoway (line f_100 x_100) (line f_200 x_200) ///
(line f_1000 x_1000), legend(rows(1)) ///
subtitle("Spurious regression") ///
saving(spurious, replace) xmlabel(0.7) ///
xline(0.7, lcolor(black)) nodraw
/*Cointegration*/
use t100, clear
quietly merge 1:1 _n using t200
drop _merge
quietly merge 1:1 _n using t1000
drop _merge
kdensity beta_t100, n(1000) generate(x_100 f_100) ///
kernel(gaussian) nograph
label variable f_100 "T=100"
kdensity beta_t200, n(1000) generate(x_200 f_200) ///
kernel(gaussian) nograph
label variable f_200 "T=200"
kdensity beta_t1000, n(1000) generate(x_1000 f_1000) ///
kernel(gaussian) nograph
label variable f_1000 "T=1000"
graph twoway (line f_100 x_100) (line f_200 x_200) ///
(line f_1000 x_1000), legend(rows(1)) ///
subtitle("Cointegration") ///
saving(cointegration, replace) ///
xline(0.7, lcolor(black)) nodraw
graph combine spurious.gph cointegration.gph, ///
title("Empirical densities of {&beta}")