PARTE DOS DEL LABORATORIO: ANÁLISIS DE CLÚSTER(CONGLOMERADOS)
| NOMBRE | CARNET |
|---|---|
| AGUILAR ZACARIAS, CRISTALI DAYAMARI | AZ20006 |
| GUARDADO ANGEL, CARLOS ALBERTO | GA19035 |
| SANABRIA HERNÁNDEZ, MARIA ISABEL | SH21012 |
| PÉREZ PALACIOS, ELDER ARIEL | PP18054 |
ANÁLISIS DE CLÚSTER(CONGLOMERADOS)
1. Explique en que consiste el análisis de conglomerados.
El Análisis de Cluster, también conocido como Análisis de Conglomerados, constituye una técnica estadística multivariante que busca la agrupación de elementos o variables con el propósito de lograr la máxima homogeneidad dentro de cada grupo y, simultáneamente, la mayor diferencia entre los grupos.
Aunque es una herramienta esencial en diversas áreas de investigación, el Análisis de Cluster tiene limitaciones notables. Se trata de una técnica descriptiva, carece de fundamento teórico y no es inferencial. Su enfoque se basa en criterios geométricos, destacándose por ser una herramienta exploratoria y descriptiva, más que explicativa.
La efectividad del análisis de clúster depende enteramente de las variables utilizadas, y la adición o eliminación de variables puede tener un impacto significativo en la solución resultante (De la Fuente Fernández, 2011).
Existen dos tipos principales de análisis de clusters: jerárquicos y no jerárquicos.
MÉTODOS JERÁRQUICOS:
Estos métodos se apoyan en el cálculo de una matriz de distancias y son más efectivos cuando n < 200, ya que los cálculos y resultados se vuelven más complicados con muestras más grandes. Estos métodos no permiten la reasignación de grupos una vez que han sido formados.
-De aglomeración: También conocidos como ascendentes, parten de objetos singulares para construir conglomerados cada vez más complejos. Incluyen métodos como Simple Linkage (Vecino más próximo), Complete Linkage (Vecino más lejano), Promedio entre Grupos, Método del Centroide, Método de la Mediana y Método de Ward.
-De división: Parten del conjunto de datos y se dividen hasta crear un solo elemento. Los elementos en un grupo no pueden ser reasignados.
MÉTODOS NO JERÁRQUICOS:
Conocidos como métodos de “optimización”, permiten la reasignación de grupos, pero es necesario especificar de antemano el número de clústeres deseado. Algunos métodos incluyen:
-Reasignación: Permite la reasignación de individuos a diferentes conglomerados en cada fase. Métodos incluyen K-medias, Quick-Cluster, Método de Forgy y Nubes dinámicas.
-Búsqueda de densidad: Basados en la suposición de que los puntos pertenecientes a cada clúster se extraen de una distribución de probabilidad particular.
-Métodos directos: Clasifican simultáneamente individuos y variables.
-Métodos reductivos: Buscan factores en el espacio de los individuos, correspondiendo a un grupo. Un ejemplo es el Análisis Factorial tipo Q.
Es crucial diferenciar entre los métodos jerárquicos y no jerárquicos. Los primeros no requieren determinar a priori el número de conglomerados, y la asignación de objetos es definitiva, mientras que los segundos comienzan con una partición inicial y determinan el número y composición de conglomerados a priori, permitiendo la reasignación de objetos (Dı́az Covián et al., 2014).
2. Cuadro comparativo
| Análisis de Clúster | Técnicas disponibles | Ventajas | Desventajas |
|---|---|---|---|
| Jerárquico: Método que se apoya en el cálculo de una matriz de distancias y son más efectivos cuando n < 200, ya que los cálculos y resultados se vuelven más complicados con muestras más grandes. Estos métodos no permiten la reasignación de grupos una vez que han sido formados. |
Aglomerativas También conocidos como ascendentes, parten de objetos singulares para construir conglomerados cada vez más complejos. Incluye métodos como: -Método de encadenamiento simple. -Métodos de encadenamiento completo. -Método de encadenamiento medio. -Método de Ward. -Método del centroide. -Método de la Mediana De división Parten del conjunto de datos y se dividen hasta crear un solo elemento. Los elementos en un grupo no pueden ser reasignados. Incluye métodos como: -Simple Linkage (Vecino más próximo) -Complete Linkage (Vecino más lejano) -Promedio entre Grupos -Método del Centroide -Método de la Mediana -Método de Ward. |
- No se necesita determinar el número de clusters de antemano.
-Es posible identificar agrupaciones de cualquier forma. -Puede identificar valores atípicos. -Visualización clara mediante dendograma. |
- No permite la reasignación de grupos una vez formados.
-Sensibilidad a la elección de métodos y criterios de enlace. -Necesidad de especificar el número de clusters en el caso de métodos de división. |
| No jerárquico: También denominado agrupación en clústeres de particiones, son técnicas de agrupación empleadas para clasificar observaciones dentro de un conjunto de datos en diversos grupos según su similitud. Estos algoritmos requieren que el analista especifique previamente el número de conglomerados que se generarán. |
-Agrupación de K-medias. -Agrupación de K-medoides. -Algoritmo de Agrupación de aplicaciones. (por sus siglas en inglés, CLARA) -Método del centroide. -Nubes dinámicas. |
-Permite la reasignación de objetos en etapas posteriores.
-Mayor control sobre el número de clusters. |
-Requiere especificar de antemano el número de clusters
deseados. -Sensible a valores atípicos. -Al modificar la disposición de los datos, es altamente probable obtener una solución distinta. |
Fuente: Elaboración propia con base en Kassambara 2017
3. Describa las técnicas disponibles para realizar el análisis de clúster, tanto jerárquicas como no jerárquicas, presentadas en el cuadro anterior, incluya una explicación de la librería y sintaxis para implementarla en R.
Metodos Jerarquicos
Vecino más cercano
Una vez que se conocen las distancias existentes entre cada dos individuos se observa cuáles son los individuos más próximos en cuanto a esta distancia o similaridad (qué dos individuos tienen menor distancia o mayor similaridad). Estos dos individuos forman un grupo que no vuelve a separarse durante el proceso.
Vecino mas lejano
Conocidas las distancias o similaridades existentes entre cada dos individuos se observa cuáles son los individuos más próximos en cuanto a esta distancia o similaridad (qué dos individuos tienen menor distancia o mayor similaridad). Estos dos individuos formarán un grupo que no vuelve a separarse durante el proceso.
Promedio entre grupos
La distancia entre los grupos es la media aritmética de las distancias existentes entre todos los componentes de cada grupo, considerados dos a dos. Se consiguen grupos con varianzas similares y pequeñas. Método del centroide: La distancia entre dos grupos es la distancia existente entre sus centros de gravedad (centroides). El proceso comienza calculando el centro de gravedad de cada conglomerado, para agrupar los conglomerados cuya distancia entre centroides sea mínima. Tras unir dos conglomerados se calculó el nuevo centro de gravedad y se procede de forma similar. Con este procedimiento se reduce la influencia de casos extremos.
Método de la mediana
Es una variación de la agrupación de centroides, donde no se considera el número de individuos que forman cada uno de los agrupamientos. En el método anterior se calcula el centroide en función del número de individuos de cada conglomerado, de modo que cuando se une un gran conglomerado (por ejemplo 10 casos) con otro muy pequeño (por ejemplo 2 casos), este último apenas varía la situación del centroide inicial. En el método de la mediana no se considera el número de elementos de cada conglomerado, sino el número de conglomerados.
Método de Ward
Cuando se unen dos conglomerados, con independencia del método utilizado, la varianza aumenta. El método de Ward une los casos buscando minimizar la varianza dentro de cada grupo. Para ello se calcula, en primer lugar, la media de todas las variables en cada conglomerado. A continuación, se calcula la distancia entre cada caso y la media del conglomerado, sumando después las distancias entre todos los casos. Posteriormente se agrupan los conglomerados que generan menos aumentos en la suma de las distancias dentro de cada conglomerado. Este procedimiento crea grupos homogéneos y con tamaños similares.
Metodos no jerarquicos
K-Medias
comienza con una división del conjunto de los datos en (x) grupos configurados al azar y posteriormente busca mejorar esta primera clasificación reasignando los elementos al centroide del clúster más cercano, tratando de reducir la distancia media entre cada elemento de un grupo y su centroide.
Nubes dinámicas
Los algoritmos de clasificación clásicos generan particiones en las que cada objeto de x es asignado a una única clase. Sin embargo, a veces los objetos no pueden ser asignados estrictamente a una clase pues están localizados ‘entre’ distintas clases.
library(cluster)
library(factoextra)
data("USArrests")
df <- scale(USArrests)
res.dist <- dist(df, method = "euclidean")
as.matrix(res.dist)[1:10, 1:10]## Alabama Alaska Arizona Arkansas California Colorado Connecticut
## Alabama 0.000000 2.703754 2.293520 1.289810 3.263110 2.651067 3.215297
## Alaska 2.703754 0.000000 2.700643 2.826039 3.012541 2.326519 4.739912
## Arizona 2.293520 2.700643 0.000000 2.717758 1.310484 1.365031 3.262858
## Arkansas 1.289810 2.826039 2.717758 0.000000 3.763641 2.831051 2.607639
## California 3.263110 3.012541 1.310484 3.763641 0.000000 1.287619 4.066390
## Colorado 2.651067 2.326519 1.365031 2.831051 1.287619 0.000000 3.327992
## Connecticut 3.215297 4.739912 3.262858 2.607639 4.066390 3.327992 0.000000
## Delaware 2.019293 3.621363 1.909370 1.800324 3.073785 2.554746 1.756847
## Florida 2.298135 2.996764 1.749393 3.372197 2.025004 2.445860 4.470070
## Georgia 1.131435 2.819439 2.787196 2.211761 3.378058 2.864910 3.973823
## Delaware Florida Georgia
## Alabama 2.019293 2.298135 1.131435
## Alaska 3.621363 2.996764 2.819439
## Arizona 1.909370 1.749393 2.787196
## Arkansas 1.800324 3.372197 2.211761
## California 3.073785 2.025004 3.378058
## Colorado 2.554746 2.445860 2.864910
## Connecticut 1.756847 4.470070 3.973823
## Delaware 0.000000 3.061417 2.983872
## Florida 3.061417 0.000000 2.181296
## Georgia 2.983872 2.181296 0.000000
4. Del texto: Kassambara, A. (2017). Practical Guide to Cluster Analysis in R: Unsupervised Machine Learning (Multivariate Analysis) (1st ed.). STHDA, disponible en:https://xsliulab.github.io/Workshop/week10/r-cluster-book.pdf, desarrolle los ejemplos presentados en los capítulos: 4,5,6,7,8,9.
Capitulo 4: K-Means Clustering
4.3 Calcular la agrupación de k-medias en R.
4.3.1 Datos
data("USArrests") # Cargando el conjunto de datos
df <- scale(USArrests) # Scaling the data
# Ver las primeras 3 filas de datos
head(df, n = 3)## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
4.3.3 Estimación del número óptimo de conglomerados
library(factoextra)
fviz_nbclust(df, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2)
El gráfico anterior representa la varianza dentro de los grupos.
Disminuye a medida que k aumenta, pero se puede ver una curva (o “codo”)
en k = 4. Esta curva indica que los grupos adicionales más allá del
cuarto tienen poco valor. En la siguiente sección, clasificaremos las
observaciones en 4 racimos.
4.3.4 Cálculo de la agrupación en clústeres de k-medias
# Calcule k-medias con k = 4
set.seed(123)
km.res <- kmeans(df, 4, nstart = 25)
# Imprime los resultados
print(km.res)## K-means clustering with 4 clusters of sizes 8, 13, 16, 13
##
## Cluster means:
## Murder Assault UrbanPop Rape
## 1 1.4118898 0.8743346 -0.8145211 0.01927104
## 2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 3 -0.4894375 -0.3826001 0.5758298 -0.26165379
## 4 0.6950701 1.0394414 0.7226370 1.27693964
##
## Clustering vector:
## Alabama Alaska Arizona Arkansas California
## 1 4 4 1 4
## Colorado Connecticut Delaware Florida Georgia
## 4 3 3 4 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 2 4 3 2
## Kansas Kentucky Louisiana Maine Maryland
## 3 2 1 2 4
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 4 2 1 4
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 4 2 3
## New Mexico New York North Carolina North Dakota Ohio
## 4 4 1 2 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 4 3 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 2 2 3
##
## Within cluster sum of squares by cluster:
## [1] 8.316061 11.952463 16.212213 19.922437
## (between_SS / total_SS = 71.2 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
La salida impresa muestra:
• las medias o centros del conglomerado: una matriz, cuyas filas son el número de conglomerados (1 a 4) y las columnas son variables
• el vector de agrupamiento: un vector de números enteros (de 1: k) que indica el grupo al que se asigna cada punto.
Es posible calcular la media de cada variable por conglomerados utilizando los datos originales:
## cluster Murder Assault UrbanPop Rape
## 1 1 13.93750 243.62500 53.75000 21.41250
## 2 2 3.60000 78.53846 52.07692 12.17692
## 3 3 5.65625 138.87500 73.87500 18.78125
## 4 4 10.81538 257.38462 76.00000 33.19231
Si desea agregar las clasificaciones de puntos a los datos originales, use esto:
## Murder Assault UrbanPop Rape cluster
## Alabama 13.2 236 58 21.2 1
## Alaska 10.0 263 48 44.5 4
## Arizona 8.1 294 80 31.0 4
## Arkansas 8.8 190 50 19.5 1
## California 9.0 276 91 40.6 4
## Colorado 7.9 204 78 38.7 4
4.3.5 Acceso a los resultados de la función kmeans ()
## Alabama Alaska Arizona Arkansas California
## 1 4 4 1 4
## Colorado Connecticut Delaware Florida Georgia
## 4 3 3 4 1
## Hawaii Idaho Illinois Indiana Iowa
## 3 2 4 3 2
## Kansas Kentucky Louisiana Maine Maryland
## 3 2 1 2 4
## Massachusetts Michigan Minnesota Mississippi Missouri
## 3 4 2 1 4
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 4 2 3
## New Mexico New York North Carolina North Dakota Ohio
## 4 4 1 2 3
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 3 3 3 3 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 4 3 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 3 3 2 2 3
## Alabama Alaska Arizona Arkansas
## 1 4 4 1
## [1] 8 13 16 13
## Murder Assault UrbanPop Rape
## 1 1.4118898 0.8743346 -0.8145211 0.01927104
## 2 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 3 -0.4894375 -0.3826001 0.5758298 -0.26165379
## 4 0.6950701 1.0394414 0.7226370 1.27693964
4.3.6 Visualización de clústeres de k-medias
fviz_cluster(
km.res,
data = df,
palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
ellipse.type = "euclid",
# Concentration ellipse
star.plot = TRUE,
# Add segments from centroids to items
repel = TRUE,
# Avoid label overplotting (slow)
ggtheme = theme_minimal()
)CAPITULO 5: K-Medoids
5.3 Calcular PAM en R.
5.3.1 Datos
data("USArrests") # Cargar el conjunto de datos
df <- scale(USArrests) # Escala los datos
head(df, n = 3) # Ver las primeras 3 filas de datos## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
5.3.3 Estimación del número óptimo de conglomerados
5.3.4 Cálculo de la agrupación en clústeres PAM
El siguiente código R calcula el algoritmo PAM con k = 2:
## Medoids:
## ID Murder Assault UrbanPop Rape
## New Mexico 31 0.8292944 1.3708088 0.3081225 1.1603196
## Nebraska 27 -0.8008247 -0.8250772 -0.2445636 -0.5052109
## Clustering vector:
## Alabama Alaska Arizona Arkansas California
## 1 1 1 2 1
## Colorado Connecticut Delaware Florida Georgia
## 1 2 2 1 1
## Hawaii Idaho Illinois Indiana Iowa
## 2 2 1 2 2
## Kansas Kentucky Louisiana Maine Maryland
## 2 2 1 2 1
## Massachusetts Michigan Minnesota Mississippi Missouri
## 2 1 2 1 1
## Montana Nebraska Nevada New Hampshire New Jersey
## 2 2 1 2 2
## New Mexico New York North Carolina North Dakota Ohio
## 1 1 1 2 2
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 2 2 2 2 1
## South Dakota Tennessee Texas Utah Vermont
## 2 1 1 2 2
## Virginia Washington West Virginia Wisconsin Wyoming
## 2 2 2 2 2
## Objective function:
## build swap
## 1.441358 1.368969
##
## Available components:
## [1] "medoids" "id.med" "clustering" "objective" "isolation"
## [6] "clusinfo" "silinfo" "diss" "call" "data"
La salida impresa muestra:
• los medoides del clúster: una matriz, cuyas filas son los medoides y las columnas son variables
• el vector de agrupamiento: un vector de números enteros (de 1: k) que indica el grupo al que se asigna cada punto.
Si desea agregar las clasificaciones de puntos a los datos originales, use esto:
## Murder Assault UrbanPop Rape cluster
## Alabama 13.2 236 58 21.2 1
## Alaska 10.0 263 48 44.5 1
## Arizona 8.1 294 80 31.0 1
5.3.5 Acceder a los resultados de la función pam ()
La función pam () devuelve un objeto de clase pam cuyos componentes incluyen:
• medoides : objetos que representan grupos
• agrupación : un vector que contiene el número de agrupación de cada objeto
Se puede acceder a estos componentes de la siguiente manera:
## Murder Assault UrbanPop Rape
## New Mexico 0.8292944 1.3708088 0.3081225 1.1603196
## Nebraska -0.8008247 -0.8250772 -0.2445636 -0.5052109
## Alabama Alaska Arizona Arkansas California Colorado
## 1 1 1 2 1 1
CAPITULO 6:CLARA - Clustering Large Applications
6.3 Calcular CLARA en R
6.3.1 Formato y preparación de los datos
Para calcular el algoritmo CLARA en R, generaremos el uso de un conjunto de datos aleatorios. Para que el resultado sea reproducible, comenzamos utilizando la función set.seed ().
set.seed(1234)
# Genera 500 objetos, divididos en 2 grupos
df <- rbind(cbind(rnorm(200, 0, 8), rnorm(200, 0, 8)),
cbind(rnorm(300, 50, 8), rnorm(300, 50, 8)))
# Especificar nombres de filas y columnas
colnames(df) <- c("x", "y")
rownames(df) <- paste0("S", 1:nrow(df))
# Vista previa de los datos
head(df, nrow = 6)## x y
## S1 -9.656526 3.881815
## S2 2.219434 5.574150
## S3 8.675529 1.484111
## S4 -18.765582 5.605868
## S5 3.432998 2.493448
## S6 4.048447 6.083699
6.3.3 Estimación del número óptimo de conglomerados
Para estimar el número óptimo de clústeres en sus datos, es posible utilizar el método de silueta promedio como se describe en el capítulo de agrupamiento de PAM (Capítulo 5). El r function fviz_nbclust () [ paquete factoextra ] proporciona una solución para facilitar este paso
library(cluster)
library(factoextra)
fviz_nbclust(df, clara, method = "silhouette") +
theme_classic()
A partir de la gráfica, el número sugerido de grupos es 2. En la
siguiente sección, clasificaremos las observaciones en 2 grupos.
6.3.4 Computación CLARA
El siguiente código R calcula el algoritmo PAM con k = 2:
# Calcular CLARA
clara.res <- clara(df, 2, samples = 50, pamLike = TRUE)
# Imprimir componentes de clara.res
print(clara.res)## Call: clara(x = df, k = 2, samples = 50, pamLike = TRUE)
## Medoids:
## x y
## S121 -1.531137 1.145057
## S455 48.357304 50.233499
## Objective function: 9.87862
## Clustering vector: Named int [1:500] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
## - attr(*, "names")= chr [1:500] "S1" "S2" "S3" "S4" "S5" "S6" "S7" ...
## Cluster sizes: 200 300
## Best sample:
## [1] S37 S49 S54 S63 S68 S71 S76 S80 S82 S101 S103 S108 S109 S118 S121
## [16] S128 S132 S138 S144 S162 S203 S210 S216 S231 S234 S249 S260 S261 S286 S299
## [31] S304 S305 S312 S315 S322 S350 S403 S450 S454 S455 S456 S465 S488 S497
##
## Available components:
## [1] "sample" "medoids" "i.med" "clustering" "objective"
## [6] "clusinfo" "diss" "call" "silinfo" "data"
La salida de la función clara() incluye los siguientes componentes:
• medoides: Objetos que representan grupos
• agrupamiento: un vector que contiene el número de grupo de cada objeto
• muestra: etiquetas o números de caso de las observaciones en la mejor muestra, es decir, la muestra utilizada por el algoritmo clara para la partición final.
Si desea agregar las clasificaciones de puntos a los datos originales, use esto:
## x y cluster
## S1 -9.656526 3.881815 1
## S2 2.219434 5.574150 1
## S3 8.675529 1.484111 1
## S4 -18.765582 5.605868 1
Puede acceder a los resultados devueltos por clara () de la siguiente manera:
## x y
## S121 -1.531137 1.145057
## S455 48.357304 50.233499
## S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
## 1 1 1 1 1 1 1 1 1 1
Los medoides son S121, S455.
6.3.5 Visualización de clústeres CLARA
Para visualizar los resultados de la partición, usaremos la función fviz_cluster () [ el paquete factoextra]. Dibuja un diagrama de dispersión de puntos de datos coloreados por números de grupo.
fviz_cluster(
clara.res,
palette = c("#00AFBB", "#FC4E07"),
# color palette
ellipse.type = "t",
# Concentration ellipse
geom = "point",
pointsize = 1,
ggtheme = theme_classic()
)CAPITULO 7: Agglomerative Clustering
7.1 Algoritmo
La agrupación aglomerativa funciona de forma “de abajo hacia arriba.” Es decir, cada objeto se considera inicialmente como un grupo de un solo elemento (hoja). En cada paso del algoritmo, los dos grupos que son más similares se combinan en un nuevo grupo más grande (nodos). Este procedimiento se repite hasta que todos los puntos son miembros de un solo gran clúster (raíz) (consulte la figura siguiente). La inversa de la agrupación aglomerativa es agrupamiento divisivo, que también se conoce como DIANA (Análisis de división) y funciona de manera “de arriba hacia abajo.” Comienza con la raíz, en la que todos los objetos se incluyen en un solo clúster. En cada paso de la iteración, el grupo más heterogéneo se divide en dos. El proceso se repite hasta que todos los objetos están en su propio clúster.
Tenga en cuenta que la agrupación aglomerativa es buena para identificar agrupaciones pequeñas. La agrupación en clústeres divisoria es buena para identificar grandes agrupaciones. En este artículo, nos centraremos principalmente en la agrupación jerárquica aglomerativa.
7.2 Pasos para la agrupación jerárquica aglomerativa
Seguiremos los pasos a continuación para realizar agrupaciones jerárquicas aglomerativas utilizando el software R: 1. Preparación de los datos 2. Calcular información de (dis) similitud entre cada par de objetos en el conjunto de datos. 3. Uso de la función de vinculación para agrupar objetos en un árbol de agrupamiento jerárquico, según la información de distancia generada en el paso 1. Los objetos / agrupaciones que están muy próximos se vinculan entre sí mediante la función de vinculación. 4. Determinar dónde cortar el árbol jerárquico en grupos. Esto crea una partición de los datos.
7.2.1 Estructura y preparación de datos
Los datos deben ser una matriz numérica con: filas que representan observaciones (individuos); y columnas que representan variables, usaremos los conjuntos de datos de USArrests base R.
Tenga en cuenta que, en general, se recomienda estandarizar las variables en el conjunto de datos antes de realizar un análisis posterior. La estandarización hace que las variables sean comparables cuando se miden en diferentes escalas. Por ejemplo, una variable puede medir la altura en metros y otra variable puede medir el peso en kg.
# Cargar los datos
data("USArrests")
# Estandarizar los datos
df <- scale(USArrests)
# Mostrar las primeras 6 filas
head(df, nrow = 6)## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144 1.7589234 2.067820292
## Colorado 0.02571456 0.3988593 0.8608085 1.864967207
7.2.2 Medidas de similitud
# Calcule la matriz de disimilitud
# df = los datos estandarizados
res.dist <- dist(df, method = "euclidean")
as.matrix(res.dist)[1:6, 1:6]## Alabama Alaska Arizona Arkansas California Colorado
## Alabama 0.000000 2.703754 2.293520 1.289810 3.263110 2.651067
## Alaska 2.703754 0.000000 2.700643 2.826039 3.012541 2.326519
## Arizona 2.293520 2.700643 0.000000 2.717758 1.310484 1.365031
## Arkansas 1.289810 2.826039 2.717758 0.000000 3.763641 2.831051
## California 3.263110 3.012541 1.310484 3.763641 0.000000 1.287619
## Colorado 2.651067 2.326519 1.365031 2.831051 1.287619 0.000000
7.2.4 Dendrograma
En el dendrograma que se muestra arriba, cada hoja corresponde a un objeto. A medida que subimos por el árbol, los objetos que son similares entre sí se combinan en ramas, que a su vez se fusionan a una altura mayor.
La altura de la fusión, proporcionada en el eje vertical, indica la (dis) similitud / distancia entre dos objetos / grupos. Cuanto mayor sea la altura de la fusión, menos similares serán los objetos. Esta altura se conoce comodistancia cofenética entre los dos objetos.
Tenga en cuenta que las conclusiones sobre la proximidad de dos objetos solo se pueden extraer en función de la altura en la que se fusionan las ramas que contienen esos dos objetos primero. No podemos utilizar la proximidad de dos objetos a lo largo del eje horizontal como criterio de su similitud.
Para identificar subgrupos, podemos cortar el dendrograma a una cierta altura como se describe en las siguientes secciones.
7.3 Verificar el árbol del clúster
# Calcule la distancia cophentic
res.coph <- cophenetic(res.hc)
# Correlación entre distancia cofenética y
# la distancia original
cor(res.dist, res.coph)## [1] 0.6975266
Ejecute la función hclust () nuevamente usando el método de vinculación promedio. A continuación, llame cophenetic () para evaluar la solución de agrupamiento.
## [1] 0.7180382
7.4 Cortar el dendrograma en diferentes grupos
## Alabama Alaska Arizona Arkansas
## 1 2 2 3
## grp
## 1 2 3 4
## 7 12 19 12
## [1] "Alabama" "Georgia" "Louisiana" "Mississippi"
## [5] "North Carolina" "South Carolina" "Tennessee"
El resultado de los cortes se puede visualizar fácilmente usando la función fviz_dend () [en factoextra]:
# Cortar en 4 grupos y colorear por grupos
fviz_dend(
res.hc,
k = 4,
# Cut in four groups
cex = 0.5,
# label size
k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE,
# color labels by groups
rect = TRUE # Add rectangle around groups
)Usando la función fviz_cluster () [in factoextra], también podemos visualizar el resultado en un diagrama de dispersión. Las observaciones están representadas por puntos en la gráfica, usando el método de componentes principales. Se dibuja un marco alrededor de cada grupo.
fviz_cluster(
list(data = df, cluster = grp),
palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
ellipse.type = "convex",
# Elipse de concentración
repel = TRUE,
# # Evite el trazado excesivo de etiquetas (lento)
show.clust.cent = FALSE,
ggtheme = theme_minimal()
)7.5 Paquete Cluster R
El clúster de paquetes R facilita la realización de análisis de clústeres en R. Proporciona la función agnes () y diana () para calcular la agrupación aglomerativa y divisiva, respectivamente. Estas funciones realizan todos los pasos necesarios para usted. No necesitas para ejecutar las funciones scale (), dist () y hclust () por separado.
Las funciones se pueden ejecutar de la siguiente manera
library("cluster")
# Anidación aglomerativa (agrupación jerárquica)
res.agnes <- agnes(
x = USArrests,
# matriz de datos
stand = TRUE,
# Estandarizar los datos
metric = "euclidean",
# métrica para matriz de distancia
method = "ward" # Método de vinculación
)
# Agrupación de análisis de análisis visual
res.diana <- diana(x = USArrests, # matriz de datos
stand = TRUE, # estandarizar los datos
metric = "euclidean" # métrica para matriz de distancia
)Después de ejecutar agnes () y diana (), puede usar la función fviz_dend () [in factoextra] para visualizar la salida:
CAPITULO 8: Comparing Dendrograms
8.1 Preparación de datos
Usaremos los conjuntos de datos de USArrests base R y comenzaremos por estandarizar las variables usando la función scale () de la siguiente manera:
df <- scale(USArrests)
# Para hacer legibles los gráficos, generados en las siguientes secciones, trabajaremos con un pequeño subconjunto aleatorio del conjunto de datos. Por lo tanto, usaremos la funciónmuestra() para seleccionar al azar 10 observaciones entre las 50 observaciones contenidas en el conjunto de datos:
# Subconjunto que contiene 10 filas
set.seed(123)
ss <- sample(1:50, 10)
df <- df[ss, ]8.2 Comparación de dendrogramas
library(dendextend)
# Calcular matriz de distancias
res.dist <- dist(df, method = "euclidean")
# Calcule 2 agrupaciones jerárquicas
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")
# Crear dos Dendogramas
dend1 <- as.dendrogram (hc1)
dend2 <- as.dendrogram (hc2)
# Crea una lista para contener dendrogramas
dend_list <- dendlist(dend1, dend2)8.2.1 Comparación visual de dos dendrogramas
Personalizó el enredo con muchas otras opciones de la siguiente manera:
tanglegram(dend1, dend2,
highlight_distinct_edges = FALSE, # Turn-off dashed lines
common_subtrees_color_lines = FALSE, # Turn-off line colors
common_subtrees_color_branches = TRUE, # Color common branches
main = paste("entanglement =", round(entanglement(dend_list), 2))
)Tenga en cuenta que los nodos “únicos,” con una combinación de etiquetas / elementos que no están presentes en el otro árbol, están resaltados con líneas discontinuas.
8.2.2 Matriz de correlación entre una lista de dendrogramas
## [,1] [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
## [,1] [,2]
## [1,] 1.0000000 0.9895528
## [2,] 0.9895528 1.0000000
La correlación entre dos árboles también se puede calcular de la siguiente manera:
## [1] 0.9925544
## [1] 0.9895528
También es posible comparar simultáneamente varios dendrogramas. Un operador de encadenamiento %>% se usa para ejecutar múltiples funciones al mismo tiempo. Es útil para simplificar código
# Crea múltiples dendrogramas encadenando
dend1 <- df %>% dist %>% hclust("complete") %>% as.dendrogram
dend2 <- df %>% dist %>% hclust("single") %>% as.dendrogram
dend3 <- df %>% dist %>% hclust("average") %>% as.dendrogram
dend4 <- df %>% dist %>% hclust("centroid") %>% as.dendrogram
# Calcular matriz de correlación
dend_list <- dendlist(
"Complete" = dend1,
"Single" = dend2,
"Average" = dend3,
"Centroid" = dend4
)
cors <- cor.dendlist(dend_list)
# Imprimir matriz de correlación
round(cors, 2)## Complete Single Average Centroid
## Complete 1.00 0.46 0.45 0.30
## Single 0.46 1.00 0.23 0.17
## Average 0.45 0.23 1.00 0.31
## Centroid 0.30 0.17 0.31 1.00
# Visualice la matriz de correlación usando el paquete corrplot
library(corrplot)
corrplot(cors, "pie", "lower")CAPITULO 9: Visualizing Dendrograms
9. Visualización de dendrogramas
Comenzamos calculando la agrupación jerárquica utilizando los conjuntos de datos de USArrests:
# Cargar datos
data(USArrests)
# Calcular distancias y agrupamiento jerárquico
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")9.1 Visualización de dendrogramas
Puede usar los argumentos main, sub, xlab, ylab para cambiar los títulos de la trama de la siguiente manera:
fviz_dend(
hc,
cex = 0.5,
main = "Dendrogram - ward.D2",
xlab = "Objects",
ylab = "Distance",
sub = ""
)Para dibujar un dendrograma horizontal, escriba esto:
Para cambiar el tema de la trama, use el argumento ggtheme, cuyos valores permitidos incluyen ggplot2 temas oficiales [theme_gray (), theme_bw (), theme_minimal (), theme_classic (), theme_void ()] o cualquier otro tema de ggplot2 definido por el usuario.
fviz_dend(hc, k = 4, # Cut in four groups
cex = 0.5, # label size
k_colors = c("#8B0000", "#006400", "#8B008B", "#00008B"),
color_labels_by_k = TRUE, # color labels by groups
ggtheme = theme_gray() # Change theme
)Si desea dibujar un dendrograma horizontal con un rectángulo alrededor de los grupos, use esto:
fviz_dend(
hc,
k = 4,
cex = 0.4,
horiz = TRUE,
k_colors = "jco",
rect = TRUE,
rect_border = "jco",
rect_fill = TRUE
)Además, puede trazar un dendrograma circular usando la opción type = “circular.”
Para trazar un árbol filogénico, use type = “phylogenic” y repel = TRUE (para evitar superposición de etiquetas). Esta funcionalidad requiere el paquete R igraph. Asegúrate de eso está instalado antes de escribir el siguiente código R
## Loading required package: igraph
## Warning: package 'igraph' was built under R version 4.3.2
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
El diseño predeterminado para árboles filogenéticos es “layout.auto.” Los valores permitidos son uno de: c (“layout.auto,” “layout_with_drl,” “layout_as_tree,” “layout.gem,” “layout.mds,” “Layout_with_lgl”). Para leer más sobre estos diseños, lea la documentación del paquete igraph R.
Probemos phylo.layout = “layout.gem”:
require("igraph")
fviz_dend(
hc,
k = 4,
# Cortar en cuatro grupos
k_colors = "jco",
type = "phylogenic",
repel = TRUE,
phylo_layout = "layout.gem"
)9.2 Caso de dendrograma con grandes conjuntos de datos
9.2.2 Trazado de un subárbol de dendrogramas
9.2.2 Trazado de un subárbol de dendrogramas
# Cree una gráfica de todo el dendrograma,
# y extrae los datos del dendrograma
dend_plot <- fviz_dend(hc,
k = 4,
# Cortar en cuatro grupos
cex = 0.5,
# label size
k_colors = "jco")
dend_data <-
attr(dend_plot, "dendrogram") # Extraer datos de dendrograma
# # Cortar el dendrograma a la altura h= 10
dend_cuts <- cut(dend_data, h = 10)
# Visualice la versión truncada que contiene
# dos ramas
fviz_dend(dend_cuts$upper)También puede trazar árboles circulares de la siguiente manera:
9.3 Manipulación de dendrogramas usando dendextend
data <- scale(USArrests)
dist.res <- dist(data)
hc <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(hc)
plot(dend)Código R para crear un dendrograma usando un operador de encadenamiento:
library(dendextend)
dend <- USArrests[1:5, ] %>% # data
scale %>% # Escala de datos
dist %>% # calcular una matriz de distancia,
hclust(method = "ward.D2") %>% # Agrupación jerárquica
as.dendrogram # Convierte el objeto en un dendrograma.
plot(dend)Funciones para personalizar dendrogramas: la función set () [en el paquete dendextend] se puede utilizar para cambiar los parámetros de un dendrograma. El formato es:set(object, what, value)
objeto: un objeto dendrograma
qué: un carácter que indica cuál es la propiedad del árbol que debe ser configurar / actualizar
valor: un vector con el valor a establecer en el árbol (el tipo de valor depende sobre el “qué”).
Valores posibles para el argumento qué incluir:
library(dendextend)
# 1. Crea un dendrograma personalizado
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#00008B")
dend <- as.dendrogram(hc) %>%
set("branches_lwd", 1) %>% # Ancho de línea de ramas
set("branches_k_color", mycols, k = 4) %>% # Colorea ramas por grupos
set("labels_colors", mycols, k = 4) %>% # Etiquetas de color por grupos
set("labels_cex", 0.5) # Cambiar el tamaño de la etiqueta
# 2. Crea una trama
fviz_dend(dend)5. Presente un ejemplo de aplicación de Análisis de Cluster, con datos de un caso de lo disponibles en https://www.kaggle.com/datasets (puede buscar dentro del sitio por la palabra clave “Cluster”.
El siguiente ejercio, es sobre los datos recogidos en http://tinyurl.com/yl29woeb, sobre Casos de Covid 19 en Asia(hasta octubre de 2021), que contiene la siguiente información, Número total de casos, Total de muertes registradas, Cuantas personas sobrevivieron, Numero de personas que tienen el virus, poblacion del pais, etc. Mediante el análisis de Cluster nos interesa agrupar aquellos paises con desempeños similares al afrontar la pandemia, para ello utilizaremos el método de agrupación jerárquica aglomerativa.
Estructura y preparación de datos
library(readr)
AsiaCases_ <- read_csv("C:/Users/Guardado/Documents/AsiaCases_.csv",
col_types = cols(ID = col_skip(), Country = col_skip()))
rownames(AsiaCases_)<- c("Yemen", "Vietnam", "Uzbekistan", "UAE", "Turkey", "Timor-Leste", "Thailand", "Tajikistan", "Taiwan", "Syria", "Sri Lanka", "Singapore", "Saudi Arabia", "S. Korea", "Qatar", "Philippines", "Palestine", "Pakistan", "Oman", "Nepal", "Myanmar", "Mongolia", "Maldives", "Malaysia", "Macao", "Lebanon", "Laos", "Kyrgyzstan", "Kuwait", "Kazakhstan", "Jordan", "Japan", "Israel", "Iraq", "Iran", "Indonesia", "India", "Hong Kong", "Georgia", "Cyprus", "China", "Cambodia", "Brunei", "Bhutan", "Bangladesh", "Bahrain", "Azerbaijan", "Armenia", "Afghanistan")## TotalCases TotalDeaths TotalRecovered ActiveCases
## Yemen -0.3166424 -0.3188696 -0.3114628 -0.44184441
## Vietnam -0.1486838 -0.0461558 -0.1507152 -0.04988727
## Uzbekistan -0.2824015 -0.3262332 -0.2766138 -0.42534879
## UAE -0.1692711 -0.3139896 -0.1612562 -0.41057727
## Turkey 1.1874090 0.6164936 1.1147759 4.93314503
## Timor-Leste -0.3145580 -0.3429646 -0.3086857 -0.45795071
## TotalCasesPerMillion TotalDeathsPerMillion TotalTests
## Yemen -0.9418307 -0.8119713 -0.3382365
## Vietnam -0.7640605 -0.5034273 0.1501160
## Uzbekistan -0.8351426 -0.8548814 -0.3253762
## UAE 0.6400285 -0.4993406 0.6671044
## Turkey 0.9340423 0.6510584 0.6971727
## Timor-Leste -0.6334837 -0.7506711 -0.3393432
## TotalTestsPerMillion TotalPopulation
## Yemen -0.62471839 -0.22811216
## Vietnam -0.39771211 0.01242593
## Uzbekistan -0.60767464 -0.21595737
## UAE 4.03081209 -0.30126749
## Turkey -0.06563526 -0.03355576
## Timor-Leste -0.56202760 -0.33210812
Medidas de similitud
## Yemen Vietnam Uzbekistan UAE Turkey Timor-Leste
## Yemen 0.0000000 0.8699042 0.1286098 5.033421 6.414327 0.3382811
## Vietnam 0.8699042 0.0000000 0.8390794 4.706523 5.769261 0.8778004
## Uzbekistan 0.1286098 0.8390794 0.0000000 4.983660 6.361529 0.2658971
## UAE 5.0334207 4.7065228 4.9836601 0.000000 7.152155 4.8825191
## Turkey 6.4143275 5.7692614 6.3615290 7.152155 0.000000 6.3323384
## Timor-Leste 0.3382811 0.8778004 0.2658971 4.882519 6.332338 0.0000000
Cortando el dendrograma en diferentes grupos
Ya que la agrupación jerárquica es que no indica cuántos racimos que hay o donde cortar el dendrograma para formar grupos se ha decidido, para distribuir optimamente, cortar en 4 grupos.
## Yemen Vietnam Uzbekistan UAE
## 1 1 1 2
Visualización de clústeres y Dendograma
Por ultimo los clústeres quedan distruibuidos de la siguiente manera, y se presenta un dendograma y la agrupación grafica de los clúster.
fviz_dend(
res.hc,
k = 4,
# Cut in four groups
cex = 0.5,
# label size
k_colors = c( "#00AFBB", "#FC4E07", "#E7B800","blue"),
color_labels_by_k = TRUE,
# color labels by groups
rect = TRUE # Add rectangle around groups
)fviz_cluster(
list(data = df, cluster = grp),
palette = c( "#00AFBB", "#FC4E07", "#E7B800","green"),
ellipse.type = "convex",
# Elipse de concentración
repel = TRUE,
# # Evite el trazado excesivo de etiquetas (lento)
show.clust.cent = FALSE,
ggtheme = theme_minimal()
)## grp
## 1 2 3 4
## 27 17 2 1
Finalmente el los clúster quedan constituidos de la siguiente manera:
1.El Cluster #1 tiene 27 paises, que comparten un desempeño en el manejo la pandemia similar.
2.El Cluster #2 contiene 17 países, que comparten un desempeño similar del manejo de la pandemia.
3.El Cluster #3 contiene 2 países, Iran y Turquía, que comparten un desempeño similar del manejo de la pandemia.
4.El Cluster #4 contiene solamente a India, que no comparte similitudes en el manejo de la pandemia con ningún otro país.
Bibliografía
Conglomerados, F. S. A. (2011). Facultad de ciencias económicas y empresariales. Universidad Autónoma de Madrid.
Kassambara, A. (2017). Practical guide to cluster analysis in r: Unsupervised machine learning (Vol. 1). Sthda.
Kassambara, Alboukadel, and Fabian Mundt. 2020. Factoextra: Extract and Visualize the Results of Multivariate Data Analyses. http://www.sthda.com/english/rpkgs/factoextra.
R Package ’Corrplot’: Visualization of a Correlation Matrix. https://github.com/taiyun/corrplot.
Wickham, Hadley, Romain François, Lionel Henry, and Kirill Müller. 2021. Dplyr: A Grammar of Data Manipulation. https://CRAN.R-project.org/package=dplyr.