%% Testo
% 1) Caricare i dati presenti nel file di Excel conadR.xlsx.
% 2) Calcolare e commentare la matrice di correlazione ed i relativi pvalue del test H_0 :\rho =0. Mostrare la matrice di correlazione e la matrice dei p-values in formato table.
% 3) Calcolare manualmente la matrice dei p-values
% 4) Verificare empiricamente la distribuzione T di student con n-2 gradi di libertà del test sul coefficiente di correlazione lineare confrontando i quantili empirici e quelli teorici. Utilizzare 100000 simulazioni ed un valore di n a piacere.
% Utilizzare i quantili che seguono.
% quant=[0.01 0.05 0.10:0.1:0.9 0.95 0.99 0.999];
% Costruire un grafico a dispersione che contiene sull'asse delle ascisse i quantili empirici e sull'asse delle ordinate i quantili teorici
% 5) Rappresentare graficamente la soglia oltre il quale il valore di rxy è ritenuto significativo al livello del 5% in funzione della numerosità campionaria
%% Soluzione.
%% Carico i dati del file conadR.xlsx dentro MATLAB
% 1) Caricare i dati presenti nel file di Excel conadR.xlsx.

[X,nomi] = xlsread('conadR.xlsx','dati','A1:D509');

%
%% Calcolo della matrice di correlazione e dei p-values del test
% 2) Calcolare e commentare la matrice di correlazione ed i relativi pvalue del test H_0 :\rho =0. Mostrare la matrice di correlazione e la matrice dei p-values in formato table.

[R,Pval]=corr(X);
disp('Matrice   di correlazione')
disp(R)
array2table(R,'RowNames',nomi,'VariableNames',nomi)


disp('Matrice dei p-values')
disp(Pval)
% Matrice dei coefficienti di correlazione in formato table
nomi{2}='eta';
disp('Matrice dei coefficienti di correlazione')
disp(array2table(R,'VariableNames',nomi,'RowNames',nomi))

disp('Matrice dei pvalues')
disp(array2table(Pval,'VariableNames',nomi,'RowNames',nomi))

% Commento: al livello di significatività del 5% tutte le correlazioni sono
% significative (i p values sono tutti inferiori a 0.05).
% Da segnalare che il pvalue relativo all'assenza di relazione tra spesa e
% umero di visite è virtualmente pari a 0 (8.5999e-170). Rifiutiamo
% decisamente l'ipotesi nulla di assenza di relazione tra numero di visite
% al supermercato e ammontare della spesa effettuata.

%
%% Calcolo manuale della matrice dei p-values
% 3) Calcolare manualmente 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)))

%
%% Verifica empirica della distribuzione T di student con n-2 gdl
% 4) Verificare empiricamente la distribuzione T di student con n-2 gradi di libertà del test sul coefficiente di correlazione lineare confrontando i quantili empirici e quelli teorici. Utilizzare 100000 simulazioni ed un valore di n a piacere.
% Utilizzare i quantili che seguono.
% quant=[0.01 0.05 0.10:0.1:0.9 0.95 0.99 0.999];
% Costruire un grafico a dispersione che contiene sull'asse delle ascisse i quantili empirici e sull'asse delle ordinate i quantili teorici

n=10;
nsimul=100000;
% Test = vettore di dimensione 100000x1 che conterrà in posizione i il test
% sul coefficiente di correlazione basato sulla simulatione i
Test=zeros(nsimul,1);
for i=1:nsimul
    % Per ogni simulazione vengono generate due variabili indipendenti di
    % dimensione nx1
    X=randn(n,2);
    [R]=corr(X);
    R=R(1,2);
    % Inserisci il valore del test per la simulazione i nella riga i del vettore Test
    Test(i)=(R/sqrt(1-R^2))*sqrt(n-2);
end
% Valori ordinati
Testsor=sort(Test);
quant=[0.01 0.05 0.10:0.1:0.9 0.95 0.99 0.999]';
% Calcolo dei quantili empirici
Empirici=Testsor(round(nsimul*quant));
% Calcolo dei quantili teorici utilizzando la T di student con (n-2) gradi
% di libertà
Teorici=tinv(quant,n-2);
disp('Confronto tra quantili empirici e quantili teorici')
disp([quant Empirici Teorici]);

% Confronto tra quantili empirici e quantili teorici in maniera grafica
plot(Empirici,Teorici,'o')
xlabel('Quantili empirici')
ylabel('Quantili teorici')

% quantili ottenuti tramite la funzione prctile
% plot(prctile(Test,100*quant),Teorici,'o')

%
%% Valore soglia per la significatività di r al variare di n
% 5) Rappresentare graficamente la soglia oltre il quale il valore di rxy è ritenuto significativo al livello del 5% in funzione della numerosità campionaria

nn=5:1000;
tinvalpha2=(tinv(0.975,nn-2)).^2;
soglia=sqrt(tinvalpha2./(nn-2+tinvalpha2));
plot(nn,soglia)
ylabel('Valore soglia per la significatività di r al 5%')
xlabel('Numerosità campionaria')