Skip to content

Commit c136aea

Browse files
add new exercises in B06Lb_kmeans
1 parent 59d0b7c commit c136aea

File tree

2 files changed

+147
-23
lines changed

2 files changed

+147
-23
lines changed

inst/tutorials/B06La_ahc/B06La_ahc.Rmd

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ doubs$xy %>.%
7171
doubs$species %>.%
7272
sselect(., -English) %>.%
7373
smutate(., Scientific = paste0("*", Scientific, "*")) %>.%
74-
srename(., `Nom Scientifique` = Scientific, `Nom français` = French,
74+
srename(., `Nom scientifique` = Scientific, `Nom français` = French,
7575
Code = code) %>.%
7676
knitr::kable(.)
7777
```
@@ -138,7 +138,7 @@ question("À partir des données du tableau `fish`, vous souhaitez réaliser un
138138
A partir du jeu de données `fish`, calculez la matrice de distances entre stations en utilisant l'indice de Bray-Curtis et `dissimilarity()`, considérant que toutes les fonctions nécessaires sont déjà chargées dans R. Pour une aide concernant les arguments de la fonction, voyez `?vegan::vegdist`.
139139

140140
```{r fish_bray_h2, exercise=TRUE}
141-
print(fish_dist <- ___(___, ___))
141+
print(fish_dist <- ___(___, ___ = ___))
142142
```
143143

144144
```{r fish_bray_h2-hint-1}
@@ -311,11 +311,11 @@ grade_code("Félicitation ! Vous venez de réaliser votre premier dendrogramme.
311311

312312
### Dendrogramme 2
313313

314-
Réalisez un nouveau dendrogramme à partir de l'objet `envir_dist` mais cette fois-ci, utilisez la **méthode de Ward D2**. Voyez l'aide en ligne de la fonction `?stats::hclust` pour le détails des arguments à employer. Tracez ensuite votre dendrogramme de manière **circulaire**.
314+
Réalisez un nouveau dendrogramme à partir de l'objet `envir_dist` mais cette fois-ci, utilisez la **méthode de Ward D2**. Voyez l'aide en ligne de la fonction `?stats::hclust` pour le détails des arguments à employer. Tracez ensuite votre dendrogramme de manière **circulaire** (utilisez la même logique que pour obtenir un dendrogramme horizontal).
315315

316316
```{r hclust2_h3, exercise=TRUE, exercise.setup="hac_prep"}
317317
envir_clust <- ___(___, ___)
318-
___(___)
318+
___$___(___)
319319
```
320320

321321
```{r hclust2_h3-hint-1}

inst/tutorials/B06Lb_kmeans/B06Lb_kmeans.Rmd

Lines changed: 143 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
2-
title: "K-moyennes"
2+
title: "K-moyennes et indices de diversité"
33
author: "Guyliann Engels, Raphael Conotte & Philippe Grosjean"
4-
description: "**SDD II Module 9** Regroupement des données par les K-moyennes."
4+
description: "**SDD II Module 6** Regroupement des données par les K-moyennes et indices de diversité."
55
tutorial:
66
id: "B06Lb_kmeans"
7-
version: 2.1.0/4
7+
version: 2.2.0/8
88
output:
99
learnr::tutorial:
1010
progressive: true
@@ -18,6 +18,7 @@ SciViews::R("explore")
1818
# Preparation dataset
1919
data("doubs", package = "ade4")
2020
envir <- as_dtx(doubs$env)
21+
fish <- as_dtx(doubs$fish)
2122
```
2223

2324
```{r, echo=FALSE}
@@ -32,20 +33,23 @@ BioDataScience2::learnr_server(input, output, session)
3233

3334
## Objectifs
3435

35-
La méthode des k-moyennes ("k-means" en anglais) permet de réaliser des regroupements d'individus en partant d'un tableau multivarié. Elle a donc le même objectif que la classification hiérarchique ascendante (CAH) que vous avez découverte dans le module précédent. La méthode des k-moyennes a l'avantage, par rapport à la classification ascendante hiérarchique, d'être moins gourmande en temps de calcul et en mémoire vive. Elle sera donc à privilégier lorsque vous vous retrouvez confronté à un grand jeu de données. Par contre, elle est souvent moins efficace que la CAH.
36+
- Vérifiez que vous avez compris les différentes étapes de la classification par les k-moyennes : choix du nombre de groupes, classification par les k-moyennes, récupération des coordonnées des centres et représentation graphique.
37+
- Vous préparer à analyser et interpréter de manière autonome un jeu de données multivariées à l'aide des k-moyennes
38+
- Vous familiarisez avec les indices de diversité : richesse spécifique, indice de Shannon, indice de Jaccard...
3639

37-
Dans ce tutoriel, vous allez pouvoir auto-évaluer votre capacité à :
40+
N'entamez ce tutoriel qu'après avoir compris le principe des k-moyennes et les indices de diversité proposés dans le [module 6](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2022/k-moyennes.html) du cours. Assurez-vous d'avoir réalisé les exercices H5P qui s'y trouvent avant de vous lancer dans ce tutoriel-ci.
3841

39-
- comprendre les différentes étapes de la classification par les k-moyennes : choix du nombre de groupes, classification par les k-moyennes, récupération des coordonnées des centres et représentation graphique.
40-
- analyser et interpréter de manière autonome un jeu de données multivariées à l'aide des k-moyennes
42+
## Communautés piscicoles de rivière
4143

42-
N'entamez ce tutoriel qu'après avoir compris le principe des k-moyennes proposé dans le [module 6](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2022/k-moyennes.html) du cours. Assurez-vous d'avoir réalisé les exercices H5P qui s'y trouvent avant de vous lancer dans ce tutoriel-ci.
44+
Nous utilisons ici les mêmes jeux de données longuement présentés dans le tutoriel précédent sur la classification ascendante hiérarchique. Trente stations ont été échantillonnées le long du Doubs, une rivière qui serpente entre la France et la Suisse.
4345

44-
## Données environnementales du Doubs
46+
![Carte du Doubs, d'après OpenStreetMap.](images/doubs.jpg){width="60%"}
4547

46-
Nous utilisons ici le même jeu de données concernant les variables environnementales mesurées à 30 stations le long du Doubs, une rivière qui serpente entre la France et la Suisse. Il ne s'agit pas d'un gros jeu de données, et vous avez pu constater que la CAH s'y applique facilement. Néanmoins, nous le conservons à des fins de comparaison entre les deux techniques k-moyennes et CAH.
48+
Les données environnementales se trouvent dans le tableau `envir` dont voici les premières lignes
4749

48-
![Carte du Doubs, d'après OpenStreetMap.](images/doubs.jpg){width="60%"}
50+
```{r}
51+
head(envir)
52+
```
4953

5054
Pour rappel, le tableau suivant reprend les onze variables mesurées. Rappelez-vous que les auteurs de l'étude d'où sont issues ces données ont décidé d'appliquer des coefficients multiplicateurs pour homogénéiser les données :
5155

@@ -63,17 +67,38 @@ Pour rappel, le tableau suivant reprend les onze variables mesurées. Rappelez-v
6367
| **oxy** | oxygène dissout | mg/L \* 10 |
6468
| **bdo** | demande biologique en oxygène | mg/L \* 10 |
6569

66-
Voici les premières lignes du tableau `envir` qui contient ces données.
70+
Les observations relatives à la distribution des poissons sont disponibles dans le tableau `fish` dont voici les premières lignes. Pour rappel, les valeurs sont toutes bornées entre 0 et 5. Il s'agit en fait de **classes d'abondance**, avec 0 = absence et 5 = abondance maximale, voir [ce descriptif complet](http://pbil.univ-lyon1.fr/R/pdf/pps047.pdf){target="_blank"}.
6771

6872
```{r}
69-
head(envir)
73+
head(fish)
7074
```
7175

72-
## Choix du nombre de clusters
76+
Les 27 espèces de poisson étudiées au sein des 30 stations sont présentées dans le tableau ci-dessous
77+
78+
```{r, echo=FALSE}
79+
doubs$species %>.%
80+
sselect(., -English) %>.%
81+
smutate(., Scientific = paste0("*", Scientific, "*")) %>.%
82+
srename(., `Nom scientifique` = Scientific, `Nom français` = French,
83+
Code = code) %>.%
84+
knitr::kable(.)
85+
```
86+
87+
**Référence**
88+
89+
Verneaux, J. (1973) Cours d'eau de Franche-Comté (Massif du Jura). Recherches écologiques sur le réseau hydrographique du Doubs. Essai de biotypologie. Thèse d'état, Besançon. 1--257.
90+
91+
## K-moyennes
92+
93+
La méthode des k-moyennes ("k-means" en anglais) permet de réaliser des regroupements d'individus en partant d'un tableau multivarié. Elle a donc le même objectif que la classification ascendante hiérarchique (CAH) que vous avez découverte précédemment. La méthode des k-moyennes a l'avantage, par rapport à la classification ascendante hiérarchique, d'être moins gourmande en temps de calcul et en mémoire vive. Elle sera donc à privilégier lorsque vous vous retrouvez confronté à un grand jeu de données. Par contre, elle est souvent moins efficace que la CAH.
94+
95+
Dans ce tutoriel, les données employées ne sont pas de gros jeux de données, et vous avez pu constater que la CAH s'y applique facilement. Néanmoins, nous les conservons à des fins de comparaison entre les deux techniques k-moyennes et CAH.
96+
97+
### Étape 1 : Choix du nombre de clusters
7398

74-
Avec la méthode des k-moyennes, vous devez spécifier le nombre de groupes que vous souhaitez réaliser à l'avance. Souvent, à ce stade de l'analyse, il est inconnu. Vous pouvez utiliser `profile_k()` pour vous aider à choisir la valeur de *k* qui diminuera le plus la somme des carrés des distances intra-groupes, comme indicateur de la qualité de votre regroupement.
99+
Avec la méthode des k-moyennes, vous devez spécifier le nombre de groupes que vous souhaitez réaliser à l'avance. Souvent, à ce stade de l'analyse, il est inconnu. Vous pouvez utiliser `profile_k()` pour vous aider à choisir la valeur de *k* qui diminuera le plus la somme des carrés des distances intragroupes, comme indicateur de la qualité de votre regroupement.
75100

76-
Sur base du jeu de données `envir`, réalisez un graphique permettant d'estimer le nombre de groupes à employer dans la méthode des k-moyennes. Les variables mesurées ayant des unités différentes, n'oubliez pas de **standardiser** vos données en utilisant la fonction `scale()` et assignez les ensuite à `envir_scale`. Ce n'est pas le cas pour ce jeu de données, mais pensez aussi à éliminer les colonnes non numériques à l'aide de `select()` si vous en avez dans votre tableau de départ.
101+
Sur base du jeu de données `envir`, réalisez un graphique permettant d'estimer le nombre de groupes à employer dans la méthode des k-moyennes. Les variables mesurées ayant des unités différentes, n'oubliez pas de **standardiser** vos données en utilisant la fonction `scale()` et assignez-les ensuite à `envir_scale`. Ce n'est pas le cas pour ce jeu de données, mais pensez aussi à éliminer les colonnes non numériques à l'aide de `select()` si vous en avez dans votre tableau de départ.
77102

78103
```{r nbclust_h2, exercise=TRUE}
79104
envir_scale <- ___(___)
@@ -110,7 +135,7 @@ question("Sur base du graphique que vous avez réalisé, quelle valeur de k util
110135
incorrect = "Retentez votre chance. Nous recherchons des sauts importants dans la décroissance de la somme des carrés (*total within sum of square*). L'objectif est de choisir la valeur de *k* à la base du coude, lorsque l'ajout d'un *k* supplémentaire ne permet plus de faire baisser la somme des carrés de manière importante.")
111136
```
112137

113-
## Calcul des k-moyennes
138+
### Étape 2 : Calcul des k-moyennes
114139

115140
Maintenant que vous avez défini la valeur de *k* que vous allez utiliser, vous pouvez procéder au calcul des k-moyennes en utilisant la fonction `k_means()`. Vous lui fournirez le tableau de départ contenant uniquement des valeurs numériques éventuellement *standardisées* et spécifierez le nombre `k =` de groupes souhaités.
116141

@@ -146,7 +171,7 @@ grade_code("Vous venez de réaliser votre première classification par les k moy
146171

147172
### Graphique du regroupement
148173

149-
Réaliser un graphique des nitrates `nit` en fonction de l'oxygène dissout `oxy`. Regrouper les stations par de la couleur en utilisant les groupes que vous avez calculé et représentez les centres sur votre graphique.
174+
Réaliser un graphique des nitrates `nit` en fonction de l'oxygène dissout `oxy`. Regroupez les stations par de la couleur en utilisant les groupes que vous avez calculés et représentez les centres sur votre graphique.
150175

151176
```{r graphe_prep}
152177
envir_scale <- as_dtx(scale(envir))
@@ -177,9 +202,108 @@ chart(envir_kmn, choices = c("oxy", "nit"))
177202
grade_code("Vous voyez comme c'est facile ! Les fonctions SciViews vous facilitent la tâche. Naturellement, vous pouvez aussi choisir d'autres paires de variables pour visualiser votre regroupement.")
178203
```
179204

205+
## Indice de diversité
206+
207+
La notion de diversité est complexe. On peut néanmoins faire ressortir deux éléments principaux que sont le nombre d'espèces différentes présentes sur la zone d'étude et l'abondance de chaque espèce. Il existe une multitude d'indices, dont la richesse spécifique, l'indice de Simpson, l'indice de Shannon...
208+
209+
Un des premiers indices mis au point est la richesse spécifique. Cet indice dénombre les espèces sur une zone déterminée. Déterminez la richesse spécifique pour chaque station. Employez l'objet `fish` et utilisez la fonction adéquate.
210+
211+
```{r richness_h2, exercise = TRUE}
212+
___::___()
213+
```
214+
215+
```{r richness_h2-hint-1}
216+
vegan::___(fish)
217+
218+
#### ATTENTION: Hint suivant = solution !####
219+
```
220+
221+
```{r richness_h2-solution}
222+
## Solution ##
223+
vegan::specnumber(fish)
224+
```
225+
226+
```{r richness_h2-check}
227+
grade_code("Bien joué ! Vous avez utilisé la fonction adéquate. La fonction specnumber() se trouve dans le package {vegan}. Ce package a été développé pour aider à l'étude des communautés en écologie. Il ne vous reste plus qu'à analyser le résultat afin de répondre à la question suivante.")
228+
```
229+
230+
```{r qu_richness}
231+
question("Quelle est la station avec la richesse spécifique la plus élevée ?",
232+
answer("Station 1"),
233+
answer("Station 8"),
234+
answer("Station 15"),
235+
answer("Station 29", correct = TRUE),
236+
answer("Station 30"),
237+
allow_retry = TRUE,
238+
correct = "Bravo, Vous avez trouvé la bonne réponse.",
239+
incorrect = "Retentez votre chance. Les stations sont affiché de la numéro 1 à la numéro 30.")
240+
```
241+
242+
Cet indice est simple et facile à comprendre. Attention, ce dernier a donc une limite que vous devez bien retenir. Cet indice ne tient pas compte de l'abondance de chaque espèce étudiée. Il pourrait tout à fait être complété par l'indice de Shannon.
243+
244+
Vous avez découvert une série d'indices de similarité ou de dissimilarité au cours de ce module 6. Nous vous proposons d'employer à présent l'indice de Jaccard. Cet indice permet une comparaison entre deux sites en calculant le rapport entre les espèces communes aux deux sites et celles propres à chaque relevé. La formule est la suivante :
245+
246+
$$I = \frac{N_c}{N_1 + N2 – N_c}$$
247+
248+
où :
249+
250+
- $N_c$ correspond au nombre de taxons communs entre les deux sites
251+
- $N_1$ et $N_2$ le nombre de taxons présents sur le site 1 et 2, respectivement
252+
253+
Les valeurs de l'indice varient entre 0 lorsque les deux sites n'ont aucune espèce en commun, et 1 quand les deux sites ont toutes leurs espèces en commun. Utilisez l'indice de Jaccard pour calculer une matrice de distance entre les trente stations.
254+
255+
Comparez les stations entre elles deux à deux à l'aide de l'indice de Jaccard sur le tableau `fish`. Nommez cet objet `fish_jacc`.
256+
257+
```{r jaccard_h2, exercise = TRUE}
258+
___ <- ___(___, ___, ___)
259+
```
260+
261+
```{r, jaccard_h2-hint-1}
262+
fish_jacc <- ___(___, method = ___, binary = ___)
263+
```
264+
265+
```{r, jaccard_h2-solution}
266+
fish_jacc <- dissimilarity(fish, method = "jaccard", binary = TRUE)
267+
```
268+
269+
```{r jaccard_h2-check}
270+
grade_code("Bien joué ! Vous avez utilisez la fonction adéquate. L'indice de Jaccard traite un tableau de type absence/présence que vous spécifié à l'aide de binary = TRUE.")
271+
```
272+
273+
À présent que vous avez obtenu votre matrice de distance (`fish_jacc`), vous pouvez l'employer afin d'obtenir un dendrogramme avec la méthode `ward.D2`.
274+
275+
```{r jacc_prep}
276+
fish_jacc <- dissimilarity(fish, method = "jaccard", binary = TRUE)
277+
```
278+
279+
```{r cah_h2, exercise=TRUE, exercise.setup="jacc_prep"}
280+
# Calcul de la CAH avec la méthod des liens "ward.D2"
281+
fish_clust <- ___(___, ___)
282+
# Dendrogramme horizontal
283+
___(___)
284+
```
285+
286+
```{r cah_h2-hint-1}
287+
# Calcul de la CAH avec la méthod des liens "ward.D2"
288+
fish_clust <- cluster(___, method = ___)
289+
# Dendrogramme horizontal
290+
chart$___(fish_clust)
291+
```
292+
293+
```{r cah_h2-solution}
294+
# Calcul de la CAH avec la méthod des liens "ward.D2"
295+
fish_clust <- cluster(fish_jacc, method = "ward.D2")
296+
# Dendrogramme horizontal
297+
chart$horizontal(fish_clust)
298+
```
299+
300+
```{r cah_h2-check}
301+
grade_code("Bien joué ! Vous avez obtenu un dendrogramme horizontal intéressant. On peut par exemple observer que les station 23, 24 et 25 sont regroupées. Elles se différencient des stations précédentes (16-22) et des stations suivantes (26-30) entre autre par une richesse spécifique plus faible. On ne tient pas compte de la station 8 qui ne comprend pas espèce.")
302+
```
303+
180304
## Conclusion
181305

182-
Vous venez de terminer votre auto-évaluation relative à la classification par les k-moyenne. Vous êtes maintenant prêts pour appliquer cette technique sur d'autres données par vous-même dans une assignation GitHub.
306+
Vous venez de terminer votre auto-évaluation relative à la classification par les k-moyenne et les indices de diversité. Vous êtes maintenant prêts pour les appliquer sur d'autres données par vous-même dans une assignation GitHub.
183307

184308
```{r comm_noscore, echo=FALSE}
185309
question_text(

0 commit comments

Comments
 (0)