report
[talweg.git] / reports / Experiments.gj
index 0f102ad..36ed5c5 100644 (file)
@@ -1,8 +1,8 @@
 -----
 # Résultats numériques
 
-Cette partie montre les résultats obtenus avec des variantes de l'algorithme décrit au
-chapitre , en utilisant le package présenté à la section 3. Cet algorithme est
+Cette partie montre les résultats obtenus avec des variantes de l'algorithme décrit à la
+section 4, en utilisant le package présenté au chapitre précédent. Cet algorithme est
 systématiquement comparé à deux approches naïves :
 
  * la moyenne des lendemains des jours "similaires" dans tout le passé, c'est-à-dire
@@ -16,18 +16,18 @@ partie :
  * avec simtype="mix" et raccordement "Neighbors" dans le cas "non local", i.e. on va
 chercher des voisins n'importe où du moment qu'ils correspondent au premier élément d'un
 couple de deux jours consécutifs sans valeurs manquantes.
- * avec simtype="endo" + raccordement "Neighbors" puis simtype="none" + raccordement
-"Zero" (sans ajustement) dans le cas "local" : voisins de même niveau de pollution et
-même saison.
+ * avec simtype="endo" puis simtype="none", choisissant dans les deux cas
+raccordement==NULL (aucun ajustement après moyenne des courbes) dans le cas "local" :
+voisins de même niveau de pollution et même saison.
 
 Pour chaque période retenue $-$ chauffage, épandage, semaine non polluée $-$ les erreurs
 de prédiction sont d'abord affichées, puis quelques graphes de courbes réalisées/prévues
 (sur le jour "en moyenne le plus facile" à gauche, et "en moyenne le plus difficile" à
 droite). Ensuite plusieurs types de graphes apportant des précisions sur la nature et la
 difficulté du problème viennent compléter ces premières courbes. Concernant les graphes
-de filaments, la moitié gauche du graphe correspond aux jours similaires au jour courant,
-tandis que la moitié droite affiche les lendemains : ce sont donc les voisinages tels
-qu'utilisés dans l'algorithme.
+de filaments, la moitié droite du graphe correspond aux jours similaires au jour courant,
+tandis que la moitié gauche affiche les jours précédents : ce sont donc les voisinages
+tels qu'utilisés dans l'algorithme.
 <%
 list_titles = ['Pollution par chauffage','Pollution par épandage','Semaine non polluée']
 list_indices = ['indices_ch', 'indices_ep', 'indices_np']
@@ -35,8 +35,8 @@ list_indices = ['indices_ch', 'indices_ep', 'indices_np']
 -----r
 library(talweg)
 
-P = ${P} #instant de prévision
-H = ${H} #horizon (en heures)
+P = ${P} #première heure de prévision
+H = ${H} #dernière heure de prévision
 
 ts_data = read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",
        package="talweg"))
@@ -44,32 +44,32 @@ exo_data = read.csv(system.file("extdata","meteo_extra_noNAs.csv",
        package="talweg"))
 # NOTE: 'GMT' because DST gaps are filled and multiple values merged in
 # above dataset. Prediction from P+1 to P+H included.
-data = getData(ts_data, exo_data, input_tz = "GMT", working_tz="GMT",
-       predict_at=P)
+data = getData(ts_data, exo_data)
 
-indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days")
-indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days")
-indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days")
+indices_ch = seq(as.Date("2015-01-19"),as.Date("2015-01-25"),"days")
+indices_ep = seq(as.Date("2015-03-16"),as.Date("2015-03-22"),"days")
+indices_np = seq(as.Date("2015-04-27"),as.Date("2015-05-03"),"days")
 % for i in range(3):
 -----
 ##<h2 style="color:blue;font-size:2em">${list_titles[i]}</h2>
 ${"##"} ${list_titles[i]}
 -----r
-p1 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", horizon=H,
-       simtype="mix", local=FALSE)
-p2 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", horizon=H,
-       simtype="endo", local=TRUE)
-p3 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Zero", horizon=H,
-       simtype="none", local=TRUE)
-p4 = computeForecast(data, ${list_indices[i]}, "Average", "Zero", horizon=H)
-p5 = computeForecast(data, ${list_indices[i]}, "Persistence", "Zero", horizon=H,
-       same_day=${'TRUE' if loop.index < 2 else 'FALSE'})
+p1 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", predict_from=P,
+       horizon=H, simtype="mix", local=FALSE)
+p2 = computeForecast(data, ${list_indices[i]}, "Neighbors", NULL, predict_from=P,
+       horizon=H, simtype="endo", local=TRUE)
+p3 = computeForecast(data, ${list_indices[i]}, "Neighbors", NULL, predict_from=P,
+       horizon=H, simtype="none", local=TRUE)
+p4 = computeForecast(data, ${list_indices[i]}, "Average", "Zero", predict_from=P,
+       horizon=H)
+p5 = computeForecast(data, ${list_indices[i]}, "Persistence", "Zero", predict_from=P,
+       horizon=H, same_day=${'TRUE' if loop.index < 2 else 'FALSE'})
 -----r
