关于数据挖掘:R语言GARCH建模常用软件包比较拟合标准普尔SP-500指数波动率时间序列和预测可视化

48次阅读

共计 4814 个字符,预计需要花费 13 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=24441 

咱们钻研稳定汇集,以及应用单变量 GARCH(1,1) 模型对其进行建模。

稳定汇集

稳定汇集——存在绝对安稳期间和高稳定期间的景象——是市场数据的一个看似广泛的属性。对此没有广泛承受的解释。GARCH(狭义自回归条件异方差)模型 稳定汇集。图 1 是稳定率的 garch 模型的示例。

图 1:依据 garch(1,1) 模型预计的 2011 年底之前的规范普尔 500 指数稳定率

显然,波动性随工夫变动。图 1 是稳定率模型,而不是真正的稳定率。但如果咱们有一张实在稳定率的图片,它看起来会十分像图 1。

数据需要

提供给 garch 预计的数据是每日数据。你能够应用每周或每月的数据,但这将使数据中的一些稳定变得平滑。

你能够用 garch 解决日内数据,但这变得很简单。一天中的稳定有季节性。季节性在很大水平上取决于交易产生的特定市场,也可能取决于特定资产。一个例子是看盘中的危险值。

图 1 没有显示实在的波动性,因为咱们素来没有察看过波动性。波动性已经只是间接地裸露在咱们背后。所以咱们试图预计一些未知的货色。

图 2 是一个原型 garch 模型图。

图 2:“无噪音”garch 模型图

garch 的观点是稳定率回升而后衰减,直到呈现另一个峰值。很难在图 1 中看到这种行为,因为时间轴太紧凑了,因而在图 3 中更加显著。

图 3:由 garch(1,1) 模型预计的 MMM 稳定率。

当然,在实在数据中,有各种规模的冲击,而不仅仅是大的冲击。

请留神,来自布告的波动性(与冲击相同)是反过来的 – 波动性随着布告工夫的邻近而减少,而后在布告后果进去后隐没。

对 Garch 模型的预计次要是对衰减速度的预计。它所看到的衰减是十分嘈杂的,所以它心愿看到大量的数据。大量的数据是指它心愿有数以万计的每日观测数据。

有两个起因不能给它大量的观测数据。
 

  • 你没有那么多察看数据

  • 市场随工夫变动

所以有一个折中的办法。每天 2000 次察看往往不无道理。

如果你每天的观测值少于 1000 个,那么预计就不可能给你提供很多对于参数的实在信息。最好是抉择一个 “ 正当的 “ 模型。这将是一个具备大概正确的持久性的模型(见下文),α1 参数在 0 和 0.1 之间,β1 参数在 0.9 和 1 之间。

预计

咱们应用 GARCH(1,1) 模型;不是因为它是最好的,因为它是最罕用的。

Garch 模型简直总是通过最大似然预计。后果证实这是一个十分难的优化问题。假如你有足够重要的数据,即便是最好的 garch 实现也须要关注优化。

咱们晓得,收益率没有正态分布,它们有长尾。假如长尾齐全是因为 arch 效应造成的,这是齐全正当的,在这种状况下,在 arch 模型中应用正态分布将是正确的做法。然而,应用长尾散布的可能性,后果是给出一个更好的拟合(简直总是如此)。t 散布仿佛做得很好。
 

自相干

如果模型正确解释了稳定汇集,则平方标准化残差将不存在自相干。通常进行 Ljung-Box 测验来测验这种自相关性。

上面是假如 MMM 回报正态分布的拟合输入(在本例中实际上是 Box-Pierce):

如果你习惯于看拟合度测验的 p 值,你可能会留神到一些奇怪的货色。测验表明,咱们用 4 个参数适度拟合了 1547 个观测值。我不这么认为。

更好的解释是,只管测验是十分持重的,但对这种极其的数据来说,测验并不持重。这样测验平方残差可能会产生副作用。一个有信息量的测验是对于平方标准化残差的行列。

持久性

garch 模型的持久性与冲击后大的稳定率衰减的速度无关。对于 garch(1,1)模型来说,要害的统计数字是两个主要参数(alpha1 和 beta1,咱们在这里应用的符号)的总和。

