순위 상관 계수


13

일반적인 상관 계수 (2d)는 점 집합이 선으로 얼마나 잘 설명 될 수 있는지를 측정하며, 그렇다면 해당 부호는 양의 상관 관계가 있는지 여부를 나타냅니다. 그러나 이것은 점의 좌표가 실제로 측정과 같이 정량적으로 해석 될 수 있다고 가정합니다.

그렇게 할 수는 없지만 좌표를 정렬 할 수 있는 경우 순위 상관 계수 가 있습니다 . 단조 함수로 점을 얼마나 잘 설명 할 수 있는지 측정합니다 .

도전

2d 포인트의 목록이 주어지면 순위 상관 계수를 결정하십시오 .

세부

  • 입력을 양의 정수 (필수는 아님) 또는 다른 "정렬 가능한"값으로 가정 할 수 있습니다.
  • 점은 점의 목록 또는 x 및 y 좌표에 대한 두 목록 또는 행렬 또는 2d 배열 등으로 사용할 수 있습니다.
  • 출력은 0과 1 사이의 실수를 나타내므로 부동 소수점 또는 합리적인 유형이어야합니다.

정의

순위 : 숫자 목록이 주어지면 각 항목에 rank 라는 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]

순위 상관 계수는 :하자가 [(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)순위의 차이를 과하도록 SS = 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을

그걸로 무엇을 말하고 싶습니까?
flawr

귀하가 제공 한 공식은 위키 백과에 따라 순위가 정수인 특수한 경우를위한 것이라고합니다. 그러나와 같은 순위에 수식을 사용했습니다 2.5.
rahnema1 1

우선 정수를 사용하는 경우입니다. 그리고 당신이 그렇게하더라도, 당신은 여전히 ​​좋은 근사치를 얻을 것입니다. 많은 저자들이이 과제의 공식을 정의로 사용하기까지합니다. 또한 순위 가 불안정하고 반드시 일반적인 상관 계수와 같은 영향을 미칠 필요는 없습니다. 그러나이 모든 것은이 도전과 관련이 없습니다.
flawr

답변:


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)

온라인으로 사용해보십시오!

rankR은 원하는 순위를 계산하는 내장입니다. 나머지는 나머지 작업을 수행하는 수학 일뿐입니다.

4 바이트를 절약 한 CriminallyVulgar 에게 감사 합니다

언급 한 바와 같이 코멘트에 , 순위 상관 계수의 진술 정의는 유효한 대답은 26 바이트 것, 다른 스피어 만 상관 계수에 정확하게 일치하지 않습니다

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

2
Wee 4 바이트 조정 : 마지막 대괄호에 대한 (n ^ 3-n)
CriminallyVulgar

@CriminallyVulgar 감사합니다! 내 결혼식은 당신의 코멘트 후 너무 오래되지 않아서 그것을 보지 못했습니다 ...
Giuseppe

3

파이썬 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))

이는 xand y값에 해당하는 두 개의 목록으로 입력을받는 익명 함수를 정의 합니다. 출력은 부동 소수점 값으로 리턴됩니다.

온라인으로 사용해보십시오!



0

불행히도 문제의 RCC 정의가 Spearman Rho와 정확하게 일치하지 않는 것처럼 보입니다. 별개의 정수 입력의 경우에만 작동합니다. 예를 들어 내 R 답변 또는 그 안에 연결된 주석을 참조하십시오 .
Giuseppe

질문의 저자는 이것이 여기 에 좋다고 제안하는 것 같습니다 . 이 질문은 Spearman Rho 공식을 정의로 제공하므로 수학적 부정확에도 불구하고 이것이 유효하다고 생각합니다.
nixpower
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.