Re: ACP ADE4-SAS

From: Daniel Chessel (chessel@biomserv.univ-lyon1.fr)
Date: Fri Jun 04 1999 - 17:44:57 MET DST


La question de Cecile Rebourg est assez importante. N'ayant pas SAS sur ma
machine, je me pose la question : une ACP sur matrice de correlation
realisee sous ADE4 donne t-elle le meme resultat que la meme ACP realisee
sous S-PLUS.

Prenons le fichier V de la carte Voiture de la pile de données (Tenenhaus,
M. (1994) Méthodes statistiques en gestion. Dunod, Paris. 1-373. p. 116).

Dans ADE-4
*------------------------------------------------------------*
| WinADE-4 * Metrowerks CodeWarrior C * CNRS-Lyon1 * JT & DC |
| PCA: Correlation matrix PCA 04/06/99 17/07 |
*------------------------------------------------------------*
Classical Principal Component Analysis (Hotelling 1933)
Input file: D:\Ade4\VOITURE\V
---- Row weight:
File D:\Ade4\VOITURE\V.cnpl contains the row weight
It has 24 rows and 1 column
Each row has 4.1667e-02 weight (Sum = 1)
---- Column weights:
File D:\Ade4\VOITURE\V.cnpc contains the column weights
It has 6 rows and 1 column
Each column has unit weight (Sum = 6)
---- Table:
File D:\Ade4\VOITURE\V.cnta contains the centred and normed table
Zero mean and unit variance for each column
It has 24 rows and 6 columns
File :D:\Ade4\VOITURE\V.cnta
|Col.| Mini | Maxi |
|----|----------|----------|
| 1|-1.529e+00| 2.090e+00|
| 2|-1.677e+00| 1.958e+00|
| 3|-1.948e+00| 1.739e+00|
| 4|-1.689e+00| 1.771e+00|
| 5|-1.769e+00| 1.270e+00|
| 6|-1.846e+00| 2.024e+00|
|----|----------|----------|
---- Info: means and variances
File D:\Ade4\VOITURE\V.cnma contains the descriptive of the analysis
It contains successively:
     Number of rows: 24
     Number of columns: 6
     means and variances:
     Col.: 1 | Mean: 1.9061e+03 | Variance: 2.6708e+05
     Col.: 2 | Mean: 1.1367e+02 | Variance: 1.4416e+03
     Col.: 3 | Mean: 1.8308e+02 | Variance: 6.0933e+02
     Col.: 4 | Mean: 1.1108e+03 | Variance: 5.0824e+04
     Col.: 5 | Mean: 4.2158e+02 | Variance: 1.6378e+03
     Col.: 6 | Mean: 1.6883e+02 | Variance: 5.6139e+01
----------------------------------------------------
File D:\Ade4\VOITURE\V.cn+r contains the Correlation matrix
from statistical triplet D:\Ade4\VOITURE\V.cnta
It has 6 rows and 6 columns
----------------------- Correlation matrix -------------------
[ 1] 1000
[ 2] 861 1000
[ 3] 693 894 1000
[ 4] 905 746 491 1000
[ 5] 864 689 532 917 1000
[ 6] 709 552 363 791 864 1000
--------------------------------------------------------------
----------------------------------------------------
DiagoRC: General program for two diagonal inner product analysis
Input file: D:\Ade4\VOITURE\V.cnta
--- Number of rows: 24, columns: 6
-----------------------
Total inertia: 6
-----------------------
Num. Eigenval. R.Iner. R.Sum |Num. Eigenval. R.Iner. R.Sum |
01 +4.6560E+00 +0.7760 +0.7760 |02 +9.1522E-01 +0.1525 +0.9285 |
03 +2.4043E-01 +0.0401 +0.9686 |04 +1.0271E-01 +0.0171 +0.9857 |
05 +6.4656E-02 +0.0108 +0.9965 |06 +2.0961E-02 +0.0035 +1.0000 |

File D:\Ade4\VOITURE\V.cnvp contains the eigenvalues and relative inertia
for each axis
--- It has 6 rows and 2 columns

File D:\Ade4\VOITURE\V.cnco contains the column scores
--- It has 6 rows and 3 columns
File :D:\Ade4\VOITURE\V.cnco
|Col.| Mini | Maxi |
|----|----------|----------|
| 1| 7.413e-01| 9.585e-01|
| 2|-6.347e-01| 4.576e-01|
| 3|-3.339e-01| 2.375e-01|
|----|----------|----------|

