diff --git a/M1/General Linear Models/Chapter 1/Code_Chapter1.Rmd b/M1/General Linear Models/Chapter 1/Code_Chapter1.Rmd new file mode 100644 index 0000000..7212c63 --- /dev/null +++ b/M1/General Linear Models/Chapter 1/Code_Chapter1.Rmd @@ -0,0 +1,335 @@ +--- +title: "Linear Models and Their Generalizations" +subtitle : "Code Chapter 1: Linear gaussian regression" +author: "Katia Meziani" +output: +# pdf_document: +# toc: yes +html_document: +code_folding: hide +css: ./style.css +df_print: paged +highlight: tango +number_sections: no +theme: flatly +toc: yes +toc_float: +collapsed: no + +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(warning = FALSE, message = FALSE) +``` + + + + + + + + + +# Motivations + + + **The Ozone Example** (With **Ⓡ** ) + + +This dataset (Air Breizh, Summer 2001) contains 112 observations and 13 variables. + +```{r} +library(rmarkdown) +ozone1 <- read.table("ozone1.txt", header = TRUE, sep = " ", dec = ".") +paged_table(ozone1) +``` + +Let's correct the incorrect declaration of variables: + + + +```{r} +library(dplyr) +ozone1$Date <- as.Date(as.factor(ozone1$Date), format = "%Y%m%d") +ozone1$vent <- as.factor(ozone1$vent) +ozone1$pluie <- as.factor(ozone1$pluie) +ozone1 <- ozone1 %>% mutate(across(where(is.character), as.numeric)) +ozone1 <- ozone1 %>% mutate(across(where(is.integer), as.numeric)) +str(ozone1) +``` + + + + + + + +# 1. Linear regression model + +## Simple linear model + + + + +Let's plot this line (here with **Ⓡ** ) is called the least squares line. + +```{r, out.width = "60%", fig.align = 'center', message = FALSE, warning = FALSE} +library(ggplot2) +library(plotly) +p1 <- ggplot(ozone1) + + aes(x = T12, y = maxO3) + + geom_point(col = 'red', size = 0.5) + + geom_smooth(method = "lm", se = FALSE) +ggplotly(p1) +``` + + +With **Ⓡ** , we can compute $\widehat {\boldsymbol{\beta}}=(\widehat{\beta}_0, \widehat{\beta}_1)$ + +```{r} +library(kableExtra) +mod <- lm(maxO3 ~ T12, data = ozone1) +mod$coefficients %>% kbl(col.names = "Estimation") +``` + + + + + + + + + + + +# 2. Ordinary least squares estimator (OLSE) + + + + + + + +## Declaration of the model with Under **Ⓡ** + +Let's revisit the ozone example and, for this chapter, select only the numerical regressors with **Ⓡ** + +```{r} +names(ozone1) +Ozone <- ozone1[, 2:12] +names(Ozone) +``` + + + +Under **Ⓡ** ,we can declare the linear model in two ways: either by naming the variables or by using a `.`. + +```{r} +mod <- lm(maxO3 ~ T9 + + T12 + + T15 + + Ne9 + + Ne12 + + Ne15 + + Vx9 + + Vx12 + + Vx15 + + maxO3v, data = Ozone) +mod <- lm(maxO3 ~ ., data = Ozone) +``` + +Now, let's display the estimated values $\widehat{\boldsymbol{\beta}}$ of $\boldsymbol{\beta}$. + +```{r} +coefficients(mod) +``` + + + + +# 3. Residuals analysis + + + +```{r} +summary(mod$residuals) +``` + + + + + +We can display Residual standard error with **Ⓡ** +```{r} +cat("Residual standard error:", summary(mod)$sigma, "on", summary(mod)$df[2], "degrees of freedom\n") +``` + + + + + + + + + + + +# 4. Inference in the Gaussian linear regression model + + +## Confidence intervals/regions + + + + + + + +**Ⓡ** Display the confidence interval for $\beta_j$ + + +```{r} +mod <- lm(maxO3 ~ ., data = Ozone) +cbind(mod$coefficient, confint(mod, level = 0.95)) +``` + + +**Ⓡ** Display the confidence interval for +$\sigma^2$ + + +```{r} + +n <- length(Ozone$maxO3) +p <- length(coef(mod)) +alpha <- 0.05 + +sigma2_hat <- summary(mod)$sigma^2 + +IC_sigma2 <- sigma2_hat * c((n - p) / qchisq(1 - alpha / 2, n - p), + (n - p) / qchisq(alpha / 2, n - p)) + +cat("estimation of sigma : ", sigma2_hat, "\n") +cat("Intervalle de confiance pour sigma^2 (95%) : [", IC_sigma2[1], ", ", IC_sigma2[2], "]\n") +``` + + + + + + + + + + + + + + +# 5. Hypothesis testing + +## Test: $\mathscr{H}_0:\,c^\top{\beta}=a$ + + + + +Declare our linear model and display with **Ⓡ** + +```{r} +library(kableExtra) +mod <- lm(maxO3 ~ ., data = Ozone) +summary(mod) %>% coefficients() %>% kbl() +``` + + + + +## Global Fisher test + + + + + +Under **Ⓡ** , the `summary` displays the Global Fisher test + + +```{r, eval=FALSE} +F-statistic: 32.67 on 10 and 101 DF, p-value: < 2.2e-16 +``` + + + +## Fisher test for nested models + + + + +**Ⓡ** Consider 2 nested models +$$ +\left\{\begin{array}{l} +\text{mod}_1:\, \text{maxO3=T9+Ne9+Vx9+maxO3v}+\epsilon,\\ +\text{maxO3=T9+T12+Ne9+Ne12+Vx9+Vx12+maxO3v}+\epsilon +\end{array}\right. +$$ +and display the nested Fisher test +$$ +\left\{\begin{array}{l} +\mathscr{H}_0: \, \text{mod}_1 \text{ is adequat}\\ +\mathscr{H}_1: \, \text{mod}_2 \text{ is adequat} +\end{array}\right. +$$ + +```{r} +mod_1<-lm(maxO3~T9+Ne9+Vx9+maxO3v,data=Ozone) +mod_2<-lm(maxO3~T9+T12+Ne9+Ne12+Vx9+Vx12+maxO3v,data=Ozone) + +anova(mod_1,mod_2) +``` + + + + +# 6. $R^2$-coefficient + + + + +Let display these coefficient with **Ⓡ** + +```{r} +cat("Multiple R-squared:", summary(mod)$r.squared, ", Adjusted R-squared:", summary(mod)$adj.r.squared, "\n") + +``` + + + + + + +# 7. Prediction + + +## 7.1. Fitted values + + + + +Note that with **Ⓡ** , we can display the fitted values $\widehat Y_i$ + +```{r} +haty<-predict(mod,data=Ozone) +# or equivalently +#haty<-mod$fitted.values +y<-Ozone$maxO3 +cbind.data.frame(y,haty)%>%rmarkdown::paged_table() +``` + + + + + + + + + + diff --git a/M1/General Linear Models/Chapter 1/Code_Chapter1.html b/M1/General Linear Models/Chapter 1/Code_Chapter1.html new file mode 100644 index 0000000..d2a8a38 --- /dev/null +++ b/M1/General Linear Models/Chapter 1/Code_Chapter1.html @@ -0,0 +1,4299 @@ + + + + + + + + + + + + + + +Linear Models and Their Generalizations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+true +
+ +
+

