X-Git-Url: https://git.auder.net/rpsls.js?a=blobdiff_plain;f=pkg%2FR%2FJ_Persistence.R;h=8298a892a94a8f38c0a4a73a807fe27e17a628d9;hb=d2ab47a744d8fb29c03a76a7ca2368dae53f9a57;hp=a85a42a88ce76089d78491eae45c2d42d9ea6e25;hpb=2057c793ad9929ed5bef8663ea28b896c84df0fc;p=talweg.git diff --git a/pkg/R/J_Persistence.R b/pkg/R/J_Persistence.R index a85a42a..8298a89 100644 --- a/pkg/R/J_Persistence.R +++ b/pkg/R/J_Persistence.R @@ -1,24 +1,34 @@ -#' Obtain jump forecast by the Persistence method +#' getPersistenceJumpPredict +#' +#' Analog of the PersistenceForecaster: predict the jump after last observed value either +#' by re-applying the last jump between similar day and its follower (if argument +#' "same_day" is TRUE), or by re-using the very last observed jump (when "same_day" = +#' FALSE). #' #' @inheritParams computeForecast #' @inheritParams getZeroJumpPredict #' -getPersistenceJumpPredict = function(data, today, memory, horizon, params, ...) +#' @aliases J_Persistence +#' +getPersistenceJumpPredict = function(data, today, memory, predict_from, + horizon, params, ...) { #return gap between end of similar day curve and first day of tomorrow (in the past) first_day = max(1, today-memory) same_day = ifelse(hasArg("same_day"), list(...)$same_day, TRUE) - index = today - ifelse(same_day,7,1) + index <- today repeat { - { - last_serie_end = tail( data$getSerie(index), 1) - last_tomorrow_begin = head( data$getSerie(index+1), 1) - index = index - ifelse(same_day,7,1) - }; - if (!is.na(last_serie_end) && !is.na(last_tomorrow_begin)) - return (last_tomorrow_begin - last_serie_end); + # If 'same_day', get the last known future of similar day + index = index - ifelse(same_day,7,1) if (index < first_day) return (NA) + gap <- + if (predict_from >= 2) + data$getSerie(index)[predict_from] - data$getSerie(index)[predict_from-1] + else + head(data$getSerie(index),1) - tail(data$getSerie(index-1),1) + if (!is.na(gap)) + return (gap) } }