Scipy:皮尔逊的相关性总是返回 1

Posted

技术标签:

【中文标题】Scipy:皮尔逊的相关性总是返回 1【英文标题】:Scipy: Pearson's correlation always returning 1 【发布时间】:2013-04-10 10:33:07 【问题描述】:

我正在使用 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。我做错了什么?

【问题讨论】:

【参考方案1】:

如果每个数组只有两个元素,我认为 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

【讨论】:

这个错了,你要确保数组x和y中所有值的均值为0,否则相关关系会出错【参考方案2】:

Pearson's correlation coefficient 衡量您的数据与线性回归的拟合程度。如果你只提供两个点,那么有一条线正好穿过两个点,因此你的数据完全符合一条线,因此相关系数正好是 1。

【讨论】:

以上是关于Scipy:皮尔逊的相关性总是返回 1的主要内容,如果未能解决你的问题,请参考以下文章

皮尔逊斯皮尔曼肯德尔等级应用场景及代码实现(附Python代码)

如何理解皮尔逊相关系数

如何理解皮尔逊相关系数

数学建模:相关性分析学习——皮尔逊(pearson)相关系数与斯皮尔曼(spearman)相关系数

相关性Correlations 皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)

皮尔逊相关系数python实现