Graficando distribuciones acumulativas empíricas con Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introducción

Este tutorial demuestra cómo trazar la función de distribución acumulativa empírica (ECDF, por sus siglas en inglés) de una muestra y la CDF teórica utilizando Matplotlib. Las ECDF también se conocen como curvas de "no excedencia" en ingeniería, donde el valor y para un valor x dado da la probabilidad de que una observación de la muestra sea menor que ese valor x. Por el contrario, la función de distribución acumulativa complementaria empírica (la ECCDF, o curva de "excedencia") muestra la probabilidad y de que una observación de la muestra sea mayor que un valor x.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar las bibliotecas necesarias

En este paso, importaremos las bibliotecas necesarias. Para este tutorial, usaremos las bibliotecas NumPy y Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Establecer la semilla aleatoria y generar los datos

En este paso, estableceremos la semilla aleatoria y generaremos los datos. Generaremos 100 puntos de datos a partir de una distribución normal con una media de 200 y una desviación estándar de 25.

np.random.seed(19680801)
mu = 200
sigma = 25
data = np.random.normal(mu, sigma, size=100)

Crear la figura y los subgráficos

En este paso, crearemos una figura con dos subgráficos para las distribuciones acumulativas. También estableceremos el tamaño de la figura en 9x4.

fig = plt.figure(figsize=(9, 4), layout="constrained")
axs = fig.subplots(1, 2, sharex=True, sharey=True)

Graficar las distribuciones acumulativas

En este paso, graficaremos las distribuciones acumulativas. Usaremos el método .ecdf para graficar la ECDF y la ECDF complementaria. También graficaremos la CDF teórica usando una distribución normal con una media de 200 y una desviación estándar de 25.

## Cumulative distributions
axs[0].ecdf(data, label="CDF")
n, bins, patches = axs[0].hist(data, 25, density=True, histtype="step",
                               cumulative=True, label="Cumulative histogram")
x = np.linspace(data.min(), data.max())
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *
     np.exp(-0.5 * (1 / sigma * (x - mu))**2))
y = y.cumsum()
y /= y[-1]
axs[0].plot(x, y, "k--", linewidth=1.5, label="Theory")

## Complementary cumulative distributions
axs[1].ecdf(data, complementary=True, label="CCDF")
axs[1].hist(data, bins=bins, density=True, histtype="step", cumulative=-1,
            label="Reversed cumulative histogram")
axs[1].plot(x, 1 - y, "k--", linewidth=1.5, label="Theory")

Etiquetar la figura

En este paso, etiquetaremos la figura. Agregaremos un título, líneas de cuadrícula y etiquetas para los ejes x e y.

fig.suptitle("Cumulative Distributions")
for ax in axs:
    ax.grid(True)
    ax.legend()
    ax.set_xlabel("Annual rainfall (mm)")
    ax.set_ylabel("Probability of occurrence")
    ax.label_outer()

plt.show()

Resumen

En este tutorial, aprendimos cómo graficar la función de distribución acumulativa empírica (ECDF) y la CDF teórica usando Matplotlib. También aprendimos cómo graficar la función de distribución acumulativa complementaria empírica (ECCDF) y el histograma acumulativo invertido. Siguiendo los pasos descritos en este tutorial, ahora deberías poder crear tus propias gráficas de distribución acumulativa usando Matplotlib.