感谢nie chun xiao
首先简述一下对一个时间序列建立DCC-GARCH模型的步骤:
1.通常时间序列不平稳,且经常对时间序列取对数化。所以第一步先取对数化、差分(是为了解决序列不平稳的问题)。
2.adf单位根检验显示平稳后,建立ARMA模型,用来提取方差。
3.用LB检验残差项是否存在自相关性,防止对下一步残差平方的自相关检验产生影响。
4.当残差项不存在自相关性,进一步用LB检验残差项的平方是否存在自相关性。当检验p值很小拒绝原假设,表明存在自相关性,满足建立GARCH模型的前提条件。
5. 检验ARMA模型残差是否存在ARCH效应,若存在,可以建立GARCH模型
6. 对收益率序列拟合GARCH模型
7. 对收益率序列进行DCC-GARCH模型的拟合,选择0-4绘制相关图示。

本人的数据形式如下。从Excel中复制粘贴到了txt中。

导入数据,并绘制三个样本序列的价格序列图。

p=read.table('C:/Users/dqxq767/Documents/R/p.txt',sep = '\t',header = T)
time=as.Date(p$'date',"%Y/%m/%d")
p1=ts(p[,2:4])
install.packages('zoo')
library(zoo)
par(mfrow=c(1,1),oma=c(0.2,0.2,0.2,0.2))
plot(zoo(p1,time),xlab="time",ylab="价格美元", plot.type = "single",col=c("red","black","yellow","green"),lty=1:3,main="样本的价格序列");
par(mfrow=c(1,3),oma=c(0.2,0.2,0.2,0.2))
plot(zoo(p1[,1],time),xlab="time",ylab="价格美元",main="比特币价格序列")
plot(zoo(xt[,2],time),xlab="time",ylab="价格美元",main="以太坊价格序列")
plot(zoo(xt[,3],time),xlab="time",ylab="价格美元",main="瑞波币价格序列")

计算相关系数矩阵

p1cor=cor(p1)             ##相关系数矩阵
p1cor

计算基本统计量最大值、最小值、中位数、偏度、峰度、极值

install.packages('DistributionUtils')
library(DistributionUtils)      #基本统计量计算
data_outline = function(x){m = mean(x)d=max(x)xd=min(x)me = median(x)s = sd(x)kur=kurtosis(x)ske=skewness(x)R = max(x)-min(x)data.frame( Mean=m,  Median=me, max=d,min=xd,std_dev=s,Skewness=ske, Kurtosis=kur, R=R)
}
for (i in  1:3){print(data_outline(p1[,i]))}

绘制价格序列分布直方图

par(mfrow=c(1,3))
hist(p1[,1],main="比特币价格分布直方图",col="yellow",xlab="价格")
hist(p1[,2],main="以太坊价格分布直方图",col="yellow",xlab="价格")
hist(p1[,3],main="瑞波币价格分布直方图",col="yellow",xlab="价格")

通常对时间序列对数化、差分。后面将处理后的序列称之为“收益率序列”

p1ld=diff(log(p1))
par(mfrow=c(1,1))
plot(zoo(p1ld,time), plot.type = "single",xlab="Time",ylab="value",col=c("red","black","yellow"),lty=1:3,main="样本的对数收益率线形图");
plot(zoo(p1ld[,1],time), plot.type = "single",xlab="Time",ylab="value",col=c("red"),main="比特币的对数收益率线形图");
plot(zoo(p1ld[,2],time), plot.type = "single",xlab="Time",ylab="value",col=c("black"),main="以太坊的对数收益率线形图");
plot(zoo(p1ld[,3],time), plot.type = "single",xlab="Time",ylab="value",col=c("yellow"),main="瑞波币的对数收益率线形图");

对收益率序列做频数分布直方图、正态QQ图,充实一下内容


par(mfrow=c(1,2))     #正态检验作图
hist(p1ld[,1],main="比特币对数差分收益率密度图",col="yellow",xlab="",ylim=c(0,10),probability=T)
lines(density(p1ld[,1]),lwd=2);
data_outline(p1ld[,1])
qqnorm(p1ld[,1],);
qqline(p1ld[,1])       hist(p1ld[,2],main="以太坊对数差分收益率密度图",col="yellow",xlab="",ylim=c(0,10),probability=T)
lines(density(p1ld[,2]),lwd=2);
data_outline(p1ld[,2])
qqnorm(p1ld[,2],);
qqline(p1ld[,2])       hist(p1ld[,3],main="瑞波币对数差分收益率密度图",col="yellow",xlab="",ylim=c(0,10),probability=T)
lines(density(p1ld[,3]),lwd=2);
data_outline(p1ld[,3])
qqnorm(p1ld[,3],);
qqline(p1ld[,3])

对收益率序列进行shapiro正态检验,p值越小,越拒绝原假设,表明序列不服从正态分布。原假设H0:数据服从正态分布

for (i in  1:3)print(shapiro.test(p1ld[,i]))

