Sobre el coeficiente de correlación de Pearson, discutimos cómo se usa para medir la fuerza de la relación lineal entre dos variables (años de experiencia y salario).
No todas las relaciones entre variables son lineales y la correlación de Pearson funciona mejor cuando la relación sigue un patrón de línea recta.
Cuando la relación no es lineal pero aún se mueve consistentemente en una dirección, utilizamos el coeficiente de correlación de Spearman para capturar ese patrón.
Para comprender el coeficiente de correlación de Spearman, consideremos el conjunto de datos del mercado de pescado.
Este conjunto de datos incluye atributos físicos de cada pez, como:
Peso: el peso del pez en gramos (esta será nuestra variable objetivo) Longitud1, Longitud2, Longitud3: varias medidas de longitud (en cm) Altura: la altura del pez (en cm) Ancho: el ancho diagonal del cuerpo del pez (en cm)
Necesitamos predecir el peso del pez en función de varias medidas de largo, alto y ancho.
Este fue el mismo ejemplo que usamos para comprender las matemáticas detrás de la regresión lineal múltiple en un blog anterior, pero primero usamos solo la altura y el ancho como variables independientes para obtener las ecuaciones individuales para pendientes e intersecciones.
Aquí intentamos ajustar un modelo de regresión lineal múltiple y tenemos cinco variables independientes y una variable objetivo.
Ahora calculemos el coeficiente de correlación de Pearson entre cada variable independiente y la variable objetivo.
Código:
importar pandas como pd # Cargar el conjunto de datos del mercado de pescado df = pd.read_csv(“C:/Fish.csv”) # Eliminar la columna categórica ‘Especies’ si ‘Especies’ en df.columns: df_numeric = df.drop(columns=[‘Species’]) else: df_numeric = df.copy() # Calcular la correlación de Pearson entre cada variable independiente y el objetivo (Peso) target = ‘Peso’ pearson_corr = df_numeric.corr(method=’pearson’)[target].drop(target) # eliminar la autocorrelación pearson_corr.sort_values(ascending=False)
El coeficiente de correlación de Pearson entre peso y
Longitud3 es 0,923044 Longitud2 es 0,918618 Longitud1 es 0,915712 El ancho es 0,886507 La altura es 0,724345
Entre todas las variables, la altura tiene el coeficiente de correlación de Pearson más débil y podríamos pensar que deberíamos descartar esta variable antes de aplicar el modelo de regresión lineal múltiple.
Pero antes de eso, ¿es correcto eliminar una variable independiente basada en el coeficiente de correlación de Pearson?
No.
Primero, veamos el diagrama de dispersión entre altura y peso.
Del diagrama de dispersión podemos observar que a medida que aumenta la altura, el peso también aumenta, pero la relación no es lineal.
A alturas más pequeñas, el peso aumenta lentamente. A mayores alturas, aumenta más rápidamente.
Aquí la tendencia no es lineal pero sigue siendo monótona, porque se mueve en una dirección.
Dado que el coeficiente de correlación de Pearson supone una relación lineal (linealidad), aquí da un valor más bajo.
Aquí es donde entra en juego el coeficiente de correlación de Spearman.
Ahora calculemos el coeficiente de correlación de Spearman entre altura y peso.
Código:
importar pandas como pd desde scipy.stats importar Spearmanr # Cargar el conjunto de datos df = pd.read_csv(“C:/Fish.csv”) # Calcular el coeficiente de correlación de Spearman entre altura y peso Spearman_corr = Spearmanr(df[“Height”]df[“Weight”])[0]
print(f”Coeficiente de correlación de Spearman: {spearman_corr:.4f}”)
El coeficiente de correlación de Spearman es 0,8586, lo que indica una fuerte relación positiva entre altura y peso.
Esto significa que a medida que aumenta la altura del pez, el peso también tiende a aumentar.
Anteriormente obtuvimos un coeficiente de correlación de Pearson de 0,72 entre altura y peso, lo que subestima la relación real entre estas variables.
Si seleccionamos funciones únicamente en función de la correlación de Pearson y eliminamos la función Altura, podríamos perder una variable importante que en realidad tiene una fuerte relación con el objetivo, lo que llevaría a predicciones menos relevantes.
Aquí es donde ayuda el coeficiente de correlación de Spearman, ya que captura tendencias no lineales pero monótonas.
Al utilizar la correlación de Spearman, también podemos decidir los siguientes pasos, como aplicar transformaciones como valores logarítmicos o de retraso o considerar algoritmos como árboles de decisión o bosques aleatorios que puedan manejar relaciones tanto lineales como no lineales.
Como hemos comprendido la importancia del coeficiente de correlación de Spearman, ahora es el momento de comprender las matemáticas que hay detrás de él.
¿Cómo se calcula el coeficiente de correlación de Spearman de manera que capture la relación incluso cuando los datos no son lineales y monótonos?
Para entender esto, consideremos una muestra de 10 puntos del conjunto de datos.
Ahora, ordenamos los valores en orden ascendente en cada columna y luego asignamos rangos.
Ahora que hemos clasificado tanto la altura como el peso, no los mantenemos en el orden ordenado.
Cada valor debe volver a su lugar original en el conjunto de datos para que el rango de altura de cada pez coincida con su propio rango de peso.
Ordenamos las columnas solo para asignar rangos. Después de eso, volvemos a colocar los rangos en su orden original y luego calculamos la correlación de Spearman usando estos dos conjuntos de rangos.
Aquí, al asignar clasificaciones después de ordenar los valores en orden ascendente en la columna Peso, encontramos un empate en los rangos 5 y 6, por lo que asignamos a ambos valores la clasificación promedio de 5,5.
De manera similar, encontramos otro empate en los rangos 7, 8, 9 y 10, por lo que les asignamos a todos el rango promedio de 8,5.
Ahora calculamos el coeficiente de correlación de Spearman, que en realidad es la correlación de Pearson aplicada a los rangos.
Ya conocemos la fórmula para calcular el coeficiente de correlación de Pearson.
\[
r = \frac{\text{Cov}(X, Y)}{s_X \cdot s_Y}
= \frac{\frac{1}{n – 1} \sum_{i=1}^{n} (X_i – \bar{X})(Y_i – \bar{Y})}
{\sqrt{\frac{1}{n – 1} \sum_{i=1}^{n} (X_i – \bar{X})^2} \cdot \sqrt{\frac{1}{n – 1} \sum_{i=1}^{n} (Y_i – \bar{Y})^2}}
\]
\[
= \frac{\sum_{i=1}^{n} (X_i – \bar{X})(Y_i – \bar{Y})}
{\sqrt{\sum_{i=1}^{n} (X_i – \bar{X})^2} \cdot \sqrt{\sum_{i=1}^{n} (Y_i – \bar{Y})^2}}
\]
Ahora, la fórmula para el coeficiente de correlación de Spearman es:
\[
r_s =
\frac{
\sum_{i=1}^{n}
\underbrace{(R_{X_i} – \bar{R}_X)}_{\text{Rank deviation of } X_i}
\cdot
\underbrace{(R_{Y_i} – \bar{R}_Y)}_{\text{Rank deviation of } Y_i}
}{
\sqrt{
\sum_{i=1}^{n}
\underbrace{(R_{X_i} – \bar{R}_X)^2}_{\text{Squared rank deviations of } X}
}
\cdot
\sqrt{
\sum_{i=1}^{n}
\underbrace{(R_{Y_i} – \bar{R}_Y)^2}_{\text{Squared rank deviations of } Y}
}
}
\]
\[
\begin{aligned}
\text{Where:} \\
R_{X_i} & = \text{ rank of the } i^\text{th} \text{ value in variable } X \\
R_{Y_i} & = \text{ rank of the } i^\text{th} \text{ value in variable } Y \\
\bar{R}_X & = \text{ mean of all ranks in } X \\
\bar{R}_Y & = \text{ mean of all ranks in } Y
\end{aligned}
\]
Ahora, calculemos el coeficiente de correlación de Spearman para los datos de muestra.
\[
\textbf{Step 1: Ranks from the original data}
\]
\[
\begin{array}{c|cccccccccc}
R_{x_i} & 3 & 1 & 2 & 5 & 8 & 4 & 7 & 9 & 10 & 6 \\[2pt]
R_{y_i} y 1 y 2 y 4 y 5,5 y 8,5 y 3 y 5,5 y 8,5 y 8,5 y 8,5
\end{matriz}
\]
\[
\textbf{Step 2: Formula of Spearman’s correlation (Pearson on ranks)}
\]
\[
\rho_s =
\frac{\sum_{i=1}^{n}\bigl(R_{x_i}-\bar{R_x}\bigr)\bigl(R_{y_i}-\bar{R_y}\bigr)}
{\sqrt{\sum_{i=1}^{n}\bigl(R_{x_i}-\bar{R_x}\bigr)^2} \;
\sqrt{\sum_{i=1}^{n}\bigl(R_{y_i}-\bar{R_y}\bigr)^2}},
\qquad n = 10
\]
\[
\textbf{Step 3: Mean of rank variables}
\]
\[
\bar{R_x} = \frac{3+1+2+5+8+4+7+9+10+6}{10} = \frac{55}{10} = 5.5
\]
\[
\bar{R_y} = \frac{1+2+4+5.5+8.5+3+5.5+8.5+8.5+8.5}{10}
= \frac{55.5}{10} = 5.55
\]
\[
\textbf{Step 4: Deviations and cross-products}
\]
\[
\begin{array}{c|c|c|c}
i & R_{x_i}-\bar{R_x} & R_{y_i}-\bar{R_y} & (R_{x_i}-\bar{R_x})(R_{y_i}-\bar{R_y}) \\ \hline
1 & -2.5 & -4.55 & 11.38 \\
2 & -4.5 & -3.55 & 15.98 \\
3 & -3.5 & -1.55 & 5.43 \\
4 & -0.5 & -0.05 & 0.03 \\
5 & 2.5 & 2.95 & 7.38 \\
6 & -1.5 & -2.55 & 3.83 \\
7 & 1.5 & -0.05 & -0.08 \\
8 & 3.5 & 2.95 & 10.33 \\
9 & 4.5 & 2.95 & 13.28 \\
10 & 0.5 & 2.95 & 1.48
\end{array}
\]
\[
\sum (R_{x_i}-\bar{R_x})(R_{y_i}-\bar{R_y}) = 68.0
\]
\[
\textbf{Step 5: Sum of squares for each rank variable}
\]
\[
\sum (R_{x_i}-\bar{R_x})^2 = 82.5,
\qquad
\sum (R_{y_i}-\bar{R_y})^2 = 82.5
\]
\[
\textbf{Step 6: Substitute into the formula}
\]
\[
\rho_s
= \frac{68.0}{\sqrt{(82.5)(82.5)}}
= \frac{68.0}{82.5}
= 0.824
\]
\[
\textbf{Step 7: Interpretation}
\]
\[
\rho_s = 0.824
\]
Un valor de \( \rho_s = 0,824 \) muestra una fuerte relación monótona positiva entre altura y peso a medida que aumenta la altura, el peso también tiende a aumentar.
Así es como calculamos el coeficiente de correlación de Spearman.
También tenemos otra fórmula para calcular el coeficiente de correlación de Spearman, pero se usa sólo cuando no hay rangos empatados.
\[
\rho_s = 1 – \frac{6\sum d_i^2}{n(n^2 – 1)}
\]
dónde:
\[
\begin{aligned}
\rho_s & : \text{ Spearman correlation coefficient} \\[4pt]
d_i & : \text{ diferencia entre los rangos de cada observación, } (R_{x_i} – R_{y_i}) \\[4pt]
n & : \text{ número total de observaciones pareadas}
\end{alineado}
\]
Si hay empates, las diferencias de rango ya no representan las distancias exactas entre posiciones y, en su lugar, calculamos ‘ρ’ usando la fórmula de ‘correlación de Pearson en rangos’.
Conjunto de datos
El conjunto de datos utilizado en este blog es el conjunto de datos del mercado de pescado, que contiene mediciones de especies de peces vendidas en los mercados, incluidos atributos como peso, altura y ancho.
Está disponible públicamente en Kaggle y tiene la licencia Creative Commons Zero (dominio público CC0). Esto significa que se puede utilizar, modificar y compartir libremente para fines comerciales y no comerciales sin restricciones.
El coeficiente de correlación de Spearman nos ayuda a comprender cómo dos variables se mueven juntas cuando la relación no es perfectamente lineal.
Al convertir los datos en rangos, se muestra qué tan bien aumenta una variable a medida que aumenta la otra, capturando cualquier patrón ascendente o descendente.
Es muy útil cuando los datos tienen valores atípicos, no están distribuidos normalmente o cuando la relación es monótona pero curva.
Espero que esta publicación te haya ayudado a ver no solo cómo calcular el coeficiente de correlación de Spearman, sino también cuándo usarlo y por qué es una herramienta importante en el análisis de datos.
¡Gracias por leer!