Gráficos de caja en matplotlib: Marcadores y valores atípicos


Tengo algunas preguntas sobre boxplots en matplotlib:

Pregunta A. ¿Qué hacen los marcadores que me resaltada con Q1, Q2, y P3 representan? Creo que Q1 es máximo y Q3son valores atípicos, pero ¿qué es Q2?

                       introduzca la descripción de la imagen aquí

Pregunta B ¿Cómo matplotlib identificar los valores atípicos? (es decir, ¿cómo sabe que no son los verdaderos max y min ¿valores?)

Author: Amelio Vazquez-Reina, 2013-07-18

6 answers

Una imagen vale más que mil palabras. Tenga en cuenta que los valores atípicos (los marcadores + en su gráfico) son simplemente puntos fuera del amplio margen [(Q1-1.5 IQR), (Q3+1.5 IQR)] debajo.

    introduzca la descripción de la imagen aquí

Sin embargo, la imagen es solo un ejemplo para un conjunto de datos normalmente distribuido. Es importante entender que matplotlib hace no estimar 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, el la mediana y los cuartiles se calculan directamente a partir de los datos. Por lo tanto, su diagrama de caja puede tener un aspecto diferente dependiendo de la distribución de sus datos y el tamaño de la muestra, por ejemplo, asimétrico y con más o menos valores atípicos.

 78
Author: Amelio Vazquez-Reina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-06 15:06:53

La caja representa el primer y tercer cuartiles, con la línea roja la mediana (2do cuartil). La documentación da los bigotes predeterminados a 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 como una función del rango del cuartil interior. Se extienden al punto de datos más extremo dentro del rango de datos(whis*(75% -25%)).

Si está confundido acerca de las diferentes representaciones de la gráfica de caja, intente leer la descripción en wikipedia.

 23
Author: seth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-22 16:21:01

Además de la respuesta de 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 del 75% + 1.5 IQR

(valor mínimo del 25% - 1,5 RIC)

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)
 13
Author: Dirk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-03 10:22:21

En caso de que esto pueda beneficiar a cualquier otra persona, necesitaba poner una leyenda en uno de mis gráficos de trama de caja, así que hice esto poco .png en Inkscape y pensé en compartirlo.

introduzca la descripción de la imagen aquí

 3
Author: Wesley Skeeter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-28 18:11:05

La siguiente imagen muestra las diferentes partes de una gráfica de caja.

introduzca la descripción de la imagen aquí

Cuantil 1 / Q1: Percentil 25

Rango intercuartílico (IQR): percentil 25 al percentil 75.

Mediana (Cuantil 2/Q2): percentil 50.

Cuantil 3/Q3: percentil 75.

Debo señalar que la parte azul son los bigotes de la boxplot.

La siguiente imagen compara la gráfica de caja de una distribución normal con la densidad de probabilidad función. Debería ayudar a explicar el "Mínimo", el "Máximo" y los valores atípicos.

introduzca la descripción de la imagen aquí

"Mínimo": (Q1-1.5 IQR)

"Máximo": (Q3+1.5 IQR)

Como dijo zelusp, el 99,3% de los datos están contenidos dentro de 2,698 σ (desviaciones estándar) para una distribución normal. Los círculos verdes (valores atípicos) en la imagen de abajo son los restantes .7% de los datos. Aquí es una derivación de cómo esos números llegaron a ser.

 2
Author: Michael James Kali Galarnyk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-12 06:31:01

Aquí hay un gráfico que ilustra los componentes de la caja de un estadísticas.stackexchange answer . Tenga en cuenta que k=1.5 si no proporciona la palabra clave whis en Pandas.

introduzca la descripción de la imagen aquí

La función boxplot en Pandas es una envoltura para matplotlib.pyplot.boxplot. Los documentos matplotlib explican los componentes de las cajas en detalle:

Pregunta A:

El cuadro se extiende desde los valores del cuartil inferior a superior de los datos, con una línea en el mediana.

Es decir, una cuarta parte de los valores de los datos de entrada está por debajo de la caja y una cuarta parte por encima de la caja.

Pregunta B:

Whis: float, sequence, or string (default = 1.5)

Como un flotador, determina el alcance de los bigotes al más allá de la primer y tercer cuartiles. En otras palabras, donde IQR es el rango intercuartílico (Q3-Q1), el bigote superior se extenderá hasta el último dato menor que Q3 + whis * IQR). Del mismo modo, el bigote inferior ser extender al primer dato mayor que Q1-whis * IQR. Más allá de la bigotes, los datos se consideran valores atípicos y se representan como individuales punto.

Matplotlib (y Pandas) también le da muchas opciones para cambiar esta definición predeterminada de los bigotes:

Establezca esto en un valor irrazonablemente alto para forzar a los bigotes a mostrar los valores min y max. Alternativamente, establezca esto en un valor ascendente secuencia del percentil (por ejemplo, [5, 95]) para establecer los bigotes en concreto percentiles de los datos. Finalmente, whis puede ser la cadena 'rango' para fuerza los bigotes al mínimo y máximo de los datos.

 1
Author: Joooeey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-03 23:12:01