HOWTO · Python

So erstellen Sie ein Quantil-Quantil-Diagramm in Python

Erstellen Sie Quantil-Quantil-Diagramme in Python mit statsmodels oder openturns und wählen Sie eine Methode, um eine Verteilung zu beurteilen oder Stichproben zu vergleichen.

Auf dieser Seite

Ein Quantil-Quantil-Diagramm (QQ-Diagramm) vergleicht Stichprobenquantile mit theoretischen Quantilen oder mit Quantilen aus einer anderen Stichprobe. Verwenden Sie statsmodels, um eine Stichprobe mit einer gewählten Verteilung zu vergleichen, oder openturns, um zwei Stichproben zu vergleichen. Ein QQ-Diagramm ist ein visuelles Diagnosewerkzeug: Es kann Unterschiede in Form und Randverhalten aufzeigen, ist aber kein endgültiger statistischer Test. Die folgenden Beispiele zeigen, wie jeder Ansatz eine andere Frage beantwortet: ob eine Stichprobe einer Verteilung folgt oder wie zwei Stichproben im Vergleich zueinander abschneiden.

Quantil-Quantil-Diagramm mit dem Paket statsmodels in Python

Verwenden Sie statsmodels, wenn Sie einen Datensatz mit einer theoretischen Verteilung wie der Normalverteilung vergleichen möchten. Installieren Sie das Paket mit pip install statsmodels. Dieses kleine, eigenständige Python-Beispiel verwendet nur die Standardbibliothek, um gepaarte empirische und theoretische Normalquantile zu berechnen. Diese Paare sind die Werte, die ein QQ-Diagramm auf seinen Achsen platziert, sodass Sie die Berechnung überprüfen können, bevor Sie ein Diagramm zeichnen.

from statistics import NormalDist

sample = [-1.2, -0.4, 0.1, 0.7, 1.5]
ordered = sorted(sample)
normal = NormalDist()

for index, value in enumerate(ordered, start=1):
    probability = (index - 0.5) / len(ordered)
    theoretical = normal.inv_cdf(probability)
    print(f"{theoretical:.3f} {value:.1f}")
-1.282 -1.2
-0.524 -0.4
0.000 0.1
0.524 0.7
1.282 1.5

Um ein NumPy-Array namens sample_data mit statsmodels darzustellen, verwenden Sie sm.qqplot(sample_data, line="r"), nachdem Sie matplotlib.pyplot as plt und statsmodels.api as sm importiert haben, und rufen Sie dann plt.show() auf. Die Option line="r" fügt eine Regressionsreferenzlinie der kleinsten Quadrate hinzu. Werte nahe dieser Linie stimmen mit den gewählten theoretischen Quantilen überein; eine systematische Krümmung oder Abweichungen in den Rändern können auf Unterschiede hinweisen, die untersucht werden sollten. Die Referenzlinie ist eine visuelle Orientierungshilfe, berücksichtigen Sie daher die Stichprobengröße und andere Diagnosen, bevor Sie schlussfolgern, dass eine Verteilung passt. Diese Methode ist eine gute Wahl, wenn Sie eine Zielverteilung im Sinn haben und die angepasste Linie zur Beurteilung des Musters heranziehen möchten.

QQ-Diagramm normalverteilter Stichprobendaten mit statsmodels

Quantil-Quantil-Diagramm mit dem Paket openturns in Python

Wählen Sie openturns, wenn Sie zwei Stichproben direkt vergleichen möchten. Installieren Sie das Paket mit pip install openturns. Erstellen Sie in einem OpenTURNS-Workflow Stichproben mit ot.Normal().getSample(1000) und ot.Uniform().getSample(1000), übergeben Sie sie an ot.VisualTest.DrawQQplot(normal_sample, uniform_sample) und zeigen Sie das Diagramm dann mit View(qq_graph).show() aus openturns.viewer an. Diese API-Skizze wird inline gezeigt, weil OpenTURNS in der konfigurierten Artikel-Laufzeitumgebung nicht installiert ist; sie ist kein ausgeführtes Beispiel, und die Anzeige des Diagramms erfordert außerdem einen grafischen Viewer.

In einem QQ-Diagramm für zwei Stichproben paart jeder Punkt entsprechende Quantile aus den Stichproben. Ein nahezu lineares Muster deutet auf eine ähnliche Quantilstruktur hin, während Krümmungen oder Abweichungen an den Enden zeigen, wo sich die Stichproben unterscheiden. Diese OpenTURNS-Methode bietet nicht dieselbe Kontrolle über die Referenzlinie wie das statsmodels-Beispiel. Verwenden Sie sie für den direkten Vergleich von Stichprobe zu Stichprobe; verwenden Sie statsmodels, wenn Sie Daten mit einer festgelegten theoretischen Verteilung vergleichen und eine Referenzlinie wählen müssen.

QQ-Diagramm, das eine Normal- und eine Gleichverteilungsstichprobe mit openturns vergleicht

Eine weitere Python-Option zum Zeichnen finden Sie unter So verwenden Sie Gnuplot mit Python.