scipy.stats.

pointbiserialr#

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

Berechnet einen Punkt-Biserial-Korrelationskoeffizienten und seinen p-Wert.

Die Punkt-Biserial-Korrelation wird verwendet, um die Beziehung zwischen einer binären Variable, x, und einer kontinuierlichen Variable, y, zu messen. Wie andere Korrelationskoeffizienten variiert dieser zwischen -1 und +1, wobei 0 keine Korrelation impliziert. Korrelationen von -1 oder +1 implizieren eine deterministische Beziehung.

Diese Funktion kann mit einer Abkürzungsformel berechnet werden, liefert aber das gleiche Ergebnis wie pearsonr.

Parameter:
xarray_like von bools

Eingabearray.

yarray_like

Eingabearray.

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 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 R-Wert.

pvaluefloat

Der zweiseitige p-Wert.

Hinweise

pointbiserialr verwendet einen t-Test mit n-1 Freiheitsgraden. Er ist äquivalent zu pearsonr.

Der Wert der Punkt-Biserial-Korrelation kann berechnet werden aus

\[r_{pb} = \frac{\overline{Y_1} - \overline{Y_0}} {s_y} \sqrt{\frac{N_0 N_1} {N (N - 1)}}\]

Wobei \(\overline{Y_{0}}\) und \(\overline{Y_{1}}\) Mittelwerte der metrischen Beobachtungen sind, die mit 0 bzw. 1 kodiert sind; \(N_{0}\) und \(N_{1}\) sind die Anzahlen der Beobachtungen, die mit 0 bzw. 1 kodiert sind; \(N\) ist die Gesamtzahl der Beobachtungen und \(s_{y}\) ist die Standardabweichung aller metrischen Beobachtungen.

Ein Wert von \(r_{pb}\), der signifikant von Null verschieden ist, ist vollständig äquivalent zu einem signifikanten Unterschied in den Mittelwerten zwischen den beiden Gruppen. Somit kann ein unabhängiger Gruppen-t-Test mit \(N-2\) Freiheitsgraden verwendet werden, um zu testen, ob \(r_{pb}\) ungleich Null ist. Die Beziehung zwischen der t-Statistik für den Vergleich zweier unabhängiger Gruppen und \(r_{pb}\) ist gegeben durch

\[t = \sqrt{N - 2}\frac{r_{pb}}{\sqrt{1 - r^{2}_{pb}}}\]

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]

J. Lev, “The Point Biserial Coefficient of Correlation”, Ann. Math. Statist., Vol. 20, no.1, pp. 125-126, 1949.

[2]

R.F. Tate, “Correlation Between a Discrete and a Continuous Variable. Point-Biserial Correlation.”, Ann. Math. Statist., Vol. 25, np. 3, pp. 603-607, 1954.

[3]

D. Kornbrot “Point Biserial Correlation”, In Wiley StatsRef: Statistics Reference Online (eds N. Balakrishnan, et al.), 2014. DOI:10.1002/9781118445112.stat06227

Beispiele

>>> import numpy as np
>>> from scipy import stats
>>> a = np.array([0, 0, 0, 1, 1, 1, 1])
>>> b = np.arange(7)
>>> stats.pointbiserialr(a, b)
(0.8660254037844386, 0.011724811003954652)
>>> stats.pearsonr(a, b)
(0.86602540378443871, 0.011724811003954626)
>>> np.corrcoef(a, b)
array([[ 1.       ,  0.8660254],
       [ 0.8660254,  1.       ]])