ks_1samp#
- scipy.stats.ks_1samp(x, cdf, args=(), alternative='two-sided', method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[Quelle]#
Führt den Ein-Stichproben-Kolmogorov-Smirnov-Test auf Anpassungsgüte durch.
Dieser Test vergleicht die zugrundeliegende Verteilung F(x) einer Stichprobe gegen eine gegebene kontinuierliche Verteilung G(x). Siehe Hinweise für eine Beschreibung der verfügbaren Null- und Alternativhypothesen.
- Parameter:
- xarray_like
Ein 1D-Array von Beobachtungen von iid Zufallsvariablen.
- cdfcallable
Callable, das zur Berechnung der CDF verwendet wird.
- argstuple, Sequenz, optional
Verteilungsparameter, die mit cdf verwendet werden.
- alternative{‘zweiseitig’, ‘kleiner’, ‘größer’}, optional
Definiert die Null- und Alternativhypothesen. Standard ist 'two-sided'. Bitte siehe Erläuterungen in den Hinweisen unten.
- method{‘auto’, ‘exact’, ‘approx’, ‘asymp’}, optional
Definiert die Verteilung, die zur Berechnung des p-Wertes verwendet wird. Die folgenden Optionen sind verfügbar (Standard ist ‘auto’)
‘auto’ : wählt eine der anderen Optionen aus.
‘exact’ : verwendet die exakte Verteilung der Teststatistik.
‘approx’ : approximiert die zweiseitige Wahrscheinlichkeit mit dem Doppelten der einseitigen Wahrscheinlichkeit.
‘asymp’: verwendet die asymptotische Verteilung der Teststatistik.
- axisint oder None, Standard: 0
Wenn es sich um eine ganze Zahl handelt, ist dies die Achse des Eingabearrays, entlang der die Statistik berechnet wird. Die Statistik jedes Achsen-Slices (z. B. Zeile) der Eingabe erscheint dann in einem entsprechenden Element der Ausgabe. Wenn
None, wird die Eingabe vor der Berechnung der Statistik geglättet.- nan_policy{‘propagate’, ‘omit’, ‘raise’}
Definiert, wie Eingabe-NaNs behandelt werden.
propagate: Wenn ein NaN in der Achsen-Slice (z. B. Zeile) vorhanden ist, entlang der die Statistik berechnet wird, wird der entsprechende Eintrag der Ausgabe NaN sein.omit: NaNs werden bei der Berechnung weggelassen. Wenn im Achsen-Slice, entlang dem die Statistik berechnet wird, nicht genügend Daten verbleiben, wird der entsprechende Eintrag der Ausgabe NaN sein.raise: Wenn ein NaN vorhanden ist, wird einValueErrorausgelöst.
- keepdimsbool, Standard: False
Wenn dies auf True gesetzt ist, bleiben die reduzierten Achsen im Ergebnis als Dimensionen mit der Größe eins erhalten. Mit dieser Option wird das Ergebnis korrekt gegen das Eingabearray gestreut (broadcasted).
- Rückgabe:
- res: KstestResult
Ein Objekt, das Attribute enthält
- statisticfloat
KS-Teststatistik, entweder D+, D- oder D (das Maximum der beiden)
- pvaluefloat
Einseitiger oder zweiseitiger p-Wert.
- statistic_locationfloat
Wert von x, der mit der KS-Statistik korrespondiert; d.h. die Distanz zwischen der empirischen Verteilungsfunktion und der hypothetischen kumulativen Verteilungsfunktion wird bei dieser Beobachtung gemessen.
- statistic_signint
+1, wenn die KS-Statistik die maximal positive Differenz zwischen der empirischen Verteilungsfunktion und der hypothetischen kumulativen Verteilungsfunktion (D+) ist; -1, wenn die KS-Statistik die maximal negative Differenz (D-) ist.
Hinweise
Es gibt drei Optionen für die Null- und die entsprechenden Alternativhypothesen, die mit dem Parameter alternative ausgewählt werden können.
two-sided: Die Nullhypothese ist, dass die beiden Verteilungen identisch sind, F(x)=G(x) für alle x; die Alternative ist, dass sie nicht identisch sind.
less: Die Nullhypothese ist, dass F(x) >= G(x) für alle x; die Alternative ist, dass F(x) < G(x) für mindestens ein x.
greater: Die Nullhypothese ist, dass F(x) <= G(x) für alle x; die Alternative ist, dass F(x) > G(x) für mindestens ein x.
Beachten Sie, dass die Alternativhypothesen die *CDFs* der zugrundeliegenden Verteilungen beschreiben, nicht die beobachteten Werte. Wenn beispielsweise x1 ~ F und x2 ~ G. Wenn F(x) > G(x) für alle x, dann tendieren die Werte in x1 dazu, kleiner als die in x2 zu sein.
Seit SciPy 1.9 werden
np.matrix-Eingaben (für neuen Code nicht empfohlen) vor der Berechnung innp.ndarraykonvertiert. In diesem Fall ist die Ausgabe eine Skalar- odernp.ndarraymit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- odernp.ndarrayanstelle eines Masked Arrays mitmask=Falsesein.Beispiele
Angenommen, wir wollen die Nullhypothese testen, dass eine Stichprobe gemäß der Standardnormalverteilung verteilt ist. Wir wählen ein Konfidenzniveau von 95 %; das heißt, wir verwerfen die Nullhypothese zugunsten der Alternative, wenn der p-Wert kleiner als 0,05 ist.
Beim Testen von gleichverteilten Daten würden wir erwarten, dass die Nullhypothese verworfen wird.
>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> stats.ks_1samp(stats.uniform.rvs(size=100, random_state=rng), ... stats.norm.cdf) KstestResult(statistic=0.5001899973268688, pvalue=1.1616392184763533e-23, statistic_location=0.00047625268963724654, statistic_sign=-1)
Tatsächlich ist der p-Wert niedriger als unsere Schwelle von 0,05, daher verwerfen wir die Nullhypothese zugunsten der Standardalternative „zweiseitig“: Die Daten sind *nicht* gemäß der Standardnormalverteilung verteilt.
Beim Testen von Zufallsvariablen aus der Standardnormalverteilung erwarten wir, dass die Daten meistens mit der Nullhypothese übereinstimmen.
>>> x = stats.norm.rvs(size=100, random_state=rng) >>> stats.ks_1samp(x, stats.norm.cdf) KstestResult(statistic=0.05345882212970396, pvalue=0.9227159037744717, statistic_location=-1.2451343873745018, statistic_sign=1)
Wie erwartet, liegt der p-Wert von 0,92 nicht unter unserer Schwelle von 0,05, sodass wir die Nullhypothese nicht verwerfen können.
Angenommen jedoch, die Zufallsvariablen sind gemäß einer Normalverteilung verteilt, die zu größeren Werten verschoben ist. In diesem Fall tendiert die kumulative Wahrscheinlichkeitsfunktion (CDF) der zugrundeliegenden Verteilung dazu, *kleiner* als die CDF der Standardnormalverteilung zu sein. Daher würden wir erwarten, dass die Nullhypothese mit
alternative='less'verworfen wird.>>> x = stats.norm.rvs(size=100, loc=0.5, random_state=rng) >>> stats.ks_1samp(x, stats.norm.cdf, alternative='less') KstestResult(statistic=0.17482387821055168, pvalue=0.001913921057766743, statistic_location=0.3713830565352756, statistic_sign=-1)
Und tatsächlich verwerfen wir mit einem p-Wert, der kleiner als unser Schwellenwert ist, die Nullhypothese zugunsten der Alternative.