%% Testo % % 1) Caricare i dati presenti nel file tagliatelle.xlsx. Importare i dati % in una matrice denominata X. % % 2) Contare il numero dei valori mancanti per ogni colonna. Contare il % numero di righe con valori mancanti % % 3) Rimuovere in maniera listwise i valori mancanti. Sulla matrice % risultatante calcolare le correlazioni ed i reltivi p-values % % 4) Rimuovere dalla matrice X le colonne che hanno almeno 5 missing values. % % 5) Utilizzando la funzione nancov oppure la funzione cov sulla matrice X % originaria calcolare la matrice di covarianze sulle righe che non presentano valori mancanti. % Partendo dalla matrice di covarianza calcolare manualmente la matrice di % correlazione. % % 6) Utilizzando l'opzione 'rows' della funzione corr confrontare la % matrice di correlazione ottenuta tramite cancellazione listwise e % cancellazione pairwise dei dati mancanti. % % % 7) Costruire una table riassuntiva del numero di dati mancanti per ogni % colonna della matrice X e dell'eventuale presenza di valori anomali. % La table deve contenere le seguenti informaioni % rownames = nomi delle variabili % Colonna 1: conteggio dei valori non mancanti % Colonne 1-2 media e mediana sui dati non mancanti % Colonne 3-4 sigma e MAD riscalato sui dati non mancanti % Colonne 5-6: conteggio e percentuale di valori mancanti % Colonne 7-8 numero di valori estremi superiori ed inferiori (utilizzando % il criterio del boxplot). % Di seguito si riporta l'anteprima output della % table che si deve costruire. % % Media Mediana Devstd MAD Mancante_cont Mancante_perc estremiMin estremiMax % ______ _______ ________ ________ _____________ _____________ __________ __________ % % umidit 8.5265 8.5 0.55704 0.37065 0 0 2 1 % ceneri 1.0279 1.03 0.021325 0.029652 7 17.5 0 0 % rotte 10.1 9.5 4.1051 2.9652 10 25 0 2 % % % 8) Costruire i boxplot delle 3 variabili standardizzate in maniera % robusta e verificare che il numero di outliers nei 2 boxplots sia uguale % al numero trovato nella table al punto 7) %% Soluzione %% Caricamento dati % 1) Caricare i dati presenti nel file tagliatelle.xlsx. Importare i dati % in una matrice denominata X. % Carico i dati dentro MATLAB [X,nomi] = xlsread('tagliatelle.xlsx','dati','A1:C41'); %% TRATTAMENTO DEI DATI MANCANTI % 2) Contare il numero dei valori mancanti per ogni colonna. % isnan(X) restituisce una matrice booleana che contiene true in posizione % i,j se l'elemento i,j è mancante disp(nomi) disp(sum(isnan(X),1)) %% Contare il numero di righe con almeno un valore mancante % Osservazione: notare che in questo caso % la somma viene fatta per riga disp('Numero di righe con almeno un valore mancante') disp(sum(sum(isnan(X),2)>0)) %% Rimozione listwise dei valori mancanti % 3) Rimuovere in maniera listwise i valori mancanti. Sulla matrice % risultatante calcolare le correlazioni ed i reltivi p-values % il secondo argomento di rmmissing % specifica se operare sulle righe oppure % sulle colonne % 1= opera sulle righe 2=opera sulle colonne Xnomiss=rmmissing(X,1); [n,p]=size(Xnomiss); disp('Numero di righe senza missing values') disp(n) % Calcolo della matrice di correlazione e dei relativi p-values [R,Pval]=corr(Xnomiss); disp('Matrice di correlazione') disp(R) disp('Matrice dei p-values') disp(Pval) %% Rimuovere le colonne che hanno un certo numero di missing % 4) Rimuovere dalla matrice X le colonne che hanno almeno 5 missing % values. [Rred,TF] = rmmissing(X,2,'MinNumMissing',5); %% Matrice dei coefficienti di correlazione usando nancov e un ciclo % 5) Utilizzando la funzione nancov sulla matrice X calcolare la matrice % di covarianza. % Calcolo la matrice di covarianze escludendo le righe con almeno un valore % uguale a NaN covY = nancov(X); covYchk=cov(X,'omitrows'); %% Partendo dalla matrice di covarianza calcolare manualmente % la matrice di correlazione. % Rchk = matrice pxp di correlazione Rchk=zeros(p,p); for i=1:p for j=1:p Rchk(i,j)=covY(i,j)/sqrt(covY(i,i)*covY(j,j)); end end % Controllo che R e Rchk siano uguali disp('Il max delle differenze tra R e Rchk è pari a') disp(max(max(R-Rchk))) %% Calcolo della matrice di correlazione utilizzando l'opzione dentro corr % 6) Utilizzando l'opzione 'rows' della funzione corr confrontare la % matrice di correlazione ottenuta tramite cancellazione listwise e % cancellazione pairwise dei dati mancanti. [Rlistwise,Pvallistwise]=corr(X,'rows','complete'); [Rpairwise,Pvalpairwise]=corr(X,'rows','pairwise'); disp('Confronto tra le due matrici di correlazione') disp('Matrice di correlazione dopo dopo l''eliminazione listwise') disp(Rlistwise) disp('Matrice di correlazione dopo dopo l''eliminazione pairwise') disp(Rpairwise) % 7) Costruire una table riassuntiva del numero di dati mancanti per ogni % colonna della matrice X e dell'eventuale presenza di valori anomali. % La table deve contenere le seguenti informaioni % rownames = nomi delle variabili % Colonna 1: conteggio dei valori non mancanti % Colonne 1-2 media e mediana sui dati non mancanti % Colonne 3-4 sigma e MAD riscalato sui dati non mancanti % Colonne 5-6: conteggio e percentuale di valori mancanti % Colonne 7-8 numero di valori estremi superiori ed inferiori (utilizzando % il criterio del boxplot). % Di seguito si riporta l'anteprima output della % table che si deve costruire. % % Media Mediana Devstd MAD Mancante_cont Mancante_perc estremiMin estremiMax % ______ _______ ________ ________ _____________ _____________ __________ __________ % % umidit 8.5265 8.5 0.55704 0.37065 0 0 2 1 % ceneri 1.0279 1.03 0.021325 0.029652 7 17.5 0 0 % rotte 10.1 9.5 4.1051 2.9652 10 25 0 2 % % Inizializzazione dei vettori contenenti le variabili che mi interessano % nummiss1 = numero di valori mancanti per ogni colonna nummiss1=zeros(3,1); % mea= medie omettendo i missing values meas=nummiss1; mediane=meas; % sigmas = deviazioni standard omettendo i missing values sigmas=meas; mads=meas; % Outsup = outliers superiori Outsup=meas; % Outinf =outliers inferiori Outinf=meas; n=size(X,1); for j=1:3 Xj=X(:,j); nummiss1(j)=sum(ismissing(Xj)); meas(j)=mean(Xj,'omitnan'); mediane(j)=median(Xj,'omitnan'); sigmas(j)=std(Xj,'omitnan'); % Si noti che nel calcolo del MAD non si dice niente sui missing % values. Nell'help della funzione MAD si legge % MAD treats NaNs as missing values, and removes them. mads(j)=1.4826*mad(Xj,1); perc=prctile(Xj,[25 75]); PTsup=perc(2)+1.5*(perc(2)-perc(1)); PTinf=perc(1)-1.5*(perc(2)-perc(1)); Xjsenzamissing=Xj(~ismissing(Xj)); Outsup(j)=sum(Xjsenzamissing>PTsup); Outinf(j)=sum(Xjsenzamissing