Motivations

+

The Ozone Example +(With )

+

This dataset (Air Breizh, Summer 2001) contains 112 observations and +13 variables.

+
library(rmarkdown)
+ozone1 <- read.table("ozone1.txt", header = TRUE, sep = " ", dec = ".")
+paged_table(ozone1)
+
+ +
+

Let’s correct the incorrect declaration of variables:

+
library(dplyr)
+ozone1$Date <- as.Date(as.factor(ozone1$Date), format = "%Y%m%d")
+ozone1$vent <- as.factor(ozone1$vent)
+ozone1$pluie <- as.factor(ozone1$pluie)
+ozone1 <- ozone1 %>% mutate(across(where(is.character), as.numeric))
+ozone1 <- ozone1 %>% mutate(across(where(is.integer), as.numeric))
+str(ozone1)
+
## 'data.frame':    112 obs. of  14 variables:
+##  $ Date  : Date, format: "2001-06-01" "2001-06-02" ...
+##  $ maxO3 : num  87 82 92 114 94 80 79 79 101 106 ...
+##  $ T9    : num  15.6 17 15.3 16.2 17.4 17.7 16.8 14.9 16.1 18.3 ...
+##  $ T12   : num  18.5 18.4 17.6 19.7 20.5 19.8 15.6 17.5 19.6 21.9 ...
+##  $ T15   : num  18.4 17.7 19.5 22.5 20.4 18.3 14.9 18.9 21.4 22.9 ...
+##  $ Ne9   : num  4 5 2 1 8 6 7 5 2 5 ...
+##  $ Ne12  : num  4 5 5 1 8 6 8 5 4 6 ...
+##  $ Ne15  : num  8 7 4 0 7 7 8 4 4 8 ...
+##  $ Vx9   : num  0.695 -4.33 2.954 0.985 -0.5 ...
+##  $ Vx12  : num  -1.71 -4 1.879 0.347 -2.954 ...
+##  $ Vx15  : num  -0.695 -3 0.521 -0.174 -4.33 ...
+##  $ maxO3v: num  84 87 82 92 114 94 80 99 79 101 ...
+##  $ vent  : Factor w/ 4 levels "Est","Nord","Ouest",..: 2 2 1 2 3 3 3 2 2 3 ...
+##  $ pluie : Factor w/ 2 levels "Pluie","Sec": 2 2 2 2 2 1 2 2 2 2 ...
+
+
+

