UNIVERSIDAD DE EL SALVADOR

FACULTAD DE CIENCIAS ECONOMICAS

ESCUELA DE ECONOMIA

TEMA: LABORATORIO NUMERO 2: ANALISIS DE CLUSTER (CONGLOMERADOS)

MATERIA: METODOS PARA EL ANALISIS ECONOMICO

DOCENTE: CARLOS ADEMIR PÉREZ ALAS

INTEGRANTES:

APELLIDOS NOMBRES CARNET PARTICIPACIÓN
LAGOS ALAS LUIS FERNANDO LA18009 \(100\%\)
PANIAGUA MUÑOZ FERNANDO ERNESTO PM18011 \(100\%\)
REYES CASTRO DAVID ERNESTO RC17077 \(100\%\)
RODRIGUEZ BARRERA MARLON EDUARDO RB14034 \(100\%\)

CICLO: II-2021

FECHA: 22 DE NOVIEMBRE DE 2021

CIUDAD UNIVERSITARIA, SAN SALVADOR, EL SALVADOR, CENTROAMERICA

1. Explique en que consiste el análisis de conglomerados.

El análisis de conglomerados (en inglés, cluster analisys) es una técnica multivariante que permite agrupar los casos o variables de un archivo de datos en función del parecido o similitud existente entre ellos. De forma conjunta, el Análisis de Conglomerados examina todo un conjunto de relaciones interdependientes, éste no distingue entre variables dependientes e independientes, sino que examina las relaciones interdependientes entre el conjunto completo de variables. Su objetivo principal es clasificar objetos en grupos más o menos homogéneos con base en el conjunto de variables consideradas. El análisis de conglomerados es una técnica usada para clasificar objetos o casos en grupos relativamente homogéneos llamados conglomerados. Los objetos de cada conglomerado tienden a ser similares entre sí y diferentes de los objetos de otros conglomerados. El análisis de conglomerados también se conoce como análisis de clasificación o taxonomía numérica.

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

Analisis_de_clusterTecnicas_disponiblesVentajasDesventajas
Jerárquico: Agrupar clúster para formar uno nuevo o separar alguno ya existente para dar origen a otros dos de forma que se maximice una medida de similaridad o se minimice alguna distancia.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 requiere hacer inferencias sobre el número de cluster
Permite representar las sucesivas asociaciones en forma de árbol
Alto coste computacional
Sensible respecto de las primeras agrupaciones
Complicado de interpretar cuando el número de elementos a clasificar es grande
Jerárquico: Agrupar clúster para formar uno nuevo o separar alguno ya existente para dar origen a otros dos de forma que se maximice una medida de similaridad o se minimice alguna distancia.K-Medias
Nubes Dinámicas
Análisis Modal
Métodos Taxap
Método de Fortin
Método de Wolf
Rapidez
Permite el procesamiento de gran número de datos
Hay que determinar el número óptimo de cluster a priori
Muy sensibles ante la presencia de datos externos
Solo se pueden utilizar medidas euclídeas
Sensible respecto de la ordenación de los datos

Fuente: elaboración propia con base en (Fuente, Santiago, 2016)

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.

Ejercicio con metodo 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)

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

Ejercicio de capitulo 4

library(ggplot2)
library(factoextra)
data("USArrests")
df <- scale(USArrests)
fviz_nbclust(df, kmeans, method = "wss") +
  geom_vline(xintercept = 4, linetype = 2)

set.seed(123)
km.res <- kmeans(df, 4, nstart = 25)
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"
aggregate(USArrests, by = list(cluster = km.res$cluster), mean)
clusterMurderAssaultUrbanPopRape
113.9 244  53.821.4
23.6 78.552.112.2
35.66139  73.918.8
410.8 257  76  33.2
dd <- cbind(USArrests, cluster = km.res$cluster)
head(dd)
MurderAssaultUrbanPopRapecluster
13.22365821.21
10  2634844.54
8.12948031  4
8.81905019.51
9  2769140.64
7.92047838.74
km.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(km.res$cluster, 4)
##  Alabama   Alaska  Arizona Arkansas 
##        1        4        4        1
km.res$size
## [1]  8 13 16 13
km.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
fviz_cluster(
  km.res,
  data = df,
  palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  ellipse.type = "euclid",
  star.plot = TRUE,
  repel = TRUE,
  ggtheme = theme_minimal()
)

