Se hace una preparación de los datos por medio de un dataframe, además, se hace un subset que contenga 10 columnas para posteriormente plantear una comparación entre dendrogramas con su respectiva gráfica.
#install.packages("dendextend")
#install.packages("corrplot")
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
library(corrplot)
## corrplot 0.92 loaded
Para hacer legibles los gráficos se trabajó con un pequeño subconjunto aleatorio del conjunto de datos. Por lo tanto, se emplea la función sample() para seleccionar aleatoriamente 10 observaciones entre las 50 observaciones contenidas en el conjunto de datos:
#Data preparation
df <- scale(USArrests)
# Subset containing 10 rows
set.seed(123)
ss <- sample(1:50, 10)
df <- df[ss,]
Se crea una lista de dos dendrogramas calculando la agrupación jerárquica (HC) utilizando dos métodos de enlace diferentes (“promedio” y “ward”. D2”). A continuación, transformamos los resultados como dendrogramas y creamos una lista para contener los dos dendrogramas.
#Comparing dendrograms
# 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)
#Visual comparison of two dendrograms
#Draw a tanglegram:
tanglegram(dend1, dend2)
Al haber realizado ahora se genera el mismo gráfico pero cambiando sus caracterĂsticas estĂ©ticas de la siguiente forma.
#Customized the tanglegram using many other options as follow:
tanglegram(dend1, dend2,
highlight_distinct_edges = FALSE, # Turn-off dashed lines
common_subtrees_color_lines = FALSE, # Turn-off line colors
common_subtrees_color_branches = TRUE, # Color common branches
main = paste("Entanglement =", round(entanglement(dend_list), 2))
)
## Matriz de correlaciĂłn entre una lista de dendrogramas
Se consigue la matriz de correlaciĂłn. La funciĂłn cor.dendlist() se utiliza para calcular la matriz de correlaciĂłn “Baker” o “Cophenetic” entre una lista de árboles. El valor puede oscilar entre -1 y 1. Con valores cercanos a 0, lo que significa que los dos árboles no son estadĂsticamente similares.
#Correlation matrix between a list of dendrograms
# Cophenetic correlation matrix
cor.dendlist(dend_list, method = "cophenetic")
## [,1] [,2]
## [1,] 1.0000000 0.9925544
## [2,] 0.9925544 1.0000000
También se crea una matriz de correlación con el método de Baker
# Baker correlation matrix
cor.dendlist(dend_list, method = "baker")
## [,1] [,2]
## [1,] 1.0000000 0.9895528
## [2,] 0.9895528 1.0000000
Se halla el coeficiente de correlaciĂłn de Cophenetic
# Cophenetic correlation coefficient
cor_cophenetic(dend1, dend2)
## [1] 0.9925544
También se halla el coeficiente de correlación de Baker
# Baker correlation coefficient
cor_bakers_gamma(dend1, dend2)
## [1] 0.9895528
Entonces, con estos datos se comparan los dendogramas
#COMPARING DENDROGRAMS
# 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
Se visualiza la matriz de correlaciĂłn usando una funciĂłn del paquete corrplot
# Visualize the correlation matrix using corrplot package
corrplot(cors, "pie", "lower")