# 0. Instalar y cargar los paquetes
# Lista de paquetes de funciones a instalar
.packages = c("factoextra","corrplot","PerformanceAnalytics","Hmisc")

# Instala los paquetes sinó los tienes instalados
.inst <- .packages %in% installed.packages()
if(length(.packages[!.inst]) > 0) install.packages(.packages[!.inst])

# CARGAR PAQUETES O CREAR FUNCIONES
#*******************************************************************************
# Carga los paquetes sinó los tienes cargados
lapply(.packages, require, character.only=TRUE)
#-------------------------------------------------------------------------------


# EJEMPLO 1

# 1. leer datos y estandarizar
my_data <- scale(iris[, -5])

# 2. Explorar los datos
pairs(my_data) # matrixplot
cor <- rcorr(my_data)
corrplot(cor$r, type="upper", order="hclust", 
         p.mat = cor$P, sig.level = 0.01, insig = "blank") # plot de correlación
chart.Correlation(my_data, histogram=TRUE, pch=19,method = "spearman") # histograma, matrixplot y correlación

# 3. Escojer el número óptimo de clusters
fviz_nbclust(my_data, hcut, method = "gap_stat")

# 4. Clustering jerarquico con el paquete factoextra: calcula las distancias
res.hc <- eclust(my_data, "hclust", k = 3, graph = FALSE) 

# 5. Visualizar el clustering
fviz_dend(res.hc, rect = TRUE, show_labels = FALSE)
pairs(my_data,col=res.hc$cluster,pch = 21)



#---------------------------------------------------------------------------------------------------------



# EJEMPLO 2

# 1. Leer los datos de USArrets
data("USArrests")

# 2. Estandarizar los datos
my_data <- scale(USArrests)

# 3. Explorar los datos
pairs(my_data) # matrixplot
cor <- rcorr(my_data)
corrplot(cor$r, type="upper", order="hclust", 
         p.mat = cor$P, sig.level = 0.01, insig = "blank") # plot de correlación
chart.Correlation(my_data, histogram=TRUE, pch=19,method = "spearman") # histograma, matrixplot y correlación


# 4. Calcular la matriz de disimilaritud con distancia euclidia
d <- dist(my_data, method = "euclidean")

# 5. Calcular el clustering Jerárquico
res.hc <- hclust(d)

# 6. Cortar el arbol en cuatro grupos k = 4
grp <- cutree(res.hc, k = 3)


# 7. Visualizar el clustering jerárquico
plot(res.hc, cex = 0.6)
rect.hclust(res.hc, k = 3, border = 2:5)
pairs(my_data,col=grp,pch = 21)