Interpréter la distance de Mahalonobis

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Interpréter la distance de Mahalonobis

Messagepar Christophe Genolini » 24 Nov 2008, 18:03

Bonjour,

J'ai une petite question stat. Je sais que c'est un forum R, mais sur les forums de math, je n'ai pas eu de réponse (il n'y avait que des lycéens qui font faire leur devoirs... Je n'ai pas du trouver le bon forum)

Je n'arrive pas a comprendre ce que représente la distance de Mahanalobis. Je sais la calculer, mais je ne sais pas comment interpréter le fait qu'une distance de Mahanalobis soit grand ou petite...

Quand je parle "d'interprétation", je veux dire la chose suivante :

    * Si un collègue me dit "Dans ma classe, la moyenne est de 12, variance 5", je sais qu'il y a de très bonnes notes et de très mauvaises.
    * S'il me dit "moyenne 12 et variance 0.5", je sais que tout le monde est proche de la moyenne.
    * S'il me dit "la distance de Mahalanobis vaut 7 entre A et B ; 3 entre A et C", que suis-je censé savoir de A, B et C ?


D'ou la question : quelqu'un sait-il comment interpréter Mahalanobis ?
Merci de votre aide.

Christophe

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Messagepar jean lobry » 24 Nov 2008, 18:21

Bonjour Christophe,

en fait c'est tout simple : avec la distance de Mahanalobis tu neutralises l'hétérosédasticité. C'est tout. Ca te donne une idée du pouvoir discriminant de tes mesures entre tes groupes A, B et C. C'est à la frontière entre les stats descriptives et inférentielles.

Amicalement,

Jean

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 24 Nov 2008, 18:30

Hmmm.

Alors, l'hétérosédasticité, si je ne m'abuse, c'est le fait que la variance n'est pas constante. Mais pas constante entre quoi et quoi ?

Prenons un exemple : j'ai dix individus I0, I1, ... I9 mesurés sur 4 variables V1, V2, V3 et V4. Dans quel cas y a-t-il hétéorsédasticité ?

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Messagepar jean lobry » 24 Nov 2008, 19:09

Alors, l'hétérosédasticité, si je ne m'abuse, c'est le fait que la variance n'est pas constante. Mais pas constante entre quoi et quoi ?

Pas constante entre tes groupes. Si tu veux discriminer entre tes groupes il peut être intéressant de faire entrer en jeu la variance intra. J'ai pas de fiche de base pour ça, essaye peut-être celle ci : http://pbil.univ-lyon1.fr/R/pdf/tdr624.pdf.

Amicalement,

Jean

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 24 Nov 2008, 19:33

Il me manque toujours un truc...

Je reprends : j'ai 10 individus. Si j'ai bien comprit, ils appartiennent a deux groupe différents mais on ne le sait pas, c'est ca ?

Donc
- les individu I0-I4 appartiennent a un groupe, la matrice de leur variance /covariance a une certain tete.
- les individu I5-I9 appartiennent a un autre groupe, la matrice de leur variance /covariance a une autre tete ?

Code : Tout sélectionner

I <- as.data.frame(matrix(
    c(1,1,1,1,
        1,2,2,1,
        3,1,1,2,
        1,2,1,2,
        3,3,1,2,
        10,10,10,10,
        15,5,18,16,
        16,18,6,18,
        18,16,17,8,
        6,11,15,15),
    byrow=TRUE,ncol=4)
)

var(I)
#         V1       V2       V3       V4
# V1 46.04444 35.93333 37.68889 35.88889
# V2 35.93333 40.98889 27.68889 32.72222
# V3 37.68889 27.68889 51.51111 36.22222
# V4 35.88889 32.72222 36.22222 46.72222

var(I[1:5,])
#     V1   V2    V3    V4
# V1  1.2 0.20 -0.20  0.40
# V2  0.2 0.70  0.05  0.15
# V3 -0.2 0.05  0.20 -0.15
# V4  0.4 0.15 -0.15  0.30

 var(I[6:10,])
