使用R語言進行協整關係檢驗

協整檢驗是爲了檢驗非平穩序列的因果關係,協整檢驗是解決僞迴歸爲問題的重要方法。首先回歸僞迴歸例子:

僞迴歸Spurious regression 僞迴歸方程的擬合優度、顯著性水平等指標都很好,但是其殘差序列是一個非平穩序列,擬合一個僞迴歸:

 

#調用相關R

library(lmtest)

library(tseries)

#模擬序列

set.seed(123456)

e1 = rnorm(500)

e2 = rnorm(500)

trd = 1:500

y1 = 0.8 * trd + cumsum(e1)

y2 = 0.6 * trd + cumsum(e2)

sr.reg = lm(y1 ~ y2)

#提取回歸殘差

error = residuals(sr.reg)

#作殘差散點圖

plot(error, main = "Plot of error")

#對殘差進行單位根檢驗

adf.test(error)

## Dickey-Fuller = -2.548, Lag order = 7, p-value = 0.3463

## alternative hypothesis: stationary

#僞迴歸結果,相關參數都顯著

summary(sr.reg)

## Residuals:

## Min 1Q Median 3Q Max

## -30.654 -11.526 0.359 11.142 31.006

## Coefficients:

## Estimate Std. Error t value Pr(>|t|)

## (Intercept) -29.32697 1.36716 -21.4 <2e-16 ***

## y2 1.44079 0.00752 191.6 <2e-16 ***

## Residual standard error: 13.7 on 498 degrees of freedom

## Multiple R-squared: 0.987, Adjusted R-squared: 0.987

## F-statistic: 3.67e+04 on 1 and 498 DF, p-value: <2e-16

 

dwtest(sr.reg)

## DW = 0.0172, p-value < 2.2e-16

恩格爾-格蘭傑檢驗Engle-Granger 第一步:建立兩變量(y1,y2)的迴歸方程, 第二部:對該回歸方程的殘差(resid)進行單位根檢驗其中,原假設兩變量不存在協整關係,備擇假設是兩變量存在協整關係。利用最小二乘法對迴歸方程進行估計,從迴歸方程中提取殘差進行檢驗。

set.seed(123456)

e1 = rnorm(100)

e2 = rnorm(100)

y1 = cumsum(e1)

y2 = 0.6 * y1 + e2

# ()迴歸模型

lr.reg = lm(y2 ~ y1)

error = residuals(lr.reg)

adf.test(error)

## Dickey-Fuller = -3.988, Lag order = 4, p-value = 0.01262

## alternative hypothesis: stationary

error.lagged = error[-c(99100)]

建立誤差修正模型ECM.REG

dy1 = diff(y1)

dy2 = diff(y2)

diff.dat = data.frame(embed(cbind(dy1, dy2)2)) #emed表示嵌入時間序列dy1,dy2diff.dat

colnames(diff.dat) = c("dy1""dy2""dy1.1""dy2.1")

ecm.reg = lm(dy2 ~ error.lagged + dy1.1 + dy2.1, data =diff.dat)

summary(ecm.reg)

## Residuals:

## Min 1Q Median 3Q Max

## -2.959 -0.544 0.137 0.711 2.307

## Coefficients:

## Estimate Std. Error t value Pr(>|t|)

## (Intercept) 0.0034 0.1036 0.03 0.97

## error.lagged -0.9688 0.1585 -6.11 2.2e-08 ***

## dy1.1 0.8086 0.1120 7.22 1.4e-10 ***

## dy2.1 -1.0589 0.1084 -9.77 5.6e-16 ***

## Residual standard error: 1.03 on 94 degrees of freedom

## Multiple R-squared: 0.546, Adjusted R-squared: 0.532

## F-statistic: 37.7 on 3 and 94 DF, p-value: 4.24e-16

par(mfrow = c(22))

plot(ecm.reg)

Johansen-Juselius(JJ)協整檢驗法,該方法是一種用向量自迴歸(VAR)模型進行檢驗的方法,適用於對多重一階單整I(1)序列進行協整檢驗。JJ檢驗有兩種:特徵值軌跡檢驗和最大特徵值檢驗。我們可以調用urca包中的ca.jo命令完成這兩種檢驗。其語法:

ca.jo(x, type = c("eigen", "trace"), ecdet = c("none", "const", "trend"), K = 2,spec=c("longrun", "transitory"), season = NULL, dumvar = NULL)

其中:x爲矩陣形式數據框;type用來設置檢驗方法;ecdet用於設置模型形式:none表示不帶截距項,const表示帶常數截距項,trend表示帶趨勢項。K表示自迴歸序列的滯後階數;spec表示向量誤差修正模型反映的序列間的長期或短期關係;season表示季節效應;dumvar表示啞變量設置。

set.seed(12345)

e1 = rnorm(250, 0, 0.5)

e2 = rnorm(250, 0, 0.5)

e3 = rnorm(250, 0, 0.5)

# 模擬沒有移動平均的向量自迴歸序列;

u1.ar1 = arima.sim(model = list(ar =0.75), innov = e1, n =	250)

u2.ar1 = arima.sim(model = list(ar =0.3), innov = e2, n =250)

y3 = cumsum(e3)

y1 =0.8* y3 + u1.ar1

y2 =-0.3	* y3 + u2.ar1

# 合併y1,y2,y3構成進行JJ檢驗的數據庫;

y.mat = data.frame(y1, y2, y3)

# 調用urca包中cajo命令對向量自迴歸序列進行JJ協整檢驗

vecm = ca.jo(y.mat)

jo.results = summary(vecm)
#cajorls命令可以得到限制協整階數的向量誤差修正模型的最小二乘法迴歸結果

vecm.r2 = cajorls(vecm, r =2);vecm.r2

## Call:lm(formula = substitute(form1), data = data.mat)

## Coefficients:

##           y1.d      y2.d      y3.d    

## ect1      -0.33129   0.06461   0.01268

## ect2       0.09447  -0.70938  -0.00916

## constant   0.16837  -0.02702   0.02526

## y1.dl1    -0.22768   0.02701   0.06816

## y2.dl1     0.14445  -0.71561   0.04049

## y3.dl1     0.12347  -0.29083  -0.07525

## $beta

##             ect1   ect2

## y1.l2  1.000e+00 0.0000

## y2.l2 -3.402e-18 1.0000

## y3.l2 -7.329e-01 0.2952

 

所有代碼摘自《Analysis of Integrated and Cointegrated Time Series with R》

出處:http://blog.163.com/yugao1986@126/blog/static/69228508201341235046978

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