1. Linear regression model

+
+

Simple linear model

+

Let’s plot this line (here with ) is called the +least squares line.

+
library(ggplot2)
+library(plotly)
+p1 <- ggplot(ozone1) +
+  aes(x = T12, y = maxO3) +
+  geom_point(col = 'red', size = 0.5) +
+  geom_smooth(method = "lm", se = FALSE)
+ggplotly(p1)
+
+ +

With , we can compute +\(\widehat +{\boldsymbol{\beta}}=(\widehat{\beta}_0, \widehat{\beta}_1)\)

+
library(kableExtra)
+mod <- lm(maxO3 ~ T12, data = ozone1)
+mod$coefficients %>% kbl(col.names = "Estimation")
+ + + + + + + + + + + + + + + + + +
+ +Estimation +
+(Intercept) + +-27.419636 +
+T12 + +5.468685 +
+
+
+
+

2. Ordinary least squares estimator (OLSE)

+
+

Declaration of the model with Under

+

Let’s revisit the ozone example and, for this chapter, select only +the numerical regressors with

+
names(ozone1)
+
##  [1] "Date"   "maxO3"  "T9"     "T12"    "T15"    "Ne9"    "Ne12"   "Ne15"  
+##  [9] "Vx9"    "Vx12"   "Vx15"   "maxO3v" "vent"   "pluie"
+
Ozone <- ozone1[, 2:12]
+names(Ozone)
+
##  [1] "maxO3"  "T9"     "T12"    "T15"    "Ne9"    "Ne12"   "Ne15"   "Vx9"   
+##  [9] "Vx12"   "Vx15"   "maxO3v"
+

Under ,we can declare +the linear model in two ways: either by naming the variables or by using +a ..

+
mod <- lm(maxO3 ~ T9 +
+  T12 +
+  T15 +
+  Ne9 +
+  Ne12 +
+  Ne15 +
+  Vx9 +
+  Vx12 +
+  Vx15 +
+  maxO3v, data = Ozone)
+mod <- lm(maxO3 ~ ., data = Ozone)
+

Now, let’s display the estimated values \(\widehat{\boldsymbol{\beta}}\) of \(\boldsymbol{\beta}\).

+
coefficients(mod)
+
## (Intercept)          T9         T12         T15         Ne9        Ne12 
+## 12.24441987 -0.01901425  2.22115189  0.55853087 -2.18909215 -0.42101517 
+##        Ne15         Vx9        Vx12        Vx15      maxO3v 
+##  0.18373097  0.94790917  0.03119824  0.41859252  0.35197646
+
+
+
+

3. Residuals analysis

+
summary(mod$residuals)
+
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
+## -53.566  -8.727  -0.403   0.000   7.599  39.458
+

We can display Residual standard error with +

+
cat("Residual standard error:", summary(mod)$sigma, "on", summary(mod)$df[2], "degrees of freedom\n")
+
## Residual standard error: 14.36002 on 101 degrees of freedom
+
+
+

4. Inference in the Gaussian linear regression model

