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 vonpermutation_testmit 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 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:
- 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 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)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=Truezu ü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])