Correlaciones entre variables
Índice de contenido
Dentro de un conjunto de datos, es posible que existan relaciones complejas y desconocidas entre unas variables y otras. Conocer en qué grado se relacionan las variables entre sí puede ayudar a preparar mejor los datos antes de entrenar un modelo.
Concepto de correlación
Se entiende como correlación la dependencia de una variable con respecto a otra u otras variables.
Una correlación puede ser:
- positiva, lo que significa que, cuando una variable aumenta, la otra también lo hace. Es decir, las variables cambian en la misma dirección.
- negativa, lo que significa que, cuando una variable aumenta, la otra disminuye. Es decir, las variables cambian en direcciones opuestas.
- neutral o cero, lo que significa que las variables no están relacionadas.
¿Por qué hacer un análisis de correlaciones?
Hay varias razones para llevar a cabo un análisis de correlaciones, entre las cuales destacan las siguientes:
- Algunos modelos funcionan peor si dos o más variables están muy relacionadas, es decir, si existe multicolinealidad. Por ejemplo, la regresión lineal.
- Conociendo la correlación entre las variables de entrada y la variable de salida del modelo, podemos obtener información sobre qué variables pueden ser más relevantes como entrada para el modelo.
Tipos de correlación
El tipo de correlación puede ser fácilmente conocido, como en el caso de la correlación lineal, o bien puede suceder que no tengamos ni idea de si existe alguna relación entre las variables o qué estructura podría tener esta relación en caso de existir. En función de lo que se conozca sobre la relación y sobre la distribución de las variables, hay distintos tipos de correlación que se pueden estudiar.
Correlación de Pearson
Concepto
El coeficiente de correlación de Pearson permite cuantificar la fuerza de la relación lineal entre dos variables.

Para muestras suficientemente grandes, se puede utilizar la siguiente aproximación a la distribución t de Student:

Cálculo
Se calcula como la covarianza de las dos variables dividida por el producto de la desviación estándar de cada una de las variables. Esta fórmula sugiere la necesidad de que las dos variables tengan una distribución normal o similar a la normal.
Coefficiente de correlación de Pearson = covarianza(X, Y) / (std(X) * std(Y))
El resultado es un valor entre -1 y 1:
- Valores cercanos a 1 indican una fuerte correlación positiva.
- Valores cercanos a -1 indican una fuerte correlación negativa.
- Un valor de 0 indica que no hay correlación.
Ejemplo
X = [105, 116, 103, 124, 137, 126, 112, 129, 118, 105]
y = [4, 8, 2, 7, 9, 9, 3, 10, 7, 6]
len(X)
10
import numpy as np
ro = np.cov(X,y)[0,1]/(np.multiply(np.std(X, ddof=1), np.std(y, ddof=1)
)
)
ro
0.8326749268107035
t = (ro)/np.sqrt((1-ro**2)/
(len(X)-2))
t
4.2530182872535
len(X)
10
t_teorica = 2.306
np.corrcoef(X, y)[0,1]
0.8326749268107037
Se puede calcular una matriz de las relaciones entre cada par de variables en el conjunto de datos. El resultado es una matriz simétrica llamada matriz de correlación con un valor de 1.0 a lo largo de la diagonal, ya que cada columna siempre se correlaciona perfectamente consigo misma.
Correlación de Spearman
Concepto
La correlación de Spearman cuantifica la fuerza de la relación monótona entre dos variables continuas u ordinales, que no necesariamente deben tener una distribución normal. Se calcula de la siguiente manera:

Para muestras mayores de 20 observaciones, se puede utilizar la siguiente aproximación a la distribución t de Student:

Cálculo
Al igual que en el caso de la correlación de Pearson, el resultado es un valor entre -1 y 1:
- Valores cercanos a 1 indican una fuerte correlación positiva.
- Valores cercanos a -1 indican una fuerte correlación negativa.
- Un valor de 0 indica que no hay correlación.
Ejemplo
meses_entreno = [2, 4, 5, 1, 8, 22, 6, 30]
horas_carrera = [10, 8, 9, 12, 7, 6, 7, 6]
meses_ordenados = [1, 2, 4, 5, 6, 8, 22, 30]
horas_ordenados = [6, 6, 7, 7, 8, 9, 10, 12]
#meses_orden = np.array([1, 2, 3, 4, 5, 6, 7, 8])
#horas_orden = np.array([1.5, 1.5, 3.5, 3.5, 5, 6, 7, 8])
meses_orden = np.array([2, 3, 4, 1, 6, 7, 5, 8])
horas_orden = np.array([7, 5, 6, 8, 3.5, 1.5, 3.5, 1.5])
vector_resta = abs(np.subtract(meses_orden, horas_orden))
vector_resta
array([5. , 2. , 2. , 7. , 2.5, 5.5, 1.5, 6.5])
d_cuadrado = np.multiply(vector_resta, vector_resta)
d_cuadrado
array([25. , 4. , 4. , 49. , 6.25, 30.25, 2.25, 42.25])
numerador = 6 * sum(d_cuadrado)
numerador
978.0
n = len(meses_entreno)
n
8
denominador = n*(n**2-1)
denominador
504
spearman_coef = 1-(numerador/denominador)
spearman_coef
-0.9404761904761905
np.corrcoef(meses_entreno, horas_carrera)
array([[ 1. , -0.81110711],
[-0.81110711, 1. ]])
import matplotlib.pyplot as plt
plt.scatter(meses_entreno, horas_carrera)
<matplotlib.collections.PathCollection at 0xade8c40>

from scipy import stats
stats.spearmanr(meses_entreno, horas_carrera)
SpearmanrResult(correlation=-0.9700772721497397, pvalue=6.548558831120658e-05)