为了防止可能造成的后续ARIMA模型伪回归的问题,对收益率序列进行ADF单位根检验,原假设序列存在单位根,当p值越小越拒绝原假设,可以得出该序列平稳。若不平稳,需在进行差分处理。再不行,额,我也不知道了

install.packages('tseries')
library(tseries)
for (i in 1:3)print(adf.test(p1ld[,i],alt="stationary"))

对前面d=1阶差分平稳后的收益率序列进行ARMA(p,q)模型的定阶。看偏自相关图pacf用来确定p(我总是会忘记acf和pacf到底对应的是谁,干脆就这样记忆,pacf有一个p,所以确定p),和自相关图acf用来确定q,几阶结尾,就确定为几阶。

install.packages('stats')
library(stats)
for (i in  1:3){par(mfrow=c(1,2))acf(p1ld[,i])pacf(p1ld[,i])}

其实看图不如直接调用forecast程序包中的auto.arima函数根据AIC准则自动拟合ARIMA模型来的直接。当然为了扩充内容还是可以的


install.packages('forecast')
library(forecast)
armamodel1=auto.arima(p1ld[,1],ic = 'aic')
armamodel2=auto.arima(p1ld[,2],ic = 'aic')
armamodel2
armamodel3=auto.arima(p1ld[,3],ic = 'aic')
armamodel3

提取拟合ARIMA模型的残差项,对其进行LB检验来判断残差项是否独立不相关。原假设H0:独立不相关。p值越小越拒绝,当p值较大时,则认为序列不相关。
LB统计量表达式。

n为样本的数量,d是样本的自由度,k代表k阶滞后。

Box.test(residuals(armamodel1),lag=5 ,type = "Ljung-Box")
Box.test(residuals(armamodel2),lag=5 , type = "Ljung-Box")
Box.test(residuals(armamodel3), lag=5 ,type = "Ljung-Box") 

进一步用LB检验残差项的平方是否存在自相关性,检验p值很小拒绝原假设,表明存在自相关性,满足建立GARCH模型的前提条件。

Box.test(residuals(armamodel1)^2,lag=5)
Box.test(residuals(armamodel2)^2,lag=5)
Box.test(residuals(armamodel3)^2,lag=5)

收益率序列拟合后的ARMA模型残差会表现出异方差性。此时需要用ARCH检验来判断扰动项的条件方差对它前期方差依赖的程度,确保该序列可以建立GARCH 模型。

install.packages('MTS')
library(MTS)
archTest(residuals(armamodel1),lag=5)
archTest(residuals(armamodel2),lag=5)
archTest(residuals(armamodel3),lag=5)

对收益率序列拟合GARCH模型,当检验结果显示均值不显著时,将‘include.mean = TRUE’改为“include.mean = FALSE”

install.packages('fGarch')
library(fGarch);
gfit1=garchFit(~garch(1,1),data=p1ld[,1],include.mean = FALSE,trace = F,cond.dist = "norm")
gfit1
gfit2=garchFit(~garch(1,1),data=p1ld[,2],include.mean = FALSE,trace = F,cond.dist = "norm")
gfit2
gfit3=garchFit(~garch(1,1),data=p1ld[,3],include.mean = FALSE,trace = F,cond.dist = "norm")
gfit3

对收益率序列进行DCC-GARCH模型的拟合,选择0-4绘制相关图示。0表示退出,其中4是最重要的,是两者之间的动态相关系数时序图。本次数据有3个样本序列,两两组合,共3种

install.packages('rmgarch')
library(rmgarch)meanSpec=list(armaOrder=c(0,0),include.mean=FALSE,archpow=1)
distSpec=c("mvnorm")
varSpec=list(model="sGARCH",garchOrder=c(1,1))
spec1=ugarchspec(mean.model=meanSpec,variance.model=varSpec)mySpec=multispec(replicate(2,spec1))mspec=dccspec(mySpec,VAR=F,robust = F,lag=1,lag.max=NULL,lag.criterion = c("AIC"),external.regressors = NULL,robust.control = list(gamma=0.25,delta=0.01,nc=10,ns=500),dccOrder = c(1,1),distribution = distSpec,start.pars = list(),fixed.pars = list())
##上述是方程参数估计准备过程
fdcc12=dccfit(data=p1ld[,c(1,2)],mspec,out.sample = 10,solver = "solnp",solver.control = list(),fit.control = list(eval.se=TRUE,stationary=TRUE,scale=FALSE),parallel=TRUE,parallel.control=list(pkg=c("multicore"),cores=2),fit=NULL,VAR.fit=NULL)
show(fdcc12)
plot(fdcc12)
fdcc13=dccfit(data=p1ld[,c(1,3)],mspec,out.sample = 10,solver = "solnp",solver.control = list(),fit.control = list(eval.se=TRUE,stationary=TRUE,scale=FALSE),parallel=TRUE,parallel.control=list(pkg=c("multicore"),cores=2),fit=NULL,VAR.fit=NULL)
show(fdcc13)
plot(fdcc13)
fdcc23=dccfit(data=p1ld[,c(2,3)],mspec,out.sample = 10,solver = "solnp",solver.control = list(),fit.control = list(eval.se=TRUE,stationary=TRUE,scale=FALSE),parallel=TRUE,parallel.control=list(pkg=c("multicore"),cores=2),fit=NULL,VAR.fit=NULL)
show(fdcc23)
plot(fdcc23)