#      V1     V2     V3    V4
# V1 24.00   9.25   1.00 -2.25
# V2  9.25  26.50 -14.25 -1.75
# V3  1.00 -14.25  25.70 -6.85
# V4 -2.25  -1.75  -6.85 17.80

On a donc hétéroscédamachintruc, c'est bien ca ?

A partir de la, quid de Mahalanobis ? Qu'est ce que mahalanobis neutralise ?

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Messagepar jean lobry » 24 Nov 2008, 20:15

Christophe Genolini a écrit : Si j'ai bien comprit, ils appartiennent a deux groupe différents mais on ne le sait pas, c'est ca ?

Non, tu le sais a priori, tu utilises cette information pour discriminer au mieux entre tes groupes. Mahanalobis c'est juste que tu optimises ton pouvoir discriminant de façon factuelle en neutralisant l'hétérosédascticité, ça marche automatiquement mieux, même si cela ne veut pas dire grand chose. Pour un exemple grand public basé sur CSI (les experts) c'est par ici http://pbil.univ-lyon1.fr/R/pdf/exph.pdf. Toutes les données sont authentiques.

Amicalement,

Jean

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 24 Nov 2008, 20:26

jean lobry a écrit :Toutes les données sont authentiques.

Trop fort ! Comment as-tu pu récupérer ce genre de donnée ?

Sinon, j'ai donc deux groupes que je connais, un constitué des individus I1:I5 et l'autre I6:I10. Ils ont des matrices de covariances différentes. Si je calcule la distance euclidienne entre Ii et Ij, quand est-ce que le résultat va être grand, quand va-t-il être petit ?

Sur mon exemple, la matrice des distance est :

Code : Tout sélectionner

 [1]  0.0000000  0.1824857  0.4743745  0.1022204  0.2251325  2.2597378 10.6988499 11.5064863 10.9484728 10.1363239
 [1]  0.1824857  0.0000000  1.1771395  0.1794010  0.4994667  1.9888344 11.9748605 12.2302730  9.7646403  8.6192389
 [1]  0.4743745  1.1771395  0.0000000  0.7855589  0.3601197  2.7165303  8.6501452 10.2134998 11.5218450 13.2032698
 [1]  0.1022204  0.1794010  0.7855589  0.0000000  0.2916907  1.9849754 11.4066801 10.4014401 11.3875100  8.8314664
 [1]  0.2251325  0.4994667  0.3601197  0.2916907  0.0000000  1.8732580 10.9886126  9.1680672  9.7841622 11.2480526
 [1]  2.259738   1.988834   2.716530   1.984975   1.873258   0.000000   8.349354   7.043539   6.221504   6.273091
 [1] 10.698850  11.974861   8.650145  11.406680  10.988613   8.349354   0.000000  17.737797  17.436062  16.746590
 [1] 11.506486  12.230273  10.213500  10.401440   9.168067   7.043539  17.737797   0.000000  17.705060  17.089534
 [1] 10.948473   9.764640  11.521845  11.387510   9.784162   6.221504  17.436062  17.705060   0.000000  17.612647
 [1] 10.136324   8.619239  13.203270   8.831466  11.248053   6.273091  16.746590  17.089534  17.612647   0.000000


avec à la ligne i colonne j la distance mahalanobis(I[i,],I[j,],cov(I))

Mais j'avoue ne voir aucune idée se dégageant de ce tableau de chiffres...

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Messagepar jean lobry » 24 Nov 2008, 20:54

Christophe Genolini a écrit :Trop fort ! Comment as-tu pu récupérer ce genre de donnée ?

Ben quoi ? Il n'y a rien de confidentiel, elles sont sur internet. Je ne m'amuserais pas à faire un sujet d'exam avec des données bidon quand même !

