Una correlación para el siglo XXI

La mayoría de los científicos ha calculado alguna vez el coeficiente de correlación de Pearson para valorar el grado de asociación lineal entre dos variables. Aunque es una medida muy sencilla y útil, la correlación de Pearson no es efectiva para detectar relaciones no lineales entre las variables. Existen medidas más recientes que resuelven este problema a cambio, normalmente, de un mayor coste computacional. Por ejemplo, un artículo de la revista Science presentaba en 2011 el coeficiente de información maximal, al que llamaba la correlación del siglo XXI. En esta entrada os presento la correlación de distancias, que es el candidato más firme entre los que conozco para ser la correlación que más se use en el futuro.

La correlación de distancias

Desde que Szekely, Rizzo y Bakirov introdujeron la covarianza y la correlación de distancias en un artículo de Annals of Statistics de 2007, estas medidas han atraído una atención considerable y se han aplicado a problemas estadísticos muy diversos.

Veamos cómo se calcula la covarianza de distancias entre dos vectores de variables  X e Y a partir de una muestra de  observaciones (X_1,Y_1)\ldots, (X_n,Y_n). Tenemos que seguir los siguientes tres pasos:

  • Calculamos todas las distancias euclídeas entre pares de observaciones de cada uno de los vectores (es decir, \|X_i-X_j\| y \|Y_i-Y_j\|). Con ello, tenemos dos matrices n\times n de distancias, una para cada vector.
  • Llevamos a cabo un doble centrado de las dos matrices. Esto significa que a cada elemento le restamos las medias de su fila y de su columna, y le sumamos la media de toda la matriz.
  • Finalmente, calculamos la covarianza entre las n^2 distancias centradas.

Puede demostrarse (con cierto esfuerzo) que al aumentar el número de datos, la covarianza de distancias converge  a un valor que se anula si y solo si los vectores X e Y son independientes. (De hecho, este valor se puede escribir como cierta distancia entre la función característica \varphi_{(X,Y)} del vector conjunto (X,Y) y el producto de las funciones características de X e Y\varphi_X\varphi_Y.)

A partir de la descripción que acabamos de hacer, algunas de las ventajas de la correlación de distancias son claras:

  • Se puede calcular directamente para vectores y no solo para escalares.
  • El valor límite al que converge la correlación de distancias se anula si y solo si los vectores son independientes (si y solo si \varphi_{(X,Y)}=\varphi_X\varphi_Y).
  • Como está basada en las distancias, los vectores X e Y pueden tener dimensiones distintas. Podemos tratar de detectar dependencias entre dos grupos, uno formado por p variables, por ejemplo, y otro por q variables.
  • El hecho de estar basada en distancias implica también que no cambia si se aplica una rotación a los datos.
  •  La correlación de distancias se obtiene normalizando la covarianza de distancias de forma que al calcularla para X=Y el resultado sea igual a uno, el máximo valor posible. La normalización es análoga a la que se hace para pasar de la covarianza al coeficiente de correlación de Pearson. La versión estandarizada tampoco depende de cambios de escala de los vectores.

Implementación en R

Como hemos visto, los cálculos necesarios para obtener la correlación de distancias no son complicados (aunque se requiere una buena implementación si n es muy grande). El paquete energy de R incluye las funciones dcov y dcor para calcular la covarianza y la correlación de distancias, respectivamente.

El siguiente código genera y representa gráficamente tres conjuntos de datos muy sencillos y calcula tanto el coeficiente de correlación de Pearson como la correlación de distancias para cada uno de ellos:


library(energy) # hay que instalar el paquete previamente
set.seed(500) # para reproducir los resultados
n = 2000
sigma = 0.3
x = rnorm(n)
y1 = x + sigma*rnorm(n) # relación lineal
y2 = x^2 + sigma*rnorm(n) # relación cuadrática
y3 = rnorm(n) # independencia
# Gráfico
layout(matrix(1:3, 1))
plot(x, y1, cex=0.2, bty='l')
plot(x, y2, cex=0.2, bty='l')
plot(x, y3, cex=0.2, bty='l')
# Correlaciones de Pearson
cor(x, y1)
cor(x, y2)
cor(x, y3)
# Correlaciones de distancias
dcor(x, y1)
dcor(x, y2)
dcor(x, y3)

Los conjuntos de datos generados son los siguientes:

ejemplo1dcov

El valor del coeficiente de correlación de Pearson es 0.96 para el conjunto de la izquierda (reflejando el alto grado de asociación lineal de las dos variables), -0.09 para el del centro (a pesar de que hay una relación cuadrática evidente) y 0.01 para el de la derecha (en el que las variables son independientes). Por otra parte, los valores de la correlación de distancias son 0.94, 0.51 y 0.03, respectivamente. En este ejemplo, el coeficiente de correlación de Fisher no es capaz de distinguir entre un caso en que existe una relación no lineal muy pronunciada entre dos variables y el caso en que las variables son independientes, mientras que la correlación de distancias permite distinguir claramente ambas situaciones.

Anuncios
Esta entrada fue publicada en estadística, probabilidad y etiquetada , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s