#Importar librerias

library(factoextra) 
## Warning: package 'factoextra' was built under R version 4.2.3
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(dendextend)
## Warning: package 'dendextend' was built under R version 4.2.3
## 
## ---------------------
## Welcome to dendextend version 1.17.1
## Type citation('dendextend') for how to cite the package.
## 
## Type browseVignettes(package = 'dendextend') for the package vignette.
## The github page is: https://github.com/talgalili/dendextend/
## 
## Suggestions and bug-reports can be submitted at: https://github.com/talgalili/dendextend/issues
## You may ask questions at stackoverflow, use the r and dendextend tags: 
##   https://stackoverflow.com/questions/tagged/dendextend
## 
##  To suppress this message use:  suppressPackageStartupMessages(library(dendextend))
## ---------------------
## 
## Attaching package: 'dendextend'
## The following object is masked from 'package:stats':
## 
##     cutree
library(ggplot2)
library(cluster)
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.2.3
## corrplot 0.92 loaded
library(igraph)
## Warning: package 'igraph' was built under R version 4.2.3
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union

7 Agrupamiento aglomerativo

El agrupamiento aglomerativo es un enfoque de agrupamiento jerárquico que busca agrupar objetos en clústeres en función de su similitud. Comienza considerando cada objeto como un grupo único y luego fusiona sucesivamente pares de grupos basados en su similitud. Este proceso continúa hasta que todos los grupos se han fusionado en un gran grupo que contiene todos los objetos. El algoritmo aglomerativo también se conoce como AGNES (Aglomerative Nesting). Su resultado final es un dendrograma, que es una representación de los objetos en forma de árbol.

7.1 Algoritmo.

El agrupamiento aglomerativo funciona de manera “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 grupo grande (raíz).

Lo contrario del agrupamiento aglomerativo es el agrupamiento divisivo, que también se conoce como DIANA ( Divise Analysis ) y funciona de manera “de arriba hacia abajo”. Comienza con la raíz, en la que todos los objetos están incluidos 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.

Grafico

7.2 Pasos para la agrupación jerárquica aglomerativa.

Seguiremos los pasos a continuación para realizar un agrupamiento jerárquico aglomerativo usando el software R:

1.Preparando los datos 2.Cálculo de 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 clúster jerárquico, en función de la información de distancia generada en el paso 1. Los objetos/agrupaciones que están muy cerca se vinculan 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.

En la siguiente sección se descrirá cada uno de estos pasos.

7.2.1 Estructura y preparación de datos.

Los datos deben ser una matriz numérica con:

• Filas que representan observaciones (individuos);

• Columnas que representan variables.

Se usó los conjuntos de datos R base USArrests.

# Load the data
data("USArrests")

# Standardize the data
df <- scale(USArrests)

# Show the first 6 rows
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.

Para decidir qué objetos/grupos deben combinarse o dividirse, necesitamos métodos para medir la similitud entre los objetos.

Hay varios enfoques disponibles para determinar la (des)similitud entre objetos, como las distancias euclidiana y Manhattan. En el software R, puedes emplear la función dist() para calcular la distancia entre cada par de objetos en un conjunto de datos. Los resultados de este cálculo se conocen como matriz de distancia o disimilitud.

De forma predeterminada, la función dist() utiliza la distancia euclidiana para calcular la similitud entre objetos. No obstante, es posible especificar otras métricas utilizando el método de argumento.

# Compute the dissimilarity matrix
# df = the standardized data
res.dist <- dist(df, method = "euclidean")

Reformateamos los resultados de la función dist() en una matriz utilizando as.matrix() para visualizar fácilmente la información de distancia entre objetos. Cada celda de la matriz, representada por la fila i y columna j, indica la distancia entre el objeto i y el objeto j en el conjunto de datos original. El elemento 1,1 representa la distancia entre el objeto 1 y sí mismo (cero), y los elementos subsiguientes representan las distancias entre otros objetos.

El siguiente código R muestra las primeras 6 filas y columnas de la matriz de distancia:

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.3 Enlace

La función de vinculación agrupa objetos basándose en su similitud utilizando la información de distancia proporcionada por la función dist(). Los grupos formados se vinculan entre sí para formar grupos más grandes, repitiendo el proceso hasta que todos los objetos del conjunto de datos original estén vinculados en un árbol jerárquico.

Por ejemplo, dada una matriz de distancia “res.dist” generada por la función dist (), la función base de R hclust () se puede usar para crear el árbol jerárquico.

hclust () se puede utilizar de la siguiente manera:

res.hc <- hclust(d = res.dist, method = "ward.D2")

d: una estructura de disimilitud producida por la función dist().

method: El método de aglomeración (enlace) que se utilizará para calcular la distancia entre clústeres. Los valores permitidos son uno de “ward.D”, “ward.D2”, “single”, “complete”, “average”, “mcquitty”, “median” o “centroid”.

Hay muchos métodos de aglomeración de grupos (es decir, métodos de vinculación). Los métodos de vinculación más comunes se describen a continuación.

Grafico

7.2.4 Dendrograma

Los dendogramas son la representación gráfica del árbol jerárquico generado por la función hclust (). Se puede producir en R utilizando la gráfica de función base (res.hc), donde res.hc es la salida de hclust (). Aquí, usaremos la función fviz_dend () [en realidad paquete R adicional] para producir un hermoso dendrograma.

PSe requiere instalar la librería factoextra.

# cex: label size
library("factoextra")
fviz_dend(res.hc, cex = 0.5)
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## ℹ The deprecated feature was likely used in the factoextra package.
##   Please report the issue at <]8;;https://github.com/kassambara/factoextra/issueshttps://github.com/kassambara/factoextra/issues]8;;>.

El dendrograma muestra la combinación de objetos similares en ramas a medida que se asciende en el árbol. La altura de la fusión en el eje vertical indica la distancia entre los objetos/grupos. A mayor altura, menor similitud. Esta altura se llama distancia cofenética.

7.3 Verificar el árbol del clúster

Después de realizar un agrupamiento jerárquico mediante la función hclust() en un conjunto de datos, es importante evaluar la calidad del árbol de clúster generado. Una manera de hacerlo es mediante el cálculo de la correlación entre las distancias cophenetic y las distancias originales del conjunto de datos, generadas por la función dist().

La medida de correlación cophenetic evalúa qué tan bien el árbol de clúster refleja las distancias originales entre los objetos. Si la agrupación es válida, la forma en que los objetos están enlazados en el árbol debería tener una correlación fuerte con las distancias reales entre los objetos en la matriz de distancia original.

Un coeficiente de correlación cercano a 1 indica que el árbol de clúster refleja con precisión las distancias originales. Valores superiores a 0.75 se consideran buenos en términos de calidad de agrupamiento. El método de enlace “promedio” tiende a producir valores altos en esta estadística, lo cual puede ser una razón por la cual es tan popular.

En R, se puede utilizar la función cophenetic() de la librería base para calcular las distancias copheneticas y realizar la evaluación mencionada.

# Compute cophentic distance
res.coph <- cophenetic(res.hc)

# Correlation between cophenetic distance and
# the original distance
cor(res.dist, res.coph)
## [1] 0.6975266

Ejecute la función hclust () nuevamente utilizando el método de vinculación promedio. A continuación, llame a cophenetic () para evaluar la solución de agrupación.

res.hc2 <- hclust(res.dist, method = "average")

cor(res.dist, cophenetic(res.hc2))
## [1] 0.7180382

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

7.4 Cortar el dendograma en diferentes grupos.

# Cut tree into 4 groups
grp <- cutree(res.hc, k = 4)
head(grp, n = 4)
##  Alabama   Alaska  Arizona Arkansas 
##        1        2        2        3
# Number of members in each cluster
table(grp)
## grp
##  1  2  3  4 
##  7 12 19 12
# Get the names for the members of cluster 1
rownames(df)[grp == 1]
## [1] "Alabama"        "Georgia"        "Louisiana"      "Mississippi"   
## [5] "North Carolina" "South Carolina" "Tennessee"

El resultado de los cortes se puede visualizar fácilmente utilizando la función fviz_dend () [de factoextra]:

# Cut in 4 groups and color by groups
fviz_dend(res.hc, k = 4, # Cut in four groups
          cex = 0.5, # label size
)

Usando la función fviz_cluster () [en factoextra ], también podemos visualizar el resultado en un diagrama de dispersión. Las observaciones están representadas por puntos en la gráfica, utilizando 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",
             repel = TRUE,
             show.clust.cent = FALSE, ggtheme = theme_minimal())

7.5 Paquete de clúster R

El clúster del paquete R es una herramienta que simplifica el análisis de clústeres en R. Incluye las funciones agnes() y diana() que permiten calcular el agrupamiento aglomerativo y divisivo, respectivamente. Estas funciones realizan automáticamente todos los pasos necesarios, evitando la necesidad de ejecutar las funciones scale(), dist() y hclust() por separado. Esto simplifica el proceso de análisis de clústeres y agiliza la obtención de resultados.

Las funciones se pueden ejecutar de la siguiente manera:

