Análisis de Correlación Canónica Multigrupo: explorando relaciones entre dos conjuntos de variables

análisis de datos
metodología
R
Autor/a

Antonio Matas-Terrón

Fecha de publicación

14 de julio de 2025

Introducción

La complejidad de los fenómenos sociales y educativos suele manifestarse en múltiples dimensiones simultáneamente. La Correlación Canónica (CCA) es una herramienta que permite identificar patrones de asociación entre dos bloques o conjuntos de variables, buscando la correlación antre combinaciones de variables de ambos conjuntos de variables.


¿Qué es la CCA?

La Correlación Canónica es una técnica multivariante que va más allá de los métodos clásicos de predicción o reducción de dimensionalidad. Mientras que la regresión múltiple busca explicar un solo resultado con varios predictores y el PCA reduce variables para resumir un bloque, la CCA analiza dos bloques de variables simultáneamente.

  • Objetivo: Encontrar pares de variantes canónicas (U y V) —cada una combinación lineal de variables de su bloque— de manera que la correlación entre U y V sea máxima.
  • Aplicación: Ideal cuando deseamos relacionar, por ejemplo, perfiles psicológicos con variables de rendimiento académico, o hábitos de crianza con indicadores de desarrollo infantil.

Cada par de variantes describe una “dimensión de asociación” distinta, y al extraer min(p, q) funciones canónicas podemos explorar todas las facetas principales de la relación.


Fundamentos matemáticos de la CCA (muy comprensible)

  1. Variables
    • Bloque X = (X₁, …, Xₚ)
    • Bloque Y = (Y₁, …, Y_q)
  2. Combinaciones lineales
    \[ U = {a}^T X,\quad V = b^T Y \]

con a (p×1) y b (q×1).

  1. Maximizar correlación

\(\rho = \frac{a^T \Sigma_{XY}\,b}{\sqrt{a^T \Sigma_{XX} a}\,\sqrt{b^T \Sigma_{YY} b}}\)

  1. Solución por eigenanálisis

\[ \Sigma_{XX}^{-1}\Sigma_{XY}\Sigma_{YY}^{-1}\Sigma_{YX})\,a = \rho^2\,a \]

\[ \Sigma_{YY}^{-1}\Sigma_{YX}\Sigma_{XX}^{-1}\Sigma_{XY})\,b = \rho^2\,b \]

  • Autovalores \(\rho^{2}\) → correlaciones canónicas al cuadrado
  • Autovectores → pesos a y b
  1. Interpretación:

    • El primer par (U₁, V₁) capta la mayor correlación; los siguientes, cada vez menor y ortogonales al anterior.

Ejemplos reales de uso

  • Estilos de crianza y desarrollo infantil

    • X = (Cálido, Control, Consistencia)
    • Y = (Autoestima, Agresión, Competencia social)
    • Hallazgo: Calidez y consistencia elevan autoestima y competencia; control excesivo se asocia a agresión.
  • Motivación y estrategias de aprendizaje

    • X = (Motivación intrínseca, Extrínseca, Desmotivación)
    • Y = (Estrategia profunda, Superficial, Metacognitiva)
    • Hallazgo: Intrínseca → profunda/metacognitiva; extrínseca → superficial.
  • Personalidad y satisfacción laboral

    • X = Rasgos del Big Five
    • Y = (Satisfacción, Compromiso, Engagement)
    • Hallazgo: Conciencia y extraversión predicen satisfacción y engagement; neuroticismo, negativamente.

Diferencias con otras técnicas

Técnica Bloques Objetivo Salida
CCA 2 Maximizar asociación entre X–Y Pares de variantes canónicas
PCA 1 Reducir dimensionalidad, preservar varianza Componentes principales ortogonales
Correlación múltiple (R²) 1 Y + varios X Explicar varianza de un único Y Coeficiente R² y betas de regresión

Ejemplo práctico en R

#| eval: false
#| include: false
# 1. Instalar y cargar paquete
if (!requireNamespace("yacca", quietly = TRUE)) {
  install.packages("yacca")
}
library(yacca)

# 2. Simular datos de ejemplo
set.seed(42)
n <- 200
X <- data.frame(
  x1 = rnorm(n),
  x2 = rnorm(n),
  x3 = rnorm(n)
)
Y <- data.frame(
  y1 = 0.5 * X$x1 + 0.3 * X$x2 + rnorm(n),
  y2 = -0.2 * X$x2 + 0.4 * X$x3 + rnorm(n),
  y3 = 0.1 * X$x1 - 0.3 * X$x3 + rnorm(n)
)

# 3. Ejecutar CCA
cca_res <- cca(data.frame(X, Y), xcol = 1:3, ycol = 4:6)

# 4. Inspeccionar resultados
print(cca_res$cancor)  # Correlaciones canónicas
print(cca_res$xcoef)   # Pesos para X
print(cca_res$ycoef)   # Pesos para Y

# 5. Validar la primera función canónica
u1 <- as.matrix(X) %*% cca_res$xcoef[, 1]
v1 <- as.matrix(Y) %*% cca_res$ycoef[, 1]
cat("Corr(U1, V1) =", cor(u1, v1), "\n")

Website made with Quarto, by Antonio Matas-Terrón based on Beatriz Milz original idea (https://beamilz.com/). Licencia: CC BY-SA 2.0.

```