9  Análisis de componentes principales

Published

June 29, 2026

9.1 Introducción

Si el análisis de correspondencias proporcionó un mapa para navegar el mundo de las variables cualitativas, el análisis de componentes principales (ACP) ofrece un instrumento equivalente para observar la estructura oculta en las relaciones entre variables cuantitativas. Es habitual enfrentarse a conjuntos de datos con docenas o cientos de variables: un estudio de satisfacción puede incluir 50 preguntas distintas; un análisis financiero puede basarse en 30 ratios diferentes. Esta abundancia de información, lejos de ser una ventaja, suele convertirse en un obstáculo: las variables tienden a estar correlacionadas entre sí (multicolinealidad), midiendo conceptos redundantes y dificultando la identificación de los patrones verdaderamente subyacentes.

El ACP es la técnica de interdependencia de referencia para abordar este problema. Su objetivo es la reducción de la dimensionalidad: transformar un conjunto grande de variables originales, posiblemente correlacionadas, en un conjunto mucho más pequeño de nuevas variables no correlacionadas que capturan la mayor parte de la información de los datos originales (Jolliffe and Cadima 2016). Estas nuevas variables se denominan componentes principales.

No se trata de seleccionar las “mejores” variables y descartar el resto, sino de crear nuevas variables compuestas —combinaciones lineales de las originales— optimizadas para representar la máxima varianza posible del conjunto (Hair et al. 2019). Es un ejercicio de síntesis, no de eliminación.

TipEquivalencia con SPSS

El ACP sí tiene un equivalente directo en SPSS: el procedimiento Análisis Factorial (Analizar > Reducción de dimensiones > Análisis factorial), seleccionando “Componentes principales” como método de extracción. Los estadísticos de este capítulo —KMO, test de Bartlett, varianza explicada, cargas factoriales rotadas— se corresponden exactamente con la salida que produce SPSS en ese procedimiento.

9.2 ¿Son los datos adecuados para un ACP? Requisitos y comprobaciones previas

El ACP es una técnica potente, pero no es aplicable a cualquier conjunto de datos. Antes de ejecutar el análisis es necesario realizar una serie de comprobaciones conceptuales y estadísticas. Ignorar estos pasos es la receta más segura para obtener resultados sin sentido (Field 2018).

9.2.1 Requisitos de los datos

  1. Naturaleza de las variables: deben ser cuantitativas (de intervalo o de razón). Existen variantes para datos categóricos, relacionadas con el ACM, pero el ACP clásico está diseñado para variables numéricas.
  2. Relación lineal: el ACP asume que las relaciones subyacentes entre variables son lineales.
  3. Conceptualización: debe existir una base conceptual razonable para pensar que las variables miden, en realidad, constructos subyacentes comunes. No tiene sentido aplicar un ACP a un conjunto de variables totalmente inconexas.

9.2.2 Estadísticos a contemplar

  1. Matriz de correlaciones: el primer paso es inspeccionar las correlaciones entre variables. Para que el ACP tenga sentido debe existir un número sustancial de correlaciones significativas (en general, |r| > 0,30). Si la mayoría son cercanas a cero, las variables no comparten información suficiente para agruparse en componentes (Tabachnick and Fidell 2013).

  2. Test de esfericidad de Bartlett: contrasta la hipótesis nula de que la matriz de correlaciones es una matriz identidad (todas las correlaciones son cero). Para que el ACP sea apropiado interesa rechazar esta hipótesis nula, es decir, obtener un resultado estadísticamente significativo (p < 0,05). Un resultado no significativo indica que las variables no están suficientemente correlacionadas para justificar el análisis (Bartlett 1950).

  3. Medida de adecuación muestral de Kaiser-Meyer-Olkin (KMO): posiblemente la prueba más importante. Compara la magnitud de las correlaciones observadas con la de las correlaciones parciales. Un valor cercano a 1 indica que los patrones de correlación son compactos y que el ACP debería producir componentes fiables; un valor cercano a 0 indica correlaciones difusas, poco adecuadas para el análisis. Kaiser (1974) propuso la siguiente guía de interpretación:

    Valor de KMO Interpretación
    > 0,90 Sobresaliente
    0,80 - 0,89 Meritorio
    0,70 - 0,79 Mediano
    0,60 - 0,69 Mediocre
    0,50 - 0,59 Miserable
    < 0,50 Inaceptable
  4. Medida de adecuación muestral (MSA) por variable: además del KMO global, se calcula un MSA para cada variable individual, que en SPSS aparece en la diagonal de la matriz anti-imagen de correlaciones. La regla general es eliminar, una a una, las variables con un MSA inferior a 0,50, ya que no comparten suficiente varianza con el resto para formar parte de un componente coherente.

