2016-09-19 2 views
2

Je suis novice en analyse de composantes principales dans R et ma question est assez naïve. J'ai fait un PCA d'une matrice (A) en utilisant la fonction 'prcomp' dans R. Maintenant, je veux tracer un vecteur sur l'espace PCA de PC1 et PC2 de A. Comment est-ce que je suis venu à propos de ce tracé du vecteur?Comment tracer un nouveau vecteur sur un espace PCA dans R

Répondre

1

Utilisez biplot (arrrows rouges sont les dimensions dans l'espace d'origine):

a <- princomp(iris[1:4]) 
biplot(a, cex=0.5) 

enter image description here

vous pouvez faire la projection à l'espace PCA sur votre propre aussi comme suit:

library(ggplot2) 
data <- iris[1:4] 
labels <- iris[,5] 
res <- princomp(data) 
res.proj <- as.matrix(data) %*% res$loadings[,1:2] 
ggplot(as.data.frame(res.proj), aes(Comp.1, Comp.2, col=labels)) + geom_point() 

Même parcelle à l'aide de prcomp (numériquement plus stable):

data <- iris[1:4] 
labels <- iris[,5] 
res <- prcomp(data) 
res.proj <- as.matrix(data) %*% res$rotation[,1:2] 
ggplot(as.data.frame(res.proj), aes(PC1, PC2, col=labels)) + geom_point() 

enter image description here

ggbiplot Fancier:

library(ggbiplot) 
g <- ggbiplot(res, obs.scale = 1, var.scale = 1, 
       groups = labels, ellipse = TRUE, 
       circle = TRUE) 
g <- g + scale_color_discrete(name = '') 
g <- g + theme(legend.direction = 'horizontal', 
       legend.position = 'top') 
print(g) 

enter image description here

+2

Il convient de noter que l'utilisation 'prcomp' est le meilleur moyen de R.' princomp' existe pour la compatibilité avec S-PLUS. –

+0

Bien sûr, si la stabilité numérique est nécessaire, utilisez plutôt prcomp car il utilise svd. –