View file src/j/acp.ijs - Download

NB. Analyse en composantes principales
NB. Exemple tiré de http://www.math.u-bordeaux.fr/~mchave100p/wordpress/wp-content/uploads/2013/10/ACP_L3.pdf
NB.                 http://log.chez.com/text/math/ACP_L3.pdf

transpose =: |:
matprod =: + / . *
id =: (= / ~) @ i.

diag =: 3 : 0
 y * id # y
)

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

C =: ((transpose Y) matprod Y) % # Y   NB. Matrice des covariances
R =: ((transpose Z) matprod Z) % # Z   NB. Matrice des corrélations

LV =: deflation R                      NB. Valeurs et vecteurs propres
V =: > 1 { LV                NB. Vecteurs propres
NB. V =: V % (1 + 0 * i. # V) * / (+ / V ^ 2) ^ 0.5   NB. Vecteurs propres normés
F =: Z matprod V                       NB. Composantes principales

echo 'Composantes principales :'
echo F

S =: (Z matprod transpose Z) % # Z
KU =: deflation S
U =: > 1 { KU
NB. U =: U % (1 + 0 * i. # U) * / (+ / U ^ 2) ^ 0.5
A =: ((transpose Z) matprod U) % # Z

echo 'Coordonnées factorielles des variables :'
echo A

L =: diag (> 0 { LV) ^ 0.5
K =: diag (> 0 { KU) ^ 0.5

F1 =: U matprod K
A1 =: V matprod L