# Análisis de correspondencias
```{r}
#| echo: false
#| message: false
#| warning: false
source("script.R")
```
## Introducción: de las tablas a los mapas
El capítulo anterior mostró cómo el test chi-cuadrado (χ²) responde a una
pregunta fundamental: ¿existe una asociación estadísticamente significativa
entre dos variables categóricas? La prueba devuelve un p-valor, una respuesta de
"sí" o "no" a la hipótesis de independencia. Pero una vez confirmada la
existencia de una relación, el test chi-cuadrado se queda corto: no informa
sobre la *naturaleza* ni la *estructura* de esa asociación. Si la preferencia
por una marca está asociada al nivel socioeconómico del comprador, ¿qué marcas
se asocian con qué niveles? ¿Qué marcas compiten más directamente entre sí en la
mente de los consumidores?
Para responder a estas preguntas hace falta ir más allá de un único número y
visualizar la "forma" de la relación. Se necesita una técnica que transforme la
tabla numérica de frecuencias en un mapa gráfico e intuitivo. Esa técnica es el
**análisis de correspondencias (AC)**. Como lo describió el pionero de la
técnica, Jean-Paul Benzécri, su objetivo no es modelar los datos ni probar
hipótesis de forma formal, sino representarlos de la manera más fiel posible en
un espacio de baja dimensión para que sus patrones puedan "verse"
[@Benzecri1992].
El análisis de correspondencias es, en esencia, una técnica de **visualización
de datos para tablas de contingencia**. Su valor reside en su capacidad de crear
"mapas perceptuales" que permiten interpretar la estructura de las asociaciones
entre categorías. En lugar de leer una tabla de números, se observa un gráfico
donde la proximidad entre puntos informa sobre la fuerza de su relación. Como
señalan @Uriel2005 [p. 287], el AC *"permite analizar la asociación o similitud
entre las categorías de las variables, así como la asociación entre los
individuos, representándolos conjuntamente en un espacio de pocas dimensiones"*.
::: callout-tip
## Una nota para quien viene de SPSS
A diferencia de las técnicas de los capítulos anteriores, el análisis de
correspondencias no forma parte del módulo estándar de SPSS (solo está
disponible en el módulo opcional *Categories*, poco extendido en la práctica).
Por eso, en este capítulo no se busca una réplica exacta de un procedimiento de
SPSS, sino que se sigue el estándar de referencia en R para esta técnica: el
ecosistema `FactoMineR` / `factoextra`.
:::
Esta primera sección se centra en el **análisis de correspondencias simple
(ACS)**, aplicado al caso más básico: una tabla de contingencia entre dos
variables cualitativas.
## ¿Qué es el análisis de correspondencias simple?
El ACS es una técnica de interdependencia diseñada para analizar la relación
entre las categorías de dos variables nominales. Su objetivo es **reducir la
dimensionalidad** de una tabla de contingencia para representarla en un espacio
geométrico de pocas dimensiones (normalmente dos), perdiendo la menor cantidad
de información posible [@Greenacre2017].
Para entender su funcionamiento de forma intuitiva, conviene introducir dos
conceptos clave: los **perfiles** y la **distancia chi-cuadrado**.
1. **Perfiles de fila y de columna**: en una tabla que cruza "marcas de coche"
(filas) con "atributos" (columnas), el **perfil de una fila** (por ejemplo,
"Volvo") es la distribución de sus frecuencias a lo largo de las columnas:
qué porcentaje de las menciones de Volvo se asocia con "seguridad", qué
porcentaje con "diseño", etc. De forma análoga, el **perfil de una columna**
(por ejemplo, "deportivo") indica qué porcentaje de las menciones de
"deportivo" corresponde a cada marca. El ACS compara la similitud de estos
perfiles: dos marcas con perfiles de atributos muy similares se
representarán próximas en el mapa final [@Abdi2007ca].
2. **Distancia chi-cuadrado**: para medir la disimilitud entre perfiles, el ACS
no utiliza la distancia euclídea estándar, sino la **distancia
chi-cuadrado**. La idea clave es que esta distancia da más peso a las
diferencias en las categorías menos frecuentes: si dos marcas difieren en un
atributo muy común, esa diferencia importa menos que si difieren en un
atributo raro y distintivo. Esta ponderación es lo que conecta el ACS con el
test χ² y lo hace tan efectivo para resaltar las asociaciones que definen la
estructura de la tabla [@Lebart2006].
El resultado final del análisis es un conjunto de coordenadas para cada
categoría de fila y de columna, que se usan para construir el mapa perceptual.
## El objetivo: crear un mapa perceptual
El resultado más valioso del ACS es el **mapa perceptual** (o *biplot*): un
gráfico de dispersión que representa simultáneamente las categorías de filas y
columnas en un espacio de dos (o, en ocasiones, tres) dimensiones. Su
interpretación se rige por unas reglas específicas:
- **Proximidad entre puntos del mismo conjunto**: la distancia entre dos puntos
de fila (o de columna) mide su similitud. Si dos marcas están muy cerca en el
mapa, tienen perfiles de atributos parecidos y son percibidas de forma
similar. Si dos atributos están cerca, tienden a aplicarse a las mismas
marcas.
- **Asociación entre puntos de diferentes conjuntos**: la proximidad entre un
punto de fila y uno de columna sugiere una asociación fuerte entre ambos. Si
"Volvo" aparece cerca de "Seguridad", indica una conexión fuerte entre esa
marca y ese atributo.
- **Interpretación del origen (0,0)**: el centro del mapa representa el "perfil
promedio" de la tabla. Las categorías cercanas al origen son menos
distintivas; las que se alejan son las más particulares y las que más
contribuyen a definir la estructura de la asociación.
- **Interpretación de los ejes**: cada dimensión del mapa representa un factor
subyacente que resume una parte de la relación en la tabla. La primera
dimensión es la más importante, porque captura la mayor parte de la **inercia
total**: un concepto análogo a la varianza en el análisis de componentes
principales, que mide la dispersión total de los perfiles respecto al perfil
promedio [@Nenadic2007]. La segunda dimensión captura la mayor parte de la
inercia restante, y así sucesivamente. Al interpretar el mapa, es habitual
intentar dar un nombre a cada eje (por ejemplo, "Eje 1: lujo frente a
economía").
## Pasos fundamentales en un análisis de correspondencias
Conceptualmente, un ACS sigue estos pasos:
1. **Formulación del problema**: definir qué relación se quiere explorar (por
ejemplo, el posicionamiento de un conjunto de marcas en el mercado).
2. **Construcción de la tabla de contingencia**: los datos de entrada deben ser
una tabla de frecuencias que cruce dos variables categóricas.
3. **Evaluación de la idoneidad**: antes de mapear la asociación, conviene
confirmar que existe, mediante un **test chi-cuadrado** sobre la tabla. Si
el resultado no es significativo (p \> 0,05), no tiene sentido realizar un
ACS, ya que no hay estructura real que visualizar [@Hair2019].
4. **Determinación del número de dimensiones**: el análisis calcula tantas
dimensiones como el mínimo entre (número de filas − 1) y (número de columnas
− 1). Se decide cuántas retener según la inercia que expliquen; no hay una
regla fija, pero se busca explicar un porcentaje sustancial (por ejemplo,
\>70%) con el menor número de dimensiones posible.
5. **Interpretación del mapa y las contribuciones**: se interpreta el mapa
perceptual siguiendo las reglas anteriores, y se analizan las tablas de
**contribución** de cada punto a la inercia de cada dimensión, para
identificar qué categorías son más relevantes en cada eje.
## ¿Cuándo utilizar el ACS? Aplicaciones típicas
El ACS es especialmente popular en ciencias sociales e investigación de
mercados:
- **Marketing (posicionamiento de marca)**: su aplicación estrella. Permite
visualizar cómo los consumidores perciben un conjunto de marcas competidoras
en relación con una serie de atributos, identificando nichos de mercado,
competidores directos y oportunidades estratégicas [@Hoffman1986].
- **Sociología y ciencias políticas**: para analizar la relación entre intención
de voto y variables demográficas, creando mapas que visualizan el perfil de
los votantes de cada partido [@Clausen1998].
- **Ecología**: para estudiar la asociación entre la presencia de especies y
distintos hábitats o condiciones ambientales [@Sourial2010].
- **Salud pública**: para explorar la relación entre estilos de vida y la
prevalencia de ciertas condiciones de salud [@Weller1988].
## Aplicación práctica: mapa perceptual de marcas de automóviles
Se desarrolla a continuación un caso práctico completo, siguiendo los pasos que
un analista daría en un proyecto real.
### Objetivo de la investigación
Una consultora de investigación de mercados ha sido contratada por un grupo de
fabricantes de automóviles para entender el **posicionamiento competitivo** en
la mente de los consumidores. Se ha encuestado a 500 personas, presentándoles
una lista de 7 marcas y 7 atributos; para cada marca debían elegir el atributo
que mejor la describía.
> **Objetivo**: visualizar el posicionamiento relativo de las 7 marcas en
> función de los 7 atributos, identificando qué marcas se perciben como
> similares, qué atributos definen a cada marca y cuál es la estructura general
> del mercado.
### Preparación de los datos
El primer paso es construir la **tabla de contingencia** que cruza las marcas
(filas) con los atributos (columnas), donde cada celda contiene la frecuencia
con la que un atributo fue asociado a una marca.
```{r}
#| echo: true
# Contingency table: brands (rows) x attributes (columns)
brand_data <- matrix(c(
# Economic, Reliability, Safety, Family, Luxury, Prestige, Sporty
10, 50, 60, 45, 5, 10, 5, # Toyota
15, 65, 55, 50, 2, 8, 3, # Honda
40, 30, 20, 25, 1, 2, 5, # Kia
25, 20, 30, 35, 10, 15, 10, # Ford
5, 10, 70, 20, 60, 55, 15, # Mercedes
2, 5, 15, 10, 55, 65, 75, # BMW
4, 8, 20, 15, 50, 60, 50 # Audi
), nrow = 7, byrow = TRUE)
rownames(brand_data) <- c("Toyota", "Honda", "Kia", "Ford", "Mercedes", "BMW", "Audi")
colnames(brand_data) <- c("Economic", "Reliability", "Safety", "Family",
"Luxury", "Prestige", "Sporty")
brand_data
```
#### Paso previo indispensable: comprobar la asociación
No tiene sentido realizar un análisis de correspondencias si no existe una
asociación significativa entre las variables. El primer paso analítico es, por
tanto, un **test chi-cuadrado de independencia**.
- **H₀**: la elección del atributo es independiente de la marca.
- **H₁**: existe una asociación entre la marca y el atributo percibido.
```{r}
#| echo: true
chi2_test <- chisq.test(brand_data)
chi2_test
```
El p-valor (`r format(chi2_test$p.value, scientific = TRUE, digits = 3)`) es muy
inferior a 0,05: se **rechaza H₀**. Existe una fuerte asociación entre marcas y
atributos, lo que justifica el uso del análisis de correspondencias para
explorar la estructura de esa asociación.
### Ejecución del análisis de correspondencias
#### Una primera aproximación: el paquete `ca`
El paquete `ca` es la referencia clásica del análisis de correspondencias en R y
ofrece una tabla de autovalores muy directa:
```{r}
#| echo: true
#| warning: false
ca_result <- ca::ca(brand_data)
summary(ca_result)
```
Lo más relevante de esta salida es la tabla de **autovalores (eigenvalues)**:
- **Inercia total**: 0,498. Este valor, relacionado con el estadístico
chi-cuadrado, representa la cantidad total de "asociación" en la tabla.
- **Dimensiones**: las dos primeras explican un 56,5% y un 32,7% de la inercia
respectivamente. En conjunto, **las dos primeras dimensiones capturan el 89,2%
de la información total de la tabla**: un resultado excelente que confirma que
un mapa 2D será una representación muy fiel de los datos.
#### El análisis completo: `FactoMineR` y `factoextra`
Para la interpretación visual se utiliza el ecosistema `FactoMineR` /
`factoextra`, que ofrece una sintaxis unificada y visualizaciones de alta
calidad basadas en `ggplot2`. Es el que se emplea durante el resto del capítulo:
```{r}
#| echo: true
#| warning: false
# graph = FALSE avoids the default plot; visualizations are built manually below
ca_model <- FactoMineR::CA(brand_data, graph = FALSE)
```
### Visualización e interpretación de resultados
#### Gráfico de inercia (scree plot)
Una forma visual de confirmar la decisión de retener dos dimensiones es el
gráfico de sedimentación, que muestra el porcentaje de inercia explicado por
cada dimensión:
```{r}
#| label: fig-scree-ca
#| fig-cap: Porcentaje de inercia explicado por dimensión
#| echo: true
factoextra::fviz_eig(ca_model, addlabels = TRUE, ylim = c(0, 60),
barfill = "#076fa2", barcolor = "#076fa2") +
ggplot2::theme_minimal()
```
El gráfico confirma que las dos primeras dimensiones son, con diferencia, las
más importantes; a partir de la tercera, la contribución cae notablemente (la
"caída del codo").
#### El mapa perceptual (biplot)
Antes de construir el mapa que representa simultáneamente marcas y atributos,
conviene fijar las reglas geométricas de lectura, porque cambian según qué tipo
de puntos se comparen.
> **Regla 1 — mismo conjunto (fila-fila o columna-columna)**: se interpreta por
> **proximidad euclídea**. Dos marcas cercanas tienen perfiles de atributos
> similares y compiten directamente. Dos atributos cercanos se aplican a las
> mismas marcas.
>
> **Regla 2 — conjuntos diferentes (fila-columna)**: no se interpreta por
> proximidad, sino por el **ángulo** formado por los vectores que van del origen
> a cada punto. Un ángulo pequeño (\< 90°) indica asociación positiva; un ángulo
> cercano a 180° indica asociación negativa o "repulsión".
Esta es la razón por la que las categorías cercanas al origen son "promedio":
sus vectores son cortos y no apuntan con fuerza en ninguna dirección particular.
```{r}
#| label: fig-biplot-ca
#| fig-cap: Mapa perceptual de marcas y atributos de automóviles
#| echo: true
factoextra::fviz_ca_biplot(ca_model,
repel = TRUE,
col.row = "#076fa2",
col.col = "#c40000",
title = "Mapa perceptual de marcas y atributos") +
ggplot2::theme_minimal()
```
**Lectura del mapa**:
1. **Dimensión 1 (eje horizontal, 56,5% de la inercia)**: el eje más
importante. A la derecha aparecen las marcas de alta gama (Mercedes, BMW,
Audi) junto a "Lujo", "Prestigio" y "Deportivo". A la izquierda, las marcas
de volumen (Toyota, Honda, Kia) junto a "Fiabilidad", "Económico" y
"Familiar". El eje representa la dimensión **"practicidad y economía frente
a lujo y prestigio"**.
2. **Dimensión 2 (eje vertical, 32,7% de la inercia)**: introduce un matiz
secundario. Hacia arriba aparecen BMW y "Deportivo"; hacia abajo, Mercedes y
"Seguridad". El eje diferencia, dentro del segmento de lujo, entre
**"deportividad y seguridad/confort"**.
3. **Similitud entre marcas (proximidad)**: Toyota y Honda están muy próximas
(competidoras directas); BMW y Audi también compiten en el mismo terreno.
Kia y Mercedes ocupan posiciones únicas y bien diferenciadas. Ford se sitúa
cerca del origen, con un posicionamiento menos definido.
4. **Asociaciones clave (ángulos desde el origen)**: Mercedes, Lujo y Seguridad
forman un ángulo muy pequeño entre sí; BMW y Deportivo están casi en la
misma línea desde el origen (asociación casi exclusiva); Toyota, Honda,
Fiabilidad y Familiar comparten dirección general; Kia y Económico apuntan
en la misma dirección.
#### Análisis de contribuciones
Para confirmar estas interpretaciones visuales, se examina qué categorías
contribuyen más a cada dimensión:
```{r}
#| label: fig-contrib-ca
#| fig-cap: Contribución de marcas y atributos a las dos primeras dimensiones
#| echo: true
factoextra::fviz_contrib(ca_model, choice = "row", axes = 1:2,
fill = "#076fa2", color = "#076fa2") +
ggplot2::theme_minimal()
```
```{r}
#| echo: true
factoextra::fviz_contrib(ca_model, choice = "col", axes = 1:2,
fill = "#c40000", color = "#c40000") +
ggplot2::theme_minimal()
```
Para la dimensión 1 ("practicidad frente a lujo"), las marcas que más la definen
son Kia, Toyota y BMW; entre los atributos, Económico, Prestigio y Fiabilidad.
Para la dimensión 2 ("deportividad frente a seguridad"), BMW define el eje de
forma abrumadora, junto con los atributos Deportivo y Seguridad.
### Conclusiones del análisis
El ACS ha transformado una tabla de frecuencias en un mapa estratégico con
conclusiones accionables:
1. **Estructura del mercado**: se organiza principalmente a lo largo de un eje
práctico/económico frente a lujoso/prestigioso, con un segundo eje que
diferencia, dentro del segmento de lujo, entre deportividad y seguridad.
2. **Posicionamiento de las marcas**: se identifican tres grupos competitivos:
un **grupo de fiabilidad** (Toyota, Honda), un **grupo de prestigio** (BMW,
Audi, Mercedes) con matices internos (BMW deportivo, Mercedes seguro), y un
**posicionamiento de valor** muy nítido para Kia.
3. **Implicaciones estratégicas**: Ford tiene un posicionamiento difuso y
podría necesitar una comunicación más enfocada; Audi compite directamente
con BMW en "prestigio", pero BMW mantiene ventaja en "deportividad"; la
asociación de Mercedes con "Seguridad" es un activo de marca muy
diferenciador.
Este análisis muestra cómo el ACS va mucho más allá del "sí/no" de un test
chi-cuadrado, aportando un entendimiento cualitativo profundo de la estructura
de los datos categóricos.
## Análisis de correspondencias múltiple
El ACS proporciona una herramienta visualmente potente para desentrañar la
estructura de una tabla de contingencia, pero su alcance está limitado a **dos
variables cualitativas**. En investigación de mercados y ciencias sociales, lo
habitual es trabajar con cuestionarios y bases de datos que contienen muchas
variables categóricas a la vez: demográficas (sexo, nivel de estudios, estado
civil), de comportamiento (frecuencia de compra, marca preferida) y de actitud
(opiniones, valores, estilos de vida).
Analizar estas variables de dos en dos con ACS perdería las dinámicas conjuntas,
los subgrupos que se forman y la estructura general del conjunto. Para analizar
simultáneamente un número arbitrario de variables categóricas existe el
**análisis de correspondencias múltiple (ACM)**.
El ACM es la extensión directa del ACS a **tres o más variables cualitativas**.
Su objetivo es descubrir la estructura subyacente en un conjunto de datos
categóricos, identificando las dimensiones principales que resumen las
relaciones entre variables, y permitiendo visualizar tanto las asociaciones
entre categorías como los patrones de respuesta de los individuos
[@Greenacre2017]. Es habitual describir el ACM como el análogo del análisis de
componentes principales para datos categóricos: ambas técnicas buscan reducir la
dimensionalidad y revelar la estructura latente de los datos [@Hair2019].
### Lógica del ACM: la tabla indicadora
¿Cómo gestiona el ACM más de dos variables? La solución consiste en transformar
los datos originales en una **tabla indicadora** (o tabla disyuntiva completa),
que un análisis de correspondencias sí puede procesar.
Considérese una pequeña encuesta a 3 personas sobre dos variables: "Nivel de
estudios" (Primaria, Universidad) y "Preferencia política" (Partido A, Partido
B):
| Individuo | Nivel estudios | Pref. política |
|:----------|:---------------|:---------------|
| Sujeto 1 | Universidad | Partido A |
| Sujeto 2 | Primaria | Partido A |
| Sujeto 3 | Universidad | Partido B |
El ACM transforma esta tabla en una tabla binaria (0/1) más ancha, donde las
columnas ya no son las variables, sino *todas las categorías posibles* de todas
las variables:
| Individuo | Est. primaria | Est. universidad | Pol. partido A | Pol. partido B |
|:----------|:-------------:|:----------------:|:--------------:|:--------------:|
| Sujeto 1 | 0 | 1 | 1 | 0 |
| Sujeto 2 | 1 | 0 | 1 | 0 |
| Sujeto 3 | 0 | 1 | 0 | 1 |
Cada fila representa a un individuo, con un `1` en las columnas de las
categorías elegidas y un `0` en las demás. El ACM procede, en esencia, a
realizar un **análisis de correspondencias simple sobre esta tabla binaria**
[@Abdi2007mca]. Esta transformación es lo que permite al ACM analizar
simultáneamente cualquier número de variables categóricas.
### Objetivos e interpretación de los mapas del ACM
A diferencia del ACS, donde el foco está en la relación entre categorías de dos
variables, el ACM pone un énfasis mayor en los **individuos**. El análisis
produce dos mapas principales que suelen interpretarse de forma conjunta:
1. **Mapa de individuos**: a menudo el resultado más importante. Cada punto
representa a un individuo; la proximidad entre dos de ellos indica patrones
de respuesta muy similares a lo largo de todo el cuestionario. El objetivo
al interpretarlo es identificar **clústeres o nubes de individuos**:
segmentos de la muestra con perfiles homogéneos.
2. **Mapa de categorías**: representa todas las categorías de todas las
variables. Su lectura es similar a la del ACS, con un matiz: la proximidad
entre categorías de **diferentes variables** indica asociación fuerte (si
"Ingresos altos" y "Marca de lujo" están cerca, los individuos de una
categoría tienden a pertenecer también a la otra). La proximidad entre
categorías de la **misma variable** es un artefacto del análisis y no debe
interpretarse, ya que son mutuamente excluyentes. El origen representa el
perfil promedio: las categorías más cercanas son las más comunes; las más
alejadas, las más distintivas.
La clave del ACM aparece al superponer mentalmente ambos mapas: la posición de
una categoría es, de hecho, el centro de gravedad de las posiciones de todos los
individuos que la eligieron. Por eso, si un clúster de individuos se sitúa en
una zona del mapa, las categorías que ellos eligieron mayoritariamente
aparecerán "arrastradas" hacia esa misma zona, permitiendo caracterizar cada
segmento por las categorías que le son más afines.
### Conceptos técnicos importantes
- **Ajuste de la inercia**: la inercia total calculada a partir de la tabla
indicadora está artificialmente inflada por la estructura de los datos. Para
una estimación más realista del porcentaje de varianza explicado por cada
dimensión es necesario aplicar una corrección; la más utilizada es la
propuesta por Greenacre, implementada por defecto en `FactoMineR`
[@Greenacre2017].
- **La tabla de Burt**: una forma alternativa, computacionalmente más eficiente,
de realizar un ACM es partir de la **tabla de Burt**: una matriz cuadrada y
simétrica que contiene todas las tablas de contingencia de dos vías entre
todas las variables del análisis. Un ACS sobre la tabla de Burt produce los
mismos autovalores que un ACM sobre la tabla indicadora, pero es mucho más
rápido con un gran número de individuos [@Uriel2005].
### ¿Cuándo utilizar el ACM? Aplicaciones típicas
- **Investigación de mercados**: segmentación de mercados basada en estilos de
vida, actitudes y opiniones (segmentación psicográfica), identificando
perfiles de consumidores más allá de la demografía simple.
- **Sociología**: construcción de tipologías sociales, analizando cómo se
combinan distintas formas de capital (económico, cultural, social) para
definir perfiles de individuos [@LeRoux2010].
- **Salud pública y epidemiología**: identificación de perfiles de riesgo,
analizando la co-ocurrencia de comportamientos, condiciones sociales y
factores de salud.
- **Ecología**: análisis de las relaciones entre múltiples especies y
características de su hábitat.
## Aplicación práctica: segmentación de estilos de vida y consumo de medios
Se desarrolla a continuación un problema clásico de investigación social y de
mercados: identificar perfiles o "estilos de vida" a partir de las respuestas de
un cuestionario.
### Objetivo de la investigación
Una consultora sociológica ha encuestado a 200 personas para entender cómo se
relacionan ciertos hábitos de vida y características demográficas con el consumo
de medios de comunicación. La encuesta incluye el estado civil, el nivel
educativo, la actividad física, la preferencia de noticias y los hábitos de
lectura.
> **Objetivo**: identificar y caracterizar perfiles de individuos (segmentos)
> según la estructura conjunta de sus estilos de vida y hábitos de consumo de
> medios, y visualizar las relaciones entre todas las categorías de respuesta.
### Preparación de los datos
A diferencia del ACS, que partía de una tabla agregada, el ACM necesita los
datos a **nivel individual**: un dataframe donde cada fila es un encuestado y
cada columna, una variable categórica.
```{r}
#| echo: true
set.seed(123)
# Simulate 200 respondents with two underlying lifestyle profiles
n <- 200
lifestyle_data <- data.frame(
marital_status = sample(c("Single", "Married", "Divorced"), n,
replace = TRUE, prob = c(0.4, 0.5, 0.1)),
education_level = sample(c("Basic", "Secondary", "University"), n,
replace = TRUE, prob = c(0.3, 0.4, 0.3)),
physical_activity = sample(c("Sedentary", "Moderate", "Active"), n,
replace = TRUE, prob = c(0.4, 0.4, 0.2)),
news_preference = sample(c("TV", "Press", "Online"), n,
replace = TRUE, prob = c(0.5, 0.2, 0.3)),
reads_books = sample(c("Yes", "No"), n,
replace = TRUE, prob = c(0.4, 0.6))
)
head(lifestyle_data)
```
Todas las variables son categóricas (`character` o `factor`), el formato
adecuado para el ACM.
### Ejecución del análisis de correspondencias múltiple
Se utiliza de nuevo el ecosistema `FactoMineR` / `factoextra`:
```{r}
#| echo: true
# ncp = 5 keeps 5 dimensions for later inspection; graph = FALSE avoids the default plot
mca_model <- FactoMineR::MCA(lifestyle_data, ncp = 5, graph = FALSE)
print(mca_model)
```
La salida muestra los autovalores y el porcentaje de inercia explicado por cada
dimensión. En ACM, ese porcentaje suele ser más bajo que en ACP o ACS, debido a
la gran cantidad de categorías implicadas; lo relevante es que las primeras
dimensiones expliquen sustancialmente más que las siguientes.
### Visualización e interpretación de resultados
```{r}
#| label: fig-scree-mca
#| fig-cap: Porcentaje de inercia explicado por dimensión (ACM)
#| echo: true
factoextra::fviz_eig(mca_model, addlabels = TRUE,
barfill = "#076fa2", barcolor = "#076fa2") +
ggplot2::theme_minimal()
```
#### El mapa de categorías
```{r}
#| label: fig-mca-var
#| fig-cap: Mapa de categorías - estilos de vida y consumo de medios
#| echo: true
factoextra::fviz_mca_var(mca_model,
repel = TRUE,
ggtheme = ggplot2::theme_minimal(),
title = "Mapa de categorías")
```
**Lectura del mapa de categorías**:
1. **Dimensión 1 (eje horizontal, 40,1%)**: el factor estructurador principal.
A la derecha se agrupan "TV", "Sedentaria", "Casado" y "Básica"; a la
izquierda, "Online", "Activa", "Universitaria" y "Soltero". El eje
representa una dimensión de **"capital cultural y modernidad"**: a la
izquierda, un perfil joven, activo y con mayor nivel educativo que consume
medios digitales; a la derecha, un perfil más tradicional, sedentario y con
menor nivel educativo, orientado a la televisión.
2. **Dimensión 2 (eje vertical, 18,5%)**: introduce un matiz secundario. Hacia
arriba destacan "Prensa" y "Moderada"; hacia abajo, "Sí" en lectura de
libros. El eje diferencia el **"tipo de consumo de información"**: noticias
de actualidad (prensa) frente a contenido de formato largo (libros).
#### El mapa de individuos
Para dar sentido a la nube de 200 encuestados, se colorea según una variable
relevante, en este caso `physical_activity`:
```{r}
#| label: fig-mca-ind
#| fig-cap: Mapa de individuos por nivel de actividad física
#| echo: true
factoextra::fviz_mca_ind(mca_model,
label = "none",
habillage = "physical_activity",
addEllipses = TRUE,
ggtheme = ggplot2::theme_minimal(),
title = "Mapa de individuos por actividad física")
```
El mapa revela una segmentación clara: la elipse de individuos **sedentarios**
se sitúa en la zona donde antes se localizaron "TV", "Casado" y "Básica"; la
elipse de individuos **activos** se sitúa en la zona de "Online",
"Universitaria" y "Soltero"; la elipse de actividad **moderada** ocupa una
posición intermedia. Esto confirma de forma visual la existencia de, al menos,
dos perfiles de estilo de vida bien diferenciados.
#### Análisis de contribuciones
```{r}
#| label: fig-contrib-mca
#| fig-cap: Contribución de las variables a las dos primeras dimensiones
#| echo: true
factoextra::fviz_contrib(mca_model, choice = "var", axes = 1:2,
fill = "#076fa2", color = "#076fa2") +
ggplot2::theme_minimal()
```
Las variables que más contribuyen a las dos primeras dimensiones son
`news_preference` y `physical_activity`, seguidas de `education_level`. Esto
confirma que la interpretación de los ejes, basada en esas variables, es
correcta.
### Conclusiones del análisis
El ACM permite ir más allá de las frecuencias individuales para descubrir la
estructura latente que conecta hábitos y características de los encuestados. Se
identifican dos perfiles principales:
1. **Perfil "digital y activo"**: nivel educativo universitario, soltero, vida
físicamente activa, informa a través de medios online y tiende a leer
libros.
2. **Perfil "tradicional y doméstico"**: casado, nivel de estudios básico, vida
sedentaria, la televisión como principal fuente de noticias y tendencia a no
leer libros.
**Implicaciones estratégicas**: estos perfiles son de gran valor para cualquier
estrategia de comunicación. Una aplicación de fitness debería dirigir su
comunicación a medios online con un mensaje afín al perfil "digital y activo";
un producto de consumo masivo orientado a un público más tradicional debería
centrarse en televisión.
Este caso demuestra cómo el ACM es una herramienta exploratoria de primer nivel
para la **segmentación de mercados y la construcción de tipologías**,
transformando datos categóricos aparentemente inconexos en un mapa claro de
patrones de comportamiento.
## Addendum: visualización avanzada con el moon plot en el ACS
El biplot estándar es la herramienta clásica para visualizar los resultados de
un análisis de correspondencias, pero su interpretación exige cierta disciplina
mental: hay que recordar constantemente la doble regla de proximidad para puntos
del mismo tipo y de ángulo para puntos de tipos diferentes. Esta dualidad puede
generar confusión, especialmente cuando un punto de marca parece estar "cerca"
de un punto de atributo en el mapa sin que eso implique asociación real.
Para resolver esta ambigüedad existe una visualización alternativa,
especialmente elegante: el **moon plot**.
### ¿Qué es un moon plot y por qué es útil?
Un moon plot es una representación circular de los resultados de un análisis de
correspondencias. Su utilidad reside en que **elimina la información de la
distancia al origen y representa todos los puntos sobre la circunferencia de un
círculo**, conservando únicamente la información del **ángulo**, que es la que
determina la asociación entre filas y columnas.
Al normalizar todos los puntos a la misma distancia del centro, el moon plot
obliga a centrarse exclusivamente en las direcciones:
- Una **asociación fuerte** entre una marca y un atributo se visualiza como dos
puntos muy próximos en el borde del círculo (ángulo pequeño).
- Una **asociación nula** se representa por puntos separados 90 grados.
- Una **asociación negativa** ("repulsión") se representa por puntos en lados
opuestos del círculo (180 grados).
Esta visualización elimina la tentación de interpretar erróneamente la
proximidad euclídea entre puntos de fila y columna, haciendo el análisis más
robusto e intuitivo.
### Implementación del moon plot en R con `ggplot2`
Se construye el moon plot a partir del objeto `ca_model` ya generado con
`FactoMineR`. El proceso consta de tres pasos: extraer las coordenadas,
normalizarlas para proyectarlas sobre un círculo y, por último, representarlas.
#### Paso 1: extracción de coordenadas
```{r}
#| echo: true
# Extract row coordinates (brands)
row_coords <- as.data.frame(ca_model$row$coord[, 1:2])
row_coords$label <- rownames(row_coords)
row_coords$type <- "Marca"
# Extract column coordinates (attributes)
col_coords <- as.data.frame(ca_model$col$coord[, 1:2])
col_coords$label <- rownames(col_coords)
col_coords$type <- "Atributo"
colnames(row_coords)[1:2] <- c("x", "y")
colnames(col_coords)[1:2] <- c("x", "y")
all_coords <- rbind(row_coords, col_coords)
```
#### Paso 2: normalización de las coordenadas
Se crean nuevas coordenadas (`x_moon`, `y_moon`) que proyectan cada punto sobre
la circunferencia de un círculo de radio 1, conservando su ángulo original:
```{r}
#| echo: true
moon_coords <- all_coords |>
dplyr::mutate(
radius = sqrt(x^2 + y^2),
x_moon = x / radius,
y_moon = y / radius
)
```
#### Paso 3: creación del gráfico
Se utilizan `ggforce` para dibujar el círculo de fondo y `ggrepel` para evitar
el solapamiento de etiquetas:
```{r}
#| label: fig-moon-plot
#| fig-cap: Moon plot del posicionamiento de marcas y atributos
#| echo: true
ggplot2::ggplot(moon_coords, ggplot2::aes(x = x_moon, y = y_moon)) +
# Background circle
ggforce::geom_circle(ggplot2::aes(x0 = 0, y0 = 0, r = 1),
color = "grey40", fill = NA, linewidth = 0.5) +
# Lines from origin to each point
ggplot2::geom_segment(ggplot2::aes(x = 0, y = 0, xend = x_moon, yend = y_moon),
color = "grey70") +
# Points, colored and shaped by type
ggplot2::geom_point(ggplot2::aes(color = type, shape = type),
size = 4, stroke = 1.5) +
# Repelled text labels
ggrepel::geom_text_repel(ggplot2::aes(label = label, color = type),
box.padding = 0.5,
point.padding = 0.5,
segment.color = "grey40",
max.overlaps = Inf) +
ggplot2::coord_fixed() +
ggplot2::scale_color_manual(values = c("Marca" = "#076fa2", "Atributo" = "#c40000")) +
ggplot2::scale_shape_manual(values = c("Marca" = 16, "Atributo" = 17)) +
ggplot2::labs(
title = "Moon plot: posicionamiento de marcas y atributos",
caption = "La asociación se interpreta por la proximidad angular en el círculo",
x = NULL, y = NULL, color = "Tipo", shape = "Tipo"
) +
ggplot2::theme_void() +
ggplot2::theme(legend.position = "bottom")
```
### Interpretación del moon plot
La lectura es ahora mucho más directa:
- Un grupo muy compacto en el círculo reúne a **Toyota, Honda, Fiabilidad y
Familiar**: su proximidad angular mínima indica una asociación muy fuerte.
- En el lado opuesto del círculo (casi 180°) aparecen **Kia y Económico**,
definiendo el polo opuesto del mercado.
- **BMW y Deportivo** están prácticamente en el mismo punto: asociación casi
exclusiva.
- **Mercedes, Lujo y Seguridad** forman otro grupo angularmente cercano,
definiendo el perfil de lujo-confort.
- **Ford**, como en el biplot original, ocupa una posición intermedia sin una
asociación angular clara con ningún atributo, lo que refuerza la idea de un
posicionamiento generalista.
Este gráfico sacrifica la información sobre la contribución de cada punto (su
distancia al origen en el biplot original), pero gana en claridad y robustez
interpretativa, convirtiéndose en una herramienta muy eficaz para comunicar los
resultados de un análisis de correspondencias a una audiencia no especializada.