Formas de reducir datos de alta dimensión para visualización


19

Estoy trabajando en una simulación física 2D y estoy recopilando datos a tiempo en varios puntos. Estos puntos discretos están a lo largo de líneas verticales, con múltiples líneas en la dirección axial. Esto hace que el conjunto de datos sea efectivamente 4D.

Por ejemplo, supongamos que tengo puntos de colección en las coordenadas (X, Y) de:

  • (0,0), (1,0), (2,0)
  • (0,1), (1,1), (2,1)
  • (0,2), (1,2), (2,2)

y en cada punto estoy recolectando donde es presión, es temperatura, son los componentes X e Y de la velocidad. En cada iteración de la simulación, estas variables se almacenan para los 9 puntos de recolección. Entonces, todos mis datos son continuos en el tiempo en cada punto discreto en el espacio.{PAG,T,U,V}PAGTU,V

Por ejemplo, los datos para un solo punto se verían así:

Presión vs tiempo para un solo punto U-Velocity vs Time para un solo punto

Estoy interesado en mostrar, por ejemplo, la presión en todos los puntos en todo momento para mostrar ondas verticales y axiales. Si tuviera que hacer esto a lo largo de una sola línea (vertical o axial), podría usar un diagrama de cascada con ejes (Y, tiempo, presión). Pero si tengo 3 líneas verticales y 3 líneas axiales, serían 6 trazados en cascada para obtener una imagen completa del movimiento de las olas en ambas direcciones. Las coordenadas espaciales son variables discretas mientras que el campo (en este caso Presión) y el tiempo son continuos.

En las figuras anteriores, por ejemplo, el pico de presión grande en podría estar viajando en la dirección X o Y.t0.000125

¿Hay algún método para mostrarlos todos a la vez? Por lo general, se puede agregar color para hacer visible una "cuarta" dimensión, pero ¿hay otro enfoque posible? Planeo trazarlo de tantas formas como sea posible para ver si algo revela información que otros no, así que por favor propongan alguna idea.

¿Qué pasaría si la simulación fuera 3D y tuviera un conjunto de datos 5D resultante? ¿Eso cambia los posibles métodos de visualización?


¿Todas las dimensiones son discretas o algunas continuas? Si es así, ¿cuáles son cuáles?
nada101

Los (X, Y) son discretos mientras que (P, tiempo) son continuos.
tpg2114

Recomiendo considerar las facetas como alternativa (o complemento) a 3-d
Michael Bishop

¿Tiene que ser un diagrama estático que se pueda imprimir? De lo contrario, podría mostrar sus datos como una serie de trazados de tiempo transcurrido. Si no recuerdo mal, el software JMP hace ese tipo de cosas.
Emil Friedman

1
@ naught101 Actualizado de forma acústica.
tpg2114

Respuestas:


14

Tenía algunos datos de siete dimensiones yo mismo. Aunque finalmente me decidí por una pequeña selección de cortes tridimensionales, una opción es el Gráfico de coordenadas paralelas . ¡Esto funciona para un número arbitrario de dimensiones! De Wikipedia:

Las coordenadas paralelas son una forma común de visualizar geometría de alta dimensión y analizar datos multivariados.

Para mostrar un conjunto de puntos en un espacio n-dimensional, se dibuja un fondo que consta de n líneas paralelas, típicamente verticales e igualmente espaciadas. Un punto en el espacio n-dimensional se representa como una polilínea con vértices en los ejes paralelos; La posición del vértice en el eje i-ésimo corresponde a la i-ésima coordenada del punto.

ingrese la descripción de la imagen aquí


Esa es una gran trama. Excelente uso del color. La leyenda sería mejor en el lado, y reordenada para que coincida con los colores en el último eje, pero no es vital.
nada101

3
@ naught101 Es de Wikipedia, siéntase libre de enviar una mejorada allí ;-)
gerrit

¡Esta es una gran técnica!
Sohaib I

4

Gráficos de pares : este no es un método de reducción de dimensionalidad, pero es una muy buena manera de obtener una visión general rápida de dónde podrían estar algunas relaciones significativas. En R, el paquete base contiene la pairs()función, que es buena para datos continuos (convierte todo a continuo). Una mejor función es ggpairs(), desde el GGallypaquete:

