Plot CDF Matplotlib Python
Este tutorial explica como podemos gerar um gráfico CDF
utilizando o Matplotlib em Python. O CDF
é a função cujos valores y representam a probabilidade de uma variável aleatória tomar os valores menores ou iguais ao valor x correspondente.
Lote CDF utilizando o Matplotlib em Python
O CDF é definido tanto para distribuições de probabilidade contínua como discreta. Na distribuição de probabilidade contínua, a variável aleatória pode tomar qualquer valor do intervalo especificado, mas na distribuição de probabilidade discreta, só podemos ter um array especificado de valores.
CDF de Plotagem para Distribuição Discreta Utilizando Matplotlib em 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()
Resultado:
Traça o PMF
e o CDF
para a distribuição em causa. Para calcular os valores y para CDF
, utilizamos o método numpy.cumsum()
para calcular a soma cumulativa de um array.
Se nos forem dadas contagens de frequência, devemos normalizar inicialmente os valores y de modo a que representem o 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()
Resultado:
Aqui, são-nos dados os valores de frequência para cada valor X. Convertemos os valores de frequência em valores pdf
dividindo cada elemento do array pdf
pela soma das frequências. Depois utilizamos o pdf
para calcular os valores CDF
para traçar o CDF
de determinados dados.
Podemos também utilizar os gráficos de histograma para visualizar os gráficos CDF
e PDF
, que serão mais intuitivos para dados 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()
Resultado:
Traça o CDF
e o PDF
de determinados dados utilizando o método hist()
. Para traçar o CDF
, definimos cumulativo=Verdade
e definimos density=True
para obter um histograma representando valores de probabilidade que totalizem 1.
Plotagem CDF
para distribuição contínua utilizando o Matplotlib em 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()
Resultado:
Traça o PMF
e o CDF
para a distribuição contínua dada. Para calcular os valores y para CDF
, utilizamos o método numpy.cumsum()
para calcular a soma cumulativa de um array.
Dividimos y
pela soma do array y
multiplicado pelo dx
para normalizar os valores de modo a que os valores CDF
variem de 0 a 1.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn