Skip to content

Commit 54349ac

Browse files
committed
B05La_cah first part of the revision
1 parent ec030d6 commit 54349ac

File tree

18 files changed

+69
-2969
lines changed

18 files changed

+69
-2969
lines changed

devel/tutorials/B05La_CAH/B05La_CAH.Rmd

Lines changed: 64 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
---
22
title: "Classification hiérarchique"
33
author: "Guyliann Engels, Raphael Conotte & Philippe Grosjean"
4-
description: "**SDD II Module 5** Application des concepts à la classification hiérarchique."
4+
description: "**SDD II Module 5** Classification hiérarchique."
55
tutorial:
6-
id: "B05La_CAH"
6+
id: "B05La_cah"
77
version: 2.0.0/10
88
output:
99
learnr::tutorial:
@@ -14,8 +14,7 @@ runtime: shiny_prerendered
1414
```{r setup, include=FALSE}
1515
BioDataScience2::learnr_setup()
1616
SciViews::R()
17-
library(ade4)
18-
data("doubs")
17+
data("doubs", package = "ade4")
1918
enviro <- doubs$env
2019
fish <- doubs$fish
2120
```
@@ -38,17 +37,17 @@ BioDataScience2::learnr_server(input, output, session)
3837

3938
- Appréhender la classification hiérarchique et le dendrogramme.
4039

41-
- Maîtriser l'utilisation de la fonction `hclust`.
40+
- Maîtriser l'utilisation de la fonction `hclust`.
4241

4342
- Être capable d’effectuer un regroupement pertinent des individus d’un jeu de données multivarié à l’aide de ces techniques.
4443

4544
Vous devez avoir étudié le contenu du [module 5](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2020/hierarchique.html) du cours.
4645

47-
## Abondance d'espèces de poissons
46+
## Communautés piscicoles de rivière
4847

49-
Des scientifiques ont réalisé des mesures d'abondance d'espèces de poissons et des mesures physico-chimiques sur 30 stations différentes.
48+
L'abondance de diverses espèces de poissons, ainsi que les conditions physico-chimiques associées sont mesurées sur 30 stations différentes le long du Doubs, une rivière qui s'écoule en Suisse et en France.
5049

51-
L'objet `doubs` du package `ade4` est une liste qui contient 4 jeux de donnnées. Dans un premier temps, vous allez vous intéresser aux données sur l'abondance de 27 espèces de poissons sur les 30 sites. Ces données, présentent dans l'objet `fish`, sont présentées ci-dessous.
50+
Dans un premier temps, vous allez vous intéresser aux données sur l'abondance de 27 espèces de poissons sur les 30 sites (dans `fish`).
5251

5352
```{r}
5453
head(fish)
@@ -57,26 +56,26 @@ head(fish)
5756
### Choix de l'indice
5857

5958
```{r qu_indice1}
60-
question("À partir des données du tableau présenté ci-dessus, vous souhaitez réaliser un matrice de distance avec l'indice le plus adapté. Quel indice choississez vous ? (plusieurs réponses peuvent être sélectionnés)",
61-
answer("Indice de Bray-Curtis", correct = TRUE),
62-
answer("Indice de Canberra", correct = TRUE),
63-
answer("Distance Euclidienne"),
64-
answer("Indice de Manhattan"),
65-
allow_retry = TRUE, random_answer_order = TRUE)
59+
question("À partir des données du tableau présenté ci-dessus, vous souhaitez réaliser un matrice de distance avec l'indice le plus adapté. Quel indice pourriez-vous choisir ? (plusieurs réponses peuvent être sélectionnés)",
60+
answer("Indice de Bray-Curtis", correct = TRUE),
61+
answer("Indice de Canberra", correct = TRUE),
62+
answer("Distance Euclidienne"),
63+
answer("Indice de Manhattan"),
64+
allow_retry = TRUE, random_answer_order = TRUE)
6665
```
6766

6867
### Indice de Bray-Curtis
6968

70-
A partir des données contenues dans `fish`, calculez la matrice de distances en utilisant l'indice de Bray_Curtis utilisé par défaut dans la fonction `vegdist()`.
69+
A partir du jeu de données `fish`, calculez la matrice de distances en utilisant l'indice de Bray-Curtis utilisé par défaut dans la fonction `vegdist()`.
7170

72-
```{r bray_h2, exercise = TRUE}
73-
fish_dist <- <- ___(___)
71+
```{r bray_h2, exercise=TRUE}
72+
fish_dist <- ___(___)
7473
# Afficher la matrice de distances arrondie à 2 décimales
7574
___(___, ___)
7675
```
7776

