Для меня кажется странным, что np.corrcoef возвращает матрицу.
correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)
[[ 1. -0.99598935]
[-0.99598935 1. ]]
Кто-либо знает, почему дело обстоит так и возможно ли возвратить всего одно значение в классическом смысле?
Он позволяет вычислять коэффициенты корреляции для> 2 наборов данных, например
>>> 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). Случай с двумя наборами данных - это просто частный случай класса N-наборов данных. И, наверное, лучше сохранить тот же тип возвращаемого значения. Поскольку «одно значение» может быть получено просто с помощью
>>> corrcoef(a,b)[1,0]
0.99535001355530017
, нет большой причины создавать особый случай.
Корреляционная матрица - это стандартный способ выразить корреляции между произвольным конечным числом переменных. Корреляционная матрица N векторов данных является симметричной матрицей N × N с единичной диагональю. Только в случае N = 2 эта матрица имеет один свободный параметр.
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]
.