Cargar librerÃas y conjunto de datos
library(ggplot2)
data(mpg)
head(mpg)
## # A tibble: 6 x 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto(~ f 18 29 p comp~
## 2 audi a4 1.8 1999 4 manua~ f 21 29 p comp~
## 3 audi a4 2 2008 4 manua~ f 20 31 p comp~
## 4 audi a4 2 2008 4 auto(~ f 21 30 p comp~
## 5 audi a4 2.8 1999 6 auto(~ f 16 26 p comp~
## 6 audi a4 2.8 1999 6 manua~ f 18 26 p comp~
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" ...
Crear un subset para un año especÃfico (2008)
mpg2008 <- subset(mpg,mpg$year == 2008)
mpg2008 <- mpg2008[complete.cases(mpg2008),]
head(mpg2008,3)
## # A tibble: 3 x 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 2 2008 4 manua~ f 20 31 p comp~
## 2 audi a4 2 2008 4 auto(~ f 21 30 p comp~
## 3 audi a4 3.1 2008 6 auto(~ f 18 27 p comp~
Generar identificador de filas
# # crear columna con secuencia de números
mpg2008$ID <- seq(1,nrow(mpg2008))
# # pegar la marca al numero de sequencia creado
mpg2008$ID <- do.call(paste0,mpg2008[c(1,12)])
# renombrar las filas
rownames(mpg2008) <- mpg2008$ID
# mostar las primeros 3 filas
head(mpg2008,3)
## # A tibble: 3 x 12
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 2 2008 4 manu~ f 20 31 p comp~
## 2 audi a4 2 2008 4 auto~ f 21 30 p comp~
## 3 audi a4 3.1 2008 6 auto~ f 18 27 p comp~
## # ... with 1 more variable: ID <chr>
Normalizar variables numéricas
# duplico el dataset
mpg2008N <- mpg2008
# Normalizar columnas numericas
mpg2008N[,c(3,5,8,9)] <- scale(mpg2008[,c(3,5,8,9)])
# mostar las primeros 3 filas
head(mpg2008N,3)
## # A tibble: 3 x 12
## manufacturer model displ year cyl trans drv cty hwy fl
## <chr> <chr> <dbl> <int> <dbl> <chr> <chr> <dbl> <dbl> <chr>
## 1 audi a4 -1.28 2008 -1.26 manu~ f 0.813 1.29 p
## 2 audi a4 -1.28 2008 -1.26 auto~ f 1.06 1.12 p
## 3 audi a4 -0.432 2008 -0.0515 auto~ f 0.320 0.607 p
## # ... with 2 more variables: class <chr>, ID <chr>
Generar identificador de filas para datset escalado
# crear columna con secuencia de números
mpg2008N$ID <- seq(1,nrow(mpg2008N))
# pegar la marca al numero de sequencia creado
mpg2008N$ID <- do.call(paste0,mpg2008N[c(1,12)])
# renombrar las filas
rownames(mpg2008N) <- mpg2008N$ID
Calcular distancias (euclidianas)
matrizDistancias <- dist(mpg2008N)
# visualiza los valores de la matriz de distancias
# head(data.matrix(matriz_dist),3)
library(reshape2)
matrizLong <- melt(data.matrix(matrizDistancias))
head(matrizLong)
## Var1 Var2 value
## 1 audi1 audi1 0.0000000
## 2 audi2 audi1 0.4648124
## 3 audi3 audi1 2.6291275
## 4 audi4 audi1 0.7947403
## 5 audi5 audi1 1.1263825
## 6 audi6 audi1 3.0075324
plot <- ggplot(matrizLong, aes(x=Var1, y=Var2, fill=value))
plot <- plot + geom_tile()
plot <- plot + scale_fill_viridis_c()
plot <- plot + theme(axis.text.x = element_text(angle = 90))
plot

Agrupamiento jerárquico
# hace el agrupamiento jerárquico
hc2008 <- hclust(matrizDistancias)
# Construye la gráfica. Si no tiene la librearÃa instalada instale 'ggdendro'
library(ggdendro)
p <- ggdendrogram (hc2008, rotate=TRUE, size=2)
p
