3

我有大约五年期间的一年利率数据。我想为这个利率创建一个模型,我得出的结论是带有 GARCH(1,1) 的 ARMA(3,2) 是合适的。因此,我使用下面的代码来获得我的估计。

> stibor1ydarmagarch=garchFit(formula=~arma(3,2)+garch(1,1),
                          data=stibor1yd, 
                          cond.dist="std", 
                          trace=FALSE)

这很好用,我得到了很好的估计。但是,在进行预测时,我遇到了错误。有人知道我为什么会收到错误以及如何解决它吗?

> predict(stibor1ydarmagarch, n.ahead=10)
Error in a_vec[(i - 1):(i - u2)] : only 0's may be mixed with negative subscripts
4

1 回答 1

4

这个问题似乎与不包含答案的旧帖子重复:R error when using predict() function with class = fGarch

该错误源于(i - 1)or(i - u2)变为负数的情况,因此索引类似于 -1:2 ,这是不允许的。

通过检查拟合对象的预测方法后getMethod("predict","fGARCH"),看起来错误发生在此处(省略了无关部分):

    a_vec <- rep(0, (n.ahead))      
    u2 <- length(ar)      
    a_vec[1] = ar[1] + ma[1]       
    if ((n.ahead - 1) > 1) {
        for (i in 2:(n.ahead - 1)) {
          a_vec[i] <- ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)]             
        }
    }

所以i总是大于 1,所以发生错误是因为

(i - u2) < 0 <==> i < u2 <==> i < length(ar)

这有道理吗?对我来说不是,因为看起来如果您的模型的 ar 部分大于 2,这总是会产生错误。

代码有点奇怪,因为a_vec[i]它是标量和

ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)] + ...可以是长度大于 1 的向量。

编辑:

预测函数中存在错误,或者存在未记录的限制,可以预测哪种模型,因为即使是fGarch手册中的示例,如果稍作修改也会出错:

   set.seed(123)
   fit = garchFit(~arma(2,0)+garch(1,1), data = garchSim(), trace = FALSE)
   predict(fit, n.ahead = 4)
   meanForecast   meanError standardDeviation
1 -7.512452e-04 0.004161189       0.004161189
2 -1.107497e-03 0.003958535       0.003878321
3  2.617933e-04 0.003782362       0.003665391
4  6.264252e-05 0.003616971       0.003507209
Warning message:
In a_vec[i] <- ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)] +  :
  number of items to replace is not a multiple of replacement length

根据fGarch 软件包的变更日志,这个问题似乎在几年前得到了纠正,但显然它已经重新浮出水面,或者从未正确修复:

2009-11-05  chalabi

    * R/methods-predict.R: small changes in predict,fGARCH-method to
      correct its output when n.ahead=1 since addition of conditional
      errors.

我建议你联系包的维护者。

于 2013-03-18T12:00:09.887 回答