设为首页 加入收藏

TOP

在 R 中估计 GARCH 参数存在的问题(一)
2019-08-15 00:10:00 】 浏览:447
Tags:估计 GARCH 参数 存在 问题

在 R 中估计 GARCH 参数存在的问题

本文翻译自《Problems In Estimating GARCH Parameters in R 》

原文链接:https://ntguardian.wordpress.com/2017/11/02/problems-estimating-garch-parameters-r/

更新(11/2/17 3:00 PM MDT):我从 R 的金融板块邮件列表收到一位知名金融工具包贡献者——Brian Peterson 的邮件:

我强烈建议关注 rugarchrmgarch。RMetrics 序列包的主要维护者 Diethelm Wuertz 在 2016 年死于车祸,目前的代码基本处于无维护状态。

我会看看这是否解决了这个问题。谢谢 Brian!我把这篇帖子留给其他人,作为将来避免使用 gGarch 的告诫。这对我来说是个新闻,因为书籍经常引用 fGarch,所以这可能是那些寻求在 R 中使用 GARCH 模型的人的资源——为什么不要使用 fGarch

更新(11/2/17 11:30 PM MDT):我用 rugarch 进行了一次快速实验,看起来它同样被这个问题困扰。下面是我运行的代码,我会尽快在明天贴出一份全面的研究。

library(rugarch)

spec = ugarchspec(
    variance.model = list(garchOrder = c(1, 1)),
    mean.model = list(
        armaOrder = c(0, 0), include.mean = FALSE),
    fixed.pars = list(
        alpha1 = 0.2, beta1 = 0.2, omega = 0.2))
ugarchpath(
    spec = spec, n.sim = 1000, n.start = 1000) -> x
srs = x@path$seriesSim
spec1 = ugarchspec(
    variance.model = list(garchOrder = c(1, 1)),
    mean.model = list(
        armaOrder = c(0, 0), include.mean = FALSE))
ugarchfit(spec = spec1, data = srs)
ugarchfit(spec = spec1, data = srs[1:100])

这些天我的研究重点是变点检测方法。这些是用于检测数据序列中出现结构性变化的统计检验和过程。来自质量控制的早期示例是在生产小部件时检测机器是否未校准。可能存在一些感兴趣的测量值,例如我们观察到的滚珠轴承的直径。机器按顺序生成这些小部件。在原假设下,滚珠轴承的平均直径不会改变,而在备择假设中,在制造过程中的某些未知点处,机器变得未校准并且滚珠轴承的平均直径发生变化。然后,检验在这两个假设之间做出决定。

这些类型的检验对经济学家和金融业工作者也很重要,特别是对于预测。我们再次使用按时间索引的序列数据,我首选的例子是股票的价格,在给出了股票的常见时间序列图,人们可以立即将其识别为时间序列,但还有更多的数据集,如州的 GDP 或失业率。经济学家希望使用过去的数据和统计量预测这些数量。统计方法的一个假设是要预测的序列是平稳的:数据的产生过程具有单一的均值、自相关性、分布等。这个假设并不总是经过检验,但对成功的预测至关重要。结构性变化的检验检查了这个假设,如果结果是假的,预测者可能需要在训练他们的模型时分割他们的数据集。

之前写过关于这些检验的文章,介绍了 CUSUM 统计量,这是检测结构性变化的最流行的统计量。我的导师和他以前的博士生(Greg Rice,目前是滑铁卢大学的教授)开发了一个新的检验统计量,可以更好地检测数据集中早期或晚期发生的结构性变化(想象一下,制作小部件的机器几乎没有被校准,一百个小部件中只有最后一打样本受到影响)。我们提交论文的期刊正在要求我们进行修订,其中一个修订是更好的示例应用(我们最初使用上述博客文章中讨论的工资 / 生产率数据,审稿人抱怨这些变量是被相同因素决定的(codetermined),所以使用一个对另一个做回归没意义,我不同意这样的抱怨,但我不会在这里争论)。

我们希望将我们的检验应用于检测 GARCH 模型中的结构性变化,这是金融时间序列中的常见模型。据我所知,用于 GARCH 模型估计和推断(以及其他工作)的“最新技术” R 包是 fGarch。特别是,函数 garchFit() 用于从数据中估计 GARCH 模型。但是,当我们尝试在我们的检验中使用此函数时,我们得到了明显病态的数值(我们已经完成了模拟研究以了解预期的行为)。没有变化的原假设在模拟序列上被完全拒绝。我从未看到检验未能拒绝原假设,即使原假设总是对的。即使样本量为 10000,几乎不是小样本也是如此。

我们认为问题可能在于参数估计的协方差矩阵的估计,并且我煞费苦心地推导和编写函数以使该矩阵不使用数值微分,但这并没有阻止不良行为。最后我的导师和我上周三戏弄了 garchFit() 一把,并发现该函数应该受到责备。当我估计参数(不一定是我们最初认为的协方差矩阵,尽管它可能也被污染)时,函数对模拟数据的行为是如此不稳定,依我来看,该函数基本上是无用的。

这个函数应该是众所周知的,问题当然可能在于我,而不是 fGarch(或者可能有更好的包)。这个函数是如此重要,让我感到我应该分享我的发现。在这篇文章中,我展示了一序列数值实验,证明了 garchFit() 的病态行为。

GARCH 模型基础

\(\text{GARCH}(1,1)\) 是一种时间序列模型,用于为金融工具(例如股票)回报的波动率建模。用 \(\epsilon_t\) 表示 \(\text{GARCH}(1,1)\) 过程,这可以表示诸如股票回报的方差。\(\text{GARCH}(1,1)\) 模型(无均值参数)以递归的形式表示:

\[ \epsilon_t = \sigma_t \eta_t \]

\[ \sigma_t^2 = \omega + \alpha \epsilon_{t - 1}^2 + \beta \sigma_{t - 1}^2 \]

\(\sigma_t\) 是随机过程的条件标准差,也就是条件波动率,\(\eta_t\) 是一个随机过程。

关注金融的人1注意到金融工具(如股票或共同基金)的回报表现出称为波动率聚集的行为。有些时期金融工具相对温和,没有剧烈的市场走势。在其他情况下,金融工具的价格可能会大幅波动,这些时期不是一次性的单日行为,而是可以持续一段时间。GARCH 模型来建模波动率聚集。

一些人认为,即使股票的日常变动基本上是不可预测的(股票在任何一天都等概率地被高估或低估),但波动率可预测的。即使对那些不狂热相信未来的回报可以预测的人来说,这些模型依然很重要。例如,如果使用模型 \(R_t = \alpha + \beta R_{M,t} + \epsilon_t\) 来估计股票的 beta 统计量(其中 \(R_t\) 是股票在时间 \(t\) 上的回报;\(R_{M,t}\) 是市场回报;\(\epsilon_t\) 是“随机噪音”),\(\epsilon_t\) 很可能不是 i.i.d 的随机数序列(通常在其他上下文中假设),而实际上是一个 GAR

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇时间序列分析工具箱—— h2o + ti.. 下一篇使用记忆化优化你的 R 代码

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目