El análisis factorial de datos mixtos (FAMD) es un método de componentes principales dedicado a analizar un conjunto de datos que contiene tanto variables cuantitativas como cualitativas (Pages, 2004). Permite analizar la similitud entre individuos teniendo en cuenta tipos mixtos de variables. Además, se puede explorar la asociación entre todas las variables, tanto cuantitativas como cualitativas.
En términos generales, el algoritmo FAMD puede verse como una mezcla entre el análisis de componentes principales (PCA) (Capítulo 3) y el análisis de correspondencias múltiples (MCA) (Capítulo 5). En otras palabras, actúa como PCA para variables cuantitativas y como MCA para variables cualitativas.
Las variables cuantitativas y cualitativas se normalizan durante el análisis para equilibrar la influencia de cada conjunto de variables.
En el capítulo actual, demostramos cómo calcular y visualizar el análisis factorial de datos mixtos utilizando los paquetes de R FactoMineR (para el análisis) y factoextra (para la visualización de datos).
install.packages (c("FactoMineR", "factoextra"))
## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library("FactoMineR")
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library("FactoMineR")
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 dos primeras columnas son factores (variables categóricas):
label (Saumur, Bourgueil o Chinon) y soil
(Reference, Env1, Env2 o Env4).
Las columnas restantes son numéricas (variables continuas).
library(FactoMineR)
res.famd <- FAMD(df, ncp = 5, sup.var = NULL, ind.sup = NULL, 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"
Usaremos las siguientes funciones de factoextra:
get_eigenvalue(res.famd): Extrae los valores propios/varianzas retenidos por cada dimensión (eje).
fviz_eig(res.famd): Visualiza los valores propios/varianzas.
get_famd_ind(res.famd): Extrae los resultados para los individuos.
get_famd_var(res.famd): Extrae los resultados para las variables cuantitativas y cualitativas.
fviz_famd_ind(res.famd), fviz_famd_var(res.famd): Visualiza los resultados para los individuos y las variables, respectivamente.
En las siguientes secciones, ilustraremos cada una de estas funciones.
La proporción de varianzas retenidas por las diferentes dimensiones (ejes) se puede extraer utilizando la función get_eigenvalue() [paquete factoextra] de la siguiente manera:
library("factoextra")
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
fviz_screeplot (res.famd)
#### 6.3.2 Grafico de variables
La función get_mfa_var() [en factoextra] se utiliza para extraer los resultados para las variables. Por defecto, esta función devuelve una lista que contiene las coordenadas, el cos2 y la contribución de todas 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"
# Coordinates of variables
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: quality of representation on the factore map
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
# Contributions to the dimensions
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 siguiente figura muestra la correlación entre variables - tanto cuantitativas como cualitativas - y las dimensiones principales, así como la contribución de las variables a las dimensiones 1 y 2. Las siguientes funciones [en el paquete factoextra] se utilizan:
fviz_famd_var() para trazar tanto variables cuantitativas como cualitativas. fviz_contrib() para visualizar la contribución de las variables a las dimensiones principales.
# Plot of variables
fviz_famd_var(res.famd, repel = TRUE)
#Contribution to the first dimension
fviz_contrib(res.famd, "var", axes = 1)
#Contribution to the second dimension
fviz_contrib(res.famd, "var", axes = 2)
# La línea roja discontinua en el gráfico indica el valor promedio esperado, si las contribuciones fueran uniformes. Lee más en el capítulo (Capítulo 3).
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, describiremos cómo visualizar variables cuantitativas. Además, mostraremos cómo resaltar variables según su calidad de representación en el mapa factorial o sus contribuciones a las dimensiones. El código R a continuación traza variables cuantitativas. Usamos repel = TRUE para evitar la superposición de texto.
fviz_famd_var(res.famd, "quanti.var", repel = TRUE,
col.var = "black")
Brevemente, el gráfico de variables (círculo de correlación) muestra la relación entre variables, la calidad de la representación de variables, así como la correlación entre variables y las dimensiones. Lee más en PCA (Capítulo 3), MCA (Capítulo 5) y MFA (Capítulo 7). Las variables cuantitativas más contribuyentes pueden resaltarse en el gráfico de dispersión utilizando el argumento col.var = “contrib”. Esto produce colores degradados, que pueden personalizarse utilizando el argumento gradient.cols.
fviz_famd_var(res.famd, "quanti.var", col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
De manera similar, puedes resaltar variables cuantitativas utilizando sus valores cos2 que representan la calidad de representación en el mapa factorial. Si una variable está bien representada por dos dimensiones, la suma de los cos2 se acerca a uno. Para algunos de los elementos, pueden ser necesarias más de 2 dimensiones para representar perfectamente los datos.
# Color by cos2 values: quality on the factor map
fviz_famd_var(res.famd, "quanti.var", col.var = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
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",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")
)
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"
fviz_famd_ind(res.famd, col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
En el gráfico anterior, las categorías de variables cualitativas se muestran en negro. Env1, Env2, Env3 son las categorías del suelo. Saumur, Bourgueil y Chinon son las categorías de la etiqueta del vino. Si no quieres mostrarlas en el gráfico, utiliza el argumento invisible = “quali.var” .
Los individuos con perfiles similares están cerca unos de otros en el mapa factorial. Para obtener más información sobre la interpretación, lee más en el Capítulo 5 (MCA) y Capítulo 7 (MFA).
Ten en cuenta que es posible colorear a los individuos utilizando cualquiera de las variables cualitativas en la tabla de datos inicial. Para hacer esto, se utiliza el argumento habillage en la función fviz_famd_ind(). Por ejemplo, si quieres colorear los vinos según la variable cualitativa suplementaria “Label”, escribe esto:
fviz_mfa_ind(res.famd,
habillage = "Label", # color by groups
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
addEllipses = TRUE, ellipse.type = "confidence",
repel = TRUE # Avoid tezt overlapping
)
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 <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
fviz_ellipses(res.famd, 1:2, geom = "point")
El análisis factorial de datos mixtos (FAMD) permite analizar un conjunto de datos en el que los individuos están descritos tanto por variables cualitativas como cuantitativas. En este artículo, describimos cómo realizar e interpretar FAMD utilizando los paquetes R FactoMineR y factoextra.
Análisis Factorial de Datos Mixtos Utilizando FactoMineR (curso en vídeo). https://goo.gl/64gY3R