在这个文章中,我们演示了copula GARCH方法(一般情况下)。
1 模拟数据
首先,我们模拟一下创新分布。我们选择了一个小的样本量。理想情况下,样本量应该更大,更容易发现GARCH效应。
## 模拟创新分布 d <- 2 # 维度 tau <- 0.5 # Kendall's tau Copula("t", param = th, dim = d, df = nu) # 定义copula对象 rCopula(n, cop) # 对copula进行采样 sqrt((nu.-2)/nu.) * qt(U, df = nu) # 对于ugarchpath()来说,边缘必须具有均值0和方差1!
现在我们用这些copula依赖的创新分布来模拟两个ARMA(1,1)-GARCH(1,1)过程。
## 边缘模型的参数 fixed.p <- list(mu = 1, spec(varModel, meanModel, fixed.pars ) # 条件创新密度(或使用,例如,"std") ## 使用创新模拟ARMA-GARCH模型 ## 注意: ugarchpath(): 从spec中模拟; garchpath(uspec, n.sim = n, # 模拟的路径长度 ## 提取结果系列 X. <- fitted(X) # X\_t = mu\_t + eps_t (simulated process) ## 基本检查: stopifnot(all.equal(X., X@path$seriesSim, check.attributes = FALSE), ## 绘制边缘函数 plot(X., type = "l", xlab = "t")
2 基于模拟数据的拟合程序
我们现在展示如何对X进行ARMA(1,1)-GARCH(1,1)过程的拟合(我们删除参数fixed.pars来估计这些参数)。
spec(varModel, mean.model = meanModel) ugarchfit(uspec, data = x))
检查(标准化的)Z,即残差Z的伪观测值。
plot(U.)
对于边缘分布,我们也假定为t分布,但自由度不同。
fit("t", dim = 2), data = U., method = "mpl")
nu. <- rep(nu., d) # 边缘自由度 est <- cbind(fitted = c(estimate, nu.), true = c(th, nu, nu.)) # 拟合与真实值
3 从拟合的时间序列模型进行模拟
从拟合的copula 模型进行模拟。
set.seed(271) # 可重复性 sapply(1:d, function(j) sqrt((nu\[j\]-2)/nu\[j\]) * qt(U\[,j\], df = nu\[j\])) ## => 创新必须是标准化的garch() sim(fit\[\[j\]\], n.sim = n, m.sim = 1,
并绘制出每个结果序列(XtXt)。
apply(sim,fitted(x)) # 模拟序列 plot(X.., type = "l")