Почему corrcoef возвращает матрицу? - PullRequest
62 голосов
/ 06 августа 2010

Мне кажется странным, что np.corrcoef возвращает матрицу.

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

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

Кто-нибудь знает, почему это так и можно ли вернуть только одно значение в классическом смысле?

Ответы [ 6 ]

123 голосов
/ 06 августа 2010

Позволяет вычислять коэффициенты корреляции> 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

нет особой причины для создания особого случая.

44 голосов
/ 06 августа 2010

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 ].

7 голосов
/ 06 августа 2010

Матрица корреляции является стандартным способом выражения корреляций между произвольным конечным числом переменных.Корреляционная матрица N векторов данных представляет собой симметричную N × N матрицу с диагональю единица.Только в случае N = 2 эта матрица имеет один свободный параметр.

1 голос
/ 15 августа 2011

Функция Correlate of numpy работает с 2 1D массивами, которые вы хотите коррелировать, и возвращает одно значение корреляции.

1 голос
/ 03 мая 2011

Рассмотрите возможность использования кусочков matplotlib.cbook

например:

import matplotlib.cbook as cbook
segments = cbook.pieces(np.arange(20), 3)
for s in segments:
     print s
0 голосов
/ 19 февраля 2019

Вы можете использовать следующую функцию для возврата только коэффициента корреляции:

def pearson_r(x, y):
"""Compute Pearson correlation coefficient between two arrays."""

   # Compute correlation matrix
   corr_mat = np.corrcoef(x, y)

   # Return entry [0,1]
   return corr_mat[0,1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...