library("cluster")
# Agglomerative Nesting (Hierarchical Clustering)
res.agnes <- agnes(x = USArrests, # data matrix
                   stand = TRUE, # Standardize the data
                   metric = "euclidean", # metric for distance matrix
                   method = "ward" # Linkage method
                   )

# DIvisive ANAlysis Clustering
res.diana <- diana(x = USArrests, # data matrix
                   stand = TRUE, # standardize the data
                   metric = "euclidean" # metric for distance matrix
                   )

Después de ejecutar agnes () y diana (), puedes usar la función fviz_dend ()[in factoextra ] para visualizar el resultado:

fviz_dend(res.agnes, cex = 0.6, k = 4)

## 7.6 Aplicación de agrupamiento jerárquico al análisis de datos de expresión génica. El agrupamiento en el análisis de datos de expresión génica es una técnica utilizada para identificar patrones de expresión génica similares en grupos de genes o muestras. Se emplean medidas de distancia de agrupamiento para evaluar la similitud o diferencia entre los elementos y decidir qué elementos deben agruparse.

En el caso de los softwares de agrupación en clústeres más comunes, la medida de distancia por defecto es la distancia euclidiana. Sin embargo, para los datos de expresión génica, es común utilizar log2 (expresión + 0,25) y la distancia de correlación como medidas de distancia. También se emplea el agrupamiento aglomerativo de agrupamiento de ligamiento completo.

El enlace único y completo producen el mismo dendrograma, independientemente de si se usan los datos sin procesar, los datos transformados o cualquier otra transformación que conserve el orden. Lo importante es determinar cuáles elementos tienen la distancia más pequeña. En cambio, otros métodos de agrupamiento son sensibles a la escala de medición.

Aunque en principio es posible agrupar todos los genes, puede resultar problemático visualizar un dendrograma muy grande. Por lo tanto, generalmente se realiza un análisis preliminar, como el análisis de expresión diferencial, para seleccionar genes relevantes para la agrupación.

La selección de genes basada en el análisis de expresión diferencial elimina aquellos genes que probablemente presenten patrones de expresión aleatorios. Esto mejora la identificación de patrones en los grupos de genes seleccionados.

7.7 Resumen

El agrupamiento jerárquico es un método de análisis de conglomerados que permite visualizar la similitud entre objetos mediante un dendrograma, que es una representación basada en árboles. En R, se pueden realizar análisis de conglomerados jerárquicos utilizando las funciones dist(), hclust() y fviz_dend().

El primer paso es calcular la matriz de distancias entre los objetos utilizando la función dist(). Luego, la función hclust() utiliza esta matriz para construir el árbol jerárquico. Por último, se puede utilizar la función fviz_dend() (que es parte de un paquete adicional en R) para visualizar el dendrograma de manera fácil y atractiva.

Además, es posible cortar el árbol en una altura específica para dividir los datos en diferentes grupos utilizando la función cutree() en R. Esto permite obtener grupos más pequeños y específicos a partir del dendrograma.

8. Comparando dendrogramas.

Describiremos cómo comparar dos dendrogramas utilizando el paquete R dendertend. El paquete dendertend proporciona varias funciones para comparar dendrogramas, aquí nos centraremos en dos funciones:

• langlegram() la comparación visual de dos dendrogramas.

• y cor.dendlist() para calcular una matriz de correlación entre dendrogramas.

8.1 Preparación de datos

Usaremos los conjuntos de datos R base USArrests y comenzaremos estandarizando las variables usando la función scale () de la siguiente manera:

df <- scale(USArrests)

Para asegurar la legibilidad de las gráficas que se generarán en las siguientes secciones, se trabajará con un subconjunto pequeño y aleatorio de datos. Con el fin de lograr esto, se utilizará la función muestra() para seleccionar al azar 10 observaciones del conjunto de datos, el cual originalmente contiene 50 observaciones.

# Subset containing 10 rows
set.seed(123)
ss <- sample(1:50, 10)
df <- df[ss,]

8.2 Comparando dendrogramas

Se inicia creando una lista de dos dendrogramas calculando el agrupamiento jerárquico (HC) utilizando dos métodos de vinculación diferentes (“promedio” y “sala.D2”). Luego, transformamos los resultados como dendogramas y creamos una lista para contener los dos dendogramas.

library(dendextend)
# Compute distance matrix
res.dist <- dist(df, method = "euclidean")

# Compute 2 hierarchical clusterings
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")

# Create two dendrograms
dend1 <- as.dendrogram (hc1)
dend2 <- as.dendrogram (hc2)

# Create a list to hold dendrograms
dend_list <- dendlist(dend1, dend2)

8.2.1 Comparación visual de dos dendrogramas

