Saltar al contenido

Agregar elipses a una gráfica de análisis de componentes principales (PCA)

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)

ingrese la descripción de la imagen aquí

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)

ingrese la descripción de la imagen aquí

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)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *