Nous avons vu dans le chapitre précédent qu’il était possible, à l’aide d’une technique nommée l’Analyse en Composantes Principales (ACP), de réduire le nombre de dimensions d’un jeu de données, i.e. de le simplifier en moins de variables.
Ces analyses permettaient de trouver le ou les gradients principaux d’un jeu de données, i.e. les axes de changement.
Il arrivera cependant que ce qui vous intéressera, ce ne sont non pas comment les variables définissent les gradients, mais comment les sites/observations s’organisent sur ces gradients. Quels sites sont les plus extrêmes, etc.
Comme nous avons vu au chapitre précédent, on peut visualiser et interpréter l’organisation des observations dans les sorties d’une ACP, si on choisit le cadrage de type I. Dans ce chapitre, nous verrons une technique, nommée l’analyse en coordonnées principales (habituellement discutée, même en français, par son acronyme anglais PCoA), qui a été conçue expressément pour ce genre de situations.
Il existe certaines situations précises où l’ACP et la PCoA donnerons exactement le même résultat, mais la PCoA est beaucoup plus flexible dans sa façon de mesurer la distance entre les observations.
25.2 Fonctionnement
Avant de commencer ses calculs, la PCoA aura besoin que vous lui prépariez une matrice de distances.
Ensuite, elle appliquera à votre matrice de distances les étapes suivantes:
Transformer chacune des distances par -0.5 x d2, où d est la distance originale. Cette transformation permet de mesurer les distances par rapport à un point d’origine commun plutôt que de travailler avec des distances relatives sans ancrage commun.
Chacune des distances est ensuite double-centrée, c’est-à-dire qu’on lui soustrait la moyenne de sa colonne et de sa ligne dans la matrice de distances. Cette opération déplace l’ancrage commun à une coordonnée connue, soit 0,0.
Une décomposition spectrale est ensuite appliquée, qui va extraire les eigenvalues et les eigenvectors de la matrice, exactement comme dans une ACP. La variation sera donc concentrée dans les premiers axes.
Ensuite, les eigenvalues et les eigenvectors peuvent être interprétés de la même façon que ceux de l’ACP, mais les résultats sont axés sur les observations (lignes) plutôt que sur les variables (colonnes)
25.3 Labo : L’analyse en coordonnées principales
Comme pour le chapitre sur l’analyse factorielle des correspondances, nous appliquerons la PCoA sur des données de communautés d’oiseaux, où leurs abondances ont été mesurées à une série de sites.
Nous activerons d’abord les librairies nécessaires :
library(tidyverse)
── Attaching core tidyverse packages ──────────────────
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 4.0.1 ✔ tibble 3.3.0
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.4
── Conflicts ───────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Puis ensuite nous chargerons les données, et nous irons cacher le nom du site dans les méta-informations du tableau, comme pour le reste des techniques provenant de la librairie vegan.
La fonction pour calculer la PCoA se nomme wcmdscale (Weighted Classical MultiDimensional SCALEing, le nom de cette même technique en psychologie).
Comme pour, entre autres, le partitionnement hiérarchique, il faut d’abord calculer une matrice de distances sur nos données avant de les passer à la fonction :
Dim1 Dim2 Dim3 Dim4
A 0.29505695 -0.25477750 0.17963508 0.01030658
B -0.34067598 -0.18662673 0.26957150 0.19791371
C 0.15847929 -0.09761545 -0.19981647 0.01147397
D 0.09434037 0.31768306 0.02928919 0.10069416
E 0.17448378 0.21604881 -0.01456844 -0.05952923
F -0.36869987 0.30349215 0.09173501 -0.17134950
G -0.37341585 -0.07797529 -0.33117269 0.17087049
H -0.19842964 0.01649045 0.05518199 -0.02164073
I 0.62536756 0.04293613 -0.02012514 0.06346486
J -0.06650660 -0.27965563 -0.05973004 -0.30220431
Dim5 Dim6 Dim7 Dim8
A 0.005032477 0.082337924 -0.07882872 0.033107751
B 0.064671053 -0.101130045 0.02728157 -0.009598219
C 0.048096107 0.039736552 -0.09311105 -0.033444567
D -0.064766913 -0.119583285 -0.03884183 -0.037696110
E 0.313155112 0.023923664 0.04257318 0.010999578
F -0.095295560 -0.004941368 -0.04481913 0.035181306
G -0.019311933 -0.006636215 0.01633847 0.032620100
H -0.077806623 0.252368614 0.05764124 -0.032960472
I -0.151687503 -0.033539061 0.07514732 0.018254321
J -0.022086217 -0.132536780 0.03661896 -0.016463689
scores label weight
A sites A 1
B sites B 1
C sites C 1
D sites D 1
E sites E 1
F sites F 1
G sites G 1
H sites H 1
I sites I 1
J sites J 1
Notez ici l’option tidy=TRUE, qui permet de les récupérer dans un format qui fonctionnera bien avec le tidyverse.
Donc, sur l’axe 1, nos sites sont organisés avec d’un côté le site I, et de l’autre, les sites B, F et G comme étant les plus extrêmes.
On peut d’ailleurs confirmer cette compréhension à l’aide d’un graphique :
plot(resultat)
On peut refaire le même graphique à l’aide de ggplot2, pour faciliter sa personnalisation :
Remarquez que dans ces visualisations, il n’est pas possible directement de tracer la position de chacune des espèces formant le gradient.
Si jamais vous en avez besoin, sachez qu’il existe cependant certaines techniques pour le faire, en utilisant, par exemple, une technique de corrélations pondérées, dont l’application dépasse le cadre de ce chapitre.
25.4 La flexibilité
Contrairement à l’ACP qui travaille toujours avec les distances euclidiennes, la PCoA, comme montré ci-haut permet de travailler avec n’importe quelle mesure de distances. Elle peut donc s’appliquer avec des mesures d’abondances, avec la distance de Bray-Curtis, avec des mesures de présences/absences si on utilise la distance de Jaccard, etc.
25.5 Les eigenvalues négatives
Si jamais vous calculez la PCoA sur une matrice de distances autres que des distances euclidiennes (comme ci-haut avec la distance de Bray-Curtis), il pourrait arriver que dans vos résultats, vous obteniez des eigenvalues négatives.
Sachez d’abord qu’il ne s’agit PAS d’une dysfonctionnement de wcmdscale. C’est plutôt le résultat des priorités mathématiques des distances non-euclidiennes.
Si les valeurs négatives sont très petites, dans les tous derniers axes, on peut facilement les ignorer, comme un petit bruit de fond restant.
Cependant, si l’on tente de tracer ces axes ou de travailler avec les propriétés des eigenvalues (qui sont censées être des variances, donc toujours positives), les valeurs négatives peuvent être embêtantes. C’est pourquoi il existe différents mécanismes pour corriger les eigenvalues négatives. L’utilisation, ci-haut, de l’option add = TRUE permet d’appliquer une de ces corrections, soit en ajoutant une petite constante à toutes les distances qui ne sont pas sur la diagonale de la matrice.
25.6 Exercice : La PCoA
À l’aide du tableau de données dune inclus avec la librairie vegan (utilisez la fonction data(dune) pour l’activer), répondez aux questions suivantes.
Pour votre information, le tableau de données est formé d’observations concernant 30 espèces de plantes observées dans 20 sites dans les dunes néerlandaises. Vous pouvez en savoir plus sur ces données avec la commande ?dune
Quelle mesure de distance est la plus appropriée pour appliquer une PCoA sur ces données?
Appliquez une PCoA sur ces données
Quel pourcentage de la variance est expliqué par le premier axe? (les pourcentages ne sont pas fournis directement, vous devrez les calculer d’une façon ou d’une autre)
Et par le deuxième?
À l’aide d’un graphique, déterminez quels sites sont les plus représentatifs du premier axe?
Imaginez une hypothèse sur les causes de ce gradient
Et pour le deuxième axe, quelles sont les sites les plus représentatifs?