1.下载国泰君安股票数据,计算对数收益率
(1)首先安装包"quantmod",这个包可以从雅虎财经的下载股票数据,具体包的解释见"【量化基础】R语言获取金融数据之quantmod包"。
install.packages("quantmod")#安装包quantmod
library(quantmod)#调用包
setSymbolLookup(GTJA=list(name='601211.ss',src='yahoo'))#下载国泰君安601211数据
getSymbols("GTJA")
spc<-Cl(GTJA)#Cl()收盘价函数
rtn<-diff(log(spc))#对数收益率
rtn<-rtn[8:length(rtn)]#前7个数据为缺失数据,收集第8个以后数据。
ts.plot(rtn,ylab="对数收益率",main="国泰君安")#画出国泰君安对数收益率时间序列图
2.ARMA模型建立与残差的检验
- 首先调用时间序列分析包TSA: Time Series Analysis,该包包含了《时间序列分析及应用:R语言》中几乎所有涉及到的函数;
- 然后计算自相关系数(acf),偏自相关系数(pacf)以及推广的自相关系数(eacf),来确定ARMA的阶数;
- 建立ARMA模型,计算出残差,画出残差图,计算残差的acf,残差平方的acf,残差平方的pacf,残差绝对值的acf,对残差的平方进行Box-Ljung检验,判断确定残差是否独立?
library(TSA)#调用包
acf(rtn)
pacf(rtn)
eacf(rtn)
m1<-arima(rtn,order=c(2,0,2),include.mean=FALSE)
m1
resi<-m1$residuals
plot(resi)
残差图
分析:从残差图中可以看出有平静和波动相互交替的现象,从而说明对数收益率的条件方差随时间的变化而变化。
画出残差、残差平方acf与pacf图以及绝对值pacf图
par(mfrow=c(4,1))
acf(resi)
acf(resi^2)
pacf(resi^2)
acf(abs(resi))
从上图可以看出,残差的平方具有相关性,从而说明残差不独立且条件方差不是常数。
Box-Ljung检验
Box.test(resi^2,lag=12,type="Ljung")
检验结果
--------------------
Box-Ljung test
data: resi^2
X-squared = 281.04, df = 12, p-value < 2.2e-16
------------------------------------------
结果分析:
3.arma(2,2)+garch(1,1)模型建立、残差检验以及预测
install.packages("fGarch")#安装包garch模型包
library(fGarch)#调用fGarch包
m2<-garchFit(~arma(2,2)+garch(1,1),data=rtn,trace=F)
summary(m2)
程序结果:
-----------------------
Title:
GARCH Modelling
Call:
garchFit(formula = ~arma(2, 2) + garch(1, 1), data = rtn, trace = F)
Mean and Variance Equation:
data ~ arma(2, 2) + garch(1, 1)
<environment: 0x000000002c719990>
[data = rtn]
Conditional Distribution:
norm
Coefficient(s):
mu ar1 ar2 ma1 ma2 omega
1.0790e-04 3.6944e-01 -7.6402e-01 -3.9155e-01 7.3781e-01 2.1767e-06
alpha1 beta1
5.6396e-02 9.3788e-01
Std. Errors:
based on Hessian
Error Analysis:
Estimate Std. Error t value Pr(>|t|)
mu 1.079e-04 7.421e-04 0.145 0.884391
ar1 3.694e-01 8.957e-02 4.124 3.72e-05 ***
ar2 -7.640e-01 5.426e-02 -14.081 < 2e-16 ***
ma1 -3.915e-01 1.090e-01 -3.591 0.000329 ***
ma2 7.378e-01 6.167e-02 11.963 < 2e-16 ***
omega 2.177e-06 9.266e-07 2.349 0.018820 *
alpha1 5.640e-02 1.180e-02 4.779 1.76e-06 ***
beta1 9.379e-01 1.064e-02 88.145 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Log Likelihood:
1804.476 normalized: 2.615183
Description:
Tue May 08 11:21:54 2018 by user:
Standardised Residuals Tests:
Statistic p-Value
Jarque-Bera Test R Chi^2 279.9075 0
Shapiro-Wilk Test R W 0.9502314 1.720501e-14
Ljung-Box Test R Q(10) 6.373662 0.782954
Ljung-Box Test R Q(15) 12.03866 0.6761006
Ljung-Box Test R Q(20) 21.83737 0.3494
Ljung-Box Test R^2 Q(10) 3.650817 0.9617277
Ljung-Box Test R^2 Q(15) 10.16369 0.8093186
Ljung-Box Test R^2 Q(20) 16.80866 0.6653606
LM Arch Test R TR^2 5.142881 0.9530354
Information Criterion Statistics:
AIC BIC SIC HQIC
-5.207178 -5.154579 -5.207443 -5.186832
-------------------------------
结果分析:
(1)模型为
(2)模型的检验
标准化残差
下面画出95%点预测区间的对数收益率的时序图:
plot(m2)
然后输入3,得到下图
对序列进行预测,得到未来6期对数收益率预测值以及波动率。
predict(m2,6)
程序结果
--------------------------------------------
meanForecast meanError standardDeviation
1 0.0009769469 0.01636570 0.01636570
2 0.0007503291 0.01638934 0.01638535
3 -0.0003613058 0.01641850 0.01640486
4 -0.0005988464 0.01643922 0.01642424
5 0.0001627066 0.01645866 0.01644349
6 0.0006255391 0.01647782 0.01646260
4. 新息服从学生t分布的GARCH(1,1)模型建立、检验与预测
m3<-garchFit(~arma(2,2)+garch(1,1),data=rtn,cond.dist="std",trace=F)
summary(m3)
plot(m3)
predict(m3,6)
这里结果就不在显示。读者自己运行并给予解释。
5.参考文献
【1】R语言与现代统计方法 刘强等编著 清华大学出版社