7877
```{r bray_h2-hint-1}
79-
enviro_dist <- vegan::vegdist(DF)
78+
fish_dist <- vegan::vegdist(DF)
8079
# Afficher la matrice de distances arrondie à 2 décimales
8180
round(OBJECT_DIST, ___)
8281
@@ -90,21 +89,21 @@ round(fish_dist, 2)
9089
```
9190

9291
```{r bray_h2-check}
93-
grade_code("Bravo ! Vous venez de réaliser votre première matrice de distances. Savez-vous qu'il existe d'autres indices ? Vous pouvez facilement changer de methode de calcul en utilisant l'argument `method =` de la fonction `vegdist()` en précisant entre guillements l'indice que vous souhaitez utiliser ("canberra" pour l'indice de Canberra, "euclidean" pour la distance Euclidienne et "manhattan" pour la distance de Manhattan.)")
92+
grade_code("Vous venez de réaliser votre première matrice de distances. L'argument `method =` de la fonction `vegdist()` précise la métrique utilisée : \"canberra\" pour l'indice de Canberra, \"euclidean\" pour la distance Euclidienne et \"manhattan\" pour la distance de Manhattan.")
9493
```
9594

9695
### Indice de Canberra
9796

98-
A partir des données contenues dans `fish`, calculez la matrice de distances en utilisant l'indice de Canberra pour l'argument `method =` dans la fonction `vegdist()`.
97+
A partir des mêmes données dans `fish`, calculez la matrice de distances en utilisant cette fois l'indice de Canberra.
9998

100-
```{r canberra_h2, exercise = TRUE}
101-
fish_dist <- <- ___(___, ___)
99+
```{r canberra_h2, exercise=TRUE}
100+
fish_dist <- ___(___, ___)
102101
# Afficher la matrice de distances arrondie à 2 décimales
103102
___(___, ___)
104103
```
105104

106105
```{r canberra_h2-hint-1}
107-
enviro_dist <- vegan::vegdist(DF, method = ___)
106+
fish_dist <- vegan::vegdist(DF, method = ___)
108107
# Afficher la matrice de distances arrondie à 2 décimales
109108
round(OBJECT_DIST, ___)
110109
@@ -118,26 +117,24 @@ round(fish_dist, 2)
118117
```
119118

120119
```{r canberra_h2-check}
121-
grade_code("Facile non ! Notez aussi que les matrices de distances ne sont pas prévues pour être imprimées et visualisées telles quelles. Ils constituent la première étape vers une représentation utile à l’aide de la classification hiérarchisée. Réprésentation qui sera abordée un peu plus loin dans ce learnr !")
120+
grade_code("Rappelez-vous que ces matrices de distances ne sont pas prévues pour être imprimées et visualisées telles quelles. Elles constituent la première étape vers une représentation utile, par exemple, un dendrogramme obtenu par classification hiérarchique ascendante.")
122121
```
123122

124123
## Données environnementales
125124

126-
En plus des données sur l'abondance de 27 espèces de poisson, l'objet `doubs` du package `ade4` contient également les données portant sur les mesures environnementales. Le tableau présenté ci-dessous comprend 30 sites d'échantillonages avec 11 mesures environnementales.
127-
128-
Voici une courte description des variables étudiées (en anglais). Ces informations proviennent de la page d'aide `?ade4::doubs`
125+
En plus des données sur l'abondance de 27 espèces de poissons, les données environnementales sont à votre disposition dans `enviro`. Onze mesures ont été réalisées sur chacune des 30 stations (voir `?ade4::doubs` pour plus de détails).
129126

130-
- dfs : distance from the source (km * 10),
131-
- alt : altitude (m),
132-
- slo : (log(x + 1) where x is the slope (per mil * 100),
133-
- flo : minimum average stream flow (m3/s * 100),
134-
- pH : pH,
135-
- har : total hardness of water (mg/l of Calcium),
136-
- pho : phosphates (mg/l * 100),
137-
- nit : nitrates (mg/l * 100),
138-
- amm : ammonia nitrogen (mg/l * 100),
139-
- oxy : dissolved oxygen (mg/l * 10),
140-
- bdo : biological demand for oxygen (mg/l * 10)
127+
- **dfs\ :** distance depuis la source (km * 10),
128+
- **alt\ :** altitude (m),
129+
- **slo\ :** pente du sol de la rivière transformée en `log(x + 1)`,
130+
- **flo\ :** flux moyen minimum (m^3^/s * 100),
131+
- **pH\ :** pH de l'eau,
132+
- **har\ :** dureté totale de l'eau (mg Ca^++^/L),
133+
- **pho\ :** phosphates (mg/L * 100),
134+
- **nit\ :** nitrates (mg/L * 100),
135+
- **amm\ :** azote ammoniacal (mg/L * 100),
136+
- **oxy\ :** oxygène dissout (mg/L * 10),
137+
- **bdo\ :** demande biologique en oxygène (mg/L * 10)
141138

142139
```{r}
143140
head(enviro)
@@ -146,12 +143,12 @@ head(enviro)
146143
### Choix de l'indice
147144

