Portada

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE CIENCIAS ECONÓMICAS

ESCUELA DE ECONOMÍA

CICLO II-2022

Laboratorio 2 Análisis de Clúster (Conglomerados)

MÉTODOS PARA EL ANÁLISIS ECONÓMICO

Docente:

Carlos Ademir Pérez Alas

Integrantes:

Blanco Ochoa, José Alejandro BO20007

Bonilla Melara, Jeffry Isaac BM20033

Iraheta Mendoza, Ana Sofía IM19002

Mejía Platero, Roberto Moisés MP19056

Palacios Zuniga, Luis Alexander PZ18008

Grupo Teórico

03

Grupo de Trabajo

San Salvador, Ciudad Universitaria, 25 de Noviembre del 2022

1. Explique en qué consiste el análisis de conglomerados.

El análisis de clúster o también llamado análisis de conglomerados, es una técnica diseñada para clasificar distintas observaciones en grupos, de tal forma que cada grupo (clúster o conglomerado) sea homogéneo respecto a las variables utilizadas para caracterizarlo, es decir, que cada observación obtenida en el sea parecida a todas las que estén incluidas en ese grupo; además otra característica es que los grupos sean lo mas distintos posibles uno de otros respecto a las variables consideradas. (Aldas)

El Análisis Clúster es una técnica descriptiva, ateórica y no inferencial que no tiene bases estadísticas sobre las que deducir inferencias estadísticas para una población a partir de una muestra, es un método basado en criterios geométricos y se utiliza fundamentalmente como una técnica exploratoria, descriptiva pero no explicativa. Las soluciones no son únicas, en la medida en que la pertenencia al conglomerado para cualquier número de soluciones depende de muchos elementos del procedimiento elegido. Por otra parte, la solución clúster depende totalmente de las variables utilizadas, la adición o destrucción de variables relevantes puede tener un impacto substancial sobre la solución resultante (fuente)

Pasos para el análisis clúster:

• Se tiene información de n casos y k variables.

• Se establece un indicador que nos diga en qué medida cada par de observaciones se parece entre sí (distancia o similitud).

• Se crean los grupos de acuerdo con la medida de similitud o distancia anterior. Hay dos tipos de creación de grupos y varios métodos de agrupación.

• Se describen los grupos obtenidos y se comparan unos con otros.

• Validación del análisis

2. Elabore un cuadro comparativo, que incluya los siguientes elementos:

(Lo indicado en rojo corresponde a los elementos a redactar, en la versión a ser entregada debe aparecer el texto negro normal).

Análisis de Clúster

Técnicas

disponibles

Ventajas

Desventajas

Jerárquico: Este es un método alternativo a la agrupación en clústeres de particiones para agrupar objetos en función de su similitud. La agrupación jerárquica no requiere especificar el número de clústeres que se producirán.

 

 

 

 

 

 

Aglomerativo

 

Divisivo

No es necesario especificar el número de clústeres necesarios para el algoritmo.

 

El clustering jerárquico es sencillo de implementar.

 

El dendrograma producido es muy útil para la comprensión de los datos.

El algoritmo no puede deshacer ninguno de los pasos anteriores. Si el algoritmo agrupa dos puntos, el programa no es capaz de deshacer este paso.

 

La complejidad del tiempo para el clustering puede dar lugar a tiempos de cálculo muy largos.

 

Si hay un conjunto de datos grandes, puede ser complicado determinar el número correcto de clústeres por el dendograma.

No jerárquico: Este es una serie de métodos de agrupación que se utilizan para clasificar las observaciones dentro de un conjunto de datos, en varios grupos en función de su similitud.

K-means

K-Medoids (PAM)

 

Clustering Large Applications (CLARA)

 

Block - Clustering

 

Análisis Factorial tipo Q

Estos métodos son una alternativa robusta para dividir un conjunto de datos en grupos de observación.

 

La agrupación en clústeres de K-means es un algoritmo simple y rápido.

 

Puede lidiar de manera eficiente con conjuntos grandes de datos.

Es necesario que se conozcan los datos y se indique el número apropiado de clústeres que se van a producir.

 

Los resultados obtenidos son sensibles a la selección aleatoria inicial de los clústeres.

 

Es sensible a los valores atípicos.

Si reorganiza sus datos, es muy posible que obtenga una solución diferente cada vez que cambie el orden de estos.

 

 

 

Fuente: Elaboración propia con base en “Kassambara, A. (2017). Obtenido de Practical Guide To Cluster Analysis in R. Unsupervised Machine Learning.”

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.

Con base a información extraída de (Kassambara, 2017):

Métodos Jerárquicos:

Aglomerativo

Este trata a cada objeto como un clúster único, luego los pares de clústeres se unen sucesivamente hasta crear un gran clúster que contiene todos los objetos. El resultado de esto es un árbol (representación de los objetos) denominado dendrograma, donde la agrupación de este funciona “de abajo hacia arriba”. En otras palabras, cada objeto al inicio es considerado como un grupo de un solo elemento (una hoja) y en cada paso del algoritmo, los dos grupos que son los más parecidos se combinan en un nuevo grupo más grande (nodos), repitiéndose hasta que todos los puntos son miembros de un gran clúster (raíz). Esta agrupación aglomerativa es buena para identificar agrupaciones pequeñas.

Métodos:

