scipy.stats.

spearmanr#

scipy.stats.spearmanr(a, b=None, ось=0, nan_policy='propagate', альтернатива='two-sided')[источник]#

Вычислить коэффициент корреляции Спирмена с соответствующим p-значением.

Коэффициент корреляции Спирмена — это непараметрическая мера монотонности связи между двумя наборами данных. Как и другие коэффициенты корреляции, этот варьируется от -1 до +1, где 0 означает отсутствие корреляции. Корреляции -1 или +1 подразумевают точную монотонную связь. Положительные корреляции означают, что при увеличении x увеличивается и y. Отрицательные корреляции означают, что при увеличении x, y уменьшается.

p-значение приблизительно указывает вероятность того, что некоррелированная система произведет наборы данных, имеющие корреляцию Спирмена не менее экстремальную, чем вычисленная из этих наборов данных. Хотя вычисление p-значения не делает строгих предположений о распределениях, лежащих в основе выборок, оно точно только для очень больших выборок (>500 наблюдений). Для меньших размеров выборки рассмотрите перестановочный тест (см. раздел Примеры ниже).

Параметры:
a, b1D или 2D array_like, b опционально

Один или два одномерных или двумерных массива, содержащих несколько переменных и наблюдений. Когда они одномерные, каждый представляет собой вектор наблюдений одной переменной. Для поведения в двумерном случае см. ниже axis, ниже. Оба массива должны иметь одинаковую длину в axis измерение.

осьint или None, опционально

Если axis=0 (по умолчанию), то каждый столбец представляет переменную, с наблюдениями в строках. Если axis=1, отношение транспонируется: каждая строка представляет переменную, а столбцы содержат наблюдения. Если axis=None, то оба массива будут сведены в один.

nan_policy{'propagate', 'raise', 'omit'}, опционально

Определяет, как обрабатывать входные данные, содержащие nan. Доступны следующие варианты (по умолчанию 'propagate'):

  • ‘propagate’: возвращает nan

  • ‘raise’: вызывает ошибку

  • 'omit': выполняет вычисления, игнорируя значения nan

альтернатива{‘two-sided’, ‘less’, ‘greater’}, необязательный

Определяет альтернативную гипотезу. По умолчанию 'two-sided'. Доступны следующие опции:

  • 'two-sided': корреляция ненулевая

  • 'less': корреляция отрицательная (меньше нуля)

  • 'greater': корреляция положительная (больше нуля)

Добавлено в версии 1.7.0.

Возвращает:
resSignificanceResult

Объект, содержащий атрибуты:

статистикаfloat или ndarray (2-D квадратная)

Матрица корреляции Спирмена или коэффициент корреляции (если заданы только 2 переменные в качестве параметров). Матрица корреляции квадратная с длиной, равной общему количеству переменных (столбцов или строк) в a и b объединены.

p-значениеfloat

P-значение для проверки гипотезы, нулевая гипотеза которой состоит в том, что две выборки не имеют порядковой корреляции. См. альтернатива выше для альтернативных гипотез. p-значение имеет ту же форму, что и статистика.

Вызывает:
ValueError

Если ось не равно 0, 1 или None, или если количество измерений a больше 2, или если b равно None и количество измерений a меньше 2.

Предупреждает:
ConstantInputWarning

Возникает, если входные данные являются постоянным массивом. Коэффициент корреляции не определен в этом случае, поэтому np.nan возвращается.

Смотрите также

Коэффициент корреляции Спирмена

Расширенный пример

Ссылки

[1]

Zwillinger, D. and Kokoska, S. (2000). CRC Standard Probability and Statistics Tables and Formulae. Chapman & Hall: New York. 2000. Section 14.7

[2]

Kendall, M. G. and Stuart, A. (1973). The Advanced Theory of Statistics, Volume 2: Inference and Relationship. Griffin. 1973. Section 31.18

Примеры

>>> 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)

Для небольших выборок рассмотрите проведение перестановочного теста вместо использования асимптотического p-значения. Обратите внимание, что для расчета нулевого распределения статистики (для всех возможных пар между наблюдениями в выборке x и y), только один из двух входов должен быть переставлен.

>>> 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)

Для более подробного примера см. Коэффициент корреляции Спирмена.