TODO: unit tests for simil days
[talweg.git] / pkg / R / J_Persistence.R
1 #' getPersistenceJumpPredict
2 #'
3 #' Analog of the PersistenceForecaster: predict the jump after last observed value either
4 #' by re-applying the last jump between similar day and its follower (if argument
5 #' "same_day" is TRUE), or by re-using the very last observed jump (when "same_day" =
6 #' FALSE).
7 #'
8 #' @inheritParams computeForecast
9 #' @inheritParams getZeroJumpPredict
10 #'
11 #' @aliases J_Persistence
12 #'
13 getPersistenceJumpPredict = function(data, today, memory, horizon, params, ...)
14 {
15 #return gap between end of similar day curve and first day of tomorrow (in the past)
16 first_day = max(1, today-memory)
17 same_day = ifelse(hasArg("same_day"), list(...)$same_day, TRUE)
18 index = today - ifelse(same_day,7,1)
19 repeat
20 {
21 {
22 last_serie_end = tail( data$getSerie(index), 1)
23 last_tomorrow_begin = head( data$getSerie(index+1), 1)
24 index = index - ifelse(same_day,7,1)
25 };
26 if (!is.na(last_serie_end) && !is.na(last_tomorrow_begin))
27 return (last_tomorrow_begin - last_serie_end);
28 if (index < first_day)
29 return (NA)
30 }
31 }