Sinon, j'ai donc deux groupes que je connais, un constitué des individus I1:I5 et l'autre I6:I10. Ils ont des matrices de covariances différentes. Si je calcule la distance euclidienne entre Ii et Ij, quand est-ce que le résultat va être grand, quand va-t-il être petit ?


Pas sûr de te suivre, mais avec la distance de Mahanalobis au plus c'est grand au mieux tu peux séparer tes groupes. Donc il est prudent de voir du coté des méthodes de validation croisées pour valider. Et toujours avant essayer d'ajouter une colonne de valeurs aléatoires pour y croire.

Amicalement,

Jean

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 24 Nov 2008, 21:19

jean lobry a écrit :
Christophe Genolini a écrit :Trop fort ! Comment as-tu pu récupérer ce genre de donnée ?

Ben quoi ? Il n'y a rien de confidentiel, elles sont sur internet. Je ne m'amuserais pas à faire un sujet d'exam avec des données bidon quand même !

Je ne savais pas que c'était en accès libre. Prennent-ils le temps, lors d'un exam, de se rendre compte a quel point c'est interessant, ou ne pensent-ils qu'a la note ?

Si je calcule la distance euclidienne ...
Pas sûr de te suivre

Hélas, c'est réciproque :-( . C'est pour ca que j'essaie de reformuler ce que je crois avoir compris.

Ceci étant dis, dans le cas présent, j'ai "juste" ecrit "Euclidienne" à la place de "Mahalanobis" :oops:

mais avec la distance de Mahanalobis au plus c'est grand au mieux tu peux séparer tes groupes.


Une distance, ca se calcule entre deux individus, non ? Donc, si je reprends ta phrase, j'obtiens "plus la distance entre deux points est grande, au mieux je peux séparer mes groupes"

En espérant que ma lenteur d'esprit ne t'a pas encore désespérée...

Christophe

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 24 Nov 2008, 21:34

Peut-être en y allant pas à pas... la distance de Mahanalobis entre deux séries de valeurs (x_i) et (y_i) est une distance "renormalisée" par une matrice. Lorsque celle-ci est diagonale ça s'inteprète très bien : racine de la somme des |x_i-y_i|^2/sigma_i^2, la distance attribue un poids à chacun des écarts |x_i-y_i|.

Ca me semble clair que si les (x_i) et (y_i) représentent des mesures sur deux individus x et y, il faut 'pondérer' ces mesures pour définir une distance entre x et y à travers ces mesures, ou les 'normaliser', ce qui est particuliérement flagrant quand elles ont des unités différentes. Si la 1ère composante (x_1 et y_1) est la taille en m et la 2ème composante (x_2 et y_2) est le poids en kg, si on ne normalise pas cela voudrait dire qu'on considérerait que 2 mètres de différence entre deux individus compte pour autant de distance (le but de la distance étant de mesurer, quantifier, la différence) que 2 kilogrammes de différence. Ainsi, si je fais par exemple 1m75 et 70kg, quelqu'un de 3m75 et de 70kg ne serait pas plus différent de moi que quelqu'un d'1m75 et de 68kg (la même distance nous séparerait).
Et même si les unités des composantes sont les mêmes, on voit bien que l'idée de fond c'est que les écarts entre les composantes de deux individus doivent être plus ou moins pris en compte selon que cette composante est sujette à peu ou beaucoup de variabilité. Si tu mesures 3cm de plus que moi ce n'est pas une grande différence, mais si tes doigts de pieds mesurent 3cm de plus que les miens on est carrément différents, ceci parce que la variabilité de la longueur des doigts de pieds dans notre population est plus faible que celle de la taille.

