El análisis de datos mixtos mediante el método de Análisis Factorial de Datos Mixtos (FAMD, por sus siglas en inglés) es una técnica que permite analizar conjuntos de datos que contienen tanto variables cuantitativas como cualitativas. El FAMD combina elementos del Análisis de Componentes Principales (PCA) y el Análisis de Correspondencias Múltiples (MCA) para realizar esta tarea. Durante el análisis, se normalizan las variables cuantitativas y cualitativas para equilibrar su influencia. En este capítulo se presenta cómo realizar y visualizar el análisis factorial de datos mixtos utilizando los paquetes FactoMineR (para el análisis) y factoextra (para la visualización) en el entorno de programación R.
Primero hay que cargar las siguientes librerías.
library("FactoMineR")
## Warning: package 'FactoMineR' was built under R version 4.2.3
library("factoextra")
## Warning: package 'factoextra' was built under R version 4.2.3
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Primero que todo usaremos un subconjunto del dataset wine el cual se encuentra en el paquete FactoMine. Luego utilizamos str(df) para visualizar la estructura de los datos.
data(wine)
df <- wine[,c(1,2,16,22,29,28,30,31)]
head(df[, 1:7], 4)
## Label Soil Plante Acidity Harmony Intensity Overall.quality
## 2EL Saumur Env1 2.000 2.107 3.143 2.857 3.393
## 1CHA Saumur Env1 2.000 2.107 2.964 2.893 3.214
## 1FON Bourgueuil Env1 1.750 2.179 3.143 3.074 3.536
## 1VAU Chinon Env2 2.304 3.179 2.038 2.462 2.464
str(df)
## 'data.frame': 21 obs. of 8 variables:
## $ Label : Factor w/ 3 levels "Saumur","Bourgueuil",..: 1 1 2 3 1 2 2 1 3 1 ...
## $ Soil : Factor w/ 4 levels "Reference","Env1",..: 2 2 2 3 1 1 1 2 2 3 ...
## $ Plante : num 2 2 1.75 2.3 1.76 ...
## $ Acidity : num 2.11 2.11 2.18 3.18 2.57 ...
## $ Harmony : num 3.14 2.96 3.14 2.04 3.64 ...
## $ Intensity : num 2.86 2.89 3.07 2.46 3.64 ...
## $ Overall.quality: num 3.39 3.21 3.54 2.46 3.74 ...
## $ Typical : num 3.25 3.04 3.18 2.25 3.44 ...
Los datos contienen 21 filas (vinos, individuos) y 8 columnas (variables): -Las primeras dos columnas son factores (variables categóricas). -Las columnas restantes son numéricas.
La función FAMD() puede ser utilizada para computar FAMD. -base: marco de datos con n filas y p columnas -ncp: el número de de dimensiones mantenidas en el resultado -sup.var: un vector que indica los índices de las variables suplementarias. -ind.sup: un vector que indica los índices de los individuos suplementarios. -graph: un valor lógico. Si es REAL una gráfica es mostrada.
res.famd <- FAMD(df, graph = FALSE)
print(res.famd)
## *The results are available in the following objects:
##
## name description
## 1 "$eig" "eigenvalues and inertia"
## 2 "$var" "Results for the variables"
## 3 "$ind" "results for the individuals"
## 4 "$quali.var" "Results for the qualitative variables"
## 5 "$quanti.var" "Results for the quantitative variables"
El resultado de la función FAMD() es una lista.
Las funciones del paquete factoextra en R son útiles
para realizar y visualizar análisis de correspondencia factorial
múltiple (FAMD). Algunas de estas funciones incluyen extraer los valores
propios/varianzas por dimensión, visualizar los valores
propios/varianzas, extraer resultados para individuos y variables, y
visualizar los resultados para individuos y variables. Estas funciones
ayudan a interpretar los resultados del FAMD y entender la estructura de
los datos, como la distribución de individuos en el espacio factorial y
las relaciones entre variables y dimensiones. Es recomendable leer la
interpretación del análisis de componentes principales y el análisis de
correspondencia múltiple para comprender mejor los conceptos utilizados
en el FAMD.
La proporción de variaciones retenidas por la diferencia de dimensiones (ejes) puede ser extraída usando la función get_eigenvalue() del paquete factoestra.
eig.val <- get_eigenvalue(res.famd)
head(eig.val)
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 4.8315174 43.922886 43.92289
## Dim.2 1.8568797 16.880724 60.80361
## Dim.3 1.5824794 14.386176 75.18979
## Dim.4 1.1491200 10.446546 85.63633
## Dim.5 0.6518053 5.925503 91.56183
La función fviz_eig() o la fviz_screenplot() pueden ser usadas para dibujar la gráfica.
fviz_screeplot(res.famd)
La función get_mfa_var() se usa para extraer los resultados de las variables. Esta función lanza una lista que contiene las coordinadas, los cos2 y la distribución de las variables.
var <- get_famd_var(res.famd)
var
## FAMD results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates"
## 2 "$cos2" "Cos2, quality of representation"
## 3 "$contrib" "Contributions"
Se pueden acceder a los diferentes componentes de la siguiente manera:
#variables de las coordenadas
head(var$coord)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Plante 0.7344160 0.060551966 0.105902048 0.004011299 0.0010340559
## Acidity 0.1732738 0.491118153 0.126394029 0.115376784 0.0045862935
## Harmony 0.8943968 0.023628146 0.040124469 0.003653813 0.0086624633
## Intensity 0.6991811 0.134639254 0.065382234 0.023214984 0.0064730431
## Overall.quality 0.9115699 0.005246728 0.009336677 0.005445276 0.0007961880
## Typical 0.7808611 0.027094327 0.001549791 0.083446627 0.0005912942
#cos2: calidad de respresentacion en el mapa factor
head(var$cos2)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Plante 0.53936692 3.666541e-03 1.121524e-02 1.609052e-05 1.069272e-06
## Acidity 0.03002381 2.411970e-01 1.597545e-02 1.331180e-02 2.103409e-05
## Harmony 0.79994566 5.582893e-04 1.609973e-03 1.335035e-05 7.503827e-05
## Intensity 0.48885427 1.812773e-02 4.274836e-03 5.389355e-04 4.190029e-05
## Overall.quality 0.83095973 2.752815e-05 8.717353e-05 2.965103e-05 6.339153e-07
## Typical 0.60974400 7.341026e-04 2.401853e-06 6.963340e-03 3.496288e-07
#dimensiones de las contribuciones
head(var$contrib)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Plante 15.200526 3.2609526 6.69215972 0.3490757 0.15864490
## Acidity 3.586323 26.4485720 7.98708850 10.0404466 0.70362936
## Harmony 18.511716 1.2724651 2.53554453 0.3179662 1.32899551
## Intensity 14.471254 7.2508336 4.13163258 2.0202401 0.99309457
## Overall.quality 18.867156 0.2825562 0.59000304 0.4738648 0.12215119
## Typical 16.161818 1.4591321 0.09793437 7.2617850 0.09071638
La figura a continuación muestra la correlación entra variables y las dimensiones principales, al igual que la contribución de variables a las dimensiones 1 y 2. Se usan las siguentes funciones:
-fviz_famd_var() para graficar variables cualitativas y cuantitativas. -fviz_contrib() para visualizar la contribución de las variables en sus dimensiones principales.
#grafica de variables
fviz_famd_var(res.famd, repel = TRUE)
#contribucion de la primera dimension
fviz_contrib(res.famd, "var", axes = 1)
#contribucion de la segunda dimension
fviz_contrib(res.famd, "var", axes = 2)
La línea roja bordeada indica el valor esperado promedio si las contribuciones fueran uniformes. Se puede ver en las gráficas que las variables que más contribuyen son: Overall.quality y Harmony. Las variables que contribuyen más en la segunda dimensión son: Soil y Acidity.
Para extraer los resultados de las variables cuamtitativas, se escribe lo siguiente:
quanti.var <- get_famd_var(res.famd, "quanti.var")
quanti.var
## FAMD results for quantitative variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates"
## 2 "$cos2" "Cos2, quality of representation"
## 3 "$contrib" "Contributions"
En esta sección estaremos entendiendo cómo se vizualizan las variables cuantitativas, y le añadiremos color acorde a: la calidad de representación en el mapa de factores o a sus contribuciones a las dimensiones. Usaremos que repel = TRUE, para evitar que se sobreponga el texto.
fviz_famd_var(res.famd, "quanti.var", repel = TRUE, col.var = "black")
Se muestra la relación entre variables y la calidad de la representación de las variables, así como la correlación entre variables y dimensiones.
Las variables cuantitativas que más contribuyan pueden ser resaltadas usando el argumento col.var = “contrib”. Esto produce colores gradientes, los cuales pueden ser personalizados usando gradient.cols.
fviz_famd_var(res.famd, "quanti.var", col.var = "contrib", grandient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)
De forma similar, se puede resaltar las variables cuantitativas usando su cos2 representando la calidad de representación en el mapa de factores.
fviz_famd_var(res.famd, "quanti.var", col.var = "cos2", grandient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)
Como las variables cuantitativas, los resultados de las variables cualitativas pueden ser extraídas de la siguiente forma:
quali.var <- get_famd_var(res.famd, "quali.var")
quali.var
## FAMD results for qualitative variable categories
## ===================================================
## Name Description
## 1 "$coord" "Coordinates"
## 2 "$cos2" "Cos2, quality of representation"
## 3 "$contrib" "Contributions"
fviz_famd_var(res.famd, "quali.var", col.var = "contrib", grandient.cols = c("#00AFBB", "#E7B800", "#FC4E07"))
La gráfica arriba muestra las categorías de las variables categóricas.
Para obtener los resultados para individuos, escribir:
ind <- get_famd_ind(res.famd)
ind
## FAMD results for individuals
## ===================================================
## Name Description
## 1 "$coord" "Coordinates"
## 2 "$cos2" "Cos2, quality of representation"
## 3 "$contrib" "Contributions"
Para graficar individuos, se usa la función fviz_mfa_ind().
fviz_famd_var(res.famd, col.ind = "cos2", grandient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)
En la gráfica que aparece arriba, las variables categóricas son mostradas en negro. Si hay variables que quieren omitirse, se utiliza el argumento invisible = “quality.var”.
Si se quisiera colorear los individuos usando cualquiera de los colores en la tabla de variables cualitativas, se hace con el argumento habillage.
fviz_mfa_ind(res.famd, hebillage = "label", palette = c("#00AFBB", "#E7B800", "#FC4E07"), addEllipses = TRUE, ellipse.type = "confidence", repel = TRUE)
Si se quiere colorear individuos usando múltiples variables categóricas al mismo tiempo, se usa la función fviz_ellipses().
fviz_ellipses(res.famd, c("Label", "Soil"), repel = TRUE)
## Warning: `gather_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `gather()` instead.
## ℹ The deprecated feature was likely used in the factoextra package.
## Please report the issue at <]8;;https://github.com/kassambara/factoextra/issueshttps://github.com/kassambara/factoextra/issues]8;;>.
También se puede especificar los índices de variable categórica.
fviz_ellipses(res.famd, 1:2, geom = "point")
FAMD hace posible analizar conjuntos de datos, los cuales están descritos por variables tanto cualitativas como cuantitativas.Usando los paquetes FactoMineR y factoestra R, se describió cómo utilizar e interpretar FAMD.