Использование цикла for для подогнанной модели DCC GARCH в R

Я новый пользователь R. Пожалуйста, помогите мне!

У меня есть 1114 наблюдений с 8 активами. Например, я подогнал многомерную модель DCC-GARCH к первым 1000 точкам данных и хочу сделать прогноз на 1 вперед на 3 периода позже, например

1) Data[1:1000,] In-sample data, forecast for Data[1001,]
2) Data[1:1001,] In-sample data, forecast for Data[1002,]
3) Data[1:1002,] In-sample data, forecast for Data[1003,]

Ниже мой воспроизводимый код: -

# load libraries
library(rugarch)
library(rmgarch)
library(FinTS)
library(tseries)
library (fPortfolio)

data(dji30retw)
for (i in 1:3) {
Dat.Initial = dji30retw[, 1:8, drop = FALSE]
Dat <- Dat.Initial[1:(1000+(i-1)), ] 

#Fitting the data
uspec = ugarchspec(mean.model = list(armaOrder = c(0,0)), variance.model = list(garchOrder = c(1,1), model = "sGARCH"), distribution.model = "norm")
spec1 = dccspec(uspec = multispec( replicate(8, uspec)), dccOrder = c(1,1), distribution = "mvnorm")
fit1 <- list()
fit1[[i]] = dccfit(spec1, data = Dat, out.sample = 1, fit.control = list(eval.se=T))

#Out of sample forecasting
dcc.focast <- list()
dcc.focast[[i]]=dccforecast(fit1[[i]], n.ahead = 1, n.roll = 0)
print(dcc.focast[[i]])
}

Коды работают идеально. Теперь я могу получить свои значения dcc.focast. Но почему это, если я выполняю

 dcc.focast[[1]]
 NULL

это дает мне "NULL". Разве он не должен давать тот же ответ, что и «print(dcc.focast[[i]])», что и в цикле?

Проблема здесь, это дает мне только dcc.focast[[3]]. Остальные являются "НУЛЕВЫМИ". В чем ошибка, которую я сделал? Кто-нибудь может помочь объяснить?


person NSAA    schedule 01.02.2016    source источник


Ответы (1)


Измените свой код, чтобы определить списки за пределами for. Вы удаляете предыдущие вычисления при переопределении списков внутри цикла.

data(dji30retw)
fit1 <- list()
dcc.focast <- list()
for (i in 1:3) {#i=1
  Dat.Initial = dji30retw[, 1:8, drop = FALSE]
  Dat <- Dat.Initial[1:(1000+(i-1)), ] 

  #Fitting the data
  uspec = ugarchspec(mean.model = list(armaOrder = c(0,0)), variance.model = list(garchOrder = c(1,1), model = "sGARCH"), distribution.model = "norm")
  spec1 = dccspec(uspec = multispec( replicate(8, uspec)), dccOrder = c(1,1), distribution = "mvnorm")
  fit1[[i]] = dccfit(spec1, data = Dat, out.sample = 1, fit.control = list(eval.se=T))

  #Out of sample forecasting
  dcc.focast[[i]]=dccforecast(fit1[[i]], n.ahead = 1, n.roll = 0)
  print(dcc.focast[[i]])
}
summary(dcc.focast)
dcc.focast[[1]]

> summary(dcc.focast)
     Length Class       Mode
[1,] 1      DCCforecast S4  
[2,] 1      DCCforecast S4  
[3,] 1      DCCforecast S4  
> dcc.focast[[1]]

*---------------------------------*
*       DCC GARCH Forecast        *
*---------------------------------*

Distribution         :  mvnorm
Model                :  DCC(1,1)
Horizon              :  1
Roll Steps           :  0
-----------------------------------

0-roll forecast: 
, , 1

       [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]
[1,] 1.0000 0.3378 0.3244 0.2383 0.2730 0.5086 0.3470 0.5073
[2,] 0.3378 1.0000 0.3498 0.5423 0.5910 0.3321 0.2802 0.3658
[3,] 0.3244 0.3498 1.0000 0.2372 0.2771 0.3479 0.2433 0.3625
[4,] 0.2383 0.5423 0.2372 1.0000 0.5746 0.2877 0.2303 0.3593
[5,] 0.2730 0.5910 0.2771 0.5746 1.0000 0.3063 0.2169 0.3101
[6,] 0.5086 0.3321 0.3479 0.2877 0.3063 1.0000 0.3637 0.4307
[7,] 0.3470 0.2802 0.2433 0.2303 0.2169 0.3637 1.0000 0.3976
[8,] 0.5073 0.3658 0.3625 0.3593 0.3101 0.4307 0.3976 1.0000
person Robert    schedule 06.05.2016