Ejercicio de capitulo 5

library(cluster)
fviz_nbclust(df, pam, method = "silhouette") +
  theme_classic()

pam.res <- pam(df, 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"
dd <- cbind(USArrests, cluster = pam.res$cluster)
head(dd, n = 3)
MurderAssaultUrbanPopRapecluster
13.22365821.21
10  2634844.51
8.12948031  1
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
head(pam.res$clustering)
##    Alabama     Alaska    Arizona   Arkansas California   Colorado 
##          1          1          1          2          1          1

Ejercicio de capitulo 6

fviz_nbclust(df, clara, method = "silhouette") +
  theme_classic()

clara.res <- clara(df, 2, samples = 50, pamLike = TRUE)
print(clara.res)
## Call:     clara(x = df, k = 2, samples = 50, pamLike = TRUE) 
## Medoids:
##                Murder    Assault   UrbanPop       Rape
## New Mexico  0.8292944  1.3708088  0.3081225  1.1603196
## Nebraska   -0.8008247 -0.8250772 -0.2445636 -0.5052109
## Objective function:   1.368969
## Clustering vector:    Named int [1:50] 1 1 1 2 1 1 2 2 1 1 2 2 1 2 2 2 2 1 ...
##  - attr(*, "names")= chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" "California" "Colorado" "Connecticut" ...
## Cluster sizes:            20 30 
## Best sample:
##  [1] Alabama        Arizona        California     Colorado       Connecticut   
##  [6] Delaware       Georgia        Idaho          Illinois       Iowa          
## [11] Kansas         Kentucky       Louisiana      Maine          Maryland      
## [16] Massachusetts  Michigan       Minnesota      Mississippi    Missouri      
## [21] Montana        Nebraska       Nevada         New Hampshire  New Mexico    
## [26] New York       North Carolina North Dakota   Ohio           Oklahoma      
## [31] Oregon         Pennsylvania   Rhode Island   South Carolina South Dakota  
## [36] Tennessee      Texas          Utah           Vermont        Virginia      
## [41] Washington     West Virginia  Wisconsin      Wyoming       
## 
## Available components:
##  [1] "sample"     "medoids"    "i.med"      "clustering" "objective" 
##  [6] "clusinfo"   "diss"       "call"       "silinfo"    "data"
dd <- cbind(df, cluster = clara.res$cluster)
head(dd, n = 4)
##              Murder   Assault   UrbanPop         Rape cluster
## Alabama  1.24256408 0.7828393 -0.5209066 -0.003416473       1
## Alaska   0.50786248 1.1068225 -1.2117642  2.484202941       1
## Arizona  0.07163341 1.4788032  0.9989801  1.042878388       1
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602       2
clara.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
head(clara.res$clustering, 10)
##     Alabama      Alaska     Arizona    Arkansas  California    Colorado 
##           1           1           1           2           1           1 
## Connecticut    Delaware     Florida     Georgia 
##           2           2           1           1
fviz_cluster(
  clara.res,
  palette = c("#00AFBB", "#FC4E07"),
  ellipse.type = "t",
  geom = "point",
  pointsize = 1,
  ggtheme = theme_classic()
)

Ejercicio de capitulo 7

data("USArrests")
df <- scale(USArrests)
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
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)

res.coph <- cophenetic(res.hc)
cor(res.dist, res.coph)
## [1] 0.6975266
res.hc2 <- hclust(res.dist, method = "average")
cor(res.dist, cophenetic(res.hc2))
## [1] 0.7180382
grp <- cutree(res.hc, k = 4)
head(grp, n = 4)
##  Alabama   Alaska  Arizona Arkansas 
##        1        2        2        3
table(grp)
## grp
##  1  2  3  4 
##  7 12 19 12
rownames(df)[grp == 1]
## [1] "Alabama"        "Georgia"        "Louisiana"      "Mississippi"   
## [5] "North Carolina" "South Carolina" "Tennessee"
fviz_dend(
  res.hc,
  k = 4,
  cex = 0.5,
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  color_labels_by_k = TRUE,
  rect = TRUE
)

fviz_cluster(
  list(data = df, cluster = grp),
  palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  ellipse.type = "convex",
  repel = TRUE,
  show.clust.cent = FALSE,
  ggtheme = theme_minimal()
)

