ค่าสัมประสิทธิ์สหสัมพันธ์อันดับ


13

ค่าสัมประสิทธิ์สหสัมพันธ์ปกติ(ใน 2d) วัดว่าชุดของจุดสามารถอธิบายได้ดีแค่ไหนและถ้าใช่สัญญาณของมันบอกเราว่าเรามีความสัมพันธ์เชิงบวกหรือเชิงลบ แต่นี่อนุมานว่าพิกัดของจุดสามารถแปลความหมายเชิงปริมาณเช่นการวัดได้

หากคุณไม่สามารถทำเช่นนั้นได้ แต่คุณยังสามารถสั่งพิกัดได้นั่นก็คือสัมประสิทธิ์สหสัมพันธ์อันดับ : มันจะวัดว่าจุดใดที่สามารถอธิบายคะแนนได้ด้วยฟังก์ชั่นโมโนโทน

ท้าทาย

ได้รับรายชื่อของจุด 2d การตรวจสอบของพวกเขามีค่าสัมประสิทธิ์สหสัมพันธ์อันดับ

รายละเอียด

  • คุณสามารถสมมติว่าอินพุตเป็นจำนวนเต็มบวก (แต่คุณไม่จำเป็นต้อง) หรือค่า "เรียงลำดับ" อื่น ๆ
  • คะแนนสามารถนำมาเป็นรายการของจุดหรือสองรายการสำหรับ x- และ y- พิกัดหรือเมทริกซ์หรืออาร์เรย์ 2d เป็นต้น
  • ผลลัพธ์จะต้องเป็นทศนิยมหรือประเภทเหตุผลตามที่ควรเป็นตัวแทนจำนวนจริงระหว่าง 0 และ 1

คำนิยาม

ตำแหน่ง:ได้รับรายชื่อของตัวเลขX=[x(1),...,x(n)]ที่เราสามารถกำหนดจำนวนบวกrx(i)เรียกว่าอันดับของx(i)แต่ละรายการ เราทำได้โดยการเรียงลำดับรายการและการกำหนดดัชนีของในรายการที่เรียงลำดับx(i) rx(i)หากสองคนขึ้นไปx(i)มีค่าเท่ากันเราก็แค่ใช้ค่าเฉลี่ยเลขคณิตของดัชนีที่สอดคล้องกันทั้งหมดเป็นอันดับ ตัวอย่าง:

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

หมายเลข10ปรากฏสองครั้งที่นี่ ในรายการที่เรียงลำดับก็จะครอบครองดัชนีและ2 3ค่าเฉลี่ยเลขคณิตของค่าเหล่านั้นคือ2.5อันดับ

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

Rank Correlation Coefficient : อนุญาต[(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]เป็นคะแนนที่กำหนดโดยแต่ละค่าx(i)และy(i)เป็นจำนวนจริง (wlog คุณสามารถถือว่ามันเป็นจำนวนเต็ม) สำหรับi=1,...,nเราคำนวณอันดับ rx(i)และry(i)จากx(i)และy(i)ตามลำดับ

อนุญาตd(i) = rx(i)-ry(i)เป็นความแตกต่างยศและปล่อยให้เป็นทุนS S = d(1)^2 + d(2)^2 + ... + d(n)^2จากนั้นค่าสัมประสิทธิ์สหสัมพันธ์อันดับ rhoจะถูกกำหนดโดย

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

ตัวอย่าง

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   

จากวิกิพีเดีย : "เฉพาะในกรณีที่จำนวน n ทั้งหมดนั้นเป็นจำนวนเต็มอย่างชัดเจนสามารถคำนวณได้โดยใช้สูตรยอดนิยม"
rahnema1 1

คุณต้องการพูดอะไรกับสิ่งนั้น
ข้อบกพร่อง

ฉันพูดว่าสูตรที่คุณให้ไว้สำหรับกรณีพิเศษที่อันดับนั้นเป็นจำนวนเต็มตามวิกิพีเดีย 2.5แต่คุณใช้สูตรสำหรับการจัดอันดับเช่น
rahnema1

นั่นคือถ้าคุณใช้จำนวนเต็มตั้งแต่แรก และแม้ว่าคุณจะทำเช่นนั้นคุณก็ยังจะได้รับการประมาณที่ดี ผู้เขียนหลายคนใช้สูตรของการท้าทายนี้เป็นคำนิยาม นอกจากนี้โปรดทราบว่าการจัดอันดับไม่เสถียรและไม่จำเป็นต้องมีความหมายที่กระทบเช่นเดียวกับสัมประสิทธิ์สหสัมพันธ์ปกติ แต่ทั้งหมดนี้ไม่เกี่ยวข้องกับความท้าทายนี้
ข้อบกพร่อง

คำตอบ:


5

MATL , 33 ไบต์

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

ลองออนไลน์!

คำอธิบาย

,           % 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
ฉันไม่เคยเห็นอะไรที่มีความคล้ายคลึงกับการบดแป้นพิมพ์มาก่อนเลย +1
HyperNeutrino

5

R , 64 60 ไบต์

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

ลองออนไลน์!

rankใน R คือ builtin ที่คำนวณอันดับที่ต้องการ; ส่วนที่เหลือเป็นเพียงคณิตศาสตร์เพื่อทำงานที่เหลือ

ขอบคุณCriminallyVulgarสำหรับการบันทึก 4 ไบต์

ดังที่ได้กล่าวไว้ในความคิดเห็นคำนิยามที่ระบุไว้ของสัมประสิทธิ์สหสัมพันธ์อันดับไม่ตรงกับสัมประสิทธิ์สหสัมพันธ์ Spearman อย่างแม่นยำคำตอบที่ถูกต้องจะเป็น 26 ไบต์:

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

2
Wee 4 ไบต์ tweak: (n ^ 3-n) สำหรับวงเล็บสุดท้าย
CriminallyVulgar

@CriminallyVulgar ขอบคุณ! งานแต่งงานของฉันไม่นานหลังจากความคิดเห็นของคุณดังนั้นฉันจึงไม่เห็น ...
Giuseppe

3

Python 3 , 141 ไบต์

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

ฟังก์ชันนี้กำหนดฟังก์ชันที่ไม่ระบุตัวตนซึ่งรับอินพุตเป็นสองรายการที่สอดคล้องกับxและyค่า เอาต์พุตถูกส่งคืนเป็นค่าทศนิยม

ลองออนไลน์!



0

ภาษา Wolfram (Mathematica)ขนาด 18 ไบต์

N[SpearmanRho@@#]&

ลองออนไลน์!


น่าเสียดายที่ดูเหมือนว่าคำจำกัดความของ RCC ในคำถามนั้นไม่ตรงกับ Spearman Rho อย่างแม่นยำ - มันทำงานเฉพาะในกรณีของอินพุตจำนวนเต็มที่แตกต่างกัน ดูตัวอย่างคำตอบ Rของฉันหรือความคิดเห็นที่เชื่อมโยงอยู่ในนั้น
Giuseppe

ผู้เขียนคำถามที่ดูเหมือนว่าจะแนะนำว่าเรื่องนี้เป็นเรื่องปกติที่นี่ คำถามให้สูตร Spearman Rho เป็นคำจำกัดความดังนั้นฉันจะพิจารณาสิ่งนี้ว่าถูกต้องแม้จะมีความไม่ถูกต้องทางคณิตศาสตร์
nixpower
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.