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 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 R-Wert.
- pvaluefloat
Der zweiseitige p-Wert.
Hinweise
pointbiserialrverwendet einen t-Test mitn-1Freiheitsgraden. Er ist äquivalent zupearsonr.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 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]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. ]])