res.agnes <-
  agnes(
    x = USArrests,
    stand = TRUE,
    metric = "euclidean",
    method = "ward"
  )
res.diana <-
  diana(x = USArrests, stand = TRUE, metric = "euclidean")
fviz_dend(res.agnes, cex = 0.6, k = 4)

Ejercicio de capitulo 8

library(dendextend)
res.dist <- dist(df, method = "euclidean")
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")
dend1 <- as.dendrogram (hc1)
dend2 <- as.dendrogram (hc2)
dend_list <- dendlist(dend1, dend2)
tanglegram(dend1, dend2)

tanglegram(
  dend1,
  dend2,
  highlight_distinct_edges = FALSE,
  common_subtrees_color_lines = FALSE,
  common_subtrees_color_branches = TRUE,
  main = paste("entanglement =", round(entanglement(dend_list), 2))
)

cor.dendlist(dend_list, method = "cophenetic")
##          [,1]     [,2]
## [1,] 1.000000 0.843143
## [2,] 0.843143 1.000000
cor.dendlist(dend_list, method = "baker")
##           [,1]      [,2]
## [1,] 1.0000000 0.8400675
## [2,] 0.8400675 1.0000000
cor_cophenetic(dend1, dend2)
## [1] 0.843143
cor_bakers_gamma(dend1, dend2)
## [1] 0.8400675
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
dend_list <-
  dendlist(
    "Complete" = dend1,
    "Single" = dend2,
    "Average" = dend3,
    "Centroid" = dend4
  )
cors <- cor.dendlist(dend_list)
round(cors, 2)
##          Complete Single Average Centroid
## Complete     1.00   0.50    0.86     0.49
## Single       0.50   1.00    0.58     0.71
## Average      0.86   0.58    1.00     0.61
## Centroid     0.49   0.71    0.61     1.00
library(corrplot)
corrplot(cors, "pie", "lower")

Ejercicio de capitulo 9

data(USArrests)
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")
fviz_dend(hc, cex = 0.5)

fviz_dend(
  hc,
  cex = 0.5,
  main = "Dendrogram - ward.D2",
  xlab = "Objects",
  ylab = "Distance",
  sub = ""
)

fviz_dend(hc, cex = 0.5, horiz = TRUE)

fviz_dend(
  hc,
  k = 4,
  cex = 0.5,
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  color_labels_by_k = TRUE,
  rect = TRUE,
  rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  rect_fill = TRUE
)

fviz_dend(
  hc,
  k = 4,
  cex = 0.5,
  k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
  color_labels_by_k = TRUE,
  ggtheme = theme_gray()
)

fviz_dend(hc,
          cex = 0.5,
          k = 4,
          k_colors = "jco")

fviz_dend(
  hc,
  k = 4,
  cex = 0.4,
  horiz = TRUE,
  k_colors = "jco",
  rect = TRUE,
  rect_border = "jco",
  rect_fill = TRUE
)

fviz_dend(
  hc,
  cex = 0.5,
  k = 4,
  k_colors = "jco",
  type = "circular"
)

require("igraph")
fviz_dend(
  hc,
  k = 4,
  k_colors = "jco",
  type = "phylogenic",
  repel = TRUE
)

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

fviz_dend(hc, xlim = c(1, 20), ylim = c(1, 8))

dend_plot <- fviz_dend(hc,
                       k = 4,
                       cex = 0.5,
                       k_colors = "jco")
dend_data <- attr(dend_plot, "dendrogram")
dend_cuts <- cut(dend_data, h = 10)
fviz_dend(dend_cuts$upper)

print(dend_plot)

fviz_dend(dend_cuts$lower[[1]], main = "Subtree 1")

fviz_dend(dend_cuts$lower[[2]], main = "Subtree 2")

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

data <- scale(USArrests)
dist.res <- dist(data)
hc <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(hc)
plot(dend)

dend <-
  USArrests[1:5, ] %>% scale %>% dist %>% hclust(method = "ward.D2") %>% as.dendrogram
plot(dend)

mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
dend <-
  as.dendrogram(hc) %>% set("branches_lwd", 1) %>% set("branches_k_color", mycols, k = 4) %>% set("labels_colors", mycols, k = 4) %>% set("labels_cex", 0.5)
fviz_dend(dend)