Hello,
Voilà je suis en train de coder un algorithme pour réaliser une ACP sur une matrice quelconque.
Aprés avoir regardé un peu dans des bouquins, j'ai retenu que le calcul d'une ACP nécessite dans un premier temps le calcul des vecteurs propres de la matrice de covariance des colonnes de données. L'algorithme semble donc assez simple a implémenter (j'ai utilisé le package Jama en java pour les opérations sur les matrices).
Partant d'une matrice 12x3 toute bête (centrée), j'obtient comme vecteurs propres:
Pour valider mon algo, je décide de vérifier avec R, et j'obtient:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 0.13 -0.12 -0.98 0.81 -0.56 0.18 0.58 0.82 -0.02
Les valeurs sont OK, mais il y a un problème de signe sur PC2 et PC3 qui sont inversés entre R et mon algo...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 > prcomp(xr) Rotation: PC1 PC2 PC3 [1,] 0.1321494 0.1200675 0.98393105 [2,] 0.8072815 0.5629607 -0.17712125 [3,] 0.5751810 -0.8177158 0.02253337
Je décide donc de reproduire mon algorithme à l'aide de R et j'obtient:
Et la, eh bien encore des résultats différents des deux autres en terme de signe... PCA1 diffère de mon algo et de prcomp avec les signe inversés, PCA2 et 3 sont les même que mon algo, mais ont des signes inversés par rapport à R...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 > eigen(t(xr)%*%xr) // %*% = Multiplication de matrice, t(M) transposé de la matrice $vectors [,1] [,2] [,3] [1,] -0.1321494 -0.1200675 0.98393105 [2,] -0.8072815 -0.5629607 -0.17712125 [3,] -0.5751810 0.8177158 0.02253337
Voilà, n'étant pas spécialiste de l'algèbre linéaire, si quelqu'un a des explications, je suis preneur
Merci d'avance!
Partager