Ошибки в прогнозировании на скользящем окне в R с MSGARCH - PullRequest
0 голосов
/ 11 января 2019

Я использую MSGARCH для получения прогнозов волатильности на основе скользящего окна.

Однако при подборе прогнозов на скользящем окне я получаю следующие сообщения об ошибках:

Error: $ operator is invalid for atomic vectors

Дополнительно:

Warning messages: 1: In sqrt(diag(mSandwitch)) : NaNs produced

И нулевые значения, начиная с некоторой точки прогнозируемой выработки.

Я пытался изменить диапазон используемых данных, но это приводит только к нулям, начиная с другой точки. Если я изменю число прогнозирования на день вперед, в прогнозируемом выпуске будут НС и нули. Я также изменил FitML на FitMCMC и не получил ошибок, однако прогнозируемый результат в основном включал большие числа, такие как 5e + 37, что совершенно нереально для волатильности и моих данных. Более того, если я прогнозирую ту же модель без цикла для прогноза на n дней вперед (n = 1, 50, 400, ..), проблем не будет. Если я использую случайно сгенерированные данные вместо моих с runif функцией (min=-1,max=1), проблема остается той же.

#Create the forecasts vector to store the predictions
windowLength = 100
foreLength<-365
MSforecasts <- vector(length=foreLength)

for (d in 1:foreLength) {
  # Obtain the rolling window 
  RollingWindow = window(FileAllData$Returns, start=(6850+d), end=(6850+windowLength+d))
  MSmodel<-CreateSpec(variance.spec = list(model = c("sGARCH", "gjrGARCH", "eGARCH")),
                  distribution.spec = list(distribution = c("snorm", "std", "sged")),
                  switch.spec = list(do.mix = FALSE))
  MSmodel_est<-FitML(spec = MSmodel, data=RollingWindow)

  #Forecasting
  MSforecast<-predict(MSmodel_est, nahead = 1)
  MSforecasts[d]<-MSforecast$vol
}
MSforecasts

Как мой код можно изменить, чтобы он давал правильные прогнозные значения?

P.S. Я новичок в SO, поэтому наведите меня, если есть какая-то дополнительная информация, которую я могу предоставить, чтобы прояснить проблему.

1 Ответ

0 голосов
/ 13 января 2019

Ошибка должна быть в методе «окно», принимающем в качестве аргумента дату временного ряда. Попробуйте следующим образом:

Create the forecasts vector to store the predictions
windowLength = 100
foreLength<-365
MSforecasts <- vector(length=foreLength)

for (d in 1:foreLength) {
  # Obtain the rolling window 
  RollingWindow = FileAllData$Returns[(6850+d):(6850+windowLength+d)] 
  MSmodel<-CreateSpec(variance.spec = list(model = c("sGARCH", "gjrGARCH", "eGARCH")),
                  distribution.spec = list(distribution = c("snorm", "std", "sged")),
                  switch.spec = list(do.mix = FALSE))
  MSmodel_est<-FitML(spec = MSmodel, data=RollingWindow)

  #Forecasting
  MSforecast<-predict(MSmodel_est, nahead = 1)
  MSforecasts[d]<-MSforecast$vol
}
MSforecasts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...