Может я ошибся. Если так, мне жаль спрашивать об этом.
Я хочу рассчитать коэффициент корреляции Пирсона с помощью Функция scipy 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. Некоторая часть функции pearsonr выглядит следующим образом.
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.
Коэффициент корреляции Пирсона между двумя переменными определяется как ковариация двух переменных, деленная на произведение их стандартных отклонений.
Это ошибка или где я ошибаюсь?