fix report.gj
authorBenjamin Auder <benjamin.auder@somewhere>
Fri, 14 Apr 2017 20:22:50 +0000 (22:22 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Fri, 14 Apr 2017 20:22:50 +0000 (22:22 +0200)
reports/report.gj

index 3edebca..8c8d6dc 100644 (file)
@@ -1,3 +1,4 @@
+-----
 # Package R "talweg"
 
 Le package $-$ Time-series sAmpLes forecasted With ExoGenous variables $-$ contient le
@@ -39,7 +40,7 @@ err <- computeError(data, pred, horizon=6)
 
 # Puis voir ?plotError et les autres plot dans le paragraphe 'seealso'
 -----
-## getData()
+${"##"} getData()
 
 Les arguments de cette fonction sont, dans l'ordre :
 
@@ -61,7 +62,7 @@ valeurs de 8h à 7h pour le $3^{eme}$ bloc de 24h présent dans le jeu de donné
 print(data)
 #?Data
 -----
-## computeForecast()
+${"##"} computeForecast()
 
 Les arguments de cette fonction sont, dans l'ordre :
 
@@ -83,7 +84,7 @@ séquentielle)
 print(pred)
 #?computeForecast
 -----
-## computeError()
+${"##"} computeError()
 
 Les arguments de cette fonction sont, dans l'ordre :
 
@@ -97,7 +98,7 @@ summary(err)
 summary(err$abs)
 summary(err$MAPE)
 -----
-## Graphiques
+${"##"} Graphiques
 
 Voir ?plotError : les autres fonctions graphiques sont dans la section 'seealso' :
 
@@ -105,7 +106,7 @@ Voir ?plotError : les autres fonctions graphiques sont dans la section 'seealso'
     ‘computeFilaments’, ‘plotFilamentsBox’, ‘plotRelVar’
 
 ?plotXXX, etc.
-$\clearpage$
+## $\clearpage$ How to do that?
 -----
 # Expérimentations
 
@@ -159,11 +160,10 @@ data = getData(ts_data, exo_data, input_tz = "GMT", working_tz="GMT",
 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")
-
 % for i in range(3):
 -----
-#<h2 style="color:blue;font-size:2em">${list_titles[i]}</h2>
-## ${list_titles[i]}
+##<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)
@@ -191,18 +191,18 @@ 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"
 -----
-% if i == 1
+% if i == 1:
 L'erreur absolue dépasse 20 sur 1 à 2 jours suivant les modèles (graphe en haut à
 droite). C'est au-delà de ce que l'on aimerait voir (disons +/- 5 environ). Sur cet
 exemple le modèle à voisins "contraint" (local=TRUE) utilisant des pondérations basées
 sur les similarités de forme (simtype="endo") obtient en moyenne les meilleurs résultats,
 avec un MAPE restant en général inférieur à 30% de 8h à 19h (7+1 à 7+12 : graphe en bas à
 gauche).
-% else if i == 2
+% elif i == 2:
 Il est difficile dans ce cas de déterminer une méthode meilleure que les autres : elles
 donnent toutes de plutôt mauvais résultats, avec une erreur absolue moyennée sur la
 journée dépassant presque toujours 15 (graphe en haut à droite).
-% else
+% else:
 Dans ce cas plus favorable les intensité des erreurs absolues ont clairement diminué :
 elles restent souvent en dessous de 5. En revanche le MAPE moyen reste au-delà de 20%, et
 même souvent plus de 30%. Comme dans le cas de l'épandage on constate une croissance
@@ -225,20 +225,20 @@ plotPredReal(data, p3, i_p); title(paste("PredReal p3 day",i_p))
 
 # Bleu : prévue ; noir : réalisée
 -----
-% if i == 1
+% if i == 1:
 Le jour "facile à prévoir", à gauche, se décompose en deux modes : un léger vers 10h
 (7+3), puis un beaucoup plus marqué vers 19h (7+12). Ces deux modes sont retrouvés par
 les trois variantes de l'algorithme à voisins, bien que l'amplitude soit mal prédite.
 Concernant le jour "difficile à prévoir" il y a deux pics en tout début et toute fin de
 journée (à 9h et 23h), qui ne sont pas du tout anticipés par le programme ; la grande
 amplitude de ces pics explique alors l'intensité de l'erreur observée.
-% else if i == 2
+% elif i == 2:
 Dans le cas d'un jour "facile" à prédire $-$ à gauche $-$ la forme est plus ou moins
 retrouvée, mais le niveau moyen est trop bas (courbe en bleu). Concernant le jour
 "difficile" à droite, non seulement la forme n'est pas anticipée mais surtout le niveau
 prédit est très inférieur au niveau de pollution observé. Comme on le voit ci-dessous
 cela découle d'un manque de voisins au comportement similaire.
-% else
+% else:
 La forme est raisonnablement retrouvée pour les méthodes "locales", l'autre version
 lissant trop les prédictions. Le biais reste cependant important, surtout en fin de
 journée sur le jour "difficile".
@@ -255,17 +255,17 @@ f_np2 = computeFilaments(data, p2, i_np, plot=TRUE)
 f_p2 = computeFilaments(data, p2, i_p, plot=TRUE)
        title(paste("Filaments p2 day",i_p))
 -----