Ceci dit je ne sais plus comment ça s'applique en analyse discriminante... peut-être que je n'ai raconté que des évidences qui sont hors-contexte. Je n'ai pas très compris quelles sont les données du problème. S'il s'agit de définir une distance entre 2 élèves basées sur leurs notes en maths, physique, anglais, et qu'on utilise comme "pondération" la variance empirique des notes de tous les élèves de la classe, la distance de Mahanalobis donnera moins d'importance à la matière ou les notes sont le plus dispersées. Si par exemple le prof de physique étale ses notes entre 0 et 20 et le prof de maths les concentrent autour de 12, un écart de 4 points en maths entre 2 élèves aura plus de conséquence sur la distance de Mahanalobis qui les sépare que le même écart de 4 points en physique.

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 24 Nov 2008, 21:51

Stéphane Laurent a écrit :Je n'ai pas très compris quelles sont les données du problème.


Faire comprendre a un mahala-novice (moi) ce qu'est la mahala-distance ;-)

Ok, je viens de comprendre un truc important : si les trois matières anglais-math-physique ne sont pas corrélées, la matrice de covariance est diagonale, composé uniquement le la variance des matière.

Code : Tout sélectionner

3 0 0
0 5 0
0 0 2

La covariance inversée est donc diagonale constituée des inverses des variances. Donc, la mahaladistance pondère pour donner plus de poids aux matières ayant un petit écart type. C'est ca ?

Si maintenant on considère que les math et la physique sont liés, les bon dans l'un sont aussi bon dans l'autre. On va donc avoir une matrice de covariance du genre :

Code : Tout sélectionner

3 4 0
4 5 0
0 0 4

La, l'interprétation devient nettement moins clair...

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 25 Nov 2008, 18:37

Christophe Genolini a écrit :Faire comprendre a un mahala-novice (moi) ce qu'est la mahala-distance ;-)



J'essaye de comprendre aussi, jusqu'ici j'avais jamais cherché à comprendre. Pour le cas diagonal on est ok.

Allons-y pas-à-pas... considérons que la réponse d'un individu est bivariée: une note en maths et une note en physique, et considérons que le prof de maths et celui de physique donnent des notes qui se distribuent selon la même loi, disons 10 de moyenne, et la même variance.

Quant à l'association entre les 2 notes, considérons 2 cas: 1) les notes de maths et physique sont indépendantes 2) les notes de maths et physique sont très corrélées. Dans chaque cas on utilise la distance de Mahanalobis avec une matrice associée aux hypothèses de cas (donc diagonale dans le 1er cas, et avec les mêmes coefficients diagonaux car on suppose les mêmes variances).

Disons que l'individu x1 qui a (10,10) est "l'individu moyen" (quelle horreur!). Considérons deux indivdus x2=(10,15) et x3=(13,14).

- Dans le cas 1), il y a la même distance entre x1 et x2 qu'entre x1 et x3 (on peut voir que x2 et x3 sont sur le même cercle de centre x1).

- Dans le cas 2), ces distances ne seront pas les mêmes. Je pense que (je n'ai pas vérifié) si la variance est assez large, et la corrélation assez forte, l'individu x3 sera plus proche de l'individu moyen x1 que l'individu x2. L'individu x2 a des notes dispersées et donc s'éloigne de la "norme".

À savoir que géométriquement parlant, dans le cas 2), les individus à une même distance de l'individu moyen se situent sur une ellipse.

On comprend ainsi assez bien la distance de Mahanalobis entre un individu et "l'individu moyen", mais ça me semble plus difficile d'interpréter la distance entre 2 individus quelconques. Géométriquement on doit peut-être pouvoir la visualiser avec une feuille de papier millimétré déformée, en sorte que les cercles se tranforment en les ellipses associées à la matrice.

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 25 Nov 2008, 19:16

Genial !!!

Ce soir, j'ai un petit repas en amoureux (je ne devrais pas etre sur le forum, mais madame est dans la salle de bain...) mais dès demain, j'essaie. En gros : quels sont tous les points a disitance 1 de mon individu (moyen dans un premier temps, puis quelconque), puis distance 2, puis distance 3... Ensuite, représentation graphique des "courbes de niveau"

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 25 Nov 2008, 19:42

