scipy.stats.

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 der axis-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 a und b zusammen.

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

Ausgelöst, wenn ein Input ein konstantes Array ist. Der Korrelationskoeffizient ist in diesem Fall nicht definiert, daher wird np.nan zurü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 x und y) 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.