kstest#
- scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[Quelle]#
Führt den (ein- oder zweiseitigen) Kolmogorov-Smirnov-Test auf Anpassungsgüte durch.
Der einseitige Test vergleicht die zugrundeliegende Verteilung F(x) einer Stichprobe gegen eine gegebene Verteilung G(x). Der zweiseitige Test vergleicht die zugrundeliegenden Verteilungen zweier unabhängiger Stichproben. Beide Tests sind nur für kontinuierliche Verteilungen gültig.
- Parameter:
- rvsstr, array_like oder callable
Wenn es sich um ein Array handelt, sollte es ein 1D-Array von Beobachtungen von Zufallsvariablen sein. Wenn es sich um einen Callable handelt, sollte es eine Funktion zur Erzeugung von Zufallsvariablen sein; es muss ein Schlüsselwortargument size haben. Wenn es sich um eine Zeichenkette handelt, sollte es der Name einer Verteilung in
scipy.statssein, die zur Erzeugung von Zufallsvariablen verwendet wird.- cdfstr, array_like oder callable
Wenn array_like, sollte es ein 1D-Array von Beobachtungen von Zufallsvariablen sein und der zweiseitige Test wird durchgeführt (und rvs muss array_like sein). Wenn es sich um einen Callable handelt, wird dieser Callable zur Berechnung der CDF verwendet. Wenn es sich um eine Zeichenkette handelt, sollte es der Name einer Verteilung in
scipy.statssein, die als CDF-Funktion verwendet wird.- argstuple, Sequenz, optional
Verteilungsparameter, verwendet, wenn rvs oder cdf Zeichenketten oder Callables sind.
- Nint, optional
Stichprobengröße, wenn rvs eine Zeichenkette oder ein Callable ist. Standard ist 20.
- 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 zur Berechnung des p-Wertes verwendete Verteilung. Folgende Optionen stehen zur Verfügung (Standard ist ‘auto’)
‘auto’ : wählt eine der anderen Optionen aus.
‘exact’ : verwendet die exakte Verteilung der Teststatistik.
‘approx’ : approximiert die zweiseitige Wahrscheinlichkeit mit der doppelten 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
Bei einem einseitigen Test ist dies der Wert von rvs, der der KS-Statistik entspricht; d. h. die Distanz zwischen der empirischen Verteilungsfunktion und der hypothetischen kumulativen Verteilungsfunktion wird an dieser Beobachtung gemessen.
Bei einem zweiseitigen Test ist dies der Wert aus rvs oder cdf, der der KS-Statistik entspricht; d. h. die Distanz zwischen den empirischen Verteilungsfunktionen wird an dieser Beobachtung gemessen.
- statistic_signint
Bei einem einseitigen Test ist dies +1, wenn die KS-Statistik die größte positive Differenz zwischen der empirischen Verteilungsfunktion und der hypothetischen kumulativen Verteilungsfunktion (D+) ist; sie ist -1, wenn die KS-Statistik die größte negative Differenz (D-) ist.
Bei einem zweiseitigen Test ist dies +1, wenn die empirische Verteilungsfunktion von rvs die empirische Verteilungsfunktion von cdf an statistic_location überschreitet, andernfalls -1.
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 besagt, 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 besagt, 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 besagt, 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 alternativen Hypothesen 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, 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 möchten die Nullhypothese testen, dass eine Stichprobe nach der Standardnormalverteilung verteilt ist. Wir wählen ein Konfidenzniveau von 95 %; das heißt, wir werden die Nullhypothese zugunsten der Alternative verwerfen, wenn der p-Wert kleiner als 0,05 ist.
Beim Testen von gleichverteilten Daten erwarten wir, dass die Nullhypothese verworfen wird.
>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> stats.kstest(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, sodass wir die Nullhypothese zugunsten der Standardabweichung „zweiseitig“ verwerfen: Die Daten sind *nicht* nach der Standardnormalverteilung verteilt.
Beim Testen von Zufallsvariaten aus der Standardnormalverteilung erwarten wir, dass die Daten die meiste Zeit mit der Nullhypothese übereinstimmen.
>>> x = stats.norm.rvs(size=100, random_state=rng) >>> stats.kstest(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, die Zufallsvariaten sind jedoch nach einer Normalverteilung verteilt, die zu größeren Werten verschoben ist. In diesem Fall tendiert die kumulative Dichtefunktion (CDF) der zugrundeliegenden Verteilung dazu, *kleiner* als die CDF der Standardnormalverteilung zu sein. Daher erwarten wir, dass die Nullhypothese mit
alternative='less'verworfen wird.>>> x = stats.norm.rvs(size=100, loc=0.5, random_state=rng) >>> stats.kstest(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.
Zur Vereinfachung kann der vorherige Test mit dem Namen der Verteilung als zweitem Argument durchgeführt werden.
>>> stats.kstest(x, "norm", alternative='less') KstestResult(statistic=0.17482387821055168, pvalue=0.001913921057766743, statistic_location=0.3713830565352756, statistic_sign=-1)
Die obigen Beispiele waren allesamt einseitige Tests, die mit denen von
ks_1sampidentisch sind. Beachten Sie, dasskstestauch zweiseitige Tests durchführen kann, die mit denen vonks_2sampidentisch sind. Wenn beispielsweise zwei Stichproben aus derselben Verteilung gezogen werden, erwarten wir, dass die Daten die meiste Zeit mit der Nullhypothese übereinstimmen.>>> sample1 = stats.laplace.rvs(size=105, random_state=rng) >>> sample2 = stats.laplace.rvs(size=95, random_state=rng) >>> stats.kstest(sample1, sample2) KstestResult(statistic=0.11779448621553884, pvalue=0.4494256912629795, statistic_location=0.6138814275424155, statistic_sign=1)
Wie erwartet, liegt der p-Wert von 0,45 nicht unter unserer Schwelle von 0,05, sodass wir die Nullhypothese nicht verwerfen können.