Analyse d`un tableau de distances et tests de comparaison Fichier

Transcription

Analyse d`un tableau de distances et tests de comparaison Fichier
Ecole Doctorale MNHN Module Analyse des Données avec R
Michel Baylac, UMR 7205, UMS 2700 plate­forme Morphométrie
[email protected]
5
Analyses sur matrices de distances
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Matrices de distances,
Distances, similarités et dissimilarités
Similarité S
généralement 0 =< S <= 1
d(i,i) > 0
Exemple : matrices des corrélations mais cas particulier lié à l'intervalle [­1, +1]
j
Dissimilarité, distances D
distances euclidiennes :
dii = 0
dij <= dik + dkj , le fameux principe de l'inégalité triangulaire
i
transformations D ­ S
D = 1 – S (implique que ­1 corresponde à la différence max entre 2 objets)
D = 1 – S2 (implique que +1 ou ­1 indiquent une similarité équivalente)
k
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Distances et distances euclidiennes
Matrices de distances et de similarité
Ce sont des matrices carrées symétriques (par rapport à la diagonale principale) dont les termes diagonaux sont nuls (distances) ou > 0 (similarités)
0
1.5
2.3
1.5
0
3.6
2.3
3.6
0
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyses sur tableaux de distances
Introduction
On passe facilement d'une matrice de coordonnées à une matrice de distances euclidiennes
Comment ?
Pour mémoire sur un exemple simple avec 3 variables x, y, z, la distance entre 2 objets i et j est :
d2ij = ∑((xi – xj)2 + (yi – yj)2 + (zi ­ zj)2)
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyses sur tableaux de distances
Introduction
?
L'opération inverse :
résumer et visualiser les relations entre objets
à partir de la matrice de leurs distances deux­à­deux ?
n'est pas aussi simple ! Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyses sur tableaux de distances
Introduction
Plusieurs méthodes permettent de le réaliser :
­ l'analyse en coordonnées principales (principal coordinate analysis ou classical multidimensional scaling) de Gower qui s'applique à des matrices de distances euclidiennes. ­ d'autres méthodes, moins restrictives quant aux conditions d'application, comme le
positionnement multidimensionnel (non­metric multidimensional scaling) recherchent un sous­espace de dimension spécifiée minimisant la somme des différences entre distances originelles et distances de représentation, quantité appelée stress. On verra enfin comment aborder la question de la comparaison de deux ou plusieurs matrices de distances et comment notamment tester si elles sont significativement liées.
Ecole Doctorale MNHN Module Analyse des Données avec R
Calcul et représentation des tableaux de distances sous R
Calculs des matrices de distances et pré­traitements
les fonctions dist() et as.dist() (bibliothèque stats de base) sont les points d'entrée qui permettent de manipuler des matrices de distances dans R :
­ dist() permet de calculer une matrice de distances à partir d'un data.frame ou une matrice (matrix) de variables quantitatives, qualitatives ou logiques. Plusieurs mesures de distance sont disponibles : 'euclidean', 'maximum', 'manhattan', 'canberra' et 'binary'. La matrice de distances est un objet R de classe « dist ». ­ as.dist() transforme une matrice de distance (donc calculée en dehors de R par exemple), carrée et symétrique, en un objet R de classe « dist » qui permet de l'utiliser avec les fonctions traitant de matrices de distances.
Les paramètres upper et diag contrôlent le mode d'affichage de la matrice affichée par une instruction print(). R stocke uniquement la matrice triangulaire inférieure. Ecole Doctorale MNHN Module Analyse des Données avec R
Calcul et représentation des tableaux de distances sous R
Calculs des matrices de distances et pré­traitements
ATTENTION à ne pas intervertir les commandes : dist() avec une matrice de distances calculera une « distance » en considérant les colonnes de la matrice initiale comme autant de variables. as.dist() avec une matrice de descripteurs construira une matrice de « distances » en copiant ou en recyclant simplement au besoin tout ou partie des colonnes de la matrice initiale.
Dans les deux cas, le résultat n'a aucun sens ! C'est donc à vous de vérifier la cohérence de vos actions. R ne peut pas le faire à votre place
Quelles sont les bonnes instructions dans les deux cas précedents ?
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en Coordonnées principales principe
Principe de l'analyse en coordonnées principales : soit D une matrice de distances euclidiennes entre objets, on réalise les opérations suivantes :
­ double centrage lignes et colonnes de ­D2/2.
­ extraction des valeurs et vecteurs propres à partir de la matrice obtenue
­ projection de tout ou partie des vecteurs propres qui décrivent un sous­
espace de dimension ad hoc. Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en Coordonnées principales principe
Sous R (détail des étapes) : > library(ade4)
Cette bibliothèque contient le fichier des données et les fonctions utilisées
> data(capitales)
fichiers de la liste
Examiner le contenu de capitales et accéder aux deux > d <­ dist(capitales$xy)
distances à partir des coordonnées cartographiques
> is.euclid(d)
[1] TRUE
> dd <­ ­0.5 * bicenter.wt(d * d)
ADE4)
> dde <­ eigen(dd)
# double centrage de ­dist2/2 (fonction Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en Coordonnées principales principe et exemples
La fonction pcoscaled() de la bibliothèque ADE4 réalise automatiquement ces opérations :
> ds <­ pcoscaled(d)
> ds
# dimension ?
> plot(ds, asp=1) > text(ds[,1],ds[,2],labels=names(capitales$df))
# Résultat ?
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en Coordonnées principales distances euclidiennes ?
Il est indispensable de regarder les valeurs propres : la présence de valeurs propres négatives doit inciter à la prudence, indiquant que la métrique utilisée ne respecte pas la conditions de base de l'inégalité triangulaire Dij <= Dik + Dkj
Il s'agit d'une caractéristique importante des matrices de distances euclidiennes. L'absence de valeurs propres négatives sert de test pour vérifier que les distances sont bien euclidiennes
j
i
k
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en Coordonnées principales distances euclidiennes ?
Remarques
On n'est pas obligé d'effectuer explicitement la diagonalisation pour examiner les valeurs propres. La fonction is.euclid() les retourne si on ajoute le paramètre print=TRUE :
> is.euclid(d, print=TRUE) # dans le cas de capitales$xy, les distances calculées sont euclidiennes. Noter que plusieurs valeurs propres sont négatives, mais elles sont inférieures à 10­12 et résultent des imprécisions dans
l'estimation des coordonnées. On peut aller plus loin : a priori, combien de valeurs propres non­nulles doit­on avoir ? Est­ce vérifié ? Affichez les deux premiers axes avec :
> plot(dde$vectors, asp=1)
> text(dde$vectors[,1],dde$vectors[,2],labels=names(capitales$df))
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyses sur tableaux de distances
cas des distances non­euclidiennes
Que faire lorsque les distances utilisées ne sont pas euclidiennes ? On a plusieurs possibilités : 1. utiliser les seules composantes positives fournies par eigen() après double­centrage. C'est ce que réalise la fonction quasieuclid() qui conserve le sous­espace « euclidien » associé aux valeurs propres > 0 :
> distance <­ quasieuclid(distance)
2. transformer (par addition de constantes) la matrice en matrice euclidienne selon 2 procédures implémentées dans ADE4 : cailliez() ou lingoes() (voir les aides avec ?)
> distance <­ cailliez(distance)
# addition d'une constante, méthode de Cailliez
> distance <­ lingoes(distance)
# addition d'une constante, méthode de Lingoes
3. utiliser les fonctions de positionnement multidimensionnel non métrique IsoMDS() ou sammon() de la bibliothèque MASS.
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyses sur tableaux de distances
cas des distances non euclidiennes
Si on part de capitales$df (distances routières kilométriques), on a
> d1 <­ as.dist(capitales$df)
vérifier si d1 est une matrice de distances euclidiennes
Résultat ?
Comment expliquez­vous ce résultat : en quoi une matrice de distances kilométriques diffère­t'elle d'une matrice de distances “à vol d'oiseau” ?
Utilisez les différentes options fournies par ade4 pour rendre euclidiennes les distances et pour analyser ce tableau de distances à l'aide des coordonnées principales
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en Coordonnées principales
exemple 1
Application à l'exemple des crabes. Ici, il faut d'abord calculer la matrice des distances euclidiennes avec la fonction dist().
On calcule ensuite les coordonnées principales avec la fonction pcoscaled().
> dcrab <­ dist(crab)
> pcrab <­ pcoscaled(dcrab)
Puis on affiche les groupes dans le plan 2:3 de pcrab qui devrait être proche du plan intéressant de l'ACP correspondante:
> plot(pcrab[,2], pcrab[,3], col = as.numeric(groupe), asp = 1) # ou, avec plotg
> plotg(pcrab, cols=c(2,3), groupe)
Conclusions ?
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en Coordonnées principales
exemple 2
Etudier l'exemple de ADE4 sur le fichier Yanomama:
> library(ade4)
> data(yanomama) ; ?yanomama
On a 3 matrices de distances
$geo = géographique
$ant = morphométrique
$gen = génétiques, entre 19 populations
> geo1 <­ as.dist(yanomama$geo)
> is.euclid(geo1) [1] FALSE
...
# en fait les 3 matrices ne sont pas euclidiennes. On les rend euclidiennes via quasi.euclid()
> geo <­ quasieuclid(geo1)
> gen <­ quasieuclid(as.dist(yanomama$gen))
> ant <­ quasieuclid(as.dist(yanomama$ant))
Vérifiez que les matrices ainsi constituées sont euclidiennes. Analysez­les via pcoscaled()
+ plot()
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en Coordonnées principales
exemple 2
> dgeo <­ pcoscaled(geo)
> dgen <­ pcoscaled(gen)
> dant <­ pcoscaled(ant)
> par(mfrow= c(3,1)) # on crée un tableau de 3 graphes superposés (3 lignes et 1 colonne)
> plot(dgeo[,1:2], pch = 20, asp =1) ; text(dgeo[,1],dgeo[,2],labels=as.character(1:19), pos=2, offset=1)
> plot(dgen[,1:2], pch = 20, asp =1) ; text(dgen[,1],dgen[,2],labels=as.character(1:19), pos=2, offset=1)
> plot(dant[,1:2], pch = 20, asp =1) ; text(dant[,1],dant[,2],labels=as.character(1:19), pos=2, offset=1)
> par(mfrow= c(1,1)) # on revient à l'affichage usuel d'un seul graphe pour prévenir les surprises avec les graphes ultérieurs
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Analyse en coordonnées principales
Remarques importantes
Interprétations
­ axes : il est important de comprendre que le système d'axes généré par l'analyse en co­
ordonnées principales n'est pas nécessairement interprétable. Pour s'en convaincre, comparer les cartes obtenues avec une carte de l'Europe !
­ Pertinence du sous­espace conservé. Lorsqu'on projette les objets dans un sous­es­
pace euclidien qui prend en compte une partie seulement axes, il s'en suit une distortion des distances originales. Il en va de meme lorsqu'en nmds on obtient une mesure de stress non­nulle. Comme avec les graphes associés au test de Mantel (cf. ci­après), on projette les objets dans le plan croisant les distances initiales aux distances calculées dans le sous­espace final (diagramme de Sheppard). Il est également possible de su­
perposer sur le plan examiné un arbre de longueur minimale (minimum spanning tree, voir chapitre classification : voir dernière séance). Ecole Doctorale MNHN Module Analyse des Données avec R
R : Positionnement multidimensionnel non­métrique
(non­metric multidimensional scaling)
# IsoMDS() > iso <­ isoMDS(as.dist(capitales$df))
> iso
> plot(iso$points[,1],iso$points[,2],asp=1)
> text(iso$points[,1],iso$points[,2],labels=names(capitales$df))
également à voir : Sammon() (aide de MASS : « One form of non­metric multidimensional scaling ») A titre d'exercice, réaliser une figure avec 3 graphes comparant les solutions (2D) obtenues par
IsoMDS, Sammon + la solution obtenue par une analyse en coordonnées principales.
N'oubliez pas de déclarer le format (3 lignes ou 3 colonnes) de la figure puis après réalisation de
revenir à une figure unique Ecole Doctorale MNHN Module Analyse des Données avec R
R : fonctions pour l'analyse des tableaux de distances synthèse
Matrice
de
distances
Principales méthodes
implémentées
dans R
Vecteurs propres
Bicenter.wt()
+ Eigen()
Distances
euclidiennes
transformations
Pcoscaled()
Valeurs propres
Dimension k
et
caractéristique
de
l'espace ?
Cmdscale()
Dimensions k spécifiée
Distances
non­euclidiennes
MASS :IsoMDS()
stress
MASS :sammon()
Ecole Doctorale MNHN Module Analyse des Données avec R
Calcul et représentation des tableaux de distances sous R
Calculs d'une matrice de distances particulière
calculer les distances de Mahalanobis pour les crabes :
­ reprenez la définition des D2
­ comment calculer les D2 : de quoi a­t'on besoin ?
­ calculez l'objet lda correspondant
­ écrivez les instructions permettant d'obtenir les D2
Ecole Doctorale MNHN Module Analyse des Données avec R
Tests sur matrices de distances
test de Mantel
alternatives
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Associations entre tableaux de distances :
test de Mantel et analogues
Généralités sur le test de Mantel
Il sert à comparer deux matrices de distances : classiquement, on réalise un graphique en points croisant toutes les distances des matrices prises 2 à 2. On réalise également un test avec Ho = absence de lien entre couples de matrices : on estime le degré d'association entre les deux matrices de distances en calculant le coefficient de corrélation entre termes similaires, diagonale exclue. Le degré de signification du test est estimé par un test de permutation :
une des matrices est conservée intacte, l'ordre des lignes et de colonnes étant permuté dans
l'autre matrice. On répète l'opération un grand nombre de fois et on stocke les valeurs des coefficients
de corrélation ainsi obtenus. On trie ce vecteur et on détermine le nombre de fois où un coefficient supérieur au coefficient observé est obtenu. La fréquence absolue correspondante, divisée par le nombre de répétitions, fournit l'estimation de la probabilité du test.
Ecole Doctorale MNHN Module Analyse des Données avec R
R : Comparaison de matrices de distances
Test de Mantel et tests similaires (bibliothèque ade4)
On va étudier l'exemple de ADE4 sur le fichier Yanomama: On utilisera uniquement $ant et $gen
Conclusions ?
10
F re q u e n c y
5
0
100
30
40
50
60
70
80
90
­0 . 2
0.0
0.2
gen
s im
g e n ­a n t­p ro c u s te
g e n ­a n t­R V
0.4
0.6
25
20
15
F re q u e n c y
15
10
0
0
5
5
10
20
30
20
F re q u e n c y
> par(mfrow = c(2,2))
# comparaison graphique des 2 matrices de distances
> plot(gen, ant) # (figure 1 haut gauche)
# test de Mantel (figure 2 haut droite)
> t1 <­ mantel.randtest(gen, ant, 999);
> plot(t1, main = "gen­ant­mantel") ; print(t1)
# test de Mantel (figure 3 bas gauche)
> t1 <­ procuste.rtest(pcoscaled(gen), pcoscaled(ant), 999)
> plot(t1, main = "gen­ant­procuste") ; print(t1)
# test de Mantel (figure 4 bas droite)
> t1 <­ RV.rtest(pcoscaled(gen), pcoscaled(ant), 999)
> plot(t1, main = "gen­ant­RV") ; print(t1)
> par(mfrow = c(1,1))
15
20
600
500
400
300
200
ant
> data(yanomama)
> gen <­ quasieuclid(as.dist(yanomama$gen)) > ant <­ quasieuclid(as.dist(yanomama$ant)) g e n ­a n t­m a n te l
0.45
0.50
0.55
s im
0.60
0 .6 5
0.70
0.1
0.2
0 .3
s im
0.4
0.5