α1 和 β1 的总和应该小于 1。如果总和等于 1,那么咱们就有一个指数衰减模型。

能够用半衰期来示意持久性。半衰期是 log(0.5)/log(alpha1 + beta1),其中的单位将是收益率的频率。当 α1+β1 达到 1 时,半衰期就变成了有限。

为什么咱们会失去具备有限持久性的预计?持久性是通过观察在样本期间衰减的速度来预计的。如果在样本期间稳定率有一个趋势,那么估计者就会 “ 认为 “ 它从未看到齐全的衰减。样本期越短,越有可能呈现坑骗预计的趋势。

无论参数估计值是多少,稳定率的样本内估计值看起来都很类似。如果咱们扭转各自模型的参数估计值,图 1 和图 3 不会有太大变动。然而当咱们在样本外进行预测时,参数就很重要了。

应用 Garch

Garch 模型之所以有用,是因为以下两点:

  • 你能够应用 garch 模型进行预测

  • 你能够应用 garch 模型进行模仿

预测

你预测的越远,你的模型就越靠近完满。Garch 模型并不是特地靠近完满。如果你在一个月或更长时间的工夫范畴内进行预测,那么成果可能不好。如果你预测的是将来几天,那么 Garch 应该是相当有用的。

模型的持久性是预测的要害驱动因素——它决定了预测进入无条件稳定的速度。如果稳定率的确存在很多持久性,并且你的模型精确地捕捉到了这种持久性,那么你将在很远的中央取得良好的预测。

有两种不同的事件能够预测:

  • 预测期各工夫点的稳定率

  • 从周期开始到周期中每个工夫点的均匀稳定率

例如,期权价格的稳定率是到期前的均匀稳定率,而不是到期日的稳定率。

因而,在预测时你须要理解两件事:

  • 你想要哪个预测

  • 你失去哪个预测

模仿

garch 模仿须要:

  • garch 模型(包含参数值)

  • 模型的稳定状态

  • 标准化(方差 1)的散布

咱们想要的稳定状态简直总是数据开端的状态。咱们想利用以后的稳定状态并展望未来。

应用教训散布——拟合模型的标准化残差——通常是散布的最佳抉择。即便在应用教训散布时,拟合模型时的散布假如也会产生影响。

预计程序“试图”使残差合乎假如的散布。假如正态分布的模型的标准化残差将比假如散布雷同数据的模型的残差更靠近正态分布。

模仿依赖于预计的参数,但不像预测那样重大。当咱们模仿到更远的将来时,模型误差会减轻。
 

R 包

R 中的 garch 建模有多种抉择。没有一种是完满的,应用哪种可能取决于你想要实现的指标。然而,rugarch 对于许多人来说,它可能是最好的抉择。

rugarch

这具备拟合(即预计参数)、预测和模仿的性能。

以下是应用 Student t 散布进行拟合的示例:

ugarchspec(mean.modl, distriuion)
ugarchfit(ru, ret)
coef

> #  绘制样本内稳定率估计值
> plot(sqrt(252) * sigma)

这个包中的优化可能是我探讨的包中最简单和最值得信赖的。

fGarch

咱们将拟合与上述雷同的 Student t 模型:

garchFit(sp5, cod.dit="std")
coef

 

> #  绘制样本内稳定率估计值
> plot(sqrt(252) * gfit.fg@sigma.t, type="l")

tseries

这个包是第一个在 R 中蕴含公开可用的 garch 函数的包。它仅限于正态分布。

garch(sp5)
coef

> # 绘制样本内稳定率估计值
> plot(sqrt(252) *fittedalus)

bayesGARCH

对 Garch 模型进行贝叶斯预计。

这个包所做的惟一模型是具备 t 散布误差的 garch(1,1)。

bayesGARCH(sp5)

然而,此命令失败并呈现谬误。如果咱们以百分比模式给出收益率,则该命令的确无效:

bayesGARCH(sp5 * 100)

这也可能是最大似然预计的一个问题。至多有一个 Garch 的实现在优化百分比收益而不是天然比例的收益方面要好得多。你能够对优化做一个测试,就是在两种规模的回报上预计模型并比拟后果。

