9 votos

Cómo trazar una 5D conjunto de datos en "star coordenadas"?

Estoy leyendo el papel de "Estrella de Coordenadas: Un Multidimensional de la Técnica de Visualización con un Tratamiento Uniforme de las Dimensiones" y tratando de trazar mis datos.

Digamos que tengo $A(2,5,3,1,8)$, una de cinco dimensiones del punto de datos, y los puntos se calculan por la fórmula explicada en el papel.

La idea básica de la Estrella de Coordenadas es organizar la los ejes de coordenadas en un círculo en un plano bidimensional con la igualdad (inicialmente) los ángulos entre los ejes con una origen en el centro del círculo (Figura 1). Inicialmente, todos los los ejes tienen la misma longitud. Los puntos de datos se ajustan a la la longitud del eje, con el mínimo de asignación a la el origen y el máximo hasta el otro extremo del eje. Vectores unitarios se calculan en consecuencia. ...

Esto es simplemente una extensión de la típica 2d y 3d dispersión de las parcelas de mayores dimensiones con la normalización.

Tengo dificultades para comprender la idea. ¿Cómo puedo parcela? El principal problema es que yo no podría entender la fórmula en el papel.

12voto

jldugger Puntos 7490

La "estrella de coordenadas" están destinados a ser modificados de forma interactiva, a partir de un valor predeterminado. Esta respuesta muestra cómo crear el defecto; el interactivo modificaciones son la programación de detalle.

Los datos son considerados como una colección de vectores $x_j = (x_{j1}, x_{j2}, \ldots, x_{jd})$$\mathbb{R}^d$. Estos son los primeros normalizado por separado dentro de cada coordenada, la transformación lineal de los datos de $\{x_{ji}, j=1, 2, \ldots\}$ en el intervalo de $[0,1]$. Esto se hace, por supuesto, en primer lugar, restando el valor mínimo de cada elemento y dividiendo por el rango. Llame a los datos normalizados $z_j$.

La forma habitual de $\mathbb{R}^d$ es el conjunto de vectores $e_i = (0, 0, \ldots, 0, 1, 0, 0, \ldots, 0)$ tener una sola $1$ $i^\text{th}$ lugar. En términos de esta base, $z_j = z_{j1}e_1 + z_{j2}e_2 + \cdots + z_{jd}e_d$. Una "estrella coordenadas de la proyección de" elige un conjunto de distintos vectores unitarios $\{u_i, i=1, 2, \ldots, d\}$ $\mathbb{R}^2$ y mapas de $e_i$$u_i$. Esto define una transformación lineal de$\mathbb{R}^d$$\mathbb{R}^2$. Este mapa se aplica a la $z_j$--es sólo una multiplicación de la matriz--para crear un punto bidimensional en la nube, representado como un diagrama de dispersión. La unidad de vectores $u_i$ son rotulados de referencia.

(Una versión interactiva que permite al usuario rotar cada una de las $u_i$ individualmente).


Para ilustrar esto, aquí hay un R implementación aplicada a un conjunto de datos de automóvil de características de rendimiento. Primero vamos a obtener los datos:

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

El primer paso es normalizar los datos:

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

Como valor predeterminado, vamos a crear $d$ equidistantes de la unidad de vectores de la $u_i$. Estos determinan la proyección prj que se aplica a $z$:

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--todos estamos listos para la trama. Es inicializado 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í es la trama 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")

Star plot


Para entender este argumento, que podría ayudar a compararlo con el método tradicional, el diagrama de dispersión de la matriz:

pairs(x)

Scatterplot matrix


Una correlación basada en el análisis de componentes principales (PCA) 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ía de la varianza es explicada 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 por la salida a la segunda 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 el valor predeterminado de la estrella coordenadas de la parcela está proyectando a lo largo de la primera componente principal y por lo tanto está mostrando, esencialmente, algunos de dos dimensiones de la combinación de la segunda hasta la quinta Pc. Su valor en comparación con el PCA de resultados (o factor analysis) es, por tanto, cuestionable; el principal mérito puede ser en la propuesta de interactividad.

Aunque R's por defecto diagrama de dispersión biespacial parece terrible, aquí es para la comparación. Para hacerlo coincidir con el de la estrella de las coordenadas de la parcela mejor, sería necesario permutar las $u_i$ a de acuerdo con la secuencia de los ejes que se muestran en este diagrama de dispersión biespacial.

Biplot

1voto

AusTravel Puntos 6

Además de la bonita respuesta por @whuber, me gustaría añadir algunas otras opciones para la visualización multidimensional (multivariante) datos en "star coordenadas", por el bien de la más amplia cobertura. Mi respuesta se centra en la realización de tales visualización de datos multivariantes en R.

Voy a empezar por decir que la estrella de las parcelas (en ambos araña y radar variantes) son soportados por R's base graphics paquete a través de la función stars(): http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/stars.html. Siguiente en la R "cadena alimentaria" va, obviamente, ggplot2 paquete, que AFAIK actualmente no tiene funciones específicas para este tipo de maquina (por favor, corrígeme si no estoy actualizada sobre esto). Sin embargo, una implementación básica por Hadley Wickham, usando coord_polar(), se puede encontrar aquí. Además, un ggplot2 basados ggsubplot paquete ofrece la función geom_star(): http://www.inside-r.org/packages/cran/ggsubplot/docs/geom_star.

Otros paquetes que contienen la estrella de trazado funcionalidad 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.

En adición a lo anterior, cabe señalar que es posible crear estrella de parcelas en la Web habilitada para software, que fácilmente interfaces con R. Por ejemplo, aquí es una variación de una estrella de la parcela en plotly, donde se llama polar gráfico de área: https://plot.ly/r/polar-chart/#Polar-Area-Chart. Hablando de R y habilitadas en la Web de visualización de datos, es imposible no hablar de una gran D3.js la biblioteca, que también se puede acceder desde R. Aquí es cómo hacer un gran aspecto de la estrella de la parcela, mediante D3.js: http://www.visualcinnamon.com/2013/09/making-d3-radar-chart-look-bit-better.html.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X