Para aplicar PAM debemos haber bajado el paquete "cluster" install.packages("cluster")##para bajarlo library("cluster")##para abrirlo ################################################################################ ##DENDROGRAMAS## ############################################################################ Los dendrogramas pueden realizarse en R con la función hclust() Para dibujar el dendrograma, hay que darle la matriz de distancias. arrestos=scale(USArrests) hc=hclust(dist(arrestos),"ward.D2") plot(as.dendrogram(hc)) Para comparación de dendrogramas se utiliza la medida del coeficiente de cophenetic (coeficiente de correlación entre las distancias entre los datos y las alturas de los nodos en un dendrograma), cuanto mayor es el coeficiente significa que es mejor el agrupamiento que realiza el dendrograma (mejor en el sentido que refleja más fielmente las distancias originales de los datos, recordar que en un dendrograma las distancias que aparecen son entre cada dato y su grupo más cercano medido con cierta distancia). Si se hacen varios dendrogramas para un mismo conjunto de datos (utilizando distintas distancias entre conjuntos), este coeficiente nos puede llegar a ayudar a elegir por uno u otro agrupamiento (o sea por un dendrogama u otro). hclust(arrestos) dendro1=hclust(dist(arrestos)) plot(dendro1) dendro2=hclust(dist(arrestos),method="single") plot(dendro2) install.packages("cluster") library("cluster") d1=cophenetic(dendro1) d2=cophenetic(dendro2) d=dist(arrestos) cor(d1,d) cor(d2,d) #########################################FUZZY CLUSTERING######################################################### En el paquete "cluster" se encuentra la función fanny() que aplica c-means clustering. Dado el número de grupos la función devuelve una matriz dando a cada individuo una matriz donde en cada fila aparecen las probabilidades de pertenecer a cada grupo (la matriz es nxk siendo n la cantidad de individuos). #############CANTIDAD DE GRUPOS######################################################### Para encontrar el número óptimo de clusters utilizamos el paquete NbClust que contiene el cálculo de 30 índices todos a la vez, además me resume la información de la cantidad de índices que coinciden dando el número óptimo de clusters en cada caso. library("NbClust") Por ejemplo ¿en cúantos grupos será conveniente separar en clusters los estados de USA del conjunto de datos USArrests? arrestos= scale(USArrests)##estandarizamos los datos para quitarles la unidad de medida resumen_k_optimo <- NbClust(arrestos, distance = "euclidean", min.nc = 2, max.nc = 10, method = "kmeans", index = "alllong") Graficamos el coeficiente de Silhouette t=seq(2,10)##10 es el número máximo de clusters que pusimos, podría ser otro plot(t,resumen_k_optimo$All.index[,13],type="o",xlab="number of clusters", ylab="",main="Silhouette") resumen_k_optimo$Best.nc sum(resumen_k_optimo$Best.nc[1,]==2) sum(resumen_k_optimo$Best.nc[1,]==3) sum(resumen_k_optimo$Best.nc[1,]==4) sum(resumen_k_optimo$Best.nc[1,]==5) sum(resumen_k_optimo$Best.nc[1,]==6) sum(resumen_k_optimo$Best.nc[1,]==7) sum(resumen_k_optimo$Best.nc[1,]==8) sum(resumen_k_optimo$Best.nc[1,]==9) sum(resumen_k_optimo$Best.nc[1,]==10) #################################################################### HEATMAPS ############################ Es la combinación de un dendrograma con la matriz de datos, cambiando los números de la matriz por colores. Cuanto más parecidos son dos individuos en determinada variable, más parecidos deberían ser los correspondientes colores a lo largo de toda la fila. Cuanto más fuerte el color, más pequeño el valor de la variable (aunque esto no es relevante). Ver por ejemplo arrestos[28,]##Nevada arrestos[29,]##New Hampshire heatmap(x = arrestos, scale = "none", distfun = function(x){dist(x, method = "euclidean")}, hclustfun = function(x){hclust(x, method = "ward.D2")}, cexRow = 0.9)