добавление пользовательской функции прогноза, расширяющей snaive - PullRequest
0 голосов
/ 03 октября 2019

Я хотел бы расширить snaive из пакета forecast (или, может быть, lagwalk?) И добавить пользовательскую функцию прогноза custom_snaive.

Я хотел бы получить ее в качестве параметрасписок требуемых_лагов и прогноз простого среднего их значений. Например, для почасовых данных следующий вызов: custom_snaive(lags=c(24, 48, 24*7)) вернул бы простое среднее значений за 1 день назад, 2 дня назад и неделю назад.

Как бы вы реализовали такую ​​функцию? я должен переписать snaive и использовать lagwalk? В настоящее время меня не интересуют интервалы прогнозирования.

(относится к Как создать прогнозный объект в R , но проще)

1 Ответ

0 голосов
/ 03 октября 2019

Я последовал примеру baggedModel . Я назвал lagwalk для каждого лага, а затем обманул forecast, чтобы подумать, что это baggedModel, так как он довольно похож (только это просто агрегация, здесь нет начальной загрузки). Буду признателен за проверку кода кем-то, кто знает пакет forecast, есть ли что-нибудь попроще, что я мог бы использовать?


historical_mean_model <- function(y, lags, lambda=NULL, biasadj=FALSE, ..., x=y) {
  out <- list()
  out$y <- as.ts(y)
  out$modelargs <- list(...)
  out$models <- lapply(lags, function(lag) {
    mod <- forecast:::lagwalk(
      x, lag = lag, drift = FALSE,
      lambda = lambda, biasadj = biasadj, ...
    )
  })
  fitted_all_lags <- lapply(out$models, fitted)
  fitted_all_lags <- as.matrix(as.data.frame(fitted_all_lags))
  out$fitted <- ts(apply(fitted_all_lags, 1, mean))
  tsp(out$fitted) <- tsp(out$y)
  out$residuals <- out$y - out$fitted

  out$series <- deparse(substitute(y))
  out$method <- "historical_mean_model"

  out$call <- match.call()
  return(structure(out, class = c("baggedModel")))
}

...