refactor reports.gj, prepare also 13h report
authorBenjamin Auder <benjamin.auder@somewhere>
Tue, 18 Apr 2017 14:18:18 +0000 (16:18 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Tue, 18 Apr 2017 14:18:18 +0000 (16:18 +0200)
pkg/vignettes/talweg.html [new file with mode: 0644]
reports/Experiments.gj [new file with mode: 0644]
reports/OLD/report_OLD.gj [moved from reports/report.gj with 66% similarity]
reports/PackageR.gj [new file with mode: 0644]
reports/report_P7_H17.zip [deleted file]
reports/run.sh

diff --git a/pkg/vignettes/talweg.html b/pkg/vignettes/talweg.html
new file mode 100644 (file)
index 0000000..aa9cf1c
--- /dev/null
@@ -0,0 +1,294 @@
+<!DOCTYPE html>
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+
+<meta charset="utf-8">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="pandoc" />
+
+<meta name="viewport" content="width=device-width, initial-scale=1">
+
+<meta name="author" content="Vignette Author" />
+
+<meta name="date" content="2017-03-01" />
+
+<title>Vignette Title</title>
+
+
+
+<style type="text/css">code{white-space: pre;}</style>
+<style type="text/css">
+div.sourceCode { overflow-x: auto; }
+table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
+  margin: 0; padding: 0; vertical-align: baseline; border: none; }
+table.sourceCode { width: 100%; line-height: 100%; }
+td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
+td.sourceCode { padding-left: 5px; }
+code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
+code > span.dt { color: #902000; } /* DataType */
+code > span.dv { color: #40a070; } /* DecVal */
+code > span.bn { color: #40a070; } /* BaseN */
+code > span.fl { color: #40a070; } /* Float */
+code > span.ch { color: #4070a0; } /* Char */
+code > span.st { color: #4070a0; } /* String */
+code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
+code > span.ot { color: #007020; } /* Other */
+code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
+code > span.fu { color: #06287e; } /* Function */
+code > span.er { color: #ff0000; font-weight: bold; } /* Error */
+code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
+code > span.cn { color: #880000; } /* Constant */
+code > span.sc { color: #4070a0; } /* SpecialChar */
+code > span.vs { color: #4070a0; } /* VerbatimString */
+code > span.ss { color: #bb6688; } /* SpecialString */
+code > span.im { } /* Import */
+code > span.va { color: #19177c; } /* Variable */
+code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
+code > span.op { color: #666666; } /* Operator */
+code > span.bu { } /* BuiltIn */
+code > span.ex { } /* Extension */
+code > span.pp { color: #bc7a00; } /* Preprocessor */
+code > span.at { color: #7d9029; } /* Attribute */
+code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
+code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
+code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
+code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
+</style>
+
+
+
+<link href="data:text/css;charset=utf-8,body%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Amargin%3A%201em%20auto%3B%0Amax%2Dwidth%3A%20700px%3B%0Aoverflow%3A%20visible%3B%0Apadding%2Dleft%3A%202em%3B%0Apadding%2Dright%3A%202em%3B%0Afont%2Dfamily%3A%20%22Open%20Sans%22%2C%20%22Helvetica%20Neue%22%2C%20Helvetica%2C%20Arial%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2014px%3B%0Aline%2Dheight%3A%201%2E35%3B%0A%7D%0A%23header%20%7B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%23TOC%20%7B%0Aclear%3A%20both%3B%0Amargin%3A%200%200%2010px%2010px%3B%0Apadding%3A%204px%3B%0Awidth%3A%20400px%3B%0Aborder%3A%201px%20solid%20%23CCCCCC%3B%0Aborder%2Dradius%3A%205px%3B%0Abackground%2Dcolor%3A%20%23f6f6f6%3B%0Afont%2Dsize%3A%2013px%3B%0Aline%2Dheight%3A%201%2E3%3B%0A%7D%0A%23TOC%20%2Etoctitle%20%7B%0Afont%2Dweight%3A%20bold%3B%0Afont%2Dsize%3A%2015px%3B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%23TOC%20ul%20%7B%0Apadding%2Dleft%3A%2040px%3B%0Amargin%2Dleft%3A%20%2D1%2E5em%3B%0Amargin%2Dtop%3A%205px%3B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%23TOC%20ul%20ul%20%7B%0Amargin%2Dleft%3A%20%2D2em%3B%0A%7D%0A%23TOC%20li%20%7B%0Aline%2Dheight%3A%2016px%3B%0A%7D%0Atable%20%7B%0Amargin%3A%201em%20auto%3B%0Aborder%2Dwidth%3A%201px%3B%0Aborder%2Dcolor%3A%20%23DDDDDD%3B%0Aborder%2Dstyle%3A%20outset%3B%0Aborder%2Dcollapse%3A%20collapse%3B%0A%7D%0Atable%20th%20%7B%0Aborder%2Dwidth%3A%202px%3B%0Apadding%3A%205px%3B%0Aborder%2Dstyle%3A%20inset%3B%0A%7D%0Atable%20td%20%7B%0Aborder%2Dwidth%3A%201px%3B%0Aborder%2Dstyle%3A%20inset%3B%0Aline%2Dheight%3A%2018px%3B%0Apadding%3A%205px%205px%3B%0A%7D%0Atable%2C%20table%20th%2C%20table%20td%20%7B%0Aborder%2Dleft%2Dstyle%3A%20none%3B%0Aborder%2Dright%2Dstyle%3A%20none%3B%0A%7D%0Atable%20thead%2C%20table%20tr%2Eeven%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0A%7D%0Ap%20%7B%0Amargin%3A%200%2E5em%200%3B%0A%7D%0Ablockquote%20%7B%0Abackground%2Dcolor%3A%20%23f6f6f6%3B%0Apadding%3A%200%2E25em%200%2E75em%3B%0A%7D%0Ahr%20%7B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%3A%20none%3B%0Aborder%2Dtop%3A%201px%20solid%20%23777%3B%0Amargin%3A%2028px%200%3B%0A%7D%0Adl%20%7B%0Amargin%2Dleft%3A%200%3B%0A%7D%0Adl%20dd%20%7B%0Amargin%2Dbottom%3A%2013px%3B%0Amargin%2Dleft%3A%2013px%3B%0A%7D%0Adl%20dt%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Aul%20%7B%0Amargin%2Dtop%3A%200%3B%0A%7D%0Aul%20li%20%7B%0Alist%2Dstyle%3A%20circle%20outside%3B%0A%7D%0Aul%20ul%20%7B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Apre%2C%20code%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0Aborder%2Dradius%3A%203px%3B%0Acolor%3A%20%23333%3B%0Awhite%2Dspace%3A%20pre%2Dwrap%3B%20%0A%7D%0Apre%20%7B%0Aborder%2Dradius%3A%203px%3B%0Amargin%3A%205px%200px%2010px%200px%3B%0Apadding%3A%2010px%3B%0A%7D%0Apre%3Anot%28%5Bclass%5D%29%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0A%7D%0Acode%20%7B%0Afont%2Dfamily%3A%20Consolas%2C%20Monaco%2C%20%27Courier%20New%27%2C%20monospace%3B%0Afont%2Dsize%3A%2085%25%3B%0A%7D%0Ap%20%3E%20code%2C%20li%20%3E%20code%20%7B%0Apadding%3A%202px%200px%3B%0A%7D%0Adiv%2Efigure%20%7B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Aimg%20%7B%0Abackground%2Dcolor%3A%20%23FFFFFF%3B%0Apadding%3A%202px%3B%0Aborder%3A%201px%20solid%20%23DDDDDD%3B%0Aborder%2Dradius%3A%203px%3B%0Aborder%3A%201px%20solid%20%23CCCCCC%3B%0Amargin%3A%200%205px%3B%0A%7D%0Ah1%20%7B%0Amargin%2Dtop%3A%200%3B%0Afont%2Dsize%3A%2035px%3B%0Aline%2Dheight%3A%2040px%3B%0A%7D%0Ah2%20%7B%0Aborder%2Dbottom%3A%204px%20solid%20%23f7f7f7%3B%0Apadding%2Dtop%3A%2010px%3B%0Apadding%2Dbottom%3A%202px%3B%0Afont%2Dsize%3A%20145%25%3B%0A%7D%0Ah3%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23f7f7f7%3B%0Apadding%2Dtop%3A%2010px%3B%0Afont%2Dsize%3A%20120%25%3B%0A%7D%0Ah4%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23f7f7f7%3B%0Amargin%2Dleft%3A%208px%3B%0Afont%2Dsize%3A%20105%25%3B%0A%7D%0Ah5%2C%20h6%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Afont%2Dsize%3A%20105%25%3B%0A%7D%0Aa%20%7B%0Acolor%3A%20%230033dd%3B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Aa%3Ahover%20%7B%0Acolor%3A%20%236666ff%3B%20%7D%0Aa%3Avisited%20%7B%0Acolor%3A%20%23800080%3B%20%7D%0Aa%3Avisited%3Ahover%20%7B%0Acolor%3A%20%23BB00BB%3B%20%7D%0Aa%5Bhref%5E%3D%22http%3A%22%5D%20%7B%0Atext%2Ddecoration%3A%20underline%3B%20%7D%0Aa%5Bhref%5E%3D%22https%3A%22%5D%20%7B%0Atext%2Ddecoration%3A%20underline%3B%20%7D%0A%0Acode%20%3E%20span%2Ekw%20%7B%20color%3A%20%23555%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%0Acode%20%3E%20span%2Edt%20%7B%20color%3A%20%23902000%3B%20%7D%20%0Acode%20%3E%20span%2Edv%20%7B%20color%3A%20%2340a070%3B%20%7D%20%0Acode%20%3E%20span%2Ebn%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Efl%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Ech%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Est%20%7B%20color%3A%20%23d14%3B%20%7D%20%0Acode%20%3E%20span%2Eco%20%7B%20color%3A%20%23888888%3B%20font%2Dstyle%3A%20italic%3B%20%7D%20%0Acode%20%3E%20span%2Eot%20%7B%20color%3A%20%23007020%3B%20%7D%20%0Acode%20%3E%20span%2Eal%20%7B%20color%3A%20%23ff0000%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%0Acode%20%3E%20span%2Efu%20%7B%20color%3A%20%23900%3B%20font%2Dweight%3A%20bold%3B%20%7D%20%20code%20%3E%20span%2Eer%20%7B%20color%3A%20%23a61717%3B%20background%2Dcolor%3A%20%23e3d2d2%3B%20%7D%20%0A" rel="stylesheet" type="text/css" />
+
+</head>
+
+<body>
+
+
+
+
+<h1 class="title toc-ignore">Vignette Title</h1>
+<h4 class="author"><em>Vignette Author</em></h4>
+<h4 class="date"><em>2017-03-01</em></h4>
+
+
+
+<p>Vignettes are long form documentation commonly included in packages. Because they are part of the distribution of the package, they need to be as compact as possible. The <code>html_vignette</code> output type provides a custom style sheet (and tweaks some options) to ensure that the resulting html is as small as possible. The <code>html_vignette</code> format:</p>
+<ul>
+<li>Never uses retina figures</li>
+<li>Has a smaller default figure size</li>
+<li>Uses a custom CSS stylesheet instead of the default Twitter Bootstrap style</li>
+</ul>
+<div id="vignette-info" class="section level2">
+<h2>Vignette Info</h2>
+<p>Note the various macros within the <code>vignette</code> section of the metadata block above. These are required in order to instruct R how to build the vignette. Note that you should change the <code>title</code> field and the <code>\VignetteIndexEntry</code> to match the title of your vignette.</p>
+</div>
+<div id="styles" class="section level2">
+<h2>Styles</h2>
+<p>The <code>html_vignette</code> template includes a basic CSS theme. To override this theme you can specify your own CSS in the document metadata as follows:</p>
+<pre><code>output: 
+  rmarkdown::html_vignette:
+    css: mystyles.css</code></pre>
+</div>
+<div id="figures" class="section level2">
+<h2>Figures</h2>
+<p>The figure sizes have been customised so that you can easily put two images side-by-side.</p>
+<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plot</span>(<span class="dv">1</span><span class="op">:</span><span class="dv">10</span>)
+<span class="kw">plot</span>(<span class="dv">10</span><span class="op">:</span><span class="dv">1</span>)</code></pre></div>
+<p><img src="data:image/png;base64,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" /><img src="data:image/png;base64,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" /></p>
+<p>You can enable figure captions by <code>fig_caption: yes</code> in YAML:</p>
+<pre><code>output:
+  rmarkdown::html_vignette:
+    fig_caption: yes</code></pre>
+<p>Then you can use the chunk option <code>fig.cap = &quot;Your figure caption.&quot;</code> in <strong>knitr</strong>.</p>
+</div>
+<div id="more-examples" class="section level2">
+<h2>More Examples</h2>
+<p>You can write math expressions, e.g. <span class="math inline">\(Y = X\beta + \epsilon\)</span>, footnotes<a href="#fn1" class="footnoteRef" id="fnref1"><sup>1</sup></a>, and tables, e.g. using <code>knitr::kable()</code>.</p>
+<table>
+<thead>
+<tr class="header">
+<th></th>
+<th align="right">mpg</th>
+<th align="right">cyl</th>
+<th align="right">disp</th>
+<th align="right">hp</th>
+<th align="right">drat</th>
+<th align="right">wt</th>
+<th align="right">qsec</th>
+<th align="right">vs</th>
+<th align="right">am</th>
+<th align="right">gear</th>
+<th align="right">carb</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Mazda RX4</td>
+<td align="right">21.0</td>
+<td align="right">6</td>
+<td align="right">160.0</td>
+<td align="right">110</td>
+<td align="right">3.90</td>
+<td align="right">2.620</td>
+<td align="right">16.46</td>
+<td align="right">0</td>
+<td align="right">1</td>
+<td align="right">4</td>
+<td align="right">4</td>
+</tr>
+<tr class="even">
+<td>Mazda RX4 Wag</td>
+<td align="right">21.0</td>
+<td align="right">6</td>
+<td align="right">160.0</td>
+<td align="right">110</td>
+<td align="right">3.90</td>
+<td align="right">2.875</td>
+<td align="right">17.02</td>
+<td align="right">0</td>
+<td align="right">1</td>
+<td align="right">4</td>
+<td align="right">4</td>
+</tr>
+<tr class="odd">
+<td>Datsun 710</td>
+<td align="right">22.8</td>
+<td align="right">4</td>
+<td align="right">108.0</td>
+<td align="right">93</td>
+<td align="right">3.85</td>
+<td align="right">2.320</td>
+<td align="right">18.61</td>
+<td align="right">1</td>
+<td align="right">1</td>
+<td align="right">4</td>
+<td align="right">1</td>
+</tr>
+<tr class="even">
+<td>Hornet 4 Drive</td>
+<td align="right">21.4</td>
+<td align="right">6</td>
+<td align="right">258.0</td>
+<td align="right">110</td>
+<td align="right">3.08</td>
+<td align="right">3.215</td>
+<td align="right">19.44</td>
+<td align="right">1</td>
+<td align="right">0</td>
+<td align="right">3</td>
+<td align="right">1</td>
+</tr>
+<tr class="odd">
+<td>Hornet Sportabout</td>
+<td align="right">18.7</td>
+<td align="right">8</td>
+<td align="right">360.0</td>
+<td align="right">175</td>
+<td align="right">3.15</td>
+<td align="right">3.440</td>
+<td align="right">17.02</td>
+<td align="right">0</td>
+<td align="right">0</td>
+<td align="right">3</td>
+<td align="right">2</td>
+</tr>
+<tr class="even">
+<td>Valiant</td>
+<td align="right">18.1</td>
+<td align="right">6</td>
+<td align="right">225.0</td>
+<td align="right">105</td>
+<td align="right">2.76</td>
+<td align="right">3.460</td>
+<td align="right">20.22</td>
+<td align="right">1</td>
+<td align="right">0</td>
+<td align="right">3</td>
+<td align="right">1</td>
+</tr>
+<tr class="odd">
+<td>Duster 360</td>
+<td align="right">14.3</td>
+<td align="right">8</td>
+<td align="right">360.0</td>
+<td align="right">245</td>
+<td align="right">3.21</td>
+<td align="right">3.570</td>
+<td align="right">15.84</td>
+<td align="right">0</td>
+<td align="right">0</td>
+<td align="right">3</td>
+<td align="right">4</td>
+</tr>
+<tr class="even">
+<td>Merc 240D</td>
+<td align="right">24.4</td>
+<td align="right">4</td>
+<td align="right">146.7</td>
+<td align="right">62</td>
+<td align="right">3.69</td>
+<td align="right">3.190</td>
+<td align="right">20.00</td>
+<td align="right">1</td>
+<td align="right">0</td>
+<td align="right">4</td>
+<td align="right">2</td>
+</tr>
+<tr class="odd">
+<td>Merc 230</td>
+<td align="right">22.8</td>
+<td align="right">4</td>
+<td align="right">140.8</td>
+<td align="right">95</td>
+<td align="right">3.92</td>
+<td align="right">3.150</td>
+<td align="right">22.90</td>
+<td align="right">1</td>
+<td align="right">0</td>
+<td align="right">4</td>
+<td align="right">2</td>
+</tr>
+<tr class="even">
+<td>Merc 280</td>
+<td align="right">19.2</td>
+<td align="right">6</td>
+<td align="right">167.6</td>
+<td align="right">123</td>
+<td align="right">3.92</td>
+<td align="right">3.440</td>
+<td align="right">18.30</td>
+<td align="right">1</td>
+<td align="right">0</td>
+<td align="right">4</td>
+<td align="right">4</td>
+</tr>
+</tbody>
+</table>
+<p>Also a quote using <code>&gt;</code>:</p>
+<blockquote>
+<p>“He who gives up [code] safety for [code] speed deserves neither.” (<a href="https://twitter.com/hadleywickham/status/504368538874703872">via</a>)</p>
+</blockquote>
+</div>
+<div class="footnotes">
+<hr />
+<ol>
+<li id="fn1"><p>A footnote here.<a href="#fnref1">↩</a></p></li>
+</ol>
+</div>
+
+
+
+<!-- dynamically load mathjax for compatibility with self-contained -->
+<script>
+  (function () {
+    var script = document.createElement("script");
+    script.type = "text/javascript";
+    script.src  = "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
+    document.getElementsByTagName("head")[0].appendChild(script);
+  })();
+</script>
+
+</body>
+</html>
diff --git a/reports/Experiments.gj b/reports/Experiments.gj
new file mode 100644 (file)
index 0000000..0f102ad
--- /dev/null
@@ -0,0 +1,255 @@
+-----
+# 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
+systématiquement comparé à deux approches naïves :
+
+ * la moyenne des lendemains des jours "similaires" dans tout le passé, c'est-à-dire
+prédiction = moyenne de tous les mardis passés si le jour courant est un lundi.
+ * la persistence, reproduisant le jour courant ou allant chercher le lendemain de la
+dernière journée "similaire" (même principe que ci-dessus ; argument "same\_day").
+
+Concernant l'algorithme principal à voisins, trois variantes sont étudiées dans cette
+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.
+
+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.
+<%
+list_titles = ['Pollution par chauffage','Pollution par épandage','Semaine non polluée']
+list_indices = ['indices_ch', 'indices_ep', 'indices_np']
+%>
+-----r
+library(talweg)
+
+P = ${P} #instant de prévision
+H = ${H} #horizon (en heures)
+
+ts_data = read.csv(system.file("extdata","pm10_mesures_H_loc_report.csv",
+       package="talweg"))
+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)
+
+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]}
+-----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'})
+-----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)
+options(repr.plot.width=9, repr.plot.height=7)
+plotError(list(e1, e5, e4, e2, e3), cols=c(1,2,colors()[258],4,6))
+
+# noir: Neighbors non-local (p1), bleu: Neighbors local endo (p2),
+# 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"
+-----
+% if i == 0:
+L'erreur absolue dépasse 20 sur 1 à 2 jours suivant les modèles (graphe en haut à
+droite). 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).
+% elif i == 1:
+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:
+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
+globale de la courbe journalière d'erreur absolue moyenne (en haut à gauche) ; ceci peut
+être dû au fait que l'on ajuste le niveau du jour à prédire en le recollant sur la
+dernière valeur observée.
+% endif
+-----r
+options(repr.plot.width=9, repr.plot.height=4)
+par(mfrow=c(1,2))
+
+plotPredReal(data, p1, i_np); title(paste("PredReal p1 day",i_np))
+plotPredReal(data, p1, i_p); title(paste("PredReal p1 day",i_p))
+
+plotPredReal(data, p2, i_np); title(paste("PredReal p2 day",i_np))
+plotPredReal(data, p2, i_p); title(paste("PredReal p2 day",i_p))
+
+plotPredReal(data, p3, i_np); title(paste("PredReal p3 day",i_np))
+plotPredReal(data, p3, i_p); title(paste("PredReal p3 day",i_p))
+
+# Bleu : prévue ; noir : réalisée
+-----
+% if i == 0:
+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" (à droite) 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 les méthodes ;
+la grande amplitude de ces pics explique alors l'intensité de l'erreur observée.
+% elif i == 1:
+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:
+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 la courbes "difficile à prévoir".
+% endif
+-----r
+par(mfrow=c(1,2))
+f_np1 = computeFilaments(data, p1, i_np, plot=TRUE)
+       title(paste("Filaments p1 day",i_np))
+f_p1 = computeFilaments(data, p1, i_p, plot=TRUE)
+       title(paste("Filaments p1 day",i_p))
+
+f_np2 = computeFilaments(data, p2, i_np, plot=TRUE)
+       title(paste("Filaments p2 day",i_np))
+f_p2 = computeFilaments(data, p2, i_p, plot=TRUE)
+       title(paste("Filaments p2 day",i_p))
+-----
+% if i == 0:
+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.**
+% elif i == 1:
+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:
+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.
+% 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))
+
+# En pointillés la courbe du jour courant + lendemain (à prédire)
+-----
+% if i == 0:
+Sur cette boxplot fonctionnelle (voir la fonction fboxplot() du package R "rainbow") 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.
+% elif i == 1:
+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:
+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
+-----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_np2); title(paste("StdDev p2 day",i_np))
+plotRelVar(data, f_p2); title(paste("StdDev p2 day",i_p))
+
+# Variabilité globale en rouge ; sur les voisins (+ lendemains) en noir
+-----
+% if i == 0:
+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
+variabilité locale, calculée respectivement sur un voisinage d'une soixantaine de jours
+(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.
+% elif i == 1:
+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:
+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.
+% endif
+-----r
+par(mfrow=c(1,2))
+plotSimils(p1, i_np); title(paste("Weights p1 day",i_np))
+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 == 0:
+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.
+% elif i == 1:
+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:
+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 à
+un lissage trop fort $-$ comme observé sur les graphes des courbes réalisées/prévues ;
+ * les poids dans le cas "local" sont trop semblables (à cause de la trop grande fenêtre
+optimisée par validation croisée, cf. ci-dessous), résultant encore en une moyenne simple
+$-$ mais sur moins de jours, plus proches du jour courant.
+% endif
+-----r
+# Fenêtres sélectionnées dans ]0,7] :
+# "non-local" 2 premières lignes, "local" ensuite
+p1$getParams(i_np)$window
+p1$getParams(i_p)$window
+
+p2$getParams(i_np)$window
+p2$getParams(i_p)$window
+% endfor
+-----
+${"##"} 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. Toutefois, un espoir reste permis par exemple en
+aggrégeant les courbes spatialement (sur plusieurs stations situées dans la même
+agglomération ou dans une même zone).
similarity index 66%
rename from reports/report.gj
rename to reports/OLD/report_OLD.gj
index e499ece..b8b9233 100644 (file)
 -----
 -----
-# Package R "talweg"
+# Résultats numériques
 
 
-Le package $-$ Time-series sAmpLes forecasted With ExoGenous variables $-$ contient le
-code permettant de (re)lancer les expériences numériques décrites dans cette partie et la
-suivante. Les fonctions principales sont respectivement
-
- * **getData()** pour construire un objet R contenant les données à partir de fichiers
-CSV (extraits de bases de données). Le format choisi en R est une classe R6 (du package
-du même nom) exposant en particulier les méthodes *getSerie(i)* et *getExo(i)* qui
-renvoient respectivement la $i^{eme}$ série de 24h et les variables exogènes (mesurées)
-correspondantes. Voir ?Data pour plus d'information, une fois le package chargé.
- * **computeForecast()** pour calculer des prédictions sur une certaine plage temporelle
-contenue dans *data <- getData(...)*
- * **computeError()** pour évaluer les erreurs commises par différentes méthodes.
-
-Le package contient en outre diverses fonctions graphiques *plotXXX()*, utilisées dans la
-partie suivante.
------r
-# Chargement de la librairie (après compilation, "R CMD INSTALL .")
-library(talweg)
-
-# Acquisition des données (depuis les fichiers CSV)
-ts_data <- read.csv(system.file("extdata","pm10_mesures_H_loc.csv",
-       package="talweg"))
-exo_data <- read.csv(system.file("extdata","meteo_extra_noNAs.csv",
-       package="talweg"))
-data <- getData(ts_data, exo_data, input_tz="GMT",
-       date_format="%d/%m/%Y %H:%M", working_tz="GMT",
-       predict_at=7, limit=120)
-# Plus de détails à la section 1 ci-après.
-
-# Prédiction de 10 courbes (jours 102 à 111)
-pred <- computeForecast(data, 101:110, "Persistence", "Zero", memory=50,
-       horizon=12, ncores=1)
-# Plus de détails à la section 2 ci-après.
-
-# Calcul des erreurs (sur un horizon arbitraire <= horizon de prédiction)
-err <- computeError(data, pred, horizon=6)
-# Plus de détails à la section 3 ci-après.
-
-# Puis voir ?plotError et les autres plot dans le paragraphe 'seealso'
------
-${"##"} getData()
-
-Les arguments de cette fonction sont, dans l'ordre :
-
- 1. **ts_data** : séries temporelles (fichier CSV avec entête ou data.frame) ; la
-première colonne contient les heures, la seconde les valeurs.
- 2. **exo_data** : variables exogènes (fichier CSV avec entête ou data.frame) ; la
-première colonne contient les jours, les $m$ suivantes les variables mesurées pour ce
-jour, et les $m$ dernières les variables prédites pour ce même jour. Dans notre cas $m=4$
-: pression, température, gradient de température, vitesse du vent.
- 3. **input_tz** : zone horaire pour ts_data (défaut : "GMT").
- 4. **date_format** : format des heures dans ts_data (défaut : "%d/%m/%Y %H:%M", format
-du fichier transmis par Michel).
- 5. **working_tz** : zone horaire dans laquelle on souhaite travailler avec les données
-(défaut : "GMT").
- 6. **predict_at** : heure à laquelle s'effectue la prévision $-$ et donc dernière heure
-d'un bloc de 24h, relativement à working_tz. data`$`getSerie(3) renvoit ainsi les 24
-valeurs de 8h à 7h pour le $3^{eme}$ bloc de 24h présent dans le jeu de données.
------r
-print(data)
-#?Data
------
-${"##"} computeForecast()
-
-Les arguments de cette fonction sont, dans l'ordre :
-
- 1. **data** : le jeu de données renvoyé par getData()
- 2. **indices** : l'ensemble de jours dont on veut prévoir les "lendemains" (prochains
-blocs de 24h) ; peut être donnée sous forme d'un vecteur de dates ou d'entiers
-(correspondants aux numéros des jours).
- 3. **forecaster** : le nom du prédicteur principal à utiliser ; voir ?computeForecast
- 4. **pjump** : le nom du prédicteur de saut d'une série à l'autre ; voir
-?computeForecast
- 5. **memory** : le nombre de jours à prendre en compte dans le passé pour chaque
-prévision (par défaut : Inf, c'est-à-dire tout l'historique pris en compte).
- 6. **horizon** : le nombre d'heures à prédire ; par défaut "data`$`getStdHorizon()",
-c'est-à-dire le nombre d'heures restantes à partir de l'instant de prévision + 1 jusqu'à
-minuit (17 pour predict_at=7 par exemple).
- 7. **ncores** : le nombre de processus parallèles (utiliser 1 pour une exécution
-séquentielle)
------r
-print(pred)
-#?computeForecast
------
-${"##"} computeError()
-
-Les arguments de cette fonction sont, dans l'ordre :
-
- 1. **data** : le jeu de données renvoyé par getData()
- 2. **pred** : les prédictions renvoyées par computeForecast()
- 3. **horizon** : le nombre d'heures à considérer pour le calcul de l'erreur ; doit être
-inférieur ou égal à l'horizon utilisé pour la prédiction (même valeur par défaut :
-"data`$`getStdHorizon()")
------r
-summary(err)
-summary(err$abs)
-summary(err$MAPE)
------
-${"##"} Graphiques
-
-Voir ?plotError : les autres fonctions graphiques sont dans la section 'seealso' :
-
-    ‘plotCurves’, ‘plotPredReal’, ‘plotSimils’, ‘plotFbox’,
-    ‘computeFilaments’, ‘plotFilamentsBox’, ‘plotRelVar’
-
-?plotXXX, etc.
-## $\clearpage$ How to do that?
------
-# Expérimentations
-
-Cette partie montre les résultats obtenus via des variantes de l'algorithme décrit à la
-section 2, 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 au
+chapitre 5, en utilisant le package présenté au chapitre 6.
+Les ........... options ...........
+Cet algorithme est
 systématiquement comparé à deux approches naïves :
 
 systématiquement comparé à deux approches naïves :
 
- * la moyenne des lendemains des jours "similaires" dans tout le passé, c'est-à-dire
-prédiction = moyenne de tous les mardis passé si le jour courant est un lundi par
-exemple.
+ * la moyenne des lendemains des jours de même type dans tout le passé, c'est-à-dire
+prédiction = moyenne de tous les mardis passés si le jour courant est un lundi.
  * la persistence, reproduisant le jour courant ou allant chercher le lendemain de la
  * la persistence, reproduisant le jour courant ou allant chercher le lendemain de la
-dernière journée "similaire" (même principe que ci-dessus ; argument "same\_day").
+dernière journée de même type (même principe que ci-dessus ; argument "same\_day").
 
 Concernant l'algorithme principal à voisins, trois variantes sont étudiées dans cette
 partie :
 
 Concernant l'algorithme principal à voisins, trois variantes sont étudiées dans cette
 partie :
@@ -188,13 +79,25 @@ 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)
 
 # mauve: Neighbors local none (p3), vert: moyenne (p4),
 # rouge: persistence (p5)
 
+##############TODO: expliquer "endo" "none"......etc
+## ajouter fenêtres essais dans rapport. --> dans chapitre actuel.
+## re-ajouter annexe sur ancienne méthode exo/endo/mix
+## ---------> fenetres comment elles sont optimisées
+#--------> ajouter à la fin quelques graphes montrant/comparant autres méthodes
+#chapitre résumé avec différents essais conclusions. ---> synthèse des essais réalisés,
+#avec sous-paragraphes avec conclusions H3/H17 sans surprises on améliore les choses,
+#mais il y a des situations où c'est pas mieux.
+#---------> fichier tex réinsérer synthèse de l'ensemble des essais réalisés.
+#++++++++ ajouter à 13h
+
 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 == 0:
 L'erreur absolue dépasse 20 sur 1 à 2 jours suivant les modèles (graphe en haut à
 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 == 0:
 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
+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 à
 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 à
@@ -227,11 +130,13 @@ plotPredReal(data, p3, i_p); title(paste("PredReal p3 day",i_p))
 # Bleu : prévue ; noir : réalisée
 -----
 % if i == 0:
 # Bleu : prévue ; noir : réalisée
 -----
 % if i == 0:
-Le jour "facile à prévoir", à gauche, se décompose en deux modes : un léger vers 10h
+La courbe non centrée du jour facile à prévoir (en noir),
+##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.
 (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
+Concernant le jour "difficile à prévoir" (à droite) 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 les méthodes ; la grande
 amplitude de ces pics explique alors l'intensité de l'erreur observée.
 % elif i == 1:
 Dans le cas d'un jour "facile" à prédire $-$ à gauche $-$ la forme est plus ou moins
 amplitude de ces pics explique alors l'intensité de l'erreur observée.
 % elif i == 1:
 Dans le cas d'un jour "facile" à prédire $-$ à gauche $-$ la forme est plus ou moins
@@ -276,10 +181,18 @@ 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); title(paste("FilBox p1 day",i_np))
 plotFilamentsBox(data, f_p1); title(paste("FilBox p1 day",i_p))
 
+## Questions :
+#7h VS 13h
+#est-ce que prévoir 24h ou 13 ou 3 facilite.
+#amplitude erreur raisonnable ? probleme facile difficile ?
+#place des exogènes ?
+#H = ?
+#épandage > chauffage > np
+
 # En pointillés la courbe du jour courant + lendemain (à prédire)
 -----
 % if i == 0:
 # En pointillés la courbe du jour courant + lendemain (à prédire)
 -----
 % if i == 0:
-Sur cette boxplot fonctionnelle (voir la fonction fboxplot() du package R "rainbow") l'on
+Sur cette boxplot fonctionnelle (voir la fonction fboxplot() du package R "rainbow") 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
 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
@@ -362,9 +275,9 @@ p2$getParams(i_p)$window
 ${"##"} Bilan
 
 Nos algorithmes à voisins ne sont pas adaptés à ce jeu de données où la forme varie
 ${"##"} 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
-ardue la tâche de prévision pour toute autre méthode $-$ du moins, nous ne savons pas
-comment procéder pour parvenir à une bonne précision.
-
-Toutefois, un espoir reste permis par exemple en aggréger les courbes spatialement (sur
+considérablement d'un jour à l'autre.
+Toutefois, un espoir reste permis par exemple en aggrégeant les courbes spatialement (sur
 plusieurs stations situées dans la même agglomération ou dans une même zone).
 plusieurs stations situées dans la même agglomération ou dans une même zone).
+##Plus généralement cette décorrélation de forme rend
+##ardue la tâche de prévision pour toute autre méthode $-$ du moins, nous ne savons pas
+##comment procéder pour parvenir à une bonne précision.
diff --git a/reports/PackageR.gj b/reports/PackageR.gj
new file mode 100644 (file)
index 0000000..d62dc36
--- /dev/null
@@ -0,0 +1,109 @@
+-----
+# Package R "talweg"
+
+Le package $-$ Time-series sAmpLes forecasted With ExoGenous variables $-$ contient le
+code permettant de lancer les expériences numériques décrites dans le chapitre suivant.
+Les fonctions principales sont respectivement
+
+ * **getData()** pour construire un objet R contenant les données à partir de fichiers
+CSV (extraits de bases de données). Le format choisi en R est une classe R6 (du package
+du même nom) exposant en particulier les méthodes *getSerie(i)* et *getExo(i)* qui
+renvoient respectivement la $i^{eme}$ série de 24h et les variables exogènes (mesurées)
+correspondantes. Voir ?Data pour plus d'information, une fois le package chargé.
+ * **computeForecast()** pour calculer des prédictions sur une certaine plage temporelle
+contenue dans *data <- getData(...)*
+ * **computeError()** pour évaluer les erreurs commises par différentes méthodes.
+
+Le package contient en outre diverses fonctions graphiques *plotXXX()*, utilisées dans la
+partie suivante.
+-----r
+# Chargement de la librairie (après compilation, "R CMD INSTALL .")
+library(talweg)
+
+# Acquisition des données (depuis les fichiers CSV)
+ts_data <- read.csv(system.file("extdata","pm10_mesures_H_loc.csv",
+       package="talweg"))
+exo_data <- read.csv(system.file("extdata","meteo_extra_noNAs.csv",
+       package="talweg"))
+data <- getData(ts_data, exo_data, input_tz="GMT",
+       date_format="%d/%m/%Y %H:%M", working_tz="GMT",
+       predict_at=7, limit=120)
+# Plus de détails à la section 1 ci-après.
+
+# Prédiction de 10 courbes (jours 102 à 111)
+pred <- computeForecast(data, 101:110, "Persistence", "Zero", memory=50,
+       horizon=12, ncores=1)
+# Plus de détails à la section 2 ci-après.
+
+# Calcul des erreurs (sur un horizon arbitraire <= horizon de prédiction)
+err <- computeError(data, pred, horizon=6)
+# Plus de détails à la section 3 ci-après.
+
+# Puis voir ?plotError et les autres plot dans le paragraphe 'seealso'
+-----
+${"##"} getData()
+
+Les arguments de cette fonction sont, dans l'ordre :
+
+ 1. **ts_data** : séries temporelles (fichier CSV avec entête ou data.frame) ; la
+première colonne contient les heures, la seconde les valeurs.
+ 2. **exo_data** : variables exogènes (fichier CSV avec entête ou data.frame) ; la
+première colonne contient les jours, les $m$ suivantes les variables mesurées pour ce
+jour, et les $m$ dernières les variables prédites pour ce même jour. Dans notre cas $m=4$
+: pression, température, gradient de température, vitesse du vent.
+ 3. **input_tz** : zone horaire pour ts_data (défaut : "GMT").
+ 4. **date_format** : format des heures dans ts_data (défaut : "%d/%m/%Y %H:%M", format
+du fichier transmis par Michel).
+ 5. **working_tz** : zone horaire dans laquelle on souhaite travailler avec les données
+(défaut : "GMT").
+ 6. **predict_at** : heure à laquelle s'effectue la prévision $-$ et donc dernière heure
+d'un bloc de 24h, relativement à working_tz. data`$`getSerie(3) renvoit ainsi les 24
+valeurs de 8h à 7h pour le $3^{eme}$ bloc de 24h présent dans le jeu de données.
+-----r
+print(data)
+#?Data
+-----
+${"##"} computeForecast()
+
+Les arguments de cette fonction sont, dans l'ordre :
+
+ 1. **data** : le jeu de données renvoyé par getData()
+ 2. **indices** : l'ensemble de jours dont on veut prévoir les "lendemains" (prochains
+blocs de 24h) ; peut être donnée sous forme d'un vecteur de dates ou d'entiers
+(correspondants aux numéros des jours).
+ 3. **forecaster** : le nom du prédicteur principal à utiliser ; voir ?computeForecast
+ 4. **pjump** : le nom du prédicteur de saut d'une série à l'autre ; voir
+?computeForecast
+ 5. **memory** : le nombre de jours à prendre en compte dans le passé pour chaque
+prévision (par défaut : Inf, c'est-à-dire tout l'historique pris en compte).
+ 6. **horizon** : le nombre d'heures à prédire ; par défaut "data`$`getStdHorizon()",
+c'est-à-dire le nombre d'heures restantes à partir de l'instant de prévision + 1 jusqu'à
+minuit (17 pour predict_at=7 par exemple).
+ 7. **ncores** : le nombre de processus parallèles (utiliser 1 pour une exécution
+séquentielle)
+-----r
+print(pred)
+#?computeForecast
+-----
+${"##"} computeError()
+
+Les arguments de cette fonction sont, dans l'ordre :
+
+ 1. **data** : le jeu de données renvoyé par getData()
+ 2. **pred** : les prédictions renvoyées par computeForecast()
+ 3. **horizon** : le nombre d'heures à considérer pour le calcul de l'erreur ; doit être
+inférieur ou égal à l'horizon utilisé pour la prédiction (même valeur par défaut :
+"data`$`getStdHorizon()")
+-----r
+summary(err)
+summary(err$abs)
+summary(err$MAPE)
+-----
+${"##"} Graphiques
+
+Voir ?plotError : les autres fonctions graphiques sont dans la section 'seealso' :
+
+    ‘plotCurves’, ‘plotPredReal’, ‘plotSimils’, ‘plotFbox’,
+    ‘computeFilaments’, ‘plotFilamentsBox’, ‘plotRelVar’
+
+?plotXXX, etc.
diff --git a/reports/report_P7_H17.zip b/reports/report_P7_H17.zip
deleted file mode 100644 (file)
index 65253b5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#$# git-fat 4a0e88af47c14a7cdb4d00b268517eefec453d90              2747183
index 044d00d..9d67a84 100755 (executable)
@@ -1,13 +1,11 @@
 #!/bin/sh
 #!/bin/sh
-# Usage: ./run.sh P H
+# Usage: ./run.sh file[no_suffix] P H
 
 
-./ipynb_generator.py report.gj - P=$1 H=$2
+./ipynb_generator.py $1.gj - P=$2 H=$3
 
 
-#htmlfile=report_P$1_H$2.html
-nbfile=report_P$1_H$2.ipynb
 jupyter-nbconvert \
        --ExecutePreprocessor.kernel_name='ir' \
        --ExecutePreprocessor.timeout=1800 \
 jupyter-nbconvert \
        --ExecutePreprocessor.kernel_name='ir' \
        --ExecutePreprocessor.timeout=1800 \
-       --execute report.ipynb \
-       --to notebook --output $nbfile
-#      --to html --output=$htmlfile
+       --execute $1.ipynb \
+       --to notebook --output $1.out.ipynb
+#      --to html --output=$1.html