El coeficiente de correlación que encontramos en nuestra hoja de cálculo Excel con la fórmula “COEF.DE.CORREL” corresponde al coeficiente de correlación de Pearson. El presente documento es una guía para la correcta aplicación de este coeficiente de correlación.
El coeficiente de correlación de Pearson nos da una medida estandarizada de la relación lineal entre dos variables, la cual indica tanto la fuerza como la dirección de dicha relación.
✅ Lo que sí mide:
Fuerza y dirección de una relación lineal entre dos variables cuantitativas.
Su valor varía entre -1 y +1:
+1: correlación positiva perfecta (ambas variables suben juntas).
-1: correlación negativa perfecta (una sube mientras la otra baja).
0: ausencia de correlación lineal.
Consistencia lineal: Si los puntos se alinean en una forma aproximada a una recta, Pearson lo detecta.
❌ Lo que no mide:
Relaciones no lineales: Si las variables se relacionan de manera curva (por ejemplo, cuadrática o exponencial), Pearson puede ser engañosamente bajo.
Causalidad: Que dos variables estén correlacionadas no implica que una cause a la otra.
Robustez ante outliers: Valores extremos pueden distorsionar fuertemente el coeficiente.
Relación en datos categóricos u ordinales: Pearson se aplica exclusivamente a datos cuantitativos.
Coeficiente de correlación:
\[\rho_{xy}= \frac{Cov(x,y)} {\sigma_x \sigma_y}\]
Coeficiente de correlación muestral: \[r = \frac{Cov(x,y)} {s_x s_y} = \frac{\sum_{i=1}^N (x_i-\mu_x)(y_i-\mu_y)}{\sqrt{\sum_{i=1}^N (x_i-\mu_x)^2 \sum_{i=1}^N (y_i-\mu_y)^2}}= \frac{n\sum_{i=1}^N x_iy_i-\sum_{i=1}^N x_i \sum_{i=1}^Ny_i}{\sqrt{(n\sum_{i=1}^N x_i^2- (\sum_{i=1}^N x_i)^2) \times{(n\sum_{i=1}^N y_i^2-(\sum_{i=1}^N y_i)^2)}}}\]
El coeficiente de correlación puede tomar valores entre \(r=[-1,1]\), siendo el signo el indicador de la dirección y mientras más se acerque a \(|1|\) mayor fuerza:
Correlación positiva perfecta \(r=1\). Correlación positiva si \(0<r<1\). Si \(r=0\) entonces no existe relación lineal pero esto no necesariamente implica que las variables son independientes ya que pueden existir relaciones no lineales entre las dos variables. Recordemos que el coeficiente de correlación de Pearson mide relaciones lineales. Si \(-1<r<0\), existe una correlación negativa. Si \(r=-1\), existe una correlación negativa perfecta. El índice indica una dependencia total entre las dos variables llamada relación inversa: cuando una de ellas aumenta, la otra disminuye en proporción constante.
Normalidad de las variables: se entiende que la variable en cuestión debe tener una distribución simétrica, de forma que los valores cercanos a la media tienen mayor probabilidad de ocurrencia que aquellos distantes a ésta.
Homoscedasticidad: Significa que la distancia entre los residuos \(\hat\epsilon = (y_i-\hat\beta_{xy}*x_i)\) no estén en función de la variable explicativa \(x_i\). Esto se puede comprobar de manera visual mediante un diagrama de dispersión. Si los valores \(y_i\) se encuentran igualmente en ambos lados de la línea de ajuste \(\hat{y}_i=\hat\beta_{xy}*x_i\), entonces los datos son homocedásticos.
Linealidad: significa que la respuesta de una variable ante cambios en otra es lineal. Para corroborar esto, se puede examinar un diagrama de dispersión entre \(y_i\) y \(x_i\). Si la relación es lineal, y no es una curva, entonces se satisface este supuesto. Este supuesto es cuestionable ya que implica que la medida de relación entre \(y_i\) y \(x_i\) es siempre la misma, sin importar el valor de \(x_i\). Por ejemplo, si tenemos observaciones de consumo e ingresos de individuos, el coeficiente de correlación nos estaría diciendo el grado de relación entre la variable dependiente “consumo” y la independiente “ingreso”, sin considerar que esta relación no necesariamente es la misma para los individuos ricos y pobres.
Distribución continua de las variables: Significa que ambas variables pueden tomar cualquier valor dentro de un intervalo, por lo que la probabilidad de obtener cualquiera de los posibles valores se aproxima a cero. Las variables categóricas no cumplen con este supuesto, en caso de que una variable sea categórica y ordinal, entonces la mejor opción sería utilizar el coeficiente de correlación de rango de Spearman.
Variables emparejadas: Mismo número de observaciones.
Ausencia de outliers: Los datos no deben contener valores atípicos, en una distribución normal se consideran atípicos todos los valores que estén, ya sea por arriba o por abajo, de 3 desviaciones estándar \(\sigma= \pm \ \sqrt \frac{\sum_{i=1}^N (x_i-\mu)^2}{N}\) respecto a la media, es decir que un valor se considera atípico si está fuera del rango de \([\mu - 3\sigma \ , \ \mu + 3\sigma ]\).
Por ejemplo, supongamos que se desea hacer un estudio sobre la osteoporosis a través de un índice que mide la calsificación \(I_{cal}\). Los investigadores tratan de saber cuál es el grado de asociación entre este índice y variables como la edad, estatura, peso, horas de sueño, horas de ejercicio, etc. Si dentro de las observaciones tenemos índices de calsificación menores a la banda inferior para valores atípicos, es decir valores para los cuales \(I_{cal}<\mu_{I_{cal}} - 3\sigma_{I_{cal}}\), entonces se podría decir que muy probablemente estas personas tengan osteoporosis y por tanto contaminan el grado de relación que hay entre el índice de calsificación respecto a cualquier variable.
La presencia de valores atípicos puede sesgar el coeficiente de correlación. Si bien se pueden detectar las observaciones atípicas de la variable dependiente, otra posibilidad, si los datos tienen una estructura de sección cruzada (también conocido como datos de corte transversal) o combinación de cortes, es obtener los residuos \(\hat\epsilon = (y_i-\hat\rho_{xy}*x_i)\) y verificar si están fuera del rango \([\mu_\epsilon - 3\sigma_\epsilon \ , \ \mu_\epsilon + 3\sigma_\epsilon ]\), es posible eliminar la observación que se encuentre más alejada de la media y calcular nuevamente el rango y repetir el proceso hasta que no haya observaciones atípicas.
Si bien estadísticamente no hay ningún daño si los datos contienen valores atípicos, pueden sesgar significativamente el coeficiente de correlación y hacerlo inexacto. ¿Cuándo se convierte un punto de datos en un valor atípico? En general, un punto de datos que está más allá de ±3.29 desviaciones estándar de distancia, se considera un valor extremadamente atípico, aunque podemos sospechar que un valor es atípico a partir de ±2 desviaciones estándar. Los valores atípicos se pueden detectar visualmente mediante un diagrama de dispersión.
Otro aspecto importante es el número de observaciones a considerar, se recomienda por lo menos utilizar 30 observaciones. A continuación se realizan 3 ejercicios de simulaciones con diferente número de observaciones como se describe en seguida:
Comenzamos con \(n=5\):
n<-5
n_exp <- 100000
vec_cor <- rep(0,n_exp)
for (i in 1:n_exp) {
vec_cor[i] <- stats::cor(rnorm(n),rnorm(n))
}
plot(density(vec_cor),main="", ylab="Densidad")
summary(vec_cor)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.9992654 -0.4028649 0.0000169 0.0004996 0.4036109 0.9996726
Observamos que cuando tenemos un tamaño pequeño de observaciones, en este caso \(n=5\), podemos obtener coeficientes de correlación negativa y positiva que se sitúan en el rango de \([-0.9992654 , 0.9996726]\), es decir que obtenemos casos de correlación muy fuerte, en los extremos de la distribución, cuando se esperaba obtener valores cercanos a cero (no correlación). Esto se debe a que el coeficiente de correlación toma en cuenta si las variables cambian de forma sistemática, en otras palabras, estamos midiendo si ante un incremento en \(X\) aumenta o disminuye \(Y\) de forma sistemática. Cuando el tamaño de observaciones es pequeño, es más probable que nos equivoquemos al medir ya que las variables pueden aparentar estar relacionadas cuando no lo están.
A continuación, probamos incrementando el número de observaciones a \(n=30\):
n<-30
n_exp <- 100000
vec_cor <- rep(0,n_exp)
for (i in 1:n_exp) {
vec_cor[i] <- stats::cor(rnorm(n),rnorm(n))
}
plot(density(vec_cor),main="", ylab="Densidad")
summary(vec_cor)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.6886368 -0.1281717 0.0007260 0.0009171 0.1294368 0.7034102
Con \(n=30\) los coeficientes de correlación se concentran en cero y los valores más altos de correlación negativa y positiva se sitúan el rango de \([-0.6886368 , 0.7034102]\), es decir que muestra no correlación y correlaciones fuertes en los extremos de la distribución.
Ahora dejemos que \(n=100\):
n<-100
n_exp <- 100000
vec_cor <- rep(0,n_exp)
for (i in 1:n_exp) {
vec_cor[i] <- stats::cor(rnorm(n),rnorm(n))
}
plot(density(vec_cor),main="", ylab="Densidad")
summary(vec_cor)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.4279520 -0.0683013 -0.0000314 -0.0000579 0.0679489 0.4447994
Con \(n=30\) los coeficientes de correlación se concentran en cero y los valores más altos de correlación negativa y positiva se sitúan el rango de \([-0.427952 , 0.4447994]\), es decir que muestra no correlación y correlaciones moderadas en los extremos de la distribución.
Se dice que el mercado de las criptomonedas son un refugio a los mercados financieros tradicionales, de esta forma una pérdida de confianza en la economía global se podría traducir en un incremento de la demanda de criptomonedas y por tanto en un incremento en el rendimiento de estas. Si esta idea es cierta, se esperaría una correlación negativa entre los rendimientos de los mercados financieros y los de las criptomonedas. Para representar esta idea comparemos los rendimientos de ACWI, que representará a los mercados financieros tradicionales, y los comparamos contra los de BTC y ETH en representación de los mercados de las criptomonedas.
# Instalar y cargar paquetes necesarios
#install.packages(c("quantmod", "PerformanceAnalytics", "xts"))
library(quantmod)
library(PerformanceAnalytics)
library(xts)
# Definir activos
symbols <- c("ACWI", "BTC-USD", "ETH-USD")
# Descargar datos desde Yahoo Finance
getSymbols(symbols, from = "2020-01-01", auto.assign = TRUE)
## [1] "ACWI" "BTC-USD" "ETH-USD"
# Extraer precios de cierre ajustado
prices <- merge(Cl(ACWI), Cl(`BTC-USD`), Cl(`ETH-USD`))
colnames(prices) <- c("ACWI", "BTC", "ETH")
# Calcular rendimientos logarítmicos diarios
returns <- na.omit(Return.calculate(prices, method = "log"))
# Visualizar correlación
cor_matrix <- round(cor(returns), 2)
print(cor_matrix)
## ACWI BTC ETH
## ACWI 1.00 0.43 0.43
## BTC 0.43 1.00 0.86
## ETH 0.43 0.86 1.00
# Gráfico de series de rendimiento
chart.TimeSeries(returns, legend.loc = "topright", main = "Rendimientos logarítmicos diarios")
De acuerdo con el análisis que hicimos, en el periodo 01-01-2020 a 11-07-2025 obtenemos un coeficiente de correlación de 0.43 entre ACWI y BTC, y lo mismo para ACWI y ETH. Este resultado es contrario al esperado, más bien nos indica que hay una relación positiva moderada entre los mercados financieros tradicionales y las criptomonedas.
A continuación vamos a obtener coeficientes de correlación entre ACWI y BTC para periodos de 30 días, y vamos a actualizarlo cada día.
# Crear vector vacío para correlaciones
r <- rep(NA, nrow(returns) - 30)
# Crear vector de fechas correspondiente al fin de cada ventana de 30 días
fechas <- index(returns)[(30 + 1):nrow(returns)]
# Calcular correlación móvil
for (i in 1:(nrow(returns) - 30)) {
r[i] <- cor(x = returns[i:(i+29), 1], y = returns[i:(i+29), 2], method = "pearson")
}
# Combinar en un objeto xts o data.frame
cor_xts <- xts(r, order.by = fechas)
# Visualizar
plot(cor_xts, main = "Correlación móvil (30 días)", ylab = "Correlación", col = "blue")
Hemos obtenido correlaciones negativas débiles a partir del 15 de noviembre de 2023 y en lo que resta de ese año. Esto puede indicar un efecto desacoplamiento que pudo originarse por cambios estructurales, coyunturales o especulativos. A continación, se exhiben las correlaciones negativas obtenidas, no hay que perder de vista que estas correlaciones se calculan con el dato de rendimiento de ese día y los 29 valores previos, esto para obtener un tamaño mínimo de 30 datos.
# Filtrar valores negativos
cor_neg <- cor_xts[cor_xts < 0]
# Mostrar fechas y valores
#print(cor_neg)
# Visualizar como tabla
library(tibble)
tabla_negativa <- tibble(Fecha = index(cor_neg), Correlación = coredata(cor_neg))
print(tabla_negativa)
## # A tibble: 29 × 2
## Fecha Correlación[,1]
## <date> <dbl>
## 1 2021-01-06 -0.108
## 2 2021-01-07 -0.0773
## 3 2021-01-08 -0.0334
## 4 2021-01-12 -0.0253
## 5 2023-11-15 -0.169
## 6 2023-11-16 -0.119
## 7 2023-11-17 -0.120
## 8 2023-11-21 -0.115
## 9 2023-11-22 -0.0975
## 10 2023-11-28 -0.0848
## # ℹ 19 more rows
Si bien es cierto que se encontraron cuatro coeficientes de correlación negativa en enero de 2021, nos enfocaremos en las correlaciones negativas encontradas a mediados de noviembre de 2023 ya que estas persistieron durante el resto del año. A continuación, hacemos un zoom en los rendimientos de ACWI y de BTC entre septiembre y diciembre de 2023 e indicamos el 15 de noviembre de 2023 con una línea punteada negra.
# Filtrar datos entre octubre y noviembre 2023
inicio <- as.Date("2023-09-01")
fin <- as.Date("2023-12-30")
returns_nov <- returns[inicio <= index(returns) & index(returns) <= fin]
# Graficar rendimientos diarios
#install.packages("reshape2")
library(ggplot2)
library(reshape2)
# Convertir a formato largo para ggplot
df_plot <- data.frame(Date = index(returns_nov), coredata(returns_nov))
df_long <- melt(df_plot, id.vars = "Date")
# Filtrar solo la columna ACWI
df_acwi <- df_long[df_long$variable=="ACWI"|df_long$variable=="BTC",]
# Graficar ACWI VS BTC
library(ggplot2)
ggplot(df_acwi, aes(x = Date, y = value, color = variable)) +
geom_line(size = 1) +
geom_vline(xintercept = as.Date("2023-11-15"), linetype = "dashed", color = "black") +
labs(title = "Rendimiento diario: ACWI (Sep-Dic 2023)",
subtitle = "",
x = "Fecha", y = "Rendimiento logarítmico") +
theme_minimal()
Observamos que el 15 de noviembre de 2023 BTC exhibe un rendimiento que podría ser atípico y un cambio en su volatilidad, mientras que la volatilidad de ACWI disminuye. Es posible que el dato atípico esté sesgando el coeficiente de correlación, de momento vamos a continuar el análisis ignorando esta posibilidad ya que se observa un incremento en la volatilidad de BTC y una disminución de la volatilidad de ACWI.
La intención de esta publicación no es comprobar la hipótesis planteada, así que nos limitaremos a hacer una lectura rápida de estos datos sólo para dar una posible narrativa, sin que esta sea necesariamente cierta:
La disminución de la volatilidad a mediados de noviembre de 2023 se puede explicar por el anuncio de inflación de la FED del 14 de noviembre de 2023 donde la inflación de octubre quedó por debajo de lo esperado reforzando la expectativa de una pausa en el alza de tasas de la FED, generando confianza en los mercados tradicionales, provocando una estabilización en los precios de las acciones y por tanto reduciendo la volatilidad de los rendimientos.1 Esto nos indica que no había incentivos para migrar a los mercados de criptomonedas, al menos no como refugio de los mercados tradicionales.
Es posible que cada mercado haya reaccionado a estímulos propios generando el desacoplamiento observado. Otra posibilidad es que algunos inversionistas hayan decidido migrar hacia el mercado de criptomonedas en busca de mayores rendimientos, mismos que no se encontrarían en los mercados tradicionales por la disminución en la volatilidad.
La evidencia que tenemos no es suficiente para explicar qué provocó el desacoplamiento entre los rendimientos de ACWI y BTC, ni para contrastar la hipótesis sobre el mercado de criptomonedas como refugio de los mercados financieros tradicionales. Sin embargo, se ha realizado un ejercicio con el Coeficiente de Correlación de Pearson para detectar relaciones lineales para datos de rendimientos que nos proporcionó al menos una pregunta de investigación para algún entusiasta de los datos financieros.