也许我弄错了。如果是这样,我很抱歉这样问。
我想使用scipy的pearsonr
函数计算Pearson's correlation coefficent。
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)
我在scpy.stats.stats.py中查看pearsonr函数的代码。 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的定义,Pearson的Correleation Coefficient也应该为零。
Pearson两个变量之间的相关系数定义为两个变量的协方差除以其标准差的乘积。
是错误还是我在哪里犯错?
答案 0 :(得分:21)
Pearson两个变量之间的相关系数定义为两个变量的协方差除以它们的标准偏差的乘积。
所以这是协方差
[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
。协方差的值是无关的。