La función tanglegram del paquete dendertend se utiliza para comparar visualmente dos dendrogramas. Esta función traza los dos dendrogramas uno al lado del otro y conecta las etiquetas correspondientes con líneas. El entrelazamiento es una medida de la calidad de la alineación de los dos árboles y puede variar entre 0 y 1. Un coeficiente de entrelazamiento menor indica una mejor alineación, mientras que un coeficiente de entrelazamiento de 1 significa que los dos dendrogramas están completamente entrelazados y no están bien alineados.

tanglegram(dend1, dend2)

Se puede personarlizar el tanglegrama usando muchas otras opciones de la siguiente manera:

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

8.2.2 Matriz de correlación entre una lista de dendrogama.

La función cor.dendlist() se emplea para calcular la matriz de correlación “Baker” o “Cophenetic” entre una lista de árboles. El resultado varía entre -1 y 1. Si los valores están cerca de 0, indica que los dos árboles no son estadísticamente similares.

# Cophenetic correlation matrix
cor.dendlist(dend_list, method = "cophenetic")
##           [,1]      [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
# Baker correlation matrix
cor.dendlist(dend_list, method = "baker")
##           [,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:

# Cophenetic correlation coefficient
cor_cophenetic(dend1, dend2)
## [1] 0.9925544
# Baker correlation coefficient
cor_bakers_gamma(dend1, dend2)
## [1] 0.9895528

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

# Create multiple dendrograms by chaining
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
# Compute correlation matrix
dend_list <- dendlist("Complete" = dend1, "Single" = dend2,
                      "Average" = dend3, "Centroid" = dend4)
cors <- cor.dendlist(dend_list)
# Print correlation matrix
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
# Visualize the correlation matrix using corrplot package
library(corrplot)
corrplot(cors, "pie", "lower")

9. Visualización de dendrogramas

Como se ha descrito un dendrograma es una representación arbórea de los datos creada mediante métodos de agrupación jerárquica. En esta sección, proporcionamos código R para visualizar y personalizar dendrogramas y como guardarlos en formato grande.

Comenzamos calculando la agrupación jerárquica utilizando los conjuntos de datos de USArrests:

# Load data
data(USArrests)

# Compute distances and hierarchical clustering
dd <- dist(scale(USArrests), method = "euclidean")
hc <- hclust(dd, method = "ward.D2")

Para visualizar el dendrograma, utilizaremos las funciones y paquetes de R mencionados a continuación:

• La función “friz_dend()” del paquete “factoextra” para crear un dendrograma atractivo basado en ggplot2.

• Paquete “dendextend” para manipular los dendrogramas.

Antes de proceder, asegúrese de instalar el paquete necesario de la siguiente manera:

install.packages(c("factoextra", "dendextend"))
## Warning: packages 'factoextra', 'dendextend' are in use and will not be
## installed

9.1 Visualización de dendrogramas.

Utilizaremos la función friz_dend()[in factoextra paquete R] para crear fácilmente un bonito dendrograma utilizando el trazado base de R o ggplot2. También proporciona una opción para dibujar dendrogramas circulares y árboles de tipo filogénico.

Para crear un dendrograma básico, escriba esto:

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

Se puede usar los arguemntos main, sub, xlab, ylab para cambiar los títulos de las parcelas:

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

Para dibujar un dendrograma horizontal:

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

También es posible cortar el árbol a una altura determinada para dividir los datos en varios grupos. En este caso, es posible colorear las ramas por grupos y añadir rectángulos alrededor de cada grupo.

Por ejemplo:

#fviz_dend(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
#rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
#rect_fill = TRUE)

Grafico

Para cambiar el tema del gráfico, use el argumento ggtheme, cuyos valores permitidos incluyen gg-plot2 official themes | theme gray), theme_bw(), theme minimal), theme classic), theme void(l 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("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
color_labels_by_k = TRUE, # color labels by groups
ggtheme = theme_gray() # Change theme 
)

Los valores permitidos para k color incluyen las paletas Brewer del paquete Color Brewer y las paletas de revistas científicas del paquete ggsci R

En el siguiente código R, se cambiará los colores de los grupos utilizando la paleta de colores de “jeo” (journal of clinical oncology):

fviz_dend(hc, cex = 0.5, k = 4, # Cut in four groups
k_colors = "jco")

Si se quiere dibujar un dendrigrama horizontal con un rectangulo alrededor de los clúster.

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

Adicionalmete se puede trazar un dendrograma cirular usando la opción tipo =“circular”

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

Para trazar un árbol de tipo filogénico, se utiliza type = “phylogenic” y repel = TRUE. Esta funcionalidad requiere el paquete R igraph.

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

El diseño por defecto de los árboles filogénicos es “layout auto”. Los valores permitidos son uno de c(“layout.auto”, “layout with _drl”, “layout_as_tree”, “layout.gem”, “layout.mds”,“layout_con _Igl”).

Probemos phylo.layout = “layout.gem”:

require("igraph")
fviz_dend(hc, k = 4, # Cut in four groups
k_colors = "jco",
type = "phylogenic", repel = TRUE,
phylo_layout = "layout.gem")

9.2 Caso del dendrograma con grandes conjuntos de datos

Si realiza la agrupación jerárquica en un conjunto de datos grande, puede optar por ampliar o trazar solo una parte del dendrograma. Otra opción es trazar el dendrograma en una página grande de un PDF, lo cual permite ampliarlo sin perder resolución.

9.2.1 Ampliar el dendrograma

Si se desea ampliar los primeros conglomerados, se puede utilizar las opciones xlim e ylim para limitar el área de trazado.

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

9.2.2 Trazando un sub-árbol de dendrogramas

Para trazar un sub-árbol, se hace en base al siguiente procedimiento:

1. Se crea un dendrograma completo utilizando la función fuiz_dend() y se guarda el resultado en un objeto llamado dend_plot.

2. Se utiliza la función cut.dendrogram() de R para cortar el dendrograma en varios subárboles, especificando una altura dada (h). Se devuelve a una lista con los componentes “\(upper" y "\)lower”. “\(upper" es una versión truncada del árbol original y "\)lower” es una lista que contiene las ramas obtenidas al cortar el árbol, cada una representada como un dendrograma.

3. Se visualizaron los subárboles utilizando la función fviz_dend().

# Create a plot of the whole dendrogram,
# and extract the dendrogram data
dend_plot <- fviz_dend(hc, k = 4, # Cut in four groups
cex = 0.5, # label size
k_colors = "jco"
)
dend_data <- attr(dend_plot, "dendrogram") # Extract dendrogram data
# Cut the dendrogram at height h = 10
dend_cuts <- cut(dend_data, h = 10)
# Visualize the truncated version containing
# two branches
fviz_dend(dend_cuts$upper)
## Warning in min(-diff(our_dend_heights)): ningún argumento finito para min;
## retornando Inf

# Plot the whole dendrogram
print(dend_plot)

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

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

También se pueden trazar árboles circulares:

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

## 9.2.3 Guardando dendrogramas in una página grande de pdf. Si se tiene un dendrograma grande, este puede ser guardado en un pdf grande, el cual puede ser ampliado sin perder resolución.

pdf("dendrogram.pdf", width = 30, height = 15)
p <- fviz_dend(hc, k = 4, cex = 1, k_colors = "jco")
print(p)
dev.off()
## png 
##   2

9.3 Manipulando dendreogramas usando dendxtend.

El paquete dendextend simplifica el cambio de apariencia y comparación de dendrogramas. El operador de encadenamiento (%>%) ayuda a reescribir operaciones múltiples para facilitar la lectura del código. Esto permite convertir × %>% f(y) en f(x, y), lo que facilita la lectura de las operaciones de izquierda a derecha y de arriba abajo. Ejemplos de código R muestran que ambos resultados son equivalentes.

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

library (dendextend)
dend <- USArrests [1:5,] %>% # data
        scale %>% #Scale the data 
        dist %>% #calculate a distance matrix,
        hclust (method = "ward.D2") %>% #Hierarchical clustering
        as.dendrogram # Turn the object into a dendrogram.
plot (dend)

#set(object, what, value)
library (dendextend)
# 1. Create a customized dendrogram
#mycols <- c("#2E9FDF", "#EE1289", "#E7B800", "#FC4E07") 
#dend <- as.dendrogram(hc) %>%
  #set("branches_lwd", 1) %% # Branches line width
  #set("branches_k_color", mycols, k = 4) %% # Color branches by group:
  #set("labels_colors", mycols, k = 4) %% # Color labels by groups
  #set("labels_cex", 0.5) # Change label size

# 2. Create plot
#fviz_dend(dend)

Resumen:

Describimos funciones y paquetes para visualizar y personalizar dendrogramas, incluyendo:

fviz_dend() [en el paquete factoextra R], que proporciona soluciones convenientes para trazar fácilmente un hermoso dendrograma. Se puede utilizar para crear dendrogramas rectangulares y circulares, así como, un árbol filogénico.

• y el paquete dendertend, que proporciona métodos flexibles para personalizar dendrogramas.

Además, se describió cómo trazar un subconjunto de grandes dendrogramas