8e0f9ea55845efbe40f8d427e7f6964fbe57150f
[talweg.git] / reports / report.gj
1 -----
2 <h2>Introduction</h2>
3
4 J'ai fait quelques essais dans deux configurations pour la méthode "Neighbors"
5 (la seule dont on a parlé, incorporant désormais la "variante Bruno/Michel").
6
7 * avec simtype="mix" et raccordement "Neighbors" (p1) dans le cas "non local", i.e. on va
8 chercher des voisins n'importe où du moment qu'ils correspondent au premier élément d'un
9 couple de deux jours consécutifs sans valeurs manquantes.
10 * avec simtype="endo" + raccordement "Neighbors" (p2) puis "none" (p3, moyenne simple) + raccordement
11 "Zero" (sans ajustement) dans le cas "local" : voisins de même niveau de pollution et même saison.
12
13 J'ai systématiquement comparé à une approche naïve : la moyenne des lendemains des jours
14 "similaires" dans tout le passé (p4), ainsi qu'à la persistence (p5) -- reproduisant le jour courant ou
15 allant chercher le futur similaire une semaine avant (argument "same_day").
16
17 Ensuite j'affiche les erreurs, quelques courbes prévues/mesurées, quelques filaments puis les
18 histogrammes de quelques poids. Concernant les graphes de filaments, la moitié gauche du graphe
19 correspond aux jours similaires au jour courant, tandis que la moitié droite affiche les
20 lendemains : ce sont donc les voisinages tels qu'utilisés dans l'algorithme.
21
22 <%
23 list_titles = ['Pollution par chauffage', 'Pollution par épandage', 'Semaine non polluée']
24 list_indices = ['indices_ch', 'indices_ep', 'indices_np']
25 %>
26 -----r
27 library(talweg)
28
29 P = ${P} #instant de prévision
30 H = ${H} #horizon (en heures)
31
32 ts_data = read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",package="talweg"))
33 exo_data = read.csv(system.file("extdata","meteo_extra_noNAs.csv",package="talweg"))
34 # NOTE: 'GMT' because DST gaps are filled and multiple values merged in above dataset.
35 # Prediction from P+1 to P+H included.
36 data = getData(ts_data, exo_data, input_tz = "GMT", working_tz="GMT", predict_at=P)
37
38 indices_ch = seq(as.Date("2015-01-18"),as.Date("2015-01-24"),"days")
39 indices_ep = seq(as.Date("2015-03-15"),as.Date("2015-03-21"),"days")
40 indices_np = seq(as.Date("2015-04-26"),as.Date("2015-05-02"),"days")
41
42 % for i in range(3):
43 -----
44 <h2 style="color:blue;font-size:2em">${list_titles[i]}</h2>
45 -----r
46 p1 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", horizon=H,
47 simtype="mix", local=FALSE)
48 p2 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Neighbors", horizon=H,
49 simtype="endo", local=TRUE)
50 p3 = computeForecast(data, ${list_indices[i]}, "Neighbors", "Zero", horizon=H,
51 simtype="none", local=TRUE)
52 p4 = computeForecast(data, ${list_indices[i]}, "Average", "Zero", horizon=H)
53 p5 = computeForecast(data, ${list_indices[i]}, "Persistence", "Zero", horizon=H,
54 same_day=${'TRUE' if loop.index < 2 else 'FALSE'})
55 -----r
56 e1 = computeError(data, p_nz_mf, H)
57 e2 = computeError(data, p_nz_mfl, H)
58 e3 = computeError(data, p_a, H)
59 e4 = computeError(data, p_p, H)
60 options(repr.plot.width=9, repr.plot.height=7)
61 plotError(list(e_n, e_p, e_a, e_l), cols=c(1,2,colors()[258], 4))
62
63 # noir: Neighbors non-local (p1), bleu: Neighbors local endo (p2), mauve: Neighbors local none (p3),
64 # vert: moyenne (p4), rouge: persistence (p5)
65
66 i_np = which.min(e_n$abs$indices)
67 i_p = which.max(e_n$abs$indices)
68 -----r
69 options(repr.plot.width=9, repr.plot.height=4)
70 par(mfrow=c(1,2))
71
72 plotPredReal(data, p1, i_np); title(paste("PredReal p1 day",i_np))
73 plotPredReal(data, p1, i_p); title(paste("PredReal p1 day",i_p))
74
75 plotPredReal(data, p2, i_np); title(paste("PredReal p2 day",i_np))
76 plotPredReal(data, p2, i_p); title(paste("PredReal p2 day",i_p))
77
78 plotPredReal(data, p3, i_np); title(paste("PredReal p3 day",i_np))
79 plotPredReal(data, p3, i_p); title(paste("PredReal p3 day",i_p))
80
81 # Bleu: prévue, noir: réalisée
82 -----r
83 par(mfrow=c(1,2))
84 f_np1 = computeFilaments(data, p1, i_np, plot=TRUE); title(paste("Filaments p1 day",i_np))
85 f_p1 = computeFilaments(data, p1, i_p, plot=TRUE); title(paste("Filaments p1 day",i_p))
86
87 f_np2 = computeFilaments(data, p2, i_np, plot=TRUE); title(paste("Filaments p2 day",i_np))
88 f_p2 = computeFilaments(data, p2, i_p, plot=TRUE); title(paste("Filaments p2 day",i_p))
89 -----r
90 par(mfrow=c(1,2))
91 plotFilamentsBox(data, f_np1); title(paste("FilBox p1 day",i_np))
92 plotFilamentsBox(data, f_p1); title(paste("FilBox p1 day",i_p))
93
94 # Too few neighbors in the local case for this plot
95 -----r
96 par(mfrow=c(1,2))
97 plotRelVar(data, f_np1); title(paste("StdDev p1 day",i_np))
98 plotRelVar(data, f_p1); title(paste("StdDev p1 day",i_p))
99
100 plotRelVar(data, f_np2); title(paste("StdDev p2 day",i_np))
101 plotRelVar(data, f_p2); title(paste("StdDev p2 day",i_p))
102
103 # Variabilité globale en rouge ; sur les 60 voisins (+ lendemains) en noir
104 -----r
105 par(mfrow=c(1,2))
106 plotSimils(p1, i_np); title(paste("Weights p1 day",i_np))
107 plotSimils(p1, i_p); title(paste("Weights p1 day",i_p))
108
109 plotSimils(p2, i_np); title(paste("Weights p2 day",i_np))
110 plotSimils(p2, i_p); title(paste("Weights p2 day",i_p))
111
112 # - pollué à gauche, + pollué à droite
113 -----r
114 # Fenêtres sélectionnées dans ]0,7] / non-loc à gauche, loc à droite
115 p1$getParams(i_np)$window
116 p1$getParams(i_p)$window
117
118 p2$getParams(i_np)$window
119 p2$getParams(i_p)$window
120 % endfor