library(GGally)
ggpairs(iris, colour='Species')

Parcela de pares de iris


3

El análisis de componentes principales es generalmente una buena opción para la reducción de dimensiones en la mayoría de los casos, no estoy seguro de que se adapte a su problema particular, pero encontrará las dimensiones ortogonales a lo largo de las cuales se capturan la mayoría de las variaciones de muestras de datos. Si desarrolla en R, puede usar prcomp()para convertir simplemente su matriz original de puntos de datos al formulario PCA.


2

Aquí hay un par de formas de retratar datos 3-D con ggplot2. Puede combinar enfoques (cuadrículas de facetas, colores, formas, etc.) para aumentar la dimensionalidad de su gráfico.

doInstall <- TRUE  # Change to FALSE if you don't want packages installed.
toInstall <- c("ggplot2")
if(doInstall){install.packages(toInstall, repos = "http://cran.r-project.org")}
lapply(toInstall, library, character.only = TRUE)

# Air passenger data. ts converted to long matrix:
myData <- data.frame(Year = c(floor(time(AirPassengers) + .01)),
                     Month = c(cycle(AirPassengers)), 
                     Value = c(AirPassengers))
# Easy conversion code from: http://stackoverflow.com/a/4973859/479554

# Convert month numbers to names, using a built-in constant:
myData$Month <- factor(myData$Month)
levels(myData$Month) <- month.abb

# One possibility:
zp1 <- ggplot(myData,
              aes(x = Year, y = Value, colour = Month))
zp1 <- zp1 + geom_line()
print(zp1)  # This is fine, if you can differentiate between the colors

# Another possibility:
zp2 <- ggplot(myData,
              aes(x = Year, y = Value))
zp2 <- zp2 + geom_line()
zp2 <- zp2 + facet_wrap(~ Month)
print(zp2)  # This is fine, but it's hard to compare across facets

# A third possibility; plotting reference lines across each facet:
referenceLines <- myData  # \/ Rename
colnames(referenceLines)[2] <- "groupVar"
zp3 <- ggplot(myData,
              aes(x = Year, y = Value))
zp3 <- zp3 + geom_line(data = referenceLines,  # Plotting the "underlayer"
                       aes(x = Year, y = Value, group = groupVar),
                       colour = "GRAY", alpha = 1/2, size = 1/2)
zp3 <- zp3 + geom_line(size = 1)  # Drawing the "overlayer"
zp3 <- zp3 + facet_wrap(~ Month)
zp3 <- zp3 + theme_bw()
print(zp3)

ingrese la descripción de la imagen aquí


Esa es la misma trama, repetida 12 veces, pero con diferentes líneas resaltadas, ¿verdad? ¡Definitivamente una forma interesante de ver esos datos! Otra forma sería trazar solo la serie de tiempo mensual original, y luego facetar por mes, y trazar los puntos del mes encima. La misma idea, pero con la serie de tiempo "real" allí.
naught101

De esta manera: APdf <- data.frame(Time=c(time(AirPassengers)), Year=c(floor(time(AirPassengers))), Month=c(cycle(AirPassengers)), Value=c(AirPassengers)) ; APdf$Month <- month.abb[APdf$Month] ; ggplot(APdf, aes(x=Time, y=Value)) + facet_wrap(facets='Month') + geom_line(data=APdf[,c(1,4)], colour='gray') + geom_point(). Maldita sea, me encanta ggplot2.
nada101

1

pag=pagmetromiunnorteingrese la descripción de la imagen aquí

Este gráfico muestra los perfiles de velocidad en diferentes ubicaciones axiales, brindándole un mapa 2D del campo de flujo. Las líneas verticales representan la velocidad 0. Las regiones sin puntos no son parte del dominio computacional. Por supuesto, esto no es fácilmente extensible a datos 3D ...


¿Para qué es el cuadrado blanco?
nada101

Esta es una representación de campo de flujo. Es un flujo alrededor de una esquina, los perfiles representan la velocidad en diferentes ubicaciones axiales ...
FrenchKheldar

Okay. Tendría sentido agregar alguna descripción a la respuesta. La trama es bastante opaca por sí sola ...
naught101
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.