Le coefficient de corrélation habituel (en 2d) mesure dans quelle mesure un ensemble de points peut être décrit par une droite, et si oui, son signe nous indique si nous avons une corrélation positive ou négative. Mais cela suppose que les coordonnées des points peuvent effectivement être interprétées quantitativement, par exemple comme des mesures.
Si vous ne pouvez pas le faire mais vous pouvez toujours ordonner les coordonnées, il y a le coefficient de corrélation de rang : il mesure la façon dont les points peuvent être décrits par une fonction monotone .
Défi
À partir d'une liste de 2d points, déterminez leur coefficient de corrélation de rang .
Détails
- Vous pouvez supposer que l'entrée est un entier positif (mais ce n'est pas obligatoire) ou toute autre valeur "triable".
- Les points peuvent être considérés comme une liste de points, ou deux listes pour les coordonnées x et y ou une matrice ou un tableau 2D, etc.
- La sortie doit être de type flottant ou rationnel, car elle doit représenter un nombre réel compris entre 0 et 1.
Définitions
Rang: Étant donné une liste de nombres, X=[x(1),...,x(n)]
nous pouvons attribuer un numéro positif rx(i)
appelé rang à chaque entrée x(i)
. Nous le faisons en triant la liste et en affectant l'index de x(i)
dans la liste triée rx(i)
. Si deux ou plus x(i)
ont la même valeur, alors nous utilisons simplement la moyenne arithmétique de tous les indices correspondants comme rang. Exemple:
List: [21, 10, 10, 25, 3]
Indices sorted: [4, 2, 3, 5, 1]
Le numéro 10
apparaît deux fois ici. Dans la liste triée, il occuperait les indices 2
et 3
. La moyenne arithmétique de ceux-ci est 2.5
donc les rangs sont
Ranks: [4, 2.5, 2.5, 5, 1]
Coefficient de corrélation de rang : Soit [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]
les points donnés où chacun x(i)
et y(i)
est un nombre réel (wlog. Vous pouvez supposer que c'est un entier) Pour chacun, i=1,...,n
nous calculons le rang rx(i)
et ry(i)
de x(i)
et y(i)
respectivement.
Soit d(i) = rx(i)-ry(i)
la différence de rang et S
soit la somme S = d(1)^2 + d(2)^2 + ... + d(n)^2
. Ensuite, le coefficient de corrélation de rang rho
est donné par
rho = 1 - 6 * S / (n * (n^2-1))
Exemple
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
la source
2.5
.Réponses:
MATL , 33 octets
Essayez-le en ligne!
Explication
la source
R ,
6460 octetsEssayez-le en ligne!
rank
dans R est le builtin qui calcule le rang souhaité; le reste n'est que le calcul pour faire le reste du travail.Merci à CriminallyVulgar pour avoir économisé 4 octets
Comme mentionné dans les commentaires , la définition indiquée du coefficient de corrélation de rang ne correspond pas précisément au coefficient de corrélation Spearman, sinon une réponse valide serait de 26 octets:
la source
Python 3 , 141 octets
Ceci définit une fonction anonyme qui prend l'entrée comme deux listes correspondant aux valeurs
x
ety
. La sortie est renvoyée sous forme de valeur à virgule flottante.Essayez-le en ligne!
la source
Mathematica, 89 octets
Essayez-le en ligne! (pour travailler les mathématiques, "Tr" est remplacé par "Total")
la source
Wolfram Language (Mathematica) , 18 octets
Essayez-le en ligne!
la source