%% LABORATORIO 2 METODI STATISTICI PER LA BIOINGEGNERIA close all; clearvars; clc; %% ESERCIZIO 1 % 1. Load data of Lab2 load( "data_ELSA.mat") % 2. Controllare la bonta' del dataset: verificare la presenza di % - NotANumber % - Infinite % - Valori negativi (di norma non fisiologici e quindi e' buona norma verificarne la presenza e considerare attentamente se eliminarli) % N.B. per avere una visione d'insieme controlliamo la tabella in toto, ma % di norma si effettuano queste valutazioni a livello di singola variabile NaN_val=isnan(elsa(:)); num_NaN_data=sum(NaN_val(:)); % alternativa con l'utilizzo di find NaN_val=find(isnan(elsa(:))); num_NaN_data=length(NaN_val); Inf_val=isinf(elsa(:)); num_Inf_data=sum(Inf_val(:)); Neg_val=elsa(:)<0; num_Neg_data=sum(Neg_val(:)); disp(['Sono presenti ' num2str(num_NaN_data) ' NaN, ' num2str(num_Inf_data) ' Inf e ' num2str(num_Neg_data) ' valori negativi']) disp(' ') % 4. Calcolare media, moda e varianza di tutte le variabilie mostrarli a video disp(['Media delle variabili originali: [' num2str(mean(elsa)) ']']) disp(['Mediana delle variabili originali: [' num2str(median(elsa)) ']']) disp(['Varianza delle variabili originali: [' num2str(var(elsa)) ']']) disp(' ') %% ESERCIZIO 2 % Calcolare la percentuale di NaN per ogni variabile sum_Nan = sum(isnan(elsa)); perc_NaN = sum_Nan/size(elsa,1)*100; % Visualizzare la percentage di NaN calcolata al punto precedente per % eta' e glucosio nel sangue (age, gluc) disp(['La variabile ' elsa_labels{1} ' contiene ' num2str(perc_NaN(1),2) '% di NaN']); disp(['La variable ' elsa_labels{9} ' contiene ' num2str(perc_NaN(9),2) '% di NaN']); % Eliminare le variabili con il 20% di valori NaN (chiamati anche valori mancanti) ind_column_to_delete = find(perc_NaN>=20); % trovo l'indice delle colonne che hanno almeno il 20% di NaN e le elimino elsa(:, ind_column_to_delete) = []; % copiamo la variabile elsa_labels in una nuova variabile, per non % sovarscriverla elsa_labels_final = elsa_labels; elsa_labels_final(ind_column_to_delete) = []; %[BONUS] crea variabile di backup per ELSA prima di pulire i soggetti elsa_bk = elsa; % CONTROL PATIENTS % Eliminare i pazienti con almeno una variabile NaN to_delete_pat_NaN = any(isnan(elsa_bk),2); elsa_bk(to_delete_pat_NaN,:) = []; % Eliminare i pazienti con almeno una variabile inf to_delete_pat_Inf = any(isinf(elsa_bk),2); elsa_bk(to_delete_pat_Inf,:) = []; % Eliminare i pazienti che presentano variabili con numeri negativi (N.B. % controllare il significato delle variabili) to_delete_pat_Neg = any(elsa_bk<0,2); elsa_bk(to_delete_pat_Neg,:) = []; % Cardinalita' dell'insieme dei soggetti e delle variabili rimasti disp(['Dopo la pulizia (NaN-Inf-Neg) sono rimasti: ' num2str(size(elsa_bk,1)) ' soggetti e ' num2str(size(elsa_bk,2)) ' variabili']) % Media e mediana delle variabili e dei soggetti rimanenti dopo la pulizia disp(['Media: [' num2str(mean(elsa_bk)) ']']) disp(['Mediana: [' num2str(median(elsa_bk)) ']']) % [BONUS] Rimpiazzo con la mediana dei dati mancanti for i = 1:size(elsa,2) curr_variable = elsa(:,i); curr_variable(isnan(curr_variable) | isinf(curr_variable)) = nanmedian(curr_variable); elsa(:,i) = curr_variable; end disp(['Media con rimpiazzo: [' num2str(mean(elsa)) ']']) disp(['Median con rimpiazzo: [' num2str(median(elsa)) ']']) disp(' ') % % [BONUS] Rimpiazzare i valori negativi con valori pari a 0 elsa(elsa<0)=0; % uguale a data(data<0)=0; % % PER CASA: % Per ogni variabile di elsa plottare: % 1) l'istogramma normalizzato con la modalita' Densita' di Probabilita' : pdf % 2) Plottare sovrapposta la stima della pdf ottenuta con il ksdensity % 3) Eseguire il lillefors-test per verificare che la variabile sia % gaussiana (funzione lillietest), indicare se il test rifiuta l'ipotesi % nulla H0: i dati contenuti nella variabile i-esima di ELSA appartengono a % una distribuzione normale