Este ejercicio tiene el objetivo de presentar aspectos fundamentales del valor de visualizar preliminarmente un conjunto de datos para determinar sus propiedades aplicando un Dendograma. Utilizaremos el dataset “mpg” de la librería ggplot2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.6.3
library(ggdendro)
## Warning: package 'ggdendro' was built under R version 3.6.3
str(mpg)
## Classes 'tbl_df', 'tbl' and 'data.frame': 234 obs. of 11 variables:
## $ manufacturer: chr "audi" "audi" "audi" "audi" ...
## $ model : chr "a4" "a4" "a4" "a4" ...
## $ displ : num 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
## $ year : int 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
## $ cyl : int 4 4 4 4 6 6 6 4 4 4 ...
## $ trans : chr "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
## $ drv : chr "f" "f" "f" "f" ...
## $ cty : int 18 21 20 21 16 18 18 18 16 20 ...
## $ hwy : int 29 29 31 30 26 26 27 26 25 28 ...
## $ fl : chr "p" "p" "p" "p" ...
## $ class : chr "compact" "compact" "compact" "compact" ...
grafica<-ggplot(mpg,aes(cty,hwy, color=class, size=displ)) + geom_point() +scale_color_brewer(palette="Set1")
grafica
#Seleccionamos un subset
v2008<- subset(mpg, mpg$year==2008)
v2008N<-v2008
#Realizamos una normalización de las variables numericas
v2008N[,c(3,5,8,9)]<- scale(v2008[,c(3,5,8,9)])
head(v2008N,3)
# crear columna con secuencia de números
v2008N$ID <- seq(1,nrow(v2008N))
# pegar la marca al numero de sequencia creado
v2008N$ID <- do.call(paste0,v2008N[c(1,12)])
# renombrar las filas
rownames(v2008N) <- v2008N$ID
## Warning: Setting row names on a tibble is deprecated.
head(v2008N,3)
#Calculamos distancias (Distancia Euclidiana)
matrizDistancias<- dist(v2008N)
## Warning in dist(v2008N): NAs introducidos por coerción
#data.matrix(matrizDistancias)
#Convertimos de WIDE a LONG
library(reshape2)
matrizLong<- melt(data.matrix(matrizDistancias))
head(matrizLong)
grafica<- ggplot(matrizLong, aes(x=Var1, y=Var2, fill=matrizLong$value))
grafica<- grafica+geom_tile() + scale_fill_viridis_c(option = "magma")
grafica <- grafica + theme(axis.text.x = element_text(angle = 90))
grafica
## Warning: Use of `matrizLong$value` is discouraged. Use `value` instead.
#Realizamos el Dendrograma
hc2008<-hclust(matrizDistancias)
hc2008
##
## Call:
## hclust(d = matrizDistancias)
##
## Cluster method : complete
## Distance : euclidean
## Number of objects: 117
#Graficamos el Dendrograma
grafica_Dendograma<-ggdendrogram(hc2008,rotate = TRUE, size=2)
grafica_Dendograma
#Dar color a los brazos del dendrograma
dhc2008 <- as.dendrogram(hc2008)
# Función para colorear los brazos
colbranches <- function(n, col)
{
a <- attributes(n) # Encuentra los atributos del nodo
# Color edges with requested color
attr(n, "edgePar") <- c(a$edgePar, list(col=col, lwd=2))
n # Don't forget to return the node!
}
# Colorea el primer sub-brazo del primer brazo en rojo,
# el segundo sub-brazo en naranja y el segundo brazo en azul
dhc2008[[1]][[1]] = dendrapply(dhc2008[[1]][[1]], colbranches, "red")
dhc2008[[1]][[2]] = dendrapply(dhc2008[[1]][[2]], colbranches, "orange")
dhc2008[[2]][[1]] = dendrapply(dhc2008[[2]][[1]], colbranches, "green")
dhc2008[[2]][[2]] = dendrapply(dhc2008[[2]][[2]], colbranches, "blue")
#dhc2008[[2]][[2]][[1]][[2]][[2]] = dendrapply(dhc2008[[2]][[2]][[1]][[2]][[2]], colbranches, "blue")
# Plot
plot(dhc2008)