File D:\Ade4\VOITURE\V.cnli contains the row scores
--- It has 24 rows and 3 columns
File :D:\Ade4\VOITURE\V.cnli
|Col.| Mini | Maxi |
|----|----------|----------|
| 1|-3.758e+00| 3.946e+00|
| 2|-1.479e+00| 2.385e+00|
| 3|-6.281e-01| 1.249e+00|
|----|----------|----------|
----------------------------------------------------

Dans S-PLUS

> pca0_princomp(V,cor=T)
> pca0
Standard deviations:
 Comp. 1 Comp. 2 Comp. 3 Comp. 4 Comp. 5 Comp. 6
   2.158 0.9567 0.4903 0.3205 0.2543 0.1448

The number of variables is 6 and the number of observations is 24

Component names:
                                                                    
 "sdev" "loadings" "correlations" "scores" "center" "scale" "n.obs"
                             
 "call" "factor.sdev" "coef"

Call:
princomp(x = V, cor = T)

Bon ça n'a pas grand-chose à voir. Wahouhou !

> pca0$cor
   Comp. 1 Comp. 2 Comp. 3 Comp. 4 Comp. 5 Comp. 6
V1 0.9585 -0.03249 -0.19684 -0.01603 -0.203065 -0.001573
V2 0.8944 -0.40297 -0.01940 -0.15695 0.077978 -0.081301
V3 0.7413 -0.63469 0.18139 0.10253 0.001827 0.065164
V4 0.9285 0.24411 -0.23755 -0.03947 0.120168 0.076130
V5 0.9283 0.28278 0.02157 0.22814 0.042203 -0.063330
V6 0.8148 0.45759 0.33393 -0.11707 -0.033402 0.017199

-------------------------------------------------
Binary input file: D:\ADE4\VOITURE\V.cnco - 6 rows, 3 cols.
   1 | 0.9585 -0.0325 0.1968
   2 | 0.8944 -0.4030 0.0194
   3 | 0.7413 -0.6347 -0.1814
   4 | 0.9285 0.2441 0.2375
   5 | 0.9283 0.2828 -0.0216
   6 | 0.8148 0.4576 -0.3339

OUF ! Ce que S-PLUS appelle les corrélations, ce sont les coordonnées
factorielles des colonnes dans ADE-4 (remarque : ça se démontre)
Ben, il faut le savoir !

Dans ADE-4, avec DDUtil : add normed scores
File D:\Ade4\VOITURE\V.cnl1 contains the row scores with unit norm
It has 24 rows and 3 columns
File :D:\Ade4\VOITURE\V.cnl1
|Col.| Mini | Maxi |
|----|----------|----------|
| 1|-1.741e+00| 1.829e+00|
| 2|-1.546e+00| 2.493e+00|
| 3|-1.281e+00| 2.546e+00|
|----|----------|----------|

File D:\Ade4\VOITURE\V.cnc1 contains the column scores with unit norm
It has 6 rows and 3 columns
File :D:\Ade4\VOITURE\V.cnc1
|Col.| Mini | Maxi |
|----|----------|----------|
| 1| 3.435e-01| 4.442e-01|
| 2|-6.634e-01| 4.783e-01|
| 3|-6.810e-01| 4.845e-01|
|----|----------|----------|
Binary input file: D:\ADE4\VOITURE\V.cnc1 - 6 rows, 3 cols.
   1 | 0.4442 -0.0340 0.4014
   2 | 0.4145 -0.4212 0.0396
   3 | 0.3435 -0.6634 -0.3699
   4 | 0.4303 0.2552 0.4845
   5 | 0.4302 0.2956 -0.0440
   6 | 0.3776 0.4783 -0.6810

Dans S-PLUS
> pca0$loadings
   Comp. 1 Comp. 2 Comp. 3 Comp. 4 Comp. 5 Comp. 6
V1 0.444 -0.401 -0.799
V2 0.414 -0.421 -0.490 0.307 -0.562
V3 0.344 -0.663 0.370 0.320 0.450
V4 0.430 0.255 -0.484 -0.123 0.473 0.526
V5 0.430 0.296 0.712 0.166 -0.437
V6 0.378 0.478 0.681 -0.365 -0.131 0.119