+
+

Confidence intervals/regions

+

Display the +confidence interval for \(\beta_j\)

+
mod <- lm(maxO3 ~ ., data = Ozone)
+cbind(mod$coefficient, confint(mod, level = 0.95))
+
##                               2.5 %     97.5 %
+## (Intercept) 12.24441987 -14.4802083 38.9690481
+## T9          -0.01901425  -2.2510136  2.2129851
+## T12          2.22115189  -0.6214249  5.0637287
+## T15          0.55853087  -1.7121182  2.8291799
+## Ne9         -2.18909215  -4.0502993 -0.3278850
+## Ne12        -0.42101517  -3.1340934  2.2920630
+## Ne15         0.18373097  -1.8055357  2.1729977
+## Vx9          0.94790917  -0.8618028  2.7576211
+## Vx12         0.03119824  -2.0620871  2.1244836
+## Vx15         0.41859252  -1.3978619  2.2350470
+## maxO3v       0.35197646   0.2272237  0.4767292
+

Display the +confidence interval for \(\sigma^2\)

+
n <- length(Ozone$maxO3)
+p <- length(coef(mod))
+alpha <- 0.05
+
+sigma2_hat <- summary(mod)$sigma^2
+
+IC_sigma2 <- sigma2_hat * c((n - p) / qchisq(1 - alpha / 2, n - p),
+                            (n - p) / qchisq(alpha / 2, n - p))
+
+cat("estimation of sigma : ", sigma2_hat, "\n")
+
## estimation of sigma :  206.2102
+
cat("Intervalle de confiance pour sigma^2 (95%) : [", IC_sigma2[1], ", ", IC_sigma2[2], "]\n")
+
## Intervalle de confiance pour sigma^2 (95%) : [ 159.3518 ,  277.3877 ]
+
+
+
+

5. Hypothesis testing

+
+

Test: \(\mathscr{H}_0:\,c^\top{\beta}=a\)

+

Declare our linear model and display with +

+
library(kableExtra)
+mod <- lm(maxO3 ~ ., data = Ozone)
+summary(mod) %>% coefficients() %>% kbl()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +Estimate + +Std. Error + +t value + +Pr(>|t|) +
+(Intercept) + +12.2444199 + +13.4719013 + +0.9088858 + +0.3655741 +
+T9 + +-0.0190143 + +1.1251522 + +-0.0168993 + +0.9865503 +
+T12 + +2.2211519 + +1.4329447 + +1.5500612 + +0.1242547 +
+T15 + +0.5585309 + +1.1446356 + +0.4879552 + +0.6266392 +
+Ne9 + +-2.1890921 + +0.9382356 + +-2.3332008 + +0.0216199 +
+Ne12 + +-0.4210152 + +1.3676644 + +-0.3078352 + +0.7588417 +
+Ne15 + +0.1837310 + +1.0027906 + +0.1832197 + +0.8549930 +
+Vx9 + +0.9479092 + +0.9122769 + +1.0390586 + +0.3012586 +
+Vx12 + +0.0311982 + +1.0552264 + +0.0295654 + +0.9764720 +
+Vx15 + +0.4185925 + +0.9156758 + +0.4571405 + +0.6485518 +
+maxO3v + +0.3519765 + +0.0628879 + +5.5968846 + +0.0000002 +
+
+
+

Global Fisher test

+

Under , the +summary displays the Global Fisher test

+
F-statistic: 32.67 on 10 and 101 DF,  p-value: < 2.2e-16
+
+
+

Fisher test for nested models

+

