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
L'Analyse Factorielle des Correspondances (AFC) est une variante de l'Analyse en Composantes Principales (ACP) qui permet de traiter les variables qualitatives (deux variables qualitatives transformées en un tableau de contingence à double entrée). Elle permet aussi de traiter des variables quantitatives discrètes (entiers nuls ou positifs) comme des dénombrements d'espèces à divers stations, ce qui s'apparente également dans un certain sens à un tableau de contingence qui croise espèce et station. Ce tutoriel vous permettra de :
37
+
L'Analyse Factorielle des Correspondances (AFC) est une variante de l'Analyse en Composantes Principales (ACP) qui permet de traiter les variables qualitatives (deux variables qualitatives transformées en un tableau de contingence à double entrée). Elle permet aussi de traiter des variables quantitatives discrètes (entiers nuls ou positifs) comme des dénombrements d'espèces à diverses stations, ce qui s'apparente également dans un certain sens à un tableau de contingence qui croise espèce et station. Ce tutoriel vous permettra de :
51
38
52
39
- Réaliser de manière guidée une AFC
53
40
@@ -57,199 +44,120 @@ L'Analyse Factorielle des Correspondances (AFC) est une variante de l'Analyse en
57
44
58
45
Avant toute chose, assurez-vous d'avoir bien compris le contenu du [module 7](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2022/acp-afc.html) du cours et en particulier la [section 7.3](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2022/analyse-factorielle-des-correspondances.html).
59
46
60
-
## Les macroinvertébrés de la Loire (France)
47
+
## Couleur des yeux et des cheveux
61
48
62
-
La Loire est un cours d'eau qui prend sa source dans le Massif Central pour se jeter dans l'Atlantique près de Nantes. Dans le jeu de données que nous traiterons ici, on dénombre 38 stations couvrant plus de 800 km du fleuve de sa source jusqu'à environ 200 km de son embouchure.
49
+
L'étude porte sur 5387 personnes vivant dans l'ancienne région de Caithness, se situant au nord de l'Écosse.
labs(y = "Altitude [m]", x = "Distance à la source [km]") +
69
-
ggrepel::geom_label_repel()
51
+
```{r, echo=TRUE}
52
+
caith <- read("caith", package = "MASS")
53
+
caith
70
54
```
71
55
72
-
Une diminution rapide de l'altitude est observée de la source à 250 km de cette dernière. Ensuite, la diminution est linéaire jusqu'à la dernière station située à 10 m d'altitude. On peut observer un saut de plus de 50 km et de 150m d'altitude entre la station 8 (Serre de la Fare) et la station 9 (Vorey).
56
+
Le tableau de données est un tableau de contingence à double entrée. Observez les colonnes. On en dénombre `r dim(caith)[2]` colonnes. La première colonne est particulièrement intéressante en portant un nom particulier `.rownames`.
73
57
74
-
Les chercheurs ont dénombré 40 espèces d'invertébrés présentées ci-dessous.
58
+
Rappelez-vous que nous retrouvons plusieurs types d'objets pour les tableaux de données : les `data.frames`, les `data.tables` ou encore les `tibbles`. Par défaut en utilisant les fonctions `SciViews`, les tableaux de données sont des `data.tables`. Vous pouvez vérifier la classe d'un objet avec la fonction `class()`.
Le tableau nécessaire afin de réaliser une analyse factorielle des correspondances ne doit comprendre que des valeurs numériques. La première colonne `.rownames` est donc un problème. Une solution serait de la retirer avec la fonction `sselect()`. Elle n'est cependant pas la meilleure solution. Cette colonne apporte une information très intéressante dont on ne veut pas se passer. Il est donc préférable d'employer un objet différent. Les `data.frames` supporte les noms des lignes (*rownames*).
83
67
84
-
```{r}
85
-
invert
86
-
```
87
-
88
-
Élaborez un graphique permettant de visualiser les dénombrements des espèces réalisés par les chercheurs. Sélectionnez les colonnes intéressantes à l'aide de leur position. Votre tableau se nomme `invert`.
68
+
Convertissez l'objet `caith` un `data.tables` en `data.frames` à l'aide de la fonction `as_dtf()`. Nommez ce nouvel objet `caith_df`.
grade_code("La conversion du tableau de données entre le `data.tables` en `data.frames` est simple avec la fonction `as_dtf()`. par defaut, la fonction reconnait la colonne .rownames et la converti en nom de ligne pour un objet de class data.frames qui les accepte.")
118
84
```
119
85
120
-
```{r visu1_h2-check}
121
-
grade_code("Ce graphique est peu lisible. Il y a des stations ou la même espèce a été observée plus de 200 fois. Il va falloir appliquer une transformation sur les données.")
122
-
```
86
+
Réalisez à présent une analyse factorielle des correspondances sur l'objet `caith_df` et nommez cet objet `caith_ca`. Proposez en plus le résumé de cet objet.
123
87
124
-
Le graphique précédent nous permet d'observer de grandes disparités entre les espèces. Vous allez devoir appliquer une modification mathématique afin de transformer les observations et de réduire les écarts entre les observations. Votre tableau comprend 41 colonnes dont la première est caractère. Il n'est donc pas possible de réaliser l'instruction suivante : DF \<- log1p(DF). Il n'est pas question d'écrire un `smutate()` avec 41 fois DF \<- smutate(DF, varx = log1p(varx),...). Il est possible de le faire bien plus simplement en utilisant par exemple `across()` au sein de la fonction `smutate()`. La fonction `across()` requiert les colonnes d'intérêt que vous pouvez spécifier par leur position. Un exemple pourrait être DF \<- smutate(DF, across(1:15, log)).
125
-
126
-
Vous avez à présent toutes les connaissances afin de transformer vos variables numériques avec la fonction `log1p()` et puis d'afficher le même graphique que précédemment.
grade_code("Vous venez d'ajouter à votre liste de fonction utile, la fonction `across()`. N'hésitez pas à consulter la page d'aide de cette fonction. La transformation `log(x + 1)` fut très efficace afin de réduire les écarts entre les observations. On observe par exemple que *Hydropsyche contubernalis* (E26) et Hydropsyche exocellata (E28) sont des espèces présentes dans de très nombreuses stations.")
109
+
```{rca_h2-check}
110
+
grade_code("Le code est simple à réaliser. Le résumé de l'objet met en avant qu'avec les deux premiers axes ont couvre 99.6% de la variance. Le premier axe couvre plus de 86%. L'essentiel de l'information se lira sur ce seul axe.")
169
111
```
170
112
171
-
## AFC
113
+
Proposez le graphique des éboulis associé à l'objet `caith_ca`
172
114
173
-
Calculez à présent votre AFC avec la fonction `ca()` et nommez votre objet `invert_ca`. La variable `Station` ne doit pas être employée dans l'AFC. Nous vous proposons de débuter par retirer la variable Station et la placer comme nom des lignes du tableau `invert2` à l'aide de `column_to_rownames()`. Consultez la page d'aide de cette fonction afin d'en connaitre les arguments.
115
+
```{r scree, exercise=TRUE}
116
+
___$___()
117
+
```
174
118
175
-
```{r ca_h3, exercise=TRUE}
176
-
# Conversion de la colonne Station en nom de lignes
177
-
invert2 <- ___(___, var = ___)
178
-
# Calcul de l'AFC
179
-
___ <- ___(___)
180
-
# Affichage du résumé
181
-
summary(___, rows = FALSE, columns = FALSE)
119
+
```{r scree-solution}
120
+
chart$scree(caith_ca)
182
121
```
183
122
184
-
```{r ca_h3-hint-1}
185
-
# Conversion de la colonne Station en nom de lignes
186
-
invert2 <- ___(invert2, var = "___")
187
-
# Calcul de l'AFC
188
-
___ <- ___(invert2)
189
-
# Affichage du résumé
190
-
summary(___, rows = FALSE, columns = FALSE)
123
+
```{r scree-check}
124
+
grade_code("Ce graphique vient en complément du premier tableau proposé dans le résumé. On observe que le premier axe comprend une grande part de la variance.")
191
125
```
192
126
193
-
```{r ca_h3-hint-2}
194
-
# Conversion de la colonne Station en nom de lignes
195
-
invert2 <- column_to_rownames(invert2, var = "Station")
196
-
# Calcul de l'AFC
197
-
___ <- ___(invert2)
198
-
# Affichage du résumé
199
-
summary(____, rows = FALSE, columns = FALSE)
127
+
Proposez enfin la carte (biplot) de votre objet `caith_ca`.
200
128
201
-
#### ATTENTION: Hint suivant = solution !####
129
+
```{r biplot, exercise=TRUE}
130
+
___$___()
202
131
```
203
132
204
-
```{r ca_h3-solution}
205
-
## Solutions
206
-
# Conversion de la colonne Station en nom de lignes
207
-
invert2 <- column_to_rownames(invert2, var = "Station")
208
-
# Calcul de l'AFC
209
-
invert_ca <- ca(invert2)
210
-
# Affichage du résumé
211
-
summary(invert_ca, rows = FALSE, columns = FALSE)
133
+
```{r biplot-solution}
134
+
chart$biplot(caith_ca)
212
135
```
213
136
214
-
```{rca_h3-check}
215
-
grade_code("La fonction column_to_rownames() a son inverse qui est rownames_to_column(). Ajoutez ces deux fonctions à votre boite à outils des fonctions utiles. Concernant le résumé de votre AFC, notez que les deux premières dimensions ne capture que 31 % de la Variabilité totale.")
137
+
```{rbiplot-check}
138
+
grade_code("Ce graphique va s'analyser en 3 étapes. On va d'abord s'intéresser aux yeux, puis au cheveux et enfin les deux ensembles. Faites le travail par vous même avant de vous rendre dans la section suivante pour comparer votre analyse avec celle que nous vous proposons.")
216
139
```
217
140
218
-
Réalisez à présent le graphique des éboulis et la carte (biplot) de votre objet `invert_ca`
Les deux premiers axes couvrent 99.6% de la variance. Du point de vue des cheveux, on observe une transition des cheveux clairs à gauche vers les cheveux foncés à droite. Du point de vue des yeux, les yeux clairs sont à gauche et les yeux foncés à droite.
243
153
244
-
```{r ca_plot_h2-check}
245
-
grade_code("La part de la variance exprimée par l'AFC est faible avec à peine plus de 30%. On peut néanmoins observer des éléments intéressants. Nous observons la forme typique du fer à cheval lors de la réalisation d'un transect. Certaines espèces de trichoptères comme *Agapetus delicatulus*, *Philopotamus montanus* ou encore *Plectrocnemia geniculata*, et de coléoptère comme *Limnius perrisi* ou *Esolus angustatus* sont plus présente dans les stations de plus haute altitude (S1-S3).")
246
-
```
154
+
On observe la même transition du clair vers le foncé aussi bien pour les cheveux que pour les yeux. Les individus aux yeux clairs vont être liés aux cheveux clairs et les individus aux yeux foncés sont associés aux cheveux foncés.
247
155
248
156
## Conclusion
249
157
250
158
Cette AFC nous a permis d'y voir plus clair entre les différentes stations et les espèces qui y vivent. Sans rien connaître sur ces espèces, nous avons pu mettre en évidence une tendance.
251
159
252
-
Maintenant que vous avez compris la logique, que vous maîtriser les techniques pour préparer vos données et que vous êtes capable d'écrire le code permettant de réaliser une AFC, vous pouvez appliquer tout cela dans une assignation GitHub (voir dans le cours).
160
+
Maintenant que vous avez compris la logique, que vous maîtrisez les techniques pour préparer vos données et que vous êtes capable d'écrire le code permettant de réaliser une AFC, vous pouvez appliquer tout cela dans une assignation GitHub (voir dans le cours).
0 commit comments