Перебор функций прогноза в tsCV

У меня есть цикл ниже, перебирающий 4 метода прогнозирования временных рядов в tsCV (происхождение скользящего прогноза). Третий метод в списке, y, не прерывает цикл. Однако таблица результатов z, предназначенная для хранения MAE (средняя абсолютная ошибка), записывает NaN для этой определяемой пользователем функции.

Эта функция прогноза определяется пользователем, так как мне нужно указать damped=T

library(forecast)
x <- 8  # t +
y <- list(ses, holt, function(j, k){forecast(holt(j, h=k, damped=T))}, hw)
z <- list()

for (i in seq_along(y))
{
  a <- data.frame(tsCV(AirPassengers, y[[i]], h=x))
  a[1:12, ] <- NA  # 1st 12 months' forecast likely to be meaningless
  b <- colMeans(abs(a), na.rm=T)
  c <- data.frame(model = i
                  ,h = 1:x
                  ,mae = b
                  )
  z[[i]] <- c
}

z <- do.call(rbind, z)
z$model <- as.factor(z$model)

Я получил свою идею для определяемой пользователем функции здесь: http://pkg.robjhyndman.com/forecast/reference/tsCV.html#see-also

Спасибо.


person T.Fung    schedule 23.08.2019    source источник


Ответы (1)


Согласно документации для tsCV, предоставленная функция должна иметь аргумент с фактическим именем «h». Так что просто измените свою функцию на

y <- list(ses, holt, function(j, h){forecast(holt(j, h=h, damped=T))}, hw)

При этом значения NaN не возвращаются.

person MrFlick    schedule 23.08.2019
comment
Ты прав. Ссылаясь на ?tsCV, под Usage, где мы находим: tsCV(y, forecastfunction, h = 1, window = NULL, xreg = NULL, initial = 0, ...) У меня сложилось впечатление, что h под Arguments ссылается на 3-й аргумент в tsCV, а не внутри его аналога в forecastfunction Тем не менее, вы предоставили решение. Спасибо. - person T.Fung; 23.08.2019
comment
Более конкретно я имел в виду раздел «Аргументы» пейджера справки, где он описывает forecastFunction как функцию для возврата объекта прогноза класса. Его первым аргументом должен быть одномерный временной ряд, и он должен иметь аргумент h для горизонта прогноза (выделение добавлено). h в вызове tsCV технически является другой переменной. - person MrFlick; 23.08.2019
comment
Да, я нашел эту строку (сейчас). Спасибо, что потратили свое время, чтобы указать на это. Теперь учит меня внимательно читать руководства. - person T.Fung; 23.08.2019