代码之家  ›  专栏  ›  技术社区  ›  TheAvenger

R rugarch模拟

  •  1
  • TheAvenger  · 技术社区  · 7 年前

    我想知道rugarch规格模型中每个参数的范围。 例如,分布误差“nig”和模型“apARCH”。我想知道与“nig”分布相关的参数“skew”、“shape”以及模型“apARCH”的参数“gamma”和“delta”的范围。 这是我的代码示例:

    varianceModel = list(model="apARCH", garchOrder=c(1,1))
    meanModel = list(armaOrder=c(1,1))
    distributionModel = "nig"
    fixedPars = list(mu=0, ar1 = 0.1, ma1= 0.9, omega=0.001, alpha1=0.1, beta1=0.8, gamma1 = 0.01, delta = 2, shape=1.5, skew = 0.2)
    
    
    spec <- ugarchspec(variance.model = varianceModel, 
                             mean.model= meanModel, distribution.model=distributionModel, 
                             fixed.pars=fixedPars)
    path.sgarch <- ugarchpath(spec, n.sim=1000, n.start=1, m.sim=20)
    

    现在,对于每个参数,我如何获得可能的范围或“标准”参数?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Julius Vainora    7 年前

    在的文档中似乎没有此类参数的可能值范围列表 rugarch 虽然 this introduction 仅提供部分信息。

    然而,这些可能值的范围是(至少应该是)标准的,因为它们提供了定义良好的分布和平稳模型。因此,您应该能够在其他一些源中找到所有此类范围。

    然而,关于发行版,实际上在 鲁加奇 您可以使用的 rugarch:::.DistributionBounds 函数源代码。例如,它包含

    if (distribution == "nig") {
        skew = 0.2
        skew.LB = -0.99
        skew.UB = 0.99
        shape = 0.4
        shape.LB = 0.01
        shape.UB = 25
    }
    

    这意味着 skew 分别为-0.99和0.99。要更快地提取这些数字,可以使用

    rugarch:::.DistributionBounds("nig")[c("skew.LB", "skew.UB")]
    # $skew.LB
    # [1] -0.99
    #
    # $skew.UB
    # [1] 0.99
    

    关于方差模型,通常为“简单”范围,如-1<伽马值(<);1用于 APARCH ,不可用/您想要的,因为它们只允许模型存在,但不保证平稳性。例如,对于GARCH(1,1),我们需要α+β<1.因此,实际上,我们有比间隔更高的维度约束。正如我所说,你可以在网上找到这些。

    然而 ugarchpath 还可以通过计算来检查这些条件 persistence(spec) 。现在,正如你在

    getMethod("persistence", signature(object = "uGARCHspec", pars = "missing", 
                                       distribution = "missing", model = "missing", 
                                       submodel="missing"))
    

    对于每个规范,都有不同的方法来计算这种持久性。例如,对于APARCH,我们看

    rugarch:::.persistaparch1
    # function (pars, idx, distribution = "norm") 
    # {
    #     alpha = pars[idx["alpha", 1]:idx["alpha", 2]]
    #     beta = pars[idx["beta", 1]:idx["beta", 2]]
    #     gamma = pars[idx["gamma", 1]:idx["gamma", 2]]
    #     delta = pars[idx["delta", 1]:idx["delta", 2]]
    #     skew = pars[idx["skew", 1]:idx["skew", 2]]
    #     shape = pars[idx["shape", 1]:idx["shape", 2]]
    #     ghlambda = pars[idx["ghlambda", 1]:idx["ghlambda", 2]]
    #     ps = sum(beta) + sum(apply(cbind(gamma, alpha), 1, FUN = function(x) x[2] * 
    #         aparchKappa(x[1], delta, ghlambda, shape, skew, distribution)))
    #     return(ps)
    # }
    

    条件是 ps < 1 。请注意

    rugarch:::.persistsgarch1
    # function (pars, idx, distribution = "norm") 
    # {
    #     ps = sum(pars[idx["alpha", 1]:idx["alpha", 2]]) + sum(pars[idx["beta", 
    #         1]:idx["beta", 2]])
    #     return(ps)
    # }
    

    在GARCH(1,1)的情况下精确给出α+β,然后 ugarchpath公司 检查上述平稳性条件。因此,您可以做的最简单的事情是检查 persistence(spec) < 1 在模拟之前。例如,在您的示例中,

    persistence(spec)
    # [1] 0.8997927