df <- data.frame(
age = c(63, 37, 41, 56, 57, 57, 56, 44, 52, 57, 54, 48, 49, 64, 58,
60, 45, 50, 43, 39, 55, 47, 59, 46, 53, 42, 61, 51, 38, 40),
sex = factor(c("Hombre", "Hombre", "Mujer", "Hombre", "Mujer", "Hombre", "Mujer",
"Hombre", "Mujer", "Hombre", "Hombre", "Mujer", "Mujer", "Hombre", "Hombre",
"Mujer", "Hombre", "Mujer", "Hombre", "Mujer", "Hombre", "Mujer", "Hombre",
"Mujer", "Hombre", "Mujer", "Hombre", "Mujer", "Hombre", "Mujer")),
cp = factor(c("Asintomático", "Dolor no anginoso", "Angina atípica", "Angina atípica",
"Angina típica", "Asintomático", "Dolor no anginoso", "Dolor no anginoso",
"Dolor no anginoso", "Asintomático", "Asintomático", "Asintomático",
"Dolor no anginoso", "Angina típica", "Asintomático",
"Dolor no anginoso", "Asintomático", "Angina atípica", "Angina típica",
"Angina atípica", "Angina típica", "Asintomático", "Dolor no anginoso",
"Angina típica", "Asintomático", "Angina típica", "Asintomático",
"Dolor no anginoso", "Dolor no anginoso", "Angina típica")),
fbs = factor(c("Sí", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No",
"Sí", "No", "No", "No",
"No", "No", "Sí", "No", "No", "Sí", "No", "No", "Sí", "No", "Sí",
"No", "No", "No", "Sí")),
restecg = factor(c("Normal", "Anormalidad ST-T", "Normal", "Anormalidad ST-T",
"Anormalidad ST-T", "Anormalidad ST-T", "Normal", "Normal",
"Normal", "Normal", "Normal", "Hipertrofia VI", "Normal",
"Normal", "Hipertrofia VI",
"Normal", "Normal", "Anormalidad ST-T", "Normal",
"Anormalidad ST-T", "Normal", "Normal", "Anormalidad ST-T",
"Normal", "Anormalidad ST-T", "Normal", "Normal",
"Hipertrofia VI", "Normal", "Normal")),
exang = factor(c("No", "No", "No", "No", "Sí", "No", "No", "No", "No", "Sí", "Sí",
"No", "No", "No", "No",
"No", "No", "No", "Sí", "No", "Sí", "No", "Sí", "No", "No", "No",
"Sí", "No", "Sí", "No")),
slope = factor(c("Ascendente", "Ascendente", "Descendente", "Descendente", "Descendente",
"Descendente", "Plana", "Descendente", "Ascendente", "Plana", "Descendente",
"Ascendente", "Ascendente", "Ascendente", "Plana",
"Plana", "Ascendente", "Plana", "Descendente", "Ascendente",
"Plana", "Descendente", "Plana", "Descendente", "Ascendente",
"Plana", "Plana", "Descendente", "Ascendente", "Plana")),
ca = factor(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
1, 0, 2, 0, 1, 0, 0, 1, 0, 0, 2, 1, 0, 0, 1)),
thal = factor(c("Normal", "Defecto fijo", "Defecto fijo", "Defecto fijo", "Defecto fijo",
"Defecto fijo", "Defecto fijo", "Defecto fijo", "Defecto fijo",
"Defecto fijo", "Defecto fijo", "Normal", "Normal", "Defecto fijo", "Defecto fijo",
"Defecto reversible", "Normal", "Defecto fijo", "Defecto reversible",
"Defecto fijo", "Defecto fijo", "Normal", "Defecto fijo", "Defecto reversible",
"Normal", "Defecto fijo", "Defecto reversible", "Normal", "Defecto fijo", "Defecto fijo")),
target = factor(c(rep("Enfermedad cardíaca", 15), rep("No enfermedad cardíaca", 15)))
)
# Verificar niveles únicos por variable
sapply(df, function(x) if (is.factor(x)) length(unique(x)) else NA)
## age sex cp fbs restecg exang slope ca thal target
## NA 2 4 2 3 2 3 3 3 2
library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.4.3
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.3
## Cargando paquete requerido: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
mca_res <- MCA(df, quali.sup = c(1, 2), graph = FALSE)
## Warning in sqrt(Nj * ((N - 1)/(N - Nj))): Se han producido NaNs
# Gráfico de variables
fviz_mca_var(mca_res, repel = TRUE, col.var = "black")
# Gráfico de individuos coloreado por categoría de target
fviz_mca_ind(mca_res, label = "none", habillage = "target", palette = c("#00AFBB", "#FC4E07"))
las Primeras dos dimensiones del MCA explican una parte importante de la
variabilidad entre categorías.
En el gráfico, las categorías “Asintomático”, “CA = 1”, “Defecto fijo” y “Descendente” se ubicaron próximas a la categoría “Enfermedad cardíaca”, lo cual muestra una fuerte asociación positiva.
Por el contrario, categorías como “Angina típica”, “CA = 0” y “Normal” (thal) se agruparon cerca de la categoría “No enfermedad cardíaca”, indicando una asociación negativa con la presencia de enfermedad.
La variable sex no muestra una fuerte separación por sí sola, pero contribuye al análisis como ilustrativa.
en el Gráfico de individuo; se muestra dos agrupaciones bien diferenciadas una con individuos con enfermedad y otra sin enfermedad. La variable target logró segmentar claramente el espacio de correspondencias, lo que valida su uso como ilustrativa y relevante en la exploración.