View file src/j/afu.ijs - Download

NB. Analyse factorielle universelle

transpose =: |:      NB. Transposition de matrices
matprod =: + / . *   NB. Produit de matrices
id =: (= / ~) @ i.   NB. Matrice identité

diag =: 3 : 0        NB. Matrice diagonale à partir d'un vecteur
 y * id #y
)

tmatprod =: 3 : 0
 (transpose y) matprod y
)
   
maptmatprod =: 3 : 0
 if. 0 = # y do. 0 0 0 $ 0
 else. (tmatprod {. y), maptmatprod }. y
 end.
)

mapprod =: 4 : 0
 if. 0 = # x do. 0 0 0 $ 0
 else. (({. x) matprod y) , (}. x) mapprod y
 end.
)

NB. Tableau de données
X =: 1 3 $ 90 140 6.0
X =: X ,   60  85 5.9
X =: X ,   75 135 6.1
X =: X ,   70 145 5.8 
X =: X ,   85 130 5.4
X =: X ,   70 145 5.0

n =: # X
p =: # 0 { X

M =: (+ / X) % #X                     NB. Moyenne des colonnes
Y =: X - (1 + 0 * i. #X) * / M        NB. Données centrées
E =: ((+ / Y ^ 2) % #Y) ^ 0.5         NB. Ecarts-types des colonnes
Z =: Y % (1 + 0 * i. #Y) * / E        NB. Données centrées-réduites

NB. Tableau tridimensionnel pour l'AFU
T =: ((1 + 0 * i. # 0 { Z) * / Z) * 0 2 1 |: (id # 0 { Z) * / (1 + 0 * i. #Z)

Z1 =: + / T   NB. Tableau bidimensionnel somme des couches

V =: maptmatprod T
W =: + / V
S =: Z1 matprod (%. W) matprod (transpose Z1) 
LU =: deflation S   NB. Valeurs et vecteurs propres de S
echo LU
U =: > 1 { LU
V =: (transpose Z1) matprod U
V =: V % (1 + 0 * i. #V) * / (+ / V ^ 2) ^ 0.5
C =: T mapprod V
F =: + / C
echo 'Composantes principales :'
echo F