% Importazione dei dati dentro MATLAB

X = readtable("TAGLIAT40.xlsx", 'Sheet','Dati','range','A1:C41','ReadRowNames',false);
% L'opzione ReadRowNames è impostata su false in quanto il
% dataset non contiene i nomi delle righe. In alternativa, dato che il
% default di 'ReadRowNames' è false potevo omettere questa opzione.

% Mostro la table X che è stata caricata dentro MATLAB
% In corrispondenza dei valori mancanti MATLAB scrive NaN (NaN=Not a
% number)
disp(X)

%
% Rimozione listwise tramite la funzione rmmissing

% il secondo argomento di rmmissing 
% specifica se operare sulle righe oppure
% sulle colonne 
% 1= opera sulle righe 2=opera sulle colonne
% L'input di rmmissing può essere una table di conseguenza non è necessario
% trasformare preliminarmente X in un array 2D
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 sulla
% matrice Xnomiss che effettua l'esclusione listwise
[R,Pval]=corr(Xnomiss{:,:});
disp('Matrice di correlazione')
disp(R)
disp('Matrice dei p-values')
disp(Pval)

% In alternativa, senza passare attraverso la funzione rmmissing, si può chiamare direttamente la funzione corr con l'opzione rows.
% 'rows','complete' effettua l'esclusione listwise
% 'rows','pairwise' effettua l'esclusione pairwise


[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 eliminazione listwise')
disp(Rlistwise)
disp('Matrice di correlazione dopo eliminazione pairwise')
disp(Rpairwise)


% Mostro le matrici di correlazione con le intestazioni

% Trasformo le matrici di double covX e corY in table aggiungendo le
% etichette di riga e di colonna
Rlistwisetable=array2table(Rlistwise,"RowNames",X.Properties.VariableNames,"VariableNames",X.Properties.VariableNames);
Rpairwisetable=array2table(Rpairwise,"RowNames",X.Properties.VariableNames,"VariableNames",X.Properties.VariableNames);

disp('Matrice di correlazione con intestazioni (esclusione listwise)')
disp(Rlistwisetable)
disp('Matrice di correlazione con intestazioni (esclusione pairwise)')
disp(Rpairwisetable)

% In alternativa l'esclusione può essere fatta in maniera interattiva tramite l'apposita app Clean Missing Data
%

% Remove missing data
[cleanedData,missingIndices] = rmmissing(X.rotte);

% Display results
clf
plot(find(~missingIndices),cleanedData,'Color',[0 114 189]/255,'LineWidth',1.5,...
    'DisplayName','Cleaned data')
hold on

% Plot removed missing entries
x2 = repelem(find(missingIndices),3);
y2 = repmat([ylim(gca) NaN]',nnz(missingIndices),1);
plot(x2,y2,'Color',[145 145 145]/255,'DisplayName','Removed missing entries')
title(['Number of removed missing entries: ' num2str(nnz(missingIndices))])

hold off
legend
clear x2 y2

%