Simple Linkage (Vecino más cercano): Una vez conocida las distancias existentes entre cada dos individuos, se observa cua´les son los más próximos en cuanto a distancia o similaridad (menor distancia o mayor similaridad). Ambos individuos que cumplan con lo anterior mencionado forman un grupo que no se separa durante el proceso.

Complete Linkage (Vecino más lejano): El agrupamiento de enlaces completos es la distancia entre los elementos más distantes en cada grupo.

Average Linkage (Promedio entre grupos): Este método presenta la ventaja de que aprovecha la información de todos los miembros de los conglomerados que se comparan uniéndolos previamente. La distancia entre dos conglomerados se calcula como la distancia promedio existente entre todos los miembros del conglomerado unión de ambos.

Método del Centroide: Este método es espacio-conservativo, pero presenta el inconveniente de dejarse influir excesivamente por los grupos de mayor tamaño.

Método de la Mediana: La mayor desventaja del método del centroide es que si se fusionan dos grupos de diferente tamaño, el centroide del nuevo grupo queda más cerca del grupo de mayor tamaño y más alejado del de menor tamaño en proporción a sus diferencias de tamaño. Esto trae como consecuencia que durante el proceso aglomerativo de fusión se van perdiendo paulatinamente las propiedades de los grupos pequeños. Para evitar esto, puede suponerse, con independencia del tamaño que tengan los grupos en realidad, que los grupos son de igual tamaño.

Llevando a cabo esta estrategia, la distancia entre un individuo o grupo K de centroide k y el grupo formado por la fusión de los grupos I y J de centroides i y j viene dada por la mediana del triángulo i,j, k. Razón por la cual Gower propuso el nombre de método (distancia) de la mediana.

Este método es, como el del centroide, espacio-conservativo, aunque también como él no resulta ser invariante ante transformaciones monótonas de la distancia empleada, cosa que sí ocurría con los tres primeros métodos.

Método de Ward: Ward propuso que la pérdida de información que se produce al integrar los distintos individuos en clusters puede medirse a través de la suma total de los cuadrados de las desviaciones entre cada punto (individuo) y la media del cluster en el que se integra. Para que el proceso de clusterización resulte óptimo, en el sentido de que los grupos formados no distorsionen los datos originales, proponía la siguiente estrategia:

En cada paso del análisis se debe considerar la posibilidad de la unión de cada par de grupos y optar por la fusión de dos grupos que menos incrementen la suma de los cuadrados de las desviaciones al unirse.

El método de Ward es uno de los más utilizados en la práctica; posee casi todas las ventajas del método de la media y suele ser más discriminativo en la determinación de los niveles de agrupación .Una investigación llevada a cabo por Kuiper y Fisher probó que este método era capaz de acertar mejor con la clasificación óptima que otros métodos (mínimo, máximo, media y centroide).

Disociativa

Por otro lado, la inversa de la agrupación aglomerativa es la agrupación divisiva que también es conocida como DIANA (Divise Analysis) y funciona de “arriba hacía abajo”. Comienza con el root, en el 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 grupo. Esta agrupación divisiva es buena para identificar grandes agrupaciones.

Pasos a seguir

Se debe seguir los siguientes pasos:

  1. Preparar los datos.

  2. Calcular información de (des) similitud entre cada par de objetos en los datos a colocar.

  3. Uso de la función de vinculación para agrupar objetos en un árbol de clúster jerárquico, según la información de distancia generada en el paso 1. Objetos/grupos que están cerca aproximadamente se vinculan entre sí mediante la función de vinculación.

  4. Determinar dónde cortar el árbol jerárquico en grupos. Esto crea un partición de los datos.

Usando método de Linkage

library(cluster)
library(factoextra)
data("USArrests")
df <- scale(USArrests)
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
res.hc <- hclust(d = res.dist, method = "ward.D2")
fviz_dend(res.hc, cex = 0.5)

Métodos no Jerárquicos:

Reasignación:

Este método permite que un individuo asignado a un grupo en un determinado paso del proceso sea reasignado a otro grupo en un paso posterior, si esto optimiza el criterio de selección. El proceso termina cuando no quedan individuos cuya reasignación permita optimizar el resultado que se ha conseguido. Algunos de los algoritmos más conocidos dentro de estos métodos son el método K-means (o K-medias) de McQueen (1967), el Quick Cluster Analysis y el método de Forgy, los cuales se suelen agrupar bajo el nombre de métodos centroides o centros de gravedad.

K-means Clustering:

Este método necesita como dato de entrada el número de grupos en los que se va a segmentar la población. A partir de este número k de clusters, el algoritmo coloca primero k puntos aleatorios (centroides), luego asigna a cualquiera de esos puntos todas las muestras con las distancias más pequeñas.

A continuación, el punto se desplaza a la media de las muestras más cercanas, lo cual generará una nueva asignación de muestras, ya que algunas muestras están ahora más cerca de otro centroide. Este proceso se repite de forma iterativa y los grupos se van ajustando hasta que la asignación no cambia más moviendo los puntos. Este resultado final representa el ajuste que maximiza la distancia entre los distintos grupos y minimiza la distancia intragrupo.

K-medoides o PAM:

Este algoritmo es n enfoque de agrupación relacionado con la agrupación de k-medias para dividir un conjunto de datos en k grupos o agrupaciones. En la agrupación de k-medoides, cada grupo está representado por uno de los puntos de datos en el grupo. Estos puntos se denominan medoides de racimo.

