Introducción
El análisis factorial múltiple (MFA) es un método de análisis de datos multivariado para resumir y visualizar una tabla de datos compleja en la que los individuos se describen mediante varios conjuntos de variables (cuantitativas y/o cualitativas) estructuradas en grupos. Tiene en cuenta la contribución de todos los grupos activos de variables para definir la distancia entre individuos.
El número de variables en cada grupo puede diferir y la naturaleza de las variables (cualitativas o cuantitativas) puede variar de un grupo a otro, pero las variables deben ser de la misma naturaleza en un grupo determinado.
En el este capítulo, mostramos cómo calcular y visualizar el análisis de factores múltiples en el software R utilizando FactoMineR (para el análisis) y factoeztra (para la visualización de datos). Además, mostraremos cómo revelar las variables más importantes que más contribuyen a explicar las variaciones en el conjunto de datos.
Cálculo
Paquetes R
install.packages (c("FactoMineR", "factoextra"))
## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (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
Formato de datos
Usaremos los conjuntos de datos de demostración disponibles en el paquete FactoMineR. Este conjunto de datos se trata de una evaluación sensorial de los vinos por parte de diferentes jueces.
library ("FactoMineR")
data(wine)
colnames (wine)
## [1] "Label" "Soil"
## [3] "Odor.Intensity.before.shaking" "Aroma.quality.before.shaking"
## [5] "Fruity.before.shaking" "Flower.before.shaking"
## [7] "Spice.before.shaking" "Visual.intensity"
## [9] "Nuance" "Surface.feeling"
## [11] "Odor.Intensity" "Quality.of.odour"
## [13] "Fruity" "Flower"
## [15] "Spice" "Plante"
## [17] "Phenolic" "Aroma.intensity"
## [19] "Aroma.persistency" "Aroma.quality"
## [21] "Attack.intensity" "Acidity"
## [23] "Astringency" "Alcohol"
## [25] "Balance" "Smooth"
## [27] "Bitterness" "Intensity"
## [29] "Harmony" "Overall.quality"
## [31] "Typical"
Código R
El siguiente código R realiza el MFA en los datos de los vinos utilizando los grupos: olor, visual, olor después de agitar y sabor. Estos grupos se denominan grupos activos. El grupo restante de variables - origen (el primer grupo) y juicio general (el sexto grupo) - se denominan grupos complementarios; num.grupo.sup = c(1, 6)
library (FactoMineR)
data (wine)
res.mfa <- MFA(wine,
group = c(2, 5, 3, 10, 9, 2),
type = c("n", "s", "s", "s", "s", "s"),
name.group = c("origin", "odor", "visual", "odor.after.shaking", "taste", "overall"),
num.group.sup = c(1, 6),
graph = FALSE)
print (res.mfa)
## **Results of the Multiple Factor Analysis (MFA)**
## The analysis was performed on 21 individuals, described by 31 variables
## *Results are available in the following objects :
##
## name description
## 1 "$eig" "eigenvalues"
## 2 "$separate.analyses" "separate analyses for each group of variables"
## 3 "$group" "results for all the groups"
## 4 "$partial.axes" "results for the partial axes"
## 5 "$inertia.ratio" "inertia ratio"
## 6 "$ind" "results for the individuals"
## 7 "$quanti.var" "results for the quantitative variables"
## 8 "$quanti.var.sup" "results for the quantitative supplementary variables"
## 9 "$quali.var.sup" "results for the categorical supplementary variables"
## 10 "$summary.quanti" "summary for the quantitative variables"
## 11 "$summary.quali" "summary for the categorical variables"
## 12 "$global.pca" "results for the global PCA"
Visualización e interpretación
Usaremos el paquete factoextra R. para ayudar en la interpretación y visualización del análisis factorial múltiple.
Valores propios / Varianzas
La proporción de varianzas retenidas por las diferentes dimensiones (ejes) se puede extraer utilizando la función get eigenvalue() [paquete factoextra]
La función fviz_eíg() o fviz screeplot() [paquete factoextra] se puede utilizar para dibujar el gráfico de pantalla:
library ("factoextra")
eig.val <- get_eigenvalue(res.mfa)
head(eig.val)
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 3.4619504 49.378382 49.37838
## Dim.2 1.3667683 19.494446 68.87283
## Dim.3 0.6154291 8.777969 77.65080
## Dim.4 0.3721997 5.308747 82.95954
## Dim.5 0.2703825 3.856511 86.81605
## Dim.6 0.2024033 2.886912 89.70297
fviz_screeplot (res.mfa)
Gráfico de variables
Grupos de variables
La función get mfa var() [de factoextra] se utiliza para extraer los resultados de grupos de variables. ’Esta función devuelve una lista que contiene las coordenadas, el cos2 y la contribución de los grupos
group <- get_mfa_var(res.mfa, "group")
group
## Multiple Factor Analysis results for variable groups
## ===================================================
## Name Description
## 1 "$coord" "Coordinates"
## 2 "$cos2" "Cos2, quality of representation"
## 3 "$contrib" "Contributions"
## 4 "$correlation" "Correlation between groups and principal dimensions"
fviz_mfa_var(res.mfa, "group")
El gráfico anterior ilustra la correlación entre grupos y dimensiones. Las coordenadas de los cuatro grupos activos en la primera dimensión son casi idénticas. Esto significa que contribuyen de manera similar a la primera dimensión. En cuanto a la segunda dimensión, los dos grupos, olor y olor después de agitar, tienen las coordenadas más altas que indican una contribución más alta a la segunda dimensión.
Para dibujar un gráfico de barras de la contribución de los grupos a las dimensiones, use la función fviz_contrib()
fviz_contrib(res.mfa, "group", axes = 1)
fviz_contrib(res.mfa, "group", axes = 2)
Variables cuantitativas
La función get _mfa_var() [in factoextra] se utiliza para extraer los resultados de las variables cuantitativas. Esta función devuelve una lista que contiene las coordenadas, el cos2 y la contribución de las variables
quanti.var <- get_mfa_var(res.mfa, "quanti.var")
quanti.var
## Multiple Factor Analysis results for quantitative variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates"
## 2 "$cos2" "Cos2, quality of representation"
## 3 "$contrib" "Contributions"
Correlación entre variables cuantitativas y dimensiones. El siguiente código R traza variables cuantitativas coloreadas por grupos. La paleta de argumentos se usa para cambiar los colores del grupo (consulte ?ggpubr::ggpar para obtener más información sobre la paleta). Las variables cuantitativas complementarias están en flecha discontinua y color violeta. Usamos repel = TRUE, para evitar la superposición de texto.
fviz_mfa_var(res.mfa, "quanti.var", palette = "jco",
col.var.sup = "violet", repel = TRUE)
Para que la gráfica sea más legible, podemos usar geom = c(“point”,
“text”) en lugar de geom = c(“arrow”, “text”). Cambie también la
posición de la leyenda de “right” a “bottom”, usando el argumento
leyenda = “bottom”
fviz_mfa_var(res.mfa, "quanti.var", palette = "jco",
col.var.sup = "violet", repel = TRUE,
geom = c("point", "text"), legend = "bottom")
La contribución de las variables cuantitativas (en %) a la definición de
las dimensiones se puede visualizar mediante la función fuiz _contrib()
[paquete factoextra]. Las variables están coloreadas por grupos. El
siguiente código R muestra las 20 principales categorías de variables
que contribuyen a las dimensiones
fviz_contrib(res.mfa, choice = "quanti.var", axes = 1, top = 20, palette = "jco")
fviz_contrib(res.mfa, choice = "quanti.var", axes = 2, top = 20, palette = "jco")
Las variables cuantitativas que más contribuyen se pueden resaltar en el diagrama de dispersión usando el argumento col.var = “contrib”. Esto produce un degradado de colores, que se puede personalizar utilizando el argumento degradado.cols.
fviz_mfa_var(res.mfa, "quanti.var", col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
col.var.sup = "violet", repel = TRUE, geom = c("point", "text"))
Gráfica de individuos
Para graficar individuos, use la función fviz_mfa_ind() [de factoextra]. De forma predeterminada, las personas se colorean en azul. Sin embargo, al igual que las variables, también es posible colorear a los individuos por sus valores de cos2
ind <- get_mfa_ind(res.mfa)
ind
## Multiple Factor Analysis results for individuals
## ===================================================
## Name Description
## 1 "$coord" "Coordinates"
## 2 "$cos2" "Cos2, quality of representation"
## 3 "$contrib" "Contributions"
## 4 "$coord.partiel" "Partial coordinates"
## 5 "$within.inertia" "Within inertia"
## 6 "$within.partial.inertia" "Within partial inertia"
fviz_mfa_ind(res.mfa, col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
Visualización e interpretación
Tenga en cuenta que es posible colorear a los individuos usando cualquiera de las variables cualitativas en la tabla de datos inicial. Para ello se utiliza el argumento habillage en la función fuiz_mfa_ind(). Por ejemplo, si desea colorear los vinos de acuerdo con la variable cualitativa complementaria “Etiqueta”, escriba esto
fviz_mfa_ind(res.mfa,
habillage = "Label",
palette = c("#00AFBB", "#E7B800", "#EC4E07"),
addEllipses = TRUE, ellipse.type = "confidence",
repel = TRUE
)
Si desea colorear personas usando múltiples variables categóricas al mismo tiempo, use la función fviz_ellipses() [factoextra] de la siguiente manera
fviz_ellipses(res.mfa, 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.
Gráfica de individuos parciales
Los resultados para individuos obtenidos del análisis realizado con un solo grupo se denominan individuos parciales. En otras palabras, un individuo considerado desde el punto de vista de un solo grupo se llama individuo parcial. Para un individuo dado, hay tantos puntos parciales como grupos de variables. La gráfica de individuos parciales representa cada vino visto por cada grupo y su baricentro. Si desea visualizar puntos parciales para vinos de interés, digamos c(“1DAM”, “1VAU”, “2ING”), use esto
fviz_mfa_ind(res.mfa, partial = c("1DAM", "1VAU", "2ING"))
Gráfico de ejes parciales
El gráfico de ejes parciales muestra la relación entre los ejes principales del MFA y los que se obtienen al analizar cada grupo mediante un PCA (para grupos de variables continuas) o un MCA (para variables cualitativas).
fviz_mfa_axes(res.mfa)
Resumen
El análisis factorial múltiple (MFA) hace posible analizar individuos caracterizados por múltiples conjuntos de variables. En este capítulo, describimos cómo realizar e interpretar MFA usando los paquetes FactoMineR y factoextra R.