¿Cómo ignoraría los valores atípicos en ggplot2 boxplot? No solo quiero que desaparezcan (es decir, outlier.size = 0), pero quiero que se ignoren de modo que el eje y escale para mostrar el percentil 1 ° / 3 °. Mis valores atípicos están causando que la "caja" se encoja tanto que prácticamente es una línea. ¿Hay algunas técnicas para lidiar con esto?
Editar Aquí hay un ejemplo:
y = c(.01, .02, .03, .04, .05, .06, .07, .08, .09, .5, -.6)
qplot(1, y, geom="boxplot")
fivenum()
en los datos para extraer lo que, IIRC, se usa para las bisagras superiores e inferiores en los diagramas de caja y use esa salida en lascale_y_continuous()
llamada que mostró @Ritchie. Esto se puede automatizar muy fácilmente utilizando las herramientas que proporcionan R y ggplot. Si también necesita incluir los bigotes, considere usarlosboxplot.stats()
para obtener los límites superior e inferior de los bigotes y luego usarlosscale_y_continuous()
.Respuestas:
Aquí hay una solución usando boxplot.stats
fuente
ylim <- c(-0.1, 1000) * 1.05
da[1] 0.105 1050
. Para obtener límites iguales alrededor de la media que podría usarylim + c(-0.05, 0.05) * diff(ylim) / 2
. Más bonita en mi opinión.facet_grid()
. Entonces tienes plotsbox multible en lugar de uno. Por lo tanto, no obtienes los límites correctos.Use
geom_boxplot(outlier.shape = NA)
para no mostrar los valores atípicos yscale_y_continuous(limits = c(lower, upper))
para cambiar los límites del eje.Un ejemplo.
En realidad, como Ramnath mostró en su respuesta (y Andrie también en los comentarios), tiene más sentido recortar las escalas después de calcular la estadística, a través de
coord_cartesian
.(Probablemente aún necesite usar
scale_y_continuous
para arreglar los saltos del eje).fuente
coord_cartesian()
No juega bien concoord_flip()
, en mi experiencia, así que prefieroscale_y_continuous()
.Tuve el mismo problema y precalculé los valores para Q1, Q2, mediana, ymin, ymax usando
boxplot.stats
:El resultado es un diagrama de caja sin valores atípicos.
fuente
Una idea sería ganar la clasificación de los datos en un procedimiento de dos pasos:
ejecuta una primera pasada, aprende cuáles son los límites, por ejemplo, corte en un percentil dado, o N desviación estándar por encima de la media, o ...
en una segunda pasada, establezca los valores más allá del límite dado al valor de ese límite
Debo enfatizar que este es un método anticuado que debería estar dominado por técnicas más modernas y robustas, pero todavía se lo encuentra mucho.
fuente
La opción "coef" de la función geom_boxplot permite cambiar el límite de valores atípicos en términos de rangos intercuartiles. Esta opción está documentada para la función stat_boxplot. Para desactivar los valores atípicos (en otras palabras, se tratan como datos regulares), en lugar de usar el valor predeterminado de 1.5 se puede especificar un valor de corte muy alto:
fuente
Si desea obligar a los bigotes a extenderse a los valores máximo y mínimo, puede modificar el
coef
argumento. El valor predeterminado paracoef
es 1.5 (es decir, la longitud predeterminada de los bigotes es 1.5 veces el IQR).fuente
Ipaper :: geom_boxplot2 es justo lo que quieres.
fuente