Почему corrcoef возвращает матрицу?
Мне кажется странным, что np.corrcoef возвращает матрицу.
correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)
[[ 1. -0.99598935]
[-0.99598935 1. ]]
Кто-нибудь знает, почему это так, и можно ли вернуть только одно значение в классическом смысле?
Ответы
Ответ 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
нет большой причины для создания специального случая.
Ответ 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 ]
.
Ответ 3
Корреляционная матрица является стандартным способом выражения корреляций между произвольным конечным числом переменных. Корреляционная матрица из N векторов данных представляет собой симметричную матрицу N × N с диагональю единицы. Только в случае N = 2 эта матрица имеет один свободный параметр.
Ответ 4
Рассмотрите возможность использования элементов matplotlib.cbook
например:
import matplotlib.cbook as cbook
segments = cbook.pieces(np.arange(20), 3)
for s in segments:
print s
Ответ 5
Функция Корреляция numpy работает с 2 1D массивами, которые вы хотите скорректировать и возвращает одно значение корреляции.