Gráficos alternativos para trazados de "barra de manejo"

15

En mi área de investigación, una forma popular de mostrar datos es usar una combinación de un gráfico de barras con "barras de control". Por ejemplo,

ingrese la descripción de la imagen aquí

Las "barras de control" alternan entre errores estándar y desviaciones estándar según el autor. Por lo general, los tamaños de muestra para cada "barra" son bastante pequeños, alrededor de seis.

Estas parcelas parecen ser particularmente populares en las ciencias biológicas; consulte los primeros documentos de BMC Biology, vol 3 para ver ejemplos.

Entonces, ¿cómo presentarías estos datos?

¿Por qué no me gustan estas tramas?

Personalmente no me gustan estas tramas.

  1. Cuando el tamaño de la muestra es pequeño, ¿por qué no solo mostrar los puntos de datos individuales?
  2. ¿Se está mostrando el SD o el SE? Nadie acepta cuál usar.
  3. ¿Por qué usar barras en absoluto? Los datos (generalmente) no van de 0, pero un primer paso en el gráfico sugiere que sí.
  4. Los gráficos no dan una idea sobre el rango o el tamaño de la muestra de los datos.

R script

Este es el código R que utilicé para generar la trama. De esa manera puede (si lo desea) usar los mismos datos.

                                        #Generate the data
set.seed(1)
names = c("A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3")
prevs = c(38, 37, 31, 31, 29, 26, 40, 32, 39)

n=6; se = numeric(length(prevs))
for(i in 1:length(prevs))
  se[i] = sd(rnorm(n, prevs, 15))/n

                                        #Basic plot
par(fin=c(6,6), pin=c(6,6), mai=c(0.8,1.0,0.0,0.125), cex.axis=0.8)
barplot(prevs,space=c(0,0,0,3,0,0, 3,0,0), names.arg=NULL, horiz=FALSE,
        axes=FALSE, ylab="Percent", col=c(2,3,4), width=5, ylim=range(0,50))

                                        #Add in the CIs
xx = c(2.5, 7.5, 12.5, 32.5, 37.5, 42.5,  62.5, 67.5, 72.5)
for (i in 1:length(prevs)) {
  lines(rep(xx[i], 2), c(prevs[i], prevs[i]+se[i]))
  lines(c(xx[i]+1/2, xx[i]-1/2), rep(prevs[i]+se[i], 2))
}

                                        #Add the axis
axis(2, tick=TRUE, xaxp=c(0, 50, 5))
axis(1, at=xx+0.1, labels=names, font=1,
     tck=0, tcl=0, las=1, padj=0, col=0, cex=0.1)
csgillespie
fuente
66
Ayudar a su campo a llegar a un consenso sobre solo la segunda pregunta sería un gran avance. Significan cosas completamente diferentes.
John
Estoy de acuerdo: generalmente se elige porque da una región más pequeña.
csgillespie
¿Quizás algún título más informativo?
33
Solo como referencia, he visto estos gráficos de barras con barras de error llamadas "Gráficos de dinamita" antes. Aquí hay algunas referencias que dan exactamente las mismas recomendaciones que todos los demás (gráficos de puntos). Tatsuki Koyama, Cuidado con el cartel de dinamita y Drummond & Vowler, 2011 .
Andy W
1
Agregue la imagen nuevamente si puede. Use el cargador de imágenes esta vez para que no se convierta en un enlace muerto.
endolito el

Respuestas:

16

Gracias por todas tus respuestas. Para completar, pensé que debería incluir lo que suelo hacer. Tiendo a hacer una combinación de las sugerencias dadas: puntos, diagramas de caja (cuando n es grande) y se (o sd) rangos.

( Eliminado por el moderador porque el sitio que aloja la imagen ya no parece funcionar correctamente ) .

Desde el gráfico de puntos, está claro que los datos están mucho más extendidos que los gráficos de "barra de control" sugieren. De hecho, ¡hay un valor negativo en A3!


He hecho esta respuesta un CW para no ganar rep.

csgillespie
fuente
33
Esa es una buena respuesta. Además, sugeriría que los puntos fluctúen horizontalmente para que no se superpongan, especialmente si tiene más puntos por grupo que este. En ggplot2, geom_jitter () hará eso.
Harlan
@Harlan: estoy de acuerdo. Aunque si tuviera muchos más puntos, probablemente usaría un diagrama de caja.
csgillespie
1
También me gustan los diagramas de dispersión para conjuntos de datos pequeños (nb, utilizo el término 'diagrama de puntos' para referirme a un diagrama ligeramente diferente). Sin embargo, por lo que vale, la gráfica de barras anterior es más limpia y fácil de leer que esta. No estoy seguro de que eso lo mejore, pero vale la pena señalarlo.
gung - Reinstale a Monica
@Harlan: ¿Alternativamente, hacer que los puntos sean transparentes para que se apilen varios puntos y produzcan un punto más oscuro?
endolito el
¿Tienes la imagen original para reemplazar este enlace muerto?
Endolith
10

