编写一个函数,用于根据 GARCH 模型中的结构性变化执行统计检验。正如我在此演示的那样,这些检验严重依赖于对模型参数的连续估计。至少我的实验表明,参数的变化没有被标准差充分捕获,同时也存在参数估计中不可接受的高度不稳定性。它们是如此不稳定,它将使检验不拒绝无变化的原假设成为一项奇迹(译注:几乎必然拒绝原假设)。毕竟,只要看一下模拟数据的图片就可以得出结论,结构性变化的备择假设是正确的。因此,每当我尝试对原假设被认为是真的数据进行检验时,检验就明确拒绝它,其中 \(p\)-值基本上为 0。
我听说有人们正对 GARCH 模型中的结构性变化进行假设检验研究,所以如果我在这里写到的数值不稳定性可以避免,我不会对此感到惊讶。这是一个我自认知之甚少的主题,如果 R 社区中的某个人已经观察到了这种行为并且知道如何解决它,我希望他们会在评论或电子邮件中告诉我。我可以写一个回复并展示如何使用 garchFit()
生成参数的稳定估计。也许关键在于函数 garchFitControl()
。
我也考虑过根据我的测试编写自己的优化程序。Nash 教授在他的论文中强调了针对特定问题的需求定制优化程序的重要性。我已经写下了要优化的量,我有一个 \(\text{GARCH}(1,1)\) 的梯度和 Hessian 矩阵的公式。也许我们的检验所要求的连续优化可以使用先前迭代中的参数作为初始值,从而有助于防止优化计算找到离群的、局部最优而全局次优的解。
虽然这使得问题比我最初想找一个我们检验的例子更难。我现在正在计划检测 GARCH 模型中的结构性变化,但是仅涉及使用线性回归的示例(一个更易处理的问题)。但我希望听到别人对我在这里写的内容的意见。
sessionInfo()
## R version 3.3.3 (2017-03-06)
## Platform: i686-pc-linux-gnu (32-bit)
## Running under: Ubuntu 16.04.2 LTS
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] dplyr_0.7.2 plyr_1.8.4 reshape2_1.4.2
## [4] fGarch_3010.82.1 fBasics_3011.87 timeSeries_3022.101.2
## [7] timeDate_3012.100 ggplot2_2.2.1
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.11 bindr_0.1 knitr_1.17 magrittr_1.5
## [5] munsell_0.4.3 colorspace_1.3-2 R6_2.2.0 rlang_0.1.2
## [9] stringr_1.2.0 tools_3.3.3 grid_3.3.3 gtable_0.2.0
## [13] htmltools_0.3.6 assertthat_0.1 yaml_2.1.14 lazyeva l_0.2.0
## [17] rprojroot_1.2 digest_0.6.12 tibble_1.3.4 bindrcpp_0.2
## [21] glue_1.1.1 eva luate_0.10 rmarkdown_1.6 labeling_0.3
## [25] stringi_1.1.5 scales_0.4.1 backports_1.0.5 pkgconfig_2.0.1
译后记
原作者所指出的 GARCH 模型参数估计的不稳定性不仅使其本人困惑,也同样令我震惊。我之前从未怀疑或质疑过统计软件的计算结果,甚至没有考虑过这个问题。今后在处理其他统计模型的参数估计问题时,务必首先用模拟数据检验一下相关软件的结果稳健性。
回到 GARCH 模型参数估计的话题,我猜测 \(\beta\) 的不稳定性可能来自以下原因:
- GARCH 序列的统计性质对 \(\alpha\) 和 \(\beta\) 不敏感,特别是 \(\beta\);
- \(\omega\)、\(\alpha\)、\(\beta\) 以及长期方差之间存在一个硬性的等式约束,但是在优化计算中没有体现出这种等式约束。
\(\omega\)、\(\alpha\)、\(\beta\) 以及长期方差之间存在的硬性等式约束也许提供了技术性的补救手段:先估计 \(\omega\) 和 \(\alpha\),再用等式约束和经验长期方差推算出 \(\beta\)。
延续原作者的思路,下面是后续研究工作和博客写作的安排:
- 验证上述补救手段;
- 测试
rugarch
的数值稳定性;
- 测试
rmgarch
和 MTS
等数值稳定性;
- 测试
pyflux
、arch
和 statsmodels
等 python 包的数值稳定性。
GARCH 模型参数估计的不稳定性也引出了另一个问题,对于不可观测的波动率的建模,参数估计以及校准的结果都是值得怀疑的。所以,某些 SDE 参数的估计和校准的稳定性实验应该提上日程。