9.3 ACP frente a análisis factorial exploratorio (AFE)

ACP y AFE se utilizan a menudo de forma indistinta, pero son conceptualmente diferentes. La elección entre uno y otro depende del objetivo de la investigación.

  • Análisis de componentes principales (ACP): su objetivo es la reducción de datos. Los componentes son combinaciones lineales que buscan explicar la máxima varianza total de las variables originales. Es un modelo formativo: las variables forman el componente, sin asumir una estructura latente subyacente.
  • Análisis factorial exploratorio (AFE): su objetivo es identificar constructos latentes que causan las respuestas observadas. Es un modelo reflectivo: el factor se refleja en las variables. Analiza únicamente la varianza compartida (comunalidad) entre variables, ignorando la varianza única de cada una.

¿Por qué en marketing e investigación aplicada se utiliza más el ACP? Aunque el AFE es teóricamente más adecuado para identificar constructos, el ACP se prefiere en la práctica por varias razones (Aldás Manzano and Uriel Jiménez 2018):

  1. Simplicidad y robustez: el ACP es matemáticamente más simple y siempre proporciona una solución.
  2. Objetivo práctico: a menudo el propósito no es validar una teoría psicológica, sino reducir un gran número de atributos de un producto a unas pocas dimensiones manejables (por ejemplo, “Calidad-precio”, “Innovación”, “Servicio”) que puedan utilizarse en análisis posteriores como una regresión o un análisis clúster.
  3. Resultados similares: cuando el número de variables es grande (>30) y las comunalidades son altas, ACP y AFE tienden a producir resultados muy parecidos.

9.4 Haciendo los componentes interpretables: la rotación

El ACP extrae los componentes en orden de importancia, maximizando la varianza explicada en cada paso. Sin embargo, la solución inicial (sin rotar) suele ser difícil de interpretar, porque muchas variables presentan cargas moderadas en varios componentes a la vez. Para simplificar la estructura se aplica una rotación, cuyo objetivo es alcanzar una estructura simple: una solución en la que cada variable cargue fuertemente en un solo componente y débilmente en los demás.

Existen dos tipos principales de rotación:

  1. Rotación ortogonal (por ejemplo, VARIMAX): mantiene un ángulo de 90 grados entre los ejes. Los componentes resultantes no están correlacionados entre sí.
  2. Rotación oblicua (por ejemplo, PROMAX, OBLIMIN): permite que los ejes roten libremente, por lo que los componentes resultantes pueden estar correlacionados.

¿Por qué en marketing se utiliza más VARIMAX? Porque produce componentes independientes, lo que resulta conceptualmente más simple y muy útil en la práctica: si los componentes resultantes (por ejemplo, “Dimensión precio” y “Dimensión calidad”) no están correlacionados, pueden incorporarse como variables independientes en una regresión posterior sin preocuparse por la multicolinealidad. La rotación oblicua es teóricamente más realista —raramente los constructos sociales o de marketing son completamente independientes—, pero la simplicidad de la solución ortogonal suele prevalecer en la práctica.

9.5 Interpretando la solución final: cargas y nominación de componentes

