numpy.corrcoef

numpy.corrcoef(x, y=None, rowvar=True, bias=<no value>, ddof=<no value>)

Функция corrcoef() вычисляет коэфициент корреляции Пирсона (линейный коэфициент корреляции).

Данный коэфициент вычисляется по формуле:

$${R} _{XY}={\frac {{C}_{XY}}{{\sigma } _{X}{\sigma }_{Y}}}={\frac {\sum (X-{\bar {X}})(Y-{\bar {Y}})}{\sqrt {\sum (X-{\bar {X}})^{2}\sum (Y-{\bar {Y}})^{2}}}}$$

Где \({C} _{XY}\) - ковариационная матрица, а \({\overline {X}}={\frac {1}{n}}\sum _{t=1}^{n}X_{t}\) и \({\overline {Y}}={\frac {1}{n}}\sum _{t=1}^{n}Y_{t}\) это средние значения выборок.

Коэфициент корреляции находится в интервале [-1, 1].

Параметры:
x - массив NumPy или подобный массиву объект.
Входные данные в виде одномерного или двумерного массива, содержащего несколько выборок (случайных величин). Каждая строка в этом массиве представляет собой отдельную выборку (случайную переменную), а столбец отдельное наблюдение в каждой выборке.
y - массив NumPy или подобный массиву объект (необязательный параметр).
Дополнительный набор выборок, который имеет ту же форму что и m.
rowvar - True или False (необязательный параметр).
Если rowvar = True (по умолчанию это так), то каждой строке соответствует определенная выборка, а столбцу определенное наблюдение из этой выборки. Если параметр установлен в значение False, выполняется транспонирование массива, т.е. каждый столбец начинает соответсвовать выборкам, а каждая строка соответствующим наблюдениям из этих выборок.
bias - <no value>.
Начиная с версии 1.10.0 считается устаревшим и не используется.
ddof - <no value>.
Начиная с версии 1.10.0 считается устаревшим и не используется.
Возвращает:
результат - массив NumPy или число
Матрица корреляционных коэфициентов для указанной выборки наблюдений.

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

Замечание

Параметры bias и ddof могут быть указаны, но они никак не влияют на вычисления. Это сделано для обратной совместимости и должно быть исправлено.

Из-за округления чисел с плавающей запятой при выполнении вычислений, возвращаемый массив может оказаться не эрмитовым (не симметричным), диагональные элементы могут оказаться отличны от 1, а прочие элементы матрицы могут выходить за пределы интервала [-1, 1]. Если входные данные представлены комплексными числами, то действительная и мнимая часть элементов результирующей матрицы, обрезается до допустимого интервала [-1, 1].



Примеры

Сгенерируем какие-нибудь случайные данные, которые будут имитировать два набора наблюдений:

>>> import numpy as np
>>> 
>>> np.random.seed(777)
>>> 
>>> X = 2*np.arange(30) + 5*np.random.beta(1, 2, 30)
>>> Y = 0.7*np.arange(30) + 2*np.random.randn(30)

Для наглядности изобразим каждую точку наблдений на графике разброса:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(777)

X = 2*np.arange(30) + 5*np.random.beta(1, 2, 30)
Y = 0.7*np.arange(30) + 2*np.random.randn(30)


fig, ax = plt.subplots()

ax.scatter(X, Y)

ax.set_xlabel(r'Величина $\mathbf{X}$')
ax.set_ylabel(r'Величина $\mathbf{Y}$')

ax.set_title('Наблюдаемые значения двух величин')

plt.show()

Коэфициент корреляции двух величин в NumPy

Теперь вычислим коофициент корреляции данных величин:

>>> VAL = np.vstack((X, Y))
>>> 
>>> R_xy = np.corrcoef(VAL)
>>> R_xy
array([[1.        , 0.94173448],
       [0.94173448, 1.        ]])

Как видим данные величины очень сильно коррелируют, о чем говорит близкое к 1 значение коэфициента, к тому же они обе возрастают, о чем говорит положительное значение коэфициента.