Xếp hạng hệ số tương quan


13

Hệ số tương quan thông thường (trong 2d) đo lường mức độ tập hợp các điểm có thể được mô tả bằng một dòng và nếu có, dấu hiệu của nó cho chúng ta biết liệu chúng ta có mối tương quan dương hay âm. Nhưng điều này giả định rằng tọa độ của các điểm thực sự có thể diễn giải định lượng ví dụ như các phép đo.

Nếu bạn không thể làm điều đó nhưng bạn vẫn có thể sắp xếp các tọa độ, có hệ số tương quan xếp hạng : Nó đo mức độ các điểm có thể được mô tả bằng một hàm đơn điệu .

Thử thách

Đưa ra một danh sách các điểm 2d, xác định hệ số tương quan xếp hạng của chúng .

Chi tiết

  • Bạn có thể giả sử đầu vào là số nguyên dương (nhưng bạn không phải) hoặc bất kỳ giá trị "có thể sắp xếp" nào khác.
  • Các điểm có thể được lấy dưới dạng danh sách các điểm hoặc hai danh sách cho tọa độ x và y hoặc ma trận hoặc mảng 2d, v.v.
  • Đầu ra phải là một dấu phẩy động hoặc loại hợp lý, vì nó phải đại diện cho một số thực trong khoảng từ 0 đến 1.

Các định nghĩa

Xếp hạng: Đưa ra một danh sách các số X=[x(1),...,x(n)]chúng ta có thể gán một số dương rx(i)gọi là thứ hạng cho mỗi mục x(i). Chúng tôi làm như vậy bằng cách sắp xếp danh sách và gán chỉ mục x(i)trong danh sách được sắp xếp rx(i). Nếu hai hoặc nhiều hơn x(i)có cùng giá trị, thì chúng ta chỉ cần sử dụng giá trị trung bình số học của tất cả các chỉ số tương ứng làm thứ hạng. Thí dụ:

          List: [21, 10, 10, 25, 3]
Indices sorted: [4, 2, 3, 5, 1]

Con số 10xuất hiện hai lần ở đây. Trong danh sách được sắp xếp, nó sẽ chiếm các chỉ số 23. Trung bình số học của những thứ đó là 2.5thứ hạng

         Ranks: [4, 2.5, 2.5, 5, 1]

Hệ số tương quan xếp hạng : Hãy [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]là các điểm đã cho trong đó mỗi điểm x(i)y(i)là một số thực (wlog. Bạn có thể giả sử đó là một số nguyên) Với mỗi i=1,...,nchúng ta tính thứ hạng rx(i)ry(i)của x(i)y(i) tương ứng.

Hãy d(i) = rx(i)-ry(i)là sự khác biệt thứ hạng và hãy Slà tổng S = d(1)^2 + d(2)^2 + ... + d(n)^2. Sau đó, hệ số tương quan xếp hạng rho được đưa ra bởi

rho = 1 - 6 * S / (n * (n^2-1))

Thí dụ

x   y   rx              ry   d      d^2
21  15  4               5   -1      1
10  6   2&3 -> 2.5      2    0.5    0.25
10  7   2&3 -> 2.5      3   -0.5    0.25
25  11  5               4    1      1
3   5   1               1    0      0

    rho = 1 - 6 * (1+0.25+0.25+1)/(5*(5^2-1)) = 0.875   

Từ wikipedia : "Chỉ khi tất cả n cấp bậc là số nguyên riêng biệt , nó mới có thể được tính bằng công thức phổ biến"
rahnema1

Bạn muốn nói gì với điều đó?
flawr

Tôi nói rằng công thức mà bạn cung cấp là dành cho các trường hợp đặc biệt trong đó các cấp bậc là số nguyên theo wikipedia. Tuy nhiên, bạn đã sử dụng công thức cho các cấp bậc như 2.5.
rahnema1

Vâng, đó là nếu bạn đang sử dụng số nguyên ở nơi đầu tiên. Và ngay cả khi bạn đang làm như vậy, bạn vẫn sẽ có được một xấp xỉ tốt. Nhiều tác giả thậm chí sử dụng công thức của thách thức này như một định nghĩa. Hơn nữa, hãy nhớ rằng xếp hạng là không ổn định và không nhất thiết phải có ý nghĩa tác động như một hệ số tương quan thông thường. Nhưng tất cả điều này là không liên quan cho thử thách này.
flawr