148145
```{r qu_indice2}
149-
question("Vous souhaitez réaliser un matrice de distances sur les données présentent dans ce tableau. Quels sont les indices le plus adapté.?",
150-
answer("Indice de Bray-Curtis"),
151-
answer("Indice de Canberra"),
152-
answer("Distance Euclidienne", correct = TRUE),
153-
answer("Indice de Manhattan", correct = TRUE),
154-
allow_retry = TRUE, random_answer_order = TRUE)
146+
question("Vous souhaitez réaliser un matrice de distances sur les données présentent dans ce tableau. Quels sont les indices les plus adaptés ?",
147+
answer("Indice de Bray-Curtis"),
148+
answer("Indice de Canberra"),
149+
answer("Distance Euclidienne", correct = TRUE),
150+
answer("Indice de Manhattan", correct = TRUE),
151+
allow_retry = TRUE, random_answer_order = TRUE)
155152
```
156153

157154
### Distance Euclidienne 1
@@ -179,35 +176,35 @@ round(enviro_dist, 2)
179176
```
180177

181178
```{r euclidean1_h2-check}
182-
grade_code("Très bien ! Mais les unités respectives de vos variables n'ont pas été considérées. L'altidude en (m) ou la concentration en nitrates (mg/l * 100), par exemple, ne sont pas mesurées dans les mêmes unités. Le risque est alors de donner plus de poids aux valeurs élevées. Il est donc préférable de commencer par standardiser le tableau (moyenne de zéro et écart type de un) selon les colonnes avant d’effectuer le calcul. La fonction `scale()` permet de le faire et c'est ce que vous allez réaliser dans l'exercice suivant.")
179+
grade_code("Mais ici, nous n'avons pas tenu compte du fiat que les variables sont mesurées dans des unités différentes. Rappelez-vous toujours de standardiser d'abord ce genre de données (moyenne = 0, écart type = 1).")
183180
```
184181

185182
### Distance Euclidienne 2
186183

187-
Calculez une nouvelle matrice de distances, mais cette fois après avoir standardisé les données avec la fonction `scale()`. Convertisser ensuite la matrice obtenue avec la fonction `as_tibble()` avant de procéder au calcul de la matrice de distances en utilisant la distance Euclidienne.
184+
Calculez une nouvelle matrice de distances, mais cette fois après avoir standardisé les données avec la fonction `scale()`. Convertissez ensuite la matrice obtenue avec la fonction `as_tibble()` avant de procéder au calcul de la matrice de distances en utilisant la distance Euclidienne.
188185

189-
```{r euclidean2_h2, exercise = TRUE}
190-
___%>.%
186+
```{r euclidean2_h2, exercise=TRUE, exercise.lines=5}
187+
___ %>.%
191188
# Standardisation des 11 colonnes
192189
___(___) %>.%
193-
# Conversion de la matrice en data.frame + tibble
190+
# Conversion de la matrice en tibble
194191
___(___) %>.%
195192
# Calcul de la matrice de distances
196193
___(___, ___) -> enviro_dist
197-
# Afficher la matrice de distance arrondies à 2 décimales
198-
___(___, ___)
194+
# Afficher les premières valeurs de la matrice
195+
head(___)
199196
```
200197