-% if i == 1
+% if i == 1:
 Les voisins du jour courant (période de 24h allant de 8h à 7h le lendemain) sont affichés
 avec un trait d'autant plus sombre qu'ils sont proches. On constate dans le cas non
 contraint (en haut) une grande variabilité des lendemains, très nette sur le graphe en
 haut à droite. Ceci indique une faible corrélation entre la forme d'une courbe sur une
 période de 24h et la forme sur les 24h suivantes ; **cette observation est la source des
 difficultés rencontrées par l'algorithme sur ce jeu de données.**
-% else if i == 2
+% elif i == 2:
 Les observations sont les mêmes qu'au paragraphe précédent : trop de variabilité des
 lendemains (et même des voisins du jour courant).
-% else
+% else:
 Les graphes de filaments ont encore la même allure, avec une assez grande variabilité
 observée. Cette observation est cependant trompeuse, comme l'indique plus bas le graphe
 de variabilité relative.
@@ -277,20 +277,20 @@ plotFilamentsBox(data, f_p1); title(paste("FilBox p1 day",i_p))
 
 # En pointillés la courbe du jour courant + lendemain (à prédire)
 -----
-% if i == 1
+% if i == 1:
 Sur cette boxplot fonctionnelle (voir la fonction fboxplot() du package R "rainbow") l'on
 constate essentiellement deux choses : le lendemain d'un voisin "normal" peut se révéler
 être une courbe atypique, fort éloignée de ce que l'on souhaite prédire (courbes bleue et
 rouge à gauche) ; et, dans le cas d'une courbe à prédire atypique (à droite) la plupart
 des voisins sont trop éloignés de la forme à prédire et forcent ainsi un aplatissement de
 la prédiction.
-% else if i == 2
+% elif i == 2:
 On constate la présence d'un voisin au lendemain complètement atypique avec un pic en
 début de journée (courbe en vert à gauche), et d'un autre phénomène semblable avec la
 courbe rouge sur le graphe de droite. Ajouté au fait que le lendemain à prévoir est
 lui-même un jour "hors norme", cela montre l'impossibilité de bien prévoir une courbe en
 utilisant l'algorithme à voisins.
-% else
+% else:
 On peut réappliquer les mêmes remarques qu'auparavant sur les boxplots fonctionnels :
 lendemains de voisins atypiques, courbe à prévoir elle-même légèrement "hors norme".
 % endif
@@ -304,7 +304,7 @@ plotRelVar(data, f_p2); title(paste("StdDev p2 day",i_p))
 
 # Variabilité globale en rouge ; sur les voisins (+ lendemains) en noir
 -----
-% if i == 1
+% if i == 1:
 Ces graphes viennent confirmer l'impression visuelle après observation des filaments. En
 effet, la variabilité globale en rouge (écart-type heure par heure sur l'ensemble des
 couples "aujourd'hui/lendemain"du passé) devrait rester nettement au-dessus de la
@@ -312,11 +312,11 @@ variabilité locale, calculée respectivement sur un voisinage d'une soixantai
 (pour p1) et d'une dizaine de jours (pour p2). Or on constate que ce n'est pas du tout le
 cas sur la période "lendemain", sauf en partie pour p2 le jour 4 $-$ mais ce n'est pas
 suffisant.
-% else if i == 2
+% elif i == 2:
 Comme précédemment les variabilités locales et globales sont confondues dans les parties
 droites des graphes $-$ sauf pour la version "locale" sur le jour "facile"; mais cette
 bonne propriété n'est pas suffisante si l'on ne trouve pas les bons poids à appliquer.
-% else
+% else:
 Cette fois la situation idéale est observée : la variabilité globale est nettement
 au-dessus de la variabilité locale. Bien que cela ne suffise pas à obtenir de bonnes
 prédictions de forme, on constate au moins l'amélioration dans la prédiction du niveau.
@@ -329,17 +329,17 @@ plotSimils(p1, i_p); title(paste("Weights p1 day",i_p))
 plotSimils(p2, i_np); title(paste("Weights p2 day",i_np))
 plotSimils(p2, i_p); title(paste("Weights p2 day",i_p))
 -----
-% if i == 1
+% if i == 1:
 Les poids se concentrent près de 0 dans le cas "non local" (p1), et se répartissent assez
 uniformément dans [ 0, 0.2 ] dans le cas "local" (p2). C'est ce que l'on souhaite
 observer pour éviter d'effectuer une simple moyenne.
-% else if i == 2
+% elif i == 2:
 En comparaison avec le pragraphe précédent on retrouve le même (bon) comportement des
 poids pour la version "non locale". En revanche la fenêtre optimisée est trop grande sur
 le jour "facile" pour la méthode "locale" (voir affichage ci-dessous) : il en résulte des
 poids tous semblables autour de 0.084, l'algorithme effectue donc une moyenne simple $-$
 expliquant pourquoi les courbes mauve et bleue sont très proches sur le graphe d'erreurs.
-% else
+% else:
 Concernant les poids en revanche, deux cas a priori mauvais se cumulent :
 
  * les poids dans le cas "non local" ne sont pas assez concentrés autour de 0, menant à
@@ -358,7 +358,7 @@ p2$getParams(i_np)$window
 p2$getParams(i_p)$window
 % endfor
 -----
-## Bilan
+${"##"} Bilan
 
 Nos algorithmes à voisins ne sont pas adaptés à ce jeu de données où la forme varie
 considérablement d'un jour à l'autre. Plus généralement cette décorrélation de forme rend