Câu trả lời:


5

MATL , 33 byte

,it7#utb,&S]2XQw)]-Us6*1GntUq*/_Q

Hãy thử trực tuyến!

Giải trình

,           % Do...twice
  it        %   Input a numeric vector. Duplicate
  7#u       %   Replace each element by a unique integer label (1, 2, ...)
  t         %   Duplicate
  b         %   Bubble up: moves original numeric vector to top
  ,         %   Do...twice
    &S      %     Sort and push the indices of the sorting
  ]         %   End
            %   The above do...twice loop gives the sorted indices (as
            %   explained in the challenge text) for the current input
  2XQ       %   Compute average for entries with the same integer label
  w         %   Swap: move vector of integer labels to top
  )         %   Index. This gives the rank vector for the current input
]           % End
-           % Subtract the two results. Gives d
Us          % Square each entry, sum of vector. S
6*          % Times 6. Gives 6*S
1G          % Push first input vector again
n           % Number of entries. Gives n
t           % Duplicate 
Uq          % Square, minus 1. Gives n^2-1
*           % Times. Gives n*(n^2-1)
/           % Divide. Gives 6*S/(n*(n^2-1))
_Q          % Negate, plus 1. Gives 1-6*S/(n*(n^2-1))

4
Tôi chưa bao giờ thấy một cái gì đó tương tự như việc nghiền bàn phím mà thực sự làm một cái gì đó trước đây. +1
HyperNeutrino

5

R , 64 60 byte

function(x,y)1-6*sum((rank(x)-rank(y))^2)/((n=sum(x|1))^3-n)

Hãy thử trực tuyến!

ranktrong R là nội dung tính toán thứ hạng mong muốn; phần còn lại chỉ là toán học để làm phần còn lại của công việc.

Cảm ơn CriminallyVulgar đã lưu 4 byte

Như đã đề cập trong các ý kiến , định nghĩa đã nêu về hệ số tương quan xếp hạng không tương ứng chính xác với hệ số tương quan Spearman, nếu không, câu trả lời hợp lệ sẽ là 26 byte:

function(x,y)cor(x,y,,"s")

2
Tinh chỉnh 4 byte tuần: (n ^ 3-n) cho khung cuối cùng
CriminallyVulgar

@CriminallyVulgar cảm ơn! Đám cưới của tôi không quá lâu sau bình luận của bạn nên tôi đã không thấy nó ...
Giuseppe

3

Python 3 , 141 byte

lambda X,Y,Q=lambda U,S=sorted:[S(U).index(y)+S(U).count(y)/2+.5for y in U]:1-6*sum((i[1]-i[0])**2for i in zip(Q(X),Q(Y)))/(len(X)**3-len(X))

Điều này xác định một hàm ẩn danh lấy đầu vào là hai danh sách tương ứng với xycác giá trị. Đầu ra được trả về dưới dạng giá trị dấu phẩy động.

Hãy thử trực tuyến!


2

Toán học, 89 byte

(F[x_]:=Min@N@Mean@Position[Sort@x,#]&;1-6Tr[(F@#/@#-F@#2/@#2)^2]/((y=Length@#)(y^2-1)))&

Hãy thử trực tuyến! (để làm việc trên toán học, "Tr" được thay thế bằng "Tổng số")


0

Thật không may, có vẻ như định nghĩa về RCC trong câu hỏi không khớp chính xác với Spearman Rho - nó chỉ hoạt động trong trường hợp đầu vào số nguyên khác biệt. Xem ví dụ câu trả lời R của tôi hoặc nhận xét được liên kết trong đó.
Giuseppe

Tác giả của câu hỏi dường như cho thấy rằng điều này là tốt ở đây . Câu hỏi đã đưa ra công thức Spearman Rho như một định nghĩa vì vậy tôi sẽ coi điều này là hợp lệ mặc dù tính không chính xác về mặt toán học của nó.
nixpower
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.