R语言DCC-GARCH模型相关推荐

  1. R语言用Garch模型和回归模型对股票价格分析

    原文链接:http://tecdat.cn/?p=18310 为了找出影响价格波动的主要因素,我们使用逐步回归法来剔除一些对于应变量即价格影响很小的自变量剔除出我们的模型(点击文末"阅读原文 ...

  2. R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列...

    原文链接:http://tecdat.cn/?p=26897 风险价值 (VaR) 是金融风险管理中使用最广泛的市场风险度量,也被投资组合经理等从业者用来解释未来市场风险(点击文末"阅读原文 ...

  3. 使用r语言做garch模型_使用GARCH估计货币波动率

    使用r语言做garch模型 Asset prices have a high degree of stochastic trends inherent in the time series. In o ...

  4. R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列

    最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出. 风险价值 (VaR) 风险价值 (VaR) 是金融风险管理中使用最广泛的市场风险度量,也被投资组合经理等从业者用来解释未来市场 ...

  5. R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列

    原文链接:http://tecdat.cn/?p=23934 在本文中,我们将尝试为苹果公司的日收益率寻找一个合适的 GARCH 模型(点击文末"阅读原文"获取完整代码数据). 相 ...

  6. 【视频】什么是梯度下降?用线性回归解释和R语言估计GARCH实例

    全文链接:http://tecdat.cn/?p=23606 梯度下降是一种优化算法,能够为各种问题找到最佳解决方案(点击文末"阅读原文"获取完整代码数据). 梯度下降是什么? 梯 ...

  7. R语言ARIMA集成模型预测时间序列分析

    全文链接:http://tecdat.cn/?p=18493 本文我们使用4个时间序列模型对每周的温度序列建模.第一个是通过auto.arima获得的,然后两个是SARIMA模型,最后一个是Buys- ...

  8. arma模型_R语言: GARCH模型股票交易量的研究道琼斯股票市场指数

    原文链接: R语言: GARCH模型股票交易量的研究道琼斯股票市场指数​tecdat.cn 我将建立道琼斯工业平均指数(DJIA)日交易量对数比的ARMA-GARCH模型. 获取数据 load(fil ...

  9. R语言构建xgboost模型:控制训练信息输出级别verbose参数

    R语言构建xgboost模型:控制训练信息输出级别verbose参数 目录 R语言构建xgboost模型:控制训练信息输出级别verbose参数

  10. R语言构建回归模型并进行模型诊断(线性关系不满足时)、进行变量变换(Transforming variables)、使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换

    R语言构建回归模型并进行模型诊断(线性关系不满足时).进行变量变换(Transforming variables).使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换 目 ...

最新文章

  1. 【Spring】面向切面编程AOP
  2. Flash Catalyst之乱盖
  3. LVS DR模型配置示例
  4. v$asm_diskgroup中state的说明
  5. jq匹配偶数行_jquery怎么实现奇偶行不同背景颜色?
  6. BZOJ1299 [LLH邀请赛]巧克力棒
  7. Linux下遍历目录下的文件
  8. 进行判断使用class_记一次使用 Arthas 热更新线上代码
  9. 信息学奥赛一本通C++语言——1008:计算(a+b)/c的值
  10. 数模论文研读--------09年B题:眼科病床
  11. 5G 消息绝地求生:盘活短信 VS 击垮微信?
  12. 关于SQLyog的破解注册码
  13. 直播类 APP 项目开发实战(原理篇)
  14. ShardingJdbc SQLFeatureNotSupportedException: isValid
  15. 计算机操作痕迹清除,如何彻底清除电脑使用痕迹
  16. 佛罗里达大学计算机工程硕士要求,佛罗里达大学计算机工程理学硕士研究生申请要求及申请材料要求清单...
  17. 计算机pe教程,win7 winpe安装过程图文教程
  18. 已更新 联通 电信 tiny模式
  19. 一口气搞懂「Flink Metrics」监控指标和性能优化,全靠这33张图和7千字(建议收藏)
  20. hashMap1.7头插法及扩容

热门文章

  1. Altium Designer16 软件汉化步骤
  2. ERROR: flag ‘flagfile‘ was defined more than once
  3. 制作APP没有这么难,不必望而却步
  4. ingress的yaml配置文件
  5. mysql 启动时,服务无法启动:发生系统错误1067.
  6. 金软Word文本抽出
  7. 通过这一篇文章就了解机器学习的主要内容和核心思想(包括一些算法思想总结)!!!
  8. 单片机1602液晶显示
  9. 2021年中国环保产业相关政策法规及行业标准分析[图]
  10. 上海域格LTE模块CLM920_JC3贴片SIM卡双卡切换