CHAPTER 6 FACTOR ANALYSIS OF MIXED DATA

6.1 INTRODUCTION

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.

6.2 COMPUTATION

6.2.1 R PACKAGES

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

6.2.2 DATA FORMAT

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.

6.2.3 R CODE

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.

6.3 VISUALIZATION AND INTERPRETATION

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.

6.3.1 EIGENVALUES / VARIANCES

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)

6.3.2 GRAPH OF VARIABLES

6.3.2.1 ALL VARIABLES

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.

6.3.2.2 GRAPH OF VARIABLES

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)

6.3.2.3 GRAPH OF QUALITATIVE RESULTS

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.

6.3.3 GRAPH OF INDIVIDUALS

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")

6.4 SUMMARY

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.