La nota clave de Frank Harrell (la más excelente) titulada "Alergia a la información" en useR! el mes pasado mostró alternativas a estos: en lugar de ocultar los datos sin procesar a través de la agregación que proporcionan las barras, los datos sin procesar también se muestran como puntos (o puntos). "¿Por qué ocultar los datos?" fue el comentario de Frank.

Dada la combinación de alpa, eso parece una sugerencia más sensata (y toda la charla más llena de pepitas buenas e importantes).

Dirk Eddelbuettel
fuente
1
¿Está disponible como video? Suena grandioso.
Henrik
1
Creo que la palabra es "será eventualmente": se grabaron las notas clave.
Dirk Eddelbuettel
1
esto es fácil en ggplot, creo, es decir, had.co.nz/ggplot2/geom_jitter.html
Mike Dewar
1
jittertambién está en R. simple
2
Solo para el protocolo, la charla de Frank (en video) ahora está en línea: r-bloggers.com/RUG/2010/08/user-2010-conference-videos
Tal Galili
7

Desde una perspectiva psicológica, abogo por trazar los datos más su incertidumbre sobre los datos. Por lo tanto, en una trama como la que muestra, nunca me molestaría en extender las barras hasta cero, lo que solo sirve para minimizar la capacidad del ojo para distinguir las diferencias en el rango de los datos.

Además, soy francamente anti-bargraph; Los gráficos de barras asignan dos variables al mismo atributo estético (ubicación del eje x), lo que puede causar confusión. Un mejor enfoque es evitar el mapeo estético redundante mapeando una variable al eje xy otra variable a otro atributo estético (p. Ej., Forma de punto o color o ambos).

Finalmente, en su gráfico anterior, solo incluye barras de error por encima del valor, lo que dificulta la capacidad de comparar los intervalos de incertidumbre en relación con las barras por encima y por debajo del valor.

Así es como trazaría los datos (a través del paquete ggplot2). Tenga en cuenta que agrego líneas que conectan puntos en la misma serie; algunos argumentan que esto solo es apropiado cuando las series a través de las cuales se conectan las líneas son numéricas (como parece ser en este caso), sin embargo, siempre que haya una relación ordinal razonable entre los niveles de la variable del eje x, creo las líneas de conexión son útiles para ayudar al ojo a asociar puntos a través del eje x. Esto puede ser particularmente útil para detectar interacciones, que realmente se destacan con líneas.

library(ggplot2)
a = data.frame(names,prevs,se)
a$let = substr(a$names,1,1)
a$num = substr(a$names,2,2)
ggplot(data = a)+
layer(
    geom = 'point'
    , mapping = aes(
        x = num
        , y = prevs
        , colour = let
        , shape = let
    )
)+
layer(
    geom = 'line'
    , mapping = aes(
        x = num
        , y = prevs
        , colour = let
        , linetype = let
        , group = let
    )    
)+
layer(
    geom = 'errorbar'
    , mapping = aes(
        x = num
        , ymin = prevs-se
        , ymax = prevs+se
        , colour = let
    )
    , alpha = .5
    , width = .5
)

enter image description here

Mike Lawrence
fuente
1
Debo agregar que mi recomendación de "graficar solo los datos y la incertidumbre" debe estar calificada: cuando presente los datos a una audiencia que tenga experiencia / experiencia con la variable que se grafica, grafique solo los datos y la incertidumbre. Al presentar datos a una audiencia ingenua y cuando cero es un punto de datos significativo, primero mostraría los datos extendiéndose a cero para que la audiencia pueda orientarse a la escala, luego acercar para mostrar solo los datos y la incertidumbre.
Mike Lawrence
Dado que ha tenido problemas para escribir el código R, ¿podría incluir una imagen JPEG de la trama final? Me parece que subir la imagen a img84.imageshack.us y vincularlo es bastante fácil. Oh, gracias por la respuesta :)
csgillespie
@csgillespie: hecho.
Mike Lawrence
Descubrí que es más fácil leer una trama como esta geom_ribbon()indicando el error. Si no le gusta producir estimaciones aparentes para regiones entre 1 y 2, al menos reduzca el ancho de la barra de error.
JoFrhwld
@JoFrwld: También me gustan las cintas, aunque tiendo a reservarlas para los casos en que la variable del eje x es realmente numérica; mi versión de la regla "no dibujar líneas a menos que la variable del eje x sea numérica" ​​que profeso violar en mi respuesta anterior: Op
Mike Lawrence
2

