2013-03-18 160 views
3

我有大約五年時間的一年利率數據。我想爲這個利率創建一個模型,我得出的結論是,具有GARCH(1,1)的ARMA(3,2)是適當的。因此,我使用下面的代碼來獲得我的估計。預測ARMA GARCH模型的錯誤

> 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

這個問題似乎是重複使用舊後不包含答案:R error when using predict() function with class = fGarch

誤差從那裏無論是(i - 1)(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)

這是否有意義?對我而言,它不會,因爲看起來你的模型的零件大於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 

基礎上Changelog of fGarch package看來這個問題在幾年前糾正,但顯然它已經復出了,或者從來沒有正確固定:

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. 

我建議您聯繫包的維護者。

+0

我重新做了模型,使其現在的規格ARMA(2,2)+ GARCH(1,1)得到10個預期的預測。然而這使得絕對不適合我。爲什麼我可以用2個術語而不是3來預測? – user2182066 2013-03-18 12:16:44

+0

@ user2182066檢查我更新的答案。這顯然是預測方法中的一個錯誤。 – 2013-03-18 12:30:14

+0

2013和錯誤仍然存​​在 – pyCthon 2013-09-13 03:02:20