【问题标题】:Multivariate GARCH(1,1) in RR中的多元GARCH(1,1)
【发布时间】:2016-01-27 11:17:57
【问题描述】:

我使用 R 来估计 4 个时间序列的多元 GARCH(1,1) 模型。我用 rmgarch 包试过了。好像我用错了,但我不知道我的错误是什么。第一次使用。

library(quantmod)
library(fBasics)
library(rmgarch)
#load data, time series closing prices, 10 year sample
#DAX 30
getSymbols('^GDAXI', src='yahoo', return.class='ts',from="2005-01-01",    to="2015-01-31")
GDAXI.DE=GDAXI[ , "GDAXI.Close"]
#S&P 500
getSymbols('^GSPC', src='yahoo', return.class='ts',from="2005-01-01", to="2015-01-31")
GSPC=GSPC[ , "GSPC.Close"]
#Credit Suisse Commodity Return Strat I
getSymbols('CRSOX', src='yahoo', return.class='ts',from="2005-01-01", to="2015-01-31")
CRSOX=CRSOX[ , "CRSOX.Close"]
#iShares MSCI Emerging Markets
getSymbols('EEM', src='yahoo', return.class='ts',from="2005-01-01", to="2015-01-31")
EEM=EEM[ , "EEM.Close"]
#calculating log returns of the time series
log_r1=diff(log(GDAXI.DE[39:2575]))
log_r2=diff(log(GSPC))
log_r3=diff(log(CRSOX))
log_r4=diff(log(EEM))
#return vector
r_t=cbind(log_r1, log_r2,log_r3, log_r4)
#specifying and fitting the model
model = multispec(replicate(4, ugarchspec(variance.model = c(1,1))))
model_order = mgarchspec(model, Order = c(1, 1), distribution ='mvnorm')
fit = mgarchfit(model_order, data = r_t, solver = 'solnp',fit.control =    list(eval.se = TRUE))
print(fit.1)

【问题讨论】:

    标签: r


    【解决方案1】:

    您将在下面找到多变量 DCC 和 ADCC Garch 模型的并行实现。目前尚不清楚您要达到什么目标,但我假设您正在寻找每个变量之间的某种相关性。或者至少是一种不相关的波动性衡量标准。我的代码基于可在此处找到的代码:"Multivariate Garch implementation"。我强烈推荐阅读这篇文章。

    像以前一样加载所有系列

    library(rmgarch)
    library(parallel)
    library(quantmod)
    

    确保数据长度相等并计算时间序列的对数回报

    Dat<-data.frame(GDAXI.DE[-c(1:22)],GSPC,CRSOX,EEM)
    Dat<-apply(Dat,2,function(x) Delt(x,k=1,type="log"))
    

    指定您的单变量 garch 过程以及您的多变量模型。在这里,我包括普通 DCC-GARCH 和非对称 DCC-GARCH 模型规范

    xspec = ugarchspec(mean.model = list(armaOrder = c(1, 1)), variance.model = list(garchOrder = c(1,1), model = 'sGARCH'), distribution.model = 'norm')
    uspec = multispec(replicate(4, xspec))
    spec1 = dccspec(uspec = uspec, dccOrder = c(1, 1), distribution = 'mvnorm')
    spec1a = dccspec(uspec = uspec, dccOrder = c(1, 1), model='aDCC', distribution = 'mvnorm')
    

    在执行计算密集型模型时,我建议使用并行方法。幸运的是 rmgarch 内置了这个功能。所以,让我们打开我们想要执行分析的集群的数量

    cl = makePSOCKcluster(4)
    multf = multifit(uspec, Dat, cluster = cl)
    

    我们现在终于可以拟合模型了

    fit1 = dccfit(spec1, data = Dat, fit.control = list(eval.se = TRUE), fit = multf, cluster = cl)
    fit_adcc = dccfit(spec1, data = Dat, fit.control = list(eval.se = TRUE), fit = multf, cluster = cl)
    print(fit1)           
    print(fit_adcc)
    

    记住关闭集群很重要

    stopCluster(cl)
    

    我希望这对您正在寻找的内容有所帮助!

    【讨论】:

    • 谢谢,您的回答对我有帮助。我实际上只是尝试拥有一个 Garch(1,1) 模型,然后我想实现一个 VECH 和一个 BEKK 模型,并在某个预测范围内比较这 3 个。
    • 然后看一下 Vech 和 BEKK 估计方法的 MTS 包。我必须承认,我已经使用该软件包来估计 BEKK 模型,并且它们确实需要很长时间才能进行估计,因此请考虑到这一点。从理论的角度来看,不要运行大于 3 个交互变量的 BEKK 模型。在较大的系统中,需要估计的参数变得不稳定。
    • 谢谢,我的 BEKK 工作正常。你现在有一个用于 vec 模型的包吗?我已经尝试过库(rmgarch)、库(fGarch)、库(ccgarch)、库(mgarch)。但我找不到有用的东西。
    • 不幸的是,我还没有看到实现该模型的包。作为最后的手段,我会去看看github 上的BEKK11 函数的源代码。通过了解BEKK11 的编码方式,您或许可以自己编写VECH 公式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多