201198
```{r euclidean2_h2-hint-1}
202-
DF %>.%
199+
enviro %>.%
203200
# Standardisation des 11 colonnes
204-
scale(___) %>.%
205-
# Conversion de la matrice en data.frame + tibble
206-
as_tibble(___) %>.%
201+
___(.) %>.%
202+
# Conversion de la matrice en tibble
203+
___(.) %>.%
207204
# Calcul de la matrice de distances
208-
vegan::___(___, method = ___) -> enviro_dist
209-
# Afficher la matrice de distances arrondie à 2 décimales
210-
round(OBJECT_DIST, ___)
205+
vegan::___(., method = ___) -> enviro_dist
206+
# Afficher les premières valeurs de la matrice
207+
head(___)
211208
212209
#### ATTENTION: Hint suivant = solution !####
213210
```
@@ -216,22 +213,21 @@ round(OBJECT_DIST, ___)
216213
enviro %>.%
217214
# Standardisation des 11 colonnes
218215
scale(.) %>.%
219-
# Conversion de la matrice en data.frame + tibble
216+
# Conversion de la matrice en tibble
220217
as_tibble(.) %>.%
221218
# Calcul de la matrice de distances
222219
vegan::vegdist(., method = "euclidean") -> enviro_dist
223-
# Afficher la matrice de distances arrondie à 2 décimales
224-
round(enviro_dist, 2)
220+
# Afficher les premières valeurs de la matrice
221+
head(enviro_dist)
225222
```
226223

227224
```{r euclidean2_h2-check}
228-
grade_code("Félicitiation, vous gérez vraiment bien les matrices de distances. Vous pourriez aussi essayer une autre méthode sur ces données standardisées comme la distance de Manhattan en utilisant `method = "manhattan"`.")
225+
grade_code("Vous pourriez aussi essayer une autre méthode sur ces données standardisées comme la distance de Manhattan en utilisant `method = \"manhattan\"`.")
229226
```
230227

231-
## Classification hiérarchique
228+
## Classification hiérarchique
232229

233-
Maintenant que vous maitrisez le calcule des matrices de distances, vous pouvez obtenir facilement une matrice de distances entre toutes les paires de stations présentent dans le jeu de données `enviro`. Vous pouvez dès lors essayer de les regrouper en fonction de leur ressemblance.
234-
Vous allez maintenant apprendre à représenter graphiquement ces regroupements en utilisant un **dendrogramme**.
230+
Maintenant que vous pouvez calculer vos matrices de distances, passez à l'étape suivante et réalisez une classification hiérarchique ascendante, et puis un dendrogramme.
235231

236232
```{r hac_prep}
237233
enviro %>.%
@@ -304,7 +300,7 @@ enviro %>.%
304300
enviro_clust <- hclust(enviro_dist, method = "ward.D2")
305301
```
306302

307-
Réprésentez avec la fonction `plot()` le dendrogramme que vous venez de calculer dans l'exercice précédant. Matérialisez ensuite sur ce graphique une coupure en traçant un trait horizontal rouge avec la fonction `abline()` à une hauteur de 8. Vous avez à disposition l'objet `enviro_clust`.
303+
Représentez avec la fonction `plot()` le dendrogramme que vous venez de calculer dans l'exercice précédant. Matérialisez ensuite sur ce graphique une coupure en traçant un trait horizontal rouge avec la fonction `abline()` à une hauteur de 8. Vous avez à disposition l'objet `enviro_clust`.
308304

309305
```{r hclust3_h2, exercise = TRUE, exercise.setup = "group_prep"}
310306
___(___)
@@ -355,12 +351,12 @@ chart(data = enviro, alt ~ dfs %col=% group) +
355351
```
356352

357353
```{r hclust4_h2-check}
358-
grade_code("Félicitation ! Vous venez de réaliser une étude complète en utilisant la **classification ascendante hiérarchique**. ")
354+
grade_code("Vous venez de réaliser une étude complète en utilisant la **classification ascendante hiérarchique**. ")
359355
```
360356

361357
## Conclusion
362358

363-
Bravo ! Vous venez de terminer votre auto-évaluation relative aux matrices de distances et à la classification hiérarchique.
359+
Bravo\ ! Vous venez de terminer votre auto-évaluation relative aux matrices de distances et à la classification ascendante hiérarchique.
364360

365361
```{r comm_noscore, echo=FALSE}
366362
question_text(

0 commit comments

Comments
 (0)