X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=pkg%2FR%2FForecast.R;h=f1b92ce7d6f46bb0d9f59d2ff924cc0711c3c0af;hb=a66a84b56467194852f2faee15f4725759b24158;hp=57817e7ba75fb6955cafdb6bfab3e0a33ed403e5;hpb=469529710f56c790ae932b45d13fed2e34bcabf2;p=talweg.git diff --git a/pkg/R/Forecast.R b/pkg/R/Forecast.R index 57817e7..f1b92ce 100644 --- a/pkg/R/Forecast.R +++ b/pkg/R/Forecast.R @@ -1,57 +1,118 @@ -#' @title Forecast +#' Forecast #' -#' @description Forecast encapsulation +#' Forecast encapsulation #' -#' @field pred List with -#' \itemize{ +#' @docType class +#' @importFrom R6 R6Class +#' +#' @field .pred List with \itemize{ #' \item serie: forecasted serie #' \item params: corresponding list of parameters (weights, neighbors...) -#' \item index: corresponding index in data object -#' } +#' \item index: corresponding index in data object} +#' @field .dates vector of day indices where forcast occurs #' -#' @exportClass Forecast -#' @export Forecast -Forecast = setRefClass( - Class = "Forecast", - - fields = list( - pred = "list" +#' @section Methods: \describe{ +#' \item{\code{initialize(dates)}} +#' {Initialize a Forecast object with a series of date indices.} +#' \item{\code{predictSerie(today,memory,horizon,...)}} +#' {Predict a new serie of \code{horizon} values at day index \code{today} using \code{memory} +#' days in the past.} TODO: continue ####################################### +#' \item{\code{predictShape(today,memory,horizon,...)}} +#' {Predict a new shape of \code{horizon} values at day index \code{today} using \code{memory} +#' days in the past.} +#' \item{\code{getParameters()}} +#' {Return (internal) parameters.} } +Forecast = R6::R6Class("Forecast", + private = list( + .pred = list(), + .dates = c() ), - - methods = list( - initialize = function(...) - { - "Initialize empty Forecast object" - - callSuper(...) - }, - append = function(new_serie, new_params, new_index) - { - "Obtain a new pair (serie, params)" - - pred[[length(pred)+1]] <<- list("serie"=new_serie, "params"=new_params, "index"=new_index) - }, + public = list( + initialize = function(dates) + initializeForecast(self, private, dates) + , getSize = function() - { - length(pred) - }, + getSizeForecast(private) + , + append = function(new_serie, new_params, new_index) + appendForecast(private, new_serie, new_params, new_index) + , + getDates = function() + getDatesForecast(private) + , getSerie = function(index) - { - "Get serie values at specified index" - - pred[[index]]$serie - }, + getSerieForecast(private, index) + , getParams = function(index) - { - "Get params at specified index" - - pred[[index]]$params - }, + getParamsForecast(private, index) + , getIndexInData = function(index) - { - "Get (day) index in data where prediction took place" - - pred[[index]]$index - } + getIndexInDataForecast(private, index) ) ) + +#' Initialize empty Forecast object +#' +#' @param o Object of class Forecast +#' @param private List of private members in o +#' @param dates vector of dates where forecast occurs +initializeForecast = function(o, private, dates) +{ + private$.dates <- dates + invisible(o) +} + +#' Number of individual forecasts" +#' +#' @inheritParams initializeForecast +getSizeForecast = function(private) + length(private$.pred) + +#' Obtain a new pair (serie, params)" +#' +#' @inheritParams initializeForecast +#' @param new_serie Values of a new serie +#' @param new_params Associated (optimized) parameters +#' @param new_index_in_data Corresponding index in data +appendForecast = function(private, new_serie, new_params, new_index_in_data) +{ + private$.pred[[length(private$.pred)+1]] <- + list("serie"=new_serie, "params"=new_params, "index_in_data"=new_index_in_data) +} + +#' Dates where prediction occurs +#' +#' inheritParams initializeForecast +getDatesForecast = function(private) + private$.dates + +#' Serie values at specified index" +#' +#' @inheritParams initializeForecast +#' @param index Return value at this index +getSerieForecast = function(index) +{ + if (is(index,"Date")) + index = match(index, private$.dates) + private$.pred[[index]]$serie +} + +#' Params at specified index" +#' +#' @inheritParams getSerieForecast +getParamsForecast = function(index) +{ + if (is(index,"Date")) + index = match(index, private$.dates) + private$.pred[[index]]$params +} + +#' (day) Index in data where prediction took place" +#' +#' @inheritParams getSerieForecast +getIndexInDataForecast = function(index) +{ + if (is(index,"Date")) + index = match(index, private$.dates) + private$.pred[[index]]$index_in_data +}