2013-03-18 2 views
3

У меня есть данные о годовой процентной ставке за период более пяти лет. Я хотел бы создать модель для этой процентной ставки, и я пришел к выводу, что ARMA (3,2) с GARCH (1,1) подходит. Поэтому для получения моих оценок я использую следующий код ниже.Ошибка в прогнозе для модели 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.

EDIT:

Существует либо ошибка в функции прогнозирования или есть недокументированные ограничения, какие модели могут быть предсказаны, так как даже пример из руководства 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 периодов вперед. Однако это делает absolutley никакого смысла для меня. Почему я могу прогнозировать с 2-го уровня, но не 3? – user2182066

+0

@ user2182066 проверить мой обновленный ответ. Это, очевидно, ошибка в методе прогнозирования. –

+0

2013 и ошибка все еще – pyCthon

Смежные вопросы