2017-08-19 1 views
1

Je réalise une analyse PCA expresse et la visualisation sur un petit ensemble de données (20 observations, 17 variables, la plupart d'entre eux fortement corrélés). J'utilise library(psych) avec la fonction prête à l'emploi principal() faisant le plus de travail. J'ai eu une matrice de chargement standartized. Exemple de sortie est la suivante (Vi sont des variables, que plusieurs représentés):r: pca et les observations de traçage dans l'espace de composant principal

 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 
V1 0.20 -0.79 0.46 0.06 -0.20 0.22 -0.06 0.03 -0.15 
V2 0.18 -0.86 0.37 -0.12 -0.09 0.17 -0.11 -0.01 -0.05 
V3 0.72 0.42 -0.16 0.23 -0.35 -0.17 0.21 -0.05 0.03 
V4 0.81 0.34 -0.21 0.34 -0.22 0.03 -0.01 -0.04 0.00 
V5 0.61 -0.38 -0.34 -0.02 0.37 -0.27 0.35 0.03 -0.12 
V6 0.80 0.31 0.02 -0.08 -0.38 0.20 -0.04 -0.13 -0.19 

Je veux conserver 2 ou 3 composants principaux (autres tests suggèrent de le faire) et pour dessiner un diagramme de dispersion de mes données dans le espace PC1-PC2 ou 3D PC1-PC2-PC3. Comment est-il possible de faire cela avec R?

Voici l'exemple de données brutes (premières lignes) sur des paramètres.

field,V1,V2,V3,V4,V5,V6 
Shah-Deniz,37.5,70,16200,23000,300,250 
Sanate,180,150,14000,17000,175,190 
Kern-River,275,250,13000,17000,64,240 
East Texas,90,100,11000,12000,520,160 
Smackover,35,25,13700,15000,50,170 
South Pass,45,60,14100,15000,61,190 
Monroe,27,30,14400,15000,72,150 
Minas,170,230,6500,7300,300,90 

Je suis conscient que la solution est en multipliant en quelque sorte de cette matrice brute par matrice de charges pour obtenir des projections sur l'espace PCi, mais je suis un peu confus avec cette multiplication de la matrice et son ordre après plusieurs essais. Et le deuxième défi est de se disperser lui-même (2D ou 3D) en étiquetant tous les points avec des nombres d'observation. Peut-être y a-t-il déjà une fonction dans le paquet, qui fonctionne cette algèbre matricielle et peut visualiser le résultat à partir de zéro?

Mise à jour. Une confusion vient du fait que les variables dans les données brutes sont incomparables (certaines sont en km, d'autres en m, puis km^2 ou mln.tons). Donc, à un certain stade, la matrice de données mise à l'échelle devrait entrer en jeu?

Répondre

3

Je ne suis pas familier avec la bibliothèque psych, mais vous pouvez le faire facilement dans la base R

X = data.frame(matrix(rnorm(1:100), nrow = 10)) # Make example dataframe 
pca = princomp(X, cor = T) # Perform PCA. Note cor = T should get around your 'variables on different scales' issues as correlation matrix is scale-free. 
scores = pca$scores # Extract PCA scores 
windows() # Plot scores for first 2 pcs 
plot(scores[, 1], scores[, 2], xlab = "PC1", ylab = "PC2", type = "n") 
text(scores[, 1], scores[, 2], row.names(X), cex = 0.8) #you can replace row.names(X) with whatever your observations are called 

Je ne sais pas comment faire le scatterplot 3d du haut de ma tête, mais avec toujours je APC juste faire plusieurs parcelles 2d par exemple PC1 contre PC2, PC1 contre PC3 etc.

+0

Alors simplement? Je suis choqué – astrsk

+0

Yup :) Si vous aimez ma réponse, cela vous dérangerait-il de l'accepter? – jruf003