library(tidyverse)
library(factoextra)
library(patchwork)
library(corrplot)5 Análisis de componentes principales
Para este capítulo, utilizaremos las siguientes librerías de R:
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.
- Fue desarrollada por Karl Pearson a finales del siglo XIX y estudiada en profundidad por Harold Hotelling en los años 30 del siglo XX. Hoy es una herramienta fundamental en Ciencia de Datos.
- Es un método de aprendizaje no supervisado: no intentamos predecir una variable respuesta (etiqueta), sino extraer información de la estructura de los datos.
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!
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.
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.
- 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.
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))
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í.
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^2nos 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:
Murdertiene 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.
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
MurderyAssaultapuntan casi en la misma dirección (ángulo muy cerrado), lo que indica que estados con muchos asesinatos suelen tener también muchos asaltos.
- Ejemplo: Las flechas de
- 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.
- ¿Qué puede decir sobre sus niveles de criminalidad comparado con la media nacional?
- ¿Y sobre su nivel de urbanización?
- ¿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.
- ¿Qué variable domina ahora la PC1? (Mire la matriz
rotation). - Compare la varianza explicada por la PC1 en este caso frente al caso escalado.
- 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.
- Ejecute un PCA sobre las 4 variables numéricas de
iris(escalando los datos). - Cree un biplot donde los puntos estén coloreados por la variable
Species. - ¿Son las especies fácilmente distinguibles en el plano de las dos primeras componentes?
- ¿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%.
- ¿Cuánta información perdemos si nos quedamos con las 2 primeras componentes?
- ¿Es aceptable esta pérdida en un contexto de exploración inicial?
- 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.
- Use el dataset
decathlon2(de la libreríafactoextra) para realizar un PCA sobre los resultados de los atletas. - Identifique si hay algún atleta que se aleje significativamente del grupo en el biplot.
- Investigue las contribuciones de los individuos (
fviz_pca_ind) para ver cuáles tienen mayor impacto en las componentes.

