MÉTRICAS DE CORRELACIÓN


CORRELACIÓN

El análisis de correlación tiene como objetivo estudiar el comportamiento conjunto de dos variables aleatorias \(X\) e \(Y\), es decir, el grado en que ambas varían o “cambian” conjuntamente.

EJEMPLO

A lo largo de la clase, utilizaremos el dataset penguins, que contiene datos recolectados sobre una serie de 344 pingüinos de tres especies diferentes que anidan en una colonia del Archipiélago Palmer, en la Antártida.

EJEMPLO

El dataset puede cargarse directamente de la librería seaborn.

import seaborn as sns
df = sns.load_dataset('penguins')

df.head()
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
0 Adelie Torgersen 39.1 18.7 181.0 3750.0 Male
1 Adelie Torgersen 39.5 17.4 186.0 3800.0 Female
2 Adelie Torgersen 40.3 18.0 195.0 3250.0 Female
3 Adelie Torgersen NaN NaN NaN NaN NaN
4 Adelie Torgersen 36.7 19.3 193.0 3450.0 Female

FLIPPER LENGTH y BODY MASS

Si estuviéramos particularmente interesados en el largo de la aleta (flipper_length_mm) y en la masa corporal (body_mass_g) de los pingüinos del Archipiélago Palmer, podríamos estudiar ambas variables individualmente y hacer un análisis descriptivo de la información con la que se cuenta para cada una (clase anterior).

¿Cómo podemos resumir la información sobre cada una de estas variables, individualmente?

FLIPPER LENGTH vs. BODY MASS

Pero quizás también puede interesarnos estudiar si existe algún tipo de asociación entre ambas.

El primer paso en el análisis conjunto de dos variables, antes de calcular cualquier métrica, es GRAFICAR los datos registrados de ambas medidas para todos los pingüinos del dataset.

¿Qué tipo de gráfico podemos construir para representar esa información?

GRÁFICO DE DISPERSIÓN (Scatterplot)

Un scatterplot muestra la relación entre dos variables cuantitativas. Los valores de una variable se grafican en el eje de abscisas y los de la otra, en el de las ordenadas. Cada par de observaciones viene representado en el gráfico por un punto.

sns.scatterplot(x = 'body_mass_g', y = 'flipper_length_mm', data = df)
plt.show()

GRÁFICO DE DISPERSIÓN (Scatterplot)

¿Qué tipo de información nos brinda este gráfico sobre la relación entre la longitud del pico y la masa corporal de los pingüinos?

LA COVARIANCIA (Sxy)

La covariancia es una medida estadística que brinda información acerca del grado en que dos variables varían linealmente en forma conjunta.

Suponiendo que se cuenta con un conjunto de n pares de observaciones de dos variables, \(X\) e \(Y\), se calcula de la siguiente forma:

\[S_{xy} = \frac{1}{n-1}\sum_{i=1}^{n}(x_{i} - \bar{x})(y_{i} - \bar{y})\]

LA COVARIANCIA (Sxy)

La covariancia provee información acerca de la dirección de la asociación lineal entre las dos variables.

  • Si la relación entre ambas variables es directa o positiva, Sxy > 0.

  • Si la relación entre ambas variables es inversa o negativa, Sxy < 0.

Se puede demostrar que para dos variables estadísticamente independientes Sxy = 0 (\(\sigma_{xy}\) a nivel poblacional). Sin embargo, lo opuesto no es necesariamente cierto: 2 variables pueden tener una Sxy = 0 y aún así no ser estadísticamente independientes (asociaciones no lineales).

LA COVARIANCIA (Sxy)

En nuestro ejemplo, podemos calcular la covariancia entre el largo de la aleta y la masa corporal utilizando el método cov() de la librería Pandas:

import pandas as pd

df[['body_mass_g','flipper_length_mm']].cov()
body_mass_g flipper_length_mm
body_mass_g 643131.077327 9824.416062
flipper_length_mm 9824.416062 197.731792