Tengo curiosidad por saber por qué no te gustan estas tramas. Yo los uso todo el tiempo. Sin querer establecer lo obvio de la floración, le permiten comparar las medias de diferentes grupos y ver si sus IC del 95% se superponen (es decir, la media verdadera probablemente sea diferente).

Supongo que es importante lograr un equilibrio de simplicidad e información para diferentes propósitos. Pero cuando uso estas tramas estoy diciendo: "estos dos grupos son diferentes entre sí de alguna manera importante" [o no].

Me parece genial, pero me interesaría escuchar contraejemplos. Supongo que implícito en el uso de la trama es que los datos no tienen una distribución extraña que hace que la media sea inválida o engañosa.

Chris Beeley
fuente
He agregado una pequeña sección sobre por qué no me gustan estas tramas.
csgillespie
1
@Chris revisa esto sobre la interpretación de CIs superpuestos pubs.amstat.org/doi/abs/10.1198/000313001317097960 También la pregunta original también se refiere a la confusión de usar SE o SD de manera intercambiable mientras son dos cosas diferentes
tosonb1
O, para un análisis en este sitio, consulte stats.stackexchange.com/questions/18215 . @ tosonb1 Su enlace está agotando el tiempo de espera. ¿Podría proporcionar una referencia al documento?
whuber
2

Si los datos son tasas : es decir, el número de éxitos dividido por el número de ensayos, entonces un método muy elegante es un gráfico en embudo. Por ejemplo, consulte http://qshc.bmj.com/content/11/4/390.2.full (disculpas si el enlace requiere una suscripción; avíseme y encontraré otra).

Es posible adaptarlo a otros tipos de datos, pero no he visto ningún ejemplo.

ACTUALIZAR:

Aquí hay un enlace a un ejemplo que no requiere una suscripción (y tiene una buena explicación de cómo podrían usarse): http://understandinguncertainty.org/fertility

Se pueden usar para datos que no son de velocidad, simplemente trazando la media frente al error estándar, sin embargo, pueden perder algo de su simplicidad.

El artículo de Wikipedia no es excelente, ya que solo analiza su uso en los metanálisis. Yo diría que podrían ser útiles en muchos otros contextos.

Simon Byrne
fuente
Los datos no son tarifas necesarias. Podría ser cualquier cosa.
csgillespie
Enlace de suscripción, lamentablemente.
Matt Parker el
... pero aquí está el enlace de Wikipedia en gráficos de embudo: en.wikipedia.org/wiki/Funnel_plot
Matt Parker
2

Yo usaría boxplots aquí; limpio, significativo, no paramétrico ... O vioplot si la distribución es más interesante.


fuente
2
No estoy seguro de que las gráficas de caja o las gráficas de violeta serían adecuadas con un tamaño de muestra tan pequeño (n = 6)
csgillespie
Bien, admito que no he leído la pregunta con suficiente atención, por lo que fue una idea bastante general; Sin embargo, creo que 6 puntos es mínimo pero suficiente para un diagrama de caja. He hecho algunos experimentos y fueron significativos. Por otro lado, obviamente el diagrama de caja no indica el número de observaciones (que es una información importante aquí), por lo que preferiría usar una combinación de ella y puntos.
Con 6 puntos - el diagrama de dispersión es probablemente el mejor (quizás con la adición de un punto rojo para la media)
Tal Galili
2
Generalmente uso diagramas de caja con puntos superpuestos, lo encuentro muy "visual". Las parcelas para violín, en cambio, son un poco difíciles de entender en mi opinión.
nico
1
@csgillespie: ¿Qué indicaría que los gráficos de barras y bigotes son mejores? Están mostrando básicamente la misma información que un diagrama de caja (como usted señala, los bigotes pueden representar varias cosas), solo dan el error solo en una dirección, lo que podría ser bastante confuso, si no falso ... No argumentando por los diagramas de caja . Pero las parcelas de frijol / violín todavía deberían funcionar, incluso para tamaños de muestra relativamente bajos, porque es solo una estimación de densidad gaussiana, como expliqué aquí .
nada101
1

Simplificando el excelente código de @ csgillespie desde arriba:

qplot(
    data=a,
    x=num,
    y=prevs,
    colour=let,
    shape=let,
    group=let,
    ymin=prevs-se,
    ymax=prevs+se,
    position=position_dodge(width=0.25),
    geom=c("point", "line", "errorbar")
    )
James Waters
fuente
0

Prefiero geom_pointrange a errorbar y creo que las líneas distraen en lugar de ser útiles. Aquí hay una versión que encuentro mucho más limpia que la versión @James o @csgillespie:

qplot(
 data=a,
 x=num,
 y=prevs,
 colour=let,
 ymin=prevs-se,
 ymax=prevs+se,
 position=position_dodge(width=0.25),
 geom=c("pointrange"), size=I(2)
 )
Kent Johnson
fuente