scipy.stats.

chatterjeexi#

scipy.stats.chatterjeexi(x, y, *, axis=0, y_continuous=False, method='asymptotic', nan_policy='propagate', keepdims=False)[Quelle]#

Berechnet die xi-Korrelation und führt einen Unabhängigkeitstest durch

Der xi-Korrelationskoeffizient ist ein Maß für die Assoziation zwischen zwei Variablen; der Wert tendiert dazu, nahe Null zu sein, wenn die Variablen unabhängig sind, und nahe 1, wenn eine starke Assoziation besteht. Im Gegensatz zu anderen Korrelationskoeffizienten ist die xi-Korrelation auch dann effektiv, wenn die Assoziation nicht monoton ist.

Parameter:
x, yarray-ähnlich

Die Stichproben: entsprechende Beobachtungen der unabhängigen und abhängigen Variablen. Die (N-d)-Arrays müssen broadcastfähig sein.

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.

method„asymptotic“ oder eine PermutationMethod-Instanz, optional

Wählt die Methode zur Berechnung des p-Wertes aus. Standard ist „asymptotic“. Die folgenden Optionen sind verfügbar.

  • 'asymptotic': vergleicht die standardisierte Teststatistik mit der Normalverteilung.

  • PermutationMethod-Instanz. In diesem Fall wird der p-Wert unter Verwendung von permutation_test mit den bereitgestellten Konfigurationsoptionen und anderen geeigneten Einstellungen berechnet.

y_continuousbool, Standard: False

Ob angenommen wird, dass y aus einer kontinuierlichen Verteilung gezogen wird. Wenn y aus einer kontinuierlichen Verteilung gezogen wird, sind die Ergebnisse gültig, unabhängig davon, ob dies angenommen wird oder nicht, aber die Aktivierung dieser Annahme führt zu einer schnelleren Berechnung und liefert typischerweise ähnliche Ergebnisse.

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:
resSignificanceResult

Ein Objekt, das Attribute enthält

statisticfloat

Die xi-Korrelationsstatistik.

pvaluefloat

Der zugehörige p-Wert: die Wahrscheinlichkeit eines mindestens so hohen Wertes der Statistik wie der beobachtete Wert unter der Nullhypothese der Unabhängigkeit.

Hinweise

Derzeit gibt es keine spezielle Behandlung von Bindungen in x; sie werden von der Implementierung willkürlich gebrochen.

[1] stellt fest, dass die Statistik *per Design* nicht symmetrisch in x und y ist: „…wir wollen vielleicht verstehen, ob \(Y\) eine Funktion von \(X\) ist, und nicht nur, ob eine der Variablen eine Funktion der anderen ist.“ Siehe [1] Anmerkung 1.

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)

Chatterjee, Sourav. „A new coefficient of correlation.“ Journal of the American Statistical Association 116.536 (2021): 2009-2022. DOI:10.1080/01621459.2020.1758115.

Beispiele

Generieren Sie perfekt korrelierte Daten und beobachten Sie, dass die xi-Korrelation fast 1,0 beträgt.

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> x = rng.uniform(0, 10, size=100)
>>> y = np.sin(x)
>>> res = stats.chatterjeexi(x, y)
>>> res.statistic
np.float64(0.9012901290129013)

Die Wahrscheinlichkeit, einen so hohen Wert der Statistik unter der Nullhypothese der Unabhängigkeit zu beobachten, ist sehr gering.

>>> res.pvalue
np.float64(2.2206974648177804e-46)

Wenn Rauschen eingeführt wird, nimmt der Korrelationskoeffizient ab.

>>> noise = rng.normal(scale=[[0.1], [0.5], [1]], size=(3, 100))
>>> res = stats.chatterjeexi(x, y + noise, axis=-1)
>>> res.statistic
array([0.79507951, 0.41824182, 0.16651665])

Da die Verteilung von y kontinuierlich ist, ist es gültig, y_continuous=True zu übergeben. Die Statistik ist identisch und der p-Wert (nicht gezeigt) unterscheidet sich nur geringfügig.

>>> stats.chatterjeexi(x, y + noise, y_continuous=True, axis=-1).statistic
array([0.79507951, 0.41824182, 0.16651665])