[关闭]
@fanxy 2020-04-26T18:12:32.000000Z 字数 8416 阅读 10199

第十讲 波动率模型及应用(I)

樊潇彦 复旦大学经济学院 金融数据


下载数据:Ch10_Data.rar

  1. # 准备工作
  2. setwd("D:\\...\\Ch10")
  3. install.packages("fGarch","rugarch")
  4. ## 调用
  5. library(fGarch)
  6. library(rugarch)
  7. library(tidyverse)
  8. library(readxl)
  9. library(ggplot2)
  10. library(tseries)
  11. library(zoo)
  12. library(forecast)

1. 资产波动率:估计、特征与建模

1.1 估计资产波动率

我们可以将金融资产的对数收益率分为均值和波动两部分:

将所有用于估计均值的信息记为 ,则资产收益率的条件方差:


定义资产收益率的条件标准差 即为资产波动率(asset volatility)的估计值。

1.2 资产波动率的特征

1.3 资产波动率的建模步骤、ARCH效应检验与模型分类

  1. # P139:Intel月收益率
  2. da=read.table("m-intcsp7309.txt",header=T) # 读取Intel和S&P月涨跌幅数据
  3. head(da)
  4. rtn=ts(log(da$intc+1),frequency=12,start=c(1973,1)) # 对数收益率r
  5. Box.test(rtn,lag=12,type='Ljung') # r自相关系数为零
  6. Box.test(abs(rtn),lag=12,type='Ljung') # |r|自相关系数为零
  7. # P141:ARCH效应检验
  8. error=rtn-mean(rtn)
  9. Box.test(error^2,lag=12,type='Ljung') # Ljung-Box检验
  10. source("archTest.R") # 调用Tsay(2015)程序
  11. archTest(error,12) # Engle(1982)提出的LM检验
  12. # P143:欧元兑美元汇率日涨跌幅的ARCH效应检验
  13. fx=read.table("d-useu9910.txt",header=T)
  14. head(fx)
  15. eu=diff(log(fx$rate))
  16. Box.test(eu,lag=20,type='Ljung')
  17. Box.test(eu^2,lag=20,type='Ljung')
  18. archTest(eu,20)

Tsay(2015)涉及的其他常用模型包括:

学者 模型
Bollerslev(1986) 广义自回归条件异方差模型:GARCH
Engle and Bollerslev (1986) 求和GARCH模型:IGARCH
Engle et al.(1987) GARCH均值模型:GARCH-M
Nelson(1991) 指数GARCH模型:EGARCH
Glosten et al.(1993), Zakoian(1994) 门限GARCH模:TGARCH
Ding et al.(1993) 非对称幂ARCH:APARCH
Engle and Ng(1993), Duan(1995) 非对称GARCH模型:NGARCH

rugarch包中,上述模型可以通过设定相应的参数来实现:

1. 方差模型(variance model)
model “sGARCH”, “fGARCH”, “eGARCH”, “gjrGARCH”, “apARCH”, “iGARCH”, “csGARCH”
garchOrder c(m,n)
submodel 对于“fGARCH”模型,可进一步设定 “GARCH”, “TGARCH”, “AVGARCH”, “NGARCH”, “NAGARCH”, “APARCH”, “GJRGARCH”, “ALLGARCH”
external.regressors 外部解释变量,默认为 NULL
2. 均值模型(mean model)
armaOrder c(p,q)
include.mean T/F:均值方程中是否有
archm T/F: 均值方程中是否包含波动率
archpow 1/2: archm=T 时设定包含 还是
arfima T/F
external.regressors 外部解释变量,默认为 NULL
3. 的分布模型(distribution model)
norm normal distibution
snorm skew-normal distribution
std student-t
sstd skew-student
ged generalized error distribution
sged skew-generalized error distribution
nig normal inverse gaussian distribution
ghyp Generalized Hyperbolic
jsu Johnson's SU distribution

2. ARCH模型

2.1 模型设定与性质

以ARCH(1)模型为例:

相应的均值和方差为:


方差为正 ,此外有限四阶矩要求 ,此时 的无条件峰度(kurtosis):

综上,ARCH(1)模型可以解释波动聚集()和厚尾现象(超额峰度为正),但无法解释杠杆效应。

2.2 实例

  1. # P151:Intel收益率ARCH(1)模型
  2. int_arch1=garchFit(~1+garch(1,0),data=rtn,trace=F,
  3. cond.dist="norm") # fGarch包中命令,默认为正态分布,可设定学生分布 cond.dist="std" 等
  4. summary(int_arch1)
  5. plot(int_arch1) # 回归结果作图,13个选项,0可退出
  6. resi=residuals(int_arch1,standardize=T) # 提取残差作图
  7. tdx=c(1:444)/12+1973
  8. par(mfcol=c(3,1))
  9. plot(tdx,resi,xlab='year',ylab='stand-resi',type='l')
  10. acf(resi,lag=20)
  11. pacf(resi^2,lag=20)
  12. library(rugarch) # 用rugarch包中命令复制结果
  13. intel.set=ugarchspec(variance.model = list(model="sGARCH", garchOrder=c(1,0)),
  14. mean.model = list(armaOrder=c(0,0), include.mean=T))
  15. ugarchfit(spec=intel.set, data=rtn)
  16. # P154:欧元兑美元汇率
  17. eu_arch11=garchFit(~1+garch(11,0),data=eu,trace=F)
  18. summary(eu_arch11)
  19. eu.set=ugarchspec(variance.model = list(model="sGARCH", garchOrder=c(11,0)),
  20. mean.model = list(armaOrder=c(0,0), include.mean=T))
  21. ugarchfit(spec=eu.set, data=eu)

3. GARCH模型

3.1 标准GARCH(SGARCH)