不过,bayesGARCH 函数并没有给咱们一个估计值。它给咱们的是一个矩阵,列对应于参数,行对应于马尔科夫链蒙特卡洛。这能够说是参数的(后验)散布的一个样本。

如果咱们对持久性施加一个束缚,咱们能够失去一个更有用的剖析。咱们通过为约束条件创立一个函数来做到这一点。
 

      pi\[2\] + pi\[3\] < .9986

这就是说超过两年的半衰期是不合理的。而后咱们应用该束缚:

cotrl=list(adPrrdos=prieces))

当初咱们从后果中进行抉择并计算散布中的半衰期:

而后绘制后果。

图 3:MMM 稳定率半衰期的贝叶斯预计

betategarch

该包拟合具备 t 散布误差的 EGARCH 模型。

tegarch.est(sp5)
par

tegarch.fit(sp5, par)
plot(sqrt(252) * siga * 
     sd(epiln\]))

 图 4 将这个估计值与 garch(1,1)估计值进行了比拟(来自 rugarch,但它们看起来都十分类似)。

图 4: 由 garch(1,1) 模型(蓝色)和 beta-t EGARCH 模型(红色)预计的 MMM 稳定率

dynamo

我认为在这个包中预计一个 garch 模型的办法是:

dm(sp~ garch(1,1))

AutoSEARCH

该包将为 ARCH 模型抉择最佳滞后。

rugarch 包中的 garch 模型

如何拟合和应用 garch 模型。

模型

这模型通常比更常见的 garch(1,1) 模型成果更好。

图 5 显示了拟合规范普尔 500 指数的两个模型对将来 20 天每天稳定率的预测。模型对稳定率的预测更为粗疏。

图 5:应用模型(蓝色)和具备方差指标(红色)的 garch(1,1) 对每天的稳定率预测

通常,你关怀的是从当初到指定日期的均匀稳定率。这被称为期限构造——图 6 显示了这一点。

图 6:应用重量模型(蓝色)和具备方差指标(红色)的 garch(1,1) 预测规范普尔 500 指数的稳定率期限构造

创立这些图的代码如下所示。

R 代码

该 rugarch 软件包容许抉择拟合模型。

谬误

首先这是我遇到的一个问题:

  SET\_VECTOR\_ELT() can only be applied to a 'list', not a 'symbol'

更新这些包能够解决问题。

卸载包后,我更新了 Rcpp 和 RcppArmadillo 包。依然不能失常工作。

再次装置 Rcpp 后,胜利了。

模型被调用 "csGARCH"rugarch 两个额定的参数被称为 eta11(我的符号中的 ρ)和 eta21(φ)。它的散布和常数平均值是:

ugarchspec(mean.model, ditrbuton,
  vriane.moel)

用处如下:

Warning message:
In .makefitmodel
  NaNs produced

正告信息仿佛是对于:

fit$coH
\[1\] NaN

预计系数和半衰期为:

> coef

> halflife

 

具备方差指标的 garch(1,1) 模型的标准是:

ugarchspec(mean.moel, isrition,
  varane.moel,
  vrince.tgtng=TRUE))

预测

一旦模型拟合好,你就能够进行预测。

ugarchforecast()

一旦咱们失去了预测的稳定率,咱们就能够绘制它。生成图 5 的函数是:

    plot(1:20, spf}

图 6 的函数是:

    plot(sqrt(cumsum(spe^2)/(1:20))

 

最受欢迎的见解

1.HAR-RV- J 与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频稳定率

2.R 语言中基于混合数据抽样 (MIDAS) 回归的 HAR-RV 模型预测 GDP 增长回归的 HAR-RV 模型预测 GDP 增长 ”)

3.稳定率的实现:ARCH 模型与 HAR-RV 模型

4.R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测

5.GARCH(1,1),MA 以及历史模拟法的 VaR 比拟

6.R 语言多元 COPULA GARCH 模型工夫序列预测

7.R 语言基于 ARMA-GARCH 过程的 VAR 拟合和预测

8.matlab 预测 ARMA-GARCH 条件均值和方差模型

9.R 语言对 S&P500 股票指数进行 ARIMA + GARCH 交易策略

正文完
 0