

%% Esempio matrice delle distanze per 4 supermercati
% Data la matrice delle distanze che segue
%
% ottenuta partendo da 7 variabili standardizzate rilevate su 4 supermercati si costruisca e si rappresenti graficamente il dendrogramma utilizzando i metodi del "legame singolo", "legame completo" e "legame medio"
%% Esempio matrice delle distanze per 5 modelli di auto
% Data la seguente matrice delle distanze della città a blocchi riferita a 5 modelli di auto
%
% si costruisca e si rappresenti graficamente il dendrogramma utilizzando i metodi del "legame singolo" e "legame completo". Si effettui un opportuno taglio del dendrogramma in modo da individuare le unità che appartengono ai diversi gruppi
%
%% Esempio clustering con i dati della qualità della vita
% Caricare dentro MATLAB i dati della qualità della vita delle province Italiane (v. sezione sulle componenti principali). Dopo aver opportunamente trasformato i dati costruire il dendrogramma utilizzando il metodo del legame medio.
% Visualizzare il dendrogramma aggiungendo i nomi delle righe.
% Mostrare nel dendrogramma prima tutte le aggregazioni e poi le ultime 70 aggregazioni (utilizzando l'opzione 'Orientation','left').
% Tagliare il dendrogramma al valore soglia di distanza 3.5.
% Interpretare i gruppi che sono stati ottenuti rappresentando graficamente i dati tramite un diagramma di dispersione in cui i punti presentano un colore che dipende dal gruppo di appartenenza (suggerimento: utilizzare la funzione gscatter) e aggiungere al grafico le etichette del gruppo di appartenenza e del nome della provincia. Costruire il diagramma di dispersione prima con riferimento alle variabili 1 e 2 poi alle variabili 3 e 4 e successivamente alle variabili 5 e 6.
% Interpretare i risultati ottenuti.
%
%% Soluzione
%
% Vettore che contiene gli elementi sopra la diagonale principale della matrice delle distanze (v. slides)

distanze=[13.123 2.506 17.060 15.628 4.391 19.542];
labels={'1:A', '2:B', '3:C', '4:D'};

%
%% Clustering con il metodo del legame singolo e dendrogramma

out=linkage(distanze,'single');
% Osservazione: l'input di linkage può essere o la matrice dei dati oppure
% il vettore che n(n-1)/2 che contiene le distanze tra le n unità. In
% questo esempio l'input di linkage è il vettore delle distanze
dendrogram(out,'labels',labels);

%
%% Clustering con il metodo del legame completo e dendrogramma

out=linkage(distanze,'complete');
dendrogram(out,'labels',labels);

%
%% Clustering con il metodo del legame medio e dendrogramma

out=linkage(distanze,'average');
dendrogram(out,'labels',labels);

%
%% Esempio 5 modelli di auto
% Vettore che contiene gli elementi sopra la diagonale principale della matrice delle distanze (v. slides)

distanze=[10.842 3.384 2.888 9.146 13.777 12.646 6.356 2.137 12.081 10.950];
labels={'1:PUNTO', '2:BRAVO', '3:FIESTA', '4:CORSA', '5:GOLF'};

%
%% Clustering con il metodo del legame singolo e dendrogramma

out=linkage(distanze,'single');

dendrogram(out,'labels',labels);
figure
% taglio del dendrogramma
cutoff=8;
% per costruire un dendrogramma personalizzati con colori diversi a seconda
% della soglia
dendrogram(out,'ColorThreshold',cutoff,'labels',labels);
% taglio del dendrogramma
idx=cluster(out,'cutoff',cutoff,'Criterion','distance');

disp(idx)
% Commento le unità 1 3 e 4 (Punto, Fiesta e Corsa) formano un gruppo. Le
% altre due unità 2 e 5 (Bravo e Golf) formano un altro gruppo.

% Visualizzazione labels e gruppo di appartenenza
disp(strcat(num2str(idx),'--',labels'))

%
%% Clustering con il metodo del legame completo e dendrogramma

out=linkage(distanze,'complete');
dendrogram(out);

% taglio del dendrogramma
idx=cluster(out,'cutoff',cutoff,'Criterion','distance');

disp(idx)
% Commento le unità 1 3 e 4 (Punto, Fiesta e Corsa) formano un gruppo. Le
% altre due unità 2 e 5 (Bravo e Golf) formano un altro gruppo.

% Visualizzazione labels e gruppo di appartenenza
disp(strcat(num2str(idx),'--',labels'))

%
%% Esempio clustering con i dati della qualità della vita
%

% 1) Importare in formato table (utilizzare come nomi delle righe le
% province) i dati presenti nel file benessere.xlsx
Xtable=readtable('benessere.xlsx','ReadRowNames',true);
% X = matrice di double senza nomi delle righe e nomi delle colonne
X=table2array(Xtable);

% varalbs = cell che contiene i nomi delle variabili
varlabs=Xtable.Properties.VariableNames;
obslabs=Xtable.Properties.RowNames;
Z=zscore(X);

% Osservazione: questa volta l'input di linkage è la matrice dei dati
% (statndardizzata)
out=linkage(Z,'average');
dendrogram(out,'labels',obslabs);
% vengono mostrate per default solo le ultime 30 aggregazioni

% Per mostrare tutte le aggregazioni
dendrogram(out,0,'labels',obslabs);

% Per mostrare solo le ultime 70 aggregazioni
dendrogram(out,70,'labels',obslabs,'Orientation','left')

cutoff=3.5;
idx=cluster(out,'cutoff',cutoff,'Criterion','distance');
eti=strcat(num2str(idx),'--',obslabs)

% Interpretazione dei gruppi che sono stati trovati
i=1; 
j=2;
figure
gscatter(X(:,i),X(:,j),idx)
text(X(:,i),X(:,j),eti)
xlabel(varlabs(i))
ylabel(varlabs(j))

figure
i=3; 
j=4;
gscatter(X(:,i),X(:,j),idx)
text(X(:,i),X(:,j),eti)
xlabel(varlabs(i))
ylabel(varlabs(j))

figure
i=5; 
j=6;
gscatter(X(:,i),X(:,j),idx)
text(X(:,i),X(:,j),eti)
xlabel(varlabs(i))
ylabel(varlabs(j))