Ravi pour ton amourette. Ces ellipses sont aussi les lignes d'isodensité de la loi normale bivariée qui a pour covariance la matrice qu'on se donne. Enfin j'espère que je ne dis pas n'importe quoi (c'est possible).
Je crois qu'il y a quelques détails mathématiques sur ces ellipses dans le merveilleux livre "Weighing the Odds" de David Williams http://books.google.fr/books?id=vmoFw0pvS1sC.

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Messagepar Christophe Genolini » 26 Nov 2008, 19:11

Ca avance, ca avance... On va bien finir par comprendre !

(Le code est exécutable tel quel et produit 4 jolis dessins...)

Code : Tout sélectionner


###Définition des données

I <- as.data.frame(matrix(
     c(1,1,1,6,2,5,2,2,5,1,5,6,6,2,6,5),
     byrow=TRUE,ncol=2)
 )
I <- I - mean(I)
cov(I)


J <- as.data.frame(matrix(
     c(10,1,10,6,20,5,20,2,50,1,50,6,60,2,60,5),
     byrow=TRUE,ncol=2)
 )
J <- J - rep(mean(J),each=8)
cov(J)

K <- as.data.frame(matrix(
     c(1,1,1,2,2,1,2,2,5,5,5,6,6,5,6,6),
     byrow=TRUE,ncol=2)
 )
K <- K - rep(mean(K),each=8)
cov(K)

L <- as.data.frame(matrix(
     c(10,1,10,2,20,1,20,2,50,5,50,6,60,5,60,6),
     byrow=TRUE,ncol=2)
 )
L <- L - rep(mean(L),each=8)
cov(L)


### Fonctions qui detectent la distance 0, la distance 3 et la distance 6
func <- function(x,y){ifelse(abs(x-y)<=0.5,1,0)}
func0 <- function(x){func(x,0)}
func3 <- function(x){func(x,3)}
func6 <- function(x){func(x,6)}


### Fonction qui trace les distances :
###     rouge = [0 ; 0.5]
###     Vert = [2.5 ; 3.5]
###     Mauve = [5.5 ; 6.5]

plotMa <- function(moy,cova,axeX=c(-10,10),axeY=c(-10,10)){
   plot(1,xlim=axeX,ylim=axeY,type="n")
   for(i in seq(axeX[1],axeX[2],length=100)){
      for(j in seq(axeY[1],axeY[2],length=100)){
         b <- mahalanobis(c(i,j),moy,cova)
         lines(i,j,col=2*func0(b),type="p")
         lines(i,j,col=3*func3(b),type="p")
         lines(i,j,col=6*func6(b),type="p")
      }
   }
}

layout(matrix(c(1,3,2,4,2,4),ncol=3))
plotMa(mean(I),cov(I))
plotMa(mean(J),cov(J),c(-60,60))
plotMa(mean(K),cov(K))
plotMa(mean(L),cov(L),c(-60,60))



I, les deux variables sont non corrélées et de meme variance. On obtient des cercles.

J, les deux variables sont non corrélées mais de variances différente. On obtient une ellipse allongée dans le sens de la variable ayant une grande variance.

=> Mahalanobis sur variable non corrélée diminue l'importance des variances grandes (égalise les variances ?)

K, les deux variables sont corrélées. Les ellipses sont obliques dans le sens de la corrélation.

L, les deux variables sont corrélées, l'une a une grande variance. Les ellipses sont obliques dans le sens de la corrélation et l'ellipse est allongé dans le sens de la variable ayant une grande variance.

=> Une corrélation entre les deux variables diminue le poids conjoint des variables : par exemple, s'il y a une corrélation positive, la distance entre (5,5) et la moyenne (0,0) sera bien plus petite que la distance entre (-5,5) et la moyenne (0,0) (alors qu'en euclidienne, c'est la meme chose).


Christophe


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité