BioDataScience2::learnr_setup()
SciViews::R("explore", lang = "fr")

# Preparation du jeu de données
read("penguins", package = "palmerpenguins", lang = "fr") %>.%
  sdrop_na(., bill_length) ->
  penguins
BioDataScience2::learnr_banner()
BioDataScience2::learnr_server(input, output, session)

Objectifs

L'Analyse en Composantes Principales (ACP) est une méthode statistique exploratoire très utilisée dans le domaine de la biologie et de l'écologie. Elle forme aussi la base de nombreuses autres techniques qui en sont dérivées. Il est donc primordial de comprendre la logique et l'usage de cette analyse. Ce tutoriel vous permettra de :

Avant toute chose, assurez-vous d'avoir bien compris le contenu du module 7 du cours et en particulier la section 7.2.

Manchots en Antarctique

Trois espèces de manchots ont été étudiés en Antarctique entre 2007 et 2009 par le Docteur Kristen Gorman de la base antarctique Palmer. Les manchots ont été observés sur l'île du Rêve (Dream), sur l'île de Torgersen (Torgersen) et sur l'île Biscoe (Biscoe). Les espèces étudiées sont le manchot Papou Pygoscelis papua (Forster, 1781) Gentoo, le manchot Adélie Pygoscelis adlidae (Hombron & Jacquinot, 1841) Adelie et le manchot à jugulaire Pygoscelis antarcticus (Forster, 1781) Chinstrap.

Couple de manchots adélies avec son petit à droite et un manchot à jugulaire (gentoo) à gauche. Photo de J. Auch, license creative commons 2.0 générique.

penguins <- read("penguins", package = "palmerpenguins")
skimr::skim(penguins)

Le jeu de données nommé penguins ici contient trois variables facteurs : l'espèce, l'île d'où les individus proviennent et leur sexe. Il contient aussi quatre variables biométriques : la longueur du bec (mm), la largeur du bec (mm), la longueur de la nageoire (mm) et la masse (g). Les années des mesures sont enregistrées dans la variable year.

naniar::vis_miss(penguins) # Visualiser les données manquantes
penguins <- sdrop_na(penguins, bill_length) # Éliminer les lignes vides

