GARCH是一种用过去的方差以及其的预测值来预测未来方差的自回归条件异方差时间序列模型。其中异方差指方差随时间变化而变化,即具有异方差性;条件性表示了对过去临近观测信息的依赖;自回归则描述了预测值与过去观测值联系的反馈机制。
该方程可以求出模型的条件期望,投资者投资者在交易中所得到的信息依赖于过去时刻的收益以及过去时刻预期收益和实际收益间的误差;根据该方程也可描述模型的条件方差,它不仅是滞后随机扰动项平方的线性函数也是滞后项条件方差的线性函数,表明了过去时刻的波动对未来价格波动有着正向缓解的影响,从而模拟了波动聚集性。
image.png
限制条件是冲击过程{ht}存在有限方差的充分必要条件,其值大小反映了序列波动的持续性,即序列在过去时刻波动的特征在当前时刻被继续波动的程度。
image.png
保证了条件方差序列是非负的。
计算对数收益率
金融数据分析一般研究的是资产收益率,而不是资产的价格。资产收益率序列比一般的价格序列更容易处理,更具有研究意义。而资产收益率也有很多种定义,本次实验使用对数收益率,也就是对上海证券综合指数日收盘价格取对数差分。
> options(stringsAsFactors=F)
> data <- readLines("http://labfile.oss.aliyuncs.com/courses/900/000001.csv")
> data <- unlist(strsplit(data, split=","))
> data <- as.data.frame(matrix(data, ncol=9, byrow=T))
> colnames(data) <- data[1,]
> data <- data[-1,]
> date <- as.data.frame(as.Date(data[,1]))
> expr <- data[,2:ncol(data)]
> expr <- as.data.frame(sapply(expr, as.numeric))
> data <- cbind(date, expr)
> colnames(data)[1] <- "date"
>
> close <- data[,2]
> n <- length(close)
> return <- log(close[2:n]) - log(close[1:n-1])
> head(return)
[1] 0.002351519 0.037768650 0.035340827 0.018622775
[5] -0.043202296 -0.028626936
也可以直接使用 diff 函数直接做差分求对数收益率。
> return <- diff(log(close))
> head(return)
[1] 0.002351519 0.037768650 0.035340827 0.018622775
[5] -0.043202296 -0.028626936
股票指数的可视化
在绘制图形之前,我们需要先将数据转化为时间序列格式,需要用到 ts 函数。
> Close.ts <- ts(close, start=c(2000), freq=250)
> Return.ts <- ts(return, start=c(2000), freq=250)
> par(mfrow=c(2, 1))
> plot(Close.ts, type="l", main="(a) Daily Closing Price of 00000.1SH", xlab="Date", ylab="Price", cex.main=0.95, las=1)
> plot(Return.ts, type="l", main="(b) Daily Rate of Return of 000001.SH", xlab="Date", ylab="Rate", cex.main=0.95, las=1)
image.png
上海证券综合指数的日收盘价(上)和日收益率(下)的时序图。
从图形分析结果来看,2008 年和 2015 年两个时间段有明显的波动聚集现象。
股票收益率的基本统计量
在做模型拟合之前需要对数据做一个基本的了解,先求解数据的一些基本统计量。
> library(tseries)
> u <- sum(return)/n
> e <- sqrt(sum((return - u)^2)/(n-1))
> s <- sum((return - u)^3)/((n-1)*e^3)
> k <- sum((return - u)^4)/((n-1)*e^4)
> u
[1] 0.0001962668
> e
[1] 0.01612871
> s
[1] -0.346041
> k
[1] 7.678296
> jarque.bera.test(return)
Jarque Bera Test
data: return
X-squared = 3958.7, df = 2, p-value < 2.2e-16
由实验结果我们可以得出上海证券综合指数的对数收益率的均值为 0.000196,标准差为 0.016129,偏度系数为 -0.246041,峰度系数为 7.678296,以及从正态性检验结果的 P 值接近于 0,也就是说上证指数日对数收益率不是正态分布,呈现左偏分布,且有高峰厚尾的现象。
ACF 图和 PACF 图
使用自相关函数(ACF)和偏自相关函数(PACF)来对收益率序列的自相关性进行分析。
> par(mfrow=c(2, 1))
> acf(return, main='', xlab='Lag(a)', ylab='ACF', las=1)
> title(main='(a) the ACF of Return', cex.main=0.95)
> pacf(return, main='', xlab='Lag(b)', ylab='PACF', las=1)
> title(main='(b) the PACF of Return', cex.main=0.95)
image.png
由收益率序列(return)的 ACF 图和 PACF 图可以得出:两个图大部分函数值在置信区间内(图中蓝色虚线区域)上下跳跃,所以收益率序列自相关性很低,或者说具有很弱的自相关性,因此在条件期望模型中不需要引入自相关性部分,满足 GARCH 模型中的均值方程,收益率由一个常数项加上一个随机扰动项组成。
虽然收益率序列基本不具有自相关性,但是要拟合 GARCH 模型,我们还需要考察收益率平方的自相关性。
> par(mfrow=c(2, 1))
> return.square <- return^2
> acf(return.square, main='', xlab='Lag(c)', ylab='ACF', las=1)
> title(main='(a) the ACF of Return Square', cex.main=0.95)
> pacf(return.square, main='', xlab='Lag(d)', ylab='PACF', las=1)
> title(main='(b) the PACF of Return Square', cex.main=0.95)
image.png
尽管股价收益率序列的 ACF 值揭示了其弱相关性,但收益率平方的 ACF 值 却表现出了一定的相关性和持续性,其大部分值都超过了置信区间(图中蓝色虚线)。注意到收益率平方的 ACF 值在滞后 3、10、21、30 期后都有缓慢衰退,说明了方差序列具有一定程度的序列相关性,因此采用 GARCH 模型来描述股价波动过程中的条件方差。
ARCH 效应的检验
收益率的时序图表明,在日收益率数据中可能存在 ARCH 效应,如果存在 ARCH 效应,则可以进行 GARCH 模型的拟合。反之,不能用 GARCH 模型拟合方程。
> library(zoo)
> library(FinTS)
> ArchTest(return, lag=12)
ARCH LM-test; Null hypothesis: no ARCH effects
data: return
Chi-squared = 389.3, df = 12, p-value < 2.2e-16
检验的原假设是:不存在 ARCH 效应。检验结果为卡方统计量的值为389.3,对应的 P 值几乎为0,也就是说在 1% 的显著性水平上拒绝原假设,从而拒绝不存在 ARCH 效应的假设,收益率序列存在 ARCH 效应,可以进行 GARCH 模型的拟合。
GARCH 模型的估计
GARCH(1,1)是 GARCH 模型中最常用的一种,也是最适于金融时间序列的建模的模型。
> library(timeDate)
> library(timeSeries)
> library(fBasics)
> library(fGarch)
> m1 <- garchFit(~1 + garch(1, 1), data=return, trace=F)
> summary(m1)
Title:
GARCH Modelling
Call:
garchFit(formula = ~1 + garch(1, 1), data = return, trace = F)
Mean and Variance Equation:
data ~ 1 + garch(1, 1)
<environment: 0x00000111235de4f0>
[data = return]
Conditional Distribution:
norm
Coefficient(s):
mu omega alpha1 beta1
2.6199e-04 1.6676e-06 7.1982e-02 9.2407e-01
Std. Errors:
based on Hessian
Error Analysis:
Estimate Std. Error t value Pr(>|t|)
mu 2.620e-04 1.826e-04 1.435 0.151
omega 1.668e-06 4.096e-07 4.071 4.68e-05 ***
alpha1 7.198e-02 6.948e-03 10.360 < 2e-16 ***
beta1 9.241e-01 6.857e-03 134.759 < 2e-16 ***
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Log Likelihood:
12118.48 normalized: 2.852751
Description:
Sun Dec 20 23:53:40 2020 by user: Administrator
Standardised Residuals Tests:
Statistic p-Value
Jarque-Bera Test R Chi^2 990.7425 0
Shapiro-Wilk Test R W 0.9758627 0
Ljung-Box Test R Q(10) 36.51373 6.866768e-05
Ljung-Box Test R Q(15) 45.52293 6.32978e-05
Ljung-Box Test R Q(20) 53.6347 6.55187e-05
Ljung-Box Test R^2 Q(10) 3.001381 0.9813915
Ljung-Box Test R^2 Q(15) 8.340001 0.9094294
Ljung-Box Test R^2 Q(20) 11.97937 0.9167842
LM Arch Test R TR^2 4.240415 0.9786969
Information Criterion Statistics:
AIC BIC SIC HQIC
-5.703618 -5.697635 -5.703620 -5.701503
根据实验结果,我们可以得到的拟合模型为:
image.png
括号中为t统计量,可以看到所有系数在0.05的显著水平下显著地异于零,说明上证指数收益率过去时刻的波动大小对当前波动大小有明显的影响,具有波动聚集效应。此外
image.png
约等于1,说明条件方差序列具有长记忆性,表明了收益率的波动具有较高的持续性,投机因素较强,总体风险较大。 拟合了GARCH(1,1)模型之后,为了查看它是否是最佳拟合模型,同时拟合GARCH(1,2)、GARCH(2,1)、GARCH(2,2)模型,并运用信息准则来选择最优模型。
> m2 <- garchFit(~1 + garch(1, 2), data=return, trace=F)
> m3 <- garchFit(~1 + garch(2, 1), data=return, trace=F)
> m4 <- garchFit(~1 + garch(2, 2), data=return, trace=F)
> summary(m2)
Title:
GARCH Modelling
Call:
garchFit(formula = ~1 + garch(1, 2), data = return, trace = F)
Mean and Variance Equation:
data ~ 1 + garch(1, 2)
<environment: 0x00000110ac60e298>
[data = return]
Conditional Distribution:
norm
Coefficient(s):
mu omega alpha1 beta1 beta2
2.6213e-04 1.6720e-06 7.2058e-02 9.2396e-01 1.0000e-08
Std. Errors:
based on Hessian
Error Analysis:
Estimate Std. Error t value Pr(>|t|)
mu 2.621e-04 1.828e-04 1.434 0.151551
omega 1.672e-06 4.677e-07 3.575 0.000351 ***
alpha1 7.206e-02 1.353e-02 5.325 1.01e-07 ***
beta1 9.240e-01 1.969e-01 4.692 2.70e-06 ***
beta2 1.000e-08 1.847e-01 0.000 1.000000
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Log Likelihood:
12118.88 normalized: 2.852843
Description:
Sun Dec 20 23:57:51 2020 by user: Administrator
Standardised Residuals Tests:
Statistic p-Value
Jarque-Bera Test R Chi^2 988.4542 0
Shapiro-Wilk Test R W 0.9758918 0
Ljung-Box Test R Q(10) 36.50941 6.878564e-05
Ljung-Box Test R Q(15) 45.52432 6.326558e-05
Ljung-Box Test R Q(20) 53.61493 6.596114e-05
Ljung-Box Test R^2 Q(10) 2.993229 0.981583
Ljung-Box Test R^2 Q(15) 8.386035 0.9073755
Ljung-Box Test R^2 Q(20) 12.00055 0.916057
LM Arch Test R TR^2 4.238585 0.9787361
Information Criterion Statistics:
AIC BIC SIC HQIC
-5.703332 -5.695853 -5.703335 -5.700689
> summary(m3)
Title:
GARCH Modelling
Call:
garchFit(formula = ~1 + garch(2, 1), data = return, trace = F)
Mean and Variance Equation:
data ~ 1 + garch(2, 1)
<environment: 0x000001109bba3428>
[data = return]
Conditional Distribution:
norm
Coefficient(s):
mu omega alpha1 alpha2 beta1
2.7128e-04 1.7510e-06 5.9759e-02 1.4612e-02 9.2146e-01
Std. Errors:
based on Hessian
Error Analysis:
Estimate Std. Error t value Pr(>|t|)
mu 2.713e-04 1.828e-04 1.484 0.137844
omega 1.751e-06 4.370e-07 4.006 6.17e-05 ***
alpha1 5.976e-02 1.692e-02 3.531 0.000413 ***
alpha2 1.461e-02 1.856e-02 0.787 0.431031
beta1 9.215e-01 7.758e-03 118.774 < 2e-16 ***
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Log Likelihood:
12119.17 normalized: 2.852913
Description:
Sun Dec 20 23:57:51 2020 by user: Administrator
Standardised Residuals Tests:
Statistic p-Value
Jarque-Bera Test R Chi^2 1005.964 0
Shapiro-Wilk Test R W 0.9757217 0
Ljung-Box Test R Q(10) 37.06228 5.520644e-05
Ljung-Box Test R Q(15) 46.11139 5.104441e-05
Ljung-Box Test R Q(20) 54.23127 5.345223e-05
Ljung-Box Test R^2 Q(10) 2.360193 0.9927602
Ljung-Box Test R^2 Q(15) 7.913223 0.9272145
Ljung-Box Test R^2 Q(20) 11.52563 0.9314369
LM Arch Test R TR^2 3.631852 0.9892015
Information Criterion Statistics:
AIC BIC SIC HQIC
-5.703471 -5.695992 -5.703474 -5.700828
> summary(m4)
Title:
GARCH Modelling
Call:
garchFit(formula = ~1 + garch(2, 2), data = return, trace = F)
Mean and Variance Equation:
data ~ 1 + garch(2, 2)
<environment: 0x0000011080dcc398>
[data = return]
Conditional Distribution:
norm
Coefficient(s):
mu omega alpha1 alpha2 beta1
2.6806e-04 2.6857e-06 5.8700e-02 5.6155e-02 3.6645e-01
beta2
5.1237e-01
Std. Errors:
based on Hessian
Error Analysis:
Estimate Std. Error t value Pr(>|t|)
mu 2.681e-04 1.835e-04 1.461 0.144109
omega 2.686e-06 1.512e-06 1.776 0.075660 .
alpha1 5.870e-02 1.660e-02 3.536 0.000406 ***
alpha2 5.615e-02 5.505e-02 1.020 0.307663
beta1 3.665e-01 8.746e-01 0.419 0.675213
beta2 5.124e-01 8.095e-01 0.633 0.526764
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Log Likelihood:
12119.38 normalized: 2.852961
Description:
Sun Dec 20 23:57:52 2020 by user: Administrator
Standardised Residuals Tests:
Statistic p-Value
Jarque-Bera Test R Chi^2 1001.95 0
Shapiro-Wilk Test R W 0.9756968 0
Ljung-Box Test R Q(10) 37.22023 5.183729e-05
Ljung-Box Test R Q(15) 46.26691 4.821516e-05
Ljung-Box Test R Q(20) 54.3383 5.153017e-05
Ljung-Box Test R^2 Q(10) 2.518153 0.9906085
Ljung-Box Test R^2 Q(15) 8.030874 0.922539
Ljung-Box Test R^2 Q(20) 11.7419 0.924673
LM Arch Test R TR^2 3.783683 0.9870309
Information Criterion Statistics:
AIC BIC SIC HQIC
-5.703097 -5.694123 -5.703101 -5.699926
image.png
由信息准则的值可以看出,拟合的 4 个 GARCH 模型的 AIC、BIC、SIC、HQIC 的值,发现随着参数增加,模型的AIC,BIC等的值并没有显著增加。理论上选择最简洁的模型GARCH(1,1)建模最合适。
GARCH 模型的标准化残差分析
在拟合完 GARCH 模型之后,对模型结果的残差进行分析。
> resi <- residuals(m1, standardize=T)
> res <- ts(resi, frequency=250, start=c(2000))
> plot(res, xlab='Date', ylab='st.resi', type='l')
> par(mfool=c(2, 2))
image.png
上图是残差序列的时序图,可以看到残差序列没有明显的波动聚集效应。
> acf(resi, lag=24)
image.png
> acf(resi^2, lag=24)
image.png
> pacf(resi, lag=24)
image.png
> pacf(resi^2, lag=24)
image.png
上图是残差和残差平方的自相关图和偏自相关图。可以看到残差序列的 ACF 和 PACF 图大部分函数值在置信区间内(图中蓝色的虚线区域)上下跳跃,所以标准化残差序列并不具有自相关性,或者具有一定的弱相关性(PACF 图结果)。而残差平方序列的 ACF 和 PACF 图都没有明显的拖尾或截尾现象,所有函数值都在置信区间内,因此其不具序列相关性。再将标准化冲击平方的ACF值与收益率平方的ACF值进行比较,结果表明 GARCH 模型可以有效地解释收益率序列。
> Box.test(resi^2, lag=10, type='Ljung')
Box-Ljung test
data: resi^2
X-squared = 3.0014, df = 10, p-value = 0.9814
> Box.test(resi^2, lag=15, type='Ljung')
Box-Ljung test
data: resi^2
X-squared = 8.34, df = 15, p-value = 0.9094
> Box.test(resi^2, lag=20, type='Ljung')
Box-Ljung test
data: resi^2
X-squared = 11.979, df = 20, p-value = 0.9168
Ljung-Box 自相关检验的原假设是序列中不存在自相关。对标准化残差平方用进行 Ljung-Box 方法进行检验在 0.05 的显著水平下,滞后项为为 10,15,20 时分别得到的 P 值分别为:0.9814,0.9094,0.9618,不能拒绝原假设,可接受原假设,标准化残差平方不存在序列相关性。
网友评论