当我使用pearsonr时遇到无效值

时间:2011-10-04 21:03:37

标签: python scipy correlation

也许我弄错了。如果是这样,我很抱歉这样问。

我想使用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两个变量之间的相关系数定义为两个变量的协方差除以其标准差的乘积

是错误还是我在哪里犯错?

1 个答案:

答案 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。协方差的值是无关的