Cuando construye un biplot para un análisis de PCA, tiene puntajes de PC1 del componente principal en el eje xy puntajes de PC2 en el eje y. ¿Pero cuáles son los otros dos ejes a la derecha y la parte superior de la pantalla?
Cuando construye un biplot para un análisis de PCA, tiene puntajes de PC1 del componente principal en el eje xy puntajes de PC2 en el eje y. ¿Pero cuáles son los otros dos ejes a la derecha y la parte superior de la pantalla?
Respuestas:
¿Quiere decir, por ejemplo, en la trama que devuelve el siguiente comando?
biplot(prcomp(USArrests, scale = TRUE))
En caso afirmativo, los ejes superior y derecho deben usarse para interpretar las flechas rojas (puntos que representan las variables) en la gráfica.
Si sabe cómo funciona el análisis de componentes principales, y puede leer el código R, el siguiente código le muestra cómo prcomp()
se tratan inicialmente los resultados biplot.prcomp()
antes del trazado final biplot.default()
. Estas dos funciones se llaman en segundo plano cuando traza biplot()
, y el siguiente extracto de código modificado es de biplot.prcomp()
.
x<-prcomp(USArrests, scale=TRUE)
choices = 1L:2L
scale = 1
pc.biplot = FALSE
scores<-x$x
lam <- x$sdev[choices]
n <- NROW(scores)
lam <- lam * sqrt(n)
lam <- lam^scale
yy<-t(t(x$rotation[, choices]) * lam)
xx<-t(t(scores[, choices])/lam)
biplot(xx,yy)
En breve, en el ejemplo anterior, la matriz de cargas variables (x$rotation
) se escala por la desviación estándar de los componentes principales ( x$sdev
) por la raíz cuadrada del número de observaciones. Esto establece la escala de los ejes superior y derecho a lo que se ve en el diagrama.
Existen otros métodos para escalar las cargas variables, también. Estos son ofrecidos, por ejemplo, por el paquete R vegano.
Tengo una mejor visualización para el biplot. Por favor, consulte la siguiente figura.
En el experimento, estoy tratando de mapear puntos 3d en 2d (conjunto de datos simulados).
El truco para entender biplot en 2d es encontrar el ángulo correcto para ver lo mismo en 3d. Todos los puntos de datos están numerados, puede ver el mapeo claramente.
Aquí está el código para reproducir los resultados.
require(rgl)
set.seed(0)
feature1=round(rnorm(50)*10+20)
feature2=round(rnorm(50)*10+30)
feature3=round(runif(50)*feature1)
d=data.frame(feature1,feature2,feature3)
head(d)
plot(feature1,feature2)
plot(feature2,feature3)
plot(feature1,feature3)
plot3d(d$feature1, d$feature2, d$feature3, type = 'n')
points3d(d$feature1, d$feature2, d$feature3, color = 'red', size = 10)
shift <- matrix(c(-2, 2, 0), 12, 3, byrow = TRUE)
text3d(d+shift,texts=1:50)
grid3d(c("x", "y", "z"))
pr.out=prcomp(d,scale.=T)
biplot(pr.out)
grid()
biplot
comando en R y reproducido en su figura en el lado derecho: allí la nube de puntos está estandarizada pero las flechas tienen longitudes correspondientes a las variaciones.
biplot
produce con el scale=0
argumento.