library(cluster) dat<-read.csv("food_spending.csv", header = TRUE) # PAM con k=2 gruppi sui dati contenuti in "dat", # distanza euclidea calcolata dopo # la standardizzazione delle variabili pam.out<-pam(dat, k=2, metric="euclidean", stand=TRUE) pam.out # se invece abbiamo le dissimilarità: # 1) dissimilarità "Diss1" (oggetto di tipo dist) # pam(Diss1, 2) # 2) matrice di dissimilarità "D" (nxn) # pam(D, 2, diss=TRUE) pam.out$medoids pam.out$id.med pam.out$clustering cbind(dat, pam.out$clustering) plot(dat, col=(pam.out$clustering+2), main="PAM (k=2)", pch=19) points(pam.out$medoids, pch=8) # clara() # indici per validare il clustering plot(pam.out, which=2) # asw plot(pam(dat, k=3, metric="euclidean", stand=TRUE), which=2) # asw # scelta di k attraverso l'indice silhouette min_nc<-2 max_nc<-10 ASW<-array(0, c(max_nc-min_nc+1, 2)) ASW[, 1]<-c(min_nc:max_nc) for(nc in min_nc:max_nc){ res<-pam(dat, nc, metric="euclidean", stand=TRUE) ASW[nc-min_nc+1 , 2]<-res$silinfo$avg.width } plot(2:10, ASW[,2], type="b") # esercizio data<-read.csv("claims.csv", header = TRUE) data str(data) # 1. codifica delle variabili categoriali # 2. calcolare una opportuna matrice di dissimilarità # 3. utilizzare pam() per implementare il metodo con k=2 # 4. selezione numero di gruppi # re-code factors data$litig<-as.factor(data$litig) data$soft_injury<-as.factor(data$soft_injury) data$emergency_tr<-as.factor(data$emergency_tr) # dissimil. di gower per dati misti # daisy() dclaims<-daisy(data, metric = "gower") str(dclaims) dissmatrix<-as.matrix(dclaims) # matrice delle dissimilarità dim(dissmatrix) pm.out<-pam(dissmatrix, 2, diss=TRUE) pm.out$clustering