Estoy buscando implementar un biplot para el análisis de componentes principales (PCA) en JavaScript. Mi pregunta es, ¿cómo determino las coordenadas de las flechas a partir de la salida de la descomposición vectorial singular (SVD) de la matriz de datos?
Aquí hay un ejemplo de biplot producido por R:
biplot(prcomp(iris[,1:4]))
Intenté buscarlo en el artículo de Wikipedia sobre biplot, pero no es muy útil. O correcto No estoy seguro de cuál.
biplot()
. Además, ¿por qué molestarse con la integración de R-JS para algo que requiere solo un par de líneas de código?Respuestas:
Hay muchas formas diferentes de producir un biplot PCA y, por lo tanto, no hay una respuesta única a su pregunta. Aquí hay una breve descripción general.
Suponemos que la matriz de datos tiene n puntos de datos en filas y está centrada (es decir, las medias de columna son todas cero). Por ahora, no suponemos que esté estandarizado, es decir, consideramos PCA en la matriz de covarianza (no en la matriz de correlación). PCA equivale a una descomposición de valor singular X = U S V ⊤ , puede ver mi respuesta aquí para más detalles: Relación entre SVD y PCA. ¿Cómo usar SVD para realizar PCA?X n
En un biplot PCA, dos primeros componentes principales se trazan como un diagrama de dispersión, es decir, la primera columna de se traza contra su segunda columna. Pero la normalización puede ser diferente; Por ejemplo, uno puede usar:U
Además, las variables originales se trazan como flechas; es decir, coordenadas de una i -ésima flecha punto final están dados por la i valor-ésimo en la primera y segunda columna de V . Pero de nuevo, uno puede elegir diferentes normalizaciones, por ejemplo:(x,y) i i V
Así es como se ve todo eso para el conjunto de datos de Fisher Iris:
[Cualquiera sea la combinación que se use, podría ser necesario escalar las flechas por algún factor constante arbitrario para que tanto las flechas como los puntos de datos aparezcan aproximadamente en la misma escala.]
biplot
biplot
biplot
PCA en matriz de correlación
Otras lecturas:
fuente