Re: Rotation procustéenne - statistiques dappariemen

From: Stéphane Dra (dray@biomserv.univ-lyon1.fr)
Date: Mon May 23 2005 - 18:11:53 MEST

  • Next message: Stephane.Lamasse@univ-paris1.fr: "Fitch-Margoliash et neighbor-joining"

    Bonjour,

    tout d'abord, une précision, le terme de "variabilité expliquée" me
    parait abusif car la co-inertie et procuste sont des méthodes ne
    comportant pas d'étape visant à expliquer un tableau par l'autre.

    Je reprends l'exemple du doubs.
    Tout d'abord, on voit que les valeurs propres de la coinertie sont
    (presque) les valeurs singulieres de procuste:

    > cor(pro$d^2,coi$eig)
    [1] 1

    le 'presque' vient du rescaling global (scale=T) de procuste et d'un
    facteur n^2.

    Olivier Beauchard wrote:

    >Bonjour,
    >
    >Je prend un exemple classique pour introduire ma question sur les statistiques d’appariement en co-inertie.
    >
    >
    >
    >>data(doubs)
    >>pca1 = dudi.pca(doubs$mil)
    >>pca2 = dudi.pca(doubs$poi,scale=F)
    >>coi = coinertia(pca1,pca2)
    >>coi
    >>
    >>
    >...
    >$RV (RV coeff) : 0.4505569
    >donc variabilité expliquée de l’un par l’autre et réciproquement = 0.4505569²
    >
    >Suivant l’analyse procustéenne de co-inertie :
    >
    >
    >>pro = procuste(pca1$tab,pca2$tab,scale=TRUE)
    >>sum(pro$d)
    >>
    >>
    >[1] 0.6562
    >donc variabilité expliquée (?) de l’un par l’autre et réciproquement = 0.6562²
    >(dans (1) on lit m² = 0.67 soit 1-sum(pro$d)^2 = 0.5694016 (fig. 2a-c); avec s.arrow(pro$load1), la variable dur <=> Har ne pointe pas au même endroit (fig. 2b); me suis-je trompé? Ai-je fait la même analyse?)
    >
    >
    Je retrouve le même graphique en refaisant la manip décrite ici.
    Pour le m^2, la formule donné dans (1) est 2*(1-sum(pro$d)). On le
    recalcule:

    > 2*(1-sum(pro$d))
    [1] 0.6876

    Oula, c'est pas le même dans l'article. On se calme, et on reprend le
    papier. Dans la présentation du jeu de données, il est indiqué qu'il y a
    29 sites. Piège !! Le doubs d'ade4 a 30 sites, en fait j'avais supprimé
    le site 8 qui n'a aucune espèces de poissons.

    On refait l'analyse:

    > doubs2$poi=doubs$poi[-8,]
    > doubs2$mil=doubs$mil[-8,]
    > pca22 = dudi.pca(doubs2$poi,scale=F)
    Select the number of axes: 2
    > pca12 = dudi.pca(doubs2$mil)
    Select the number of axes: 2
    > pro2 = procuste(pca12$tab,pca22$tab,scale=F)
    > 2*(1-sum(pro2$d))
    [1] -1039.197
    > pro2 = procuste(pca12$tab,pca22$tab,scale=T)
    > 2*(1-sum(pro2$d))
    [1] 0.6732973

    ouf, ça colle.

    >L’association entre les deux tableaux, si on suppose que ces deux statistiques jouent le même rôle, est plus forte suivant la statistique procustéenne. Le Rv est-il détrôné par une statistique qui donne des valeurs « attractives » car plus fortes?
    >
    >
    >
    Si vous voulez des statistiques "fortes", je propose Sforte=10000000000*RV.
    Les deux statistiques mesurent à peu près la même chose, l'une est basée
    sur des sommes de carrés, l'autre la somme au carré (protest). On les
    teste par permutation, ça sort une p-value. Le fait qu'une soit plus
    forte que l'autre n'a aucun intérêt.
    Le seul interet par rapport a PROTEST, c'est que l'on calcule une trace
    pour la coinertie (RV) au lieu de faire une svd pour PROTEST. Mais vu
    les ordinateurs d'aujourd'hui, ca change pas grand chose.

    >J’ai voulu comprendre la différence entre les deux, si différence il y a.
    >
    >
    >
    >>x = as.matrix(pca1$tab)
    >>y = as.matrix(pca2$tab)
    >>x = x/(sum(diag(t(x)%*%x))^0.5)
    >>y = y/(sum(diag(t(y)%*%y))^0.5)
    >>
    >>
    >
    >L’analyse procustéenne de co-inertie fait
    >
    >
    >>svd = svd (t(y) %*% x)
    >>yr = y %*% svd$u %*% t(svd$v)
    >>
    >>
    >
    >
    >
    >>coirot = coinertia(pca1,dudi.pca(yr,scale=F))
    >>
    >>
    >
    >On lit
    >
    >
    >>coirot
    >>
    >>
    >...
    >$RV (RV coeff) : 0.4518429
    >
    >A 10-2 près, c’est le même Rv, il est donc unique pour ce couple de tableaux, rotation ou non (la rotation n’entraîne pas de déformation et la force des relations entre variables n’est pas modifiée, RRt = I si je comprend bien).
    >
    >
    La co-inertie recherche des combinaisons linéaires maximisant le carré
    de la covariance. la rotation consiste à calculer des combinaisons
    linéaires.
    Donc pas de surprise, ça donne la même chose.

    >En lisant plus attentivement (1), on apprend que l’analyse procustéenne de co-inertie est exactement l’analyse de co-inertie de x et yr appariés (dim(x) = dim(yr)), ce dernier pourvu d’une rotation. J’ai refait le programme et j’obtenu les mêmes jeux de coordonnées. Le lien entre tableaux dans cette analyse est :
    >
    >
    >
    >>covv = sum(diag(t(x)%*%yr))
    >>vavx = sum(diag(t(x)%*%x))
    >>vavy = sum(diag(t(yr)%*%yr))
    >>rv = covv/(vavx^0.5*vavy^0.5)
    >>rv
    >>
    >>
    >[1] 0.675773
    >
    >comparé à
    >
    >
    >
    >>sum(pro$d)
    >>
    >>
    >[1] 0.6562
    >
    >C’est ça à 2 % près. Je me demande si je n’ai pas fait une erreur...
    >
    >

    Ok, sauf que le RV calculé, est un RV entre tableaux et non entre
    opérateurs. J'avais déjà soulevé la question sur adelist (RV or not RV).
    La définition que vous donnez du RV n'est pas la définition
    classique.... c'est plutôt celle de Procuste.
    C'est exactement ce que raconte l'article quand on parle des statistques
    RV, coinertie et procuste.
    En gros les deux approches sont (presques) équivalentes, mais pas
    exactement.

    Cordialement.



    This archive was generated by hypermail 2b30 : Mon May 23 2005 - 18:13:24 MEST