%% Soluzione rng(100) n=300; mu=[0;0]; rho=0.9; R= [1 rho;rho 1]; X = mvnrnd(mu,R,n); %% Mostrare il diagramma di dispersione tra le 300 osservazioni bivariate % che sono state generate scatter(X(:,1),X(:,2)) %% Calcolo della distanza Euclidea e di Mahalanobis con i diversi metodi % Utilizzare sia l'implementazione manuale tramite ciclo for, sia % l'implementazione che utilizza la funzione mahal, oppure quella che % utilizza la funzione mahalFS dell'FSDA toolbox. % Calcolo del centroide cent=mean(X); % Calcolare la distanza Euclidea al quadrato di ogni riga dal centroide % (media aritmetica) d2_Euclidean = sum((X-cent).^2,2); % Calcolare la distanza di Mahalanobis (al quadrato) di ogni unità dal % centroide (tramite funzione mahal). d2_mahal = mahal(X,X); % Implementazione manuale della distanza di Mahalanobis tramite ciclo for d2_mahalmanual=zeros(n,1); S=cov(X); invS=inv(S); for i=1:n d2_mahalmanual(i)=(X(i,:)-cent)*invS*((X(i,:)-cent)'); %#ok end % Implementazione utilizzando la funzione mahalFS dell'FSDA toolbox ds_mahalFSDA=mahalFS(X,cent,S); %% Grafici a bolle (bubblechart) subplot(1,2,1) bubblechart(X(:,1),X(:,2),d2_Euclidean) title('Grafico a bolle (ampiezza delle bolle=distanza Euclidea') xlabel('X1') xlabel('X2') axis equal subplot(1,2,2) bubblechart(X(:,1),X(:,2),ds_mahalFSDA) title('Grafico a bolle (ampiezza delle bolle=distanza Mahalanobis') axis equal xlabel('X1') xlabel('X2') %% Costruire un diagramma di dispersione delle due variabili presenti dentro % la matrice X tramite la funzione scatter in cui il colore dei punti % dipende dal valore della distanza Euclidea. Impostare come ampiezza dei % cerchi il valore 50 e l'opzione 'filled' Aggiungere al grafico una % colorbar. Aggiungere alla colorbar la label % 'Distanza Euclidea' % (selezionare una colormap a piacere). Esplorare la colormap (impostandola % ad esempio su winter o summer. Quali osservazioni presentano la più % grande distanza Euclidea dal centroide? % Il quarto argomento di scatter è il colore. In questo caso il colore % dipende dal valore della corrispondente distanza scatter(X(:,1),X(:,2),50,d2_Euclidean,'o','filled') hb = colorbar; ylabel(hb,'Distanza Euclidea') % colorbar('Direction','reverse') % colormap winter % colormap summer % colormap jet % Le osservazioni che presentano la più grande distanza Euclidea sono % quelle in basso a sinistra e quelle in alto a destra. %% Costruire un diagramma di dispersione delle due variabili presenti dentro % la matrice X tramite la funzione scatter in cui il colore dei punti % dipende dal valore della distanza di Mahalanobis. Impostare come ampiezza % dei cerchi il valore 50 e l'opzione 'filled' Aggiungere al grafico una % colorbar. Aggiungere alla colorbar la label % 'Distanza di Mahalanobis' % (selezionare una colormap a piacere) Esplorare la colormap (impostandola % ad esempio su winter o summer. % Quali osservazioni presentano la più grande distanza di Mahalanobis dal % centroide? % Il quarto argomento di scatter è il colore. In questo caso il colore % dipende dal valore della corrispondente distanza scatter(X(:,1),X(:,2),50,d2_mahal,'o','filled') xlabel('X1') xlabel('X2') hb = colorbar; ylabel(hb,'Distanza di Mahalanobis') % Le unità con la più grande distanza di Mahalanobis sono quelle che si % trovano nella direzione opposta rispetto a quella di massima variabilità. %% Aggiungere alla matrice X i 4 punti di coordinate % (3 3) % (3 -3) % (-3 -3) % (-3 3) % Che distanze Euclidee e di Mahalanobis % hanno questi 4 punti dall'origine? % Chiamare la nuova matrice X1 % Per il calcolo delle distanze utilizzare il centroide e la matrice di % covarianze calcolate in precedenza % Rappresentare graficamente in due pannelli distinti le distanze Euclidee % e di Mahalanobis dei 304 punti dal centroide a=3; X1=[X; a a; a -a; -a -a; -a a]; %% Confronto tra distanza Euclidea e distanza di Mahalanobis subplot(1,2,1) % Implementazione utilizzando la funzione mahalFS dell'FSDA toolbox d2_Euclidean = sum((X1-cent).^2,2); % Rappresentazionne distanze Euclidee scatter(X1(:,1),X1(:,2),50,d2_Euclidean,'o','filled') hb = colorbar; ylabel(hb,'Distanza Euclidea') axis square % I 4 punti hanno tutti la stessa distanza Euclidea. subplot(1,2,2) ds_mahal=mahalFS(X1,cent,S); % Rappresentazionne distanze Euclidee scatter(X1(:,1),X1(:,2),50,ds_mahal,'o','filled') hb = colorbar; ylabel(hb,'Distanza di Mahalanobis') axis square % I due punti con coordinate (3,-3) e (-3, 3) presentano una distanza % molto più grande in quanto si collocano nella direzione opposta a quella % di massima variabilità