Чому Corrcoef повертає матрицю?


81

Мені здається дивним, що np.corrcoef повертає матрицю.

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

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

Хтось знає, чому це так, і чи можна повернути лише одне значення в класичному розумінні?


28
чи можете ви позначити найкращу відповідь знизу як повагу?
Янк

Відповіді:


157

Це дозволяє обчислити коефіцієнти кореляції> 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

немає особливої ​​причини створювати особливий випадок.


1
Чудовий приклад, який наочно ілюструє базові функціональні можливості CORRCOEF (крім того, відповідаючи на вихідне питання)
Hiro

Яка формула, якщо я здаю x І y?
Євгеній Набоков

53

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


Яка формула для corrcoef (x, y, rowvar = False), де x і y мають форму (150, 4)? Результат - матриця 8x8 (чому?).
Євгеній Набоков

1
@EvgeniNabokov Результат для об'єднаних x та y так, ніби вони були hstacked у формі (150, 8). Потім 1 корркоеф для кожної комбінації. Формула однакова (стандартна).
sherdim

6

Матриця кореляції - це стандартний спосіб вираження кореляції між довільною кінцевою кількістю змінних. Кореляційна матриця N векторів даних є симетричною N × N матрицею з діагоналлю одиниці. Лише у випадку N = 2 ця матриця має один вільний параметр.


2

Ви можете використовувати наступну функцію, щоб повернути лише коефіцієнт кореляції:

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]

1

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

наприклад:

import matplotlib.cbook as cbook
segments = cbook.pieces(np.arange(20), 3)
for s in segments:
     print s

Потрібне оновлення, оскільки cbook застаріло.
Van Peer

1

Функція Correlate numpy працює з 2 одновимірними масивами, які потрібно корелювати, і повертає одне значення кореляції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.