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