Scipy:Pearson相关系数始终返回1

11

我正在使用Python库scipy计算两个浮点数数组的Pearson相关系数。即使这些数组不同,系数的返回值总是1.0。例如:

[-0.65499887  2.34644428]
[-1.46049758  3.86537321]
我是这样调用该例程的:

我是这样调用该例程的:

r_row, p_value = scipy.stats.pearsonr(array1, array2)
< p > r_row 的值始终为1.0。我做错了什么?< /p >
2个回答

22

皮尔逊相关系数是衡量您的数据是否适合线性回归的一种度量方法。如果您只提供了两个数据点,则存在一条通过这两个点的直线,因此您的数据完全适合一条直线,因此相关系数恰好为1。


6

我认为如果每个数组只有两个元素,皮尔逊相关系数总是返回1.0-1.0,因为你总可以通过这两个点画一条完美的直线。如果使用长度为3的数组,它也会起作用:

import scipy
from scipy.stats import pearsonr

x = scipy.array([-0.65499887,  2.34644428, 3.0])
y = scipy.array([-1.46049758,  3.86537321, 21.0])

r_row, p_value = pearsonr(x, y)

结果:

>>> r_row
0.79617014831975552
>>> p_value
0.41371200873701036

这是错误的,你必须确保数组x和y中所有值的平均值为0。否则,相关性将是错误的。 - DollarAkshay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接