---
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")

```


