You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**Ce tutoriel est encore sous sa première version, il est en cours de mise à jour.**
35
+
## Objectif
37
36
38
-
## Objectifs
37
+
Le tutoriel learnr sur les cartes auto-adaptatives (SOM) que vous vous apprêtez à réaliser vous permettra de :
39
38
40
-
- TODO
39
+
- comprendre comment réaliser les différentes étapes de la SOM : transformation du jeu de données en matrice, calcul de la SOM et représentation sous forme de différents graphiques.
40
+
- acquérir les outils nécessaires à l'analyse et l'interprétation d'un jeu de données multivariées grâce à la SOM.
41
41
42
+
Avant toute chose, assurez vous d'avoir bien compris le contenu du [module 6](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2020/k-moyenne-mds-som.html) du cours et en particulier la [section 6.3](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2020/cartes-auto-adaptatives-som.html). N'oubliez pas de réaliser les exercices H5P qui figurent dans cette section avant de vous lancer dans ce tutoriel Learnr.
42
43
43
-
## Contexte
44
+
## Données environnementales
44
45
45
-
Des scientifiques ont réalisé des mesures d'abondance d'espèces de poissons et des mesures physico-chimiques sur 30 stations différentes.
46
+
Des chercheurs ont étudié la composition floristique et les variables environnementales dans des forêts de pins oligotropes (*Pinus sylvestris*) dans l'est de la Fennoscandie, une région située au nord de l'Europe constituée de la Finlande, de la péninsule Scandinave, de la Carélie et de la péninsule de Kola.
46
47
47
-
L'objet `doubs` du package `ade4` est une liste qui contient 4 jeux de donnnées. Nous nous intéresserons aux données portant sur les mesures environnementales.
48
+

