为什么corrcoef返回一个矩阵?
我觉得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
来获得,所以没有必要特意去创建这个特例。