【问题标题】:R rugarch simulationR rugarch 模拟
【发布时间】:2018-08-30 17:11:39
【问题描述】:

我想知道 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)

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

【问题讨论】:

  • 范围是什么意思?可以分配给的值范围,例如,skew?
  • 是的,每个参数的可能值:)

标签: r statistics simulation


【解决方案1】:

rugarch 的文档中似乎没有列出此类参数的可能值范围,而this introduction 仅提供了部分信息。

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

但是,关于发行版,rugarch 中实际上有一个隐藏的源代码可以使用——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

关于方差模型,通常是“简单”范围,例如 APARCH 的 -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 &lt; 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) 的情况下准确给出 alpha + beta,然后ugarchpath检查上述平稳性条件。因此,您可以做的最直接的事情是在模拟之前检查persistence(spec) &lt; 1。例如,在您的示例中,

persistence(spec)
# [1] 0.8997927

【讨论】:

  • 你的回答让我明白了。我不知道如何设置参数。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2019-02-04
相关资源
最近更新 更多