¿Cómo trazar un conjunto de datos 5D en "coordenadas de estrella"?

8

Estoy leyendo el documento "Coordenadas de estrellas: una técnica de visualización multidimensional con tratamiento uniforme de dimensiones" y estoy tratando de trazar mis datos.

Digamos que tengo , un punto de datos de cinco dimensiones, y los puntos se calculan mediante la fórmula explicada en el documento. A(2,5,3,1,8)

La idea básica de las coordenadas de estrella es organizar los ejes de coordenadas en un círculo en un plano bidimensional con ángulos iguales (inicialmente) entre los ejes con un origen en el centro del círculo (Figura 1). Inicialmente, todos los ejes tienen la misma longitud. Los puntos de datos se escalan a la longitud del eje, con el mapeo mínimo al origen y el máximo al otro extremo del eje. Los vectores unitarios se calculan en consecuencia. ...

Esto es simplemente una extensión de los gráficos de dispersión 2d y 3d típicos a dimensiones superiores con normalización.

Me cuesta entender la idea. ¿Cómo lo trazo? El principal problema es que no podía entender la fórmula en el documento.

solti
fuente
¿Qué quieres tramar? la representación 3d? una representación 2D que mostraría algún agrupamiento?
lcrmorin
2
Espera que Google lo lea, lea el periódico y encuentre "la fórmula" ... Proporcione más información.
Nick Cox
Esta técnica está estrechamente relacionada con un "biplot" de PCA. Creo que las "coordenadas de estrella" pueden ser las mismas que las utilizadas en un biplot para un PCA en el que el primer componente principal es y el segundo PC es cualquier vector ortogonal a él. (1,1,,1)
whuber
gracias muchachos por la respuesta @Imorin Creo que la representación en 2D .. @ whuber ♦ -son biplot y coordenada de estrella similar quieres decir?
solti
He reducido mi pregunta ... ¿cómo encuentro el vector unitario a lo largo de x e y.
solti

Respuestas:

10

Las "coordenadas de estrella" están destinadas a ser modificadas interactivamente, comenzando con un valor predeterminado. Esta respuesta muestra cómo crear el valor predeterminado; Las modificaciones interactivas son un detalle de programación.

Los datos se consideran una colección de vectores. xj=(xj1,xj2,,xjd) en Rd. Primero se normalizan por separado dentro de cada coordenada, transformando linealmente los datos.{xji,j=1,2,} en el intervalo [0,1]. Esto se hace, por supuesto, primero restando su mínimo de cada elemento y dividiendo por el rango. Llamar a los datos normalizadoszj.

La base habitual de Rd es el conjunto de vectores ei=(0,0,,0,1,0,0,,0) teniendo un solo 1 en el ithsitio. En términos de esta base,zj=zj1e1+zj2e2++zjded. Una "proyección de coordenadas de estrella" elige un conjunto de vectores unitarios distintos{ui,i=1,2,,d} en R2 y mapas ei a ui. Esto define una transformación lineal deRd a R2. Este mapa se aplica a lazj--es solo una multiplicación matricial-- para crear una nube de puntos bidimensional, representada como un diagrama de dispersión. Los vectores unitariosui están dibujados y etiquetados para referencia.

(Una versión interactiva permitirá al usuario rotar cada una de las ui individualmente.)


Para ilustrar esto, aquí hay una Rimplementación aplicada a un conjunto de datos de características de rendimiento del automóvil. Primero obtengamos los datos:

library(MASS)
x <- subset(Cars93, 
       select=c(Price, MPG.city, Horsepower, Fuel.tank.capacity, Turn.circle))

El paso inicial es normalizar los datos:

x.range <- apply(x, 2, range)
z <- t((t(x) - x.range[1,]) / (x.range[2,] - x.range[1,]))

Por defecto, creemos d vectores unitarios igualmente espaciados para el ui. Estos determinan la proyección prjque se aplica az:

d <- dim(z)[2] # Dimensions
prj <- t(sapply((1:d)/d, function(i) c(cos(2*pi*i), sin(2*pi*i))))
star <- z %*% prj

Eso es todo, todos estamos listos para tramar. Se inicializa para proporcionar espacio para los puntos de datos, los ejes de coordenadas y sus etiquetas:

plot(rbind(apply(star, 2, range), apply(prj*1.25, 2, range)), 
     type="n", bty="n", xaxt="n", yaxt="n",
     main="Cars 93", xlab="", ylab="")

Aquí está el gráfico en sí, con una línea para cada elemento: ejes, etiquetas y puntos:

tmp <- apply(prj, 1, function(v) lines(rbind(c(0,0), v)))
text(prj * 1.1, labels=colnames(z), cex=0.8, col="Gray")
points(star, pch=19, col="Red"); points(star, col="0x200000")

