Objetivo

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

Dendrogramas

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)