# 0. Instalar y cargar los paquetes
    # Lista de paquetes de funciones a instalar
    .packages = c("MASS","mclust")
    
    # 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)
    #-------------------------------------------------------------------------------

    
# 1. Creamos los datos ficticios
mu1 <- c(1,5)
Sigma1 <- matrix(c(1,1.5,1.5,3),2,2)
mu2 <- c(2,3)
Sigma2 <- matrix(c(0.9,0.4,0.4,0.3),2,2)
mu3 <- c(0.5,8)
Sigma3 <- matrix(c(0.9,0.4,0.4,0.3),2,2)
x1<-mvrnorm(n = 5e2,mu1,Sigma1)
x2<-mvrnorm(n = 5e2,mu2,Sigma2)
x3<-mvrnorm(n = 5e2,mu3,Sigma3)
d = data.frame(rbind(rbind(x1,x2),x3))


# 2. dibujamos los datos
plot(d)


# 3. Clustering k-means con la librería base
kclus <- kmeans(scale(d),3)


# 4. Clustering jerárquico con la librería base
ddist <- dist(scale(d)) 
hc = hclust(ddist)
plot(hc) # plot dendograma
cutoff_dist <- 7
hc_cut <- cutree(hc, k = 3)


# 5. Clustering con Gaussian Mixture Models
GMM_fit <- Mclust(scale(d))


# 6. Comparación de métodos de clustering
plot(d, col=kclus$cluster,main="kmeans")
plot(d, col=hc_cut,main="hierarchical")
plot(d, col=GMM_fit$classification,main="GMM")