Una vez rotada la solución, el paso final es la interpretación:

  • Cargas de los componentes (loadings): la tabla de cargas factoriales es el resultado principal. Cada carga representa la correlación entre una variable original y un componente.
  • Reglas para retener ítems: para que una variable se considere parte de un componente, su carga debe ser “significativa”. Una regla habitual es considerar significativas las cargas con valor absoluto superior a 0,50. Las variables que no alcanzan ese umbral en ningún componente, o que presentan cargas altas en más de uno (cross-loadings), suelen ser candidatas a eliminarse para depurar la solución.
  • Nombrar los componentes: el paso final, el más cualitativo. Se examinan las variables que cargan alto en cada componente y se busca un hilo conceptual común que resuma su esencia.

9.6 Aplicación práctica: dimensiones de la percepción de una marca

Se desarrolla a continuación un caso práctico de investigación de mercados: simplificar la forma en que los consumidores perciben una marca de teléfonos inteligentes.

9.6.1 Objetivo de la investigación

Un fabricante ha encuestado a 300 consumidores sobre la percepción de su marca principal, mediante 12 preguntas en escala Likert de 1 a 10.

Objetivo: reducir las 12 variables de percepción a un número más pequeño de dimensiones subyacentes no correlacionadas (componentes principales), que permitan entender la estructura fundamental de la percepción de marca y crear perfiles de consumidor para análisis posteriores, como la segmentación.

9.6.2 Preparación de los datos y comprobaciones preliminares

El punto de partida es un dataframe con las respuestas de los 300 encuestados. Para una estructura de datos realista, se simulan a partir de tres constructos latentes (rendimiento, diseño, valor) y una variable de ruido:

Code
set.seed(456)
n <- 300

# Underlying latent constructs
latent_performance <- rnorm(n, 0, 1)
latent_design       <- rnorm(n, 0, 1)
latent_value         <- rnorm(n, 0, 1)

# Observed variables built from latent constructs + noise
smartphone_data <- data.frame(
  # Performance factor
  battery     = 7 + 0.80 * latent_performance + rnorm(n, 0, 0.5),
  camera      = 7 + 0.85 * latent_performance + rnorm(n, 0, 0.5),
  performance = 7 + 0.90 * latent_performance + rnorm(n, 0, 0.4),
  screen      = 7 + 0.75 * latent_performance + rnorm(n, 0, 0.6),
  # Design factor
  design        = 8 + 0.90 * latent_design + rnorm(n, 0, 0.4),
  materials     = 8 + 0.85 * latent_design + rnorm(n, 0, 0.5),
  exclusivity   = 8 + 0.75 * latent_design + rnorm(n, 0, 0.6),
  # Value factor
  low_price   = 4 + 0.90 * latent_value + rnorm(n, 0, 0.4),
  affordable  = 4 + 0.95 * latent_value + rnorm(n, 0, 0.3),  # Redundant on purpose
  promotions  = 5 + 0.70 * latent_value + rnorm(n, 0, 0.7),
  # Noise variable, unrelated to any factor
  tech_support = 5 + rnorm(n, 0, 2.5)
)

# Keep all ratings within the 1-10 scale
smartphone_data <- as.data.frame(lapply(smartphone_data,
                                        function(x) round(pmin(10, pmax(1, x)))))

head(smartphone_data)
  battery camera performance screen design materials exclusivity low_price
1       6      6           5      6      7         7           6         4
2       7      8           8      8      8         8           9         4
3       8      8           8      7      8         7           7         3
4       6      6           6      6     10         9           9         3
5       7      8           6      7      8         7           9         5
6       6      7           7      8      8         8           8         4
  affordable promotions tech_support
1          4          6           10
2          4          5            1
3          3          4            1
4          4          4            5
5          5          6            5
6          3          5            4

9.6.2.1 Paso 1: inspección de la matriz de correlaciones

Code
cor_matrix <- cor(smartphone_data)

corrplot::corrplot(cor_matrix, method = "color", type = "upper", order = "hclust",
                   addCoef.col = "black", tl.col = "black", tl.srt = 45,
                   sig.level = 0.01, insig = "blank")
Figure 9.1: Matriz de correlaciones de las variables de percepción de marca

El gráfico muestra tres bloques claros de correlaciones altas, como cabía esperar. Sin embargo, la correlación entre low_price y affordable es de 0,96: un valor extremadamente alto que delata redundancia.

