La correlacion de Pearson es probablemente la primera tecnica inferencial que aprendes en psicologia y la que mas vas a usar en tu vida academica. Mide la fuerza y direccion de la relacion lineal entre dos variables continuas, devolviendo un coeficiente r entre -1 y +1. Suena simple, pero se cometen errores constantemente: no verificar supuestos, confundir correlacion con causalidad, reportar los resultados a medias. En este tutorial vas a aprender a hacerlo bien en R, desde cargar los datos hasta tener el texto listo para pegar en tu manuscrito.
R es especialmente bueno para esto porque cor.test() te devuelve r, el p-valor y el intervalo de confianza en una sola llamada. No necesitas bootstrap ni trucos. Vamos al grano.
Cuando usar la correlacion de Pearson
Pearson es apropiada cuando quieres evaluar si existe una relacion lineal entre dos variables continuas (o al menos de intervalo). Por ejemplo: quieres saber si la autoestima y la satisfaccion vital se mueven juntas en una muestra de 150 estudiantes universitarios. Eso es Pearson. Si alguna de tus variables es ordinal (un unico item Likert de 5 puntos tratado como rango) o si la relacion es monotona pero no lineal, la alternativa es Spearman, y al final de este tutorial te muestro como calcularla tambien.
A lo largo de todo el tutorial usaremos un ejemplo concreto: la relacion entre autoestima (Escala de Rosenberg, 10-40) y satisfaccion vital (SWLS de Diener, 5-35) en 150 estudiantes.
Supuestos de la correlacion de Pearson
Antes de calcular nada, necesitas verificar que tus datos cumplen los supuestos. No hacerlo es uno de los errores mas comunes en estadistica y puede invalidar tus conclusiones. Esto es lo que necesitas comprobar.
Variables continuas
Ambas variables deben ser continuas (o medidas a nivel de intervalo). Las puntuaciones totales de escalas psicometricas validadas como la Escala de Rosenberg o la SWLS se tratan convencionalmente como continuas. Si una de tus variables es genuinamente ordinal (un unico item Likert, por ejemplo), usa Spearman.
Relacion lineal
Pearson solo captura relaciones lineales. Si la relacion entre tus variables tiene forma de U o de curva, r puede salir cercano a cero aunque la asociacion sea fuerte. La forma mas fiable de comprobarlo es mirar un scatter plot. Si la nube de puntos sigue una tendencia razonablemente recta, adelante.
Normalidad bivariada
Estrictamente, Pearson asume normalidad bivariada (que la distribucion conjunta de ambas variables sea normal). En la practica, con muestras de 30 o mas, el test de significacion es bastante robusto a violaciones moderadas gracias al teorema central del limite. Evalua la normalidad de cada variable por separado con histogramas o graficos Q-Q. Si alguna muestra asimetria extrema o curtosis severa, considera una transformacion o pasa a Spearman. Puedes profundizar en el articulo sobre como verificar supuestos estadisticos.
Ausencia de outliers extremos
Los outliers tienen un efecto desproporcionado en Pearson porque r se basa en medias y desviaciones tipicas, que son sensibles a valores extremos. Un solo caso atipico puede inflar o deflactar r de forma dramatica. Inspecciona el scatter plot para detectar puntos que se alejen claramente de la nube. Si los encuentras, analiza si son errores de codificacion, si pertenecen a otra poblacion o si son valores genuinos, y reporta los resultados con y sin esos casos.
Correlacion de Pearson en R: el flujo completo
Ahora si, manos al codigo. Vamos a seguir todo el flujo: cargar datos, explorar, verificar supuestos visualmente, calcular la correlacion, y visualizar la matriz.
Paso 1: Cargar y explorar los datos
Lo primero es importar tus datos y echarles un vistazo rapido. Si trabajas con un CSV (lo mas habitual), esto es lo que necesitas:
# Cargar datos
datos <- read.csv("datos_autoestima.csv")
# Primeras filas: asegurate de que las columnas estan bien
head(datos)
# Descriptivos basicos
summary(datos[, c("autoestima", "satisfaccion_vital")])
# Desviaciones tipicas (summary no las da)
sapply(datos[, c("autoestima", "satisfaccion_vital")], sd, na.rm = TRUE)
Revisa que no haya valores fuera de rango. La autoestima deberia estar entre 10 y 40 (Rosenberg) y la satisfaccion vital entre 5 y 35 (SWLS). Si ves un 99 o un -1, tienes un problema de codificacion.
Paso 2: Scatter plot con ggplot2
El scatter plot es tu herramienta principal para verificar linealidad y detectar outliers. No te saltes este paso.
library(ggplot2)
ggplot(datos, aes(x = autoestima, y = satisfaccion_vital)) +
geom_point(alpha = 0.6, color = "#2d9cdb", size = 2) +
geom_smooth(method = "lm", se = TRUE, color = "#1a2332",
linewidth = 1) +
labs(
x = "Autoestima (Rosenberg)",
y = "Satisfaccion vital (SWLS)",
title = "Relacion entre autoestima y satisfaccion vital"
) +
theme_minimal(base_size = 13)
Lo que buscas: una nube de puntos que siga una tendencia razonablemente recta (linealidad) y que no haya puntos aislados muy lejos del resto (outliers). La linea de regresion y la banda de confianza gris te dan una referencia visual rapida. Si la nube tiene forma curva, Pearson no es tu test.
Paso 3: Comprobar normalidad
Los histogramas y graficos Q-Q te permiten evaluar la normalidad de cada variable por separado. Con ggplot2 puedes generar ambos facilmente:
# Histogramas
library(gridExtra)
p1 <- ggplot(datos, aes(x = autoestima)) +
geom_histogram(bins = 20, fill = "#2d9cdb", color = "white",
alpha = 0.8) +
labs(title = "Autoestima", x = NULL) +
theme_minimal()
p2 <- ggplot(datos, aes(x = satisfaccion_vital)) +
geom_histogram(bins = 20, fill = "#38a08a", color = "white",
alpha = 0.8) +
labs(title = "Satisfaccion vital", x = NULL) +
theme_minimal()
grid.arrange(p1, p2, ncol = 2)
# Q-Q plots (base R, rapido)
par(mfrow = c(1, 2))
qqnorm(datos$autoestima, main = "Q-Q Autoestima")
qqline(datos$autoestima, col = "#2d9cdb", lwd = 2)
qqnorm(datos$satisfaccion_vital, main = "Q-Q Satisfaccion vital")
qqline(datos$satisfaccion_vital, col = "#38a08a", lwd = 2)
par(mfrow = c(1, 1))
Si los puntos del Q-Q se alinean razonablemente con la linea diagonal, la normalidad es aceptable. No necesitas normalidad perfecta, solo que no haya asimetria extrema ni colas muy pesadas.
Paso 4: Calcular la correlacion con cor.test()
Aqui esta la parte central. cor.test() es tu funcion:
# Correlacion de Pearson con IC del 95%
resultado <- cor.test(datos$autoestima, datos$satisfaccion_vital,
method = "pearson")
resultado
La salida te da todo lo que necesitas en un solo bloque:
# Pearson's product-moment correlation
#
# data: datos$autoestima and datos$satisfaccion_vital
# t = 6.48, df = 148, p-value = 1.2e-09
# alternative hypothesis: true correlation is not equal to 0
# 95 percent confidence interval:
# 0.3345 0.5872
# sample estimates:
# cor
# 0.4700
Vamos a desgranar esto:
- r = .47: correlacion positiva moderada-grande.
- t = 6.48, df = 148: el estadistico t y los grados de libertad (N - 2).
- p-value = 1.2e-09: es decir, p < .001. La correlacion es significativa.
- IC del 95% [.33, .59]: el rango de valores plausibles para la correlacion poblacional.
Si necesitas extraer valores individuales para reportarlos programaticamente:
# Extraer componentes
resultado$estimate # r
resultado$p.value # p-valor
resultado$conf.int # IC del 95%
resultado$statistic # t
resultado$parameter # grados de libertad
# r cuadrado
resultado$estimate^2 # proporcion de varianza compartida
Paso 5: Hipotesis direccional (unilateral)
Si tu hipotesis es direccional (por ejemplo, esperabas que la correlacion fuera positiva y lo justificaste a priori), puedes pedir un test unilateral:
# Test unilateral: hipotesis de correlacion positiva
cor.test(datos$autoestima, datos$satisfaccion_vital,
method = "pearson",
alternative = "greater")
El p-valor sera la mitad del bilateral. Solo usa esto si realmente tenias una hipotesis direccional justificada antes de ver los datos. Si decides la direccion despues de mirar los resultados, eso es HARKing y no esta bien.
Paso 6: Matriz de correlacion
Cuando tienes mas de dos variables y quieres explorar todas las correlaciones bivariadas a la vez, usa cor() para la matriz y corrplot para visualizarla:
# Seleccionar variables
variables <- datos[, c("autoestima", "satisfaccion_vital",
"ansiedad", "apoyo_social")]
# Matriz de correlacion
matriz_cor <- cor(variables, use = "pairwise.complete.obs")
round(matriz_cor, 2)
La funcion cor() te da la matriz pero sin p-valores. Para obtener una tabla con r y p para cada par, el paquete Hmisc es muy util:
library(Hmisc)
# Matriz con r y p-valor
rcorr(as.matrix(variables))
Y para la visualizacion grafica, corrplot es el estandar:
library(corrplot)
corrplot(matriz_cor, method = "color", type = "upper",
addCoef.col = "black", tl.col = "black",
tl.srt = 45, diag = FALSE,
col = colorRampPalette(c("#e74c3c", "white",
"#2d9cdb"))(200))
El mapa de calor te permite detectar patrones rapidamente: bloques de variables que correlacionan fuertemente entre si pueden sugerir factores latentes. Es mucho mas legible que una tabla de numeros cuando tienes cinco o mas variables.
Bonus: Spearman como alternativa
Si tus datos no cumplen los supuestos de Pearson (la relacion no es lineal, hay outliers severos, o alguna variable es ordinal), Spearman es tu alternativa. La sintaxis en R es identica, solo cambias el argumento method:
# Correlacion de Spearman
cor.test(datos$autoestima, datos$satisfaccion_vital,
method = "spearman")
Spearman trabaja con los rangos de las observaciones en lugar de los valores brutos, lo que la hace resistente a outliers y no requiere linealidad estricta. Si los resultados de Pearson y Spearman son similares, buena senal: tu correlacion es robusta.
Interpretar los resultados
Tienes la salida de R delante. Ahora necesitas interpretarla bien. Son cuatro elementos clave.
El coeficiente r
El valor de r indica la fuerza y direccion de la relacion lineal. Un r = .47 significa una relacion positiva: a mayor autoestima, mayor satisfaccion vital. Para la magnitud, las convenciones de Cohen (1988) son el estandar en psicologia:
- r = .10: efecto pequeno
- r = .30: efecto mediano
- r = .50: efecto grande
Nuestro r = .47 cae en el rango medio-grande. Pero no apliques estas convenciones de forma mecanica: en algunas areas de psicologia, correlaciones de .20 son sustantivamente importantes, y en otras .50 puede ser modesto. El contexto de tu area de investigacion importa.
El p-valor
El p-valor te dice la probabilidad de obtener un r tan extremo (o mas) si la correlacion poblacional fuese cero. Un p < .001 significa que es extremadamente improbable que la correlacion observada sea producto del azar. Pero ojo: el p-valor depende mucho del tamano muestral. Con N = 500, correlaciones de .09 ya salen significativas, y eso no quiere decir que sean relevantes en la practica.
El intervalo de confianza
El IC del 95% (en nuestro ejemplo, [.33, .59]) te dice el rango de valores plausibles para la correlacion poblacional. Es mucho mas informativo que el p-valor solo porque te da una idea de la precision de tu estimacion. Un IC estrecho indica estimacion precisa; uno amplio sugiere que necesitas mas muestra. El articulo sobre intervalos de confianza profundiza en esto.
El coeficiente de determinacion r-cuadrado
Elevar r al cuadrado te da la proporcion de varianza compartida entre las dos variables. Si r = .47, entonces r-cuadrado = .22, lo que significa que la autoestima explica aproximadamente el 22% de la variabilidad en satisfaccion vital (y viceversa). Este dato es crucial para evaluar la relevancia practica. Un r = .20 parece modesto, pero r-cuadrado = .04 te dice que solo el 4% de la varianza es compartida. Eso pone las cosas en perspectiva.
Matriz de correlacion: como leerla
Cuando analizas mas de dos variables, la salida es una matriz de correlacion: una tabla simetrica donde cada celda tiene el r entre el par de variables. La diagonal siempre es 1 (cada variable correlaciona perfectamente consigo misma) y la mitad inferior es un espejo de la superior.
Al leer una matriz, fijate en tres cosas: (1) la magnitud de los coeficientes, para identificar que pares estan mas fuertemente asociados; (2) la direccion, positiva o negativa; y (3) los patrones globales, como bloques de variables que correlacionan fuertemente entre si (lo que puede sugerir factores latentes). Si tu matriz tiene muchas variables, el mapa de calor de corrplot que vimos antes es muchisimo mas legible que una tabla de numeros.
Reporte en formato APA 7
APA 7 requiere reportar r, los grados de libertad, el p-valor y, idealmente, el intervalo de confianza. La estructura es esta:
Se observo una correlacion positiva, estadisticamente significativa, entre autoestima y satisfaccion vital, r(148) = .47, p < .001, IC del 95% [.33, .59]. El tamano del efecto fue mediano-grande segun las convenciones de Cohen (1988), y la autoestima explico aproximadamente el 22% de la varianza en satisfaccion vital (r² = .22).
Detalles de formato que los revisores siempre notan: el coeficiente r va en cursiva y sin cero delante del punto decimal (.47, no 0.47). Los grados de libertad van entre parentesis despues de r y son N - 2. El p-valor tambien va en cursiva. Si necesitas una guia completa, revisa el tutorial de reporte APA 7.
Un truco en R: puedes montar el texto APA directamente con codigo para no equivocarte al copiar valores:
# Generar texto APA automaticamente
r_val <- round(resultado$estimate, 2)
df_val <- resultado$parameter
p_val <- resultado$p.value
ci_low <- round(resultado$conf.int[1], 2)
ci_high <- round(resultado$conf.int[2], 2)
cat(sprintf("r(%d) = %.2f, p < .001, IC del 95%% [%.2f, %.2f]",
df_val, r_val, ci_low, ci_high))
Errores comunes al usar la correlacion de Pearson
Confundir correlacion con causalidad
Que autoestima y satisfaccion vital correlacionen .47 no significa que la autoestima cause satisfaccion vital. La relacion puede ser inversa, bidireccional, o estar explicada por una tercera variable (como el apoyo social). Establecer causalidad requiere disenos experimentales o, como minimo, longitudinales con control de variables. El articulo sobre mediacion y moderacion profundiza en esto.
No verificar la linealidad
Calcular Pearson sin mirar un scatter plot antes es como conducir con los ojos cerrados. Si la relacion es curvilinea, r subestimara gravemente la asociacion real. Siempre inspecciona el grafico primero.
Usar ceros iniciales al reportar r y p
En formato APA, los estadisticos que no pueden exceder 1 en valor absoluto (r, p, betas estandarizados) se reportan sin el cero inicial. Es .47, no 0.47. Es p < .001, no p < 0.001. Detalle menor, pero los revisores lo detectan al instante.
Ignorar el tamano del efecto
Reportar solo la significacion estadistica sin contextualizarla con r-cuadrado o las convenciones de Cohen es una interpretacion incompleta. Un r = .12 puede ser significativo con N = 300, pero r-cuadrado = .014 significa que apenas el 1.4% de la varianza es compartida. La significacion te dice que el efecto probablemente no es cero; el tamano del efecto te dice si importa.
Dicotomizar variables continuas
Convertir una variable continua en dos grupos (autoestima alta vs baja usando la mediana) para hacer una prueba t en lugar de una correlacion es una practica que reduce drasticamente la potencia estadistica y desperdicia informacion. Si ambas variables son continuas, usa la correlacion.
Si estas calculando correlaciones para tu tesis y necesitas ayuda para verificar supuestos, interpretar la salida o redactar la seccion de resultados en APA, en mi consultoria estadistica revisamos el analisis juntos y te dejo el texto listo para el manuscrito.