Commit 1440ca9a authored by Laurence Viry's avatar Laurence Viry
Browse files

ajout études

parent 089e687d
Pipeline #11234 passed with stages
in 54 seconds
%% Cell type:markdown id: tags:
*Ce notebook est issu du document fourni par H. Commenges lors d'une formation pour ATMO en avril 2017*
## Création, manipulation d'objets R et de structures de données
### Création d'objets
#### Assignation
* Opérateur d'assignation "**<-**"
* "**<-**" et "**=**" sont équivalents
L'opérateur "**<-**" est conseillé
%% Cell type:code id: tags:
``` R
1+1
Var1Somme <- 1+1
Var1Somme
Var2Somme <- 7+6
Var2Somme
VarSommeGlob <- Var1Somme + Var2Somme
VarSommeGlob
# Essayer d'autres opérations ...
```
%% Cell type:code id: tags:
``` R
Var2Somme <- 8
Var2Somme
```
%% Cell type:markdown id: tags:
#### Référencement
* Si le nom n'existe pas, l'assignation crée de nouvelle référence.
* Si le nom existe, l'assignation écrase la référence existante.
### Typage dynamique
#### Typage à la volée
%% Cell type:code id: tags:
``` R
#
estNum <- 1.67
estInt <- 45L
estAlphaNum <- "taux"
estLogique <- TRUE
```
%% Cell type:markdown id: tags:
Se renseigner et changer de type
%% Cell type:code id: tags:
``` R
class(estNum)
mode(estNum)
is.numeric(estNum)
#
class(estInt)
mode(estInt)
is.numeric(estInt)
#
class(estAlphaNum)
is.numeric(estAlphaNum)
```
%% Cell type:markdown id: tags:
### Calcul terme à terme
* Les opérations sont effectués vectoriellement terme à terme
* il y a des opérateurs spécifiques pour le calcul matriciel
%% Cell type:code id: tags:
``` R
vec1 <- c(3,8,-8,10,11)
vec1
vec2 <- rep(4,5)
vec2
```
%% Cell type:code id: tags:
``` R
# Opération
vec1 + vec2
vec1*6
vec1*vec2
vec1%*%vec2
```
%% Cell type:markdown id: tags:
##
%% Cell type:markdown id: tags:
## Manipulation de structure de données
### Les Vecteurs
Suite ordonnée de valeurs **de même type**(numérique, alphanumérique, logique) en *une dimension*
* Créer l'objet
%% Cell type:code id: tags:
``` R
c(6,7,1,2,9)
vecTaille <- c(10, 40, 20, 17, 12)
```
%% Cell type:markdown id: tags:
* Se renseigner sur l'objet
%% Cell type:code id: tags:
``` R
str(vecTaille)
class(vecTaille)
length(vecTaille)
names(vecTaille)
```
%% Cell type:markdown id: tags:
* Désigner des valeurs
%% Cell type:code id: tags:
``` R
vecTaille[3]
vecTaille[c(1,3)]
vecTaille[1:3]
```
%% Cell type:markdown id: tags:
* Utiliser des fonctions
%% Cell type:code id: tags:
``` R
sum(vecTaille[3])
mean(vecTaille)
summary(vecTaille)
```
%% Cell type:markdown id: tags:
### Les matrices
* Suite de valeurs de **même type** (numérique, alphanumérique, logique) en **n dimensions**
* *Classe* : **matrix**(2 dimensions) ou **array** (n dimensions)
#### Créer l'objet:
%% Cell type:code id: tags:
``` R
seq(0,6,2)
mat <- matrix(c(c(2.3,4,7.8,9.2),rep(2,4),seq(0,6,2)),nrow=4,ncol=3)
mat
```
%% Cell type:markdown id: tags:
#### Se renseigner sur l'objet
%% Cell type:code id: tags:
``` R
str(mat)
class(mat)
dim(mat)
rownames(mat)
colnames(mat)
```
%% Cell type:markdown id: tags:
#### Désigner les valeurs
Les valeurs sont stockées colonne par colonne, on peut modifier en spécifiant l'option **byrow=TRUE**
%% Cell type:code id: tags:
``` R
mat[4]
mat[1,2]
mat[1,] # ligne 1
mat[,1] # colonne 1
matrow <- matrix(c(c(2.3,4,7.8,9.2),rep(2,4),seq(0,6,2)),nrow=4,ncol=3,byrow=TRUE)
matrow
matrow[4]
```
%% Cell type:markdown id: tags:
#### Faire des opérations
%% Cell type:code id: tags:
``` R
sum(mat)
mean(mat)
mean(mat[,1])
summary(mat)
```
%% Cell type:markdown id: tags:
### Tableau
* Ensemble de **vecteurs** de **même taille** mais pouvant être **de type différent**.
* Classe : **data.frame**
#### Créer l'objet
%% Cell type:code id: tags:
``` R
tabCastors1 <- data.frame(NOM=c("Riri","Fifi","Loulou"),
TAILLE=c(1.43,1.78,1.03),
POIDS=c(50,87,45))
```
%% Cell type:code id: tags:
``` R
tabCastors1
# Nom des lignes
row.names(tabCastors1)
```
%% Cell type:code id: tags:
``` R
tabCastors2 <- data.frame(NOM=c("Riri","Fifi","Loulou"),
TAILLE=c(1.43,1.78,1.03),
POIDS=c(50,87,45),row.names="NOM")
row.names(tabCastors2)
```
%% Cell type:markdown id: tags:
#### Se renseigner sur l'objet
%% Cell type:code id: tags:
``` R
str(tabCastors2)
class(tabCastors2)
dim(tabCastors2)
row.names(tabCastors2)
colnames(tabCastors2)
```
%% Cell type:markdown id: tags:
#### Faire des opérations
%% Cell type:code id: tags:
``` R
summary(tabCastors1)
summary(tabCastors2)
```
%% Cell type:code id: tags:
``` R
# sum(tabCastors1)
sum(tabCastors2)
sum(tabCastors1$TAILLE)
mean(tabCastors2$TAILLE)
summary(tabCastors2)
summary(tabCastors2$TAILLE)
attributes(tabCastors)
```
%% Cell type:markdown id: tags:
### Liste
* Ensemble d'objets **de tout type** et **de toute taille**
* Classe : **list**
%% Cell type:markdown id: tags:
#### Créer un objet
%% Cell type:code id: tags:
``` R
riri <- list(NOM="Riri",TAILLE=data.frame(DATE=c(1951,1952,1953),TAILLE=c(1.43,1.48,1.54)),
COORDS=c(33.94,-117.51))
fifi <- list(NOM="Fifi",TAILLE=data.frame(DATE=c(1951,1952,1953),TAILLE=c(1.78,1.80,1.87)),
COORDS=c(33.21,-117.64))
loulou <- list(NOM="Loulou",TAILLE=data.frame(DATE=c(1951,1952,1953),TAILLE=c(1.04,1.10,1.20)),
COORDS=c(33.83,-117.25))
listCastors <-list(RIRI=riri,FIFI=fifi,LOULOU=loulou)
```
%% Cell type:markdown id: tags:
#### Se renseigner sur l'objet
%% Cell type:code id: tags:
``` R
str(riri)
class(riri)
str(listCastors)
class(listCastors)
length(listCastors)
names(riri)
names(listCastors)
```
%% Cell type:markdown id: tags:
#### Désigner des valeurs
%% Cell type:code id: tags:
``` R
riri[1]
class(riri[1])
riri[[1]]
class(riri[[1]])
riri$NOM
```
%% Cell type:code id: tags:
``` R
#
listCastors[[1]][[2]]
class(listCastors[[1]][[2]])
listCastors[[1]][2]
class(listCastors[[1]][2])
```
%%%% Output: display_data
DATE | TAILLE |
|---|---|---|
| 1951 | 1.43 |
| 1952 | 1.48 |
| 1953 | 1.54 |
\begin{tabular}{r|ll}
DATE & TAILLE\\
\hline
1951 & 1.43\\
1952 & 1.48\\
1953 & 1.54\\
\end{tabular}
%%%% Output: display_data
'data.frame'
'data.frame'
%%%% Output: display_data
**$TAILLE** =
DATE | TAILLE |
|---|---|---|
| 1951 | 1.43 |
| 1952 | 1.48 |
| 1953 | 1.54 |
\textbf{\$TAILLE} = \begin{tabular}{r|ll}
DATE & TAILLE\\
\hline
1951 & 1.43\\
1952 & 1.48\\
1953 & 1.54\\
\end{tabular}
%%%% Output: display_data
'list'
'list'
%% Cell type:markdown id: tags:
#### Faire des opérations
Il faut appliquer des fonctions sur un ensemble d'éléments de la liste (**lapply**,...)
This diff is collapsed.
......@@ -621,7 +621,7 @@
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.4.1"
"version": "3.4.3"
}
},
"nbformat": 4,
......
%% Cell type:markdown id: tags:
## Etude de la polution de l'air en fonction de données climatiques
(*Cet exemple est tiré du livre "Statistiques avec R" de Pierre-André Cornillon (Presse Universitaire de Rennes), il peut être intéressant pour ceux qui sont intéressés par l'interprétation des résultats de le consulter*).
La pollution de l'air est actuellement une des préoccupations majeures de santé publique. Des associations de surveillance de la qualité de l'air existent sur tout le territoire français et mesurent la **concentration des polluants** ainsi que **les conditions météorologiques** comme la température, la nébulosité, le vent,$\ldots$
On dispose de 112 données relevées durant l'été 2001 à Rennes stockées dans le fichier texte **"ozone.txt"** dans le répertoire **".../ATMO-IntroR/TP/data"**.
### Relation concentration en ozone et température
Analyse de la relation entre le maximum journalier de la concentration en ozone (en $\mu/m^3$) et la température par une méthode de régression linéraire simple, fonction **lm**(linear model) de R.
**Les différentes étapes**
#### Importer les données et extraire les variables d'intérêts ("max03" et "T12").
%% Cell type:code id: tags:
``` R
# Lecture des données "ozone.txt"
setwd('/home/viryl/notebooks/ATMO-IntroR/TP/data')
...
names(ozone)
# Extraction des données utiles
ozone1 <-
names(ozone1)
```
%% Cell type:markdown id: tags:
#### Faire un premier traitements descriptifs de ces variables.
%% Cell type:code id: tags:
``` R
# Statistiques descriptives des données de l'étude
...
```
%% Cell type:markdown id: tags:
#### Analyse du lien entre ces deux variables par une représentation graphique.
On représente le nuage de points (maxO3,T12), chaque point preprésente, pour un jour donné, une mesure de la température à 12h et le pic d'ozone de la journée.
%% Cell type:code id: tags:
``` R
# Nuage de point ("maxO3","T12")
...
```
%% Cell type:markdown id: tags:
#### Estimation des paramètres du modèle de régression simple.<br\>
La fonction **lm** (linear model) permet d'ajuster un modèle linéaire.
- On observe les composantes du résultat obtenu en sortie de la fonction **lm** (fonction **names**).
- Les fonctions **summary** et **anova** sont utilisées pour obtenir et afficher les paramètres permettant de faire une analyse des résultats.
%% Cell type:code id: tags:
``` R
help(lm)
```
%% Cell type:code id: tags:
``` R
reg.simple <-
names(reg.simple)
class(reg.simple)
...
```
%% Cell type:markdown id: tags:
#### Tracer la droite de régression sur le nuage de point obtenue en 3.
- en utilisant simplement la fonction **abline** sur le résultat obtenu.
- ou la fonction **line()** sur le domaine d'observation de la variable explicative T12.
%% Cell type:code id: tags:
``` R
# Utilisation de la fonction abline
...
```
%% Cell type:code id: tags:
``` R
plot(maxO3~T12,data=ozone1,pch=15,cex=0.5)
grillex <- ...
grilley <- ...
...
```
%% Cell type:markdown id: tags:
#### Analyser les résidus
On peut ajouter au jeu de données initial, les valeurs ajustées, les résidus, les valeurs estimées...On pourra ensuite construire des graphes en utilisant ces nouvelles variables.
%% Cell type:markdown id: tags:
#### Estimer "maxo3" pour une nouvelle valeur de "T12"
Pour prédire "maxO3" pour une nouvelle vauleur de "T12", il suffit d'utiliser les estimations. La valeur prédite aura un intérêt si elle est donnée avec son intervalle de confiance, on utilisera de la fonction **predict** qui prend pour argument, le résultat de la régression et la ou les nouvelles valeurs sous forme d'un data-frame.
On dispose d'une nouvelle valeur de T12 égale à 19 degrés pour le $1^{er}$ octobre.
%% Cell type:code id: tags:
``` R
xnew <- 19
...
```
%% Cell type:markdown id: tags:
Pour représenter sur un même graphe l'intervalle de confiance d'une valeur lissée et l'intervalle de confiance d'une valeur prédite, nous calculons ces intervales sur l'ensemble des points ayant servi à la construction de la droite de régression.
%% Cell type:code id: tags:
``` R
# Données explicatives
grillex.df <- as.data.frame(grillex)
dimnames(grillex.df)[[2]] <- "T12"
ICdte <- predict(reg.simple,new=grillex.df,interval="conf",level=0.95)
ICprev <- predict(reg.simple,new=grillex.df,interval="pred",level=0.95)
plot(maxO3~T12,data=ozone1,pch=15,cex=0.5)
matlines(grillex,cbind(ICdte,ICprev),lty=c(1,2,2,3,3),col=1)
legend("topleft",lty=2:3,c("prev","conf"))
```
%% Cell type:markdown id: tags:
### Regression multiple
La régression linéaire multiple permet d'expliquer et/ou prédire une variable quantitative par p variables quantitatives, c'est une généralisation du modèle de régression simple.
On revient à notre problème et on veut analyser la relation entre le maximum journalier de la concentration en ozone et la température à différentes heures de la journée, la nébulosité à différentes heures de la journée, la projection du vent sur l'axe Est-Ouest à différentes heures de la journée et la concentration maximale de la veille du jour considéré.
** Les diférentes étapes **
#### Importer les données et conserver les données utiles.
%% Cell type:code id: tags:
``` R
# Lecture des données
names(ozone)
# Extraction des données utiles
ozone2 <- ...
names(ozone2)
summary(ozone2)
```
%% Cell type:markdown id: tags:
#### Représenter les variables
Pour valider les données, on effectue une analyse univariée des variables(statistiques descriptives, histogramme,...)
Le nombre de variables n'étant pas très élevé, on peut représenter les variables deux par deux sur un même graphique (fonction **pairs**). On pourrait également explorer les données avec une ACP (package FactoMineR, FactoShiny).
%% Cell type:code id: tags:
``` R
# plot
```
%% Cell type:markdown id: tags:
#### Estimer les paramètres
Pour estimer les paramètres, il faut écrire le modèle. On utilise la fonction **lm** avec une formule décrivant le modèle.<br\>
**maxO3 ~ T9+ T12+T15+Ne9+Ne12+Ne15+Vx9+Vx12+Vx15+maxO3v'** <br\>
%% Cell type:code id: tags:
``` R
# regression multiple
reg.mul <-
```
%% Cell type:code id: tags:
``` R
# OU comme ozone2 ne contient que les variables explicatives et la variable a expliquer
reg.mul <- lm(maxO3 ~ ., data=ozone2)
ls()
```
%% Cell type:markdown id: tags:
#### Choix des variables
Il est possible avec l'analyse de **reg.mul** de faire un choix des variables à la main. On enlève la moins significative puis on recalcule les estimations et ainsi de suite.