R
Tutorial R: Correlación en R
Aprende a calcular e interpretar coeficientes de correlación en R con Pearson, Spearman y Kendall para análisis estadístico riguroso.
Aprende R y certifícateCoeficientes de Pearson, Spearman y Kendall
La correlación es una medida estadística que nos permite cuantificar la relación entre dos variables numéricas. En R disponemos de diferentes coeficientes de correlación, cada uno con sus propias características y supuestos. Estos coeficientes nos ayudan a determinar si existe una relación entre variables y cuál es su fuerza y dirección.
Coeficiente de correlación de Pearson
El coeficiente de correlación de Pearson (r) mide la fuerza y dirección de la relación lineal entre dos variables continuas. Sus valores oscilan entre -1 y 1:
- r = 1: correlación positiva perfecta
- r = 0: no existe correlación lineal
- r = -1: correlación negativa perfecta
En R, podemos calcular este coeficiente utilizando la función cor()
:
# Creamos dos vectores de datos
altura <- c(165, 170, 168, 182, 175, 173, 165, 190, 188, 172)
peso <- c(60, 65, 63, 80, 73, 72, 61, 83, 82, 70)
# Calculamos la correlación de Pearson
cor(altura, peso, method = "pearson")
Este código nos devolverá un valor cercano a 0.97, indicando una correlación positiva fuerte entre altura y peso.
El coeficiente de Pearson asume que:
- Las variables tienen una relación lineal
- Los datos siguen una distribución normal
- No hay valores atípicos significativos
Para verificar si la correlación es estadísticamente significativa, podemos usar la función cor.test()
:
# Test de significancia para la correlación de Pearson
resultado <- cor.test(altura, peso, method = "pearson")
resultado
Este test nos proporciona el valor p, el intervalo de confianza y el coeficiente de correlación.
Coeficiente de correlación de Spearman
Cuando nuestros datos no cumplen los supuestos de normalidad o la relación entre variables no es lineal, podemos utilizar el coeficiente de Spearman (rho). Este coeficiente:
- Mide relaciones monótonas (no necesariamente lineales)
- Se basa en los rangos de los datos, no en sus valores exactos
- Es más robusto frente a valores atípicos
Para calcularlo en R:
# Datos con relación no lineal
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
y <- c(1, 4, 9, 16, 25, 36, 49, 64, 81, 100) # Relación cuadrática
# Correlación de Pearson (detectará relación pero no perfecta)
cor(x, y, method = "pearson")
# Correlación de Spearman (detectará relación perfecta)
cor(x, y, method = "spearman")
En este ejemplo, Spearman dará un valor de 1, indicando una correlación perfecta, mientras que Pearson dará un valor menor porque la relación no es lineal.
Para probar la significancia estadística:
# Test de significancia para la correlación de Spearman
cor.test(x, y, method = "spearman")
Coeficiente de correlación de Kendall
El coeficiente tau de Kendall es otra alternativa no paramétrica que:
- Se basa en la concordancia de pares de observaciones
- Es más robusto que Spearman para muestras pequeñas
- Es menos sensible a errores y discrepancias en los datos
Para calcularlo:
# Datos ordinales (por ejemplo, calificaciones)
calificacion_profesor1 <- c(5, 4, 3, 2, 1, 3, 4, 5, 2, 3)
calificacion_profesor2 <- c(4, 5, 3, 1, 2, 3, 5, 4, 2, 2)
# Correlación de Kendall
cor(calificacion_profesor1, calificacion_profesor2, method = "kendall")
El test de significancia se realiza de manera similar:
# Test de significancia para la correlación de Kendall
cor.test(calificacion_profesor1, calificacion_profesor2, method = "kendall")
Comparación de los tres coeficientes
Podemos comparar los tres coeficientes utilizando un mismo conjunto de datos:
# Creamos un conjunto de datos
set.seed(123) # Para reproducibilidad
x <- rnorm(30)
y <- x + rnorm(30, sd = 0.5) # y está relacionado con x más algo de ruido
# Calculamos los tres coeficientes
pearson <- cor(x, y, method = "pearson")
spearman <- cor(x, y, method = "spearman")
kendall <- cor(x, y, method = "kendall")
# Creamos un data frame para mostrar los resultados
resultados <- data.frame(
Coeficiente = c("Pearson", "Spearman", "Kendall"),
Valor = c(pearson, spearman, kendall)
)
print(resultados)
¿Cuál elegir?
La elección del coeficiente depende de las características de nuestros datos:
- Pearson: cuando tenemos variables continuas con relación lineal y distribución normal.
- Spearman: cuando los datos no siguen una distribución normal o la relación es monótona pero no necesariamente lineal.
- Kendall: para muestras pequeñas, datos ordinales o cuando hay valores atípicos.
Un enfoque práctico es calcular los tres coeficientes y observar si hay diferencias significativas entre ellos:
# Función para calcular los tres coeficientes
calcular_correlaciones <- function(x, y) {
pearson <- cor(x, y, method = "pearson")
spearman <- cor(x, y, method = "spearman")
kendall <- cor(x, y, method = "kendall")
return(c(Pearson = pearson, Spearman = spearman, Kendall = kendall))
}
# Ejemplo con datos normales
x1 <- rnorm(50)
y1 <- 2*x1 + rnorm(50, sd = 0.5)
calcular_correlaciones(x1, y1)
# Ejemplo con datos no normales (exponenciales)
x2 <- rexp(50)
y2 <- 2*x2 + rexp(50)
calcular_correlaciones(x2, y2)
Si los tres coeficientes son similares, generalmente indica que los datos cumplen con los supuestos de Pearson. Si hay diferencias importantes, es recomendable utilizar Spearman o Kendall.
Ejemplo práctico con datos reales
Veamos un ejemplo utilizando el conjunto de datos mtcars
incluido en R:
# Exploramos la correlación entre el peso del coche y el consumo de combustible
data(mtcars)
# Visualizamos la relación
plot(mtcars$wt, mtcars$mpg,
main = "Relación entre peso y consumo",
xlab = "Peso (1000 lbs)",
ylab = "Millas por galón",
pch = 19)
# Calculamos los tres coeficientes
cor_pearson <- cor(mtcars$wt, mtcars$mpg, method = "pearson")
cor_spearman <- cor(mtcars$wt, mtcars$mpg, method = "spearman")
cor_kendall <- cor(mtcars$wt, mtcars$mpg, method = "kendall")
# Mostramos los resultados
cat("Correlación de Pearson:", round(cor_pearson, 3), "\n")
cat("Correlación de Spearman:", round(cor_spearman, 3), "\n")
cat("Correlación de Kendall:", round(cor_kendall, 3), "\n")
En este ejemplo, observaremos una correlación negativa entre el peso del coche y su eficiencia de combustible (millas por galón), lo que tiene sentido: coches más pesados tienden a consumir más combustible.
Matrices de correlación y visualización
Cuando trabajamos con múltiples variables en un análisis estadístico, calcular correlaciones por pares puede volverse tedioso. Las matrices de correlación nos permiten visualizar y analizar las relaciones entre todas las variables numéricas de un conjunto de datos de forma simultánea.
Creación de matrices de correlación
En R, podemos generar matrices de correlación fácilmente utilizando la función cor()
aplicada a un data frame o matriz que contenga variables numéricas:
# Cargamos un conjunto de datos de ejemplo
data(mtcars)
# Creamos una matriz de correlación con todas las variables numéricas
matriz_correlacion <- cor(mtcars)
# Visualizamos las primeras filas y columnas
head(matriz_correlacion[, 1:5])
Esta matriz muestra los coeficientes de correlación entre cada par de variables. Por defecto, R utiliza el método de Pearson, pero podemos especificar otros métodos:
# Matriz de correlación usando Spearman
matriz_spearman <- cor(mtcars, method = "spearman")
# Matriz de correlación usando Kendall
matriz_kendall <- cor(mtcars, method = "kendall")
Visualización básica de matrices de correlación
Una matriz de correlación puede ser difícil de interpretar en formato numérico. R ofrece varias opciones para visualizarla:
# Visualización básica con la función image()
image(matriz_correlacion,
main = "Matriz de correlación",
axes = FALSE)
axis(1, at = seq(0, 1, length.out = ncol(mtcars)), labels = colnames(mtcars), las = 2)
axis(2, at = seq(0, 1, length.out = ncol(mtcars)), labels = colnames(mtcars), las = 2)
Sin embargo, esta visualización básica tiene limitaciones. Para representaciones más informativas, podemos utilizar paquetes especializados.
Visualización avanzada con corrplot
El paquete corrplot ofrece opciones más sofisticadas para visualizar matrices de correlación:
# Instalamos el paquete si no está disponible
if (!require(corrplot)) install.packages("corrplot")
library(corrplot)
# Visualización básica con corrplot
corrplot(matriz_correlacion)
Este paquete ofrece múltiples métodos de visualización:
# Diferentes métodos de visualización
corrplot(matriz_correlacion, method = "circle") # Círculos (predeterminado)
corrplot(matriz_correlacion, method = "color") # Cuadrados coloreados
corrplot(matriz_correlacion, method = "pie") # Gráficos de sectores
corrplot(matriz_correlacion, method = "number") # Valores numéricos
También podemos personalizar los colores y ordenar las variables según su similitud:
# Personalización de colores y ordenamiento
corrplot(matriz_correlacion,
method = "color",
type = "upper", # Solo muestra la mitad superior
order = "hclust", # Ordena variables por similitud
addCoef.col = "black", # Añade coeficientes numéricos
tl.col = "black", # Color del texto de las etiquetas
tl.srt = 45, # Rotación del texto
diag = FALSE) # No muestra la diagonal
Visualización con ggplot2 y GGally
Para quienes prefieren el sistema ggplot2, el paquete GGally proporciona funciones útiles:
# Instalamos los paquetes si no están disponibles
if (!require(ggplot2)) install.packages("ggplot2")
if (!require(GGally)) install.packages("GGally")
library(ggplot2)
library(GGally)
# Creamos una matriz de correlación visual
ggcorr(mtcars,
method = c("everything", "pearson"),
label = TRUE,
label_size = 3,
color = "grey50")
La función ggpairs()
va más allá y crea una matriz de gráficos que incluye:
- Histogramas de cada variable en la diagonal
- Gráficos de dispersión entre pares de variables
- Coeficientes de correlación
# Seleccionamos algunas variables para mayor claridad
mtcars_subset <- mtcars[, c("mpg", "disp", "hp", "wt", "qsec")]
# Creamos una matriz de gráficos
ggpairs(mtcars_subset)
Matrices de correlación con significancia estadística
Podemos combinar la visualización con pruebas de significancia estadística:
# Función para calcular p-valores de correlaciones
cor_pmat <- function(x) {
mat <- matrix(NA, ncol(x), ncol(x))
colnames(mat) <- rownames(mat) <- colnames(x)
for(i in 1:(ncol(x)-1)) {
for(j in (i+1):ncol(x)) {
test <- cor.test(x[,i], x[,j])
mat[i,j] <- mat[j,i] <- test$p.value
}
}
return(mat)
}
# Calculamos la matriz de p-valores
p_valores <- cor_pmat(mtcars)
# Visualizamos correlaciones con significancia
corrplot(matriz_correlacion,
p.mat = p_valores, # Matriz de p-valores
sig.level = 0.05, # Nivel de significancia
insig = "blank") # Oculta correlaciones no significativas
Mapas de calor (heatmaps)
Los mapas de calor son otra forma efectiva de visualizar matrices de correlación:
# Usando la función heatmap base de R
heatmap(matriz_correlacion,
Rowv = NA, Colv = NA, # Sin reordenar filas/columnas
col = colorRampPalette(c("blue", "white", "red"))(100),
scale = "none",
margins = c(10, 10))
Para una visualización más refinada, podemos usar el paquete pheatmap:
# Instalamos el paquete si no está disponible
if (!require(pheatmap)) install.packages("pheatmap")
library(pheatmap)
# Creamos un mapa de calor mejorado
pheatmap(matriz_correlacion,
color = colorRampPalette(c("#6D9EC1", "white", "#E46726"))(100),
display_numbers = TRUE, # Muestra los valores numéricos
number_color = "black",
fontsize_number = 7,
angle_col = 45)
Filtrado de matrices de correlación
En conjuntos de datos con muchas variables, puede ser útil filtrar las correlaciones para centrarnos en las más relevantes:
# Función para filtrar correlaciones por umbral
filtrar_correlacion <- function(matriz_cor, umbral = 0.7) {
# Convertimos a data frame para facilitar el filtrado
cor_df <- as.data.frame(as.table(matriz_cor))
names(cor_df) <- c("Variable1", "Variable2", "Correlacion")
# Filtramos correlaciones por encima del umbral (en valor absoluto)
# y eliminamos la diagonal (correlación de una variable consigo misma)
cor_df_filtrada <- subset(cor_df,
abs(Correlacion) > umbral &
Variable1 != Variable2)
# Ordenamos por valor absoluto de correlación
cor_df_filtrada <- cor_df_filtrada[order(-abs(cor_df_filtrada$Correlacion)),]
return(cor_df_filtrada)
}
# Aplicamos el filtro
correlaciones_altas <- filtrar_correlacion(matriz_correlacion, 0.8)
print(correlaciones_altas)
Visualización interactiva
Para análisis exploratorios, las visualizaciones interactivas pueden ser muy útiles:
# Instalamos el paquete si no está disponible
if (!require(plotly)) install.packages("plotly")
library(plotly)
# Convertimos la matriz de correlación a formato largo
cor_long <- as.data.frame(as.table(matriz_correlacion))
names(cor_long) <- c("Var1", "Var2", "Correlacion")
# Creamos un mapa de calor interactivo
plot_ly(x = cor_long$Var1,
y = cor_long$Var2,
z = cor_long$Correlacion,
type = "heatmap",
colorscale = list(c(0, "blue"), c(0.5, "white"), c(1, "red"))) %>%
layout(title = "Matriz de correlación interactiva")
Matrices de correlación para subconjuntos de datos
A menudo es útil examinar cómo varían las correlaciones entre diferentes grupos de datos:
# Dividimos los datos por número de cilindros
mtcars_4cyl <- subset(mtcars, cyl == 4)
mtcars_6cyl <- subset(mtcars, cyl == 6)
mtcars_8cyl <- subset(mtcars, cyl == 8)
# Calculamos matrices de correlación para cada grupo
cor_4cyl <- cor(mtcars_4cyl[, c("mpg", "disp", "hp", "wt")])
cor_8cyl <- cor(mtcars_8cyl[, c("mpg", "disp", "hp", "wt")])
# Visualizamos las diferencias
par(mfrow = c(1, 2))
corrplot(cor_4cyl, method = "color", title = "Coches de 4 cilindros")
corrplot(cor_8cyl, method = "color", title = "Coches de 8 cilindros")
Las matrices de correlación son herramientas poderosas para el análisis exploratorio de datos, permitiéndonos identificar rápidamente patrones y relaciones entre múltiples variables. La visualización adecuada de estas matrices facilita enormemente la interpretación de resultados y la comunicación de hallazgos estadísticos.
Interpretación y significancia estadística
La correlación nos proporciona información valiosa sobre la relación entre variables, pero saber cómo interpretar correctamente estos valores y determinar su significancia estadística es fundamental para extraer conclusiones válidas de nuestros análisis.
Interpretación de los coeficientes de correlación
Los coeficientes de correlación (Pearson, Spearman o Kendall) oscilan entre -1 y 1, donde:
- Valores positivos indican que las variables aumentan o disminuyen conjuntamente
- Valores negativos indican que cuando una variable aumenta, la otra disminuye
- Valores cercanos a 0 indican poca o ninguna relación lineal
Una guía general para interpretar la fuerza de la correlación es:
- 0.00 - 0.19: correlación muy débil
- 0.20 - 0.39: correlación débil
- 0.40 - 0.59: correlación moderada
- 0.60 - 0.79: correlación fuerte
- 0.80 - 1.00: correlación muy fuerte
Veamos un ejemplo práctico:
# Creamos datos con diferentes niveles de correlación
set.seed(123)
x <- rnorm(100)
# Correlaciones de diferentes intensidades
y_fuerte <- 0.8*x + rnorm(100, sd=0.4) # Correlación fuerte
y_moderada <- 0.5*x + rnorm(100, sd=0.7) # Correlación moderada
y_debil <- 0.2*x + rnorm(100, sd=0.9) # Correlación débil
# Calculamos las correlaciones
cor_fuerte <- cor(x, y_fuerte)
cor_moderada <- cor(x, y_moderada)
cor_debil <- cor(x, y_debil)
# Mostramos los resultados
resultados <- data.frame(
Intensidad = c("Fuerte", "Moderada", "Débil"),
Correlación = round(c(cor_fuerte, cor_moderada, cor_debil), 2)
)
print(resultados)
Significancia estadística de la correlación
La significancia estadística nos ayuda a determinar si la correlación observada refleja una relación real o podría ser resultado del azar. En R, utilizamos la función cor.test()
para evaluar esta significancia:
# Evaluamos la significancia de una correlación
resultado_test <- cor.test(x, y_moderada)
print(resultado_test)
Los elementos clave a interpretar en el resultado son:
- Valor p (p-value): indica la probabilidad de observar una correlación igual o más extrema si no existiera relación real entre las variables.
- Intervalo de confianza: rango donde se encuentra el verdadero valor de correlación con cierta probabilidad (generalmente 95%).
- Estadístico t: valor que se utiliza para calcular el valor p.
Si el valor p es menor que el nivel de significancia (típicamente 0.05), rechazamos la hipótesis nula de que no hay correlación.
Interpretación visual de correlaciones
Las visualizaciones nos ayudan a interpretar mejor las correlaciones:
# Creamos un gráfico para visualizar diferentes correlaciones
par(mfrow=c(1,3)) # Dividimos el área de gráfico en 3 columnas
# Correlación fuerte
plot(x, y_fuerte, main=paste("Correlación fuerte:", round(cor_fuerte, 2)),
xlab="Variable X", ylab="Variable Y", pch=19)
abline(lm(y_fuerte ~ x), col="red", lwd=2)
# Correlación moderada
plot(x, y_moderada, main=paste("Correlación moderada:", round(cor_moderada, 2)),
xlab="Variable X", ylab="Variable Y", pch=19)
abline(lm(y_moderada ~ x), col="red", lwd=2)
# Correlación débil
plot(x, y_debil, main=paste("Correlación débil:", round(cor_debil, 2)),
xlab="Variable X", ylab="Variable Y", pch=19)
abline(lm(y_debil ~ x), col="red", lwd=2)
par(mfrow=c(1,1)) # Restauramos la configuración original
Tamaño de la muestra y significancia
El tamaño de la muestra afecta directamente la significancia estadística. Con muestras grandes, incluso correlaciones pequeñas pueden ser estadísticamente significativas:
# Comparamos la significancia con diferentes tamaños de muestra
set.seed(123)
# Función para crear datos con correlación específica
generar_datos_cor <- function(n, cor_objetivo) {
x <- rnorm(n)
# Calculamos el factor para lograr la correlación deseada
factor <- cor_objetivo / sqrt(1 - cor_objetivo^2)
y <- factor * x + rnorm(n)
return(list(x=x, y=y))
}
# Generamos datos con la misma correlación pero diferentes tamaños
datos_pequenos <- generar_datos_cor(20, 0.3)
datos_medianos <- generar_datos_cor(100, 0.3)
datos_grandes <- generar_datos_cor(500, 0.3)
# Realizamos pruebas de correlación
test_pequeno <- cor.test(datos_pequenos$x, datos_pequenos$y)
test_mediano <- cor.test(datos_medianos$x, datos_medianos$y)
test_grande <- cor.test(datos_grandes$x, datos_grandes$y)
# Mostramos los resultados
resultados_tamano <- data.frame(
Muestra = c("Pequeña (n=20)", "Mediana (n=100)", "Grande (n=500)"),
Correlación = c(cor(datos_pequenos$x, datos_pequenos$y),
cor(datos_medianos$x, datos_medianos$y),
cor(datos_grandes$x, datos_grandes$y)),
Valor_p = c(test_pequeno$p.value, test_mediano$p.value, test_grande$p.value),
Significativo = c(test_pequeno$p.value < 0.05,
test_mediano$p.value < 0.05,
test_grande$p.value < 0.05)
)
print(round(resultados_tamano, 4))
Correlación no implica causalidad
Un aspecto crucial al interpretar correlaciones es recordar que la correlación no implica causalidad. Dos variables pueden estar correlacionadas por diversas razones:
- Relación causal directa: A causa B
- Relación causal inversa: B causa A
- Causa común: C causa tanto A como B
- Relación indirecta: A causa C que causa B
- Coincidencia: correlación espuria sin relación real
Veamos un ejemplo clásico de correlación espuria:
# Ejemplo de correlación espuria
# Consumo de helados y ahogamientos (ambos aumentan en verano)
meses <- 1:12
temperatura <- c(5, 7, 10, 15, 20, 25, 28, 27, 22, 15, 10, 6) # Temperatura media
ventas_helado <- temperatura*2 + rnorm(12, sd=3) # Ventas de helado
ahogamientos <- temperatura*0.8 + rnorm(12, sd=2) # Casos de ahogamiento
# Calculamos la correlación
cor_helados_ahogamientos <- cor(ventas_helado, ahogamientos)
# Visualizamos
plot(ventas_helado, ahogamientos,
main=paste("Correlación:", round(cor_helados_ahogamientos, 2)),
xlab="Ventas de helado", ylab="Casos de ahogamiento", pch=19)
abline(lm(ahogamientos ~ ventas_helado), col="red", lwd=2)
# Añadimos la temperatura como variable de control
modelo <- lm(ahogamientos ~ ventas_helado + temperatura)
summary(modelo)
Correlación parcial
La correlación parcial nos permite examinar la relación entre dos variables mientras controlamos el efecto de una o más variables adicionales:
# Instalamos el paquete si no está disponible
if (!require(ppcor)) install.packages("ppcor")
library(ppcor)
# Creamos un data frame con nuestros datos
datos_helados <- data.frame(
Temperatura = temperatura,
Ventas_helado = ventas_helado,
Ahogamientos = ahogamientos
)
# Calculamos correlaciones parciales
cor_parcial <- pcor(datos_helados)
print(cor_parcial)
Interpretación de correlaciones en datos reales
Apliquemos estos conceptos a un conjunto de datos real:
# Cargamos datos de iris
data(iris)
# Seleccionamos solo variables numéricas
iris_num <- iris[, 1:4]
# Calculamos la matriz de correlación
cor_iris <- cor(iris_num)
print(round(cor_iris, 2))
# Evaluamos la significancia de cada correlación
cor_tests <- function(df) {
n <- ncol(df)
p_matrix <- matrix(NA, n, n)
for(i in 1:(n-1)) {
for(j in (i+1):n) {
test <- cor.test(df[,i], df[,j])
# Guardamos el valor p en ambas posiciones de la matriz
p_matrix[i,j] <- p_matrix[j,i] <- test$p.value
}
}
colnames(p_matrix) <- rownames(p_matrix) <- colnames(df)
return(p_matrix)
}
p_valores_iris <- cor_tests(iris_num)
print(round(p_valores_iris, 4))
# Visualizamos correlaciones significativas
library(corrplot)
corrplot(cor_iris,
p.mat = p_valores_iris,
sig.level = 0.05,
insig = "blank",
method = "circle",
type = "upper",
addCoef.col = "black",
number.cex = 0.7,
tl.col = "black",
tl.srt = 45,
diag = FALSE)
Interpretación por especies
Las correlaciones pueden variar entre diferentes grupos. Veamos cómo difieren las correlaciones entre especies de iris:
# Dividimos por especie
setosa <- subset(iris, Species == "setosa")[, 1:4]
versicolor <- subset(iris, Species == "versicolor")[, 1:4]
virginica <- subset(iris, Species == "virginica")[, 1:4]
# Calculamos correlaciones por especie
cor_setosa <- cor(setosa)
cor_versicolor <- cor(versicolor)
cor_virginica <- cor(virginica)
# Visualizamos las diferencias
par(mfrow=c(1,3))
corrplot(cor_setosa, method="color", title="Setosa")
corrplot(cor_versicolor, method="color", title="Versicolor")
corrplot(cor_virginica, method="color", title="Virginica")
par(mfrow=c(1,1))
Consideraciones prácticas para la interpretación
Al interpretar correlaciones, debemos considerar:
- Linealidad: Los coeficientes de Pearson solo miden relaciones lineales
- Valores atípicos: Pueden distorsionar significativamente los resultados
- Restricción de rango: Limitar el rango de valores puede afectar la correlación
- Fiabilidad de las medidas: Errores de medición reducen la correlación observada
# Ejemplo de cómo los valores atípicos afectan la correlación
set.seed(123)
x_normal <- rnorm(30)
y_normal <- 0.7*x_normal + rnorm(30, sd=0.5)
# Añadimos un valor atípico
x_outlier <- c(x_normal, 5)
y_outlier <- c(y_normal, -5)
# Calculamos correlaciones
cor_normal <- cor(x_normal, y_normal)
cor_outlier <- cor(x_outlier, y_outlier)
# Visualizamos
par(mfrow=c(1,2))
plot(x_normal, y_normal,
main=paste("Sin atípicos\nCorrelación:", round(cor_normal, 2)),
xlab="X", ylab="Y", pch=19)
abline(lm(y_normal ~ x_normal), col="red", lwd=2)
plot(x_outlier, y_outlier,
main=paste("Con atípico\nCorrelación:", round(cor_outlier, 2)),
xlab="X", ylab="Y", pch=19)
abline(lm(y_outlier ~ x_outlier), col="red", lwd=2)
points(5, -5, col="red", pch=19, cex=2) # Destacamos el valor atípico
par(mfrow=c(1,1))
Corrección para comparaciones múltiples
Cuando realizamos múltiples pruebas de correlación, aumenta la probabilidad de encontrar correlaciones significativas por azar. Para controlar esto, podemos aplicar correcciones:
# Generamos 20 variables aleatorias (sin correlación real)
set.seed(123)
datos_aleatorios <- matrix(rnorm(100*20), ncol=20)
colnames(datos_aleatorios) <- paste0("Var", 1:20)
# Calculamos todas las correlaciones posibles
p_valores <- c()
pares <- c()
for(i in 1:19) {
for(j in (i+1):20) {
test <- cor.test(datos_aleatorios[,i], datos_aleatorios[,j])
p_valores <- c(p_valores, test$p.value)
pares <- c(pares, paste("Var", i, "-", "Var", j))
}
}
# Aplicamos corrección de Bonferroni
p_ajustados <- p.adjust(p_valores, method="bonferroni")
# Comparamos resultados
resultados_multiples <- data.frame(
Pares = pares,
P_original = p_valores,
P_ajustado = p_ajustados,
Significativo_original = p_valores < 0.05,
Significativo_ajustado = p_ajustados < 0.05
)
# Contamos cuántas correlaciones son significativas antes y después
sum(resultados_multiples$Significativo_original) # Esperamos ~5% por azar
sum(resultados_multiples$Significativo_ajustado) # Debería ser cercano a 0
La interpretación adecuada de las correlaciones y su significancia estadística es fundamental para extraer conclusiones válidas de nuestros análisis. Recordar siempre que la correlación es solo una medida de asociación y no implica causalidad nos ayudará a evitar interpretaciones erróneas de nuestros resultados.
Otros ejercicios de programación de R
Evalúa tus conocimientos de esta lección Correlación en R con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Todas las lecciones de R
Accede a todas las lecciones de R y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Instalación De R Y Rstudio
Introducción Y Entorno
Introducción A R
Introducción Y Entorno
Operadores
Sintaxis
Estructuras De Datos
Sintaxis
Funciones
Sintaxis
Estructuras De Control Iterativo
Sintaxis
Scopes Y Closures
Sintaxis
Estructuras De Control Condicional
Sintaxis
Funciones Anónimas
Sintaxis
Tipos De Datos Y Variables
Sintaxis
Sistema R6: Clases Referenciales Y Encapsulamiento
Programación Orientada A Objetos
Sistema S4: Clases Formales Y Validación
Programación Orientada A Objetos
Herencia Y Polimorfismo En R
Programación Orientada A Objetos
Sistemas De Oop En R
Programación Orientada A Objetos
Sistema S3: Clases Implícitas Y Métodos Genéricos
Programación Orientada A Objetos
Tidyverse Para Transformación De Datos
Manipulación De Datos
Lubridate Para Fechas Y Tiempo
Manipulación De Datos
Group_by Y Summarize Para Agrupación Y Resumen
Manipulación De Datos
Stringr Para Expresiones Regulares
Manipulación De Datos
Tidyr Para Limpieza De Valores Faltantes
Manipulación De Datos
Joins En R Para Combinación Y Relaciones De Tablas
Manipulación De Datos
Pivot_longer Y Pivot_wider Para Reestructuración
Manipulación De Datos
Mutate Y Transmute Para Transformación
Manipulación De Datos
Dplyr Para Filtrado Y Selección
Manipulación De Datos
Readr Y Read.csv Para Importar Datos
Manipulación De Datos
Gráficos Bivariantes En R
Visualización De Datos
Gráficos Univariantes En R
Visualización De Datos
Facetas En Ggplot2
Visualización De Datos
Personalización Y Temas
Visualización De Datos
Ggplot2 Para Visualización De Datos
Visualización De Datos
Gráficos Multivariantes En R
Visualización De Datos
Correlación En R
Estadística
Regresión Lineal En R
Estadística
Pruebas De Hipótesis En R
Estadística
Anova En R
Estadística
Estadística Descriptiva En R
Estadística
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender los conceptos y diferencias entre los coeficientes de correlación de Pearson, Spearman y Kendall.
- Aprender a calcular y probar la significancia estadística de correlaciones en R.
- Crear y visualizar matrices de correlación para múltiples variables usando diferentes métodos y paquetes.
- Interpretar correctamente los coeficientes de correlación y su relevancia estadística, considerando aspectos prácticos como tamaño de muestra y valores atípicos.
- Reconocer la importancia de la correlación parcial y las limitaciones de la correlación, especialmente la no implicación de causalidad.