LIMITACIONES DE LA COVARIANCIA

  • La covariancia no tiene un rango de variación acotado, por lo que su magnitud no indica nada con respecto a la fuerza de la asociación.

  • La covariancia es sensible a las unidades de medida de las variables, por lo que puede hacerse arbitrariamente grande o pequeña si alguna de ellas es modificada.

COFICIENTE DE CORRELACIÓN DE PEARSON (r)

El coeficiente de correlación lineal de Pearson mide el grado de asociación lineal que existe entre dos variables cuantitativas continuas. Se calcula de la siguiente manera:

\[r = \frac{S_{xy}}{S_{x}S_{y}}\]

PROPIEDADES DE r

  • Su signo indica si la relación es positiva o negativa.

  • Está acotado (\(-1 \leq r \leq 1\))

  • Su magnitud es indicativa de la fuerza de la asociación lineal entre las variables: cuanto más cercano a 0, más débil es la asociación; cuanto más cercano a 1 se encuentre en valor absoluto, más fuertemente relacionadas están las variables.

  • Si \(X\) e \(Y\) son dos variables independientes, entonces r = 0 (\(\rho\), a nivel poblacional). Sin embargo, la recíproca no es cierta. r = 0 no implica necesariamente falta de asociación, sino que podría indicar falta de linealidad en la relación entre las variables.

PROPIEDADES DE r

Una regla práctica que puede emplearse como una guía para la interpretación de la intensidad de la relación es la siguiente (es un criterio arbitrario):

  • |r| < 0.5: la relación lineal entre las variables es débil.

  • 0.5 ≤ |r| < 0.8: la relación lineal entre las variables es moderada.

  • |r| ≥ 0.8: la relación lineal entre las variables es intensa.

EJEMPLOS

CÁLCULO DE r

Para calcular el r de Pearson en el ejemplo, podemos recurrir al método corr() de Pandas, que por default usa el método de Pearson (hay otros). El resultado es una matriz de correlación que incluye las variables de interés.

df[['body_mass_g','flipper_length_mm']].corr(method = 'pearson')
body_mass_g flipper_length_mm
body_mass_g 1.000 0.871
flipper_length_mm 0.871 1.000

A partir del valor obtenido, ¿cómo caracterizaríamos a la relación entre ambas variables?

PROBLEMAS DE INTERPRETACIÓN/USO DE r

Asumir que un alto valor de r implica causalidad. El hecho de que dos variables estén fuertemente correlacionadas no implica que una cause a la otra: correlación no implica causalidad.

PROBLEMAS DE INTERPRETACIÓN/USO DE r

Calcular e informar el valor de r cuando la relación entre ambas variables no es lineal. La correlación de Pearson mide fuerza de asociación lineal y no nos dice nada acerca de la intensidad de otro tipo de asociación (cuadrática, hiperbólica, cosenoidal, etc.). Por lo tanto, en estos casos calcular e informar r es inapropiado.

Por este motivo, es más que importante graficar previamente los datos para evaluar si tiene o no sentido calcular el coeficiente de correlación de Pearson.

PROBLEMAS DE INTERPRETACIÓN/USO DE r

Se ve afectado por la presencia de outliers. Un punto importante a marcar sobre el coeficiente de correlación de Pearson es que es una métrica bastante sensible a la presencia de valores atípicos en las observaciones, los cuales pueden distorsionar enormemente su valor y, en ciertos casos, conducir a conclusiones equivocadas.

CORRELACIÓN DE SPEARMAN

El coeficiente de correlación de Spearman se calcula rankeando los datos de las dos variables y luego computando el coeficiente de correlación de Pearson sobre los rangos asignados:

\[r_{s} = \frac{S_{RxRy}}{S_{Rx}S_{Ry}}\]

Esta característica hace que la correlación de Spearman sea especialmente útil para analizar datos ordinales, donde la información más importante es el orden o la clasificación de las observaciones en lugar de sus valores numéricos exactos.

PROPIEDADES DE rs

  • Varía entre -1 y 1.

  • Provee una medida de la fuerza y la dirección de asociaciones o relaciones monótonas entre dos variables cuantitativas.