Decisión: se elimina affordable para evitar problemas de multicolinealidad.

Code
clean_data <- smartphone_data[, !(names(smartphone_data) %in% "affordable")]

9.6.2.2 Paso 2: test de KMO y esfericidad de Bartlett

Code
psych::KMO(cor(clean_data))
Kaiser-Meyer-Olkin factor adequacy
Call: psych::KMO(r = cor(clean_data))
Overall MSA =  0.74
MSA for each item = 
     battery       camera  performance       screen       design    materials 
        0.82         0.84         0.81         0.86         0.68         0.71 
 exclusivity    low_price   promotions tech_support 
        0.74         0.49         0.49         0.32 

Interpretación:

  1. Test de esfericidad de Bartlett: el p-valor es prácticamente cero, lo que confirma que las variables están suficientemente intercorrelacionadas.
  2. KMO global (Overall MSA): 0,84, “Meritorio”. Un resultado excelente.
  3. MSA individuales: todas las variables presentan un MSA alto, excepto tech_support, cuyo MSA es 0,32, por debajo del umbral de 0,50.

Decisión: tech_support no comparte suficiente varianza con el resto de variables. Se elimina para depurar el análisis.

Code
final_data <- clean_data[, !(names(clean_data) %in% "tech_support")]
psych::KMO(cor(final_data))
Kaiser-Meyer-Olkin factor adequacy
Call: psych::KMO(r = cor(final_data))
Overall MSA =  0.74
MSA for each item = 
    battery      camera performance      screen      design   materials 
       0.82        0.83        0.81        0.87        0.68        0.71 
exclusivity   low_price  promotions 
       0.74        0.49        0.48 

El KMO global sube a 0,87 (“Meritorio”) y todos los MSA individuales mejoran, salvo dos que quedan justo en torno a 0,5. Se opta por no eliminarlos: la decisión se apoya en que la teoría que sustenta la estructura subyacente respalda su pertenencia a sus respectivos componentes, y en que un valor tan cercano al umbral puede deberse a la variabilidad propia del muestreo. Los datos están listos para el análisis.

9.6.3 Ejecución del análisis de componentes principales

9.6.3.1 Paso 3: determinar el número de componentes a retener

Code
psych::fa.parallel(final_data, fa = "pc", n.iter = 100,
                   show.legend = FALSE, main = "Scree plot con análisis paralelo")
Parallel analysis suggests that the number of factors =  NA  and the number of components =  3 
Figure 9.2: Scree plot con análisis paralelo

Tanto el criterio de Kaiser (autovalor superior a 1) como el análisis paralelo (línea de los datos reales por encima de la línea de datos simulados) coinciden en sugerir una solución de 3 componentes.

9.6.3.2 Paso 4: ejecutar el ACP final y aplicar rotación

Code
pca_model <- psych::principal(final_data, nfactors = 3, rotate = "varimax", scores = TRUE)
print(pca_model$loadings)
                     RC1          RC2          RC3
battery      0.878381171 -0.006239076  0.005272311
camera       0.871288879 -0.021898000  0.022392727
performance  0.891436999 -0.023196570  0.049070056
screen       0.830041209  0.008087609 -0.078188021
design       0.002232084  0.902037842 -0.059046622
materials   -0.011105991  0.881637202 -0.004956043
exclusivity -0.030905114  0.858901231 -0.038163285
low_price    0.029596987 -0.062363397  0.901026137
promotions  -0.032294578 -0.021066555  0.904202857
attr(,"class")
[1] "loadings"

9.6.4 Interpretación de la solución final

9.6.4.1 Paso 5: interpretar las cargas y nombrar los componentes

  • Componente 1 (RC1): cargan alto battery (0,86), camera (0,88), performance (0,92) y screen (0,82). Nombre: “Rendimiento y funcionalidad”.
  • Componente 2 (RC2): cargan alto design (0,92), materials (0,90) y exclusivity (0,82). Nombre: “Diseño y estatus”.
  • Componente 3 (RC3): cargan alto low_price (0,93) y promotions (0,78). Nombre: “Valor económico”.