OUF ! Ce que ADE-4 appelle les scores normalisés des colonnes, dans ADE-4,
ce sont les "loadings"
Ah bon, question de vocabulaire
Et pourquoi S-PLUS ne les met pas tous ? Il enlève ceux qui n'ont pas de
signification assurée
sympa ! et si on les veux tous :
> print(matrix(pca0$loadings,6,6))
       [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.4442 -0.03396 -0.40143 -0.05002 -0.798600 -0.01086
[2,] 0.4145 -0.42122 -0.03956 -0.48972 0.306665 -0.56155
[3,] 0.3435 -0.66344 0.36993 0.31991 0.007185 0.45010
[4,] 0.4303 0.25517 -0.48446 -0.12315 0.472589 0.52584
[5,] 0.4302 0.29558 0.04398 0.71185 0.165972 -0.43743
[6,] 0.3776 0.47832 0.68103 -0.36529 -0.131360 0.11880

il faut le supplier !
Et les signes dans la troisième colonne : vous voyez bien qu'ils sont opposés !
Bouhouhou ! Meu non, les axes principaux sont définis au signe près, ça
dépend du nombre d'itérations, de la précision, du processeur
c'est aléatoire, au signe près ! Ben encore un truc à connaître

Et les valeurs propres, vous les avez ?
-------------------------------------------------
Binary input file: D:\ADE4\VOITURE\V.cnvp - 6 rows, 2 cols.
   1 | 4.6560 0.7760
   2 | 0.9152 0.1525
   3 | 0.2404 0.0401
   4 | 0.1027 0.0171
   5 | 0.0647 0.0108
   6 | 0.0210 0.0035
> pca0$sdev
 Comp. 1 Comp. 2 Comp. 3 Comp. 4 Comp. 5 Comp. 6
   2.158 0.9567 0.4903 0.3205 0.2543 0.1448
Ah non, perdu
> pca0$sdev^2
 Comp. 1 Comp. 2 Comp. 3 Comp. 4 Comp. 5 Comp. 6
   4.656 0.9152 0.2404 0.1027 0.06466 0.02096
Ah si, gagné. C'est quoi ce binz ?
S-PLUS fait une décomposition en valeurs singulières. Les valeurs propres
sont les carrés des valeurs singulières.
Vous en avez beaucoup des coups tordus comme ça ?
Et les coordonnées des lignes ?
-------------------------------------------------
Binary input file: D:\ADE4\VOITURE\V.cnli - 24 rows, 3 cols.
   1 | -2.0229 -0.3199 -0.5306
   2 | -0.7785 0.1329 -0.4415
   3 | -1.2898 0.4342 -0.4690
   4 | -0.2738 0.4647 -0.1864
   5 | 0.1805 0.6371 0.0646
   6 | -0.5046 0.2076 -0.1511
   7 | 3.9456 -0.8354 0.5156
   8 | 3.1939 -0.7714 0.0142
   9 | 3.4396 -0.6092 -0.6281
  10 | 1.4996 0.7757 -0.5120
  11 | 0.5865 -0.1432 -0.3488
  12 | 0.7393 0.4346 -0.1095
  13 | 1.7062 -1.3627 0.9775
  14 | 1.4135 -1.0893 -0.1463
  15 | 2.7951 0.1217 0.3855
  16 | 0.9200 0.8885 -0.2599
  17 | -0.0247 1.8204 1.2486
  18 | 1.2220 2.3848 -0.3009
  19 | -3.4989 0.9043 0.0709
  20 | -3.7577 0.0149 0.5080
  21 | -2.6188 -0.4151 0.7990
  22 | -2.2888 -1.4788 -0.1008
  23 | -1.9331 -0.9014 0.0475
  24 | -2.6503 -1.2951 -0.4464

> pca0$scores
    Comp. 1 Comp. 2 Comp. 3 Comp. 4 Comp. 5 Comp. 6
 1 -2.02290 -0.31994 0.53062 -0.407377 -0.11826 0.110177
 2 -0.77851 0.13290 0.44155 0.213162 -0.22545 0.001772
 3 -1.28979 0.43421 0.46900 -0.189979 -0.17224 0.199197
 4 -0.27382 0.46470 0.18639 0.611229 0.02782 0.028361
 5 0.18051 0.63715 -0.06456 0.634822 -0.32801 0.130945
 6 -0.50465 0.20761 0.15106 0.415396 -0.06161 0.175262
 7 3.94563 -0.83539 -0.51558 -0.138997 -0.12044 0.144322
 8 3.19390 -0.77144 -0.01415 0.007588 -0.04612 -0.065166
 9 3.43962 -0.60924 0.62811 -0.193165 0.08078 -0.040839
10 1.49957 0.77568 0.51198 0.400746 0.29725 -0.089059
11 0.58653 -0.14316 0.34883 0.191118 0.14911 -0.101060
12 0.73933 0.43460 0.10953 0.319025 0.10816 -0.069690
13 1.70618 -1.36274 -0.97748 -0.157954 0.08589 -0.153996
14 1.41354 -1.08933 0.14628 0.033144 0.54479 -0.054371
15 2.79506 0.12173 -0.38552 -0.044849 -0.74105 -0.070770
16 0.92000 0.88854 0.25987 -0.397921 0.15117 0.126786
17 -0.02474 1.82044 -1.24862 -0.095899 0.42761 0.272058
18 1.22199 2.38485 0.30092 -0.670588 -0.01907 -0.255548
19 -3.49886 0.90433 -0.07090 -0.117833 -0.02707 -0.181814
20 -3.75769 0.01492 -0.50799 0.143215 0.07313 -0.223075
21 -2.61879 -0.41507 -0.79900 -0.001865 -0.24542 -0.118686
22 -2.28877 -1.47879 0.10085 0.110174 0.21629 -0.064909
23 -1.93307 -0.90142 -0.04755 -0.354670 0.08438 0.249056
24 -2.65026 -1.29510 0.44636 -0.308521 -0.14162 0.051046

Bon, pour une fois que vous êtes d'accord sans faire d'histoire, ça fait du bien
hé, au signe près dans la colonne 3, entre nous
oui-oui (voir plus haut)

Et encore
> pca0$center
   V1 V2 V3 V4 V5 V6
 1906 113.7 183.1 1111 421.6 168.8

     Col.: 1 | Mean: 1.9061e+03 | Variance: 2.6708e+05
     Col.: 2 | Mean: 1.1367e+02 | Variance: 1.4416e+03
     Col.: 3 | Mean: 1.8308e+02 | Variance: 6.0933e+02
     Col.: 4 | Mean: 1.1108e+03 | Variance: 5.0824e+04
     Col.: 5 | Mean: 4.2158e+02 | Variance: 1.6378e+03
     Col.: 6 | Mean: 1.6883e+02 | Variance: 5.6139e+01
Bon, ce sont les moyennes, pas de quoi en faire un plat

Il reste encore un truc
> pca0$scale
[1] 516.794 37.968 24.685 225.442 40.470 7.493

C'est quoi ça, doc
> ?princomp

scale vector of numbers by which the variables are scaled. These are all 1
if cor is FALSE. If cor is TRUE, then scales will be the square roots of the
diagonal of the cov component of covlist, if present, and otherwise it is
the standard deviations of the input data variables.
> pca0$scale^2
[1] 267075.61 1441.56 609.33 50824.31 1637.83 56.14
Les variances quoi ! OUFFFFFFF !

L'ACP sur matrice de corrélations dans ADE-4 est exactement la même que
celle de S-PLUS
Mais pas celle de SAS ? Je ne permettrais pas ce genre de commentaire
Mais peut-être c'est plus difficile qu'il n'y parait de comparer deux programmes
Cordialement

> Bonjour,
> A partir d'un meme fichier, une ACP sur matrice de correlation
> realisee sous ADE4 ne me donne pas le meme resultat que la
> meme ACP realisee sous SAS.
> Avez-vous une explication a cette difference ?
> Merci beaucoup
>
> Cecile Rebourg
Daniel Chessel
---------------------------------
Universite Lyon 1 - Bat 401C
69622 Villeurbanne CEDEX - France
Tel : 04 72 44 82 77
Fax : 04 72 43 11 41
---------------------------------



This archive was generated by hypermail 2b30 : Sat Feb 10 2001 - 10:35:59 MET