Re: STATIS sur ADE4 et R

From: Pierre BADY (pierre.bady@univ-lyon1.fr)
Date: Wed Jun 23 2004 - 11:51:11 MEST


bonjour à tous,

Il me semble que la différence de résultats apparaît lors du calcul du
compromis.

# désolé, mais nous allons explorer le code R de STATIS.

statis <- function (X, scannf = TRUE, nf = 3, tol = 1e-07){
         ....
         sep <- matrix(unlist(sep), nlig * nlig, ntab)
# à ce stade la matrice RV correspond à la matrice de
# COVV/VAV (covariance/variance vectorielle)
         RV <- t(sep) %*% sep
# ak contient les normes des tableaux, ak = sqrt(VAV)
         ak <- sqrt(diag(RV))
         ...
# normalisation de chacun des sous tableaux
         sep <- t(t(sep)/ak)
         C.ro <- apply(t(sep) * tabw, 2, sum)
         C.ro <- matrix(unlist(C.ro), nlig, nlig)
# valeur propre du compromis
         eig1 <- eigen(C.ro, sym = TRUE)
...
}

Pour la suite, nous allons "bricoler" (pas très beau comme mot en stats)
une fonction statis en remplaçant la ligne "sep <- t(t(sep)/ak)"
par "sep <- t(t(sep)*X$tabw)" (on l'appelle statis3).

# exemple:

# Dans R: avec statis (le vrai)

         data(meau)

# analyse intra-classe normalisée : normalisation de Bouroche

         wit1 <- within.pca(meau$mil, meau$plan$dat, scan = FALSE, scal =
"total")

# création du K-tableau

         kta1 <- ktab.within(wit1, colnames =
rep(c("S1","S2","S3","S4","S5","S6"), 4))

# analyse STATIS :

         statmil<-statis(kta1,scannf=F)
         statmil$RV.eig
         [1] 2.4405 0.7724 0.6034 0.1837
         statmil$C.eig
         [1] 1.384545 0.549798 0.386820 0.177673 0.173234 0.097364 0.019845
         0.012127 0.007156 0.003306
         statmil$RV
         spring summer autumn winter
         spring 1.0000 0.5655 0.4195 0.3457
         summer 0.5655 1.0000 0.7911 0.3230
         autumn 0.4195 0.7911 1.0000 0.3605
         winter 0.3457 0.3230 0.3605 1.0000

# pour migrer de R vers ADE-4, on utilise la fonction ‘Rtoade4’.
# Dans ADE-4:

         Option operator averaging
         Input file C:\test1\mil
         Number of rows: 24, columns: 10
         ----------------------- Correlation matrix -------------------
         [ 1] 1000
         [ 2] 565 1000
         [ 3] 420 791 1000
         [ 4] 346 323 361 1000
         --------------------------------------------------------------
         Compromise with the cosines between operators
         Num. Eigenval. R.Iner. R.Sum |Num. Eigenval. R.Iner. R.Sum |
         01 +2.4405E+00 +0.6101 +0.6101 |02 +7.7242E-01 +0.1931 +0.8032 |
         03 +6.0338E-01 +0.1508 +0.9541 |04 +1.8367E-01 +0.0459 +1.0000 |

# valeurs propres du compromis

         Num. Eigenval. R.Iner. R.Sum |Num. Eigenval. R.Iner. R.Sum |
         01 +3.1591E-01 +0.5977 +0.5977 |02 +8.2044E-02 +0.1552 +0.7529 |
         03 +5.9120E-02 +0.1119 +0.8648 |04 +2.9522E-02 +0.0559 +0.9206 |
         05 +2.0990E-02 +0.0397 +0.9603 |06 +1.3913E-02 +0.0263 +0.9867 |
         07 +3.4482E-03 +0.0065 +0.9932 |08 +2.1144E-03 +0.0040 +0.9972 |
         09 +8.8113E-04 +0.0017 +0.9989 |10 +6.0088E-04 +0.0011 +1.0000 |

# Retour dans R: on utilise statis3 (version modifiée)
         source("C:/test1/statis3.R")
         kta2 <- kta1
         kta2$tabw

# on utilise les mêmes pondérations que dans ADE-4

         kta2$lw <- rep(1/10,10)
         test3 <- statis3(kta2,scannf=F)
         test3$RV.eig
         [1] 2.4405 0.7724 0.6034 0.1837
         test3$C.eig
         [1] 0.3159090 0.0820440 0.0591197 0.0295219 0.0209904 0.0139131
0.0034482
         0.0021144 0.0008811 0.0006009
         test3$RV
         spring summer autumn winter
         spring 1.0000 0.5655 0.4195 0.3457
         summer 0.5655 1.0000 0.7911 0.3230
         autumn 0.4195 0.7911 1.0000 0.3605
         winter 0.3457 0.3230 0.3605 1.0000

On obtient des résultats similaires à ceux observés dans ADE-4.

Dans le premier cas, on réduit les sous-tableaux à la même échelle
(division par ak).
Dans le second, on utilise les poids initiaux des sous-tableaux (kta1$tabw).

je n’ai rien de mieux à vous proposer pour l’instant.

P.BADY

At 16:57 22/06/2004 +0200, Charline Laurent wrote:
>Bonjour à tous,
>
>Suite à la réponse de Pierre Bady, concernant l'analyse STATICO sur R,
>j'ai voulu comparer 2 analyses STATIS, une réalisée avec ADE4 et l'autre
>avec R.
>
>J'ai utilisé pour cela les données environnementales du Méaudret : 10
>variables mesurées sur 6 stations à 4 saisons différentes.
>
>Procédure sur R :
> # analyse intra-classe normalisée : normalisation de Bouroche
> wit1 <- within.pca(meau$mil, meau$plan$dat, scan = FALSE, scal =
> "total")
>
> # création du K-tableau
> kta1 <- ktab.within(wit1, colnames =
> rep(c("S1","S2","S3","S4","S5","S6"), 4))
>
> # analyse STATIS :
> statmil<-statis(kta1)
>
>Procédure sur ADE4 :
> KTabUtil : InitKTab
> KTabUtil : NormelizeKtab
> Row-Col option : option 3 : Bouroche's normalization
> STATIS : Operator averaging
> .ktta input file : Mil.ktta
> option : RV matrix
>
>Je trouve les mêmes valeurs propres lors des 2 analyses concernant
>l'interstructure :
> sur R :
> > statmil$RV.eig
>[1] 2.5537899 0.9897561 0.3068554 0.1495986
>
> sur ADE4 :
>File C:\ade4\ade-4\ade4tools\dir_Try\Meaudr\Mil.oa+RV contains the cosines
>between operators
>It has 4 rows and 4 columns
>Compromise with the cosines between operators
>Num. Eigenval. R.Iner. R.Sum |Num. Eigenval. R.Iner. R.Sum |
>01 +2.5538E+00 +0.6384 +0.6384 |02 +9.8976E-01 +0.2474 +0.8859 |
>03 +3.0686E-01 +0.0767 +0.9626 |04 +1.4960E-01 +0.0374 +1.0000 |
>
>J'obtiens également la même matrice des RV :
> sur R :
> > statmil$RV
> spring summer autumn winter
>spring 1.0000000 0.8249223 0.5075109 0.2554849
>summer 0.8249223 1.0000000 0.5951428 0.2326566
>autumn 0.5075109 0.5951428 1.0000000 0.6303486
>winter 0.2554849 0.2326566 0.6303486 1.0000000
>
> sur ADE4 :
>----------------------- Correlation matrix -------------------
>
>[ 1] 1000
>[ 2] 825 1000
>[ 3] 508 595 1000
>[ 4] 255 233 630 1000
>----------------------------------------------------------------------
>
>
>Par contre, au niveau du compromis, je n'obtiens pas du tout les mêmes
>valeurs propres, et du coup pas les mêmes coordonnées et pas les mêmes
>représentations graphiques.
>
> Valeurs propres du compromis sur R :
>
> > statmil$C.eig
> [1] 1.353855706 0.702245786 0.421078774 0.197868584 0.084319429
> 0.057779529 0.021028775
> [8] 0.015696901 0.009723404 0.004978209
>
> Valeurs propres du compromis sur ADE4 :
>
>File C:\ade4\ade-4\ade4tools\dir_Try\Meaudr\Mil.oa+IS contains the table
>scores of the interstructure analysis
>It has 4 rows and 4 columns
>
>Num. Eigenval. R.Iner. R.Sum |Num. Eigenval. R.Iner. R.Sum |
>01 +3.0138E-01 +0.5841 +0.5841 |02 +8.8742E-02 +0.1720 +0.7561 |
>03 +5.5621E-02 +0.1078 +0.8639 |04 +3.5754E-02 +0.0693 +0.9332 |
>05 +1.6751E-02 +0.0325 +0.9657 |06 +8.6903E-03 +0.0168 +0.9825 |
>07 +3.6846E-03 +0.0071 +0.9897 |08 +3.1726E-03 +0.0061 +0.9958 |
>09 +1.3266E-03 +0.0026 +0.9984 |10 +8.3395E-04 +0.0016 +1.0000 |
>
>Quelqu'un saurait-il d'où vient cette différence ?
>Merci de m'éclairer un peu
>
>Charline LAURENT

Pierre BADY
Université Claude Bernard Lyon 1
UMR CNRS 5023, LEHF
bat Alphonse Forel
43 boulevard du 11 novembre 1918
F-69622 VILLEURBANNE CEDEX
FRANCE
TEL : +33 (0)4 72 44 62 34
FAX : +33 (0)4 72 43 28 92
MEL : pierre.bady@univ-lyon1.fr
http://limnologie.univ-lyon1.fr
http://badgloup.ifrance.com



This archive was generated by hypermail 2b30 : Tue Sep 07 2004 - 13:30:57 MEST