#' @title Get error #' #' @description Obtain the errors between forecast and data #' #' @param data Dataset, object of class \code{Data} output of \code{getData} #' @param forecast Forecast object, class \code{Forecast} output of \code{getForecast} #' @param horizon Horizon where to compute the error (<= horizon used in \code{getForecast}) #' #' @return A list (abs,MAPE) of lists (day,indices) #' #' @export getError = function(data, forecast, horizon) { L = forecast$getSize() mape_day = rep(0, horizon) abs_day = rep(0, horizon) mape_indices = rep(NA, L) abs_indices = rep(NA, L) nb_no_NA_data = 0 for (i in seq_len(L)) { index = forecast$getIndexInData(i) serie = data$getSerie(index+1)[1:horizon] pred = forecast$getSerie(i)[1:horizon] if (!any(is.na(serie)) && !any(is.na(pred))) { nb_no_NA_data = nb_no_NA_data + 1 mape_increment = abs(serie - pred) / serie mape_increment[is.nan(mape_increment)] = 0. # 0 / 0 mape_increment[!is.finite(mape_increment)] = 1. # >0 / 0 mape_day = mape_day + mape_increment abs_increment = abs(serie - pred) abs_day = abs_day + abs_increment mape_indices[i] = mean(mape_increment) abs_indices[i] = mean(abs_increment) } } list( "abs" = list( "day" = abs_day / nb_no_NA_data, "indices" = abs_indices), "MAPE" = list( "day" = mape_day / nb_no_NA_data, "indices" = mape_indices) ) }