为什么这两个列表的相关系数等于1?

时间:2019-06-17 07:37:58

标签: python numpy correlation

我有两个列表ab如下:

a = [4,4,4,1.1]
b = [4,4,4,1.2]  

很明显,两个列表中的最后一个值是不同的,仍然是为什么在下面的代码中为什么要使相关系数(来自numpy)等于1

print(corrcoef(a,b))

输出:

[[1. 1.]
 [1. 1.]]

1 个答案:

答案 0 :(得分:4)

您仅假设最后一个值不同,相关系数就不应为1。但是,这种假设可能有误。

要实现的重要事情是,仅在调整每个列表/功能的标度之后才计算相关性。考虑到这一点,您只有两对唯一的数据点。仅给定两个数据点的相关性几乎*总是可以以1或-1的方式构造。这是因为实际值无关紧要,因为它们会在比较前 进行相应缩放。

例如:

import numpy as np
a = [60, 30]
b = [1050, 490]
print(np.corrcoef(a,b)) #still gives 1.

将此与您基本通过的内容进行比较:

import numpy as np
a = [4, 1.1]
b = [4, 1.2]
print(np.corrcoef(a,b)) #still gives 1.

两个数据点所包含的信息不足以表明相关性可以是不等于1或-1的特定值。

要了解为什么1的相关性在这里有意义,请考虑我可以添加的第三个点。

a = [6.9, 4, 1.1] #gaps of 2.9
b = [6.8, 4, 1.2] #gaps of 2.8
print(np.corrcoef(a,b)) #still gives 1.

也许这使为什么相关性可以为1的原因更清晰一些,因为两个列表中的数据点仍然一起移动

要获得3点的不同相关值,我们可以对此进行比较。

a = [7, 4, 1.1]
b = [7, 4, 1.2]
print(np.corrcoef(a,b)) #gives 0.99994879

现在我们有足够的数据点来显示相关性不是完美的1。


*关于几乎所有情况,例外情况是某个功能完全不变的情况。例如a = [0, 0]b = [0, 1]