Aprenderá la visualización mejorada del dendrograma de agrupamiento con R studio. Este tema cubrirá los siguientes aspectos:
El archivo de datos utilizado aquí se obtiene del conjunto de datos de demostración de R USArrests. El uso de la función head()
imprimirá las primeras seis filas del conjunto de datos USArrest
s. La funciónstr ()
muestra la estructura interna del conjunto de datos.
head(USArrests)
str(USArrests)
## 'data.frame': 50 obs. of 4 variables:
## $ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
## $ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
## $ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
## $ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
Para escalar los datos, utilice la función scale(). scale es una función genérica cuyo método predeterminado centra y / o escala las columnas de una matriz numérica. Si el argumento center se establece en VERDADERO, el centrado se realiza tomando las desviaciones medias de cada columna. Si scale = TRUE, la escala se realiza dividiendo las columnas de datos (centradas) por sus desviaciones estándar.
data.scaled <- scale(x = USArrests,
center = TRUE,
scale = TRUE)
head(data.scaled)
## 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
La matriz de distancia se puede calcular usando la función dist (). Esta función calcula y devuelve la matriz de distancia calculada utilizando la medida de distancia especificada para calcular las distancias entre las filas de una matriz de datos. Para ejecutar esta función, asegúrese de que el paquete de estadísticas esté cargado usando la función require ().
El argumento x especifica una matriz numérica, un marco de datos o un objeto “dist”. El método del segundo argumento especifica la medida de distancia que se utilizará. El método debe ser uno de los siguientes:
“euclidiana”, “máximo”, “manhattan”, “canberra”, “binario” o “minkowski”
Calcule los resultados del objeto res.dist como una matriz utilizando la función as.matrix () y especifique el número de filas y columnas que se imprimirán entre corchetes.
require(stats)
# Matriz de distancias
res.dist = dist(x = data.scaled,
method = "euclidean")
# Imprimi la matriz de distancias
output = as.matrix(res.dist)[1:6, 1:6]
round(output, digits = 3)
## Alabama Alaska Arizona Arkansas California Colorado
## Alabama 0.000 2.704 2.294 1.290 3.263 2.651
## Alaska 2.704 0.000 2.701 2.826 3.013 2.327
## Arizona 2.294 2.701 0.000 2.718 1.310 1.365
## Arkansas 1.290 2.826 2.718 0.000 3.764 2.831
## California 3.263 3.013 1.310 3.764 0.000 1.288
## Colorado 2.651 2.327 1.365 2.831 1.288 0.000
El método “dist” de as.matrix() y as.dist() se puede utilizar para la conversión entre objetos de la clase “dist” y matrices de distancia convencionales.
d = as.dist(output)
d
## Alabama Alaska Arizona Arkansas California
## Alaska 2.703754
## Arizona 2.293520 2.700643
## Arkansas 1.289810 2.826039 2.717758
## California 3.263110 3.012541 1.310484 3.763641
## Colorado 2.651067 2.326519 1.365031 2.831051 1.287619
El agrupamiento jerárquico es un análisis de agrupamiento sobre un conjunto de diferencias y métodos para analizarlo. Dicho agrupamiento se realiza mediante el uso de la hclust() función en el paquete de estadísticas .
El argumento despecifica una estructura de disimilitud producida por la dist() función. El segundo argumento es el method que especifica el método de aglomeración que se utilizará. Debe ser uno de los siguientes:
“ward.D”, “ward.D2”, “single”, “complete”, “average” (UPGMA), “mcquitty” (WPGMA), “median” (WPGMC) or “centroid” (UPGMC).
# Dendograma usando el paquete stats
require(stats)
res.hc <- hclust(d = res.dist,
method = "complete")
plot(x = res.hc)
Otra forma de visualización mejorada del dendrograma es mediante el uso de factoextra package. La función fviz_dend() dibuja fácilmente dendrogramas hermosos utilizando la plot() función o ggplot2() función base R. También proporciona una opción para dibujar un dendrograma circular y árboles filogénicos.
El x argumento especifica un objeto de la clase dendrogram, hclust, agnes, diana, hcut, hkmeans o HCPC. El tamaño de las etiquetas y el ancho de la línea del rectángulo se pueden controlar estableciendo el valor de cex y lwd como argumentos.
# Cluster dendrogram using factoextra package
require(factoextra)
## Loading required package: factoextra
## Warning: package 'factoextra' was built under R version 4.0.3
## Loading required package: ggplot2
## Warning in as.POSIXlt.POSIXct(Sys.time()): unable to identify current timezone 'U':
## please set environment variable 'TZ'
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_dend(x = res.hc, cex = 0.7, lwd = 0.7)
Los grupos en el dendrograma se pueden asignar con diferentes nombres de color integrados en R. La colors() función devuelve los nombres de colores incorporados que R conoce.
require(grDevices) colors()
Las paletas de gráficos se pueden configurar o visualizar mediante la palette() función. En R, casi siempre es mejor especificar los colores por su nombre. La forma rápida de mostrar colores en un gráfico es mediante la show_col() función.
require(scales)
## Loading required package: scales
palette()
## [1] "black" "#DF536B" "#61D04F" "#2297E6" "#28E2E5" "#CD0BBC" "#F5C710"
## [8] "gray62"
show_col(palette(rainbow(6)))
Para ver las paletas de colores inspiradas en gráficos en la pal_jco() función de uso de revista de oncología clínica . El argumento paletteespecifica el tipo de paleta. Actualmente hay una opción disponible default(paleta de 10 colores). El argumento alfa especifica el nivel de transparencia. El valor de este argumento puede estar entre [ Error de procesamiento matemático ] y [ Error de procesamiento matemático ].
require("ggsci")
## Loading required package: ggsci
## Warning: package 'ggsci' was built under R version 4.0.3
show_col(pal_jco(palette = c("default"))(10))
show_col(pal_jco("default", alpha = 0.6)(10))
Se pueden agregar colores para el número de grupos o clústeres tanto para líneas como para rectángulos. El argumento k_colors especifica un vector que contiene colores que se utilizarán para cada grupo. Los valores permitidos también incluyen “gris” para las paletas de colores grises; paletas de cerveza y paletas de revistas científicas del paquete ggsci R.
ggsci: “Npg”, “aaas”, “lancet”, “jco”, “ucscgb”, “uchicago”, “simpsons” y “rickandmorty”
El argumento rect especifica un valor lógico que indica si se debe agregar un rectángulo alrededor de los grupos.
Used only when k != NULL.
El color del borde y el tipo de línea de los rectángulos se pueden personalizar mediante el uso de rect_border argumentos. El rect_filles un argumento lógico si es VERDADERO, llene el rectángulo.
fviz_dend(x = res.hc, cex = 0.8, lwd = 0.8, k = 4,
# Seleccionando manualmente los colores
k_colors = c("red", "green3", "blue", "magenta"),
rect = TRUE,
rect_border = "gray",
rect_fill = FALSE)
fviz_dend(x = res.hc, cex = 0.8, lwd = 0.8, k = 4,
# OR JCO fill color for rectangles
k_colors = c("jco"),
rect = TRUE,
rect_border = "jco",
rect_fill = TRUE)
La alineación del dendrograma se puede cambiar estableciendo un valor lógico para el horizargumento. La configuración TRUE de este argumento dibujará un dendrograma horizontal.
fviz_dend(res.hc, cex = 0.8, k=4,
rect = TRUE,
k_colors = "jco",
rect_border = "jco",
rect_fill = TRUE,
horiz = TRUE)
Se pueden aplicar diferentes temas del paquete ggplot2 al dendrograma especificando el valor del ggtheme argumento. El valor predeterminado para este argumento es theme_classic(). Los valores permitidos para este argumento incluyen los siguientes temas oficiales de ggplot2 .
ggtheme: theme_gray (), theme_bw (), theme_minimal (), theme_classic (), theme_void (),….
fviz_dend(res.hc, cex = 0.8, lwd = 0.8, k = 4,
rect = TRUE,
k_colors = "jco",
rect_border = "jco",
rect_fill = TRUE,
ggtheme = theme_gray())
El tipo de dendrograma se puede cambiar estableciendo un valor para el type argumento. Los valores permitidos para este argumento son los siguientes:
#Phylogenic
library(igraph)
## Warning: package 'igraph' was built under R version 4.0.5
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
Phylo = fviz_dend(res.hc, cex = 0.8, lwd = 0.8, k = 4,
rect = TRUE,
k_colors = "jco",
rect_border = "jco",
rect_fill = TRUE,
type = "phylogenic")
Phylo
# Circular
Circ = fviz_dend(res.hc, cex = 0.8, lwd = 0.8, k = 4,
rect = TRUE,
k_colors = "jco",
rect_border = "jco",
rect_fill = TRUE,
type = "circular")
Circ
Se pueden utilizar diferentes diseños para los árboles filogenéticos. Para hacer esto, establezca un valor para el phylo_layout argumento. El valor predeterminado para este argumento es layout.auto. Los valores permitidos para este argumento incluyen:
phylo_layout: “Layout.auto”, “layout_with_drl”, “layout_as_tree”, “layout.gem”, “layout.mds” y “layout_with_lgl”
fviz_dend(res.hc, cex = 0.8, lwd = 0.8, k = 4,
rect = TRUE, k_colors = "jco", rect_border = "jco",
rect_fill = TRUE, type = "phylogenic", repel = TRUE,
# phylo_layout (layout_with_drl)
phylo_layout = "layout_with_drl")
# phylo_layout (layout_as_tree)
#phylo_layout = "layout_as_tree"
# phylo_layout (layout.gem)
#phylo_layout = "layout.gem"
# phylo_layout (layout.mds)
#phylo_layout = "layout.mds"
# phylo_layout (layout_with_lgl)
#phylo_layout = "layout_with_lgl"
plot(res.hc)
grupos<-cutree(res.hc, k=2) # cut tree into 2 clusters
# draw dendogram with red borders around the 2 clusters
rect.hclust(res.hc,k=2,border="red")
table(grupos)
## grupos
## 1 2
## 19 31
fviz_dend(x = res.hc, k = 4, cex = 0.6) +
geom_hline(yintercept = 3.5, linetype = "dashed") +
labs(title = "Herarchical clustering",
subtitle = "Distancia euclídea, Lincage complete, K=2")
fviz_dend(x = res.hc, k = 2, cex = 0.6) +
geom_hline(yintercept = 5.5, linetype = "dashed") +
labs(title = "Herarchical clustering",
subtitle = "Distancia euclídea, Lincage complete, K=2")
Dos propiedades adicionales se derivan de la forma en que se generan los clusters en el método de hierarchical clustering:
Dada la longitud variable de las ramas, siempre existe un intervalo de altura para el que cualquier corte da lugar al mismo número de clusters. En el ejemplo anterior, todos los cortes entre las alturas 5 y 6 tienen como resultado los mismos 2 clusters.
Con un solo dendrograma se dispone de la flexibilidad para generar cualquier número de clusters desde 1 a n. La selección del número óptimo puede valorarse de forma visual, tratando de identificar las ramas principales en base a la altura a la que ocurren las uniones. En el ejemplo expuesto es razonable elegir entre 2 o 4 clusters.
Una forma menos frecuente de representar los resultados de un hierarchical clustering es combinándolos con una reducción de dimensionalidad por PCA. Primero, se calculan las componentes principales y se representan las observaciones en un scatterplot empleando las dos primeras componentes, finalmente se colorean los clusters mediante elipses.
library(factoextra)
fviz_cluster(object = list(data=USArrests, cluster=cutree(res.hc, k=4)),
ellipse.type = "convex", repel = TRUE, show.clust.cent = FALSE,
labelsize = 8) +
labs(title = "Hierarchical clustering + Proyección PCA",
subtitle = "Distancia euclídea, Lincage complete, K=4") +
theme_bw() +
theme(legend.position = "bottom")
library(factoextra)
fviz_cluster(object = list(data=USArrests, cluster=cutree(res.hc, k=2)),
ellipse.type = "convex", repel = TRUE, show.clust.cent = FALSE,
labelsize = 8) +
labs(title = "Hierarchical clustering + Proyección PCA",
subtitle = "Distancia euclídea, Lincage complete, K=4") +
theme_bw() +
theme(legend.position = "bottom")
grupos_paises <- cbind(USArrests[,-1],grupos)
print(grupos_paises)
## Assault UrbanPop Rape grupos
## Alabama 236 58 21.2 1
## Alaska 263 48 44.5 1
## Arizona 294 80 31.0 1
## Arkansas 190 50 19.5 2
## California 276 91 40.6 1
## Colorado 204 78 38.7 1
## Connecticut 110 77 11.1 2
## Delaware 238 72 15.8 2
## Florida 335 80 31.9 1
## Georgia 211 60 25.8 1
## Hawaii 46 83 20.2 2
## Idaho 120 54 14.2 2
## Illinois 249 83 24.0 1
## Indiana 113 65 21.0 2
## Iowa 56 57 11.3 2
## Kansas 115 66 18.0 2
## Kentucky 109 52 16.3 2
## Louisiana 249 66 22.2 1
## Maine 83 51 7.8 2
## Maryland 300 67 27.8 1
## Massachusetts 149 85 16.3 2
## Michigan 255 74 35.1 1
## Minnesota 72 66 14.9 2
## Mississippi 259 44 17.1 1
## Missouri 178 70 28.2 2
## Montana 109 53 16.4 2
## Nebraska 102 62 16.5 2
## Nevada 252 81 46.0 1
## New Hampshire 57 56 9.5 2
## New Jersey 159 89 18.8 2
## New Mexico 285 70 32.1 1
## New York 254 86 26.1 1
## North Carolina 337 45 16.1 1
## North Dakota 45 44 7.3 2
## Ohio 120 75 21.4 2
## Oklahoma 151 68 20.0 2
## Oregon 159 67 29.3 2
## Pennsylvania 106 72 14.9 2
## Rhode Island 174 87 8.3 2
## South Carolina 279 48 22.5 1
## South Dakota 86 45 12.8 2
## Tennessee 188 59 26.9 1
## Texas 201 80 25.5 1
## Utah 120 80 22.9 2
## Vermont 48 32 11.2 2
## Virginia 156 63 20.7 2
## Washington 145 73 26.2 2
## West Virginia 81 39 9.3 2
## Wisconsin 53 66 10.8 2
## Wyoming 161 60 15.6 2