Hinweis
Zum Ende springen, um den vollständigen Beispielcode herunterzuladen.
Kumulative Verteilungen#
Dieses Beispiel zeigt, wie die empirische kumulative Verteilungsfunktion (ECDF) einer Stichprobe gezeichnet wird. Wir zeigen auch die theoretische CDF.
In der Technik werden ECDFs manchmal als "Nicht-Überschreitungs"-Kurven bezeichnet: Der y-Wert für einen gegebenen x-Wert gibt die Wahrscheinlichkeit an, dass eine Beobachtung aus der Stichprobe unterhalb dieses x-Wertes liegt. Beispielsweise entspricht der Wert 220 auf der x-Achse etwa 0,80 auf der y-Achse, sodass eine Wahrscheinlichkeit von 80 % besteht, dass eine Beobachtung in der Stichprobe 220 nicht überschreitet. Umgekehrt zeigt die empirische *komplementäre* kumulative Verteilungsfunktion (die ECCDF oder "Überschreitungs"-Kurve) die Wahrscheinlichkeit y, dass eine Beobachtung aus der Stichprobe über einem Wert x liegt.
Eine direkte Methode zum Zeichnen von ECDFs ist Axes.ecdf. Das Übergeben von complementary=True ergibt stattdessen eine ECCDF.
Alternativ kann man ax.hist(data, density=True, cumulative=True) verwenden, um die Daten zunächst in Bins einzuteilen, als ob ein Histogramm gezeichnet würde, und dann die kumulativen Summen der Häufigkeiten der Einträge in jedem Bin zu berechnen und zu zeichnen. Hier muss für das Zeichnen der ECCDF cumulative=-1 übergeben werden. Beachten Sie, dass dieser Ansatz zu einer Annäherung der E(C)CDF führt, während Axes.ecdf exakt ist.
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(19680801)
mu = 200
sigma = 25
n_bins = 25
data = np.random.normal(mu, sigma, size=100)
fig = plt.figure(figsize=(9, 4), layout="constrained")
axs = fig.subplots(1, 2, sharex=True, sharey=True)
# Cumulative distributions.
axs[0].ecdf(data, label="CDF")
n, bins, patches = axs[0].hist(data, n_bins, 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")
# Label the figure.
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()
Referenzen
Die Verwendung der folgenden Funktionen, Methoden, Klassen und Module wird in diesem Beispiel gezeigt
Gesamtlaufzeit des Skripts: (0 Minuten 1,422 Sekunden)