name instead of year; ipynb generator debugged, with logging
[talweg.git] / pkg / R / computeError.R
diff --git a/pkg/R/computeError.R b/pkg/R/computeError.R
new file mode 100644 (file)
index 0000000..b57e607
--- /dev/null
@@ -0,0 +1,47 @@
+#' 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) )
+}