#' @include Forecaster.R #' #' @title Average Forecaster #' #' @description Return the (pointwise) average of the all the (similar) centered day curves #' in the past. Inherits \code{\link{Forecaster}} AverageForecaster = setRefClass( Class = "AverageForecaster", contains = "Forecaster", methods = list( initialize = function(...) { callSuper(...) }, predict = function(today, memory, horizon, ...) { predicted_shape = predictShape(today, memory, horizon, ...) #Take care of never passing same_day==FALSE (when pjump == Persistence) predicted_delta = if (#as.character(substitute(pjump))=="Persistence" && #TODO: doesn't work hasArg("same_day") && list(...)$same_day==FALSE) { args = list(...) args$same_day = TRUE do.call(pjump, append(list("today"=today,"memory"=memory,"horizon"=horizon), args)) } else pjump(data, today, memory, horizon, params, ...) predicted_shape + tail(data$getSerie(today),1) - predicted_shape[1] + predicted_delta }, predictShape = function(today, memory, horizon, ...) { avg = rep(0., horizon) first_day = max(1, today-memory) index = today-7 + 1 nb_no_na_series = 0 repeat { { serie_on_horizon = data$getCenteredSerie(index)[1:horizon] index = index - 7 }; if (!any(is.na(serie_on_horizon))) { avg = avg + serie_on_horizon nb_no_na_series = nb_no_na_series + 1 }; if (index < first_day) break } avg / nb_no_na_series } ) )