Como se ha descrito en capítulos anteriores, un dendrograma es una representación en forma de árbol de un datos creada mediante métodos de agrupación jerárquica (Capítulo 7). En este artículo código R para visualizar y personalizar dendrogramas. Además, mostramos cómo guardar y ampliar un dendrograma grande.

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

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

Para visualizar el dendrograma, utilizaremos las siguientes funciones y paquetes de R: - fviz_dend()[en el paquete factoextra R] para crear fácilmente un bonito dendrograma basado en ggplot2. dendrograma basado en ggplot2. - paquete dendextend para manipular dendrogramas Antes de continuar, instale los paquetes necesarios como se indica a continuación:

install.packages(c("factoextra", "dendextend"))
## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)

9.1 Visualización de dendrogramas

Usaremos la función fviz_dend()[en el paquete R factoextra] para crear fácilmente un bonito dendrograma, utilizando el gráfico base de R o ggplot2. También ofrece una opción para dibujar dendrogramas circulares y árboles filogénicos. Para crear un dendrograma básico, escriba esto:

library(ggplot2)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_dend(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 <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Puede utilizar los argumentos main, sub, xlab, ylab para cambiar los títulos de los gráficos como se indica a continuación:

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

Para dibujar un dendrograma horizontal, escriba esto:

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

También es posible cortar el árbol a una altura determinada para dividir los datos en múltiples grupos, como se describe en el capítulo anterior: Agrupación jerárquica (Capítulo 7). En En este caso, es posible colorear las ramas por grupos y añadir rectángulos alrededor de cada grupo. 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

Para cambiar el tema del gráfico, utilice el argumento ggtheme, cuyos valores permitidos incluyen los temas ociales de ggplot2 [ theme_gray(), theme_bw(), theme_minimal(), theme_classic(), theme_void()] o cualquier otro tema de ggplot2 definido por el usuario.

fviz_dend(hc, k = 4, # Cut in four groups
cex = 0.5,) # label size

k_colors = c("#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 del paquete RColorBrewer (p. ej. “RdBu”, “Blues”, “Dark2”, “Set2”, . . . ; ) y paletas de revistas científicas del paquete ggsci R (por ejemplo “npg”, “aaas”, “lancet”, “jco”, “ucscgb”, “uchicago”, “simpsons” y “rickandmorty”).

En el siguiente código R, cambiaremos los colores de los grupos utilizando “jco” (journal of clinical oncology) paleta de colores:

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

Si desea dibujar un dendrograma horizontal con un rectángulo alrededor de los conglomerados, utilice esto:

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

Además, puede trazar un dendrograma circular utilizando la opción type = “circular”

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

Para trazar un árbol de tipo filogénico, utilice type = “phylogenic” y repel = TRUE (para evitar que las sobretrazado de etiquetas). Esta funcionalidad requiere el paquete igraph de R. Asegúrese de que está instalado antes de escribir el siguiente código R.

require("igraph")
## Loading required package: igraph
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
fviz_dend(hc, k = 4, k_colors = "jco",
type = "phylogenic", repel = TRUE)

El diseño por defecto para 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_with_lgl”). Para obtener más información sobre estos diseños, consulta la documentación del paquete paquete igraph R. 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 calcula la agrupación jerárquica en un gran conjunto de datos, es posible que desee ampliar el dendrograma o trazar sólo un subconjunto del dendrograma. el dendrograma o trazar sólo un subconjunto del dendrograma. Como alternativa, también puede trazar el dendrograma en una página grande de un PDF, que puede ampliarse sin pérdida de resolución.

9.2.1 Zoom en el dendrograma

Si desea hacer zoom en los primeros conglomerados, puede utilizar las opciones xlim e ylim para limitar el área del gráfico. Por ejemplo, escriba el código siguiente

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

9.2.2 Trazar un subárbol de dendrogramas

Para trazar un subárbol, seguiremos el procedimiento que se indica a continuación: 1. 1. Cree el dendrograma completo usando fviz_dend() y guarde el resultado en un objeto dend_plot por ejemplo. 2. Utilice la función base de R cut.dendrogram() para cortar el dendrograma, a una altura dada (h), en múltiples subárboles.Altura (h), en múltiples subárboles. Esto devuelve una lista con componentes $upper y $lower, el primero es una versión truncada del árbol original, también de clase dendrograma, el segundo una lista con las ramas obtenidas al cortar el árbol,cada una de ellas un dendrograma. 3. Visualice los subárboles utilizando fviz_dend().

El código R es el siguiente. - Corta el dendrograma y visualiza la versión truncada:

dend_plot <- fviz_dend(hc, k = 4, # Cut in four groups
cex = 0.5, 
k_colors = "jco"
)
dend_data <- attr(dend_plot, "dendrogram") 
dend_cuts <- cut(dend_data, h = 10)
fviz_dend(dend_cuts$upper)
## Warning in min(-diff(our_dend_heights)): no non-missing arguments to min;
## returning Inf

print(dend_plot)

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

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

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

También puedes trazar árboles circulares como se indica a continuación:

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

9.2.3 Guardar el dendrograma en una página PDF grande

Si tiene un dendrograma grande, puede guardarlo en una página PDF grande, que se puede sin pérdida de 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 Manipulación de dendrogramas con dendextend

El paquete dendextend proporciona funciones para cambiar fácilmente la apariencia de un dendrograma y para comparar dendrogramas. En esta sección utilizaremos el operador de encadenamiento (%>%) para simplificar nuestro código. El operador de encadenamientooperador de encadenamiento convierte x %>% f(y) en f(x, y), por lo que se puede utilizar para reescribir múltiples operaciones de forma que puedan leerse de izquierda a derecha y de arriba abajo. Por ejemplo los resultados de los dos códigos R siguientes son equivalentes.

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

library(dendextend)
## 
## ---------------------
## 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
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)

Funciones para personalizar dendrogramas: La función set() [en el paquete dendextend] puede utilizarse para cambiar los parámetros de un dendrograma. El formato es:

# set(object, what, value)
  1. objeto: un objeto dendrograma
  2. qué: un carácter que indica cuál es la propiedad del árbol que debe ser establecer/actualizar
  3. valor: un vector con el valor a establecer en el árbol (el tipo de valor depende del “qué”).
library(dendextend)
# 1. Create a customized dendrogram
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) 
# 2. Create plot
fviz_dend(dend)

9.4 Resumen

Describimos funciones y paquetes para visualizar y personalizar dendrogramas incluyendo: - fviz_dend() [en el paquete R factoextra], que proporciona soluciones convenientes para trazar fácilmente un bonito dendrograma. Puede utilizarse para crear dendrogramas rectangulares y dendrogramas rectangulares y circulares, así como un árbol filogénico. - y el paquete dendextend, que proporciona métodos flexibles para personalizar dendrogramas. Además, describimos cómo trazar un subconjunto de grandes dendrogramas.