wilcoxon#
- scipy.stats.wilcoxon(x, y=None, zero_method='wilcox', correction=False, alternative='two-sided', method='auto', *, axis=0, nan_policy='propagate', keepdims=False)[Quelle]#
Berechnet den Wilcoxon-Vorzeichen-Rang-Test.
Der Wilcoxon-Vorzeichen-Rang-Test prüft die Nullhypothese, dass zwei verwandte gepaarte Stichproben aus derselben Verteilung stammen. Insbesondere prüft er, ob die Verteilung der Differenzen
x - ysymmetrisch um Null ist. Es handelt sich um eine nichtparametrische Version des gepaarten T-Tests.- Parameter:
- xarray_like
Entweder die erste Messreihe (in diesem Fall ist
ydie zweite Messreihe) oder die Differenzen zwischen zwei Messreihen (in diesem Fall istynicht anzugeben.) Muss eindimensional sein.- yarray_like, optional
Entweder die zweite Messreihe (wenn
xdie erste Messreihe ist) oder nicht angegeben (wennxdie Differenzen zwischen zwei Messreihen ist.) Muss eindimensional sein.Warnung
Wenn y angegeben ist, berechnet
wilcoxondie Teststatistik basierend auf den Rängen der absoluten Werte vond = x - y. Rundungsfehler bei der Subtraktion können dazu führen, dass Elemente vondunterschiedliche Ränge erhalten, auch wenn sie bei exakter Arithmetik gleich wären. Anstatt x und y separat zu übergeben, sollten Sie die Differenzx - yberechnen, bei Bedarf runden, um sicherzustellen, dass nur wirklich eindeutige Elemente numerisch unterscheidbar sind, und das Ergebnis als x übergeben, während y auf dem Standardwert (None) bleibt.- zero_method{„wilcox“, „pratt“, „zsplit“}, optional
Es gibt verschiedene Konventionen für den Umgang mit Paaren von Beobachtungen mit gleichen Werten („Null-Differenzen“ oder „Nullen“).
„wilcox“: Verwirft alle Null-Differenzen (Standard); siehe [4].
„pratt“: Berücksichtigt Null-Differenzen im Rangbildungsprozess, verwirft aber die Ränge der Nullen (konservativer); siehe [3]. In diesem Fall wird die Normalapproximation wie in [5] angepasst.
„zsplit“: Berücksichtigt Null-Differenzen im Rangbildungsprozess und teilt den Null-Rang zwischen positiven und negativen.
- correctionbool, optional
Wenn True, wird eine Stetigkeitskorrektur angewendet, indem die Wilcoxon-Rangstatistik um 0,5 in Richtung des Mittelwerts angepasst wird, wenn die z-Statistik berechnet wird und eine Normalapproximation verwendet wird. Standard ist False.
- alternative{„two-sided“, „greater“, „less“}, optional
Definiert die Alternativhypothese. Standard ist „two-sided“. Im Folgenden repräsentiert
ddie Differenz zwischen den gepaarten Stichproben:d = x - y, wenn sowohlxals auchyangegeben sind, oderd = xandernfalls.„two-sided“: Die zugrundeliegende Verteilung von
dist nicht symmetrisch um Null.„less“: Die zugrundeliegende Verteilung von
dist stochastisch kleiner als eine Verteilung, die symmetrisch um Null ist.„greater“: Die zugrundeliegende Verteilung von
dist stochastisch größer als eine Verteilung, die symmetrisch um Null ist.
- method{„auto“, „exact“, „asymptotic“} oder
PermutationMethodInstanz, optional Methode zur Berechnung des p-Wertes, siehe Hinweise. Standard ist „auto“.
- 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:
- Ein Objekt mit den folgenden Attributen.
- statisticarray_like
Wenn alternative „two-sided“ ist, die Summe der Ränge der Differenzen über oder unter Null, je nachdem, welche kleiner ist. Andernfalls die Summe der Ränge der Differenzen über Null.
- pvaluearray_like
Der p-Wert für den Test, abhängig von alternative und method.
- zstatisticarray_like
Wenn
method = 'asymptotic', ist dies die normalisierte z-Statistikz = (T - mn - d) / se
wobei
Tdie statistic wie oben definiert ist,mnder Mittelwert der Verteilung unter der Nullhypothese ist,deine Stetigkeitskorrektur ist undseder Standardfehler ist. Wennmethod != 'asymptotic', ist dieses Attribut nicht verfügbar.
Siehe auch
Hinweise
Im Folgenden repräsentiert
ddie Differenz zwischen den gepaarten Stichproben:d = x - y, wenn sowohlxals auchyangegeben sind, oderd = xandernfalls. Angenommen, alle Elemente vondsind unabhängige und identisch verteilte Beobachtungen, und alle sind verschieden und ungleich Null.Wenn
len(d)ausreichend groß ist, ist die Nullverteilung der normalisierten Teststatistik (zstatistic oben) annähernd normal, undmethod = 'asymptotic'kann zur Berechnung des p-Wertes verwendet werden.Wenn
len(d)klein ist, ist die Normalapproximation möglicherweise nicht genau, undmethod='exact'wird bevorzugt (auf Kosten zusätzlicher Ausführungszeit).Der Standardwert
method='auto'wählt zwischen den beiden:method='exact'wird verwendet, wennlen(d) <= 50, undmethod='asymptotic'wird andernfalls verwendet.
Das Vorhandensein von „Bindungen“ (d.h. nicht alle Elemente von
dsind eindeutig) oder „Nullen“ (d.h. Elemente vondsind Null) verändert die Nullverteilung der Teststatistik, undmethod='exact'berechnet nicht mehr den exakten p-Wert. Wennmethod='asymptotic', wird die z-Statistik zur genaueren Vergleich mit der Standardnormalverteilung angepasst, aber auch hier ist für endliche Stichprobengrößen die Standardnormalverteilung nur eine Annäherung an die tatsächliche Nullverteilung der z-Statistik. Für solche Situationen akzeptiert der Parameter method auch Instanzen vonPermutationMethod. In diesem Fall wird der p-Wert mithilfe vonpermutation_testmit den angegebenen Konfigurationsoptionen und anderen geeigneten Einstellungen berechnet.Das Vorhandensein von Bindungen und Nullen beeinflusst die Auflösung von
method='auto'entsprechend: Exhaustive Permutationen werden durchgeführt, wennlen(d) <= 13, andernfalls wird die asymptotische Methode verwendet. Beachten Sie, dass die asymptotische Methode auch fürlen(d) > 14möglicherweise nicht sehr genau ist; die Schwelle wurde als Kompromiss zwischen Ausführungszeit und Genauigkeit unter der Bedingung gewählt, dass die Ergebnisse deterministisch sein müssen. Erwägen Sie die manuelle Angabe einer Instanz vonPermutationMethodund die Wahl des Parametersn_resamples, um Zeitbeschränkungen und Genauigkeitsanforderungen auszubalancieren.Bitte beachten Sie auch, dass im Ausnahmefall, dass alle Elemente von
dNull sind, der p-Wert, der auf der Normalapproximation basiert, nicht berechnet werden kann (NaN), wennzero_method='wilcox'oderzero_method='pratt'.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.Referenzen
[2]Conover, W.J., Practical Nonparametric Statistics, 1971.
[3]Pratt, J.W., Remarks on Zeros and Ties in the Wilcoxon Signed Rank Procedures, Journal of the American Statistical Association, Vol. 54, 1959, pp. 655-667. DOI:10.1080/01621459.1959.10501526
[4] (1,2)Wilcoxon, F., Individual Comparisons by Ranking Methods, Biometrics Bulletin, Vol. 1, 1945, pp. 80-83. DOI:10.2307/3001968
[5]Cureton, E.E., The Normal Approximation to the Signed-Rank Sampling Distribution When Zero Differences are Present, Journal of the American Statistical Association, Vol. 62, 1967, pp. 1068-1069. DOI:10.1080/01621459.1967.10500917
Beispiele
In [4] werden die Höhenunterschiede zwischen kreuz- und selbstbestäubten Maispflanzen wie folgt angegeben:
>>> d = [6, 8, 14, 16, 23, 24, 28, 29, 41, -48, 49, 56, 60, -67, 75]
Kreuzbestäubte Pflanzen scheinen höher zu sein. Um die Nullhypothese zu testen, dass kein Höhenunterschied besteht, können wir den zweiseitigen Test anwenden
>>> from scipy.stats import wilcoxon >>> res = wilcoxon(d) >>> res.statistic, res.pvalue (24.0, 0.041259765625)
Daher würden wir die Nullhypothese bei einem Konfidenzniveau von 5% ablehnen und schlussfolgern, dass es einen Höhenunterschied zwischen den Gruppen gibt. Um zu bestätigen, dass der Median der Differenzen als positiv angenommen werden kann, verwenden wir
>>> res = wilcoxon(d, alternative='greater') >>> res.statistic, res.pvalue (96.0, 0.0206298828125)
Dies zeigt, dass die Nullhypothese, dass der Median negativ ist, bei einem Konfidenzniveau von 5% zugunsten der Alternative, dass der Median größer als Null ist, abgelehnt werden kann. Die obigen p-Werte sind exakt. Die Verwendung der Normalapproximation ergibt sehr ähnliche Werte
>>> res = wilcoxon(d, method='asymptotic') >>> res.statistic, res.pvalue (24.0, 0.04088813291185591)
Beachten Sie, dass sich die Statistik im einseitigen Fall auf 96 geändert hat (die Summe der Ränge der positiven Differenzen), während sie im zweiseitigen Fall 24 ist (das Minimum der Summe der Ränge über und unter Null).
Im obigen Beispiel werden die Höhenunterschiede zwischen gepaarten Pflanzen direkt an
wilcoxonübergeben. Alternativ akzeptiertwilcoxonzwei Stichproben gleicher Länge, berechnet die Differenzen zwischen gepaarten Elementen und führt dann den Test durch. Betrachten Sie die Stichprobenxundy>>> import numpy as np >>> x = np.array([0.5, 0.825, 0.375, 0.5]) >>> y = np.array([0.525, 0.775, 0.325, 0.55]) >>> res = wilcoxon(x, y, alternative='greater') >>> res WilcoxonResult(statistic=5.0, pvalue=0.5625)
Beachten Sie, dass der Test bei manueller Berechnung der Differenzen andere Ergebnisse liefern würde
>>> d = [-0.025, 0.05, 0.05, -0.05] >>> ref = wilcoxon(d, alternative='greater') >>> ref WilcoxonResult(statistic=6.0, pvalue=0.5)
Der wesentliche Unterschied liegt am Rundungsfehler in den Ergebnissen von
x-y>>> d - (x-y) array([2.08166817e-17, 6.93889390e-17, 1.38777878e-17, 4.16333634e-17])
Obwohl wir erwartet hätten, dass alle Elemente von
(x-y)[1:]den gleichen Betrag0.05haben, haben sie in der Praxis leicht unterschiedliche Beträge und erhalten daher im Test unterschiedliche Ränge. Vor der Durchführung des Tests sollten Siedberechnen und es bei Bedarf anpassen, um sicherzustellen, dass theoretisch identische Werte nicht numerisch unterscheidbar sind. Zum Beispiel>>> d2 = np.around(x - y, decimals=3) >>> wilcoxon(d2, alternative='greater') WilcoxonResult(statistic=6.0, pvalue=0.5)