pres_R
pres_R
Laurent Rouvière
septembre 2021
1
Présentation du cours
2
Présentation
3
Présentation
3
Présentation
3
Documents de cours
4
Documents de cours
4
Ressources
5
Pourquoi R ?
6
Pourquoi R ?
6
Pourquoi R ?
Remarque importante
• Toutes ces notions peuvent être réalisées avec R.
• R (data scientits) et Python (informaticiens) font partie des outils les
6
plus utilisés en sciences des données.
Quelques mots sur R
7
Quelques mots sur R
7
Quelques mots sur R
7
Quelques mots sur R
Conséquence
• Le logiciel est toujours à jour.
• Une des principales raisons de son succés.
7
Exemple : Les Iris de Fisher
> data(iris)
> summary(iris)
## [Link] [Link] [Link] [Link]
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
8
Objectifs
La problématique
Expliquer species par les autres variables.
9
Objectifs
La problématique
Expliquer species par les autres variables.
9
Manipulation des données
> apply(iris[,1:4],2,mean)
## [Link] [Link] [Link] [Link]
## 5.843333 3.057333 3.758000 1.199333
> apply(iris[,1:4],2,var)
## [Link] [Link] [Link] [Link]
## 0.6856935 0.1899794 3.1162779 0.5810063
10
Manipulation des données
> apply(iris[,1:4],2,mean)
## [Link] [Link] [Link] [Link]
## 5.843333 3.057333 3.758000 1.199333
> apply(iris[,1:4],2,var)
## [Link] [Link] [Link] [Link]
## 0.6856935 0.1899794 3.1162779 0.5810063
Remarque
Non informatif pour le problème (expliquer Species).
10
Manipulation avec dplyr
11
Visualisation
> boxplot([Link]~Species,data=iris)
8.0
7.5
7.0
[Link]
6.5
6.0
5.5
5.0
4.5
Species
12
Visualisation avec ggplot2
> library(ggplot2)
> ggplot(iris)+aes(x=Species,y=[Link])+geom_boxplot()
7
[Link]
> library(rpart)
> tree <- rpart(Species~.,data=iris)
> library([Link])
> [Link](tree)
setosa
versicolor
setosa virginica
.33 .33 .33
100%
yes [Link] < 2.5 no
versicolor
.00 .50 .50
67%
[Link] < 1.8
14
Carte avec ggmap
15
Chargement des données + fond de carte
16
Une première carte
17
Modèle de prévision
18
La carte finale
19
Application web avec shiny
20
Dans cette partie
21
Dans cette partie
21
Rstudio, Rmarkdown et packages R
22
Rstudio
23
Rstudio
23
Rmarkdown
Fichier Rmarkdown
• Un fichier Rmarkdown (.Rmd) permet de produire un document de
travail.
• Il contient le code, les sorties et des commentaires sur le travail réalisé.
• Il produit des rapports de grande qualité sous différentes formes
(documents, diaporama, etc...).
24
Rmarkdown
Fichier Rmarkdown
• Un fichier Rmarkdown (.Rmd) permet de produire un document de
travail.
• Il contient le code, les sorties et des commentaires sur le travail réalisé.
• Il produit des rapports de grande qualité sous différentes formes
(documents, diaporama, etc...).
25
Packages
25
Packages
25
Packages
=⇒ Chapitre 1 du tuto.
25
Objets R
26
Numérique et caractères
• Numérique (facile)
> x <- pi
> x
## [1] 3.141593
> [Link](x)
## [1] TRUE
• Caractères
> b <- "X"
> paste(b,1:5,sep="")
## [1] "X1" "X2" "X3" "X4" "X5"
27
Vecteurs
• Extraction: []
> x3[c(1,3,4)] # pareil que x3[x1]
## [1] 0 4 6
28
Logique
• Vrai ou Faux
> 1<2
## [1] TRUE
> 1==2
## [1] FALSE
> 1!=2
## [1] TRUE
29
Logique
• Vrai ou Faux
> 1<2
## [1] TRUE
> 1==2
## [1] FALSE
> 1!=2
## [1] TRUE
29
> size <- runif(5,150,190) #5 tailles générées aléatoirement entre
> #150 and 190
> size
## [1] 178.8362 185.0309 180.4393 185.4450 168.2592
Problème
Sélectionner les tailles plus grandes que 174.
30
> size <- runif(5,150,190) #5 tailles générées aléatoirement entre
> #150 and 190
> size
## [1] 178.8362 185.0309 180.4393 185.4450 168.2592
Problème
Sélectionner les tailles plus grandes que 174.
> size>174
## [1] TRUE TRUE TRUE TRUE FALSE
> size[size>174]
## [1] 178.8362 185.0309 180.4393 185.4450
30
Facteurs
31
Variable mal définie
32
Variable mal définie
32
Variable mal définie
• Solution :
> X <- [Link](X)
> levels(X) <- c("man","woman")
> X
## [1] woman woman man man woman
## Levels: man woman
> summary(X)
## man woman
## 2 3 32
Matrice
• Création
> m <- matrix(1:4,nrow=2,byrow=TRUE)
> m
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
• Extraction
> m[1,2]
> m[1,] #Première ligne
> m[,2] #Seconde colonne
33
Liste
• Extraction:
> mylist[[1]]
> mylist$vector
> mylist[["vector"]]
34
Dataframe
35
> summary(data)
## name sex size
## Length:5 Min. :0.0 Min. :165.0
## Class :character 1st Qu.:0.0 1st Qu.:168.0
## Mode :character Median :0.0 Median :170.0
## Mean :0.4 Mean :171.6
## 3rd Qu.:1.0 3rd Qu.:175.0
## Max. :1.0 Max. :180.0
36
> summary(data)
## name sex size
## Length:5 Min. :0.0 Min. :165.0
## Class :character 1st Qu.:0.0 1st Qu.:168.0
## Mode :character Median :0.0 Median :170.0
## Mean :0.4 Mean :171.6
## 3rd Qu.:1.0 3rd Qu.:175.0
## Max. :1.0 Max. :180.0
Problème 1
sex est interprété comme une variable continue. C’est une variable
qualitative.
36
Solution
Il faut la convertir en facteur.
> data$sex <- [Link](data$sex)
> levels(data$sex) <- c("man","woman")
> summary(data)
## name sex size
## Length:5 man :3 Min. :165.0
## Class :character woman:2 1st Qu.:168.0
## Mode :character Median :170.0
## Mean :171.6
## 3rd Qu.:175.0
## Max. :180.0
37
Solution
Il faut la convertir en facteur.
> data$sex <- [Link](data$sex)
> levels(data$sex) <- c("man","woman")
> summary(data)
## name sex size
## Length:5 man :3 Min. :165.0
## Class :character woman:2 1st Qu.:168.0
## Mode :character Median :170.0
## Mean :171.6
## 3rd Qu.:175.0
## Max. :180.0
Problème 2
name est interprété comme une variable. C’est plutôt un identifiant.
37
> [Link](data) <- data$name
> data <- data[,-1] #suppression de la colonne name
> data
## sex size
## Paul man 180
## Mary woman 165
## Steven man 168
## Charlotte woman 170
## Peter man 175
Conclusion
Il est crucial de toujours vérifier que les données sont correctement
interprétées par R (avec summary ou mode par exemple).
38
Tibbles
39
Exemple : data frame
40
Example : tibble
> library(tidyverse)
> data1 <- tibble(name,sex,size,age)
> #data1 <- column_to_rownames(data1,var="name")
> summary(data1)
## name sex size age
## Length:5 Min. :0.0 Min. :165.0 Length:5
## Class :character 1st Qu.:0.0 1st Qu.:168.0 Class :character
## Mode :character Median :0.0 Median :170.0 Mode :character
## Mean :0.4 Mean :171.6
## 3rd Qu.:1.0 3rd Qu.:175.0
## Max. :1.0 Max. :180.0
dataframe vs tibbles
Principale différence : pas de facteur dans les tibbles (par défaut).
=⇒ Chapitre 2 du tuto.
41
Gérer des données
42
Gérer des données
43
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.
44
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.
44
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.
44
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.
44
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.
44
Indiquer le chemin
45
Indiquer le chemin
45
Indiquer le chemin
45
Quelques options importantes
46
Quelques options importantes
46
Quelques options importantes
46
Quelques options importantes
46
Quelques options importantes
46
Exemple
• Fichier data_imp.txt
name;size;age
John;174;32
Peter;?;28
Mary;165.5;NA
47
Exemple
• Fichier data_imp.txt
name;size;age
John;174;32
Peter;?;28
Mary;165.5;NA
Caractéristiques
• 3 variables (ou plutôt 2...)
• Première ligne = nom des variables
• Données manquantes = NA, ?
47
Un premier essai
48
Un premier essai
Problème
R lit quatre lignes et une colonne !
48
Solution
49
Package readr
• Dans Rstudio, on peut lire des données avec readr en cliquant sur
Import Dataset (pas toujours efficace pour des données complexes).
50
Autres outils importations
51
Concaténer des données
52
Concaténer des données
52
Concaténer des données
52
Un exemple avec 2 tables
> df1
## # A tibble: 4 x 2
## name nation
## <chr> <chr>
## 1 Peter USA
## 2 Mary GB
## 3 John Aus
## 4 Linda USA
> df2
## # A tibble: 3 x 2
## name age
## <chr> <dbl>
## 1 John 35
## 2 Mary 41
## 3 Fred 28
53
Un exemple avec 2 tables
> df1
## # A tibble: 4 x 2
## name nation
## <chr> <chr>
## 1 Peter USA
## 2 Mary GB
## 3 John Aus
## 4 Linda USA
> df2
## # A tibble: 3 x 2
## name age
## <chr> <dbl>
## 1 John 35
## 2 Mary 41
## 3 Fred 28
Objectif
Un tableau de données avec 3 colonnes : name, nation et age.
53
bind_rows
> bind_rows(df1,df2)
## # A tibble: 7 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB NA
## 3 John Aus NA
## 4 Linda USA NA
## 5 John <NA> 35
## 6 Mary <NA> 41
## 7 Fred <NA> 28
54
bind_rows
> bind_rows(df1,df2)
## # A tibble: 7 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB NA
## 3 John Aus NA
## 4 Linda USA NA
## 5 John <NA> 35
## 6 Mary <NA> 41
## 7 Fred <NA> 28
54
full_join
> full_join(df1,df2)
## # A tibble: 5 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB 41
## 3 John Aus 35
## 4 Linda USA NA
## 5 Fred <NA> 28
55
full_join
> full_join(df1,df2)
## # A tibble: 5 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB 41
## 3 John Aus 35
## 4 Linda USA NA
## 5 Fred <NA> 28
=⇒ tous les individus sont conservés (NA sont ajoutés pour les quantités
non mesurées.)
55
left_join
> left_join(df1,df2)
## # A tibble: 4 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB 41
## 3 John Aus 35
## 4 Linda USA NA
56
inner_join
> inner_join(df1,df2)
## # A tibble: 2 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Mary GB 41
## 2 John Aus 35
57
inner_join
> inner_join(df1,df2)
## # A tibble: 2 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Mary GB 41
## 2 John Aus 35
57
Gérer des données
58
• dplyr est un package efficace pour transformer et résumer des tableaux
de données.
59
• dplyr est un package efficace pour transformer et résumer des tableaux
de données.
59
• dplyr est un package efficace pour transformer et résumer des tableaux
de données.
59
• dplyr est un package efficace pour transformer et résumer des tableaux
de données.
59
Grammaire dplyr
60
Select
But
Sélectionner des variables.
> df <- select(iris,[Link],[Link])
> head(df)
## [Link] [Link]
## 1 5.1 1.4
## 2 4.9 1.4
## 3 4.7 1.3
## 4 4.6 1.5
## 5 5.0 1.4
## 6 5.4 1.7
61
Filter
But
Filtrer des individus.
> df <- filter(iris,Species=="versicolor")
> head(df)
## [Link] [Link] [Link] [Link] Species
## 1 7.0 3.2 4.7 1.4 versicolor
## 2 6.4 3.2 4.5 1.5 versicolor
## 3 6.9 3.1 4.9 1.5 versicolor
## 4 5.5 2.3 4.0 1.3 versicolor
## 5 6.5 2.8 4.6 1.5 versicolor
## 6 5.7 2.8 4.5 1.3 versicolor
62
Arrange
But
Ordonner des individus en fonction d’une variable.
> df <- arrange(iris,[Link])
> head(df)
## [Link] [Link] [Link] [Link] Species
## 1 4.3 3.0 1.1 0.1 setosa
## 2 4.4 2.9 1.4 0.2 setosa
## 3 4.4 3.0 1.3 0.2 setosa
## 4 4.4 3.2 1.3 0.2 setosa
## 5 4.5 2.3 1.3 0.3 setosa
## 6 4.6 3.1 1.5 0.2 setosa
63
Mutate
But
Définir des nouvelles variables dans le jeu de données.
64
Summarise
But
Calculer des résumés statistiques.
> summarise(iris,mean=mean([Link]),var=var([Link]))
## mean var
## 1 3.758 3.116278
65
Summarise_all et summarise_at
66
Summarise_all et summarise_at
66
group_by
But
Faire des opérations pour des groupes de données.
> summarise(group_by(iris,Species),mean([Link]))
## # A tibble: 3 x 2
## Species `mean([Link])`
## * <fct> <dbl>
## 1 setosa 1.46
## 2 versicolor 4.26
## 3 virginica 5.55
67
L’opérateur pipe %>%
• Par exemple,
> mean(iris[iris$Species=="setosa","[Link]"])
## [1] 5.006
68
ou (un peu plus lisible avec dplyr)
> df1 <- filter(iris,Species=="setosa")
> df2 <- select(df1,[Link])
> summarize(df2,mean([Link]))
## mean([Link])
## 1 5.006
69
ou (un peu plus lisible avec dplyr)
> df1 <- filter(iris,Species=="setosa")
> df2 <- select(df1,[Link])
> summarize(df2,mean([Link]))
## mean([Link])
## 1 5.006
Pas satisfaisant
Création de deux objets dataframe (inutiles) pour un calcul "simple".
69
• Avec le pipe, on décompose et enchaîne les opérations:
1. Les données
> iris
70
• Avec le pipe, on décompose et enchaîne les opérations:
1. Les données
> iris
70
3. On garde la variable d’intérêt
> iris %>% filter(Species=="setosa") %>% select([Link])
71
3. On garde la variable d’intérêt
> iris %>% filter(Species=="setosa") %>% select([Link])
4. On calcule la moyenne
> iris %>% filter(Species=="setosa") %>%
+ select([Link])%>% summarize_all(mean)
## [Link]
## 1 5.006
71
Plus généralement
72
Plus généralement
72
Reformater les données
• Un exemple jouet
> df <- iris %>% group_by(Species) %>%
+ summarize_all(mean)
> head(df)
## # A tibble: 3 x 5
## Species [Link] [Link] [Link] [Link]
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 setosa 5.01 3.43 1.46 0.246
## 2 versicolor 5.94 2.77 4.26 1.33
## 3 virginica 6.59 2.97 5.55 2.03
73
pivot_longer
Remarque
Même information avec un format différent.
74
pivot_wider
75
Separate
76
Separate
76
Unite
77
Unite
77
Visualiser des données
78
Visualiser des données
Graphes conventionnels
79
• Visualisation : cruciale à toutes les étapes d’une étude statistique.
• R Permet de créer un très grand nombre de type de graphes.
• On propose une (courte) présentation des graphes classiques,
• suivie par les graphes ggplot.
80
La fonction plot
−1.0 0.0
−6 −4 −2 0 2 4 6
81
Graphes classiques pour visualiser des variables
82
Graphes classiques pour visualiser des variables
Constat (positif)
Il existe une fonction R pour toutes les représentations.
82
Nuage de points sur un jeu de données
> plot([Link]~[Link],data=iris)
7.5
[Link]
6.0
4.5
[Link]
> #pareil que
> plot(iris$[Link],iris$[Link])
83
Histogramme (variable continue)
> hist(iris$[Link],col="red")
Histogram of iris$[Link]
10 20 30
Frequency
4 5 6 7 8
iris$[Link]
84
Diagramme en barres (variable qualitative)
> barplot(table(iris$Species))
10 20 30 40 50
0
85
Boxplot (distribution)
> boxplot([Link]~Species,data=iris)
7.5
[Link]
6.5
5.5
4.5
Species
86
Visualiser des données
87
• ggplot2 permet de faire des graphes R en s’appuyant sur une grammaire
des graphiques (équivalent de dplyr pour manipuler les données).
• Les graphes produits sont de très bonnes qualités (pas toujours le cas
avec les graphes conventionnels).
88
Assembler des couches
Pour un tableau de données fixé, un graphe est défini comme une succession
de couches. Il faut toujours spécifier :
• les données
• les variables à représenter
• le type de représentation (nuage de points, boxplot. . . ).
89
Assembler des couches
Pour un tableau de données fixé, un graphe est défini comme une succession
de couches. Il faut toujours spécifier :
• les données
• les variables à représenter
• le type de représentation (nuage de points, boxplot. . . ).
89
La grammaire
90
La grammaire
90
La grammaire
90
La grammaire
90
La grammaire
90
La grammaire
90
Un premier exemple
> ggplot(iris)+aes(x=[Link],y=[Link])+geom_point()
4.5
4.0
[Link]
3.5
3.0
2.5
2.0
5 6 7 8
[Link]
91
Couleur et taille
> ggplot(iris)+aes(x=[Link],y=[Link])+
+ geom_point(color="blue",size=2)
4.5
4.0
[Link]
3.5
3.0
2.5
2.0
5 6 7 8
[Link]
92
Couleur avec une variable qualitative
> ggplot(iris)+aes(x=[Link],y=[Link],
+ color=Species)+geom_point()
4.5
4.0
Species
[Link]
3.5
setosa
versicolor
3.0
virginica
2.5
2.0
5 6 7 8
[Link]
93
Couleur avec une variable continue
> ggplot(iris)+aes(x=[Link],y=[Link],
+ color=[Link])+geom_point()
4.5
4.0
[Link]
2.5
[Link]
3.5
2.0
1.5
3.0 1.0
0.5
2.5
2.0
5 6 7 8
[Link]
94
Changer la couleur
> ggplot(iris)+aes(x=[Link],y=[Link],
+ color=[Link])+geom_point()+
+ scale_color_continuous(low="yellow",high="red")
4.5
4.0
[Link]
2.5
[Link]
3.5
2.0
1.5
3.0 1.0
0.5
2.5
2.0
5 6 7 8
[Link]
95
Histogramme
> ggplot(iris)+aes(x=[Link])+geom_histogram(fill="red")
12.5
10.0
7.5
count
5.0
2.5
0.0
5 6 7 8
[Link]
96
Diagramme en barres
> ggplot(iris)+aes(x=Species)+geom_bar(fill="blue")
50
40
30
count
20
10
0
setosa versicolor virginica
Species
97
Facetting (plus compliqué)
> ggplot(iris)+aes(x=[Link],y=[Link])+geom_point()+
+ geom_smooth(method="lm")+facet_wrap(~Species)
4.0
[Link]
3.5
3.0
2.5
2.0
5 6 7 8 5 6 7 8 5 6 7 8
[Link]
98
Combiner ggplot et dplyr
• Par exemple
> head(df)
## # A tibble: 6 x 3
## size weight.20 weight.50
## <dbl> <dbl> <dbl>
## 1 153 61.2 81.4
## 2 169 67.5 81.4
## 3 168 69.4 80.3
## 4 169 66.1 81.9
## 5 176 70.4 79.2
## 6 169 67.6 88.9
99
Objectif
90
80
age
weight
20
70 50
60
101
Etape ggplot
> ggplot(df1)+aes(x=size,y=weight,color=age)+
+ geom_point()+geom_smooth(method="lm")+theme_classic()
90
80 age
weight
20
70 50
60
102
Compléments : quelques démos
> demo(image)
> example(contour)
> demo(persp)
> library("lattice");demo(lattice)
> example(wireframe)
> library("rgl");demo(rgl)
> example(persp3d)
> demo(plotmath);demo(Hershey)
103
Compléments : quelques démos
> demo(image)
> example(contour)
> demo(persp)
> library("lattice");demo(lattice)
> example(wireframe)
> library("rgl");demo(rgl)
> example(persp3d)
> demo(plotmath);demo(Hershey)
=⇒ Chapitre 4 du tuto.
103
Cartes leaflet
104
Introduction
105
Fond de carte
• Leaflet est une des librairies open-source JavaScript les plus populaires
pour faire des cartes interactives.
• Documentation: here
> library(leaflet)
> leaflet() %>% addTiles()
+
−
106
Différents styles de fonds de carte
> Paris <- c(2.35222,48.856614)
> leaflet() %>% addTiles() %>%
+ setView(lng = Paris[1], lat = Paris[2],zoom=12)
+
−
+
−
108
Leaflet | Map tiles by Stamen Design, CC BY 3.0 — Map data ©
Avec des données
109
Séismes avec une magnitude plus grande que 5.5
> quakes1 <- quakes %>% filter(mag>5.5)
> leaflet(data = quakes1) %>% addTiles() %>%
+ addMarkers(~long, ~lat, popup = ~[Link](mag))
+
−
Remarque
110
La magnitude apparaît lorsqu’on cliquer sur un marker.
addCircleMarkers
> leaflet(data = quakes1) %>% addTiles() %>%
+ addCircleMarkers(~long, ~lat, popup=~[Link](mag),
+ radius=3,fillOpacity = 0.8,color="red")
+
−
111
=⇒ Fiche 5.
Modèle de régression avec R
112
Données
Y X1 X2 ... Xp
y1 x1,1 x1,2 ... x1,p
.. .. .. .. ..
. . . . .
.. .. .. .. ..
. . . . .
yn xn,1 xn,2 ... xn,p
But
Expliquer ou prédire la sortie Y par les entrées X1 , . . . , Xp .
113
Exemple : ozone
But
Expliquer ou prédire la concentration maximale quotidienne en O3
(colonne maxO3) par les autres variables.
114
Modélisation statistique
Y = m(X1 , . . . , Xp ) + ε.
115
Modélisation statistique
Y = m(X1 , . . . , Xp ) + ε.
115
Un exemple : le modèle linéaire
Y = β0 + β1 X1 + . . . + βp Xp + ε,
116
Un exemple : le modèle linéaire
Y = β0 + β1 X1 + . . . + βp Xp + ε,
• Moindres carrés :
βb = (X t X )−1 X t Y .
• Estimateur de m :
m(x
b ) = βb0 + βb1 x1 + . . . βbp xp .
116
Structure
avec
117
La méthode (ou le modèle)
Remarque
Chaque modèle correspond à un fonction R.
118
Formules
Remarque
Pour spécifier les entrées et la sortie.
> lm(Y~X1+X3,data=df)
119
Formules
Remarque
Pour spécifier les entrées et la sortie.
> lm(Y~X1+X3,data=df)
=⇒ Y = β0 + β1 X1 + β3 X3 + ε
119
Formules
Remarque
Pour spécifier les entrées et la sortie.
> lm(Y~X1+X3,data=df)
=⇒ Y = β0 + β1 X1 + β3 X3 + ε
> lm(Y~X1+I(X3)^2,data=df)
119
Formules
Remarque
Pour spécifier les entrées et la sortie.
> lm(Y~X1+X3,data=df)
=⇒ Y = β0 + β1 X1 + β3 X3 + ε
> lm(Y~X1+I(X3)^2,data=df)
=⇒ Y = β0 + β1 X1 + β3 X32 + ε
119
Formules
Remarque
Pour spécifier les entrées et la sortie.
> lm(Y~X1+X3,data=df)
=⇒ Y = β0 + β1 X1 + β3 X3 + ε
> lm(Y~X1+I(X3)^2,data=df)
=⇒ Y = β0 + β1 X1 + β3 X32 + ε
> lm(Y~.,data=df)
119
Formules
Remarque
Pour spécifier les entrées et la sortie.
> lm(Y~X1+X3,data=df)
=⇒ Y = β0 + β1 X1 + β3 X3 + ε
> lm(Y~X1+I(X3)^2,data=df)
=⇒ Y = β0 + β1 X1 + β3 X32 + ε
> lm(Y~.,data=df)
=⇒ Y = β0 + β1 X1 + . . . + βp Xp + ε
119
Exemple
> [Link] <- lm(maxO3~T12+Ne9,data=ozone)
> [Link]
##
## Call:
## lm(formula = maxO3 ~ T12 + Ne9, data = ozone)
##
## Coefficients:
## (Intercept) T12 Ne9
## 7.638 4.457 -2.696
120
Exemple
> [Link] <- lm(maxO3~T12+Ne9,data=ozone)
> [Link]
##
## Call:
## lm(formula = maxO3 ~ T12 + Ne9, data = ozone)
##
## Coefficients:
## (Intercept) T12 Ne9
## 7.638 4.457 -2.696
120
Exemple
> [Link] <- lm(maxO3~T12+Ne9,data=ozone)
> [Link]
##
## Call:
## lm(formula = maxO3 ~ T12 + Ne9, data = ozone)
##
## Coefficients:
## (Intercept) T12 Ne9
## 7.638 4.457 -2.696
120
Faire des prévisions
121
Faire des prévisions
• Réponse :
121
Fonction predict
122
Fonction predict
• Exemple
> [Link] <- [Link](T12=20,Ne9=4.9)
> predict([Link],newdata=[Link])
## 1
## 83.57509
Très important
Utiliser la même structure pour les 2 data-frames.
122
Estimer l’erreur quadratique de prédiction
b ))2 ].
b = E [(Y − m(X
MSE (m)
123
Estimer l’erreur quadratique de prédiction
b ))2 ].
b = E [(Y − m(X
MSE (m)
• Cette erreur (inconnue) peut être calculée par validation hold out :
• Séparer les données en un échantillon d’apprentissage et un échantillon
test.
• Entrainer le modèle sur les données d’apprentissage =⇒ m.b
• Calculer la MSE
1 X
b i ))2 .
(yi − m(x
ntest i∈test
123
Un exemple
• Data splitting
> library(caret)
> [Link](12345)
> [Link] <- createDataPartition(1:nrow(ozone),p=2/3)
> train <- ozone %>% slice([Link]$Resample1)
> test <- ozone %>% slice(-[Link]$Resample1)
124
Un exemple
• Data splitting
> library(caret)
> [Link](12345)
> [Link] <- createDataPartition(1:nrow(ozone),p=2/3)
> train <- ozone %>% slice([Link]$Resample1)
> test <- ozone %>% slice(-[Link]$Resample1)
• Ajustement du modèle
> mod <- lm(maxO3~.,data=train)
124
Un exemple
• Data splitting
> library(caret)
> [Link](12345)
> [Link] <- createDataPartition(1:nrow(ozone),p=2/3)
> train <- ozone %>% slice([Link]$Resample1)
> test <- ozone %>% slice(-[Link]$Resample1)
• Ajustement du modèle
> mod <- lm(maxO3~.,data=train)
• Calcul de la MSE
> pred <- predict(mod,newdata=test)
> df <- [Link](pred=pred,obs=test$maxO3)
> df %>% summarize(MSE=mean((pred-obs)^2))
## MSE
## 1 387.5472
124
En pratique
125
En pratique
=⇒ fiche 6.
125
Merci
126