我有一个5种仪器的csv文件,我想使用rmgarch估计协方差矩阵
csv文件的范围是2018年1月2日至2019年12月11日(482个变量)
当我运行以下代码时:
# Testing Multivariate Garch
library(readxl)
library(rmgarch)
library(rugarch)
# Series
returns <- read.csv('ret.csv')
rownames(returns) <- returns$X
returns$X <- NULL
ret_1 <- head(returns, -1)
# Specs
spec1 = ugarchspec(distribution = "std")
mspec = multispec(rep(c(spec1), times=ncol(returns)))
fitspec = dccspec(mspec, VAR=TRUE, lag=1, dccOrder=c(1,1),model="DCC", distribution="mvt")
# Fitting Model
garchdccfit = dccfit(fitspec, returns, fit.control=list(scale=TRUE))
# 1-Step ahead forecast object
forecast <- dccforecast(garchdccfit, n.ahead=1)
# 1-Step ahead covariance matrix
forecast_cov <- rcov(forecast)
# Rolling Forecast - For backtest purpose
roll_forecast <- dccroll(fitspec, returns, n.ahead=1, forecast.length = 1,
refit.every = 1, refit.window = "recursive",
fit.control=list(scale=TRUE),
save.fit = TRUE, save.wdir = "W:/Personal Folders/Thales Marques/GarchPython")
# Reading first RDS file
first_fit <- readRDS("dccroll_1.rds", refhook = NULL)
我了解到roll_forecast变量的行为类似于:
fitspec
中使用dcc-garch规范forecast.length = 1
起,它将预测比我的样本领先一步save.wdir
中的rds文件我运行rcov(roll_forecast)
的输出是:
, , 2019-12-11
PRE_2A PRE_5A IBOV_1st BRL_1st SPX_1st
PRE_2A 2.234106e-06 4.244793e-06 7.540792e-06 -5.853135e-06 1.864744e-06
PRE_5A 4.244793e-06 1.092654e-05 1.824539e-05 -1.535431e-05 4.155332e-06
IBOV_1st 7.540792e-06 1.824539e-05 1.075482e-04 -3.854478e-05 2.692275e-05
BRL_1st -5.853135e-06 -1.535431e-05 -3.854478e-05 5.422331e-05 -1.032894e-05
SPX_1st 1.864744e-06 4.155332e-06 2.692275e-05 -1.032894e-05 4.212289e-05
拟合模型(存储为dccroll_1.rds
)为:
*---------------------------------*
* DCC GARCH Fit *
*---------------------------------*
Distribution : mvt
Model : DCC(1,1)
No. Parameters : 63
[VAR GARCH DCC UncQ] : [30+20+3+10]
No. Series : 5
No. Obs. : 481
Log-Likelihood : 9616.71
Av.Log-Likelihood : 19.99
Optimal Parameters
-----------------------------------
Estimate Std. Error t value Pr(>|t|)
[PRE_2A].omega 0.000000 NA NA NA
[PRE_2A].alpha1 0.165964 NA NA NA
[PRE_2A].beta1 0.757918 NA NA NA
[PRE_2A].shape 5.292370 NA NA NA
[PRE_5A].omega 0.000001 NA NA NA
[PRE_5A].alpha1 0.140100 NA NA NA
[PRE_5A].beta1 0.827182 NA NA NA
[PRE_5A].shape 8.027201 NA NA NA
[IBOV_1st].omega 0.000010 NA NA NA
[IBOV_1st].alpha1 0.059325 NA NA NA
[IBOV_1st].beta1 0.881198 NA NA NA
[IBOV_1st].shape 10.244986 NA NA NA
[BRL_1st].omega 0.000001 NA NA NA
[BRL_1st].alpha1 0.026141 NA NA NA
[BRL_1st].beta1 0.954693 NA NA NA
[BRL_1st].shape 9.616442 NA NA NA
[SPX_1st].omega 0.000004 NA NA NA
[SPX_1st].alpha1 0.196621 NA NA NA
[SPX_1st].beta1 0.780560 NA NA NA
[SPX_1st].shape 4.486858 NA NA NA
[Joint]dcca1 0.009943 NA NA NA
[Joint]dccb1 0.969974 NA NA NA
[Joint]mshape 7.524895 NA NA NA
Information Criteria
---------------------
Akaike -39.724
Bayes -39.177
Shibata -39.754
Hannan-Quinn -39.509
Elapsed time : 0.2523229
1)这意味着dccroll仅寻找1:481的观测值,估计协方差矩阵并为482nd observation ('2019-12-11')
进行预测?为什么这不会像Forecast_cov那样超出样本一步?
Forecast_cov(不会滚动,只是预测前进了一步,将返回以下输出:
$`2019-12-11`
, , T+1
PRE_2A PRE_5A IBOV_1st BRL_1st SPX_1st
PRE_2A 1.955756e-06 3.830893e-06 7.007353e-06 -5.465868e-06 1.558854e-06
PRE_5A 3.830893e-06 1.013570e-05 1.739417e-05 -1.463438e-05 3.690273e-06
IBOV_1st 7.007353e-06 1.739417e-05 1.023071e-04 -3.704365e-05 2.442711e-05
BRL_1st -5.465868e-06 -1.463438e-05 -3.704365e-05 5.160562e-05 -9.766693e-06
SPX_1st 1.558854e-06 3.690273e-06 2.442711e-05 -9.766693e-06 3.667363e-05
2)由于输出为2019-12-11, T+1,
,我相信这是2019-12-12
的估计协方差矩阵,对吗?
3)如何确定最后一个用于估计协方差矩阵的变量? (对于递归方法,可以获取观察次数中的最后一个值,但这不能通过移动窗口来完成
4)有什么方法可以在dccforecast
中获得dccroll
的相同输出? dccforecast
一直运行到2019-12-12
,dccroll
一直运行到2019-12-11
如果我不清楚,请与我联系,以便我进一步解释。
谢谢