Обнаружено недопустимое значение при использовании Pearsonr - PullRequest
11 голосов
/ 05 октября 2011

Может быть, я ошибся. Если так, прошу прощения за это.

Я хочу вычислить коэффициент корреляции Пирсона с помощью функции pearsonr Сципи.

from scipy.stats.stats import pearsonr

X = [4, 4, 4, 4, 4, 4]
Y = [4, 5, 5, 4, 4, 4]

pearsonr(X, Y)

Я получаю ошибку ниже

RuntimeWarning: недопустимое значение, встречающееся в double_scalars ###

Причиной возникновения ошибки является E [X] = 4 (исключенное значение X равно 4)

Я смотрю код функции Pearsonr в scpy.stats.stats.py. Некоторая часть функции Пирсонра выглядит следующим образом.

mx = x.mean() # which is 4
my = y.mean() # not necessary
xm, ym = x-mx, y-my # xm = [0 0 0 0 0 0]
r_num = n*(np.add.reduce(xm*ym)) #r_num = 0, because xm*ym 1x6 Zero Vector.
r_den = n*np.sqrt(ss(xm)*ss(ym)) #r_den = 0
r = (r_num / r_den) # Invalid value encountered in double_scalars

В конце pearsonr возвращает (nan, 1.0)

Должен ли pearsonr вернуть (0, 1.0)?

Я думаю, что если вектор имеет одинаковое значение для каждой строки / столбца, ковариация должна быть равна нулю. Таким образом, коэффициент корреляции Пирсона также должен быть равен нулю по определению PCC.

Коэффициент корреляции Пирсона между двумя переменными определяется как ковариация двух переменных, деленная на произведение их стандартных отклонений .

Это ошибка или где я могу ошибиться?

1 Ответ

21 голосов
/ 05 октября 2011

Коэффициент корреляции Пирсона между двумя переменными определяется как ковариация двух переменных, деленная на произведение их стандартных отклонений.

Так что ковариация над

  • стандартное отклонение [4, 5, 5, 4, 4, 4] раз
  • стандартное отклонение [4, 4, 4, 4, 4, 4].

Стандартное отклонение [4, 4, 4, 4, 4, 4] равно нулю.

Так что ковариация над

  • стандартное отклонение [4, 5, 5, 4, 4, 4] раз
  • ноль.

Так что ковариация над

  • ноль.

Все, что делится на ноль, равно nan. Значение ковариации составляет не имеет значения .

...