当我使用pearsonr时遇到无效值

Bas*_*aya 11 python scipy correlation

也许我犯了一个错误.如果是这样,我很抱歉问这个.

我想通过使用scipy的函数来计算Pearson的相关系数pearsonr.

from scipy.stats.stats import pearsonr

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

pearsonr(X, Y)
Run Code Online (Sandbox Code Playgroud)

我在下面收到错误

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
Run Code Online (Sandbox Code Playgroud)

最后,pearsonr返回(nan, 1.0)

应该pearsonr回来(0, 1.0)

我认为如果向量对于每个行/列具有相同的值,则协方差应该为零.因此,通过PCC的定义,Pearson的Correleation Coefficient也应该为零.

Pearson两个变量之间的相关系数定义为两个变量的协方差除以它们的标准偏差的乘积.

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

agf*_*agf 22

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.协方差的值是无关紧要的.

  • @Thorn:Pearson的存在是[不保证](http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient#Existence)要定义的. (3认同)