%% Analisi dei pattern dei missing values % 1) Caricare in memoria i dati presenti nel foglio tagliatelle del file % mdpattern.xlsx. Attraverso la chiamata alla funzione mdpattern commentare % il grafico prodotto. % 2) Caricare in memoria i dati presenti nel foglio Sleep del file % mdpattern.xlsx. % 2a) Attraverso la chiamata alla funzione mdpattern commentare il grafico % prodotto. % 2b) Chiamare la funzione mdpattern con l'opzione plots false e % dispresults true. % 3) Caricare in memoria i dati presenti nel foglio Finance del file % mdpattern.xlsx. % Individuare l'eventuale presenza di pattern nei missing values % 3a) Commentare il numero degli outliers trovati in questo dataset e quello % atteso nel caso di distribuzione normale. Confrontare le percentuali nei % due casi con un grafico a barre (inserire una linea orizzontale nel % grafico a barre in corrispondeza della percentuale teorica). Aggiungere % al grafico la legenda. % 3b) Calcolare e commentare gli indici di curtosi. % 3c) Generare 10000 numeri dalla distribuzione normale standardizzata (per % replicabilità dei risultati utilizzare il seed 3456). % 3d) Confrontare i 10 boxplot riferiti alle 10 variabili con il boxplot dei % 10000 numeri appena generati. Commentare i risultati ottenuti. %% mdpattern con il dataset Tagliatelle % Caricare in memoria i dati presenti nel foglio Tagliatelle. X=readtable("mdpattern.xlsx","Sheet","Tagliatelle","Range","A1:C41"); [MispatT,tMisAndOutT]=mdpattern(X); % Le righe senza missing sono 23. % Nessuna riga presenta più di un missing value. % Rotte ha 10 missing e ceneri 7 %% mdpattern con il dataset Sleep X=readtable('mdpattern.xlsx','Sheet','Sleep','ReadRowNames',true,'Range','A1:K63'); % 2a) Attraverso la chiamata alla funzione mdpattern commentare il grafico % prodotto. [MispatS,tMisAndOutS]=mdpattern(X); % I missing pattern sono associati prevalentemente alla suddivisione tra % sonno REM (Dream) e non REM (NonD). % Le variabili Dream e NonD sono quelle con il maggior numero di missing. % In tre casi il tempo di gestazione è l'unico missing value di riga. % In un caso il tempo di gestazione è missing insime a SPAN %% Opzione 'dispresults',true e plots false % 2b) Chiamare la funzione mdpattern con l'opzione plots false e % dispresults true. close all [~,~]=mdpattern(X,'dispresults',true,'plots',false); % Se non mi interessano gli argomenti di output inserisco al loro posto il % simbolo ~. Un modo alternativo era quello di chiamare la funzione senza % argomenti di output come segue % mdpattern(X,'dispresults',true,'plots',false); %% mdpattern con il dataset Finance X=readtable('mdpattern.xlsx','Sheet','Finance','ReadRowNames',true,'Range','A1:K10001'); n=size(X,1); [MispatF,tMisAndOutF]=mdpattern(X); % In quasi 300 casi i dati le variabili 3,5 e 7 mancano simultaneamente. % In 116 casi non sono presente i dati delle variabili 2,10, 5 e 7. % 4 casi contengono valori mancanti nelle 7 variabili menzionate sopra. % Le variabili 1 4 6 e 8 non presentano missing. % Le righe complete sono 9584 %% Analisi della normalità delle distribuzioni % 3a) Commentare il numero degli outliers trovati in questo dataset e quello % atteso nel caso di distribuzione normale. Confrontare le percentuali nei % due casi con un grafico a barre (inserire una linea orizzontale nel % grafico a barre in corrispondeza della percentuale teorica). Aggiungere % al grafico la legenda. % La regola del boxplot x075+1.5*DI equivale a % lasciare fuori in presenza di una distribuzione normale una frazione dei % valori pari a circa 0.007 (7 per mille circa) % Il punto di troncamento superiore in una distribuzione N(0,1) è Ptsup=norminv(0.75)+1.5*(norminv(0.75)-norminv(0.25)); % FracTheoOutsideBoxplot è la proporzione di osservazioni che si collocano % al di fuori dei punti di troncamento in una distribuzione normale % standardizzata. FracTheoOutsideBoxplot=normcdf(Ptsup,'upper')*2; disp('Frazione di punti dichiarati outliers in N(0,1)') disp(FracTheoOutsideBoxplot) % Ci attendiamo quindi in presenza di 10000 osservazioni se i dati sono % distribuiti in maniera normale di avere una frazione di punti dichiarati % outliers pari a 10000*0.007=70; % FracEmpOutsideBoxplot è la frazione dei punti dichiarati outliers nelle % 10 variabili in esame FracEmpOutsideBoxplot=(tMisAndOutF.outSup+tMisAndOutF.outInf)/n; % Confronto tra la percentuale di valori anomali teorica in presenza di % distribuzione normale e percentuali empiriche figure bar(FracEmpOutsideBoxplot*100) refline(0,100*FracTheoOutsideBoxplot) % Conclusione: la percentuale di valori anomali effettiva in ogni variabile % è molto superiore a quella attesa. %% Calcolare e commentare gli indici di curtosi. % 3b) Calcolare e commentare gli indici di curtosi. % Analisi degli indici di curtosi disp('Indici di curtosi') disp(kurtosis(X{:,:})) % Commento: la curtosi attesa in presenza di distribuzione normale è pari a % 3. Le curtosi campionarie sono tutte molto superiori a 3. %% Generazione di 10000 numeri casuali da N(0,1) % 3c) Generare 10000 numeri dalla distribuzione normale standardizzata (per % replicabilità dei risultati utilizzare il seed 3456). rng(3456) xsim=randn(10000,1); %% Confronto boxplots % 3d) Confrontare i 10 boxplot riferiti alle 10 variabili con il boxplot dei % 10000 numeri appena generati. Commentare i risultati ottenuti. % Label è il vettore riga di lunghezza 11 che contiene i nomi delle 10 % variabili e l'etichetta N(0,1) per la variabile xsim (dati simulati) Labels=[X.Properties.VariableNames 'N(0,1)']; boxplot([X{:,:} xsim],'Labels',Labels); % p = numero di variabili p=size(X,2); % Aggiungo al grafico (per fare il "fighetto") una linea verticale con % coordinate x: p+0.5 line([p+.5,p+.5],ylim) title('Confronto tra i boxplot delle 10 variabili con quello di dati simulati da N(0,1)')