Trama estrella


Para comprender este gráfico, podría ser útil compararlo con un método tradicional, la matriz de diagrama de dispersión:

pairs(x)

Matriz de diagrama de dispersión


Un análisis de componentes principales (PCA) basado en correlación crea casi el mismo resultado.

(pca <- princomp(x, cor=TRUE))
pca$loadings[,1]
biplot(pca, choices=2:3)

La salida para el primer comando es

Standard deviations:
   Comp.1    Comp.2    Comp.3    Comp.4    Comp.5 
1.8999932 0.8304711 0.5750447 0.4399687 0.4196363 

La mayor parte de la varianza se explica por el primer componente (1.9 versus 0.83 y menos). Las cargas en este componente son casi iguales en tamaño, como se muestra en la salida del segundo comando:

     Price           MPG.city         Horsepower Fuel.tank.capacity        Turn.circle 
 0.4202798         -0.4668682          0.4640081          0.4758205          0.4045867 

Esto sugiere, en este caso, que la gráfica de coordenadas de estrella predeterminada se está proyectando largo del primer componente principal y, por lo tanto, muestra, esencialmente, una combinación bidimensional de las PC segunda a quinta. Su valor en comparación con los resultados de PCA (o un análisis factorial relacionado) es, por lo tanto, cuestionable; El mérito principal puede estar en la interactividad propuesta.

Aunque Rel biplot predeterminado se ve horrible, aquí es para comparar. Para que coincida mejor con el diagrama de coordenadas de la estrella, deberá permutar elui para estar de acuerdo con la secuencia de ejes que se muestra en este biplot.

Biplot

whuber
fuente
1

Además de la buena respuesta de @whuber, me gustaría agregar algunas otras opciones para mostrar datos multidimensionales (multivariados) en "coordenadas de estrella", en aras de una cobertura más completa. Mi respuesta se centra en realizar tal visualización de datos multivariados en R.

Comenzaré diciendo que las gráficas de estrellas (en las variantes de araña y radar ) son compatibles con Rel graphicspaquete base de la función stars(): http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/ estrellas.html . El siguiente en la R"cadena alimentaria" va, obviamente, el ggplot2paquete, que AFAIK actualmente no tiene funciones específicas para este tipo de parcelas (corríjame, si no estoy actualizado sobre esto). Sin embargo, una implementación básica de Hadley Wickham, usando coord_polar(), se puede encontrar aquí . Además, un ggsubplotpaquete basado en ggplot2 ofrece la función relevante geom_star(): http://www.inside-r.org/packages/cran/ggsubplot/docs/geom_star .

Otros paquetes que contienen la funcionalidad de trazado de estrellas incluyen: psych- funciones spider()y radar()- http://personality-project.org/r/html/spider.html , plotrix- función radial.plot()- http://onertipaday.blogspot.com/2009/01/radar -chart.html ) y, posiblemente, algunos otros.

Además de lo anterior, debe tenerse en cuenta que es posible crear diagramas de estrellas en un software habilitado para la Web , que interactúa fácilmente con ellos R. Por ejemplo, aquí hay una variación de un diagrama de estrellas en plotly, donde se llama gráfico de área polar: https://plot.ly/r/polar-chart/#Polar-Area-Chart . Hablando de Rvisualización de datos habilitada para la web, es imposible no mencionar la gran biblioteca D3.js, a la que también se puede acceder R. Aquí es cómo hacer una trama estelar de gran apariencia, usando D3.js: http://www.visualcinnamon.com/2013/09/making-d3-radar-chart-look-bit-better.html .

Aleksandr Blekh
fuente
2
Su contribución es apreciada. Sin embargo, no parece ser directamente relevante para este hilo. El documento al que hace referencia el OP está interesado en las visualizaciones "... para el descubrimiento de clústeres y las tareas de análisis de múltiples factores". Considera que las coordenadas , no la forma del trazado, son la innovación relevante, alegando que son "... transformaciones avanzadas que mejorarán la comprensión de los datos en varias dimensiones [ sic ]". En particular, las "coordenadas de estrella" no son simplemente las coordenadas predeterminadas en un diagrama de estrella radial, como parece suponer que su respuesta es.
whuber
1
@whuber: Gracias por sus amables palabras y por señalar el problema. Al volver a leer el documento, estoy de acuerdo con su comentario. Hay una diferencia esencial entre el enfoque sugerido en el documento y el enfoque estándar de gráficos de estrellas. Sin embargo, desde la perspectiva de visualización de datos y la idea central de presentar datos multidimensionales ( transformados ) a través del sistema de coordenadas polares , todavía están relacionados.
Aleksandr Blekh