weightedtau#
- scipy.stats.weightedtau(x, y, rank=True, weigher=None, additive=True, *, axis=None, nan_policy='propagate', keepdims=False)[Quelle]#
Berechnet eine gewichtete Version von Kendalls \(\tau\).
Das gewichtete \(\tau\) ist eine gewichtete Version von Kendalls \(\tau\), bei der Vertauschungen mit hohem Gewicht einflussreicher sind als Vertauschungen mit niedrigem Gewicht. Die Standardparameter berechnen die additive hyperbolische Version des Index, \(\tau_\mathrm h\), die nachweislich die beste Balance zwischen wichtigen und unwichtigen Elementen bietet [1].
Die Gewichtung wird mittels eines Rang-Arrays definiert, das jedem Element einen nicht-negativen Rang zuweist (höhere Wichtigkeitsränge sind mit kleineren Werten verbunden, z. B. ist 0 der höchstmögliche Rang), und einer Gewichtungsfunktion, die jedem Element ein Gewicht basierend auf dem Rang zuweist. Das Gewicht einer Vertauschung ist dann die Summe oder das Produkt der Gewichte der Ränge der vertauschten Elemente. Die Standardparameter berechnen \(\tau_\mathrm h\): eine Vertauschung zwischen Elementen mit Rang \(r\) und \(s\) (beginnend bei Null) hat das Gewicht \(1/(r+1) + 1/(s+1)\).
Die Angabe eines Rang-Arrays ist nur sinnvoll, wenn Sie ein externes Kriterium für Wichtigkeit im Sinn haben. Wenn, wie üblich, kein spezifischer Rang gemeint ist, wird das gewichtete \( \tau \) durch Mittelung der Werte definiert, die durch den absteigenden lexikographischen Rang von (x, y) und von (y, x) erzielt werden. Dies ist das Verhalten mit Standardparametern. Beachten Sie, dass die hier verwendete Konvention für die Rangfolge (niedrigere Werte bedeuten höhere Wichtigkeit) derjenigen in anderen statistischen Funktionen von SciPy entgegengesetzt ist.
- Parameter:
- x, yarray_like
Arrays von Punktzahlen, von der gleichen Form. Wenn Arrays nicht 1-D sind, werden sie zu 1-D abgeflacht.
- rankarray_like von Integers oder bool, optional
Ein nicht-negativer Rang, der jedem Element zugewiesen wird. Wenn er None ist, wird der absteigende lexikographische Rang von (x, y) verwendet: Elemente mit höherem Rang sind diejenigen mit größeren x-Werten, wobei y-Werte zum Aufbrechen von Bindungen verwendet werden (insbesondere wird das Vertauschen von x und y ein anderes Ergebnis liefern). Wenn es False ist, werden die Elementindizes direkt als Ränge verwendet. Der Standardwert ist True, in diesem Fall gibt die Funktion den Durchschnitt der Werte zurück, die durch den absteigenden lexikographischen Rang von (x, y) und von (y, x) erzielt werden.
- weighercallable, optional
Die Gewichtungsfunktion. Muss nicht-negative ganze Zahlen (wobei Null das wichtigste Element repräsentiert) auf ein nicht-negatives Gewicht abbilden. Der Standardwert None liefert hyperbolische Gewichtung, d. h. Rang \(r\) wird auf Gewicht \(1/(r+1)\) abgebildet.
- additivebool, optional
Wenn True, wird das Gewicht einer Vertauschung durch Addition der Gewichte der Ränge der vertauschten Elemente berechnet; andernfalls werden die Gewichte multipliziert. Der Standardwert ist True.
- axisint oder None, Standard: None
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: SignificanceResult
Ein Objekt, das Attribute enthält
- statisticfloat
Der gewichtete \(\tau\) Korrelationsindex.
- pvaluefloat
Derzeit
np.nan, da die Nullverteilung der Statistik unbekannt ist (auch im additiven hyperbolischen Fall).
Siehe auch
kendalltauBerechnet Kendalls Tau.
spearmanrBerechnet einen Spearman-Rangkorrelationskoeffizienten.
theilslopesBerechnet den Theil-Sen-Schätzer für eine Menge von Punkten (x, y).
Hinweise
Diese Funktion verwendet einen \(O(n \log n)\), auf Mergesort basierenden Algorithmus [1], der eine gewichtete Erweiterung von Knights Algorithmus für Kendalls \(\tau\) [2] ist. Er kann Shiehs gewichtetes \(\tau\) [3] zwischen Rangfolgen ohne Bindungen (d. h. Permutationen) berechnen, indem additive und rank auf False gesetzt werden, da die in [1] gegebene Definition eine Verallgemeinerung von Shiehs ist.
NaNs werden als kleinster möglicher Wert betrachtet.
Hinzugefügt in Version 0.19.0.
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
[1] (1,2,3)Sebastiano Vigna, „A weighted correlation index for rankings with ties“, Proceedings of the 24th international conference on World Wide Web, pp. 1166-1176, ACM, 2015.
[2]W.R. Knight, „A Computer Method for Calculating Kendall’s Tau with Ungrouped Data“, Journal of the American Statistical Association, Vol. 61, No. 314, Part 1, pp. 436-439, 1966.
[3]Grace S. Shieh. „A weighted Kendall’s tau statistic“, Statistics & Probability Letters, Vol. 39, No. 1, pp. 17-24, 1998.
Beispiele
>>> import numpy as np >>> from scipy import stats >>> x = [12, 2, 1, 12, 2] >>> y = [1, 4, 7, 1, 0] >>> res = stats.weightedtau(x, y) >>> res.statistic -0.56694968153682723 >>> res.pvalue nan >>> res = stats.weightedtau(x, y, additive=False) >>> res.statistic -0.62205716951801038
NaNs werden als kleinster möglicher Wert betrachtet
>>> x = [12, 2, 1, 12, 2] >>> y = [1, 4, 7, 1, np.nan] >>> res = stats.weightedtau(x, y) >>> res.statistic -0.56694968153682723
Dies ist exakt Kendalls Tau
>>> x = [12, 2, 1, 12, 2] >>> y = [1, 4, 7, 1, 0] >>> res = stats.weightedtau(x, y, weigher=lambda x: 1) >>> res.statistic -0.47140452079103173
>>> x = [12, 2, 1, 12, 2] >>> y = [1, 4, 7, 1, 0] >>> stats.weightedtau(x, y, rank=None) SignificanceResult(statistic=-0.4157652301037516, pvalue=nan) >>> stats.weightedtau(y, x, rank=None) SignificanceResult(statistic=-0.7181341329699028, pvalue=nan)