Solución:
Como no menciona esto en su pregunta, asumiré que el paquete que utilizó es vegan
, ya que tiene la función rda()
que acepta el scale=TRUE
argumento.
Tu inicial plot()
La llamada se modificó ya que no se dan algunas de las variables.
library(vegan)
prin_comp<-rda(data[,2:9], scale=TRUE)
pca_scores<-scores(prin_comp)
plot(pca_scores$sites[,1],
pca_scores$sites[,2],
pch=21,
bg=as.numeric(data$Waterbody),
xlim=c(-2,2),
ylim=c(-2,2))
arrows(0,0,pca_scores$species[,1],pca_scores$species[,2],lwd=1,length=0.2)
Para hacer elipses, funciona ordiellipse()
del paquete vegan
se utiliza. Como argumentos, se debe proporcionar el objeto de análisis PCA y la variable de agrupación. Para controlar el número de puntos incluidos en la elipse, argumento conf=
puede ser usado.
ordiellipse(prin_comp,data$Waterbody,conf=0.99)
Aquí está un ggplot
solución, usando el bonito ggbiplot
Biblioteca. Una mejora obvia sobre plot
son las etiquetas de este.
library(devtools) # don't forget to install Rtools first
install_github("vqv/ggbiplot")
library(ggbiplot)
data.class <- data[,1]
data.pca <- prcomp(data[,2:9], scale. = TRUE)
g <- ggbiplot(data.pca, obs.scale = 1, var.scale = 1,
groups = data.class, ellipse = TRUE, circle = TRUE)
g <- g + scale_color_discrete(name="")
g <- g + theme(legend.direction = 'horizontal',
legend.position = 'top')
print(g)
Solo voy a agregar esto porque podría ayudar a los nuevos usuarios:
Si sus datos de agrupación son categóricos, debe usar as.factor
o obtendrás:
(Error: debe usar un vector en
[
, no un objeto de la matriz de clases.)
Cambiado a :
data.pca <- prcomp(dataPCA[,2:4], scale. = TRUE)
g <- ggbiplot(data.pca, obs.scale = 1, var.scale = 1,
groups = as.factor(dataPCA$Gender), ellipse = TRUE, circle = TRUE)
g <- g + scale_color_discrete(name="")
g <- g + theme(legend.direction = 'horizontal', legend.position = 'top')
print(g)