49
+
50
+
Les 24 sites sélectionnés pour cette étude sont situés dans le nord de la Finlande et dans la péninsule de Kola. Quatorze variables environnementales ont été mésurées sur les différents sites d'étude dont onze permettant d'évaluer la quantité de nutriments présentant dans la matière organique (MO). Les différentes variables mesurées sont présentées dans le tableau ci-dessous.
|**Humdepth**| épaisseur de la couche d'humus | cm |
67
+
|**pH**| pH du sol | - |
68
+
69
+
Vous pouvez facilement télécharger ces données depuis `"varechem"` dans le package {vegan} et en visualiser les premières lignes.
48
70
49
71
```{r}
50
-
data(doubs, package = "ade4")
51
-
class(doubs)
72
+
read("varechem", package = "vegan") %>.%
73
+
rename(., station = rownames) -> envir
74
+
head(envir)
52
75
```
53
76
54
-
Ce tableau comprend 30 sites d'échantillonages avec 11 mesures environnementales.
77
+
Pour avoir une idée globale du jeu de données, vous pouvez commencer par utiliser `skim()`.
55
78
56
79
```{r}
57
-
enviro <- doubs$env
80
+
skimr::skim(envir)
58
81
```
59
82
60
-
Voici une courte description des variables étudiées (en anglais). Ces informations proviennent de la page d'aide `?ade4::doubs`
83
+
On constate qu'aucune donnée n'est manquante et que toutes les variables sont numériques à l'exception de la première colonne nommée "station" qui contient les numéros des stations. Il faut donc l'enlever pour la suite de l'étude. Les unités étant différentes, il faudra également standardiser les données. Le tableau devra également être transformé en matrice car la fonction `som()` du package {kohonen} ne peut utiliser que ce type d'objet.
84
+
85
+
### Transformation en matrice
86
+
87
+
Transformez votre jeu de données `envir` en matrice. N'oubliez pas de commencer par retirer la colonne correspondant aux numéros de station et de standardiser vos données.
61
88
62
-
- dfs : distance from the source (km * 10),
63
-
- alt : altitude (m),
64
-
- slo : (log(x + 1) where x is the slope (per mil * 100),
65
-
- flo : minimum average stream flow (m3/s * 100),
66
-
- pH : pH,
67
-
- har : total hardness of water (mg/l of Calcium),
68
-
- pho : phosphates (mg/l * 100),
69
-
- nit : nitrates (mg/l * 100),
70
-
- amm : ammonia nitrogen (mg/l * 100),
71
-
- oxy : dissolved oxygen (mg/l * 10),
72
-
- bdo : biological demand for oxygen (mg/l * 10)
89
+
```{r matrix_h2, exercise=TRUE}
90
+
___ %>.%
91
+
___(., - station) %>.%
92
+
___(.) %>.%
93
+
___(.) -> envir_mat
94
+
```
73
95
74
-
```{r, echo=TRUE}
75
-
summary(enviro)
96
+
```{r matrix_h2-hint-1}
97
+
DF %>.%
98
+
select(., - rownames) %>.%
99
+
___(.) %>.%
100
+
___(.) -> envir_mat
101
+
```
102
+
103
+
```{r matrix_h2-solution}
104
+
envir %>.%
105
+
select(., - rownames) %>.%
106
+
scale(.) %>.%
107
+
as.matrix(.) -> envir_mat
108
+
```
109
+
110
+
```{r matrix_h2-check}
111
+
grade_code("Très bien ! Maintenant que vous avez transformé votre jeu de données en matrice après avoir pris soin de retirer les variables non numériques et de le standardiser si nécessaire, vous allez pourvoir rentrer dans le vif du sujet ! ")
76
112
```
77
113
78
114
## Cartes auto-adaptatives (SOM)
79
115
80
-
La fonction som() du package {kohonen} ne peut employer qu'une matrice. Commencez par centrer et transfomez `enviro` en une matrice.
116
+
Pour réalisez le calcul de votre carte auto-adaptative ou SOM, vous allez devoir utiliser la fonction `som()` du package {kohonen}. Avant de faire le calcul, il est impotant de noter que l'analyse fait intervenir le générateur pseudo-aléatoire. Il peut-être donc intéréssant de le fixer en déterminant un point de départ avec `set.seed()` si vous souhaitez rendre votre analyse reproductible.
81
117
82
-
```{r, echo = TRUE, eval = FALSE}
83
-
# function de base
84
-
DF %>.%
118
+
Pour utilser la fonction `som()`, vous devrez lui renseigner une matrice et utiliser l'argument `grid =` avec la fonction `somgrid()` pour lui préciser la topologie de la carte. Cette fonction `somgrid()` nécessite au minimum 3 arguments, le nombre de cellules en x et en y (les dimensions de notre grille) et la topologie, grille rectangulaire ou grille hexagonale, spécifiée par l'argument `topo =` avec pour valeur `"rectangular"` et `"hexagonal"`, respectivement.
119
+
120
+
Avec la matrice `envir_mat` mise à votre disposition, calculez la SOM pour une grille hexagonale de 3 par 3. Afficher le résumer de votre objet avec la fonction `summary()`
121
+
122
+
```{r mat_prep}
123
+
envir %>.%
124
+
select(., - rownames) %>.%
85
125
scale(.) %>.%
86
-
as.matrix(.) -> MATRIX
126
+
as.matrix(.) -> envir_mat
127
+
```
87
128
88
-
som. <- som(MATRIX, grid = somgrid(X, Y, topo = "hexagonal"))
89
-
# un premier graphique de diagnostic est le nombre d'observation pour
grade_code("Et voila ... vous venez de réaliser votre première SOM ! Comme vous le constatez, le résumé de l'objet que vous venez de créer ne vous fournit pas beaucoup d'informations. Pas de panique ! La SOM étant une technique esssentiellement visuelle, c'est en réalisant différents types de graphiques que vous allez obtenir l'information.")
155
+
```
156
+
157
+
### Évolution de l'apprentissage
158
+
159
+
```{r carte_prep}
160
+
envir %>.%
161
+
select(., - rownames) %>.%
111
162
scale(.) %>.%
112
-
as.matrix(.) -> envi_mat
163
+
as.matrix(.) -> envir_mat
164
+
set.seed(198) # fixe le générateur pseudo-aléatoire.
Lors de la réalisation d'une technique visuelle comme la SOM, le plus important c'est de représenter graphiquement la carte. Vous pouvez la réaliser avec des graphiques R de base en utilisant la fonction `plot()`. Il existe plusieurs types de graphiques disponibles, vous pouvez dès lors consulter l'aide en ligne `plot.kohonen` pour en savoir plus.
question("Selon vous quelle est la grille la plus adpatée afin de représenter les données provenant d `enviro` ?",
125
-
answer("Une grille 2 sur 1"),
126
-
answer("Une grille 3 sur 3", correct = TRUE),
127
-
answer("Une grille 5 sur 6"),
128
-
allow_retry = TRUE)
180
+
```{r changes_h2-solution}
181
+
plot(envir_som, type = "changes")
129
182
```
130
183
131
-
## Exploration graphique de som
184
+
```{r changes_h2-check}
185
+
grade_code("L’objectif est de réduire le plus possible les distances des stations par rapport aux cellules dans lesquelles elles devraient venir se placer. On cherche donc à être le plus bas possible sur l'axe des ordonnées. Ici, on constate qu'à partir de la 60^ème^ itération, la courbe ne diminue plus de manière significative.")
186
+
```
132
187
133
-
Utilisez à nouveau le jeu de données `enviro`.
188
+
### Stations sur la carte
134
189
135
-
- Réalisez une grille 3 sur 3
136
-
- Réalisez un graphique de type = "codes"
190
+
Vous allez maintenant placer les stations dans la carte. Pour cela, vous devez utiliser l'argument `type = "mapping"`. Afin d'avoir une grille hexagonale, vous pouvez utiliser l'argument `shape = "straight"`.
137
191
138
-
```{r, echo=TRUE, eval=FALSE}
139
-
# function de base
140
-
DF %>.%
141
-
scale(.) %>.%
142
-
as.matrix(.) -> MATRIX
192
+
Réprésentez cette carte pour `envir_som`. Utilisez l'argument `labels =` pour afficher le numéro des stations disponibles dans la colonne `station` du jeu de données `envir`
143
193
144
-
som. <- som(MATRIX, grid = somgrid(X, Y, topo = "hexagonal"))
145
-
# un premier graphique de diagnostic est le nombre d'observation pour
146
-
plot(som., type = "mapping", shape = "straight")
147
-
plot(som., type = "codes",
148
-
codeRendering = "segments", shape = "straight")
149
-
plot(zoo_som, type = "changes", shape = "straight")
___(envir_som, type = ___, shape = ___, labels = envir$station)
154
200
```
155
201
156
-
```{r som1_noscore-hint-1}
157
-
DF %>.%
158
-
scale(.) %>.%
159
-
as.matrix(.) -> MATRIX
202
+
```{r mapping_h2-solution}
203
+
plot(envir_som, type = "mapping", shape = "straight", labels = envir$station)
204
+
```
160
205
161
-
som. <- som(MATRIX, grid = somgrid(X, Y, topo = "hexagonal"))
162
-
# un premier graphique de diagnostic est le nombre d'observation pour
163
-
plot(som., type = "mapping", shape = "straight")
164
-
plot(som., type = "codes",
165
-
codeRendering = "segments", shape = "straight")
166
-
plot(zoo_som, type = "changes", shape = "straight")
206
+
```{r mapping_h2-check}
207
+
grade_code("Bravo ! Le graphique que vous venez d'obtenir permet de voir comment les stations sont regroupées. Les stations qui sont dans la même cellule ont des caractéristiques environnementales relativement similaires. Les stations regroupées dans les cellules à proximité de la cellule en haut à droite auront des caractérisques environnementales assez proche par contre les stations présentent dans des cellules plus éloignées, en bas à gauche par exemple, seront différentes. Il est possible de visualiser ces différences dans un autre graphique et c'est ce que vous allez faire maintenant.")
167
208
```
168
209
169
-
```{r som1_noscore-hint-2}
170
-
DF %>.%
171
-
scale(.) %>.%
172
-
as.matrix(.) -> MATRIX
210
+
### Représentation des variables
173
211
174
-
som. <- som(MATRIX, grid = somgrid(X, Y, topo = "hexagonal"))
175
-
# un premier graphique de diagnostic est le nombre d'observation pour
176
-
plot(som., type = "codes",
177
-
codeRendering = "segments", shape = "straight")
178
-
```
212
+
Les cellules représentent des stations présentants des compositions différentes. La carte SOM étant orientée, il est possible de lui associer des informations relatives aux variables. Le graphique obtenu avec l'argument `type = "codes"` permet la visualisation de ces différences de façon générale.
179
213
180
-
```{r som1_noscore-hint-3}
181
-
enviro %>.%
182
-
scale(.) %>.%
183
-
as.matrix(.) -> enviro_mat
214
+
Représentez ce graphique pour `envir_som` dans une grille hexagonale et en utilisant l'argument `codeRendering = "segments"` pour représenter les variables.
# un premier graphique de diagnostic est le nombre d'observation pour
187
-
plot(som., type = "codes",
188
-
codeRendering = "segments", shape = "straight")
220
+
```{r codes_h2-hint-1}
221
+
___(envir_som, type = "codes", codeRendering = ___, shape = ___)
189
222
```
190
223
191
-
```{rsom1_noscore-check}
192
-
# TODO
224
+
```{rcodes_h2-solution}
225
+
plot(envir_som, type = "codes", codeRendering = "segments", shape = "straight")
193
226
```
194
227
195
-
Après avoir réalisé ce graphiques, tentez de l'analyser.
228
+
```{r codes_h2-check}
229
+
grade_code("On remarque sur ce graphique que les stations présentants les concentrations les plus élevées en `P`, `K`, `Ca`, `Mg` et `S` sont sur la droite de la carte alors que les concentrations les plus basses sont à gauche. Les stations en haut de la carte présentent des concentrations plus élevée en `Al` et en `F` contrairement aux stations du bas. L'épaisseur de l'humus est la plus grande pour les stations en bas de la carte de même que la surface de sol nu. Le pH est quant à lui plus élevé dans les stations en haut à droite.")
230
+
```
196
231
197
232
## Conclusion
198
233
199
-
Vous venez de terminer votre séance d'exercice.
234
+
C'est excellent ! Vous êtes arrivé à la fin de auto-évaluation relative aux cartes auto-adaptative. Vous avez acquis de nouveaux outils vous permettant l'analyse et l'interprétation d'un jeu de données multivariées. Essayez maintenant d'appliquer ces techniques dans une assigantion GitHub.
200
235
201
236
```{r comm_noscore, echo=FALSE}
202
237
question_text(
203
-
"Laissez-nous vos impressions sur ce learnr",
238
+
"Laissez-nous vos impressions sur cet outil pédagogique",
204
239
answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
0 commit comments