Cuando decimos medoide nos referimos al objeto dentro de un grupo para el cual la disimilitud promedio entre él y todos los demás miembros del grupo es mínima. Corresponde a el punto más céntrico del grupo. Estos objetos (uno por grupo) se pueden considerar como un ejemplo representativo de los miembros de ese grupo que puede ser útil en algunas situaciones. Recuerde que, en la agrupación de k-medias, el centro de un grupo dado se calcula como el valor medio de todos los puntos de datos en el grupo.

K-medoid es una alternativa sólida al agrupamiento de k-medias. Esto significa que el algoritmo es menos sensible al ruido y valores atípicos, en comparación con k-medias, porque usa medoides como centros de clúster en lugar de medias (usado en k-medias).

El algoritmo k-medoids requiere que el usuario especifique k, el número de clusters que se generarán (como en el clustering de k-means). Un enfoque útil para determinar el número óptimo de conglomerados es el método de silueta, que se describe en las siguientes secciones. El método de agrupamiento de k-medoides más común es el algoritmo PAM (Partitioning Around Medoids, Kaufman & Rousseeuw, 1990).

CLARA:

Este método puede manejar conjuntos de datos mucho más grandes. Internamente, esto se logra considerando subconjuntos de datos de tamaño fijo ( sampsize) de modo que los requisitos de tiempo y almacenamiento se vuelvan lineales en n en lugar de cuadrático

Cada subconjunto de datos se divide en k grupos utilizando el mismo algoritmo que en PAM. Una vez que se han seleccionado objetos representativos del subconjunto de datos, cada observación de todo el conjunto de datos se asigna al medoide más cercano. La media (equivalente a la suma) de las diferencias de las observaciones con su medoide más cercano se usa como una medida de la calidad de la agrupación. Se retiene el subconjunto de datos para el cual la media (o suma) es mínima.

Nubes Dinámicas:

Se basa en que cada clúster debe tener una representación llamada núcleo o centroide de clúster para, posteriormente, hacer una búsqueda iterada de centroides y de clúster, por lo que cada clase estará repsentada por un núcleo, que será un elemento representativo de todos los que intefran la misma.

Es decir, que en lugar de elegir como referencia de clase un sólo punto que constituye su centro y reasignar los puntos por proximidad a ese centro, se eligen varios puntos “h” para representar cada clase, siendo estos puntos el “núcleo” de la clase.

Búsqueda de densidad:

Este método presenta una aproximación tipológica y una aproximación probabilística. En la primera aproximación, los grupos se forman buscando las zonas en las cuales se da una mayor concentración de individuos. Entre los algoritmos más conocidos dentro de estos métodos están el análisis modal de Wishart, el método de Taxmap de Carmichael y Sneath, y el método de Fortin. En la segunda aproximación, se parte del postulado de que las variables siguen una ley de probabilidad según la cual los parámetros varían de un grupo a otro. Se trata de encontrar los individuos que pertenecen a la misma distribución. Destaca en esta aproximación el método de las combinaciones de Wolf.

Métodos Directos:

Los métodos directos permiten clasificar simultáneamente a los individuos y a las variables. Las entidades agrupadas, ya no son los individuos o las variables, sino que son las observaciones, es decir, los cruces que configuran la matriz de datos.

Block - Clustering:

El obejtivo de este método es encontrar sub-matrices con filas y columnas con una alta correlación, pero uno de los problemas que plantean es que el número de clúster a calcular debe ser suministrado previamente al cálculo del algoritmo. Sin embargo, estas estrategias sólo pueden ser realizadas utilizando algoritmos de una vía y existe una falta de enroque claro para conseguir el mejor número de clústers en algoritmos de “Block-Clustering.”

Métodos Reductivos:

Consisten en la busqueda de unos factores en el espacio de los individuos que contiene la matriz de datos, donde cada factor corresponde a un clúster y se les cononoce como “Analisis Factorial tipo Q”

Análisis Factorial tipo Q:

El objetivo consiste en encontrar grupos de individuos con valores semejantes en las variables con la finalidad de determinar un número reducido de clúster de los que se espera que los individuos contenidos en cada uno de ellos tengan algún tipo de propiedad común.

El método parte de la matriz de correlaciones entre individuios y somete los factores econtrados a una roación ortogonal, el problema es que los individuos pueden pertenecer a varios y, por tanto, los clústers pueden presentar solapamiento, resultando una compleja interpretación.

4. Del texto: Kassambara, A. (2017). Practical Guide to Cluster Analysis in R: Unsupervised Machine Learning (Multivariate Analysis) (1st ed.). STHDA, desarrolle los ejemplos presentados en los capítulos: 4,5,6,7,8,9.

4. EJEMPLO CAPITULO 4: K-means Clustering

4.1 Data

data("USArrests")
Data_USA<-scale(USArrests)

