El coeficiente de correlación habitual (en 2d) mide qué tan bien se puede describir un conjunto de puntos por una línea, y en caso afirmativo, su signo nos dice si tenemos una correlación positiva o negativa. Pero esto supone que las coordenadas de los puntos se pueden interpretar cuantitativamente, por ejemplo, como medidas.
Si no puede hacer eso, pero aún puede ordenar las coordenadas, existe el coeficiente de correlación de rango : mide qué tan bien los puntos pueden ser descritos por una función monotónica .
Desafío
Dada una lista de puntos 2d, determine su coeficiente de correlación de rango .
Detalles
- Puede suponer que la entrada son enteros positivos (pero no es necesario) o cualquier otro valor "ordenable".
- Los puntos se pueden tomar como una lista de puntos, o dos listas para las coordenadas X e Y o una matriz o matriz 2D, etc.
- La salida debe ser un punto flotante o de tipo racional, ya que debe representar un número real entre 0 y 1.
Definiciones
Rango: Dada una lista de números X=[x(1),...,x(n)]
, podemos asignar un número positivo rx(i)
llamado rango a cada entrada x(i)
. Lo hacemos ordenando la lista y asignando el índice de x(i)
en la lista ordenada rx(i)
. Si dos o más x(i)
tienen el mismo valor, entonces solo usamos la media aritmética de todos los índices correspondientes como rango. Ejemplo:
List: [21, 10, 10, 25, 3]
Indices sorted: [4, 2, 3, 5, 1]
El número 10
aparece dos veces aquí. En la lista ordenada ocuparía los índices 2
y 3
. La media aritmética de esos es 2.5
que los rangos son
Ranks: [4, 2.5, 2.5, 5, 1]
Coeficiente de correlación de rango : Sean [(x(1),y(1)),(x(2),y(2)),...,(x(n),y(n))]
los puntos dados donde cada x(i)
y y(i)
es un número real (wlog. Puede suponer que es un número entero) Para cada uno i=1,...,n
calculamos el rango rx(i)
y ry(i)
de x(i)
y y(i)
respectivamente.
Sea d(i) = rx(i)-ry(i)
la diferencia de rango y S
sea la suma S = d(1)^2 + d(2)^2 + ... + d(n)^2
. Entonces el coeficiente de correlación de rango rho
viene dado por
rho = 1 - 6 * S / (n * (n^2-1))
Ejemplo
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
fuente
2.5
.Respuestas:
MATL , 33 bytes
Pruébalo en línea!
Explicación
fuente
R ,
6460 bytesPruébalo en línea!
rank
en R es el incorporado que calcula el rango deseado; el resto es solo la matemática para hacer el resto del trabajo.Gracias a CriminallyVulgar por guardar 4 bytes
Como se mencionó en los comentarios , la definición establecida del coeficiente de correlación de rango no corresponde precisamente al coeficiente de correlación de Spearman, de lo contrario, una respuesta válida sería 26 bytes:
fuente
Python 3 , 141 bytes
Esto define una función anónima que toma la entrada como dos listas correspondientes a los valores
x
yy
. La salida se devuelve como un valor de punto flotante.Pruébalo en línea!
fuente
Mathematica, 89 bytes
Pruébalo en línea! (para trabajar en matemáticas, "Tr" se reemplaza por "Total")
fuente
Wolfram Language (Mathematica) , 18 bytes
Pruébalo en línea!
fuente