O coeficiente de correlação usual (em 2d) mede quão bem um conjunto de pontos pode ser descrito por uma linha e, se sim, seu sinal nos diz se temos uma correlação positiva ou negativa. Mas isso pressupõe que as coordenadas dos pontos possam realmente ser interpretadas quantitativamente, por exemplo, como medidas.
Se você não pode fazer isso, mas ainda pode ordenar as coordenadas, existe o coeficiente de correlação de classificação : Ele mede quão bem os pontos podem ser descritos por uma função monotônica .
Desafio
Dada uma lista de pontos 2d, determine seu coeficiente de correlação de classificação .
Detalhes
- Você pode assumir que a entrada seja um número inteiro positivo (mas não precisa) ou qualquer outro valor "classificável".
- Os pontos podem ser tomados como uma lista de pontos, ou duas listas para as coordenadas x e y ou uma matriz ou matriz 2D, etc.
- A saída deve ser um ponto flutuante ou tipo racional, pois deve representar um número real entre 0 e 1.
Definições
Classificação: dada uma lista de números X=[x(1),...,x(n)]
, podemos atribuir um número positivo rx(i)
chamado classificação a cada entrada x(i)
. Fazemos isso classificando a lista e atribuindo o índice x(i)
na lista classificada rx(i)
. Se dois ou mais x(i)
tiverem o mesmo valor, usamos apenas a média aritmética de todos os índices correspondentes como classificação. Exemplo:
List: [21, 10, 10, 25, 3]
Indices sorted: [4, 2, 3, 5, 1]
O número 10
aparece duas vezes aqui. Na lista ordenada, ocuparia os índices 2
e 3
. A média aritmética desses é 2.5
que as fileiras são
Ranks: [4, 2.5, 2.5, 5, 1]
Coeficiente de correlação de classificação : [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]
sejam os pontos dados em que cada um x(i)
e y(i)
é um número real (wlog. Você pode assumir que é um número inteiro). Para cada um i=1,...,n
, calculamos a classificação rx(i)
e ry(i)
de x(i)
e, y(i)
respectivamente.
Let d(i) = rx(i)-ry(i)
Ser a diferença de classificação e Let S
Ser a soma S = d(1)^2 + d(2)^2 + ... + d(n)^2
. Então o coeficiente de correlação de classificação rho
é dado por
rho = 1 - 6 * S / (n * (n^2-1))
Exemplo
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
fonte
2.5
.Respostas:
MATL , 33 bytes
Experimente online!
Explicação
fonte
R ,
64bytes 60Experimente online!
rank
em R é o valor interno que calcula a classificação desejada; o resto é apenas a matemática para fazer o resto do trabalho.Obrigado a CriminallyVulgar por salvar 4 bytes
Como mencionado nos comentários , a definição declarada de coeficiente de correlação de classificação não corresponde exatamente ao coeficiente de correlação de Spearman; caso contrário, uma resposta válida seria 26 bytes:
fonte
Python 3 , 141 bytes
Isso define uma função anônima que recebe entrada como duas listas correspondentes aos valores
x
ey
. A saída é retornada como um valor de ponto flutuante.Experimente online!
fonte
Mathematica, 89 bytes
Experimente online! (para trabalhar em matemática, "Tr" é substituído por "Total")
fonte
Wolfram Language (Mathematica) , 18 bytes
Experimente online!
fonte