为什么corrcoef返回一个矩阵?

99 投票
6 回答
125841 浏览
提问于 2025-04-16 02:26

我觉得np.corrcoef返回一个矩阵这件事有点奇怪。

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

[[ 1.         -0.99598935]
 [-0.99598935  1.        ]]

有没有人知道为什么会这样?有没有办法只返回一个经典意义上的单一值呢?

6 个回答

8

相关性矩阵是用来表示多个变量之间关系的标准方法。对于N个数据向量,它的相关性矩阵是一个对称的N × N的矩阵,主对角线上的值都是1。只有在N等于2的情况下,这个矩阵才会有一个自由参数。

58

corrcoef 是用来返回标准化的协方差矩阵的。

协方差矩阵就是一个用来表示不同数据之间关系的矩阵。

Cov( X, X )    Cov( X, Y )

Cov( Y, X )    Cov( Y, Y )

经过标准化处理后,会得到这样的矩阵:

Corr( X, X )    Corr( X, Y )

Corr( Y, X )    Corr( Y, Y )

correlation1[0, 0] 表示的是 Strategy1Returns 和它自己之间的相关性,这个值一定是1。你其实只需要关注 correlation1[0, 1] 这个值。

187

这个功能可以让你计算多个数据集之间的相关系数,比如说超过两个的数据集。

>>> from numpy import *
>>> a = array([1,2,3,4,6,7,8,9])
>>> b = array([2,4,6,8,10,12,13,15])
>>> c = array([-1,-2,-2,-3,-4,-6,-7,-8])
>>> corrcoef([a,b,c])
array([[ 1.        ,  0.99535001, -0.9805214 ],
       [ 0.99535001,  1.        , -0.97172394],
       [-0.9805214 , -0.97172394,  1.        ]])

在这里,我们可以一次性得到a和b之间的相关系数(0.995),a和c之间的相关系数(-0.981),以及b和c之间的相关系数(-0.972)。其实,两个数据集的情况只是多个数据集情况的一种特例。而且,保持返回结果的类型一致可能更好。因为“一个值”可以简单地通过

>>> corrcoef(a,b)[1,0]
0.99535001355530017

来获得,所以没有必要特意去创建这个特例。

撰写回答