Consider 2 nested +models \[ +\left\{\begin{array}{l} +\text{mod}_1:\, \text{maxO3=T9+Ne9+Vx9+maxO3v}+\epsilon,\\ +\text{maxO3=T9+T12+Ne9+Ne12+Vx9+Vx12+maxO3v}+\epsilon +\end{array}\right. +\] and display the nested Fisher test \[ +\left\{\begin{array}{l} +\mathscr{H}_0: \, \text{mod}_1 \text{ is adequat}\\ +\mathscr{H}_1: \, \text{mod}_2 \text{ is adequat} +\end{array}\right. +\]

+
mod_1<-lm(maxO3~T9+Ne9+Vx9+maxO3v,data=Ozone)
+mod_2<-lm(maxO3~T9+T12+Ne9+Ne12+Vx9+Vx12+maxO3v,data=Ozone)
+
+anova(mod_1,mod_2)
+
## Analysis of Variance Table
+## 
+## Model 1: maxO3 ~ T9 + Ne9 + Vx9 + maxO3v
+## Model 2: maxO3 ~ T9 + T12 + Ne9 + Ne12 + Vx9 + Vx12 + maxO3v
+##   Res.Df   RSS Df Sum of Sq      F  Pr(>F)  
+## 1    107 23263                              
+## 2    104 20914  3    2349.8 3.8951 0.01106 *
+## ---
+## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+
+
+
+

6. \(R^2\)-coefficient

+

Let display these coefficient with

+
cat("Multiple R-squared:", summary(mod)$r.squared, ", Adjusted R-squared:", summary(mod)$adj.r.squared, "\n")
+
## Multiple R-squared: 0.7638413 , Adjusted R-squared: 0.7404593
+
+
+

7. Prediction

+
+

7.1. Fitted values

+

Note that with , we can display +the fitted values \(\widehat Y_i\)

+
haty<-predict(mod,data=Ozone)
+# or equivalently
+#haty<-mod$fitted.values
+y<-Ozone$maxO3
+cbind.data.frame(y,haty)%>%rmarkdown::paged_table()
+
+ +
+
+
+ + + + +
+ + + + + + + + + + + + + + + diff --git a/M1/General Linear Models/Chapter 1/ozone1.txt b/M1/General Linear Models/Chapter 1/ozone1.txt new file mode 100644 index 0000000..d1e17e8 --- /dev/null +++ b/M1/General Linear Models/Chapter 1/ozone1.txt @@ -0,0 +1,113 @@ +"Date" "maxO3" "T9" "T12" "T15" "Ne9" "Ne12" "Ne15" "Vx9" "Vx12" "Vx15" "maxO3v" "vent" "pluie" +"20010601" 87 15.6 18.5 18.4 4 4 8 0.6946 -1.7101 -0.6946 84 "Nord" "Sec" +"20010602" 82 17 18.4 17.7 5 5 7 -4.3301 -4 -3 87 "Nord" "Sec" +"20010603" 92 15.3 17.6 19.5 2 5 4 2.9544 1.8794 0.5209 82 "Est" "Sec" +"20010604" 114 16.2 19.7 22.5 1 1 0 0.9848 0.3473 -0.1736 92 "Nord" "Sec" +"20010605" 94 17.4 20.5 20.4 8 8 7 -0.5 -2.9544 -4.3301 114 "Ouest" "Sec" +"20010606" 80 17.7 19.8 18.3 6 6 7 -5.6382 -5 -6 94 "Ouest" "Pluie" +"20010607" 79 16.8 15.6 14.9 7 8 8 -4.3301 -1.8794 -3.7588 80 "Ouest" "Sec" +"20010610" 79 14.9 17.5 18.9 5 5 4 0 -1.0419 -1.3892 99 "Nord" "Sec" +"20010611" 101 16.1 19.6 21.4 2 4 4 -0.766 -1.0261 -2.2981 79 "Nord" "Sec" +"20010612" 106 18.3 21.9 22.9 5 6 8 1.2856 -2.2981 -3.9392 101 "Ouest" "Sec" +"20010613" 101 17.3 19.3 20.2 7 7 3 -1.5 -1.5 -0.8682 106 "Nord" "Sec" +"20010614" 90 17.6 20.3 17.4 7 6 8 0.6946 -1.0419 -0.6946 101 "Sud" "Sec" +"20010615" 72 18.3 19.6 19.4 7 5 6 -0.8682 -2.7362 -6.8944 90 "Sud" "Sec" +"20010616" 70 17.1 18.2 18 7 7 7 -4.3301 -7.8785 -5.1962 72 "Ouest" "Pluie" +"20010617" 83 15.4 17.4 16.6 8 7 7 -4.3301 -2.0521 -3 70 "Nord" "Sec" +"20010618" 88 15.9 19.1 21.5 6 5 4 0.5209 -2.9544 -1.0261 83 "Ouest" "Sec" +"20010620" 145 21 24.6 26.9 0 1 1 -0.342 -1.5321 -0.684 121 "Ouest" "Sec" +"20010621" 81 16.2 22.4 23.4 8 3 1 0 0.3473 -2.5712 145 "Nord" "Sec" +"20010622" 121 19.7 24.2 26.9 2 1 0 1.5321 1.7321 2 81 "Est" "Sec" +"20010623" 146 23.6 28.6 28.4 1 1 2 1 -1.9284 -1.2155 121 "Sud" "Sec" +"20010624" 121 20.4 25.2 27.7 1 0 0 0 -0.5209 1.0261 146 "Nord" "Sec" +"20010625" 146 27 32.7 33.7 0 0 0 2.9544 6.5778 4.3301 121 "Est" "Sec" +"20010626" 108 24 23.5 25.1 4 4 0 -2.5712 -3.8567 -4.6985 146 "Sud" "Sec" +"20010627" 83 19.7 22.9 24.8 7 6 6 -2.5981 -3.9392 -4.924 108 "Ouest" "Sec" +"20010628" 57 20.1 22.4 22.8 7 6 7 -5.6382 -3.8302 -4.5963 83 "Ouest" "Pluie" +"20010629" 81 19.6 25.1 27.2 3 4 4 -1.9284 -2.5712 -4.3301 57 "Sud" "Sec" +"20010630" 67 19.5 23.4 23.7 5 5 4 -1.5321 -3.0642 -0.8682 81 "Ouest" "Sec" +"20010701" 70 18.8 22.7 24.9 5 2 1 0.684 0 1.3681 67 "Nord" "Sec" +"20010702" 106 24.1 28.4 30.1 0 0 1 2.8191 3.9392 3.4641 70 "Est" "Sec" +"20010703" 139 26.6 30.1 31.9 0 1 4 1.8794 2 1.3681 106 "Sud" "Sec" +"20010704" 79 19.5 18.8 17.8 8 8 8 0.6946 -0.866 -1.0261 139 "Ouest" "Sec" +"20010705" 93 16.8 18.2 22 8 8 6 0 0 1.2856 79 "Sud" "Pluie" +"20010706" 97 20.8 23.7 25 2 3 4 0 1.7101 -2.7362 93 "Nord" "Sec" +"20010707" 113 17.5 18.2 22.7 8 8 5 -3.7588 -3.9392 -4.6985 97 "Ouest" "Pluie" +"20010708" 72 18.1 21.2 23.9 7 6 4 -2.5981 -3.9392 -3.7588 113 "Ouest" "Pluie" +"20010709" 88 19.2 22 25.2 4 7 4 -1.9696 -3.0642 -4 72 "Ouest" "Sec" +"20010710" 77 19.4 20.7 22.5 7 8 7 -6.5778 -5.6382 -9 88 "Ouest" "Sec" +"20010711" 71 19.2 21 22.4 6 4 6 -7.8785 -6.8937 -6.8937 77 "Ouest" "Sec" +"20010712" 56 13.8 17.3 18.5 8 8 6 1.5 -3.8302 -2.0521 71 "Ouest" "Pluie" +"20010713" 45 14.3 14.5 15.2 8 8 8 0.684 4 2.9544 56 "Est" "Pluie" +"20010714" 67 15.6 18.6 20.3 5 7 5 -3.2139 -3.7588 -4 45 "Ouest" "Pluie" +"20010715" 67 16.9 19.1 19.5 5 5 6 -2.2981 -3.7588 0 67 "Ouest" "Pluie" +"20010716" 84 17.4 20.4 21.4 3 4 6 0 0.3473 -2.5981 67 "Sud" "Sec" +"20010717" 63 15.1 20.5 20.6 8 6 6 2 -5.3623 -6.1284 84 "Ouest" "Pluie" +"20010718" 69 15.1 15.6 15.9 8 8 8 -4.5963 -3.8302 -4.3301 63 "Ouest" "Pluie" +"20010719" 92 16.7 19.1 19.3 7 6 4 -2.0521 -4.4995 -2.7362 69 "Nord" "Sec" +"20010720" 88 16.9 20.3 20.7 6 6 5 -2.8191 -3.4641 -3 92 "Ouest" "Pluie" +"20010721" 66 18 21.6 23.3 8 6 5 -3 -3.5 -3.2139 88 "Sud" "Sec" +"20010722" 72 18.6 21.9 23.6 4 7 6 0.866 -1.9696 -1.0261 66 "Ouest" "Sec" +"20010723" 81 18.8 22.5 23.9 6 3 2 0.5209 -1 -2 72 "Nord" "Sec" +"20010724" 83 19 22.5 24.1 2 4 6 0 -1.0261 0.5209 81 "Nord" "Sec" +"20010725" 149 19.9 26.9 29 3 4 3 1 -0.9397 -0.6428 83 "Ouest" "Sec" +"20010726" 153 23.8 27.7 29.4 1 1 4 0.9397 1.5 0 149 "Nord" "Sec" +"20010727" 159 24 28.3 26.5 2 2 7 -0.342 1.2856 -2 153 "Nord" "Sec" +"20010728" 149 23.3 27.6 28.8 4 6 3 0.866 -1.5321 -0.1736 159 "Ouest" "Sec" +"20010729" 160 25 29.6 31.1 0 3 5 1.5321 -0.684 2.8191 149 "Sud" "Sec" +"20010730" 156 24.9 30.5 32.2 0 1 4 -0.5 -1.8794 -1.2856 160 "Ouest" "Sec" +"20010731" 84 20.5 26.3 27.8 1 0 2 -1.3681 -0.6946 0 156 "Nord" "Sec" +"20010801" 126 25.3 29.5 31.2 1 4 4 3 3.7588 5 84 "Est" "Sec" +"20010802" 116 21.3 23.8 22.1 7 7 8 0 -2.3941 -1.3892 126 "Sud" "Pluie" +"20010803" 77 20 18.2 23.6 5 7 6 -3.4641 -2.5981 -3.7588 116 "Ouest" "Pluie" +"20010804" 63 18.7 20.6 20.3 6 7 7 -5 -4.924 -5.6382 77 "Ouest" "Pluie" +"20010805" 54 18.6 18.7 17.8 8 8 8 -4.6985 -2.5 -0.8682 63 "Sud" "Pluie" +"20010806" 65 19.2 23 22.7 8 7 7 -3.8302 -4.924 -5.6382 54 "Ouest" "Sec" +"20010807" 72 19.9 21.6 20.4 7 7 8 -3 -4.5963 -5.1962 65 "Ouest" "Pluie" +"20010808" 60 18.7 21.4 21.7 7 7 7 -5.6382 -6.0622 -6.8937 72 "Ouest" "Pluie" +"20010809" 70 18.4 17.1 20.5 3 6 3 -5.9088 -3.2139 -4.4995 60 "Nord" "Pluie" +"20010810" 77 17.1 20 20.8 4 5 4 -1.9284 -1.0261 0.5209 70 "Nord" "Sec" +"20010811" 98 17.8 22.8 24.3 1 1 0 0 -1.5321 -1 77 "Ouest" "Pluie" +"20010812" 111 20.9 25.2 26.7 1 5 2 -1.0261 -3 -2.2981 98 "Ouest" "Sec" +"20010813" 75 18.8 20.5 26 8 7 1 -0.866 0 0 111 "Nord" "Sec" +"20010814" 116 23.5 29.8 31.7 1 3 5 1.8794 1.3681 0.6946 75 "Sud" "Sec" +"20010815" 109 20.8 23.7 26.6 8 5 4 -1.0261 -1.7101 -3.2139 116 "Sud" "Sec" +"20010819" 67 18.8 21.1 18.9 7 7 8 -5.3623 -5.3623 -2.5 86 "Ouest" "Pluie" +"20010820" 76 17.8 21.3 24 7 5 5 -3.0642 -2.2981 -3.9392 67 "Ouest" "Pluie" +"20010821" 113 20.6 24.8 27 1 1 2 1.3681 0.8682 -2.2981 76 "Sud" "Sec" +"20010822" 117 21.6 26.9 28.6 6 6 4 1.5321 1.9284 1.9284 113 "Sud" "Pluie" +"20010823" 131 22.7 28.4 30.1 5 3 3 0.1736 -1.9696 -1.9284 117 "Ouest" "Sec" +"20010824" 166 19.8 27.2 30.8 4 0 1 0.6428 -0.866 0.684 131 "Ouest" "Sec" +"20010825" 159 25 33.5 35.5 1 1 1 1 0.6946 -1.7101 166 "Sud" "Sec" +"20010826" 100 20.1 22.9 27.6 8 8 6 1.2856 -1.7321 -0.684 159 "Ouest" "Sec" +"20010827" 114 21 26.3 26.4 7 4 5 3.0642 2.8191 1.3681 100 "Est" "Sec" +"20010828" 112 21 24.4 26.8 1 6 3 4 4 3.7588 114 "Est" "Sec" +"20010829" 101 16.9 17.8 20.6 7 7 7 -2 -0.5209 1.8794 112 "Nord" "Pluie" +"20010830" 76 17.5 18.6 18.7 7 7 7 -3.4641 -4 -1.7321 101 "Ouest" "Sec" +"20010831" 59 16.5 20.3 20.3 5 7 6 -4.3301 -5.3623 -4.5 76 "Ouest" "Pluie" +"20010901" 78 17.7 20.2 21.5 5 5 3 0 0.5209 0 59 "Nord" "Pluie" +"20010902" 76 17.3 22.7 24.6 4 5 6 -2.9544 -2.9544 -2 78 "Ouest" "Pluie" +"20010903" 55 15.3 16.8 19.2 8 7 5 -1.8794 -1.8794 -2.3941 76 "Ouest" "Pluie" +"20010904" 71 15.9 19.2 19.5 7 5 3 -6.1284 0 -1.3892 55 "Nord" "Pluie" +"20010905" 66 16.2 18.9 19.3 2 5 6 -1.3681 -0.8682 1.7101 71 "Nord" "Pluie" +"20010906" 59 18.3 18.3 19 7 7 7 -3.9392 -1.9284 -1.7101 66 "Nord" "Pluie" +"20010907" 68 16.9 20.8 22.5 6 5 7 -1.5 -3.4641 -3.0642 59 "Ouest" "Pluie" +"20010908" 63 17.3 19.8 19.4 7 8 8 -4.5963 -6.0622 -4.3301 68 "Ouest" "Sec" +"20010912" 78 14.2 22.2 22 5 5 6 -0.866 -5 -5 62 "Ouest" "Sec" +"20010913" 74 15.8 18.7 19.1 8 7 7 -4.5963 -6.8937 -7.5175 78 "Ouest" "Pluie" +"20010914" 71 15.2 17.9 18.6 6 5 1 -1.0419 -1.3681 -1.0419 74 "Nord" "Pluie" +"20010915" 69 17.1 17.7 17.5 6 7 8 -5.1962 -2.7362 -1.0419 71 "Nord" "Pluie" +"20010916" 71 15.4 17.7 16.6 4 5 5 -3.8302 0 1.3892 69 "Nord" "Sec" +"20010917" 60 13.7 14 15.8 4 5 4 0 3.2139 0 71 "Nord" "Pluie" +"20010918" 42 12.7 14.3 14.9 8 7 7 -2.5 -3.2139 -2.5 60 "Nord" "Pluie" +"20010919" 65 14.8 16.3 15.9 7 7 7 -4.3301 -6.0622 -5.1962 42 "Ouest" "Pluie" +"20010920" 71 15.5 18 17.4 7 7 6 -3.9392 -3.0642 0 65 "Ouest" "Sec" +"20010921" 96 11.3 19.4 20.2 3 3 3 -0.1736 3.7588 3.8302 71 "Est" "Pluie" +"20010922" 98 15.2 19.7 20.3 2 2 2 4 5 4.3301 96 "Est" "Sec" +"20010923" 92 14.7 17.6 18.2 1 4 6 5.1962 5.1423 3.5 98 "Nord" "Sec" +"20010924" 76 13.3 17.7 17.7 7 7 6 -0.9397 -0.766 -0.5 92 "Ouest" "Pluie" +"20010925" 84 13.3 17.7 17.8 3 5 6 0 -1 -1.2856 76 "Sud" "Sec" +"20010927" 77 16.2 20.8 22.1 6 5 5 -0.6946 -2 -1.3681 71 "Sud" "Pluie" +"20010928" 99 16.9 23 22.6 6 4 7 1.5 0.8682 0.8682 77 "Sud" "Sec" +"20010929" 83 16.9 19.8 22.1 6 5 3 -4 -3.7588 -4 99 "Ouest" "Pluie" +"20010930" 70 15.7 18.6 20.7 7 7 7 0 -1.0419 -4 83 "Sud" "Sec"