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
- Vérifier que vous avez bien compris la logique et les différentes étapes de réalisation d'un dendrogramme : matrice de distance, classification ascendante hiérarchique (CAH), représentation graphique et coupure du dendrogramme pour obtenir des groupes.
44
44
- Vous préparer à analyser et interpréter de manière autonome un jeu de données multivariées à l'aide de la CAH.
45
45
46
-
Vous devez avoir étudié le contenu du [module 6](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2023/cah-kmeans-div.html){target="_blank"} du cours et réalisé les exercices H5P qui s'y trouvent avant de vous lancer dans ce tutoriel Learnr.
46
+
Vous devez avoir étudié le contenu du [module 6](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2024/cah-kmeans-div.html){target="_blank"} du cours et réalisé les exercices H5P qui s'y trouvent avant de vous lancer dans ce tutoriel Learnr.
47
47
48
48
## Communautés piscicoles de rivière
49
49
@@ -65,7 +65,7 @@ doubs$xy %>.%
65
65
theme_void()
66
66
```
67
67
68
-
À chaque station, les hommes de terrain ont effectué une collecte des poissons présents et les ont dénombrés. Au total, ils ont observé 27 espèces reprises dans la table suivante.
68
+
À chaque station, les hommes de terrain ont effectué une collecte des poissons présents et les ont dénombrés. Au total, ils ont observé 27 espèces reprises dans le tableau suivant.
69
69
70
70
```{r, echo=FALSE}
71
71
doubs$species %>.%
@@ -78,7 +78,7 @@ doubs$species %>.%
78
78
79
79

