避免不必要的复杂性

在 R 中构建 GARCH 模型

Kris Boudt

Professor of finance and econometrics

避免不必要的复杂性

  • 如果你已知:
    • 均值动态可忽略
    • 方差中不存在杠杆效应
    • 分布对称且厚尾

那么,常数均值、标准 GARCH(1,1)、Student-t 分布是合适的设定:

garchspec <- ugarchspec(mean.model = list(armaOrder = c(0, 0)),
                        variance.model = list(model = "sGARCH"),
                        distribution.model = "std")
在 R 中构建 GARCH 模型

限制参数估计

  • 若你知道某些参数:
    • 等于某个固定值
    • 或落在某个区间内
  • 则应在规格中施加:
    • setfixed()
    • setbounds()
在 R 中构建 GARCH 模型

汇率应用示例

设定与估计

garchspec <- ugarchspec(mean.model = list(armaOrder = c(0, 0)),
                        variance.model = list(model = "sGARCH"),
                        distribution.model = "std")
garchfit <- ugarchfit(data = EURUSDret, spec = garchspec)

估计结果

coef(garchfit)
           mu         omega        alpha1         beta1         shape 
-3.562136e-05  8.005123e-08  3.097322e-02  9.674496e-01  8.821902e+00
在 R 中构建 GARCH 模型

setfixed() 示例

  • 若你知道 alpha1 = 0.05shape = 6:在估计中固定它们。
  • 如何做?对 ugarchspec 对象使用 setfixed() 方法
setfixed(garchspec) <- list(alpha1 = 0.05, shape = 6)

结果

garchfit <- ugarchfit(data = EURUSDret, spec = garchspec)

coef(garchfit)
           mu         omega        alpha1         beta1         shape 
-4.142922e-05  2.061772e-07  5.000000e-02  9.489622e-01  6.000000e+00
在 R 中构建 GARCH 模型

参数取值范围(Bounds)

  • GARCH 参数可限制在一个区间内。
  • 有时可行区间较大:
    • 为保证方差为正,例如要求所有方差参数($\omega$、$\alpha$、$\beta$、$\gamma$)为正。
  • 有时可行区间更小:
    • $\alpha$ 的可能取值在 0.05 到 0.2 之间
    • $\beta$ 的可能取值在 0.7 到 0.95 之间
  • 可用 setbounds() 方法对参数施加此类界约束。
在 R 中构建 GARCH 模型

setbounds() 示例

setbounds(garchspec) <- list(alpha1 = c(0.05, 0.2), beta1 = c(0.8, 0.95))
在 R 中构建 GARCH 模型

用直觉避免不必要的复杂性。

利用已有信息:

  • 构建简单(且聪明)的模型
  • 固定参数或设定取值范围
  • 让 GARCH 动态更贴近现实:

    • 波动率围绕样本标准差的均值回归
      sd(EURUSDret) # returns a value of 0.006194049
      
在 R 中构建 GARCH 模型

波动簇与波动率的均值回归

在 R 中构建 GARCH 模型

方差瞄准(variance targeting)

  • 数学上,这意味着 GARCH 模型蕴含的无条件方差等于样本方差 $\hat \sigma^2$。
  • 如何实现?在 ugarchspec()variance.model 中将参数 variance.targeting = TRUE
garchspec <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
                        variance.model = list(model = "sGARCH",
                        variance.targeting = TRUE),
                        distribution.model = "std")
garchfit <- ugarchfit(data = EURUSDret, spec = garchspec)
all.equal(uncvariance(garchfit), sd(EURUSDret) ^ 2, tol = 1e-4)
TRUE
在 R 中构建 GARCH 模型

对 GARCH 模型施加约束

在 R 中构建 GARCH 模型

Preparing Video For Download...