Antes de calcular cualquier coeficiente, es fundamental que los estudiantes comprendan visualmente qué es la correlación.
Para ilustrar ambos cálculos, usaremos un pequeño conjunto de datos (\(n=5\)) que relaciona la edad de pacientes con su nivel de colesterol LDL (en mg/dL).
| Paciente | Edad (X) | Colesterol LDL (Y) |
|---|---|---|
| 1 | 45 | 140 |
| 2 | 50 | 155 |
| 3 | 60 | 160 |
| 4 | 65 | 180 |
| 5 | 70 | 175 |
Al finalizar esta sección, el estudiante será capaz de calcular e interpretar el coeficiente de correlación de Pearson (r) para evaluar una relación lineal.
El coeficiente de Pearson (r) varía de -1 a +1.
La fórmula es: \[r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2 \sum (y_i - \bar{y})^2}}\]
Paso 1: Calcular las medias (\(\bar{x}, \bar{y}\))
Paso 2: Tabla de desviaciones y productos cruzados
Esta tabla es esencial para organizar el cálculo manual.
| \(x_i\) | \(y_i\) | \((x_i - \bar{x})\) | \((y_i - \bar{y})\) | \((x_i - \bar{x})(y_i - \bar{y})\) | \((x_i - \bar{x})^2\) | \((y_i - \bar{y})^2\) |
|---|---|---|---|---|---|---|
| 45 | 140 | -13 | -22 | 286 | 169 | 484 |
| 50 | 155 | -8 | -7 | 56 | 64 | 49 |
| 60 | 160 | 2 | -2 | -4 | 4 | 4 |
| 65 | 180 | 7 | 18 | 126 | 49 | 324 |
| 70 | 175 | 12 | 13 | 156 | 144 | 169 |
| Suma | 0 | 0 | 620 | 430 | 1030 |
Paso 3: Aplicar la fórmula
El valor \(r \approx 0.93\) indica una correlación lineal positiva muy fuerte entre la edad y el nivel de colesterol LDL en esta muestra.
Al finalizar esta sección, el estudiante será capaz de calcular e interpretar el coeficiente de correlación de Spearman (\(\rho\)) para evaluar una relación monotónica.
El coeficiente de Spearman (rho, \(\rho\)) es conceptualmente el coeficiente de Pearson calculado sobre los rangos de los datos. También varía de -1 a +1. Se utiliza cuando:
La fórmula (para cuando no hay empates) es: \[\rho = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)}\] Donde \(d_i\) es la diferencia entre los rangos de X e Y para cada individuo.
Paso 1: Asignar rangos a X (Edad) e Y (Colesterol)
Nota: El paciente 5 (70 años) tiene el 4º rango de colesterol (175), mientras que el paciente 4 (65 años) tiene el 5º (180).
| \(x_i\) | \(y_i\) | Rango de X (\(R_x\)) | Rango de Y (\(R_y\)) | \(d_i = (R_x - R_y)\) | \(d_i^2\) |
|---|---|---|---|---|---|
| 45 | 140 | 1 | 1 | 0 | 0 |
| 50 | 155 | 2 | 2 | 0 | 0 |
| 60 | 160 | 3 | 3 | 0 | 0 |
| 65 | 180 | 4 | 5 | -1 | 1 |
| 70 | 175 | 5 | 4 | 1 | 1 |
| Suma | 0 | 2 |
Paso 2: Calcular \(\sum d_i^2\)
Paso 3: Aplicar la fórmula de Spearman
El valor \(\rho = 0.90\) indica una correlación monotónica positiva muy fuerte. Los valores de Pearson (0.93) y Spearman (0.90) son cercanos porque la relación en estos datos es fuertemente lineal, con solo una ligera desviación del orden.
El estudiante será capaz de utilizar la función cor() en
R para calcular eficientemente las correlaciones de Pearson y
Spearman.
R simplifica enormemente este proceso. La función principal es
cor(). El argumento clave es method:
method = "pearson" (por defecto)method = "spearman"El siguiente código R define los datos y ejecuta ambos cálculos.
# 1. Definir los datos del ejemplo clínico
edad <- c(45, 50, 60, 65, 70)
colesterol <- c(140, 155, 160, 180, 175)
# 2. Calcular Correlación de Pearson
# method = "pearson" es el default, pero es bueno ser explícito
cor_pearson <- cor(edad, colesterol, method = "pearson")
print(paste("Correlación de Pearson (r):", round(cor_pearson, 6)))
## [1] "Correlación de Pearson (r): 0.93162"
# 3. Calcular Correlación de Spearman
cor_spearman <- cor(edad, colesterol, method = "spearman")
print(paste("Correlación de Spearman (rho):", round(cor_spearman, 6)))
## [1] "Correlación de Spearman (rho): 0.9"
# 4. Verificación pedagógica: Spearman es Pearson sobre los rangos
rank_x <- rank(edad)
rank_y <- rank(colesterol)
cor_spearman_manual_R <- cor(rank_x, rank_y, method = "pearson")
print(paste("Verificación de Spearman (Pearson de rangos):", round(cor_spearman_manual_R, 6)))
## [1] "Verificación de Spearman (Pearson de rangos): 0.9"
La salida de R confirma exactamente nuestros cálculos manuales.
A continuación, se presenta el código R para calcular el coeficiente de correlación de Pearson (r) entre las variables edad y puntaje_C de la base de datos CAP_modif.
# Instalar paquetes si no los tiene
# install.packages("readxl")
library(readxl)
# 2. Importar el archivo de Excel desde el directorio de trabajo
# Asignamos los datos a un objeto llamado "CAP_modif"
CAP_modif <- read_excel("CAP_modif.xlsx")
list.files()
## [1] "Anova_Generica.R"
## [2] "CAP_modif.xlsx"
## [3] "Comparación de Proporciones en Ciencias de la Salud.Rmd"
## [4] "rsconnect"
## [5] "Tutorial-Chi-Cuadrado.html"
## [6] "Tutorial-Regresion-Lineal-Simple.html"
## [7] "Tutorial Chi Cuadrado.Rmd"
## [8] "Tutorial Regresion Lineal Simple.Rmd"
## [9] "Tutorial_-Inferencia_para_una_proporción.html"
## [10] "Tutorial_-Inferencia_para_una_proporción_bis.html"
## [11] "Tutorial_ Inferencia_para_una_proporción_bis.Rmd"
## [12] "Tutorial_ANOVA.html"
## [13] "Tutorial_ANOVA.Rmd"
## [14] "Tutorial_ANOVA_files"
## [15] "Tutorial_Comparacion_de_Medias.Rmd"
## [16] "Tutorial_Correlaciones.html"
## [17] "Tutorial_Correlaciones.Rmd"
## [18] "Tutorial_Correlaciones_files"
## [19] "Tutorial_Inferencia_para_dos-o-mas_proporciones.html"
## [20] "Tutorial_Inferencia_para_dos-o-mas_proporciones.Rmd"
## [21] "Tutorial_inferencia_para_dos_medias.html"
## [22] "Tutorial_inferencia_para_dos_medias.Rmd"
## [23] "Tutorial_Inferencia_para_una_proporcion.html"
## [24] "Tutorial_Inferencia_para_una_proporción.html"
## [25] "Tutorial_Inferencia_para_una_proporcion.Rmd"
## [26] "Tutorial_McNemar.html"
## [27] "Tutorial_McNemar.Rmd"
Antes de calcular cualquier coeficiente, es fundamental que los estudiantes visualicen la relación. Esto permite detectar no linealidades, outliers o grupos que el coeficiente ‘r’ por sí solo no mostraría.
# Un scatterplot es el primer paso obligatorio.
plot(
x = CAP_modif$edad,
y = CAP_modif$puntaje_C,
main = "Diagrama de Dispersión: Edad vs. Puntaje C",
xlab = "Edad (años)",
ylab = "Puntaje C (unidades)",
pch = 19, # Símbolo de punto sólido
col = "blue"
)
# (Opcional) Añadir una línea de tendencia simple (regresión lineal)
# Esto ayuda a visualizar la dirección de la relación lineal.
abline(lm(puntaje_C ~ edad, data = CAP_modif), col = "red")
En R, el método preferido no es solo cor(), sino cor.test(), ya que esta última función nos proporciona el valor p y el intervalo de confianza del coeficiente, lo cual es esencial para la inferencia estadística.
# --- 3. Cálculo de Correlación de Pearson (Método recomendado) ---
# Usamos la función cor.test().
# La sintaxis de fórmula (y ~ x) es clara: puntaje_C en función de edad.
# Especificamos method = "pearson" (aunque es el default).
# data = CAP_modif nos permite referirnos a las columnas por su nombre.
resultado_pearson <- cor.test(
~ puntaje_C + edad,
data = CAP_modif,
method = "pearson"
)
# Imprimimos los resultados completos
print("Resultados del Test de Correlación de Pearson:")
## [1] "Resultados del Test de Correlación de Pearson:"
print(resultado_pearson)
##
## Pearson's product-moment correlation
##
## data: puntaje_C and edad
## t = -3.0796, df = 513, p-value = 0.002184
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.21858544 -0.04889309
## sample estimates:
## cor
## -0.1347269
La salida de cor.test() es la parte más importante para
la interpretación bioestadística.
# --- 4. Interpretación de la Salida ---
# La salida de 'print(resultado_pearson)' nos da:
# 1. 't' y 'df': El valor del estadístico t y los grados de libertad (n-2).
# (En nuestro ejemplo: t = 0.54019, df = 18)
# 2. 'p-value': El valor p. Es la probabilidad de observar una correlación
# tan fuerte (o más) que la calculada, si la correlación verdadera
# en la población fuera cero (Hipótesis Nula).
# (Ejemplo: p-value = 0.596)
# * Si p < 0.05, se rechaza la H0 -> "La correlación es estadísticamente significativa".
# * Si p >= 0.05, no se rechaza la H0 -> "No hay evidencia de correlación significativa".
# 3. '95 percent confidence interval': El IC al 95% para el coeficiente 'r'.
# (Ejemplo: -0.328 a 0.544)
# * Si el intervalo de confianza INCLUYE el 0, el resultado NO es
# estadísticamente significativo (coherente con el p-value).
# * Si el intervalo NO incluye el 0, SÍ es significativo.
# 4. 'sample estimates (cor)': El valor del coeficiente de correlación 'r'
# (Ejemplo: cor = 0.126)
# * cercano a 0: débil
# * cercano a -1 o 1: fuerte
# --- Extracción de valores específicos (Opcional avanzado) ---
# Se puede acceder a los valores individuales así:
cat("\n--- Interpretación Resumida ---\n")
##
## --- Interpretación Resumida ---
cat(paste("Coeficiente r:", round(resultado_pearson$estimate, 3), "\n"))
## Coeficiente r: -0.135
cat(paste("Valor p:", round(resultado_pearson$p.value, 3), "\n"))
## Valor p: 0.002
Cargar datos: (En este caso, simulamos
CAP_modif).
Visualizar:
plot(CAP_modif$edad, CAP_modif$puntaje_C).
Probar:
cor.test(~ puntaje_C + edad, data = CAP_modif).
Interpretar: Analizar el valor ‘r’ (fuerza y dirección), el valor ‘p’ (significancia) y el IC 95% (precisión y significancia).
Usaremos Spearman, ya que nuestra variable de actitud es ordinal y no podemos asumir normalidad. Sin embargo, como ejercicio, vamos a inspeccionar los datos para ver si el uso de Pearson hubiera sido una opción viable.
# --- Código para verificar supuestos ---
# (Asumiendo que los datos están cargados en CAP_modif)
# 1. Histograma del Puntaje de Actitud (¿Es normal?)
hist(CAP_modif$puntaje_A,
main = "Histograma del Puntaje A (Actitudes)",
xlab = "Puntaje (5-25)",
col = "lightblue")
# (Probablemente saldrá sesgado)
# 2. Histograma de la Edad (¿Es normal?)
hist(CAP_modif$edad,
main = "Histograma de Edad",
xlab = "Edad (años)",
col = "lightgreen")
# (También puede estar sesgado)
# 3. Scatterplot (¿La relación es LINEAL?)
plot(CAP_modif$edad, CAP_modif$puntaje_A,
main = "Relación entre Edad y Actitud",
xlab = "Edad",
ylab = "Puntaje de Actitud")
# (Buscar patrones lineales vs. curvos)
# --- Cálculo Definitivo (Spearman) ---
# Dado que 'puntaje_A' es ordinal, procedemos con Spearman.
resultado_spearman <- cor.test(
~ puntaje_A + edad,
data = CAP_modif,
method = "spearman"
)
print("Resultados de la Correlación de Spearman (recomendada):")
## [1] "Resultados de la Correlación de Spearman (recomendada):"
print(resultado_spearman)
##
## Spearman's rank correlation rho
##
## data: puntaje_A and edad
## S = 21693884, p-value = 0.2865
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.0470535
## sample estimates:
## rho
## 0.0470535
Es el coeficiente de correlación de Spearman (rho, \(\rho\)) calculado a partir de la muestra.
Valor: \(\rho = 0.047\)
Interpretación: Este valor mide la fuerza y dirección de la relación monotónica.
Dirección: Es positivo (mayor que 0), lo que sugiere que a medida que una variable aumenta, la otra tiende a aumentar (o viceversa).
Fuerza: El valor 0.047 es extremadamente débil. Está muy cerca de 0.En resumen (rho): se encontró una correlación positiva casi inexistente o trivial entre las dos variables.
Cuando desea visualizar la correlación entre tres o más variables simultáneamente, un diagrama de dispersión simple (plot) no es suficiente. Necesita una matriz de gráficos.
Las dos opciones principales son: la
matriz de diagramas de dispersión (la más exploratoria) y
el correlograma (la más resumida). Verifica
Esta es la mejor opción para explorar visualmente los datos. Crea una cuadrícula que muestra el diagrama de dispersión de cada variable contra cada otra variable.
A. Con R Base (Función pairs) Esta es la forma más rápida y no requiere librerías.
variables_grafico <- CAP_modif[, c("puntaje_C", "puntaje_A", "puntaje_P")]
# La función pairs() crea la matriz
pairs(variables_grafico,
main = "Matriz de Diagramas de Dispersión (SPLOM)",
pch = 19, # Puntos sólidos
col = "blue")
La diagonal muestra los nombres de las variables.
El gráfico en la fila “puntaje_C” y la columna “puntaje_A” es el scatter plot de plot(puntaje_A, puntaje_C).
B. Con Librería GGally (Recomendado) Esta opción es mucho más informativa, ya que combina los diagramas de dispersión, la distribución de cada variable (histogramas) y los coeficientes de correlación en un solo gráfico.
# --- Opción 1B: Matriz Avanzada con GGally ---
# 1. Instalar (solo una vez)
#install.packages("GGally")
# 2. Cargar librería
library(GGally)
# 3. Crear el gráfico
# ggpairs() es la función estrella
ggpairs(variables_grafico,
title = "Matriz de Correlacion Avanzada (ggpairs)")
Diagonal: Muestra la distribución (densidad o histograma) de cada variable.
Triangular Inferior: Muestra los diagramas de dispersión (scatter plots) de cada par.
Triangular Superior: Muestra el valor del coeficiente de correlación (por defecto, Pearson).
Esta opción no muestra los datos brutos. En su lugar, calcula el coeficiente de correlación (r o \(\rho\)) para cada par y muestra esos números en una matriz de color (heatmap).
# 1. Instalar (solo una vez)
#install.packages("corrplot")
# 2. Cargar librería
library(corrplot)
# 3. Calcular la Matriz de Correlación
# Nota: Usamos method = "spearman" porque 'puntaje_A' es ordinal.
# 'use = "complete.obs"' maneja valores perdidos (NA)
matriz_cor <- cor(variables_grafico,
method = "spearman",
use = "complete.obs")
# 4. Graficar el Correlograma
corrplot(matriz_cor,
method = "number", # Mostrar el coeficiente numérico
type = "upper", # Mostrar solo la triangular superior
title = "Correlograma de Coeficientes (Spearman)",
mar = c(0,0,1,0)) # Ajustar margen para el título
Use la Opción 1 (SPLOM) primero para explorar sus datos.
Use la Opción 2 (Correlograma) después para reportar el resumen de las correlaciones.