Como se describió en capítulos anteriores, un dendrograma es una representación basada en un árbol de datos creados mediante métodos de agrupación jerárquica (Capítulo 7). En este artículo, proporcionamos código R para visualizar y personalizar dendrogramas. Además, mostramos cómo guardar y ampliar un dendrograma grande. Comenzamos calculando el agrupamiento jerárquico 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, usaremos las siguientes funciones y paquetes de R: • fviz _dend) en el paquete factoextra R para crear fácilmente un hermoso modelo basado en ggplot2 dendrograma. • paquete dendeztend para manipular dendrogramas Antes de continuar, instale el paquete requerido de la siguiente manera:
install.packages(c("factoextra", "dendextend"))## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
Usaremos la función fviz_dend para crear fácilmente dendrograma utilizando el gráfico base R o ggplot2. También proporciona una opción para dibujando dendogramas circulares y árboles de tipo filogenético. 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 usar los argumentos main, sub, xlab, lab para cambiar los títulos
de las gráficas de la siguiente manera:
fviz_dend(hc, cex = 0.5,
main = "Dendrogram - ward.D2",
xlab = "Objects", ylab = "Distance", sub = "")
Para dibujar un dendograma horizontal, escriba esto:
fviz_dend(hc, hex = 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 agregar un rectángulo alrededor de cada una.
fviz_dend(hc, k = 4, # Cut in four groups
cex = 0.5) # label size
Para cambiar el tema de la trama, use el argumento ggtheme, cuyos
valores permitidos incluyen gg- plot2 temas oficiales | tema_gris),
tema_bw, tema_minimal), tema_clásico)
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
En el código R a continuación, cambiará los colores del grupo usando
“jeo” (revista de oncología clínica)
fviz_dend(hc, cex = 0.5, k = 4, # Cut in four groups
k_colors = "jco")
Si desea dibujar un dendograma horizontal con un rectángulo alrededor de
los grupos, use esto:
fviz_dend(hc, k = 4, cex = 0.4, horiz = TRUE, k_colors = "jco",
rect = TRUE, rect_border = "jco", rect_fill = TRUE)
Además, puede trazar un dendrograma circular usando la opción type =
“circular”.
fviz_dend(hc, cex = 0.5, k = 4,
k_colors = "jco", type = "circular")
Para trazar un árbol filogenético, use type = “phylogenic” y repel =
TRUE (para evitar superposición de etiquetas). Esta funcionalidad
requiere del paquete igraph.
install.packages('igraph')## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
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)
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")Si calcula la agrupación jerárquica en un conjunto de datos grande, es posible que desee ampliar el dendograma o trazar sólo un subconjunto del dendograma. Alternativamente, también podría trazar el dendrograma en una página grande en un PDF, que se puede ampliar sin pérdida de resolución.
Si desea ampliar los primeros grupos, es posible utilizar la opción xlim e ylim para limitar el área de la parcela. Por ejemplo:
fviz_dend(hc, xlim = c(1, 20), ylim = c(1, 8))Para trazar un subárbol, seguiremos el siguiente procedimiento: Cree el dendrograma completo utilizando fuiz_ dend() y guarde el resultado en un objeto, llamado dend plot por ejemplo. Utilice la función base R cortada. dendrogram() para cortar el dendrograma, en un determinado altura (h), en múltiples subárboles. Esto devuelve una lista con componentes Cena y Slower, el primero es una versión truncada del árbol original, también de clase dendrograma, este último una lista con las ramas obtenidas al cortar el árbol, cada uno un dendograma. *Visualice subárboles usando 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, # label size
k_colors = "jco")• Trazar subárboles de dendrogramas:
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)): no non-missing arguments to min;
## returning Inf
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")
Asímismo, se puede trazar árboles circulares de la siguiente manera:
#Plot circular
fviz_dend(dend_cuts$lower[[2]], type = "circular")
### 9.2.3 Guardar dendrograma en una página PDF grande Si tiene un
dendrograma grande, puede guardarlo en una página PDF, donde se puede
ser zoom sin pérdida de resolución.
pdf("dendrogram.pdf", width=30, height=15) # Open a PDF
p <- fviz_dend(hc, k = 4, cex = 1, k_colors = "jco" ) # Do plotting
print(p)
dev.off() # Close the PDF## png
## 2
El paquete dendextend proporciona funciones para cambiar fácilmente la apariencia de un dendograma y para comparar dendogramas. En esta sección usaremos el operador de encadenamiento (%>% para simplificar nuestro código. El El operador de encadenamiento convierte × %>% f(y) en f(x, y) para que pueda usarlo para reescribir múltiples operaciones de modo que puedan leerse de izquierda a derecha y de arriba a abajo. Por ejemplo, los resultados de los dos códigos R a continuación son equivalentes. • Código R estándar para crear un dendrograma:
data <- scale(USArrests)
dist.res <- dist(data)
hc <- hclust(dist.res, method = "ward.D2")
dend <- as.dendrogram(hc)
plot(dend)
• Código R para crear un dendrograma usando un operador de
encadenamiento:
#R code for creating a dendrogram using chaining operator:
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 se puede utilizar para cambiar los parámetros de un
dendograma. El formato es:
#set(object, what, value)#other form
library(dendextend)
# 1. Create a customized dendrogram
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
dend <- as.dendrogram(hc) %>%
set("branches_lwd", 1) %>% # Branches line width
set("branches_k_color", mycols, k = 4) %>% # Color branches by groups
set("labels_colors", mycols, k = 4) %>% # Color labels by groups
set("labels_cex", 0.5) # Change label size
# 2. Create plot
fviz_dend(dend)Describimos funciones y paquetes para visualizar y personalizar dendrogramas incluyendo: fviz_dend() [de hecho paquete R extra], que proporciona soluciones convenientes para trazando fácilmente un hermoso dendrograrn. Se puede utilizar para crear rectangulares y dendrogramas circulares, así como un árbol filogenético. Y el paquete dendextend, que proporciona métodos flexibles para personalizar dendogramas. Además, describimos cómo trazar un subconjunto de dendrogramas grandes