spearmanr#
- scipy.stats.spearmanr(a, b=None, axis=0, nan_policy='propagate', alternative='two-sided')[Quelle]#
Berechnet einen Spearman-Korrelationskoeffizienten mit zugehörigem p-Wert.
Der Spearman-Rangkorrelationskoeffizient ist ein nichtparametrisches Maß für die Monotonie der Beziehung zwischen zwei Datensätzen. Wie andere Korrelationskoeffizienten variiert dieser zwischen -1 und +1, wobei 0 keine Korrelation impliziert. Korrelationen von -1 oder +1 implizieren eine exakte monotone Beziehung. Positive Korrelationen bedeuten, dass mit steigendem x auch y steigt. Negative Korrelationen bedeuten, dass mit steigendem x y abnimmt.
Der p-Wert gibt grob die Wahrscheinlichkeit an, dass ein unkorreliertes System Datensätze erzeugt, die eine Spearman-Korrelation aufweisen, die mindestens so extrem ist wie die aus diesen Datensätzen berechnete. Obwohl die Berechnung des p-Wertes keine starken Annahmen über die zugrundeliegenden Verteilungen der Stichproben macht, ist sie nur für sehr große Stichproben (>500 Beobachtungen) genau. Für kleinere Stichprobengrößen sollten Sie einen Permutationstest in Betracht ziehen (siehe Abschnitt Beispiele unten).
- Parameter:
- a, b1D oder 2D array_like, b ist optional
Ein oder zwei 1D- oder 2D-Arrays, die mehrere Variablen und Beobachtungen enthalten. Wenn diese 1D sind, repräsentiert jedes einen Vektor von Beobachtungen einer einzelnen Variablen. Für das Verhalten im 2D-Fall siehe unter
axis, unten. Beide Arrays müssen in deraxis-Dimension die gleiche Länge haben.- axisint oder None, optional
Wenn axis=0 (Standard), dann stellt jede Spalte eine Variable dar, mit Beobachtungen in den Zeilen. Wenn axis=1, wird die Beziehung transponiert: jede Zeile repräsentiert eine Variable, während die Spalten Beobachtungen enthalten. Wenn axis=None, dann werden beide Arrays aufgerollt (raveled).
- nan_policy{‘propagate’, ‘raise’, ‘omit’}, optional
Definiert, wie mit NaN-Werten im Input umgegangen wird. Die folgenden Optionen sind verfügbar (Standard ist ‘propagate’)
‘propagate’: gibt NaN zurück
‘raise’: löst einen Fehler aus
‘omit’: führt die Berechnungen unter Ignorierung von NaN-Werten durch
- alternative{‘zweiseitig’, ‘kleiner’, ‘größer’}, optional
Definiert die Alternativhypothese. Standard ist ‘zweiseitig’. Folgende Optionen sind verfügbar
‘two-sided’: die Korrelation ist ungleich Null
‘less’: die Korrelation ist negativ (kleiner als Null)
‘greater’: die Korrelation ist positiv (größer als Null)
Hinzugefügt in Version 1.7.0.
- Rückgabe:
- resSignificanceResult
Ein Objekt, das Attribute enthält
- statisticfloat oder ndarray (2D-Quadrat)
Spearman-Korrelationsmatrix oder Korrelationskoeffizient (wenn nur 2 Variablen als Parameter gegeben sind). Die Korrelationsmatrix ist quadratisch und ihre Länge entspricht der Gesamtzahl der Variablen (Spalten oder Zeilen) in
aundbzusammen.- pvaluefloat
Der p-Wert für einen Hypothesentest, dessen Nullhypothese lautet, dass zwei Stichproben keine ordinale Korrelation aufweisen. Siehe alternative oben für alternative Hypothesen. pvalue hat die gleiche Form wie statistic.
- Löst aus:
- ValueError
Wenn axis nicht 0, 1 oder None ist, oder wenn die Anzahl der Dimensionen von a größer als 2 ist, oder wenn b None ist und die Anzahl der Dimensionen von a kleiner als 2 ist.
- Warnungen:
ConstantInputWarningAusgelöst, wenn ein Input ein konstantes Array ist. Der Korrelationskoeffizient ist in diesem Fall nicht definiert, daher wird
np.nanzurückgegeben.
Siehe auch
- Spearmans Korrelationskoeffizient
Erweitertes Beispiel
Referenzen
[1]Zwillinger, D. und Kokoska, S. (2000). CRC Standard Probability and Statistics Tables and Formulae. Chapman & Hall: New York. 2000. Abschnitt 14.7
[2]Kendall, M. G. und Stuart, A. (1973). The Advanced Theory of Statistics, Volume 2: Inference and Relationship. Griffin. 1973. Abschnitt 31.18
Beispiele
>>> import numpy as np >>> from scipy import stats >>> res = stats.spearmanr([1, 2, 3, 4, 5], [5, 6, 7, 8, 7]) >>> res.statistic 0.8207826816681233 >>> res.pvalue 0.08858700531354381
>>> rng = np.random.default_rng() >>> x2n = rng.standard_normal((100, 2)) >>> y2n = rng.standard_normal((100, 2)) >>> res = stats.spearmanr(x2n) >>> res.statistic, res.pvalue (-0.07960396039603959, 0.4311168705769747)
>>> res = stats.spearmanr(x2n[:, 0], x2n[:, 1]) >>> res.statistic, res.pvalue (-0.07960396039603959, 0.4311168705769747)
>>> res = stats.spearmanr(x2n, y2n) >>> res.statistic array([[ 1. , -0.07960396, -0.08314431, 0.09662166], [-0.07960396, 1. , -0.14448245, 0.16738074], [-0.08314431, -0.14448245, 1. , 0.03234323], [ 0.09662166, 0.16738074, 0.03234323, 1. ]]) >>> res.pvalue array([[0. , 0.43111687, 0.41084066, 0.33891628], [0.43111687, 0. , 0.15151618, 0.09600687], [0.41084066, 0.15151618, 0. , 0.74938561], [0.33891628, 0.09600687, 0.74938561, 0. ]])
>>> res = stats.spearmanr(x2n.T, y2n.T, axis=1) >>> res.statistic array([[ 1. , -0.07960396, -0.08314431, 0.09662166], [-0.07960396, 1. , -0.14448245, 0.16738074], [-0.08314431, -0.14448245, 1. , 0.03234323], [ 0.09662166, 0.16738074, 0.03234323, 1. ]])
>>> res = stats.spearmanr(x2n, y2n, axis=None) >>> res.statistic, res.pvalue (0.044981624540613524, 0.5270803651336189)
>>> res = stats.spearmanr(x2n.ravel(), y2n.ravel()) >>> res.statistic, res.pvalue (0.044981624540613524, 0.5270803651336189)
>>> rng = np.random.default_rng() >>> xint = rng.integers(10, size=(100, 2)) >>> res = stats.spearmanr(xint) >>> res.statistic, res.pvalue (0.09800224850707953, 0.3320271757932076)
Für kleine Stichproben sollten Sie erwägen, einen Permutationstest durchzuführen, anstatt sich auf den asymptotischen p-Wert zu verlassen. Beachten Sie, dass zur Berechnung der Nullverteilung der Statistik (für alle möglichen Paarungen zwischen Beobachtungen in Stichprobe
xundy) nur einer der beiden Inputs permutiert werden muss.>>> x = [1.76405235, 0.40015721, 0.97873798, ... 2.2408932, 1.86755799, -0.97727788] >>> y = [2.71414076, 0.2488, 0.87551913, ... 2.6514917, 2.01160156, 0.47699563]
>>> def statistic(x): # permute only `x` ... return stats.spearmanr(x, y).statistic >>> res_exact = stats.permutation_test((x,), statistic, ... permutation_type='pairings') >>> res_asymptotic = stats.spearmanr(x, y) >>> res_exact.pvalue, res_asymptotic.pvalue # asymptotic pvalue is too low (0.10277777777777777, 0.07239650145772594)
Ein detaillierteres Beispiel finden Sie unter Spearman-Korrelationskoeffizient.