La variable sexe a quelques valeurs manquantes, mais comme elle ne sera pas utilisée dans cette analyse (l'ACP utilise en effet des variables quantitatives uniquement), nous n'éliminons pas les lignes qui contiennent des valeurs manquantes pour cette variable. Nous ne supprimons que les valeurs manquantes observées pour bill_length_mm.

Matrice de corrélation de Pearson

Un graphique de la matrice de corrélation de Pearson vous donne une bonne idée des corrélations entre les différentes variables, qui est l'information utilisée par l'ACP. Calculez la matrice de corrélation et affichez-en un graphique pertinent. Vous devez donc sélectionner uniquement les variables numériques en indiquant leur index (numéro de ligne dans le tableau ; vous pouvez utiliser l'opérateur : pour indiquer une plage de valeurs) à partir du jeu de données penguins.

peng_corr <- ___(penguins[, ___:___])
plot(___)
peng_corr <- correlation(penguins[, ___:___])
plot(peng_corr)

#### ATTENTION: Hint suivant = solution !####
## Solution ##
peng_corr <- correlation(penguins[, 3:6])
plot(peng_corr)
grade_code("Par défaut, la fonction correlation() utilise la méthode de Pearson qui met en avant les corrélations linéaires, celles précisément qui nous intéressent pour l'ACP. Nous observons des corrélations positives en bleu entre la longueur du bec, de la nageoire et la masse. Par contre, la largeur du bec est inversément corrélée à ces trois autres variables.") 

Linéarisation éventuelle

Avant de réaliser une ACP, on vérifie aussi si les relations entre les variables sont linéaires ou à peu près linéaires. Cela se voit sur un graphique en nuage de points. Nous pouvons réaliser des graphiques entre différentes paires de variables ou alors utiliser une matrice de nuage de points.

Avec des données biométriques, le nuage de points a fréquemment une forme curvilinéaire qui se linéarise par une transformation en double logarithme (logarithme des deux variables), comme pour le jeu de données urchins par exemple. Si vous observez cela, une linéarisation par transformation des données est à appliquer avant d'effectuer l'ACP.

chart(data = penguins, body_mass ~ flipper_length) +
  geom_point()

Le graphique présente une des paires possibles des variables (masse en fonction de la longueur de la nageoire). Dans notre cas, le nuage de point n'étant pas fondamentalement curvilinéaire, il n'est pas nécessaire de transformer les données (vous pouvez le vérifier aussi sur d'autres graphiques ci-dessous).

chart(data = penguins, ___ ~ ___) +
  geom_point()

ACP

Calculez maintenant votre analyse en composantes principales sur le jeu de données penguins. Sélectionnez uniquement les variables numériques intéressantes. L'année de la mesure n'est pas une variable intéressante pour réaliser l'ACP. Les variables biométriques ont des unités différentes. Il est donc judicieux de standardiser les données.

___ %>.%
  sselect(., ___:___) %>.%
  pca(., scale = ___) ->
  penguins_pca
summary(penguins_pca)
___ %>.%
  sselect(., ___:___) %>.%
  pca(., scale = TRUE) ->
  penguins_pca
summary(penguins_pca)

#### ATTENTION: Hint suivant = solution !####
## Solution ##
penguins %>.%
  sselect(., 3:6) %>.%
  pca(., scale = TRUE) ->
  penguins_pca
summary(penguins_pca)
grade_code("La fonction `summary()` sur un objet **pca** permet de prendre connaissance du partitionnement de la variance entre les différents composantes principales dans le premier tableau. Il permet aussi de connaitre l’importante des variables initiales sur les axes de l’ACP grâce au second tableau. Prenez le temps de lire ce résultat pour répondre à la question suivante.") 
question("Quelle est la proportion cumulée de la variance des deux premières composantes principales de cette ACP ?",
  answer("0.69"),
  answer("0.19"),
  answer("0.88", correct = TRUE),
  allow_retry = TRUE,
  correct = "La variance cumulée sur les deux premiers axes correspond à 88%. Ces deux premiers axes forment donc un plan qui représente bien l'information du jeu de données. La première composante contient déjà plus de 69% de la variance.",
  incorrect = "La proportion de la variance et la proportion de la variance cumulée se trouve dans le tableau `Importance of components`."
  )

Graphique des éboulis

Réalisez un graphique des éboulis sur l'objet penguins_pca que vous avez créé précédemment.

penguins %>.%
  sselect(., 3:6) %>.%
  pca(., scale = TRUE) ->
  penguins_pca
chart$___(___)
chart$___(penguins_pca)

#### ATTENTION: Hint suivant = solution !####
## Solution ##
chart$scree(penguins_pca)
grade_code("Le graphique des éboulis permet de voir la part de variance exprimée par chaque composante principale. Nous voyons bien que le premier axe reprend une très grande part de variance et que l'ensemble des deux premiers axes en cumulent une part suffisante.")

Représentation des variables

Réalisez un graphique permettant de visualiser les variables dans le premier plan de l'ACP.

chart$___(___ , choices = c(___, ___))
chart$___(penguins_pca, choices = c(___, ___))

#### ATTENTION: Hint suivant = solution !####
## Solution ##
chart$loadings(penguins_pca, choices = c(1, 2))
grade_code("Ce graphique permet de visualiser l'importance des variables initiales dans le plan de l'ACP sous forme de vecteurs. Il est indispensable pour interpréter le graphique suivant qui répartit les observations dans le même plan. La norme (longueur) du vecteur indique si la variable est bien représentée dans ce plan ou non. Plus la norme du vecteur se rapproche de un, matérialisé par le cercle gris, mieux c'est. Ici, les quatre variables sont bien représentées avec des normes supérieures ou égales à 0.5. Celles aux normes trop faibles ne sont pas considérées dans l'analyse pour ce plan-là en tous cas. Ensuite, les variables qui pointent dans la même direction sont corrélées positivement comme la longueur de la nageoire et la masse. Les variables qui pointent dans le sens opposé sont inversément corrélées (il n'y en a pas ici). Les vecteurs orthogonaux correspondent à des variables non ou très faiblement corrélées entre elles, comme la largeur du bec et la masse.")

Représentation des individus

Réalisez un graphique permettant de visualiser les individus dans le premier plan de l'ACP constitué des deux premières composantes principales. Indiquez les trois espèces par des couleurs différentes via l'argument labels =. Ajoutez en plus des ellipses de confiance à 95% pour mieux discerner les trois espèces.

chart$___(___, choices = c(___, ___), labels = penguins$species) +
  ___()
chart$___(penguins_pca, choices = c(___, ___), labels = penguins$species) +
  stat_ellipse()

#### ATTENTION: Hint suivant = solution !####
## Solution ##
chart$scores(penguins_pca, choices = c(1, 2), labels = penguins$species) +
  stat_ellipse()
grade_code("La forme du nuage de points et surtout des sous-groupes sont à rechercher ici. Nous voyons clairement une séparation des manchots `Gentoo` par rapport aux autres. Ce graphique peut s'interpréter par rapport au précédent qui offre une clé de lecture. Les manchots `Chinstrap` ont des becs plus long que les manchots `Adelie` (partie basse du graphique). Les manchots `Gentoo` sont plus gros que les manchots `Adelie` et `Chinstrap` et ont des nageoires plus longues (droite du graphique).")

Interprétation de l'ACP

Voici les deux représentations dans l'espace des variables et des individus dans le premier plan principal de l'ACP (composantes principales 1 et 2) reprises ici pour faciliter notre interprétation.

 read("penguins", package = "palmerpenguins", lang = "fr") %>.%
  sdrop_na(., bill_length) ->
  penguins

penguins %>.%
  sselect(., 3:6) %>.%
  pca(., scale = TRUE) ->
  penguins_pca

a <- chart$loadings(penguins_pca, choices = c(1, 2))
b <- chart$scores(penguins_pca, choices = c(1, 2), labels = penguins$species) +
  stat_ellipse()
combine_charts(list(a, b))

Le premier axe reprend 69% de la variance totale et ce sont les variables masse et longueur de nageoire qui sont les plus corrélées à cet axe avec les valeurs élevées pointant vers la droite des graphiques. En y projetant les individus, deux sous-groupes se séparent principalement selon ce premier axe. Ainsi, les manchots papous (gentoo) sont plus gros et ont de plus longues nageoires que les deux autres espèces.

Le second axe ne représente que 19% de la variance. Il est plutôt associé à la longueur et largeur du bec, avec des valeurs plus élevées dans le bas des graphiques. Les manchots adélies et à jugulaires (chinstrap) se différencient, quoique incomplètement, par cette longueur de bec plus importante chez chinstrap.

Conclusion

Cette ACP permet d'y voir plus clair entre les différentes relations qui peuvent exister dans un tableau multivarié, en même temps qu'elle permet de "cartographier" véritablement les individus et d'y repérer des patterns remarquables. Sans rien connaître de nos trois espèces de manchots, nous pouvons déjà avancer des informations utiles concernant leurs biométries respectives grâce à notre ACP.

Maintenant que vous avez compris la logique et que vous êtes capable d'écrire le code permettant de réaliser une ACP, vous pouvez appliquer cette technique par vous-même (assignation GitHub dans le cours).

question_text(
  "Laissez-nous vos impressions sur cet outil pédagogique",
  answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
  incorrect = "Vos commentaires sont enregistrés.",
  placeholder = "Entrez vos commentaires ici...",
  allow_retry = TRUE
)


BioDataScience-Course/BioDataScience2 documentation built on April 12, 2025, 9:45 a.m.