Scipy:Pearson的相关性总是返回1

use*_*379 11 python statistics scipy pearson correlation

我正在使用Python库scipy来计算两个浮点数组的Pearson相关性.即使数组不同,系数的返回值也始终为1.0.例如:

[-0.65499887  2.34644428]
[-1.46049758  3.86537321]
Run Code Online (Sandbox Code Playgroud)

我用这种方式调用例程:

r_row, p_value = scipy.stats.pearsonr(array1, array2)
Run Code Online (Sandbox Code Playgroud)

r_row始终为1.0.我究竟做错了什么?

Jai*_*ime 19

Pearson的相关系数衡量您的数据与线性回归的拟合程度.如果你只提供两个点,那么有一条线正好通过两个点,因此你的数据完全适合一条线,因此相关系数恰好为1.


Aka*_*all 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)
Run Code Online (Sandbox Code Playgroud)

结果:

>>> r_row
0.79617014831975552
>>> p_value
0.41371200873701036
Run Code Online (Sandbox Code Playgroud)