Bollerslev(1986)提出的标准GARCH(m,n)模型为:

分别称为ARCH参数和GARCH参数。以GARCH(1,1)模型为例,有:

  1. # P159: Intel收益率GARCH(1,1)模型
  2. int_garch11=garchFit(~1+garch(1,1),data=rtn,trace=F) # (4-18)式
  3. summary(int_garch11)
  4. v1=volatility(int_garch11) # sigma_t的估计值
  5. # 预测并作图
  6. par(mfcol=c(1,1))
  7. upp=0.0113+2*v1
  8. low=0.0113-2*v1
  9. tdx=c(1:444)/12+1973
  10. plot(tdx,rtn,xlab='year',ylab='series',type='l',ylim=c(-0.6,0.6))
  11. lines(tdx,upp,lty=2,col='red')
  12. lines(tdx,low,lty=2,col='red')
  13. abline(h=c(0.0113))
  14. int_garch11t=garchFit(~1+garch(1,1),data=rtn,trace=F,
  15. cond.dist="std") # 假定t分布,(4-19)式
  16. summary(int_garch11t)
  17. v2=volatility(int_garch11t)
  18. int_garch11st=garchFit(~1+garch(1,1),data=rtn,trace=F,
  19. cond.dist='sstd') # 假定有偏的t分布,(4-20)式
  20. summary(int_garch11st)
  21. v3=volatility(int_garch11st)
  22. cor(cbind(v1,v2,v3)) # 3种模型得到sigma_t的相关系数

此外,我们也可以用rugarch包中的命令重新回归方程(4.18)-(4.20):

  1. int_garch.sec= ugarchspec(variance.model = list(model="sGARCH", garchOrder=c(1,1)),
  2. mean.model = list(armaOrder=c(0,0),include.mean=T))
  3. ugarchfit(spec=int_garch.sec, data=rtn)
  4. int_garcht.sec= ugarchspec(variance.model = list(model="sGARCH", garchOrder=c(1,1)),
  5. mean.model = list(armaOrder=c(0,0),include.mean=T),
  6. distribution.model = "std")
  7. ugarchfit(spec=int_garcht.sec, data=rtn)
  8. int_garchtst.sec= ugarchspec(variance.model = list(model="sGARCH", garchOrder=c(1,1)),
  9. mean.model = list(armaOrder=c(0,0),include.mean=T),
  10. distribution.model = "sstd")
  11. ugarchfit(spec=int_garchtst.sec, data=rtn)

3.2 求和GARCH模型(IGARCH)

以GARCH(1,1)为例,当 时,波动率的方差将趋于无穷大,波动率变成非平稳过程。因此类似于ARIMA模型,IGARCH模型就是单位根GARCH模型,IGARCH(1,1)模型为:

  1. # P165(4-22)式:
  2. int_igarch.sec= ugarchspec(variance.model = list(model="iGARCH"),
  3. mean.model = list(armaOrder=c(0,0),include.mean=T))
  4. ugarchfit(spec=int_igarch.sec, data=rtn)

3.3 GARCH均值模型(GARCH-M)

GARCH-M模型考虑波动率对收益率的直接影响,因此在下述模型中 为风险溢价参数:

  1. # P166(4-25,26)式:
  2. int_garchm.sec= ugarchspec(
  3. variance.model = list(model="sGARCH", garchOrder=c(1,1)),
  4. mean.model = list(armaOrder=c(0,0),include.mean=T,archm=T,archpow=2))
  5. ugarchfit(spec=int_garchm.sec, data=rtn*100)

4. 练习

用苹果公司股票数据 AAPL.RData 计算回报率,并建立 GARCH(1,1) 模型:

  1. library(quantmod)
  2. loadSymbols("AAPL", from="2006-01-01") # 获取苹果公司数据
  3. chartSeries(AAPL) # 股价作图
  4. ret.aapl <- dailyReturn(Cl(AAPL), type='log') # 用对数收盘价计算日收益率
  5. chartSeries(ret.aapl) # 收益率作图
  6. garch11.spec = ugarchspec(variance.model = list(model="sGARCH", garchOrder=c(1,1)),
  7. mean.model = list(armaOrder=c(0,0)))
  8. aapl.garch11.fit = ugarchfit(spec=garch11.spec, data=ret.aapl)
  9. aapl.garch11.fit
  10. # 结果报告
  11. coef(aapl.garch11.fit) #estimated coefficients
  12. vcov(aapl.garch11.fit) #covariance matrix of parameter estimates
  13. infocriteria(aapl.garch11.fit) #common information criteria list
  14. newsimpact(aapl.garch11.fit) #calculate news impact curve
  15. signbias(aapl.garch11.fit) #Engle - Ng sign bias test
  16. fitted(aapl.garch11.fit) #obtarchin the fitted data series
  17. residuals(aapl.garch11.fit) #obtain the residuals
  18. uncvariance(aapl.garch11.fit) #unconditional (long-run) variance
  19. uncmean(aapl.garch11.fit) #unconditional (long-run) mean
  20. # SGARCH news impact curve
  21. ni.garch11 <- newsimpact(aapl.garch11.fit)
  22. plot(ni.garch11$zx, ni.garch11$zy, type="l", lwd=2, col="blue", main="GARCH(1,1) - News Impact", ylab=ni.garch11$yexpr, xlab=ni.garch11$xexpr)

课堂讨论:假定 服从t分布和有偏的t分布,重新回归 GARCH(1,1) 模型。

参考文献

  1. R.S. Tsay著:《金融数据分析导论:基于R语言》,李洪成等译,机械工业出版社,2013
  2. E. Berlinger, F. Illes, M. Badics, A. Banai and G. Daroczi: Mastering R for Quantitative Finance, Packt Publishing, 2015; 东南大学出版社,2016影印版
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注