preloader

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:

  1. 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.
  2. 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.

pearson_corr.JPG

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

pearson_t.JPG

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

python
X = [105, 116, 103, 124, 137, 126, 112, 129, 118, 105]
y = [4, 8, 2, 7, 9, 9, 3, 10, 7, 6]
python
len(X)
10
python
import numpy as np
python
ro = np.cov(X,y)[0,1]/(np.multiply(np.std(X, ddof=1), np.std(y, ddof=1)
                        )
            )
ro
0.8326749268107035
python
t = (ro)/np.sqrt((1-ro**2)/
                (len(X)-2))
t
4.2530182872535
python
len(X)
10
python
t_teorica = 2.306
python
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:

spearman_corr.JPG

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

spearman_t.JPG

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

python
meses_entreno = [2, 4, 5, 1, 8, 22, 6, 30]
horas_carrera = [10, 8, 9, 12, 7, 6, 7, 6]
python
meses_ordenados = [1, 2, 4, 5, 6, 8, 22, 30]
horas_ordenados = [6, 6, 7, 7, 8, 9, 10, 12]
python
#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])
python
vector_resta = abs(np.subtract(meses_orden, horas_orden))
vector_resta
array([5. , 2. , 2. , 7. , 2.5, 5.5, 1.5, 6.5])
python
d_cuadrado = np.multiply(vector_resta, vector_resta)
d_cuadrado
array([25.  ,  4.  ,  4.  , 49.  ,  6.25, 30.25,  2.25, 42.25])
python
numerador = 6 * sum(d_cuadrado)
numerador
978.0
python
n = len(meses_entreno)
n
8
python
denominador = n*(n**2-1)
denominador
504
python
spearman_coef = 1-(numerador/denominador)
spearman_coef
-0.9404761904761905
python
np.corrcoef(meses_entreno, horas_carrera)
array([[ 1.        , -0.81110711],
       [-0.81110711,  1.        ]])
python
import matplotlib.pyplot as plt
python
plt.scatter(meses_entreno, horas_carrera)
<matplotlib.collections.PathCollection at 0xade8c40>

png

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