Der übliche Korrelationskoeffizient (in 2d) misst, wie gut eine Menge von Punkten durch eine Linie beschrieben werden kann, und wenn ja, zeigt das Vorzeichen an, ob wir eine positive oder negative Korrelation haben. Dies setzt jedoch voraus, dass Koordinaten der Punkte tatsächlich quantitativ interpretiert werden können, beispielsweise als Messungen.
Wenn Sie das nicht können, aber trotzdem die Koordinaten ordnen können , gibt es den Rangkorrelationskoeffizienten : Er misst, wie gut die Punkte durch eine monotone Funktion beschrieben werden können.
Herausforderung
Bestimmen Sie anhand einer Liste von 2D-Punkten deren Rangkorrelationskoeffizienten .
Einzelheiten
- Sie können davon ausgehen, dass es sich bei der Eingabe um positive Ganzzahlen handelt (dies ist jedoch nicht erforderlich) oder um andere "sortierbare" Werte.
- Die Punkte können als eine Liste von Punkten oder zwei Listen für die x- und y-Koordinaten oder eine Matrix oder ein 2D-Array usw. genommen werden.
- Die Ausgabe muss ein Gleitkomma- oder ein rationaler Typ sein, da sie eine reelle Zahl zwischen 0 und 1 darstellen sollte.
Definitionen
Rang: Ausgehend von einer Liste von Zahlen können X=[x(1),...,x(n)]
wir jedem Eintrag eine positive Zahl mit dem rx(i)
Namen Rang zuweisen x(i)
. Dazu sortieren wir die Liste und weisen den Index x(i)
der sortierten Liste zu rx(i)
. Wenn zwei oder mehr x(i)
den gleichen Wert haben, verwenden wir einfach das arithmetische Mittel aller entsprechenden Indizes als Rang. Beispiel:
List: [21, 10, 10, 25, 3]
Indices sorted: [4, 2, 3, 5, 1]
Die Nummer 10
erscheint hier zweimal. In der sortierten Liste würde es die Indizes 2
und belegen 3
. Das arithmetische Mittel davon ist 2.5
so, wie die Reihen sind
Ranks: [4, 2.5, 2.5, 5, 1]
Rangkorrelationskoeffizient : Es sei [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]
die gegebene Punkte , an denen jeder x(i)
und y(i)
eine reelle Zahl für jede (oBdA Sie davon ausgehen , kann es eine ganze Zahl.) i=1,...,n
Wir berechnen Rang rx(i)
und ry(i)
von x(i)
undy(i)
jeweils.
Sei d(i) = rx(i)-ry(i)
der Rangunterschied und sei S
die Summe S = d(1)^2 + d(2)^2 + ... + d(n)^2
. Dann ist der Rangkorrelationskoeffizient rho
gegeben durch
rho = 1 - 6 * S / (n * (n^2-1))
Beispiel
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
quelle
2.5
.Antworten:
MATL , 33 Bytes
Probieren Sie es online!
Erläuterung
quelle
R ,
6460 BytesProbieren Sie es online!
rank
in R ist der eingebaute Wert, der den gewünschten Rang berechnet; der Rest ist nur die Mathematik, um den Rest der Arbeit zu erledigen.Danke an CriminallyVulgar für das Speichern von 4 Bytes
Wie in den Kommentaren erwähnt , entspricht die angegebene Definition des Rangkorrelationskoeffizienten nicht genau dem Spearman-Korrelationskoeffizienten, andernfalls wäre eine gültige Antwort 26 Byte:
quelle
Python 3 , 141 Bytes
Dies definiert eine anonyme Funktion, die Eingaben als zwei Listen entsprechend den Werten
x
undy
annimmt. Die Ausgabe wird als Gleitkommawert zurückgegeben.Probieren Sie es online!
quelle
Mathematica, 89 Bytes
Probieren Sie es online! (Um mathematisch arbeiten zu können, wird "Tr" durch "Total" ersetzt.)
quelle
Wolfram Language (Mathematica) , 18 Byte
Probieren Sie es online!
quelle