Tại sao corrcoef trả về một ma trận?


81

Có vẻ lạ đối với tôi rằng np.corrcoef trả về một ma trận.

 correlation1 = corrcoef(Strategy1Returns,Strategy2Returns)

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

Có ai biết tại sao lại như vậy và liệu có thể trả về chỉ một giá trị theo nghĩa cổ điển không?


28
bạn có thể đánh dấu vào câu trả lời tốt nhất từ ​​bên dưới như sự tôn trọng không?
Yank

Câu trả lời:


156

Nó cho phép bạn tính toán hệ số tương quan của> 2 tập dữ liệu, ví dụ:

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

Ở đây chúng ta có thể nhận được hệ số tương quan của a, b (0,995), a, c (-0,981) và b, c (-0,972) cùng một lúc. Trường hợp hai tập dữ liệu chỉ là một trường hợp đặc biệt của lớp tập dữ liệu N. Và có lẽ tốt hơn là nên giữ cùng một kiểu trả về. Vì "một giá trị" có thể được lấy đơn giản bằng

>>> corrcoef(a,b)[1,0]
0.99535001355530017

không có lý do lớn để tạo trường hợp đặc biệt.


1
Ví dụ tuyệt vời, minh họa rõ ràng chức năng cơ bản của CORRCOEF (trả lời nhiều hơn và cao hơn câu hỏi ban đầu)
Hiro

Công thức là gì nếu tôi chuyển x VÀ y?
Evgeni Nabokov

53

corrcoef trả về ma trận hiệp phương sai chuẩn hóa.

Ma trận hiệp phương sai là ma trận

Cov( X, X )    Cov( X, Y )

Cov( Y, X )    Cov( Y, Y )

Được chuẩn hóa, điều này sẽ mang lại ma trận:

Corr( X, X )    Corr( X, Y )

Corr( Y, X )    Corr( Y, Y )

correlation1[0, 0 ]là mối tương quan giữa Strategy1Returnsvà chính nó, phải là 1. Bạn chỉ muốn correlation1[ 0, 1 ].


Công thức cho corrcoef (x, y, rowvar = False), trong đó x và y có hình dạng (150, 4) là gì? Kết quả là ma trận 8x8 (tại sao?).
Evgeni Nabokov

1
@EvgeniNabokov Kết quả cho x và y nối như thể chúng được đóng gói trong hình (150, 8). Sau đó, 1 corrcoef cho mỗi sự kết hợp. Công thức giống nhau (стандартная).
sherdim

6

Ma trận tương quan là cách tiêu chuẩn để thể hiện mối tương quan giữa một số lượng hữu hạn các biến tùy ý. Ma trận tương quan của N vectơ dữ liệu là ma trận N × N đối xứng với đường chéo thống nhất. Chỉ trong trường hợp N = 2 thì ma trận này mới có một tham số tự do.


2

Bạn có thể sử dụng hàm sau để chỉ trả về hệ số tương quan:

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

Cân nhắc sử dụng các phần của matplotlib.cbook

ví dụ:

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

Cần cập nhật vì cbook đã không được dùng nữa.
Van Peer

1

Hàm Correlate của numpy hoạt động với 2 mảng 1D mà bạn muốn tương quan và trả về một giá trị tương quan.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.