% Importazione dei dati dentro MATLAB

X = readtable("CONAD.xlsx", 'Sheet','dati','range','A1:D509','ReadRowNames',false,'PreserveVariableNames',true);
% L'opzione ReadRowNames è impostata su false in quanto questo
% dataset non contiene i nomi delle righe
% Durante il caricamento dei dati MATLAB produce un warning che ci avvisa che i nomi delle variabili sono stati cambiati 
% (i nomi delle variabili non possono contenere caratteri speciali) 
% Se volevo forzare MATLAB a non modificare i nomi delle colonne dovevo
% utilizzare l'istruzione
% X = readtable("CONADR.xlsx", 'Sheet','dati','range','A1:D509','ReadRowNames',false,'PreserveVariableNames',true);

% Mostro le prime 20 righe della table X
disp(X(1:20,:))

%
% Calcolo della matrice di covarianze e correlazione

% Estraggo nella matrice Xdouble i numeri contenuti nella table X
Xdouble=X{:,:};
% Calcolo matrice di covarianze (utilizzo la funzione cov)
covX=cov(Xdouble);
% Calcolo matrice di correlazione (utilizzo la funzione corr)
corX=corr(Xdouble);

disp('Matrice di varianze e covarianze senza nomi delle righe e delle colonne')
disp(covX)

disp('Matrice correlazione senza nomi delle righe e delle colonne')
disp(corX)

% Mostro le matrici di covarianze e correlazione con le intestazioni

% Trasformo le matrici di double covX e corY in table aggiungendo le
% etichette di riga e di colonna
covXtable=array2table(covX,"RowNames",X.Properties.VariableNames,"VariableNames",X.Properties.VariableNames);
corXtable=array2table(corX,"RowNames",X.Properties.VariableNames,"VariableNames",X.Properties.VariableNames);

disp('Matrice di covarianze con intestazioni')
disp(covXtable)
disp('Matrice di correlazione con intestazioni')
disp(corXtable)

%
% Diagramma di dispersione tra le variabili visite (asse x) e spesa (asse y) aggiungendo come etichette dei punti il "numero di componenti".

plot(X{:,"visite"},X{:,"spesa"},'o')
text(X{:,"visite"},X{:,"spesa"},num2str(X{:,'componenti'}))
xlabel('Numero di visite')
ylabel('Ammontare di spesa effettuato')

%
% Costruzione delle matrici dei diagrammi di dispersione
% Utilizzo la funzione spmplot di FSDA toolbox

spmplot(X);

%
% Matrice dei diagrammi di dispersione con i boxplot sulla diagonale principale

figure
spmplot(X,'dispopt','box');

% CALCOLO MATRICE DI CORRELAZIONE E MATRICE DEI P-VALUE

% Calcolo matrice correlazione e p-values
% Per avere anche la matrice dei p-values la funzione corr deve essere
% chiamata con 2 argomenti di output
[R,Pval]=corr(Xdouble);

% Di seguito calcolo manualemnte la matrice dei p-values
% n= sample size
[n,p]=size(X);
% Calcolo del test per ogni coppia di variabili
Testt=(R./sqrt(1-R.^2))*sqrt(n-2);

% Calcolo dei relativi p-values
% Moltiplico l'area della coda di destra per 2 poiché l'ipotesi alternativa
% è bilaterale
Pval1=tcdf(abs(Testt),n-2,'upper')*2;
% Aggiungo i valori 1 sulla diagonale principale della matrice Pval1
Pvalchk=Pval1 +eye(p);
% Controllo che il massimo delle differenze in valore assoluto tra le due
% implementazioni sia pari ad un numero vicino a zero 
max(max(abs(Pval-Pvalchk)))

%% Esercizio aggiuntivo
% In un campione bivariato di 12 pezzi da un processo produttivo il
% coefficiente di correlazione è risultato pari a 0.54.
% Verificare che il p-value teorico del test (nell'ipotesi di ipotesi
% alternativa bilateale) è pari a 0.0699.
% Se invece di un solo campione di 12 pezzi noi disponessimo di 100000
% campioni di 12 pezzi, se è vera l'ipotesi nulla di assenza di
% correlazione tra le due variabili su quanti campioni ci aspettiamo di un
% ottenere un valore del coefficiente di correlazione superiore a 0.54 in
% modulo?
n=12;
r=0.54;
testR=sqrt(n-2)*r/sqrt(1-r^2);
pvalTeorico=tcdf(testR,n-2,'upper')*2;
% Se avessimo potuto disporre invece di un solo campione di 12 pezzi di
% 100000 campioni di 12 pezzi la frequenza relativa di campioni in cui il
% coefficiente di correlazione lineare sarebbe risultato superiore di 0.54
% in modulo sarebbe stata del 7 per cento circa.

%