6.1 Introduction

El algoritmo PAM, conocido como K-medoids, presenta una opción sólida frente al k-means para la segmentación de conjuntos de datos en clústeres. En el enfoque PAM, cada clúster se representa mediante un elemento seleccionado denominado medoide, que representa el punto más central del clúster. En R, podemos calcular el algoritmo PAM mediante el uso de la función pam(), la cual nos permite especificar el número de clústeres a generar. Además, para visualizar los resultados obtenidos con PAM, contamos con la función fviz_cluster() perteneciente al paquete factoextra. Es importante mencionar que, en el caso de conjuntos de datos extensos, se recomienda emplear la función clam() como una alternativa a pam().

6.2 Computation

6.2.1 R packages

Se instalan los paquetes FactoMineR, factoextra

Y luego se cargan los paquetes

library("FactoMineR")
library("factoextra")
## 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 usaremos un subconjunto del dataset wine el cual se encuentra en el paquete FactoMineR. Luego utilizamos str(df) para visualizar la estructura de los datos.

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

  1. Las dos primeras columnas son factores (Variables categoricas)
  2. El resto de las columnas son numericas (variables continuas)

El fin de este estudio es analizar las características de los vinos.

6.2.3 R code

Es posible emplear la función FAMD() para calcular el Análisis Factorial de Múltiples Correspondencias (FAMD). Se puede simplificar el formato de la siguiente forma:

FAMD (base, ncp = 5, sup.var = NULL, ind.sup = NULL, graph = TURE)

Base: se refiere a un conjunto de datos estructurado en forma de marco de datos, el cual cuenta con n filas y p columnas.

ncp: representa el número de dimensiones que se desean mantener en el resultado obtenido.

sup.var: es un vector que indica los índices de las variables suplementarias que se desean considerar.

ind.sup: es un vector que indica los índices de los individuos suplementarios que se desean incluir.

graph: es un valor lógico que determina si se desea mostrar una gráfica en caso de ser TRUE.

Para computar FAMD, se escribe lo siguiente:

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"

Para que se pueda reflejar, se usa la función print()

6.3 Visualization and interpretation

El paquete factoextra en R ofrece diversas funciones que resultan beneficiosas para llevar a cabo y visualizar análisis de correspondencia factorial múltiple (FAMD) de forma efectiva. Entre estas funciones se encuentran la extracción de valores propios/varianzas por dimensión, la visualización de dichos valores propios/varianzas, la extracción de resultados para individuos y variables, así como la visualización de los resultados para individuos y variables. Estas herramientas son de gran ayuda para interpretar los resultados del FAMD y comprender la estructura de los datos, incluyendo aspectos como la distribución de los individuos en el espacio factorial y las relaciones entre las variables y dimensiones.

Se recomienda adquirir conocimientos sobre la interpretación del análisis de componentes principales y el análisis de correspondencia múltiple para obtener una mejor comprensión de los conceptos utilizados en el FAMD y su aplicación en este contexto.

6.3.1 Eigenvalus / 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.

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

Las funciones fviz_eig() o fviz_screeplot, del paquete factoextra puede ser usado para dibujar la grafica

fviz_screeplot(res.famd)

6.3.2 Graph of variables

6.3.2.1 All variables

Se emplea la función get_mfa_var() con el fin de obtener los resultados relacionados con las variables. Esta función genera una lista que incluye las coordenadas, los valores de 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"

Y tambien se pueden acceder a los componentes con la siguiente función:

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

A continuación se presenta una representación gráfica que ilustra la correlación entre las variables y las principales dimensiones, así como la contribución de las variables a las dimensiones 1 y 2. En este análisis se utilizan las siguientes funciones:

-fviz_famd_var() para la visualización de variables cualitativas y cuantitativas.

-fviz_contrib() para observar la contribución de las variables en las dimensiones principales.

fviz_famd_var(res.famd, repel = TRUE)

fviz_contrib(res.famd, "var", axes = 1)

fviz_contrib(res.famd, "var", axes = 2)

En las gráficas se observa una línea roja punteada que representa el valor promedio esperado si las contribuciones fueran equitativas en todas las variables.

Al analizar los datos, se identifica que las variables más influyentes son Overall.quality y Harmony. Por otro lado, en la segunda dimensión, las variables que tienen una mayor contribució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)
print(quanti.var)
## FAMD results for variables 
##  ===================================================
##   Name       Description                      
## 1 "$coord"   "Coordinates"                    
## 2 "$cos2"    "Cos2, quality of representation"
## 3 "$contrib" "Contributions"

En esta sección exploraremos la visualización de las variables numéricas, y les asignaremos colores que reflejen su calidad de representación en el mapa de factores o sus contribuciones a las dimensiones. Implementaremos la opción repel = TRUE para evitar superposiciones de texto.

fviz_famd_var(res.famd, "quanti.var", repel = TRUE, col.var = "Pink")

Se exhibe la conexión existente entre las variables y la calidad de su representación, además de la correlación que se establece entre las variables y las dimensiones.

Si se desea destacar las variables cuantitativas que más contribuyen, se puede hacer uso del parámetro col.var = “contrib”. Esto dará lugar a una paleta de colores graduales, los cuales pueden ser ajustados a medida mediante el uso de gradient.cols.

fviz_famd_var(res.famd, "quanti.var", col.var = "contrib",
              gradient.cols = c("#F699CD", "#FEC5E5", "#FE7F9C"),
              repel = TRUE)

De manera análoga, es posible resaltar las variables numéricas al utilizar su cos2, el cual indica la calidad de representación en el mapa de factores.

fviz_famd_var(res.famd, "quanti.var", col.var = "cos2",
              gradient.cols = c("#F699CD", "#FEC5E5", "#FE7F9C"),
              repel = TRUE)

6.3.2.3 Graph of qualitative variables

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")
print(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("#F699CD", "#FEC5E5", "#FE7F9C"))

La anterior grafica muestra las categorías de las variables categoricas

6.3.3 Graph of individuals

Para obtener los resultados para individuos, se escribe lo siguiente:

ind <- get_famd_ind(res.famd)
print(ind)
## FAMD results for individuals 
##  ===================================================
##   Name       Description                      
## 1 "$coord"   "Coordinates"                    
## 2 "$cos2"    "Cos2, quality of representation"
## 3 "$contrib" "Contributions"

Para graficar individuos se puede usar la función fviz_mfa_ind().

fviz_famd_ind(res.famd, col.ind = "cos2", gradient.cols = c("#F699CD", "#FEC5E5", "#FE7F9C"), repel = TRUE)

En la representación gráfica anterior, se visualizan en negro las variables categóricas. En caso de que haya variables que se deseen excluir, se emplea el parámetro invisible = “quality.var”.

Si se desea asignar colores a los individuos utilizando cualquiera de los colores de la tabla de variables cualitativas, se logra mediante el argumento habillage.

fviz_mfa_ind(res.famd, habillage = "Label", palette = c("#F699CD", "#FC46AA", "#FE7F9C"), addEllipses = TRUE, ellipse.type = "confidence", repel = TRUE)

Si se busca asignar colores a los individuos considerando varias variables categóricas simultáneamente, se puede emplear 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;;>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Además, es posible indicar los índices correspondientes a variables categóricas.

fviz_ellipses(res.famd, 1:2, geom = "point")

6.4 Summary

La técnica de Análisis Factorial de Múltiples Correspondencias (FAMD) permite examinar conjuntos de datos que contienen variables de naturaleza cualitativa y cuantitativa. En este sentido, se exploró la utilización e interpretación de FAMD utilizando los paquetes FactoMineR y factoextra en R.