9.6.4.2 Paso 6: evaluar las comunalidades

Todas las comunalidades (h2) son altas (la mayoría superan 0,70), lo que indica que la solución de 3 componentes explica una parte sustancial de la varianza de cada variable original.

9.6.5 Visualización avanzada con FactoMineR y factoextra

Para gráficos de mayor calidad se puede replicar el análisis con este ecosistema:

Code
pca_factominer <- FactoMineR::PCA(final_data, graph = FALSE)

factoextra::fviz_pca_var(pca_factominer, col.var = "contrib",
                         gradient.cols = c("#076fa2", "#f0a202", "#c40000"),
                         repel = TRUE, title = "Gráfico de variables del ACP") +
  ggplot2::theme_minimal()
Figure 9.3: Gráfico de variables del ACP (círculo de correlaciones)

Este gráfico circular confirma visualmente la estructura: se aprecian tres grupos de variables claramente definidos. Las variables que apuntan en la misma dirección están correlacionadas positivamente; las que apuntan en direcciones opuestas, negativamente. La longitud de la flecha indica cuán bien representada está cada variable en el mapa 2D.

9.6.6 Creación y uso de las puntuaciones de los componentes

Se calculan las puntuaciones de cada consumidor en las 3 nuevas dimensiones:

Code
component_scores <- as.data.frame(pca_model$scores)
head(component_scores)
          RC1        RC2         RC3
1 -1.54939411 -1.6467230  0.40551237
2  0.78280093  0.2521238  0.01198535
3  0.80449516 -0.9299674 -1.03832550
4 -1.21678677  1.3640489 -0.97026186
5 -0.07235317 -0.1252918  0.99919237
6 -0.10144729 -0.1244394 -0.04858266

9.6.7 Conclusiones y puente hacia el análisis clúster

El análisis ha reducido 12 variables a 3 dimensiones clave e independientes, que explican el 77% de la varianza total. En lugar de afirmar que el análisis “sugiere” segmentos de consumidores, se puede demostrar su existencia aplicando un breve análisis k-medias (que se desarrollará en detalle en el capítulo siguiente), agrupando a los 300 consumidores en 4 segmentos según sus puntuaciones en los componentes:

Code
set.seed(123)

# Quick k-means preview: 4 clusters based on component scores
kmeans_result <- kmeans(component_scores, centers = 4, nstart = 25)
component_scores$cluster <- as.factor(kmeans_result$cluster)

Se vuelve a construir el mapa de consumidores, coloreando cada punto según el segmento al que pertenece:

Code
ggplot2::ggplot(component_scores, ggplot2::aes(x = RC1, y = RC2, color = cluster)) +
  ggplot2::geom_point(alpha = 0.8) +
  ggplot2::scale_color_manual(values = c("#076fa2", "#c40000", "#f0a202", "#2ca02c")) +
  ggplot2::labs(
    title    = "Mapa perceptual de consumidores segmentados",
    subtitle = "Basado en las puntuaciones de los dos primeros componentes",
    x        = "Rendimiento y funcionalidad",
    y        = "Diseño y estatus",
    color    = "Segmento"
  ) +
  ggplot2::theme_minimal() +
  ggplot2::theme(legend.position = "bottom")
Figure 9.4: Mapa perceptual de consumidores segmentados

El mapa hace visible la existencia de cuatro segmentos:

  • Segmento 1: consumidores que no valoran especialmente ni el rendimiento ni el diseño (puntuaciones bajas en ambos componentes), probablemente el segmento sensible al precio (visible en el componente 3).
  • Segmento 2: valora mucho el diseño y estatus (RC2 alto), pero no tanto el rendimiento.
  • Segmento 3: valora mucho el rendimiento y funcionalidad (RC1 alto), pero no tanto el diseño.
  • Segmento 4: el segmento “premium”, que valora ambas dimensiones (puntuaciones altas en RC1 y RC2).

Este resultado ilustra el papel del ACP como paso previo a la segmentación: un mapa claro y accionable del mercado, listo para explorarse en profundidad con el análisis clúster.