head(Data_USA, n=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

4.2 Calculo del numero Optimo de Clusters

library(factoextra)
fviz_nbclust(Data_USA, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2) +labs(title = "Número Óptimo de Conglomerados")+
  xlab(label = "Número de Grupos")+
  ylab(label = "Totales dentro de la suma de cuadrados")

Interpretación: El gráfico angterior representa las varianzas dentro de cada “cluster” , en el cual se visualiza que a medida aumenta K (números de grupos), la varianza disminuye. Se puede observar que existe una curva o “codo” cuando el numero de grupos es 4. La cual nos indica que un número mayor de grupos a 4 tienen poco valor. Por lo cual se clasificarán las observaciones en 4 grupos.

4.3 Cálculo de K-means con K=4

set.seed(123)
Kmeans_res<-kmeans(Data_USA, 4, nstart = 25)
print(Kmeans_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"

Es posible calcular la media de cada varaible por clústeres utilizando los data original:

aggregate(USArrests, by=list(cluster=Kmeans_res$cluster), mean)
##   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 se desea añadir la clasificación de los datos, se realiza de la siguiente manera:

Clasificacion_Kmeans <- cbind(USArrests, cluster = Kmeans_res$cluster)
head(Clasificacion_Kmeans, 10)
##             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
## Connecticut    3.3     110       77 11.1       3
## Delaware       5.9     238       72 15.8       3
## Florida       15.4     335       80 31.9       4
## Georgia       17.4     211       60 25.8       1

4.4 Acceder a resultados de K-means

El número de conglomerado al que pertence cada una de las observaciones

Kmeans_res$cluster
##        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
head(Kmeans_res$cluster,10)
##     Alabama      Alaska     Arizona    Arkansas  California    Colorado 
##           1           4           4           1           4           4 
## Connecticut    Delaware     Florida     Georgia 
##           3           3           4           1

El tamaño que posee cada “cluster”:

Kmeans_res$size
## [1]  8 13 16 13

La matriz de las medias de los conglomerados:

Kmeans_res$centers
##       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.5 Visualización de los K-means Clusters

fviz_cluster(Kmeans_res, data = Data_USA,
             palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
             ellipse.type = "euclid", 
             star.plot = TRUE, # añadir los segmentos a los centroides o grupos
             repel = TRUE, # para que las etiquetas no queden sobrepuestas
             ggtheme = theme_minimal()
             )+labs(title = "Gráfico de Conglomerados")

5. EJEMPLO CAPITULO 5: K-Medoids

5.1 Data

La data a utilizar será la misma que en el ejemplo anterior(Data_USA).

head(Data_USA,4)
##              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

5.2 Calculo del numero Optimo de Clusters

library(cluster)
library(factoextra)
fviz_nbclust(Data_USA, pam, method = "silhouette")+
theme_classic() +labs(title = "Número Óptimo de Conglomerados")+
  xlab(label = "Número de Grupos")+ 
  ylab(label = "Anchura media de la silueta")

Como podemos observar del gráfico anterior el número sugerido de conglomerados es 2. Por lo que, en los siguientes procesos se clasificará la información en dos conglomerados.

5.3 Calculo de PAM Clustering con K=2

PAM_res <- pam(Data_USA, 2)
print(PAM_res)
## 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"

Si se desea añadir la clasificación de los datos, se realiza de la siguiente manera:

Clasificacion_Medoids <- cbind(USArrests, cluster = PAM_res$cluster)
head(Clasificacion_Medoids, n = 10)
##             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
## Arkansas       8.8     190       50 19.5       2
## California     9.0     276       91 40.6       1
## Colorado       7.9     204       78 38.7       1
## Connecticut    3.3     110       77 11.1       2
## Delaware       5.9     238       72 15.8       2
## Florida       15.4     335       80 31.9       1
## Georgia       17.4     211       60 25.8       1

5.4 Acceder a resultados de la funcion PAM()

Visualizar los Medoides a utilizar:

PAM_res$medoids
##                Murder    Assault   UrbanPop       Rape
## New Mexico  0.8292944  1.3708088  0.3081225  1.1603196
## Nebraska   -0.8008247 -0.8250772 -0.2445636 -0.5052109

Número de clusters al que pertenece cada dato:

head(PAM_res$clustering,10)
##     Alabama      Alaska     Arizona    Arkansas  California    Colorado 
##           1           1           1           2           1           1 
## Connecticut    Delaware     Florida     Georgia 
##           2           2           1           1

5.5 Visualización de PAM clusters

fviz_cluster(PAM_res, 
             palette = c("#00AFBB", "#FC4E07"), # color palette
             ellipse.type = "t", # Concentration ellipse
             repel = TRUE, # Avoid label overplotting (slow)
             ggtheme = theme_classic()
             )+labs(title = "Gráfico de Conglomerados")

6. EJEMPLO CAPITULO 6: CLARA- Clustering Large Applications

6.1 Formato y Preparación de datos.

set.seed(1234)
# Generar 500 objetos en dos clusters.
Data_Cap6 <- rbind(cbind(rnorm(200,0,8), rnorm(200,0,8)),
cbind(rnorm(300,50,8), rnorm(300,50,8)))

# Especificar los nombres de columnas y filas
colnames(Data_Cap6) <- c("x", "y")
rownames(Data_Cap6) <- paste0("S", 1:nrow(Data_Cap6))

# PVisualización de la data
head(Data_Cap6, 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.2 Calculo del numero Optimo de Clusters

library(cluster)
library(factoextra)
fviz_nbclust(Data_Cap6, clara, method = "silhouette")+
theme_gray()+labs(title = "Número Óptimo de Conglomerados")+
  xlab(label = "Número de Grupos")+ 
  ylab(label = "Anchura media de la silueta")

Como podemos observar del gráfico anterior el número sugerido de conglomerados es 2. Por lo que, en los siguientes procesos se clasificará la información en dos conglomerados.

6.3 Calculando CLARA

El codigo de R a utilizar, usa el algoritmo PAM con K=2

# Compute CLARA
CLARA_res <- clara(Data_Cap6, 2, samples = 50, pamLike = TRUE)
# Print components of clara.res
print(CLARA_res)
## Call:     clara(x = Data_Cap6, 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"

Si se desea añadir la clasificación de los datos, se realiza de la siguiente manera:

Clasificacion_CLARA <- cbind(Data_Cap6, cluster = CLARA_res$cluster)
head(Clasificacion_CLARA, n = 4)
##             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

6.4 Acceder a resultados de CLARA

Acceder a los medoides a utilizar:

CLARA_res$medoids
##              x         y
## S121 -1.531137  1.145057
## S455 48.357304 50.233499

Cluster al que pertenece cada dato:

head(CLARA_res$clustering,20)
##  S1  S2  S3  S4  S5  S6  S7  S8  S9 S10 S11 S12 S13 S14 S15 S16 S17 S18 S19 S20 
##   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1

6.5 Visualización de CLARA clusters

fviz_cluster(CLARA_res,
             palette = c("#00AFBB", "#FC4E07"),
             ellipse.type = "t", 
             geom = "point", pointsize = 1,
             ggtheme = theme_get()
             )+labs(title = "Gráfico de Conglomerados")

7. EJEMPLO CAPITULO 7: AGGLOMERATIVE CLUSTERING

7.1 Estructura y preparación de la data.

La data a utilizar es la data cargada para el ejemplo del capitulo 4 que es presentada como “Data_USA”, cabe destacar que esta data ya ha sido estandarizada por el comando “scale(data)”

# Load the data
#data("USArrests")
# Standardize the data
#Data_USA <- scale(USArrests)
# Show the first 6 rows
head(Data_USA, 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 Medidas de Similitud

Se puede calcular la matriz de distancia de la siguiente manera:

# Calculo de la matriz de disimilitud

Res_Dist <- dist(Data_USA, 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.3 Vinculación de

Res_HC <- hclust(d = Res_Dist, method = "ward.D2")
head(Res_HC, n=6)
## $merge
##       [,1] [,2]
##  [1,]  -15  -29
##  [2,]  -13  -32
##  [3,]  -14  -16
##  [4,]  -23  -49
##  [5,]  -20  -31
##  [6,]  -36    3
##  [7,]  -37  -47
##  [8,]  -19    1
##  [9,]  -46  -50
## [10,]  -41  -48
## [11,]  -26  -27
## [12,]   -1  -18
## [13,]  -35  -38
## [14,]  -24  -40
## [15,]  -21  -30
## [16,]  -12   11
## [17,]    6   13
## [18,]  -43    2
## [19,]  -22    5
## [20,]  -34  -45
## [21,]  -10  -42
## [22,]   -4  -17
## [23,]  -11  -44
## [24,]   -7  -39
## [25,]   12   21
## [26,]    9   22
## [27,]   -5  -28
## [28,]  -33   14
## [29,]  -25    7
## [30,]   -3   19
## [31,]   10   20
## [32,]    4    8
## [33,]   -6   27
## [34,]   15   24
## [35,]   -9   30
## [36,]   16   32
## [37,]   -8   34
## [38,]   17   23
## [39,]   29   38
## [40,]   18   35
## [41,]   25   28
## [42,]   31   36
## [43,]   -2   33
## [44,]   37   39
## [45,]   40   43
## [46,]   26   44
## [47,]   41   45
## [48,]   42   46
## [49,]   47   48
## 
## $height
##  [1]  0.2058539  0.3502188  0.4287712  0.4940832  0.5353893  0.5535286
##  [7]  0.5935343  0.6559259  0.7038309  0.7108812  0.7389936  0.7722224
## [13]  0.7781298  0.7865674  0.7977642  0.8076434  0.8472042  0.9427614
## [19]  0.9513719  0.9824857  1.0122252  1.0598104  1.0709720  1.0756115
## [25]  1.0910920  1.1606271  1.1968261  1.2074603  1.2601290  1.2990516
## [31]  1.3169658  1.3449118  1.3901014  1.5396377  1.6907596  1.7484165
## [37]  1.8118061  1.9360777  2.2033391  2.2421782  2.7145543  2.9932892
## [43]  3.0250236  3.2107135  3.4960481  3.7341155  6.4618664  7.1881893
## [49] 13.5162424
## 
## $order
##  [1]  1 18 10 42 33 24 40 43 13 32  9  3 22 20 31  2  6  5 28 41 48 34 45 12 26
## [26] 27 23 49 19 15 29 46 50  4 17  8 21 30  7 39 25 37 47 36 14 16 35 38 11 44
## 
## $labels
##  [1] "Alabama"        "Alaska"         "Arizona"        "Arkansas"      
##  [5] "California"     "Colorado"       "Connecticut"    "Delaware"      
##  [9] "Florida"        "Georgia"        "Hawaii"         "Idaho"         
## [13] "Illinois"       "Indiana"        "Iowa"           "Kansas"        
## [17] "Kentucky"       "Louisiana"      "Maine"          "Maryland"      
## [21] "Massachusetts"  "Michigan"       "Minnesota"      "Mississippi"   
## [25] "Missouri"       "Montana"        "Nebraska"       "Nevada"        
## [29] "New Hampshire"  "New Jersey"     "New Mexico"     "New York"      
## [33] "North Carolina" "North Dakota"   "Ohio"           "Oklahoma"      
## [37] "Oregon"         "Pennsylvania"   "Rhode Island"   "South Carolina"
## [41] "South Dakota"   "Tennessee"      "Texas"          "Utah"          
## [45] "Vermont"        "Virginia"       "Washington"     "West Virginia" 
## [49] "Wisconsin"      "Wyoming"       
## 
## $method
## [1] "ward.D2"
## 
## $call
## hclust(d = Res_Dist, method = "ward.D2")

7.4 Dendograma

library("factoextra")
fviz_dend(Res_HC, cex = 0.5) + labs(title = "Dendograma de Conglomerados")+theme_gray()

7.5 Verificación del Árbol de Clusters

# Calcular la distancia cofentica
Res_coph <- cophenetic(Res_HC)
# Correlación entre la distancia confentica y la distancia original
cor(Res_Dist, Res_coph)
## [1] 0.6975266

Se observa que el valor no supera el 0.75 por lo cual no se puede decir que la solución mostrada por este agrupamiento no es del todo buena. Por ello recurriremos a cambiar el metodo de vinculación a “average” (promedio)

Res_HC2 <- hclust(Res_Dist, method = "average")
cor(Res_Dist, cophenetic(Res_HC2))
## [1] 0.7180382

El coeficiente de correlaciones muestra que el uso de un método de vinculación diferente crea un árbol que representa las distancias originales ligeramente mejor.

7.6 Segmentación del dendogramas en diferentes grupos

# Cortaremos el árbol en 4 grupos
Grupos_7 <- cutree(Res_HC, k = 4)
head(Grupos_7, n = 4)
##  Alabama   Alaska  Arizona Arkansas 
##        1        2        2        3
# Número de miembros en cada Clusters
table(Grupos_7)
## Grupos_7
##  1  2  3  4 
##  7 12 19 12
#Obtención de los nombres de los miembros que pertenecen al Cluster 1
row.names(Data_USA)[Grupos_7==1]
## [1] "Alabama"        "Georgia"        "Louisiana"      "Mississippi"   
## [5] "North Carolina" "South Carolina" "Tennessee"

7.7 Visualización de los cortes del dendograma

7.7.1 Usando la función fviz_dend()

fviz_dend(Res_HC, k = 4, # Cortar el árbol en 4 grupos
          cex = 0.5, 
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE, # cada grupo con un color
          rect = TRUE # Enmarcar con un rectangulo cada corte
          )+ labs(title = "Dendograma de Clongomerados")+ theme_classic()

7.7.1 Usando la función fviz_cluster()

fviz_cluster(list(data = Data_USA, cluster = Grupos_7),
             palette = c("#2E9FDF", "#00AFBB", "#E7B800", 
                         "#FC4E07"),
             ellipse.type = "convex", 
             repel = TRUE, 
             show.clust.cent = FALSE, 
             ggtheme = theme_minimal())+ labs(title = "Gráfico de
                                              conglomerados")

7.8 Usando el paquete de Cluster en R

library("cluster")

# Agglomerative Nesting (Hierarchical Clustering)

Res_Agnes <- agnes(x = USArrests, 
                   stand = TRUE, # Estandarizar la data
                   metric = "euclidean", # matriz de distancia
                   method = "ward" # metodo de vinculación
                   )

# Divisive Analysis Clustering

Res_DIANA<- diana(x = USArrests, 
                  stand = TRUE, 
                  metric = "euclidean"
                  )

Visualización

fviz_dend(Res_Agnes, cex = 0.6, k = 4)+labs(title = "Dendograma de Conglomerados")

EJEMPLO DEL CAPITULO 8: Comparing Dendograms

8.1 Preparación de la data

Se seguira utilizando la data de USArrests estadarizados que se ha guardado en el objeto de Data_USA.

Para hacer legibles los diagramas que se van a generar, trabajaremos con una pequeña subconjunto aleatorio del conjunto de datos. Por lo tanto, se usará la función sample() para aleatoriamente seleccione 10 observaciones entre las 50 observaciones contenidas en el conjunto de datos:

set.seed(123)
Random <- sample(1:50, 10)
SubData_USA<- Data_USA[Random,]

8.2 Comparación de dondogramas

library(dendextend)

# Calculo de la matriz de distancias
Res_dist_8 <- dist(SubData_USA, method = "euclidean")

# Calculo de 2 agrupamientos jerarquicos
HC1 <- hclust(Res_dist_8, method = "average")
HC2 <- hclust(Res_dist_8, method = "ward.D2")

# Creamos ambos dendogramas
Dendo1 <- as.dendrogram (HC1)
Dendo2 <- as.dendrogram (HC2)

# Crear una lista para la obtención de dendogramas
Dend_list <- dendlist(Dendo1, Dendo2)

8.3 Comparación visual de 2 dendogramas

8.3.1 Dibujar un Tanglegrama

tanglegram(Dendo1, Dendo2)

8.3.2 Personalización de un Tanglegrama

tanglegram(Dendo1, Dendo2,
           highlight_distinct_edges = FALSE, # líneas discontinuas
           common_subtrees_color_lines = FALSE, # lineas de colores
           common_subtrees_color_branches = TRUE, # lineas comunes del mismo color
           main = paste("Enredo =",
                        round(entanglement(Dend_list), 2))
           )

8.4 Matriz de correlación entre una lista de dendogramas

# Matriz de correlación cofenética
cor.dendlist(Dend_list, method = "cophenetic")
##           [,1]      [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
# Matriz de correlación de Baker
cor.dendlist(Dend_list, method = "baker")
##           [,1]      [,2]
## [1,] 1.0000000 0.9895528
## [2,] 0.9895528 1.0000000

La correlación entre dos árboles(dendogramas) también se puede calcular de la siguiente manera:

# Coeficiente de Correlación Cofenético
cor_cophenetic(Dendo1, Dendo2)
## [1] 0.9925544
# Coeficiente de correlación de Baker
cor_bakers_gamma(Dendo1, Dendo2)
## [1] 0.9895528

También es posible comparar simultáneamente múltiples dendrogramas. Se utiliza un operador de encadenamiento %>% (pipe) para ejecutar múltiples funciones al mismo tiempo. Es útil para simplificar el código:

# Creación de múltiples dendogramas
Dend1_8 <- SubData_USA %>% dist %>% hclust("complete") %>% as.dendrogram

Dend2_8 <- SubData_USA %>% dist %>% hclust("single") %>% as.dendrogram

Dend3_8 <- SubData_USA %>% dist %>% hclust("average") %>% as.dendrogram

Dend4_8 <- SubData_USA %>% dist %>% hclust("centroid") %>% as.dendrogram

# Calculo de la matriz de correlacion
dend_list_8 <- dendlist("Complete" = Dend1_8, "Single" = Dend2_8,
"Average" = Dend3_8, "Centroid" = Dend4_8)
Matriz_Corr_8 <- cor.dendlist(dend_list_8)

# Visualizar la matriz de Correlación
round(Matriz_Corr_8, 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

Visualización de la matriz de correlación usando la librería Corrplot

library(corrplot)
corrplot(Matriz_Corr_8, "pie", "lower")

EJEMPLO CAPITULO 9: Visualizing Dendrograms

La data a utilizar se encuentra en “Data_USA” que ya se encuentra estadarizada.

9.1 Data a utilizar

# CalculO de distancias y agrupamiento jerárquico.
distancias_9 <- dist(Data_USA, method = "euclidean")
HC_cap9 <- hclust(distancias_9, method = "ward.D2")

9.2 Visualizar Dendogramas

9.2.1 Crear un dendograma básico.

library(factoextra)
fviz_dend(HC_cap9, cex = 0.5)

9.2.2 Crear un dendograma usando los argumentos: main, sub, xlab, ylab

fviz_dend(HC_cap9, cex = 0.5,
          main = "Dendograma - ward.D2",
          xlab = "Objetos", ylab = "Distancia", sub = "")

9.2.3 Crear un Dendograma horizontal

fviz_dend(HC_cap9, cex = 0.5, horiz = TRUE,
          main = "Dendograma ",
          xlab = "Objetos", ylab = "Distancia", sub = "")

9.2.4 Dendograma dividido en Grupos

fviz_dend(HC_cap9, k = 4, # Cortar en 4 grupos
          cex = 0.5, # tamaño de las etiquetas
          k_colors= "npg",
          color_labels_by_k = TRUE, # color de las etiquetas por cada grupos
          rect = TRUE,# Añadir un rectangulo limitando cada grupo
          rect_border ="npg",
          rect_fill = TRUE,
          main = "Dendograma",
          xlab = "Objetos", ylab = "Distancia", sub = ""
          )

Nota: Los valores permitidos para k_color incluyen paletas de cervezas del paquete RColorBrewer (p. ej., “RdBu”, “Blues”, “Dark2”, “Set2”, . . . ; ) y paletas de revistas científicas del paquete ggsci R (p. ej., “npg”, “aaas”, “lancet”, “jco”, “ucscgb”, “uchicago”, “simpsons” y “rickandmorty”).

Para cambiar el tema de la trama se usa el argumento ggtheme:

fviz_dend(HC_cap9, k = 4, 
          cex = 0.5, 
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE, 
          ggtheme = theme_minimal(), # Cambios de Trama
          main = "Dendograma",
          xlab = "Objetos", ylab = "Distancia", sub = ""
)

Para dibujar un dendograma horizontal con rectangulos en cada grupo, se realizaría de la siguiente manera:

fviz_dend(HC_cap9, k = 4, 
          cex = 0.4, horiz = TRUE, 
          k_colors = "jco", 
          rect = TRUE, 
          rect_border = "jco", 
          rect_fill = TRUE,
          main = "Dendograma Horizontal",
          xlab = "Objetos", ylab = "Distancia", sub = "")

9.2.4 Tipos Adicionales de gráficos

9.2.4.1 Dendogramas Circulares

fviz_dend(HC_cap9, cex = 0.5, k = 4,
          k_colors = "aaas", type = "circular")

9.2.4.2 Árbol de tipo filogenético

library(igraph)
fviz_dend(HC_cap9, k = 4, k_colors = "uchicago",
          type = "phylogenic", repel = TRUE)

El diseño predeterminado para los á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”, “diseño_con_lgl”).

A continuación usaremos: phylo.layout = “layout.gem”

fviz_dend(HC_cap9, k = 4,
          k_colors = "jco",
          type = "phylogenic", repel = TRUE,
          phylo_layout = "layout.gem")

9.3 Dendrogramas con grandes conjuntos de datos

9.3.1 Utilizar ZOOM en un dendograma

fviz_dend(HC_cap9, 
          xlim = c(1, 20), # limitar el eje x (objetos)
          ylim = c(1, 8)) # limitar el eje y (distancia)

9.3.2 Sub-árbol de un Dendograma

9.3.2.1 Cortar un dendograma

# 1- Crear una gráfica de todo el dendograma y extraer los datos del dendograma

Dendo_plot <- fviz_dend(HC_cap9, k = 4, # Cortar en 4 grupos
                        cex = 0.5, 
                        k_colors = "jco"
                        )
Dendo_data <- attr(Dendo_plot, "dendrogram") # Datos del dendograma

# Cortar el dendograma a una altura de  h = 15
dend_cortado <- cut(Dendo_data, h = 15)

# Visualizar el dendograma cortado
# dos ramas 
fviz_dend(dend_cortado$upper)

9.3.2.2 Sub-arboles del dendograma

El dendograma completo sería el siguiente:

print(Dendo_plot)

Gráficar los sub-arboles 1 y 2

# Sub-arbol 1 o grupo 1
fviz_dend(dend_cortado$lower[[1]], main = "Sub-Árbol 1")

# Sub-arbol 2 o grupo 2
fviz_dend(dend_cortado$lower[[2]], main = "Sub-Árbol 2")

También se pueden trazar sub-árboles circulares de la siguiente manera:

fviz_dend(dend_cortado$lower[[2]], type = "circular")

9.3.3 Guardar el Dendograma en PDF

Se puede tener un dendograma grande y guardarlo en una única pagina sin que se pierda la resolución de este.

El proceso es el siguiente:

pdf("dendrograma.pdf", width=30, height=15) # crear el pdf
dendograma<- fviz_dend(HC_cap9, k = 4, cex = 1, k_colors = "jco" ) 

#creación del gráfico
print(dendograma)
dev.off()
## png 
##   2

9.4 Manipulación de dendrogramas usando dendextend

Código R estándar para crear un dendrograma:

Código R para crear un dendrograma usando un operador de encadenamiento y la librería dendextend:

library(dendextend)
Dend <- USArrests[1:5,] %>% # data
  scale %>% # estandarizar
  dist %>% # calculo de la matriz de distancias,
  hclust(method = "ward.D2") %>% # agrupación jerarquica
  as.dendrogram # convertirlos en dendograma.

plot(Dend)

La función set() de la librería dendextend nos permite cambiar los parametros del dendograma

A continuaión se muestra un ejemplo:

library(dendextend)

# 1. Crear el dendograma personalizado
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
dend <- as.dendrogram(HC_cap9) %>%
  set("branches_lwd", 1) %>% # Anchura de las ramas
  set("branches_k_color", mycols, k = 4) %>% # colores de las grupos
  set("labels_colors", mycols, k = 4) %>% # Colores de las etiquetas de los grupos
  set("labels_cex", 0.5) # tamaño de las etiquetas

# 2. Creación del gráfico
fviz_dend(dend)

Y como podemos obervar se obtiene el mismo dendograma que se muestra como ejemplo a inicios del capitulo.

Bibliografía

Aldas, J. (s.f.). Analisis multivariante aplicado con R. Obtenido de https://drive.google.com/drive/folders/1A_OB3xL4KYu48kGqmFUDaXue4Wh5DfkM

fuente, S. d. (s.f.). analisis conglomerados. Obtenido de https://www.fuenterrebollo.com/Economicas/ECONOMETRIA/SEGMENTACION/CONGLOMERADOS/conglomerados.pdf

Kassambara, A. (2017). Obtenido de Practical Guide To Cluster Analysis in R. Unsupervised Machine Learning.

Barnier, J. (s.f.). cran.r-project. Obtenido de rmdformats: HTML Output Formats and Templates for ‘rmarkdown’ Documents: https://cran.r-project.org/web/packages/rmdformats/index.html

cran.r-project. (22 de Noviembre de 2022). Obtenido de igraph: Network Analysis and Visualization: https://cran.r-project.org/web/packages/igraph/index.html

Galili, T. (4 de Julio de 2022). cran.r-project . Obtenido de dendextend: Extending ‘dendrogram’ Functionality in R: https://cran.r-project.org/web/packages/dendextend/index.html

Kassambara, A. (01 de Abril de 2020). cran.r-project. Obtenido de factoextra: Extract and Visualize the Results of Multivariate Data Analyses: https://cran.r-project.org/web/packages/factoextra/index.html

Keitt, T. (2 de Mayo de 2022). cran.r-project. Obtenido de colorRamps: Builds Color Tables: https://cran.r-project.org/web/packages/colorRamps/index.html


h1,h2,h3,h4{
   font-size:14px;
   font-weight: bold;
   font-family: 'Times New Roman', Times, serif;
   line-height:2;
}
h1 {
   text-align: center;
}
h4{
   text-align:center;
   font-weight: bold
}
p, li{
 text-indent: 40px;
   font-size:12 px;
   font-family: 'Times New Roman', Times, serif;
     line-height: 2;
}