我正在使用Python库scipy来计算两个浮点数组的Pearson相关性。即使数组不同,系数的返回值也始终为1.0。例如:
[-0.65499887 2.34644428]
[-1.46049758 3.86537321]
我以这种方式调用例程:
r_row, p_value = scipy.stats.pearsonr(array1, array2)
r_row
的值始终为1.0。我做错了什么?
答案 0 :(得分:18)
Pearson's correlation coefficient衡量数据在线性回归中的拟合程度。如果你只提供两个点,那么就会有一条线正好通过两个点,因此你的数据非常适合一条线,因此相关系数恰好是1。
答案 1 :(得分:6)
我认为,如果每个数组只有两个元素,那么pearson相关系数总是返回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