-e1 = computeError(data, p1, H)
-e2 = computeError(data, p2, H)
-e3 = computeError(data, p3, H)
-e4 = computeError(data, p4, H)
-e5 = computeError(data, p5, H)
+e1 = computeError(data, p1, P, H)
+e2 = computeError(data, p2, P, H)
+e3 = computeError(data, p3, P, H)
+e4 = computeError(data, p4, P, H)
+e5 = computeError(data, p5, P, H)
 options(repr.plot.width=9, repr.plot.height=7)
 plotError(list(e1, e5, e4, e2, e3), cols=c(1,2,colors()[258],4,6))
 
@@ -77,9 +77,9 @@ plotError(list(e1, e5, e4, e2, e3), cols=c(1,2,colors()[258],4,6))
 # mauve: Neighbors local none (p3), vert: moyenne (p4),
 # rouge: persistence (p5)
 
-sum_p123 = e1$abs$indices + e2$abs$indices + e3$abs$indices
-i_np = which.min(sum_p123) #indice de (veille de) jour "facile"
-i_p = which.max(sum_p123) #indice de (veille de) jour "difficile"
+sum_p23 = e2$abs$indices + e3$abs$indices
+i_np = which.min(sum_p23) #indice de (veille de) jour "facile"
+i_p = which.max(sum_p23) #indice de (veille de) jour "difficile"
 -----
 % if i == 0:
 L'erreur absolue dépasse 20 sur 1 à 2 jours suivant les modèles (graphe en haut à
@@ -134,14 +134,14 @@ journée sur la courbes "difficile à prévoir".
 % endif
 -----r
 par(mfrow=c(1,2))
-f_np1 = computeFilaments(data, p1, i_np, plot=TRUE)
+f_np1 = computeFilaments(data, p1, i_np, predict_from=P, plot=TRUE)
        title(paste("Filaments p1 day",i_np))
-f_p1 = computeFilaments(data, p1, i_p, plot=TRUE)
+f_p1 = computeFilaments(data, p1, i_p, predict_from=P, plot=TRUE)
        title(paste("Filaments p1 day",i_p))
 
-f_np2 = computeFilaments(data, p2, i_np, plot=TRUE)
+f_np2 = computeFilaments(data, p2, i_np, predict_from=P, plot=TRUE)
        title(paste("Filaments p2 day",i_np))
-f_p2 = computeFilaments(data, p2, i_p, plot=TRUE)
+f_p2 = computeFilaments(data, p2, i_p, predict_from=P, plot=TRUE)
        title(paste("Filaments p2 day",i_p))
 -----
 % if i == 0:
@@ -161,8 +161,8 @@ de variabilité relative.
 % endif
 -----r
 par(mfrow=c(1,2))
-plotFilamentsBox(data, f_np1); title(paste("FilBox p1 day",i_np))
-plotFilamentsBox(data, f_p1); title(paste("FilBox p1 day",i_p))
+plotFilamentsBox(data, f_np1, predict_from=P); title(paste("FilBox p1 day",i_np))
+plotFilamentsBox(data, f_p1, predict_from=P); title(paste("FilBox p1 day",i_p))
 
 # En pointillés la courbe du jour courant + lendemain (à prédire)
 -----
@@ -185,11 +185,11 @@ lendemains de voisins atypiques, courbe à prévoir elle-même légèrement
 % endif
 -----r
 par(mfrow=c(1,2))
-plotRelVar(data, f_np1); title(paste("StdDev p1 day",i_np))
-plotRelVar(data, f_p1); title(paste("StdDev p1 day",i_p))
+plotRelVar(data, f_np1, predict_from=P); title(paste("StdDev p1 day",i_np))
+plotRelVar(data, f_p1, predict_from=P); title(paste("StdDev p1 day",i_p))
 
-plotRelVar(data, f_np2); title(paste("StdDev p2 day",i_np))
-plotRelVar(data, f_p2); title(paste("StdDev p2 day",i_p))
+plotRelVar(data, f_np2, predict_from=P); title(paste("StdDev p2 day",i_np))
+plotRelVar(data, f_p2, predict_from=P); title(paste("StdDev p2 day",i_p))
 
 # Variabilité globale en rouge ; sur les voisins (+ lendemains) en noir
 -----