Trazar CDF Matplotlib Python

Suraj Joshi 15 febrero 2024
Trazar CDF Matplotlib Python

Este tutorial explica cómo podemos generar un gráfico de CDF usando la Matplotlib en Python. CDF es la función cuyos valores y representan la probabilidad de que una variable aleatoria tome los valores menores o iguales al valor x correspondiente.

Trazar CDF usando Matplotlib en Python

La FCD se define para distribuciones de probabilidad tanto continuas como discretas. En la distribución de probabilidad continua, la variable aleatoria puede tomar cualquier valor del rango especificado, pero en la distribución de probabilidad discreta, sólo podemos tener un conjunto de valores especificado.

Gráfica CDF para la distribución discreta usando Matplotlib en Python

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 7)
y = [0.2, 0.1, 0.1, 0.2, 0.1, 0.3]
cdf = np.cumsum(y)

plt.plot(x, y, marker="o", label="PMF")
plt.plot(x, cdf, marker="o", label="CDF")
plt.xlim(0, 7)
plt.ylim(0, 1.5)
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for discrete distribution")
plt.legend()
plt.show()

Producción:

Trazar CDF para la distribución discreta usando Matplotlib en Python

Traza el PMF y el CDF para la distribución dada. Para calcular los valores y de CDF, usamos el método numpy.cumsum() para calcular la suma acumulada de un array.

Si se nos dan los recuentos de frecuencia, debemos normalizar los valores y inicialmente para que representen el PDF.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 7)
frequency = np.array([3, 8, 4, 5, 3, 6])
pdf = frequency / np.sum(frequency)
cdf = np.cumsum(pdf)

plt.plot(x, pdf, marker="o", label="PMF")
plt.plot(x, cdf, marker="o", label="CDF")
plt.xlim(0, 7)
plt.ylim(0, 1.5)
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for discrete distribution")
plt.legend()
plt.show()

Producción:

Trazar la CDF para la distribución discreta usando Matplotlib en Python después de la normalización

Aquí se nos dan los valores de frecuencia para cada valor X. Convertimos los valores de frecuencia en valores de pdf dividiendo cada elemento del conjunto de pdf por la suma de frecuencias. Luego usamos el pdf para calcular los valores CDF para trazar el CDF de los datos dados.

También podemos usar gráficos de histograma para ver los gráficos CDF y PDF, que serán más intuitivos para los datos discretos.

import numpy as np
import matplotlib.pyplot as plt

data = [3, 4, 2, 3, 4, 5, 4, 7, 8, 5, 4, 6, 2, 1, 0, 9, 7, 6, 6, 5, 4]
plt.hist(data, bins=9, density=True)
plt.hist(data, bins=9, density=True, cumulative=True, label="CDF", histtype="step")
plt.xlabel("X")
plt.ylabel("Probability")
plt.xticks(np.arange(0, 10))
plt.title("CDF using Histogram Plot")
plt.show()

Producción:

Trazar la CDF para la distribución discreta usando los gráficos de histograma

Traza el CDF y el PDF de los datos dados usando el método hist(). Para trazar el CDF, establecemos cumulative=True y establecemos density=True para obtener un histograma que representa los valores de probabilidad que suman 1.

Grafica el CDF para la distribución continua usando Matplotlib en Python

import numpy as np
import matplotlib.pyplot as plt

dx = 0.005
x = np.arange(-10, 10, dx)
y = 0.25 * np.exp((-(x ** 2)) / 8)

y = y / (np.sum(dx * y))
cdf = np.cumsum(y * dx)

plt.plot(x, y, label="pdf")
plt.plot(x, cdf, label="cdf")
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for continuous distribution")
plt.legend()
plt.show()

Producción:

Trazar CDF para la distribución continua usando Matplotlib en Python

Traza el PMF y el CDF para la distribución continua dada. Para calcular los valores y de CDF, usamos el método numpy.cumsum() para calcular la suma acumulativa de un array.

Dividimos y por la suma del array y multiplicada por el dx para normalizar los valores de modo que los valores CDF vayan de 0 a 1.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn