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().
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
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):
El fin de este estudio es analizar las características de los vinos.
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()
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.
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)
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.
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)
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
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")
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.