% Generare 300 realizzazioni casuali dalla distribuzione normale bivariata % con il seguente centroide % mu=[0 0]; % e la seguente matrice di correlazione % rho=0.9 % R= [1 rho;rho 1] % Per garantire la replicabilità dei risultati utilizzare il seed % rng(100). % Suggerimento: utilizzare la funzione mvnrnd % Chiamare la matrice contenente le 300 realizzazioni X % Mostrare il diagramma di dispersione tra le 300 osservazioni bivariate % che sono state generate % % Costruire un diagramma di dispersione in cui il colore dei punti % dipende dal valore della distanza Euclidea % Aggiungere al grafico una colorbar (colormap). Aggiungere alla colorbar % la label % 'Distanza Euclidea' % Esplorare la colormap (impostandola ad esempio su winter o summer. % Ripetere il grafico precedente con la distanza di Mahalanobis % % Aggiungere alla matrice X i 4 punti di coordinate % (2 2) % (2 -2) % (-2 -2) % (-2 2) % 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 % Commentare i risultati %% 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 Euclide e di Mahalanobis con i diversi methodi % 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); %% 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 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_mahal,'o','filled') hb = colorbar; ylabel(hb,'Distanza di Mahalanobis') %% Confronto tra distanza Euclidea e distanza di Mahalanobis % Aggiungere alla matrice X i 4 punti di coordinate % (2 2) % (2 -2) % (-2 -2) % (-2 2) % 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=2; X1=[X; a a; a -a; -a -a; -a a]; 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 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