So führen Sie einen Anderson-Darling-Test in Python durch

Von Fabian
Kategorie: Python
Tags: Regression
Lesezeit: 3 Minuten

Ein Anderson-Darling-Test ist ein Anpassungstest, der misst, wie gut Ihre Daten zu einer bestimmten Verteilung passen. Dieser Test wird am häufigsten verwendet, um festzustellen, ob Ihre Daten einer Normalverteilung folgen oder nicht.

Diese Art von Test ist nützlich, um die Normalität zu testen. Dies ist eine häufige Annahme, die in vielen statistischen Tests verwendet wird, einschließlich Regression, ANOVA, t-Tests und vielen anderen.

Beispiel: Anderson-Darling-Test in Python

Um einen Anderson-Darling-Test in Python durchzuführen, können wir die Funktion anderson() aus der Bibliothek scipy.stats verwenden, die die folgende Syntax verwendet:

anderson(x, dist = 'norm')

wo:

  • x: Array von Beispieldaten
  • dist: Die Art der Verteilung, gegen die getestet werden soll. Die Standardeinstellung ist "Norm". Sie können jedoch auch "Expon" oder "Logistik" angeben.

So führen Sie beispielsweise einen Anderson-Darling-Test an einer Stichprobe von 50 normalverteilten Zufallsvariablen durch:

import numpy as np

# Daten erstellen
np.random.seed(0)
data = np.random.normal(size=50)

# Anderson-Darling-Test durchführen 
from scipy.stats import anderson
anderson(data)

AndersonResult(statistic=0.15006999533388665,
               critical_values=array([0.538, 0.613, 0.736, 0.858, 1.021]),
               significance_level=array([15. , 10. ,  5. ,  2.5,  1. ]))

Die Teststatistik beträgt 0,150. Wir können diesen Wert mit jedem kritischen Wert vergleichen, der jedem Signifikanzniveau entspricht, um festzustellen, ob die Testergebnisse signifikant sind. Beispielsweise:

  • Der kritische Wert für α = 0,01 beträgt 1,021. Da die Teststatistik (0,150) diesen kritischen Wert nicht überschreitet, sind die Ergebnisse bei einem Signifikanzniveau von 0,01 nicht signifikant.
  • Der kritische Wert für α = 0,025 beträgt 0,858. Da die Teststatistik (0,150) diesen kritischen Wert nicht überschreitet, sind die Ergebnisse bei einem Signifikanzniveau von 0,025 nicht signifikant.

Und so weiter.

Wir können sehen, dass die Testergebnisse auf keinem Signifikanzniveau signifikant sind, was bedeutet, dass wir die Nullhypothese des Tests nicht ablehnen würden. Daher haben wir nicht genügend Beweise, um zu sagen, dass die Probendaten nicht normal verteilt sind.

Dieses Ergebnis sollte nicht überraschen, wenn man bedenkt, dass wir die Funktion np.rand.normal() verwendet haben, um eine Stichprobe von 50 normalverteilten Werten zu generieren.

Überlegen Sie stattdessen, ob wir den Anderson-Darling-Test an einer Stichprobe von 50 zufälligen Ganzzahlen zwischen 0 und 10 durchgeführt haben:

import numpy as np

# Daten erstellen
np.random.seed(0)
data = np.random.randint(0, 10, size=50)

# Anderson-Darling-Test durchführen 
from scipy.stats import anderson
anderson(data)

AndersonResult(statistic=1.1926463985076836,
               critical_values=array([0.538, 0.613, 0.736, 0.858, 1.021]),
               significance_level=array([15. , 10. ,  5. ,  2.5,  1. ]))

Die Teststatistik ist 1.1926. Wir können diesen Wert mit jedem kritischen Wert vergleichen, der jedem Signifikanzniveau entspricht, um festzustellen, ob die Testergebnisse signifikant sind. Beispielsweise:

  • Der kritische Wert für α = 0,01 beträgt 1,021. Da die Teststatistik (1.1926) größer als dieser kritische Wert ist, sind die Ergebnisse bei einem Signifikanzniveau von 0,01 signifikant.
  • Der kritische Wert für α = 0,025 beträgt 0,858. Da die Teststatistik (1.1926) größer als dieser kritische Wert ist, sind die Ergebnisse bei einem Signifikanzniveau von 0,025 signifikant.

Und so weiter.

Wir können sehen, dass die Testergebnisse auf jedem Signifikanzniveau signifikant sind, was bedeutet, dass wir die Nullhypothese des Tests ablehnen würden, unabhängig davon, welches Signifikanzniveau wir verwenden. Wir haben also genügend Beweise, um zu sagen, dass die Probendaten nicht normal verteilt sind.

Dieses Ergebnis sollte auch nicht überraschen, wenn man bedenkt, dass wir die Funktion np.rand.randint() verwendet haben, um eine Stichprobe von 50 zufälligen Ganzzahlen zwischen 0 und 10 zu generieren, was einer Normalverteilung wahrscheinlich nicht folgt.

Weitere Python-Tutorials finden Sie hier.

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: