5  Análisis de componentes principales

Para este capítulo, utilizaremos las siguientes librerías de R:

library(tidyverse)
library(factoextra)
library(patchwork)
library(corrplot)

El Análisis de Componentes Principales (PCA, por sus siglas en inglés) es una técnica de reducción de dimensión que permite pasar de una gran cantidad de variables interrelacionadas a unas pocas variables incorreladas entre sí llamadas componentes principales.

NotaBiometrika y el origen del PCA

Karl Pearson publicó el primer artículo sobre PCA en 1901 en la revista Biometrika. Su motivación no era la computación, sino encontrar una forma de ajustar una “línea de mejor ajuste” que fuera independiente de qué variable elegíamos como “X” o “Y”. Imaginaba los datos como una nube de puntos en forma de elipsoide y buscaba los ejes principales de esa nube.

5.1 Motivación y la metáfora del fotógrafo

Imagina que tienes un conjunto de datos con muchas variables: edad, altura, peso, ingresos, nivel educativo, presión arterial, colesterol… Visualizar o analizar simultáneamente 50 variables es imposible para nuestra mente tridimensional. Si tenemos 25 variables, ¡existen \(\binom{25}{2}=300\) posibles pares de correlaciones para mirar!

NotaFilosofía del PCA

PCA consiste en buscar combinaciones lineales de las variables originales que representen lo mejor posible a la variabilidad presente en los datos. Se asume que “variabilidad” equivale a “información”.

Una excelente forma de entender PCA es pensar en un fotógrafo tratando de capturar una escultura tridimensional (3D) en una fotografía plana (2D). El fotógrafo busca el mejor ángulo para capturar la esencia del objeto, es decir, el ángulo que muestra la mayor cantidad de detalles (la mayor variabilidad).

En términos de datos, “buscar el mejor ángulo” es equivalente a proyectar los puntos sobre una línea (una componente principal) de modo que los puntos proyectados estén lo más dispersos posible.

Figura 5.1: Concepto visual de PCA: Proyección sobre diferentes ejes. La dirección que maximiza la dispersión de los puntos proyectados es la primera Componente Principal.

PCA hace exactamente esto: Gira el sistema de ejes hasta encontrar la dirección donde los datos tienen la mayor varianza. Esa es la Componente Principal 1. Luego busca la segunda dirección más informativa, con la condición de que sea perpendicular a la primera.

NotaEl Factor ‘g’ de Inteligencia

Uno de los usos históricos más famosos del PCA (y su pariente cercano, el Análisis Factorial) fue en psicología. Charles Spearman observó que las puntuaciones en diferentes tests cognitivos estaban correlacionadas. Al aplicar técnicas de reducción de dimensión, propuso la existencia de un factor general de inteligencia (\(g\)), que sería la primera componente principal que explica la mayor parte de la habilidad cognitiva.

  • Preprocesamiento: Es casi obligatorio estandarizar los datos antes de aplicarlo.
  • Cuidado con los outliers.
  • Es necesario que los datos estén relacionados entre sí. Si son incorrelados, PCA no aportará nada.

5.2 Fundamento teórico y Maximización de la varianza

El corazón matemático de PCA es un problema de optimización. Supongamos que tenemos una matriz de datos \(X\) de tamaño \(n \times p\) que ya ha sido centrada (\(X_j = X_j - \bar{x}_j\)). Buscamos una dirección, definida por un vector unitario \(\symbfit{u}\) (\(||\symbfit{u}|| = 1\)), tal que la proyección de los datos sobre \(\symbfit{u}\) tenga la mayor varianza posible.

La proyección de una observación \(\symbfit{x}_i\) sobre \(\symbfit{u}\) es el producto escalar \(\symbfit{x}_i \cdot \symbfit{u}\). La varianza de todas las proyecciones se puede escribir como:

\[ \text{Var}(X\symbfit{u}) = \frac{1}{n-1} (X\symbfit{u})^T (X\symbfit{u}) = \symbfit{u}^T \left( \frac{X^T X}{n-1} \right) \symbfit{u} = \symbfit{u}^T \Sigma \symbfit{u} \]

Donde \(\Sigma\) es la matriz de covarianza de los datos. El problema se reduce a:

\[ \max_{\symbfit{u}} \symbfit{u}^T \Sigma \symbfit{u} \quad \text{sujeto a} \quad \symbfit{u}^T \symbfit{u} = 1 \]

Para maximizar la varianza \(\symbfit{u}^T \Sigma \symbfit{u}\) bajo la restricción de que \(\symbfit{u}\) sea un vector unitario (\(\symbfit{u}^T \symbfit{u} = 1\)), construimos el Lagrangiano:

\[ \mathcal{L}(\symbfit{u}, \lambda) = \symbfit{u}^T \Sigma \symbfit{u} - \lambda (\symbfit{u}^T \symbfit{u} - 1) \]

Si derivamos respecto a \(\symbfit{u}\) e igualamos a cero, obtenemos:

\[ \frac{\partial \mathcal{L}}{\partial \symbfit{u}} = 2\Sigma \symbfit{u} - 2\lambda \symbfit{u} = 0 \implies \Sigma \symbfit{u} = \lambda \symbfit{u} \]

Esta es precisamente la definición de un autovector de la matriz de covarianza \(\Sigma\), donde \(\lambda\) es su correspondiente autovalor.

¿Cuál de todos los autovectores debemos elegir? Si premultiplicamos la expresión anterior por \(\symbfit{u}^T\):

\[ \symbfit{u}^T \Sigma \symbfit{u} = \symbfit{u}^T \lambda \symbfit{u} = \lambda (\symbfit{u}^T \symbfit{u}) = \lambda \]

Como nuestro objetivo es maximizar \(\symbfit{u}^T \Sigma \symbfit{u}\) (la varianza proyectada), y esta es igual a \(\lambda\), la solución óptima es elegir el autovector asociado al mayor autovalor (\(\lambda_1\)). Esa dirección es la primera componente principal.

ImportanteConexión con SVD e Interpretación Visual

Las direcciones que maximizan la varianza son los autovectores de la matriz de covarianza \(\Sigma\). La varianza en cada dirección es el autovalor correspondiente, \(\lambda\). En la práctica, esto equivale a rotar nuestros datos para que el primer eje coincida con la dirección de mayor “estiramiento” de la nube de puntos.

Figura 5.2: Izquierda: Datos originales con los ejes de las Componentes Principales. Derecha: Datos proyectados en el nuevo espacio de componentes (Rotación).

En la práctica, usamos la Descomposición en Valores Singulares (SVD) de la matriz de datos \(X\) para calcular esto de forma numérica más estable: \(X = U \Sigma V^T\).

Vamos a analizar el dataset USArrests, que contiene estadísticas de arrestos por cada 100,000 residentes (asalto, asesinato y violación) en cada uno de los 50 estados de EE.UU. en 1973, junto con el porcentaje de población urbana.

5.3 Análisis de datos con PCA

5.3.1 Análisis Exploratorio y Correlación

Antes de reducir la dimensión, comprobamos si las variables están relacionadas. ¿Hay redundancia (correlación)? ¿Están las variables en la misma escala?

cor(USArrests) |> 
  corrplot(method = "number", type = "upper", 
           col = colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))(200))
Figura 5.3: Matriz de correlación de las variables originales (USArrests).

PCA es extremadamente sensible a las unidades de medida. En USArrests, la variable Assault tiene una magnitud y varianza muchísimo mayor que el resto. Sin estandarizar, PCA ignoraría la estructura de las otras dimensiones. Por ello, es imperativo escalar los datos (media 0, varianza 1).

5.3.2 Ejecución y Selección de Componentes

Realizamos el PCA y evaluamos cuánta información retenemos. El “scree plot” nos ayuda a decidir el número óptimo de componentes buscando el “punto de codo”.

acp <- prcomp(USArrests, center = TRUE, scale = TRUE)

# Varianza explicada
fviz_eig(acp, addlabels = TRUE, ylim = c(0, 70), title = "Scree Plot")
# Contribuciones a las dos primeras componentes
fviz_pca_var(acp, col.var = "contrib", 
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE, title = "Variables y sus contribuciones")

Con solo 2 componentes explicamos el 86.7% de la varianza total. PC1 agrupa los delitos violentos (Asesinato, Asalto, Violación), mientras que PC2 captura principalmente el nivel de urbanización.

5.3.3 Componentes Principales: Incorrelación Perfecta

Uno de los mayores beneficios del PCA es que las nuevas variables son ortogonales (incorreladas) entre sí.

Figura 5.4: Matriz de correlación entre las Componentes Principales.

5.3.4 Interpretación profunda: ¿Qué nos devuelve R?

Veamos qué información contiene el objeto acp que acabamos de crear. Al ejecutar acp <- prcomp(...), obtenemos una lista con los siguientes elementos clave:

  • sdev (Desviaciones típicas): Son las raíces cuadradas de los autovalores \(\lambda_i\).
    • La varianza explicada por cada componente es \(sdev^2\).
    • Ejemplo: En nuestro caso, acp$sdev^2 nos daría 2.48, 0.99, 0.357, 0.173 para las 4 componentes.
  • rotation (La matriz de Loadings): Contiene los autovectores en columnas (\(p \times p\)).
    • Define la dirección de los nuevos ejes en el espacio original.
    • Cada valor es el peso o contribución de la variable original a la componente.
    • Ejemplo: Murder tiene un peso de -0.536 en PC1, lo que indica una contribución muy alta.
  • x (Los Scores): Son las coordenadas de cada estado en el nuevo mapa.
    • ¿Cómo se calcula un Score a mano? Es simplemente el producto escalar entre los datos originales (escalados) y el vector de rotación.
    • Ejemplo: Las coordenadas para California son -2.499, 1.527.

Ejemplo: El perfil de California

Queremos entender por qué California tiene un valor de PC1 = -2.498. Esto se calcula multiplicando sus valores de arresto (una vez escalados) por los pesos de la primera columna de rotation:

# Valores escalados de California (fila 5 de USArrests)
calif_scaled <- scale(USArrests)[5, ]

# Pesos de la PC1
weights_pc1 <- acp$rotation[, 1]

# Producto escalar (manual)
score_manual <- sum(calif_scaled * weights_pc1)
score_manual
[1] -2.498613

Como vemos, el score es una “nota” que resume el perfil del individuo. Si PC1 tiene pesos negativos para todos los delitos, un score muy negativo significa que ese estado tiene niveles de criminalidad muy por encima de la media.

TipInterpretación de los signos

Los signos en la matriz rotation son arbitrarios. Un autovector \(\symbfit{v}\) y \(-\symbfit{v}\) definen la misma dirección. Lo importante es la magnitud y el signo relativo entre variables dentro de la misma componente.

5.3.5 El Biplot: La visión de conjunto

El biplot es la herramienta reina del PCA. Permite ver en un solo gráfico la relación entre variables (flechas) y los perfiles de los individuos (puntos).

fviz_pca_biplot(acp, repel = TRUE,
                col.var = "#2E9FDF", col.ind = "#696969",
                title = "Biplot de Arrestos en EEUU")

Guía rápida de interpretación:

  • Ejes: En este análisis, PC1 (horizontal) representa la intensidad criminal (a la izquierda valores más altos) y PC2 (vertical) el nivel de urbanización (arriba valores más altos).
  • Variables (flechas): Su longitud indica qué tan bien están representadas. El ángulo entre ellas indica correlación: los ángulos agudos significan alta correlación.
    • Ejemplo: Las flechas de Murder y Assault apuntan casi en la misma dirección (ángulo muy cerrado), lo que indica que estados con muchos asesinatos suelen tener también muchos asaltos.
  • Individuos (puntos): Su proximidad indica similitud. Si un punto está en la dirección de una flecha, tiene valores altos en esa variable.
    • Ejemplo: California e Illinois están cerca en el cuadrante superior izquierdo: ambos comparten altos niveles de delitos y son estados muy urbanizados.
    • Ejemplo: Carolina del Norte está en el cuadrante inferior izquierdo; tiene niveles de criminalidad altos (como California) pero un nivel de urbanización muy bajo (está “abajo” en el eje vertical).

5.4 Ejercicios adicionales

Ejercicio 5.1 Interpretación de Biplot Localice el estado de “California” en el biplot de USArrests.

  1. ¿Qué puede decir sobre sus niveles de criminalidad comparado con la media nacional?
  2. ¿Y sobre su nivel de urbanización?
  3. ¿Qué otro estado tiene un perfil muy similar al de California?

Ejercicio 5.2 Efecto de la Escala Repita el análisis PCA para USArrests pero cambiando el argumento scale = FALSE en prcomp.

  1. ¿Qué variable domina ahora la PC1? (Mire la matriz rotation).
  2. Compare la varianza explicada por la PC1 en este caso frente al caso escalado.
  3. Explique por qué el análisis sin escalar es engañoso en este dataset.

Ejercicio 5.3 PCA con el dataset Iris El dataset iris contiene medidas de 150 flores de 3 especies distintas.

  1. Ejecute un PCA sobre las 4 variables numéricas de iris (escalando los datos).
  2. Cree un biplot donde los puntos estén coloreados por la variable Species.
  3. ¿Son las especies fácilmente distinguibles en el plano de las dos primeras componentes?
  4. ¿Qué variable contribuye más a la separación de las especies en la PC1?

Ejercicio 5.4 Varianza Retenida y Reconstrucción Supongamos un dataset con 10 variables donde la PC1 explica el 40%, la PC2 el 20% y la PC3 el 10%.

  1. ¿Cuánta información perdemos si nos quedamos con las 2 primeras componentes?
  2. ¿Es aceptable esta pérdida en un contexto de exploración inicial?
  3. Si quisiéramos mantener al menos el 85% de la varianza, ¿cuántas componentes necesitaríamos (mínimo)?

Ejercicio 5.5 Detección de Outliers El PCA es muy útil para detectar observaciones extrañas.

  1. Use el dataset decathlon2 (de la librería factoextra) para realizar un PCA sobre los resultados de los atletas.
  2. Identifique si hay algún atleta que se aleje significativamente del grupo en el biplot.
  3. Investigue las contribuciones de los individuos (fviz_pca_ind) para ver cuáles tienen mayor impacto en las componentes.