--- /dev/null
+#' Compute error
+#'
+#' 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{computeForecast}
+#' @param horizon Horizon where to compute the error (<= horizon used in \code{computeForecast})
+#'
+#' @return A list (abs,MAPE) of lists (day,indices)
+#'
+#' @export
+computeError = function(data, forecast, horizon=data$getStdHorizon())
+{
+ 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) )
+}