python - multiple - Boxplots en matplotlib: marcadores y valores atípicos
boxplot python (5)
Además de la respuesta seth (ya que la documentación no es muy precisa con respecto a esto): Q1 (los wiskers) se colocan en el valor máximo por debajo de 75% + 1.5 IQR
(valor mínimo de 25% - 1.5 IQR)
Este es el código que calcula la posición de los bigotes:
# get high extreme
iq = q3 - q1
hi_val = q3 + whis * iq
wisk_hi = np.compress(d <= hi_val, d)
if len(wisk_hi) == 0 or np.max(wisk_hi) < q3:
wisk_hi = q3
else:
wisk_hi = max(wisk_hi)
# get low extreme
lo_val = q1 - whis * iq
wisk_lo = np.compress(d >= lo_val, d)
if len(wisk_lo) == 0 or np.min(wisk_lo) > q1:
wisk_lo = q1
else:
wisk_lo = min(wisk_lo)
Tengo algunas preguntas sobre boxplots en matplotlib:
Pregunta A. ¿Qué representan los marcadores que destaqué a continuación con Q1 , Q2 y Q3 ? Creo que Q1 es máximo y Q3 son valores atípicos, pero ¿qué es Q2 ?
Pregunta B ¿Cómo matplotlib identifica los valores atípicos ? (es decir, ¿cómo sabe que no son los verdaderos valores max
y min
?)
Aquí hay un gráfico que ilustra los componentes de la caja de una respuesta stats.stackexchange . Tenga en cuenta que k = 1.5 si no proporciona la palabra clave whis
en Pandas.
La función de diagrama de caja en Pandas es un contenedor para matplotlib.pyplot.boxplot
. Los documentos matplotlib explican los componentes de las cajas en detalle:
Pregunta A:
La caja se extiende desde los valores del cuartil inferior a superior de los datos, con una línea en la mediana.
es decir, una cuarta parte de los valores de datos de entrada está debajo de la caja y un cuarto sobre la caja.
Pregunta B:
whis: flotación, secuencia o cuerda (por defecto = 1.5)
Como un flotador, determina el alcance de los bigotes al más allá del primer y tercer cuartil. En otras palabras, cuando IQR es el rango intercuartílico (Q3-Q1), el bigote superior se extenderá hasta el último dato menor que Q3 + whis * IQR). De manera similar, el bigote inferior se extenderá al primer dato mayor que Q1 - whis * IQR. Más allá de los bigotes, los datos se consideran atípicos y se trazan como puntos individuales.
Matplotlib (y Pandas) también le ofrece muchas opciones para cambiar esta definición predeterminada de bigotes:
Establezca esto en un valor irrazonablemente alto para forzar a los bigotes a mostrar los valores mínimo y máximo. Alternativamente, establezca esto en una secuencia ascendente de percentil (por ejemplo, [5, 95]) para establecer los bigotes en percentiles específicos de los datos. Finalmente, el whis puede ser el "rango" de cuerdas para forzar los bigotes a los mínimos y máximos de los datos.
La caja representa el primer y tercer cuartiles, con la línea roja, la mediana (2 ° cuartil). La documentation proporciona los bigotes predeterminados en 1.5 IQR:
boxplot(x, notch=False, sym=''+'', vert=True, whis=1.5,
positions=None, widths=None, patch_artist=False,
bootstrap=None, usermedians=None, conf_intervals=None)
y
whis: [por defecto 1.5]
Define la longitud de los bigotes en función del rango del cuartil interno. Se extienden hasta el punto de datos más extremos dentro del rango de datos (whis * (75% -25%)).
Si no está seguro de las representaciones de diagramas de cuadros diferentes, intente leer la descripción en wikipedia .
Una imagen vale mas que mil palabras. Tenga en cuenta que los valores atípicos (los marcadores +
en su trazado) son simplemente puntos fuera del amplio margen [(Q1-1.5 IQR), (Q3+1.5 IQR)]
continuación.
Sin embargo, la imagen es solo un ejemplo para un conjunto de datos distribuidos normalmente. Es importante entender que matplotlib no estima primero una distribución normal y calcula los cuartiles a partir de los parámetros de distribución estimados como se muestra arriba.
En cambio, la mediana y los cuartiles se calculan directamente a partir de los datos. Por lo tanto, su diagrama de caja puede verse diferente según la distribución de sus datos y el tamaño de la muestra, por ejemplo, asimétrica y con más o menos valores atípicos.