2013-04-17 30 views
9

Tôi đang sử dụng thư viện Python scipy để tính toán tương quan Pearson cho hai mảng float. Giá trị trả về cho hệ số luôn là 1.0, ngay cả khi các mảng khác nhau. Ví dụ:Scipy: Tương quan của Pearson luôn quay trở lại 1

[-0.65499887 2.34644428] 
[-1.46049758 3.86537321] 

tôi kêu gọi các thói quen theo cách này:

r_row, p_value = scipy.stats.pearsonr(array1, array2) 

Giá trị của r_row luôn là 1.0. Tôi đang làm gì sai?

Trả lời

16

Pearson's correlation coefficient là một biện pháp của dữ liệu của bạn như thế nào sẽ được trang bị bởi một hồi quy tuyến tính. Nếu bạn chỉ cung cấp cho nó hai điểm, thì có một đường truyền chính xác qua cả hai điểm, do đó dữ liệu của bạn hoàn toàn phù hợp với một dòng, do đó hệ số tương quan là chính xác 1.

5

Tôi nghĩ rằng hệ số tương quan Pearson luôn trả 1.0 hoặc -1.0 nếu mỗi mảng chỉ có hai yếu tố, vì bạn luôn có thể vẽ một đường thẳng hoàn hảo thông qua hai points.Try nó với mảng có độ dài 3 và nó sẽ làm việc:

import scipy 
from scipy.stats import pearsonr 

x = scipy.array([-0.65499887, 2.34644428, 3.0]) 
y = scipy.array([-1.46049758, 3.86537321, 21.0]) 

r_row, p_value = pearsonr(x, y) 

Kết quả:

>>> r_row 
0.79617014831975552 
>>> p_value 
0.41371200873701036 
+0

tại sao nó không hoạt động cho mảng với chiều dài 2 ? – user2291379

+0

Nó hoạt động với các mảng có độ dài 2. –

Các vấn đề liên quan