#' Forecaster #' #' Forecaster (abstract class, implemented by all forecasters) #' #' @field params List of computed parameters, for post-run analysis (dev) #' @field data Dataset, object of class Data #' @field pjump Function: how to predict the jump at day interface ? #' #' @docType class #' @importFrom R6 R6Class Forecaster = R6::R6Class("Forecaster", private = list( .params = "list", .data = "Data", .pjump = "function" ), public = list( initialize = function(data, pjump) initialize(self, private, data, pjump) , predictSerie = function(today, memory, horizon, ...) predictSerie(private, today, memory, horizon, ...) , predictShape = function(today, memory, horizon, ...) predictShape(private, today, memory, horizon, ...) , getParameters = function() getParameters(private) ) ) #' Initialize (generic) Forecaster object #' #' @param o Object of class Forecaster #' @param private List of private members in o #' @param data Object of class Data #' @param pjump Function to predict jump initialize = function(o, private, data, pjump) { .params <<- list() .data <<- data .pjump <<- pjump invisible(o) } #' Obtain a new forecasted time-serie #' #' @inheritParams initialize #' @param today Index for current prediction #' @param memory Depth in data (in days) #' @param horizon Number of hours to forecast predictSerie = function(private, today, memory, horizon, ...) { # Parameters (potentially) computed during shape prediction stage predicted_shape = predictShape(today, memory, horizon, ...) predicted_delta = private$.pjump(private$.data, today, memory, horizon, params, ...) # Predicted shape is aligned it on the end of current day + jump predicted_shape + tail(private$.data$getSerie(today),1) - predicted_shape[1] + predicted_delta } #' Shape prediction (centered curve) #' #' @inheritParams predictSerie predictShape = function(private, today, memory, horizon, ...) #empty default implementation: to implement in inherited classes #' Get parameters list #' #' @inheritParams initialize getParameters = function(private) private$.params