Il solito coefficiente di correlazione (in 2d) misura quanto bene un insieme di punti può essere descritto da una linea e, in caso affermativo, il suo segno ci dice se abbiamo una correlazione positiva o negativa. Ma questo presuppone che le coordinate dei punti possano effettivamente essere interpretate quantitativamente, ad esempio come misurazioni.
Se non puoi farlo ma puoi comunque ordinare le coordinate, c'è il coefficiente di correlazione dei ranghi : misura quanto bene i punti possono essere descritti da una funzione monotonica .
Sfida
Dato un elenco di 2d punti, determinare il loro coefficiente di correlazione rango .
Dettagli
- Puoi assumere che l'input sia numeri interi positivi (ma non è necessario) o qualsiasi altro valore "ordinabile".
- I punti possono essere presi come un elenco di punti o due elenchi per le coordinate x e y o una matrice o un array 2d ecc.
- L'output deve essere un tipo a virgola mobile o razionale, poiché dovrebbe rappresentare un numero reale compreso tra 0 e 1.
definizioni
Rango: dato un elenco di numeri X=[x(1),...,x(n)]
, possiamo assegnare un numero positivo rx(i)
chiamato rango a ciascuna voce x(i)
. Lo facciamo ordinando l'elenco e assegnando l'indice di x(i)
nell'elenco ordinato rx(i)
. Se due o più x(i)
hanno lo stesso valore, utilizziamo semplicemente la media aritmetica di tutti gli indici corrispondenti come rango. Esempio:
List: [21, 10, 10, 25, 3]
Indices sorted: [4, 2, 3, 5, 1]
Il numero 10
appare due volte qui. Nell'elenco ordinato occuperebbe gli indici 2
e 3
. La media aritmetica di quelli è che 2.5
i ranghi lo sono
Ranks: [4, 2.5, 2.5, 5, 1]
Coefficiente di correlazione del rango : lasciate che [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]
siano i punti dati in cui ciascuno x(i)
ed y(i)
è un numero reale (wlog. Si può presumere che sia un numero intero) Per ognuno i=1,...,n
calcoliamo il rango rx(i)
e ry(i)
di x(i)
e y(i)
rispettivamente.
Sia d(i) = rx(i)-ry(i)
la differenza di rango e S
sia la somma S = d(1)^2 + d(2)^2 + ... + d(n)^2
. Quindi viene dato il coefficiente di correlazione rango rho
rho = 1 - 6 * S / (n * (n^2-1))
Esempio
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
2.5
.