80
80
81
-
Le tableau de données, dans `fish` se présente comme ceci (seules les 6 premières lignes sont imprimées) :
81
+
Le tableau de données, dans `fish` se présente comme ceci (seules les six premières lignes sont imprimées) :
82
82
83
83
```{r, echo=TRUE}
84
84
head(fish)
@@ -118,24 +118,24 @@ question("À partir des données du tableau et de la description ci-dessus, quel
118
118
correct = "Bravo ! Ici les classes d'abondance de 0 à 5 sont parfaites. La question subsiste quant à garder ou non les espèces qui ne seraient observées que très, très rarement... mais comme nous n'avons pas à disposition les dénombrements bruts, nous ne pourrons pas le faire. Nous faisons donc confiance au prétraitement réalisé par les auteurs initiaux.")
119
119
```
120
120
121
-
## Étape 2 : matrice de distances
121
+
## Étape 2 : matrice de distance
122
122
123
123
Nous réalisons ensuite une matrice des distances entre stations. Des dizaines d'indices différents existent. Lequel ou lesquelles choisiriez-vous ici, si nous nous cantonnons aux quatre indices principaux détaillés dans le cours (pour une présentation vraiment beaucoup plus complète des indices, voyez [cet article](http://www.numericalecology.com/Reprints/Gower&Leg_JClass86.pdf){target="_blank"}) ?
124
124
125
125
```{r qu_indice_fish}
126
-
question("À partir des données du tableau `fish`, vous souhaitez réaliser un matrice de distances avec l'indice le plus adapté. Quel indice pourriez-vous choisir ? (plusieurs réponses peuvent être sélectionnées)",
126
+
question("À partir des données du tableau `fish`, vous souhaitez réaliser une matrice de distance avec l'indice le plus adapté. Quel indice pourriez-vous choisir ? (plusieurs réponses peuvent être sélectionnées)",
127
127
answer("Indice de Bray-Curtis", correct = TRUE),
128
128
answer("Indice de Canberra", correct = TRUE),
129
129
answer("Distance Euclidienne"),
130
130
answer("Indice de Manhattan"),
131
131
allow_retry = TRUE, random_answer_order = TRUE,
132
-
incorrect = "La grande question à se poser est celle de la représentativité des doubles zéros (et nous avons vu qu'il y en a beaucoup dans notre jeu de données.",
133
-
correct = "Seuls les indices qui n'utilisent pas les doubles zéros comme information sont pertinents ici. Canberra effectuera une pondération des espèces les unes par rapport aux autres contrairement à Bray-Curtis. Cela correspond à deux points de vue différents: soit la communauté dans son ensemble caractérise le milieu, soit les espèces les plus abondantes définissent principalement ces communautés. En pratique ici, la pondération est déjà incluse via l'échelle d'abondance par espèce.")
132
+
incorrect = "La grande question à se poser est celle de la représentativité des doubles zéros (et nous avons vu qu'il y en a beaucoup dans notre jeu de données).",
133
+
correct = "Seuls les indices qui n'utilisent pas les doubles zéros comme information sont pertinents ici. Canberra effectuera une pondération des espèces les unes par rapport aux autres contrairement à Bray-Curtis. Cela correspond à deux points de vue différents: soit la communauté dans son ensemble caractérise le milieu, soit les espèces les plus abondantes définissent principalement ces communautés. En pratique ici, la pondération est déjà incluse via l'échelle d'abondance par espèce.")
134
134
```
135
135
136
-
### Calcul de la matrice de distances
136
+
### Calcul de la matrice de distance
137
137
138
-
À 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`.
138
+
À partir du jeu de données `fish`, calculez la matrice de distance 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`.
grade_code("Vous venez de réaliser votre première matrice de distances. L'argument `method =` de la fonction `dissimilarity()` précise la métrique utilisée: \"bray\" pour Bray-Curtis, \"canberra\" pour l'indice de Canberra, \"euclidean\" pour la distance Euclidienne et \"manhattan\" pour la distance de Manhattan.")
156
+
grade_code("Vous venez de réaliser votre première matrice de distance. L'argument `method =` de la fonction `dissimilarity()` précise la métrique utilisée: \"bray\" pour Bray-Curtis, \"canberra\" pour l'indice de Canberra, \"euclidean\" pour la distance Euclidienne et \"manhattan\" pour la distance de Manhattan.")
157
157
```
158
158
159
-
Notez l'avis (warning) qui s'affiche. En réalité, aucun poisson n'a été observé à la station 8. Dans ce cas, la métrique n'est pas fiable pour la comparaison (ne pas en observer ne signifie pas qu'il n'y en a pas, mais juste qu'on n'en a pas capturé).
159
+
Notez l'avis (*warning*) qui s'affiche. En réalité, aucun poisson n'a été observé à la station 8. Dans ce cas, la métrique n'est pas fiable pour la comparaison (ne pas en observer ne signifie pas qu'il n'y en a pas, mais juste qu'on n'en a pas capturé).
160
160
161
161
En temps normal, nous pourrions aussi tester d'autres variantes en utilisant, par exemple, l'indice de Canberra ou en transformant les données. Mais ici, l'échelle choisie a *déjà* réglé le problème des espèces abondantes *versus* rares en faveur d'un poids équivalent pour chaque espèce.
162
162
@@ -206,7 +206,7 @@ question("À partir des données du tableau et de la description ci-dessus, quel
206
206
answer("Logarithme", message = "La transformation logarithmique est utilisée lorsqu'il y a une très large plage dans les données (plusieurs ordres de grandeur) et pas de valeurs nulles ou négatives"),
207
207
answer("Logarithme(x + 1)", message = "log(x + 1) est utilisé pour réduire une disparité de plusieurs ordres des grandeur et lorsque les valeurs sont nulles ou positives"),
208
208
answer("Double racine carrée", message = "La transformation double racine carrée est utilisée pour minimiser de manière douce l'impact des espèces abondantes lorsque les données sont des dénombrements non encore transformés"),
209
-
answer("Exponentielle", message = "L'exponentielle amplifie la différence entre les petites et les grandes valeurs; elle donne un poids encore plus grands aux observations élevées"),
209
+
answer("Exponentielle", message = "L'exponentielle amplifie la différence entre les petites et les grandes valeurs; elle donne un poids encore plus grands aux observations élevées"),
210
210
allow_retry = TRUE, random_answer_order = TRUE,
211
211
incorrect = "Réfléchissez... est-ce ici des données brutes, ou alors sont-elles déjà transformées ?",
212
212
correct = "Ici une mise à l'échelle partielle a déjà été réalisée via les coefficients multiplicateurs (et la transformée log(x + 1) pour la pente). Aucune transformation supplémentaire n'est donc requise. Sinon, nous pouvons toujours standardiser les données, et cela se justifie lorsque nous avons des unités différents et incompatibles entre elles comme ici.")
@@ -215,19 +215,19 @@ question("À partir des données du tableau et de la description ci-dessus, quel
215
215
### Choix de l'indice
216
216
217
217
```{r qu_indice_envir}
218
-
question("Vous souhaitez réaliser un matrice de distances sur les données environnementales. Quels sont les indices les plus adaptés ?",
218
+
question("Vous souhaitez réaliser un matrice de distance sur les données environnementales. Quels sont les indices les plus adaptés ?",
219
219
answer("Indice de Bray-Curtis", message = "L'indice de Bray-Curtis sert plutôt pour des dénombrements d'espèces."),
220
220
answer("Indice de Canberra", message = "L'indice de Canberra ne prenant pas en compte les doubles zéros, il est plutôt mal adapté pour des données environnementales."),
221
221
answer("Distance Euclidienne", correct = TRUE),
222
222
answer("Indice de Manhattan", correct = TRUE),
223
223
allow_retry = TRUE, random_answer_order = TRUE,
224
224
incorrect = "Hum, pas tout-à-fait... Quelles métriques prennent en compte les doubles zéros comme similarité (deux sites ayant même concentration nulle en une substance chimique se ressemblent).",
225
-
correct = "Excellent! C'est en fait des métriques différentes qui sont utilisées pour les dénombrement d'espèces ou les données environnementales.")
225
+
correct = "Excellent! C'est en fait des métriques différentes qui sont utilisées pour les dénombrement d'espèces ou les données environnementales.")
226
226
```
227
227
228
228
### Distance euclidienne 1
229
229
230
-
À partir des données contenues dans `envir`, calculez la matrice de dissimilarités en utilisant la distance euclidienne et *sans* transformer les données. Pour rappel, vous explorez l'aide en ligne de `?vegan::vegdist` pour déterminer les arguments à utiliser dans `dissimilarity()`.
230
+
À partir des données contenues dans `envir`, calculez la matrice de dissimilarité en utilisant la distance euclidienne et *sans* transformer les données. Pour rappel, vous explorez l'aide en ligne de `?vegan::vegdist` pour déterminer les arguments à utiliser dans `dissimilarity()`.
grade_code("Parfait! Nous allons calculer une autre version de la matrice de dissimilarité pour comparaison.")
248
+
grade_code("Parfait! Nous allons calculer une autre version de la matrice de dissimilarité pour comparaison.")
249
249
```
250
250
251
251
### Distance euclidienne 2
252
252
253
-
Calculez une nouvelle matrice de dissimilarités de distances euclidiennes, mais cette fois en **standardisant** les données. Inspirez-vous des notes de cours pour déterminer quel argument utiliser en plus pour cela.
253
+
Calculez une nouvelle matrice de dissimilarité avec distances euclidiennes, mais cette fois en **standardisant** les données. Inspirez-vous des notes de cours pour déterminer quel argument utiliser en plus pour cela.
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\"`. La fonction qui standardise en R est `scale()`, et l'argument ici porte le même nom: `scale = `.")
275
+
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\"`. La fonction qui standardise en R est `scale()`, et l'argument ici porte le même nom: `scale = `.")
grade_code("Félicitation! Vous venez de réaliser votre premier dendrogramme. Savez-vous qu'il existe plusieurs stratégies possibles pour comparer les distances? Utiliser l'argument `method =` de la fonction `cluster()` pour changer de méthode. Par défaut, c'est la méthode des liens complets qui est utilisée `method = \"complete\"`.")
309
+
grade_code("Félicitation! Vous venez de réaliser votre premier dendrogramme. Savez-vous qu'il existe plusieurs stratégies possibles pour comparer les distances? Utiliser l'argument `method =` de la fonction `cluster()` pour changer de méthode. Par défaut, c'est la méthode des liens complets qui est utilisée `method = \"complete\"`.")
310
310
```
311
311
312
312
### Dendrogramme 2
@@ -337,7 +337,7 @@ chart$circular(envir_clust)
337
337
```
338
338
339
339
```{r hclust2_h3-check}
340
-
grade_code("Très bien! Regardez comme cette technique vous a permis d'obtenir des groupes bien individualisés. Il existe bien d'autres méthodes que vous pouvez utiliser pour calculer votre dendrogramme. Un dendrogramme circulaire permet de l'étaler beaucoup plus. C'est utile lorsqu'il y a beaucoup d'individus à représenter. Par contre, il est moins facile à lire.")
340
+
grade_code("Très bien! Regardez comme cette technique vous a permis d'obtenir des groupes bien individualisés. Il existe bien d'autres méthodes que vous pouvez utiliser pour calculer votre dendrogramme. Un dendrogramme circulaire permet de l'étaler beaucoup plus. C'est utile lorsqu'il y a beaucoup d'individus à représenter. Par contre, il est moins facile à lire.")
341
341
```
342
342
343
343
La variante horizontale du dendrogramme permet aussi de visionner plus d'items que le dendrogramme vertical sans qu'il ne soit trop encombré. Contrairement à la version circulaire, il est beaucoup plus facile d'y repérer le niveau de coupure idéal.
grade_code("Bravo. Vous voyez en quoi ce dendrogramme est plus facile à utiliser pour déterminer un niveau de coupure idéale? Une coupure à 7 permet de former 4 groupes. Une coupure à 10 se justifie également, et elle séparera alors les stations en 3 groupes.")
373
+
grade_code("Bravo ! Vous voyez en quoi ce dendrogramme est plus facile à utiliser pour déterminer un niveau de coupure idéale? Une coupure à 7 permet de former quatre groupes. Une coupure à 10 se justifie également, et elle séparera alors les stations en trois groupes.")
374
374
```
375
375
376
-
Notez que vous indiquez le niveau de coupure avec le même code, quelle que soit la variante du dendrogramme utilisée avec `chart()`. Il n'est pas toujours facile de repérer la valeur à utiliser pour la coupure. La méthode `str()` appliquée à votre objet "cluster" `envir_clust` vous renvoie une visualisation textuelle du dendrogramme qui permet de lire directement les niveaux des différentes branches. Pour ne pas afficher tout, mais limiter à un nombre de groupes donnés, vous pouvez utiliser l'argument `max.level = <nbr_de_groupes>`. Démonstration.
376
+
Notez que vous indiquez le niveau de coupure avec le même code, quelle que soit la variante du dendrogramme utilisée avec `chart()`. Il n'est pas toujours facile de repérer la valeur à utiliser pour la coupure. La méthode `str()` appliquée à votre objet **cluster**`envir_clust` vous renvoie une visualisation textuelle du dendrogramme qui permet de lire directement les niveaux des différentes branches. Pour ne pas afficher tout, mais limiter à un nombre de groupes donnés, vous pouvez utiliser l'argument `max.level = <nbr_de_groupes>`. Démonstration :
@@ -423,9 +423,9 @@ Si nous pouvons montrer une certaine cohérence entre le regroupement selon l'ha
423
423
table(fish = fish_groups, envir = envir_groups)
424
424
```
425
425
426
-
La première colonne avec les nombres de 1 à 5 reprend les numéros de groupes pour `fish`. La première ligne avec les nombres de 1 à 4 sont les numéros des groupes d'`envir`. Le reste est la table de contingence proprement dite. Par exemple, nous avons 7 stations simultanément dans les deux groupes n°1. Nous avons 4 stations dans le groupe 1 de `fish` et le groupe 2 d'`envir`. Par contre en dessous, deux stations sont dans le groupe n°1 d'`envir` et en même temps dans le groupe n°2 de `fish`, et 5 stations sont simultanément dans les deux groupes n°2, et ainsi de suite.
426
+
La première colonne avec les nombres de 1 à 5 reprend les numéros de groupes pour `fish`. La première ligne avec les nombres de 1 à 4 sont les numéros des groupes d'`envir`. Le reste est la table de contingence proprement dite. Par exemple, nous avons sept stations simultanément dans les deux groupes n°1. Nous avons quatre stations dans le groupe 1 de `fish` et le groupe 2 d'`envir`. Par contre en dessous, deux stations sont dans le groupe n°1 d'`envir` et en même temps dans le groupe n°2 de `fish`, et cinq stations sont simultanément dans les deux groupes n°2, et ainsi de suite.
427
427
428
-
Notre singleton est le groupe n°3 de `fish` que nous ignorons. Pour les groupes n°1 et 2 nous avons un maximum de stations sur la diagonale (7 pour 1/1 et 5 pour 2/2) montrant ainsi une bonne concordance. Le groupe n°4 de `fish` correspond à 5 stations dans le groupe 4 d'`envir` et 3 stations dans son groupe 2. Enfin, 2 des 3 stations du groupe `fish` 5 correspondent au groupe `envir` 3. Mais notez ceci (allez revoir les sorties de `predict()` plus haut) : le groupe 5 de `fish` contient les stations 23, 24 et 25. Le groupe 3 d'`envir` contient les stations 23 et 25, alors que la station 24 est placée dans le groupe 4 pour `envir`. Par conséquent, il est fort probable que le dendrogramme d'`envir` ait mal classé cette station 24 et donc, que la correspondance `fish` 5 = `envir` 3 soit excellente.
428
+
Notre singleton est le groupe n°3 de `fish` que nous ignorons. Pour les groupes n°1 et 2 nous avons un maximum de stations sur la diagonale (sept pour 1/1 et cinq pour 2/2) montrant ainsi une bonne concordance. Le groupe n°4 de `fish` correspond à cinq stations dans le groupe 4 d'`envir` et trois stations dans son groupe 2. Enfin, deux des trois stations du groupe `fish` 5 correspondent au groupe `envir` 3. Mais notez ceci (allez revoir les sorties de `predict()` plus haut) : le groupe 5 de `fish` contient les stations 23, 24 et 25. Le groupe 3 d'`envir` contient les stations 23 et 25, alors que la station 24 est placée dans le groupe 4 pour `envir`. Par conséquent, il est fort probable que le dendrogramme d'`envir` ait mal classé cette station 24 et donc, que la correspondance `fish` 5 = `envir` 3 soit excellente.
429
429
430
430
Ce genre de résultat est assez caractéristique de données biologiques : la concordance n'est pas parfaite, mais une belle tendance se dégage avec les correspondances qui peuvent être résumées finalement comme suit :
0 commit comments