scipy.stats.

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 ein ValueError ausgelö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

kendalltau

Berechnet Kendalls Tau.

spearmanr

Berechnet einen Spearman-Rangkorrelationskoeffizienten.

theilslopes

Berechnet 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 in np.ndarray konvertiert. In diesem Fall ist die Ausgabe eine Skalar- oder np.ndarray mit geeigneter Form anstelle eines 2D-np.matrix. Ebenso werden, während maskierte Elemente von Masked Arrays ignoriert werden, die Ausgabe eine Skalar- oder np.ndarray anstelle eines Masked Arrays mit mask=False sein.

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)