惠陽營銷網站制作免費外鏈生成器
? ? ? 大家好,我是帶我去滑雪!
? ? ? 向量自回歸(VAR)模型和誤差修正模型(ECM)是時間序列分析中常用的兩種模型,它們用于研究多個變量之間的動態(tài)關系。VAR 模型適用于研究多個相關變量之間的相互影響和動態(tài)關系,特別是在沒有明確的因果關系方向時。ECM 是基于向量自回歸模型的一種擴展,旨在處理協(xié)整關系。協(xié)整關系表示變量之間存在長期均衡關系。在實踐中,研究人員通常使用單位根檢驗(如ADF檢驗)來檢查時間序列是否平穩(wěn),然后使用協(xié)整檢驗來確定是否存在協(xié)整關系。如果存在協(xié)整關系,就可以考慮使用 VAR 模型和 ECM 模型來分析變量之間的關系。這些模型在經濟學、金融學和其他領域中廣泛應用,以揭示變量之間的動態(tài)性質和長期均衡關系。
一、向量自回歸模型
(1)平穩(wěn)VAR多變量原理
? ? ? ?平穩(wěn)向量自回歸(VAR)模型是一種多變量時間序列分析方法,用于研究變量之間的動態(tài)關系。在VAR模型中,所有的變量被同時建模,每一個變量都被其它所有變量的滯后值所影響。這種模型假設所有的變量都是平穩(wěn)的,也就是說,它們的均值和方差在時間上是穩(wěn)定的??偟膩碚f,VAR模型的核心思想是將多個變量之間的關系納入一個系統(tǒng)方程中,通過時間序列的歷史數(shù)據(jù)來估計這些關系,從而實現(xiàn)對未來變量值的預測和分析。VAR模型的基本原理可以總結如下:
-
平穩(wěn)性假設: VAR模型假設所涉及的所有變量都是平穩(wěn)的。平穩(wěn)性是指變量的統(tǒng)計特性,如均值和方差,在時間上保持不變。如果變量不是平穩(wěn)的,通常需要進行差分操作,直到得到平穩(wěn)的數(shù)據(jù)。
-
滯后階數(shù)選擇: 在構建VAR模型時,需要選擇滯后階數(shù)(lag order),表示當前時刻的變量值受多少時期之前的變量值影響。選擇適當?shù)臏箅A數(shù)通常需要借助信息準則(如AIC或BIC)來進行。
-
模型參數(shù)估計: 一旦選擇了滯后階數(shù),就可以用最小二乘法(OLS)或極大似然法來估計VAR模型的參數(shù)。這些參數(shù)代表了各個變量之間的線性關系。
-
脈沖響應函數(shù)和方差分解: 通過VAR模型,可以得到系統(tǒng)中各個變量對于其它變量脈沖(沖擊)的響應模式。脈沖響應函數(shù)顯示了一個變量在受到一個單位沖擊時的反應情況。方差分解則能夠量化各個變量在系統(tǒng)變動中所占的比重。
-
預測和融合: 一旦VAR模型被估計出來,就可以用來進行未來數(shù)值的預測。此外,VAR模型還可以與其他模型或分析方法融合,以提高預測的準確性。
(2)下載并整理數(shù)據(jù),為構建VAR模型做準備
? ? ? ?下載數(shù)據(jù)可以查看前面的博客(http://t.csdnimg.cn/tdjvG),本期使用getSymbls函數(shù)從網絡上下載IBM從2015年1月1日到2017年1月18日的股票數(shù)據(jù),數(shù)據(jù)包含IBM的開盤價、收盤價、成交量等數(shù)據(jù)。
install.packages("TTR")
library(quantmod)
IBM.dat = getSymbols("IBM", from="2015-01-01",to="2017-01-18", adjust = T, auto.assign = FALSE)
head(IBM.dat)
tail(IBM.dat)
Return = diff(log(IBM.dat[, 4]))*100
volume = log(IBM.dat[, 5])
plot(Return, xlab = "dates", main = "Time series of IBM returns")
plot(volume, xlab = "dates", main = "Time series of IBM volume")
dat0=cbind(Return, volume)
head(dat0)
dat=na.omit(dat0)輸出結果:
(3)估計VAR(p)
library(vars)
out.var=VAR(dat, p=1, type="const", season=NULL, exogen=NULL, lag.max=NULL)
options(digits=4)
coef(out.var)輸出結果:
$Return
? ? ? ? ? ? ? ?Estimate Std. Error? ? ? ? ?t value? Pr(>|t|)
Return.l? ? 1 ?0.08745 ? ?0.04399 ? 1.988? ? 0.04737
volume.l? ?1 -1.11633 ? ?0.66518 ?-1.678? ? 0.09391
const? ? ? ? 5.59278? ? ? ? 3.32232 ? 1.683? ? 0.09291$volume
? ? ? ? ? ? ? ? ? ?Estimate? ? ? Std. Error? ? t value? ? ? Pr(>|t|)
Return.l? ? 1 0.007989? ?0.0002939? ? 27.186? ?2.904e-101
volume.l? ?1 0.992436? ?0.0044435? ?223.347 ?0.000e+00
const? ? ? ? ?0.037821? ? ?0.0221934? ? 1.704? ? ? 8.896e-02
(4)Granger因果關系檢驗
causality(out.var, cause="Return", boot=TRUE, boot.runs=5000)
輸出結果:
$Granger
?? ?Granger causality H0: Return do not Granger-cause volume
data: ?VAR object out.var
F-Test = 739, boot.runs = 5000, p-value <2e-16
$Instant?? ?H0: No instantaneous causality between: Return and volume
data: ?VAR object out.var
Chi-squared = 76, df = 1, p-value <2e-16
? ? ? ?結果顯示,拒絕原假設,認為報酬率是交易量的格蘭杰原因。
(5)脈沖響應分析
output.irf=irf(out.var, impulse = "Vol", response = c("Ret","Vol"),boot=TRUE, boot.runs=1000)
output.irf
plot(output.irf)?
二、誤差修正模型
? ? ? 完整代碼如下:
library(tsDyn)
lags <- vars::VARselect(dat, lag.max=25)$selection?
vecm.eg<-VECM(dat, lag=lags[3],include ="const", estim = "2OLS")
summary(vecm.eg)
summary(vecm.eg)$coefMat?
vecm.eg$model.specific$beta
vecm.jo<-VECM(dat, lag=lags[3], include ="const", estim = "ML")
summary(vecm.jo)
summary(vecm.jo)$coefMat
vecm.jo$model.specific$beta
library(urca)
cointest_eigen <- ca.jo(dat, K=lags[3], type="eigen", ecdet="const",spec="transitory")
summary(cointest_eigen)
cointest_trace <- ca.jo(dat, K=lags[3], type="trace", ecdet="const",spec="transitory")
summary(cointest_trace)
需要數(shù)據(jù)集的家人們可以去百度網盤(永久有效)獲取:
鏈接:https://pan.baidu.com/s/1E59qYZuGhwlrx6gn4JJZTg?pwd=2138
提取碼:2138?
更多優(yōu)質內容持續(xù)發(fā)布中,請移步主頁查看。
? ?點贊+關注,下次不迷路!