--- title: "Analisi di raggruppamento dei modelli di automobile" output: html_document: df_print: paged pdf_document: default --- Il file ``cars.csv`` presenta 10 variabili (numero di cilindri, dimensioni dei veicolo, indicatori di performance) di 53 modelli diversi di automobile. I dati possono essere importati con il seguente comando: ```{r} D <- read.csv("cars.csv", header = TRUE, row.names=1) ``` Otteniamo la dimensione del dataset, la media e la varianza di ciascuna variabile ```{r} dim(D) ``` ```{r} apply(D , 2, mean) ``` ```{r} apply(D , 2, var) ``` Si può utilizzare anche la funzione \texttt{summary()} ```{r} summary(D) ``` Standardizziamo le variabili attraverso la funzione \texttt{scale()} ```{r} D.sd<-scale(D) #head(D.sd) ``` Utilizziamo la funzione \texttt{agnes()} del pacchetto *cluster* per effettuare una analisi di clustering gerarchico basata sulla distanza Euclidea e diversi linkages ```{r, fig.width=7, fig.height=6} library(cluster) eu.dist<-dist(D.sd) hc.sing<-agnes(eu.dist, method="single") pltree(hc.sing, cex=0.8, hang = -1, main="SL") hc.ave<-agnes(eu.dist, method="average") pltree(hc.ave, cex=0.8, hang = -1, main="AL") hc.com<-agnes(eu.dist, method="complete") pltree(hc.com, cex=0.8, hang = -1, main="CL") ``` Utilizziamo anche il metodo di Ward ```{r, fig.width=7, fig.height=6} hc.ward<-agnes(D.sd, method="ward") pltree(hc.ward, cex=0.8, hang = -1, main="Ward") ``` Dall'ultimo dendrogramma ottenuto si potrebbero ricavare due partizioni, con 3 e 5 gruppi, rispettivamente: ```{r, fig.width=7, fig.height=6} pltree(hc.ward, cex=0.8, hang = -1, main="Ward") rect.hclust(hc.ward, 3) cl3<-cutree(hc.ward, 3) ``` ```{r, fig.width=7, fig.height=6} pltree(hc.ward, cex=0.8, hang = -1, main="Ward") rect.hclust(hc.ward, 5) cl5<-cutree(hc.ward, 5) ``` Otteniamo la composizione del raggruppamento con K=3 ```{r} table(cl3) labels<-row.names(D) labels[cl3==1] labels[cl3==2] labels[cl3==3] ``` I cluster sono caratterizzati come segue: - un gruppo numeroso di city car, utilitarie e minivan - un gruppo di medie dimensioni di auto sportive, SUV e veicoli fuoristrada - un terzo gruppo più piccolo di auto di lusso Affinando la partizione e considerando 5 gruppi, si osserva che i due gruppi più eterogenei vengono ulteriormente suddivisi. Infine, utilizziamo la funzione \texttt{pam()} per eseguire l'algoritmo PAM con K=3 e K=5: ```{r} # PAM con K=3 gruppi pam.out3<-pam(D.sd,3) pam.out3$silinfo$avg.width pam.out3$medoids #D[pam.out3$id.med, ] ``` ```{r} # PAM con K=5 gruppi pam.out5<-pam(D.sd,5) pam.out5$silinfo$avg.width pam.out5$medoids #D[pam.out5$id.med, ] ``` Otteniamo il grafico della silhouette media: ```{r} par(mfrow=c(1,2)) plot(pam.out3, which=2, main=" ") plot(pam.out5, which=2, main=" ") ``` Per la partizione in 3 gruppi, aggiungiamo ai dati il vettore del clustering ```{r} D$Group <- as.factor(pam.out3$clustering) ``` Possiamo utilizzare dei box plots per descrivere la distribuzione di alcune variabili condizionando ai gruppi ottenuti ```{r} par(mfrow=c(2,2), mar=c(2,2,2,2)) plot(D$Group, D$pw, col=2:4, main="Power", xlab="cluster") plot(D$Group, D$speed, col=2:4, main="Max. Speed", xlab="cluster") plot(D$Group, D$acc, col=2:4, main="Acceleration", xlab="cluster") plot(D$Group, D$cons, col=2:4, main="Fuel Consumption", xlab="cluster") ```