El análisis de componentes principales (ACP) se sitúa dentro de las técnicas multivariantes de interdependencia, lo que significa que no se distingue entre variables dependientes e independientes; el objetivo es entender la estructura de relaciones de todo el conjunto de datos simultáneamente.
En el ámbito de la investigación de mercados, es habitual enfrentarse a cuestionarios con decenas de atributos (valoraciones de marca, hábitos de consumo o estilos de vida). Trabajar con tantas variables de forma aislada dificulta la toma de decisiones. El ACP actúa como una herramienta de reducción de la dimensionalidad, y permite:
Simplificar la complejidad: se transforma un conjunto amplio de variables métricas, habitualmente correlacionadas entre sí, en un número menor de variables ficticias llamadas componentes.
Garantizar la independencia: a diferencia de las variables originales, los componentes resultantes son ortogonales (no están correlacionados), lo que elimina la redundancia de información.
Identificar dimensiones latentes: el ACP ayuda a descubrir conceptos no observados directamente. Por ejemplo, a partir de variables como “limpieza”, “amabilidad del personal” y “rapidez de respuesta”, el ACP puede revelar una dimensión única de “Calidad de Servicio”.
Optimizar análisis posteriores: estas nuevas dimensiones (puntuaciones factoriales o scores) sirven como input perfecto para técnicas de segmentación (cluster analysis) o modelos de regresión, evitando problemas de multicolinealidad.
Un ejemplo real: la escala E-S-QUAL
Para entender cómo el ACP se aplica en la vanguardia de la investigación de mercados, resulta útil observar el proceso de creación de escalas de medida profesionales como la E-S-QUAL. En marketing, conceptos como la “calidad de servicio electrónico” no pueden medirse con una sola pregunta; son fenómenos multidimensionales.
Este flujo de trabajo, basado en Parasuraman et al. (2005), resume el camino que se recorrerá en esta sesión:
Generación de ítems: se parte de una batería amplia de preguntas (a veces más de 100) que intentan cubrir todos los ángulos del fenómeno.
Refinamiento y purificación: es aquí donde el ACP es el protagonista. Mediante el análisis de las correlaciones y la eliminación de variables que no aportan valor (bajo MSA o bajas comunalidades), se “limpia” la escala.
Identificación de dimensiones: el ACP permite agrupar los ítems finales en dimensiones críticas. En el caso de E-S-QUAL, lo que empezó como una masa de datos terminó definiendo cuatro pilares: Eficiencia, Cumplimiento, Disponibilidad del Sistema y Privacidad.
Validación: una vez reducida la dimensionalidad, las puntuaciones de estos componentes se convierten en las variables que realmente explican la satisfacción y lealtad del cliente.
Reflexión para el analista: el ACP no es solo un algoritmo matemático; es el filtro que permite separar el ruido de la encuesta de las señales estratégicas del mercado. Sin esta reducción, resulta imposible construir modelos de gestión accionables.
Caso de ejemplo: HBAT
# Load the HBAT dataset; expss::read_spss preserves variable and value labels from SPSShbat <- expss::read_spss("data/hbat.sav")cat("Sample of working file:\n")utils::head(hbat, 10)# Select the metric perception variables for the analysis (x6 to x18)# These 13 variables represent customer perceptions about the companydata_pca <- hbat %>% dplyr::select(x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18)cat("\nSample of working file with selected variables:\n")utils::head(data_pca, 10)
Antes de proceder con el análisis, es necesario verificar dos condiciones previas: que el banco de datos cumple los requisitos mínimos de tamaño y que las variables muestran un grado suficiente de correlación entre sí. Si no se satisfacen estas condiciones, el ACP no conseguirá reducir la dimensionalidad de forma eficiente.
La primera verificación es la ratio observaciones/variables: se recomienda disponer de al menos 5 observaciones por variable, y preferiblemente 10. La segunda consiste en inspeccionar la matriz de correlaciones de Pearson para comprobar si existen suficientes coeficientes que superen el umbral de 0.30 (Hair et al., 2006).
Preparación del entorno y datos
Se trabaja con el datasethbat, que contiene 13 variables de percepción (x6 a x18) que se intentarán reducir a dimensiones de gestión.
# Display data structure dimensionscat("Data structure dimensions:\n")dim(data_pca)# Calculate the observations-to-variables ratiocat("\nObservations / variables ratio:\n")dim(data_pca)[1] /dim(data_pca)[2]# Preliminary inspection: Pearson correlation matrix# If there are no significant correlations (> 0.30), PCA is not justifiablecat("\nPearson correlation matrix:\n")round(stats::cor(data_pca), 3)
En una matriz de \(k \times k\) variables, el número de correlaciones únicas (la diagonal superior o inferior, sin contar la diagonal principal de 1s) viene dado por la fórmula:
\[ \frac{k^2 - k}{2} \]
Para revelar cuántas de estas son significativas (por ejemplo, con un \(|r| > 0.30\) según los criterios de Hair), se puede usar una lógica de filtrado sobre la matriz. Si el número de correlaciones significativas es bajo, el ACP no conseguirá reducir la información de forma eficiente.
# Extract only the upper triangle to avoid counting each pair twiceunique_cors <- stats::cor(data_pca)[upper.tri(stats::cor(data_pca))]cat("Number of unique correlation coefficients:\n")total_unique <-length(unique_cors)print(total_unique)cat("\nNumber of significant coefficients (|r| >= 0.30):\n")significant <-sum(abs(unique_cors) >=0.30)print(significant)cat("\n% of significant coefficients (|r| >= 0.30):\n")pct_significant <-round((significant / total_unique) *100, 0)print(pct_significant)
Number of unique correlation coefficients:
[1] 78
Number of significant coefficients (|r| >= 0.30):
[1] 21
% of significant coefficients (|r| >= 0.30):
[1] 27
Tras ejecutar el conteo, se observa que un número sustancial de correlaciones únicas supera el umbral de 0.30. Aunque no es una matriz extremadamente densa, este ~30% justifica proceder con el análisis. Sin embargo, este dato “tibio” ya anticipa que, probablemente, algunas variables no encajarán bien en la estructura común y deberán ser eliminadas en el proceso de depuración de la escala.
En investigación de mercados, bajo los criterios de Hair et al., un 30% de correlaciones significativas (con \(|r| > 0.30\)) suele ser el umbral mínimo aceptable para que el ACP tenga sentido. Si fuera menor, se estarían intentando resumir variables que no tienen nada en común, lo que daría lugar a una solución factorial muy pobre donde cada variable “va por libre”.
Adecuación a los requisitos del análisis
Una vez que la inspección visual sugiere que existe relación entre las variables, debe formalizarse estadísticamente si el banco de datos es apto para un ACP. No basta con que existan correlaciones significativas; estas deben ser lo suficientemente fuertes y el conjunto de datos lo suficientemente consistente. Este proceso se apoya en dos indicadores clásicos que actúan como “llave de paso” antes de proceder a la extracción de componentes:
El índice de Kaiser-Meyer-Olkin (KMO)
El KMO es una medida de la adecuación muestral. Compara los coeficientes de correlación observados con los coeficientes de correlación parcial. Si las correlaciones parciales son pequeñas en comparación con las correlaciones originales, el índice será alto, lo cual es la señal idónea.
Siguiendo la clasificación de Kaiser y Rice (1974), el valor obtenido se interpreta así:
KMO > 0.90: Maravilloso.
0.80 - 0.90: Meritorio.
0.70 - 0.80: Medio.
0.60 - 0.70: Mediocre (aceptado como límite inferior en investigación de mercados).
< 0.50: Inaceptable. En este caso el análisis no debe continuar sin antes depurar las variables.
La prueba de esfericidad de Bartlett
Esta prueba evalúa la aplicabilidad del análisis desde una perspectiva global de la matriz. Contrasta la hipótesis nula (\(H_0\)) de que la matriz de correlaciones es, en realidad, una matriz identidad (una matriz donde no hay correlación entre ninguna variable, solo de cada variable consigo misma).
Si el p-value\(\leq 0.05\): se rechaza la \(H_0\). Existe evidencia de que hay una estructura de correlación significativa y puede aplicarse el ACP con garantías.
Si el p-value > 0.05: no puede asegurarse que las variables estén relacionadas. En este escenario, el ACP no conseguirá reducir la dimensionalidad de forma efectiva porque no hay “patrones comunes” que agrupar.
El KMO informa sobre la calidad de la relación entre las variables para ser reducidas, mientras que Bartlett confirma la existencia de dicha relación.
# KMO: measures the proportion of variance that is common among variables# The diagonal of the output shows individual MSA values per variablecat("KMO (Kaiser-Meyer-Olkin) and individual MSA values:\n")psych::KMO(data_pca)# Bartlett's test of sphericity:# H0 = the correlation matrix is an identity matrix (no correlations at all)# A p-value < 0.05 is required to proceed with PCAcat("\nBartlett's test of sphericity:\n")psych::cortest.bartlett(stats::cor(data_pca), n =nrow(data_pca))
Proceso iterativo de purificación (MSA individual)
Siguiendo el flujo de trabajo de “purificación” del esquema de Parasuraman, no basta con el KMO global. Es necesario revisar los MSA individuales (la diagonal de la matriz KMO). Aquellas variables que no alcancen un mínimo (habitualmente 0.50) están “ensuciando” el modelo y deben eliminarse una a una, en orden de MSA más bajo a más alto, recalculando el KMO tras cada eliminación.
Se observa que x15 tiene el MSA más bajo (por debajo de 0.50). Se procede a eliminarla y se recalcula:
# Remove x15 — lowest individual MSA value, below the 0.50 thresholddata_pca <- data_pca %>% dplyr::select(-x15)# Recalculate KMO to check whether the overall adequacy has improvedcat("KMO after removing x15:\n")psych::KMO(data_pca)
Tras esta primera eliminación, se evidencia que x17 tiene el MSA más bajo entre las variables restantes (aún por debajo de 0.50). Se reitera el proceso:
# Remove x17 — now the lowest MSA in the remaining setdata_pca <- data_pca %>% dplyr::select(-x17)# Recalculate KMOcat("KMO after removing x17:\n")psych::KMO(data_pca)
Nótese —y este es el motivo por el que se elimina de una en una— que x11 se ha recuperado. No obstante, hay que vigilar esta variable, que emite señales de incoherencia con el resto del conjunto de datos.
Determinación del número de componentes
Una de las decisiones más críticas en el ACP es determinar cuántos componentes deben retenerse. No se trata de una decisión arbitraria, sino que debe estar respaldada por criterios estadísticos que equilibren la parsimonia (retener pocos componentes) y la capacidad explicativa (no perder demasiada información).
Para tomar esta decisión se recurre a tres criterios fundamentales:
Criterio de los autovalores (eigenvalues) > 1
El autovalor asociado a un componente principal mide la cantidad total de varianza que dicho componente es capaz de recoger. Dado que en el ACP se trabaja con variables estandarizadas (donde cada variable original tiene una varianza de 1), solo tiene sentido retener aquellos componentes que expliquen, al menos, la varianza de una sola variable.
Lógica: si un componente tiene un autovalor menor que 1, aporta menos información que una variable original aislada y, por tanto, no cumple su función de síntesis.
Porcentaje de la varianza explicada
Aunque el objetivo principal sea la reducción de datos, este proceso conlleva inevitablemente una pérdida de información (varianza).
Umbral recomendado: en el ámbito del marketing y la investigación de mercados, se suele aceptar una solución que recoja al menos el 60% de la varianza original (Hair et al., 2006). Ganar interpretabilidad no debe costar una pérdida excesiva de precisión.
Gráfico de sedimentación (scree plot)
Es la representación visual de los autovalores de cada componente ordenados de mayor a menor. Al analizar esta gráfica, se busca la regla del codo (elbow rule):
Interpretación: la extracción debe detenerse en el punto en que la curva se aplana significativamente. A partir de ese “codo”, añadir nuevos componentes no incrementa de forma relevante la varianza explicada, y la varianza de los factores únicos empieza a dominar sobre la de los factores comunes. Se retiene el número de componentes anterior al codo.
Determinar el número de componentes es un ejercicio de compromiso. Un modelo con demasiados componentes no reduce la complejidad, mientras que uno con muy pocos puede estar ignorando dimensiones estratégicas del mercado vitales para la toma de decisiones.
Extracción y rotación de componentes
Se utiliza el método de Componentes Principales con rotación Varimax. La rotación ortogonal Varimax simplifica la interpretación al minimizar el número de variables con cargas altas en un solo factor.
# Compute eigenvalues from the correlation matrix of the purified dataset# (x15 and x17 have been removed at this point)eigen_values <-eigen(stats::cor(data_pca))$values# Retain components with eigenvalue >= 1 (Kaiser's rule)# This replicates the default extraction behaviour of SPSSn_factors_auto <-sum(eigen_values >=1)cat("Components retained (eigenvalue >= 1):", n_factors_auto, "\n\n")# Run PCA with Varimax rotationpca_final <- psych::principal(data_pca, nfactors = n_factors_auto, rotate ="varimax")print(pca_final)
Components retained (eigenvalue >= 1): 4
Principal Components Analysis
Call: psych::principal(r = data_pca, nfactors = n_factors_auto, rotate = "varimax")
Standardized loadings (pattern matrix) based upon correlation matrix
RC1 RC2 RC3 RC4 h2 u2 com
x6 0.00 -0.01 -0.03 0.88 0.77 0.232 1.0
x7 0.06 0.87 0.05 -0.12 0.78 0.223 1.1
x8 0.02 -0.02 0.94 0.10 0.89 0.107 1.0
x9 0.93 0.12 0.05 0.09 0.88 0.119 1.1
x10 0.14 0.74 -0.08 0.01 0.58 0.424 1.1
x11 0.59 -0.06 0.15 0.64 0.79 0.213 2.1
x12 0.13 0.90 0.08 -0.16 0.86 0.141 1.1
x13 -0.09 0.23 -0.25 -0.72 0.64 0.359 1.5
x14 0.11 0.05 0.93 0.10 0.89 0.108 1.1
x16 0.86 0.11 0.08 0.04 0.77 0.234 1.1
x18 0.94 0.18 0.00 0.05 0.91 0.086 1.1
RC1 RC2 RC3 RC4
SS loadings 2.89 2.23 1.86 1.77
Proportion Var 0.26 0.20 0.17 0.16
Cumulative Var 0.26 0.47 0.63 0.80
Proportion Explained 0.33 0.26 0.21 0.20
Cumulative Proportion 0.33 0.59 0.80 1.00
Mean item complexity = 1.2
Test of the hypothesis that 4 components are sufficient.
The root mean square of the residuals (RMSR) is 0.04
with the empirical chi square 19.51 with prob < 0.3
Fit based upon off diagonal values = 0.98
Al revisar la salida, se observa que x11 presenta cargas cruzadas en los componentes RC1 y RC4. El indicador com (Complejidad de Hoffman), que se detalla en la siguiente sección, confirma el problema técnico: esta variable no carga de forma limpia en un solo componente y debe eliminarse para mejorar la interpretabilidad del modelo.
# Remove x11 due to cross-loadings (confirmed by high 'com' complexity index)data_pca <- data_pca %>% dplyr::select(-x11)# Recompute eigenvalues on the updated dataset before re-running PCA# (the eigenvalue structure changes after removing a variable)eigen_values <-eigen(stats::cor(data_pca))$valuesn_factors_auto <-sum(eigen_values >=1)cat("Components retained after removing x11 (eigenvalue >= 1):", n_factors_auto, "\n\n")# Re-run PCA with the purified 10-variable datasetpca_final <- psych::principal(data_pca, nfactors = n_factors_auto, rotate ="varimax")print(pca_final)
Components retained after removing x11 (eigenvalue >= 1): 4
Principal Components Analysis
Call: psych::principal(r = data_pca, nfactors = n_factors_auto, rotate = "varimax")
Standardized loadings (pattern matrix) based upon correlation matrix
RC1 RC2 RC3 RC4 h2 u2 com
x6 0.03 -0.01 -0.02 0.89 0.80 0.20 1.0
x7 0.06 0.87 0.05 -0.14 0.78 0.22 1.1
x8 0.02 -0.02 0.94 0.10 0.89 0.11 1.0
x9 0.93 0.10 0.06 0.08 0.89 0.11 1.0
x10 0.16 0.74 -0.08 0.04 0.58 0.42 1.1
x12 0.14 0.90 0.08 -0.17 0.86 0.14 1.1
x13 -0.10 0.23 -0.26 -0.73 0.66 0.34 1.5
x14 0.10 0.05 0.93 0.08 0.89 0.11 1.0
x16 0.89 0.10 0.09 0.07 0.81 0.19 1.1
x18 0.93 0.17 0.00 0.01 0.89 0.11 1.1
RC1 RC2 RC3 RC4
SS loadings 2.59 2.22 1.85 1.41
Proportion Var 0.26 0.22 0.18 0.14
Cumulative Var 0.26 0.48 0.67 0.81
Proportion Explained 0.32 0.28 0.23 0.17
Cumulative Proportion 0.32 0.60 0.83 1.00
Mean item complexity = 1.1
Test of the hypothesis that 4 components are sufficient.
The root mean square of the residuals (RMSR) is 0.04
with the empirical chi square 17.86 with prob < 0.085
Fit based upon off diagonal values = 0.98
Interpretación de la salida de psych::principal() en R
Al ejecutar el análisis en R, se obtiene una matriz que combina las cargas factoriales con indicadores de calidad del ajuste, todo integrado en una sola vista.
Las nuevas dimensiones: RC1, RC2, RC3…
¿Qué significan?: son los Componentes Rotados (del inglés Rotated Components). El número que los acompaña indica el orden de extracción.
Equivalencia en SPSS: corresponden a las columnas de la “Matriz de componentes rotados”.
Interpretación: los valores que se observan son las cargas factoriales (correlación entre la variable original y el componente). Se buscan cargas \(> 0.50\) para asignar una variable a un componente, siguiendo a Hair et al. (2006).
Los indicadores de calidad: h2, u2 y com
Estas tres columnas finales conforman el diagnóstico técnico de cada variable en el modelo:
h2 (Comunalidad):
Es la proporción de la varianza de la variable que es explicada por los componentes retenidos.
Equivalencia en SPSS: es la columna “Extracción” de la tabla de Comunalidades.
Umbral: se desean valores superiores a 0.50. Una \(h^2\) baja indica que la variable no comparte información con las demás y “ensucia” el análisis.
u2 (Unicidad):
Es el inverso de la comunalidad (\(1 - h^2\)).
Representa la varianza específica de la variable que no ha podido ser capturada por los componentes comunes. Cuanto más alto sea \(u^2\), menos útil es esa variable para definir conceptos generales.
com (Complejidad de Hoffman):
Este índice es una aportación de R que no aparece de forma directa en SPSS. Mide cuántos componentes “comparten” la carga de esa variable.
Interpretación: un valor cercano a 1 indica que la variable carga de forma limpia en un solo componente; un valor cercano a 2 o superior indica una variable “conflictiva” que carga en varios componentes a la vez.
Utilidad: es el indicador clave para detectar cargas cruzadas. Una complejidad alta es señal inequívoca de que la variable debe eliminarse para mejorar la interpretabilidad del modelo (como ocurrió con x11).
Comunalidades SPSS / unicidad R
SPSS muestra la comunalidad, inverso de la unicidad. R también la calcula y se puede observar su relación con este sencillo script.
# Communality and uniqueness are complementary: they always sum to 1cat("Communality (h2):\n")print(pca_final$communality)cat("\nUniqueness (u2):\n")print(pca_final$uniquenesses)cat("\nVerification — communality + uniqueness = 1:\n")print(pca_final$communality + pca_final$uniquenesses)
Aunque resulte improbable que falle en esta etapa, conviene testar de nuevo los indicadores básicos de adecuación sobre el conjunto de datos ya depurado, para disponer de documentación completa del proceso:
# Final dimensions of the purified datasetcat("Final data structure dimensions:\n")dim(data_pca)cat("\nFinal observations / variables ratio:\n")dim(data_pca)[1] /dim(data_pca)[2]# Final KMO and individual MSA valuescat("\nFinal KMO and MSA:\n")psych::KMO(data_pca)# Final Bartlett's testcat("\nFinal Bartlett's test of sphericity:\n")psych::cortest.bartlett(stats::cor(data_pca), n =nrow(data_pca))
Final data structure dimensions:
[1] 100 10
Final observations / variables ratio:
[1] 10
Final KMO and MSA:
Kaiser-Meyer-Olkin factor adequacy
Call: psych::KMO(r = data_pca)
Overall MSA = 0.67
MSA for each item =
x6 x7 x8 x9 x10 x12 x13 x14 x16 x18
0.61 0.64 0.52 0.69 0.81 0.63 0.74 0.53 0.83 0.72
Final Bartlett's test of sphericity:
$chisq
[1] 502.9739
$p.value
[1] 1.130404e-78
$df
[1] 45
Para obtener una vista más limpia de la matriz de cargas —replicando el comportamiento visual de SPSS—, se utiliza el argumento cutoff para suprimir cargas pequeñas:
# Rotated component matrix — suppress loadings below 0.30 to match SPSS output styleprint(pca_final$loadings, cutoff =0.3, sort =TRUE)
Criterios de significación de las cargas factoriales
En la práctica habitual, se suelen aceptar cargas factoriales superiores a 0.50 como indicador de una relación sólida. Sin embargo, la evidencia científica (Hair et al., 2006; Stevens, 1992) indica que la “importancia” de una carga no es un valor absoluto, sino que depende directamente del rigor estadístico impuesto por el tamaño de la muestra (\(n\)).
Relación entre carga factorial y tamaño muestral
A medida que aumenta el tamaño de la muestra, el error estándar disminuye, lo que permite aceptar como significativas cargas factoriales más pequeñas:
Para muestras pequeñas (\(n=50\)), se necesitan cargas muy potentes (0.75) para asegurar que la relación no es fruto del azar.
En el dataset actual (hbat.sav), con \(n=100\), el umbral de significación estadística se sitúa en 0.55.
Si se trabajara con muestras grandes (\(n > 350\)), una carga de 0.30 ya podría considerarse significativa.
Relación entre carga factorial y el número de variables
Stevens (1992) sugiere que el punto de corte debe ajustarse también en función del número de variables analizadas (\(p\)), para mantener un nivel de significación estable (generalmente \(\alpha = 0.01\)):
Variables (\(p\))
Carga mínima (\(n=50\))
Carga mínima (\(n=100\))
10
0.722
0.512
20
0.754
0.534
30
0.780
0.552
Implicación estratégica: dado que la escala original tiene 13 variables y 100 casos, el criterio de Stevens sitúa el punto de corte ideal ligeramente por encima de 0.51. Esto refuerza la decisión de haber sido estrictos en la purificación inicial de la escala.
Interpretación de los nuevos componentes
A partir de la matriz rotada, se identifican las dimensiones subyacentes:
C1: Servicio postventa: (x9: Resolución de quejas, x18: Rapidez de entrega, x16: Pedidos).
C3: Soporte técnico y postventa: (x8: Apoyo técnico, x14: Garantía).
C4: Valor de producto: (x6: Calidad producto, x13: Competitividad precios).
# Factor diagram — visual summary of component loadingspsych::fa.diagram(pca_final, main ="Análisis de componentes principales")
Las puntuaciones factoriales
Tras identificar las dimensiones latentes (como “Servicio postventa” o “Calidad de producto”), el siguiente paso es cuantificar cómo puntúa cada cliente en cada una de esas nuevas dimensiones. Para ello se calculan los scores o puntuaciones factoriales.
¿Qué son exactamente las puntuaciones?
Si el ACP es un modelo donde cada componente se explica mediante una combinación lineal de las variables originales, la puntuación factorial es el valor numérico que obtiene cada individuo (encuestado) en ese nuevo eje o dimensión.
Cada cliente de la base de datos deja de tener solo sus respuestas originales (x6, x7…) para poseer 4 nuevos valores correspondientes a los 4 componentes extraídos.
Estas puntuaciones están estandarizadas: tienen media 0 y varianza 1. Por tanto, un cliente con un score de +1.5 en “Servicio postventa” está muy por encima de la media de satisfacción en esa área, mientras que uno con -2.0 representa un punto de fricción crítico para la empresa.
Utilidad estratégica: puente hacia la segmentación (cluster)
La creación de estas variables no es un fin en sí misma, sino el combustible para análisis avanzados en la toma de decisiones:
Segmentación de mercado (análisis cluster): es la aplicación principal. En lugar de segmentar clientes por variables aisladas (que suelen estar correlacionadas y “pesan” doble en el algoritmo), se utilizan los scores. Al ser ortogonales (independientes entre sí), se garantiza que cada dimensión de segmentación es única, lo que permite identificar grupos de clientes con necesidades claramente diferenciadas (ej. “los sensibles al precio” vs. “los que valoran el soporte técnico”).
Modelos de regresión: si se quisiera predecir la “Intención de compra” (x19) utilizando las percepciones, usar las 13 variables originales causaría problemas de multicolinealidad. Al usar los scores, este problema técnico se resuelve de raíz, obteniendo coeficientes mucho más estables y fiables.
Mapas de posicionamiento: es posible cruzar dos componentes (ej. Eje X: Calidad vs. Eje Y: Precio) y situar a cada cliente (o la media de un segmento) en un mapa bidimensional para visualizar la ventaja competitiva de la marca.
# Extract factor scores and append them to the original dataset with descriptive nameshbat_scores <-cbind(hbat, pca_final$scores) %>% dplyr::rename(Post_Sale_Service = RC1,Commercial_Activity = RC2,Technical_Support = RC3,Product_Value = RC4 )# Inspect the new score variables for the first few caseshbat_scores %>% dplyr::select(id, Post_Sale_Service:Product_Value) %>% utils::head()
# 1. Obtain the regression weights from the PCA outputweights <-as.matrix(pca_final$weights)# 2. Standardise the purified data (mandatory step before applying weights)# scale() subtracts the mean and divides by the standard deviation for each columndata_scaled <-scale(data_pca)# 3. Manual calculation for the first record (Row 1)# Multiply row 1 of the standardised data by the weights for RC1score_manual_1 <-sum(data_scaled[1, ] * weights[, "RC1"])# 4. Compare with the automatically computed scorescore_automatic_1 <- pca_final$scores[1, "RC1"]cat("Manual calculation (standardised data):", score_manual_1,"\nResult from psych::principal():", score_automatic_1,"\n")
Manual calculation (standardised data): 0.2946283
Result from psych::principal(): 0.2946283
Representación gráfica
El mapa de individuos
Al visualizar un mapa cartesiano (biplot o gráfico de individuos) tras un ACP, se proyectan los encuestados sobre el nuevo espacio vectorial definido por los componentes:
El eje X (horizontal) representa las puntuaciones del Componente 1.
El eje Y (vertical) representa las puntuaciones del Componente 2.
La posición exacta de un cliente en ese mapa es el reflejo directo de sus scores. Un individuo situado en el extremo derecho del mapa tiene un score muy alto (positivo) en el primer componente.
¿Por qué es útil esta visualización?
Detección de outliers: los puntos que quedan muy aislados en los márgenes del mapa son individuos con perfiles extremos (puntuaciones factoriales muy altas o muy bajas), lo que permite identificar casos atípicos que podrían distorsionar el análisis.
Identificación visual de clústeres: si los puntos forman nubes o grupos naturales en el mapa, se está ante la evidencia visual de que existen segmentos de mercado con percepciones similares. El análisis de conglomerados (cluster) simplemente pondrá nombre y límites matemáticos a esas agrupaciones que ya se intuyen mediante los scores.
Relación con las variables (vectores): al superponer las variables originales (vectores), puede observarse hacia dónde “tira” cada componente. Si un individuo está situado en la misma dirección que el vector “Calidad de Producto”, se deduce que ese cliente puntúa alto en esa percepción sin necesidad de consultar la base de datos original.
# 1. Prepare the data frame with scoresscores_df <-as.data.frame(pca_final$scores)scores_df$client_id <-row.names(scores_df) # Label using row numbers# 2. Scatter plot of individuals in the two-component spaceggplot2::ggplot(scores_df, ggplot2::aes(x = RC1, y = RC2, label = client_id)) + ggplot2::geom_hline(yintercept =0, linetype ="dashed", color ="grey70") + ggplot2::geom_vline(xintercept =0, linetype ="dashed", color ="grey70") + ggplot2::geom_point(color ="#2E5077", size =2, alpha =0.6) + ggrepel::geom_text_repel(size =3, color ="grey30",max.overlaps =20, segment.color ="grey80" ) + ggplot2::theme_minimal() + ggplot2::labs(title ="Mapa de individuos",subtitle ="Posicionamiento de cada encuestado en el espacio factorial",x ="Puntuaciones componente 1 (RC1)",y ="Puntuaciones componente 2 (RC2)" )
Mapa de posicionamiento de los clientes basado en puntuaciones factoriales
¿ACP o AFP?
El analista de mercados debe distinguir entre estas dos aproximaciones. Aunque ambas buscan reducir datos, su punto de partida difiere de forma fundamental:
Análisis de componentes principales (ACP)
Es un enfoque matemático. Su objetivo es explicar la máxima varianza total posible.
Filosofía: asume que la varianza de una variable es “pura” (comunalidad inicial = 1).
Uso en marketing: es la técnica estándar para reducir cuestionarios largos a unos pocos índices operativos (puntuaciones) que posteriormente se utilizarán para segmentar. Se busca síntesis.
Análisis factorial (AFP o factores principales)
Es un enfoque estadístico y causal. Su objetivo es explicar la covarianza (la varianza compartida).
Filosofía: asume que las variables observadas son solo indicadores de un factor latente no observado (ej. “la Inteligencia” o “la Personalidad”). La varianza se divide en varianza común y varianza única (error). Las comunalidades iniciales son menores a 1.
Uso en investigación: es típico en psicología o sociología, donde el interés no es reducir datos, sino identificar la estructura teórica subyacente que causa las respuestas.
Comparativa de resultados ACP / AFP
Para contrastar la diferencia, se ejecutan ambos modelos sobre el mismo dataset depurado (data_pca). Se puede observar cómo cambian las cargas factoriales y las comunalidades (\(h^2\)).
# 1. PCA — uses 1s on the diagonal of the correlation matrixacp_res <- psych::principal(data_pca, nfactors =4, rotate ="varimax")# 2. EFA / PAF — estimates communalities iteratively (method = 'pa')afp_res <- psych::fa(data_pca, nfactors =4, rotate ="varimax", fm ="pa")cat("Principal component analysis (ACP):\n")print(acp_res)cat("\nPrincipal axis factoring (AFP):\n")print(afp_res)
Principal component analysis (ACP):
Principal Components Analysis
Call: psych::principal(r = data_pca, nfactors = 4, rotate = "varimax")
Standardized loadings (pattern matrix) based upon correlation matrix
RC1 RC2 RC3 RC4 h2 u2 com
x6 0.03 -0.01 -0.02 0.89 0.80 0.20 1.0
x7 0.06 0.87 0.05 -0.14 0.78 0.22 1.1
x8 0.02 -0.02 0.94 0.10 0.89 0.11 1.0
x9 0.93 0.10 0.06 0.08 0.89 0.11 1.0
x10 0.16 0.74 -0.08 0.04 0.58 0.42 1.1
x12 0.14 0.90 0.08 -0.17 0.86 0.14 1.1
x13 -0.10 0.23 -0.26 -0.73 0.66 0.34 1.5
x14 0.10 0.05 0.93 0.08 0.89 0.11 1.0
x16 0.89 0.10 0.09 0.07 0.81 0.19 1.1
x18 0.93 0.17 0.00 0.01 0.89 0.11 1.1
RC1 RC2 RC3 RC4
SS loadings 2.59 2.22 1.85 1.41
Proportion Var 0.26 0.22 0.18 0.14
Cumulative Var 0.26 0.48 0.67 0.81
Proportion Explained 0.32 0.28 0.23 0.17
Cumulative Proportion 0.32 0.60 0.83 1.00
Mean item complexity = 1.1
Test of the hypothesis that 4 components are sufficient.
The root mean square of the residuals (RMSR) is 0.04
with the empirical chi square 17.86 with prob < 0.085
Fit based upon off diagonal values = 0.98
Principal axis factoring (AFP):
Factor Analysis using method = pa
Call: psych::fa(r = data_pca, nfactors = 4, rotate = "varimax", fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
PA1 PA2 PA3 PA4 h2 u2 com
x6 0.05 -0.06 0.02 0.65 0.43 0.575 1.0
x7 0.07 0.78 0.03 -0.14 0.63 0.367 1.1
x8 0.02 -0.02 0.89 0.12 0.81 0.191 1.0
x9 0.91 0.12 0.06 0.10 0.86 0.140 1.1
x10 0.17 0.53 -0.05 -0.05 0.32 0.683 1.2
x12 0.12 0.97 0.06 -0.15 0.99 0.011 1.1
x13 -0.10 0.21 -0.21 -0.58 0.44 0.559 1.6
x14 0.10 0.05 0.88 0.10 0.80 0.201 1.1
x16 0.79 0.12 0.09 0.10 0.66 0.340 1.1
x18 0.92 0.17 0.01 0.01 0.88 0.115 1.1
PA1 PA2 PA3 PA4
SS loadings 2.39 1.95 1.63 0.85
Proportion Var 0.24 0.19 0.16 0.08
Cumulative Var 0.24 0.43 0.60 0.68
Proportion Explained 0.35 0.29 0.24 0.12
Cumulative Proportion 0.35 0.64 0.88 1.00
Mean item complexity = 1.1
Test of the hypothesis that 4 factors are sufficient.
df null model = 45 with the objective function = 5.3 with Chi Square = 502.97
df of the model are 11 and the objective function was 0.08
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic n.obs is 100 with the empirical chi square 0.44 with prob < 1
The total n.obs was 100 with Likelihood Chi Square = 7.45 with prob < 0.76
Tucker Lewis Index of factoring reliability = 1.033
RMSEA index = 0 and the 90 % confidence intervals are 0 0.074
BIC = -43.21
Fit based upon off diagonal values = 1
Measures of factor score adequacy
PA1 PA2 PA3 PA4
Correlation of (regression) scores with factors 0.97 0.99 0.94 0.74
Multiple R square of scores with factors 0.93 0.97 0.88 0.55
Minimum correlation of possible factor scores 0.86 0.95 0.76 0.11
Al visualizar ambos modelos con psych::fa.diagram(), el estilo de las flechas comunica la naturaleza de la carga factorial:
Color rojo y línea punteada: indica una carga factorial negativa. La flecha hacia x13 (Competitividad de precios) es roja porque tiene una correlación negativa con su componente: a medida que aumenta el valor del componente, el valor percibido en x13 disminuye (o viceversa).
Color negro y línea sólida: indica una carga factorial positiva. La mayoría de variables (x6, x9, x12…) muestran este comportamiento, lo que significa que “suman” positivamente a la definición del componente.
Grosor de la flecha: representa la magnitud (el valor absoluto) de la carga. Cuanto más gruesa, más importante es esa variable para definir ese factor.
# Visual comparison of ACP and AFP diagrams side-by-sidepsych::fa.diagram(acp_res, main ="Diagrama ACP")psych::fa.diagram(afp_res, main ="Diagrama AFP")
Si se observa que x13 (Competitividad de precios) presenta una flecha roja, el mensaje estratégico es claro: ese componente se mueve de forma inversa al precio competitivo. Los clientes que perciben a HBAT como una empresa de altísima calidad y servicio (puntuaciones altas en el componente) tienden a puntuar bajo en “precios competitivos” (perciben que la empresa es cara).
Es un indicador visual excelente del concepto de polaridad de los ítems y de cómo una dimensión puede estar formada por variables que se mueven en direcciones opuestas.
La dirección de las flechas no es meramente estética; representa la relación de causalidad (o dirección de formación del dato) entre lo que se observa (las preguntas del cuestionario) y lo que se calcula (los componentes o factores).
Comentarios finales
En ACP (análisis de componentes principales)
Dirección: Indicador\(\rightarrow\) Componente
En el ACP, el componente es una combinación lineal de las variables originales. El componente no “existe” por sí mismo antes de los datos, sino que se “fabrica” sumando la aportación de cada variable original.
Lógica: las variables originales son las que causan o componen el componente.
Metáfora: al preparar una receta combinada, los ingredientes individuales van hacia la batidora para formar el producto final. Si se altera un ingrediente, el resultado cambia. El componente es un “resumen” de los datos.
ACP (flechas hacia adentro): las variables “empujan” para crear un índice resumen. Se denomina modelo formativo.
En AFP (análisis de factores principales)
Dirección: Factor\(\rightarrow\) Indicador
En el análisis factorial se trabaja con el concepto de variable latente. Se asume que el factor (ej. “Satisfacción”) existe en la mente del consumidor y es lo que provoca que responda de una determinada manera a las preguntas.
Lógica: el factor es la causa de las respuestas observadas. Si un cliente está muy satisfecho (factor), eso “causará” que puntúe alto en “calidad”, “limpieza” y “precio”.
El error (Unicidad): como el factor causa la respuesta pero no la explica al 100%, cada flecha que sale del factor hacia el indicador va acompañada de un margen de “error” o “especificidad” que representa lo que el factor no pudo explicar de esa pregunta.
AFP (flechas hacia afuera): el concepto latente “se refleja” en las respuestas de los clientes. Se denomina modelo reflectivo.