¿Diagrama de caja para varias distribuciones?

9

Necesito dibujar 20 distribuciones en un solo gráfico en R, y no se ve bien (desordenado) con diagrama de caja regular (20 cuadros) incluso con boxwex = 0.3. ¿Podría sugerirme cómo puedo trazar un tipo de diagrama de caja en R para las 20 distribuciones, con puntos para la mediana y solo una línea en lugar de un cuadro, como el siguiente. También sugiérame si hay algún método R que produzca buenos gráficos de caja, específicamente si desea mostrar varias distribuciones en un solo gráfico.

 -----0----
samarasa
fuente

Respuestas:

12

(Esto es realmente un comentario, pero como requiere una ilustración, debe publicarse como respuesta).

Ed Tufte rediseñó el diagrama de caja en su Pantalla visual de información cuantitativa (pág. 125, Primera edición 1983) precisamente para permitir el "análisis de datos informal y exploratorio, donde el tiempo del investigador debería dedicarse a otros asuntos además de dibujar líneas". He ampliado (de manera perfectamente natural) su rediseño para acomodar los valores atípicos de dibujo en este ejemplo que muestra 70 diagramas de caja paralelos:

Tufte boxplots

Puedo pensar en varias maneras de mejorar esto aún más, pero es característico de lo que uno podría producir en el calor de explorar un conjunto de datos complejo: estamos contentos de hacer visualizaciones que nos permiten ver los datos; Una buena presentación puede venir más tarde.

Compare esto con una versión convencional de los mismos datos:

Diagramas de caja convencionales

Tufte presenta varios otros rediseños basados ​​en su principio de "maximizar la relación de tinta de datos". Su valor radica en ilustrar cómo este principio puede ayudarnos a diseñar gráficos exploratorios efectivos. Como puede ver, la mecánica de trazarlos equivale a encontrar cualquier plataforma gráfica en la que pueda dibujar marcadores de puntos y líneas.

whuber
fuente
¿Podrías ayudarme a dibujar el gráfico superior en R?
samarasa
1
@kkp Aquí hay un borrador . Buena respuesta (+1).
chl
Y aquí hay más posibilidades en R, que se encuentran en SO: ¿ Funciones disponibles para diagramas de caja de Tufte en R? .
chl
@chl Gracias por el enlace. Para el registro, incluye el código R en funcionamiento para producir estos gráficos de caja rediseñados. Curiosamente, esa pregunta se publicó solo tres días después de esta ...
whuber
1
@naught Observaciones interesantes. Un uso potencial de tales diagramas de caja es una variante del "diagrama esquemático errante" de Tukey en el que un diagrama de dispersión (grande) se divide a lo largo de la coordenada xy los valores de y se resumen mediante un diagrama de caja en cada bin. Tal procedimiento puede generar fácilmente 70 o más diagramas de caja uno al lado del otro. Las aplicaciones incluyen casi cualquier dato multidimensional: por ejemplo, la coordenada x podría representar una profundidad de suelo muestreada cada centímetro y la coordenada y podría representar datos obtenidos en múltiples ubicaciones.
whuber
10

Frijoles

Posiblemente las parcelas más geniales de la historia, estas son básicamente una implementación de múltiplos pequeños de parcelas para violín. Las gráficas de violín tienen una gran ventaja sobre las gráficas de caja: pueden mostrar muchos más detalles para distribuciones que no son normales (por ejemplo, pueden mostrar distribuciones bimodales realmente bien). Debido a que generalmente se basan en el suavizado gaussiano (o similar), no funcionarán realmente bien para distribuciones con puntos extremos altos (como distribuciones exponenciales), pero tampoco lo harán los diagramas de caja.

Beanplots se puede lograr muy fácilmente en R - solo instale el paquete beanplot :

library(beanplot)

# Sampling code from Greg Snow's answer:
my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )

beanplot(my.dat)

Beanplot!

La beanplotfunción tiene toneladas de opciones , por lo que puede personalizarla según el deseo de su corazón. También hay una manera de hacer beanplots en ggplot2 (necesita la última versión):

library(ggplot2)

my.dat <- lapply(1:20, function(x) rnorm(x+10, sample(10, 1), sample(3,1)))
my.df <- melt(my.dat)
ggplot(my.df, aes(x=L1, y=value, group=L1)) + geom_violin(trim=FALSE) +
  geom_segment(aes(x=L1-0.1, xend=L1+0.1, y=value, yend=value), colour='white')

GGplot2 beanplot

nada101
fuente
3

Aquí hay un código R de muestra para un par de formas de hacerlo, probablemente desee ampliar esto (incluir etiquetas, etc.) y tal vez convertirlo en una función:

my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )

tmp <- boxplot(my.dat, plot=FALSE, range=0)

# box and median only
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[2,], seq_along(my.dat), tmp$stats[4,] )
points( tmp$stats[3,], seq_along(my.dat) )

# wiskers and implied box
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[1,], seq_along(my.dat), tmp$stats[2,] )
segments( tmp$stats[4,], seq_along(my.dat), tmp$stats[5,] )
points( tmp$stats[3,], seq_along(my.dat) )

ingrese la descripción de la imagen aquí

Greg Snow
fuente