PROPIEDADES DE rs

  • Como está basado en rangos, es menos sensible a la presencia de outliers que el coeficiente de correlación de Pearson.

  • Puede cuantificar o medir la fuerza de cualquier tipo de relación monótona, a diferencia del coeficiente de correlación de Pearson que sólo se emplea para relaciones lineales.

UN EJEMPLO

Supongamos que contamos con información sobre los tiempos de reacción y edad de un conjunto de 7 gamers:

Edad (años) Tiempo (ms)
14 120
20 170
25 150
30 210
35 180
45 200
60 220

UN EJEMPLO

¿Cómo luce un scatterplot de estos datos?

CÁLCULO DE rs

Para calcular el rs necesitamos tener los registros de las dos variables rankeados:

Edad (años) Tiempo (ms) Redad Rtiempo
14 120 1 1
20 170 2 3
25 150 3 2
30 210 4 6
35 180 5 4
45 200 6 5
60 220 7 7

CÁLCULO DE rs

¿Cómo luce el scatterplot de los rangos?

El rs es el coeficiente de correlación lineal de Pearson de los valores ploteados.

CÁLCULO

Afortunadamente, si queremos utilizar Pandas, la librería se encarga de realizar internamente el proceso de asignación de rangos. Lo que tenemos que hacer es setear el parámetro method = 'spearman'.

data_gamers.corr(method = 'spearman')
tiempo_ms edad_anios
tiempo_ms 1.000 0.822
edad_anios 0.822 1.000

MATRIZ DE COVARIANCIA/CORRELACIÓN

En el caso de que contemos con información sobre múltiples variables cuantitativas en el dataset, podemos construir una matriz en la que se muestren las métricas de correlación (covariancia, coeficientes de correlación de Pearson, Spearman, etc.) para todos los pares.

MATRIZ DE COVARIANCIA/CORRELACIÓN

De todas las variables con las que contamos en el dataset penguins, sólo son variables cuantitativas las siguientes:

  • bill_length_mm

  • bill_depth_mm

  • flipper_length_mm

  • body_mass_g

Seleccionaremos únicamente estas variables para construir nuestra matriz.

MATRIZ DE COVARIANCIA/CORRELACIÓN

Para construir la matriz de covariancia, utilizamos el método cov() de Pandas:

df[['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm', 'body_mass_g']].cov()
bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
bill_length_mm 29.807 -2.534 50.376 2605.592
bill_depth_mm -2.534 3.900 -16.213 -747.370
flipper_length_mm 50.376 -16.213 197.732 9824.416
body_mass_g 2605.592 -747.370 9824.416 643131.077

¿Qué información nos aporta?

MATRIZ DE COVARIANCIA/CORRELACIÓN

Para construir la matriz de correlación de Pearson, utilizamos el método corr() de Pandas:

df[['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm', 'body_mass_g']].corr()
bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
bill_length_mm 1.000 -0.235 0.656 0.595
bill_depth_mm -0.235 1.000 -0.584 -0.472
flipper_length_mm 0.656 -0.584 1.000 0.871
body_mass_g 0.595 -0.472 0.871 1.000

CORRELOGRAMA

Un correlograma es una representación gráfica que muestra las correlaciones entre todas las combinaciones posibles de variables en un conjunto de datos (es la versión gráfica de una matriz de correlación).

Podemos construirlo generando la matriz de correlación de nuestros datos y luego ploteándola con la función heatmap() de la librería seaborn. Hay algunas cuestiones impor tantes referidas a la escala de colores que las abordaremos en la próxima unidad.

CORRELOGRAMA

# Generamos la matriz de correlación
matriz = df[['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm', 'body_mass_g']].corr()

# Construimos el heatmap
sns.heatmap(matriz, annot = True)

CORRELOGRAMA

A partir del gráfico, ¿cómo podríamos caracterizar la asociación entre los distintos pares de variables?

MATRIZ DE SCATTERPLOTS