%% Domanda 1
% Utilizzando il seed 1000 generare una matrice di dimensione 10x3 di numeri provenienti dalla distribuzione normale con media 5 e varianza 10. Denominare questa matrice con le prime 3 lettere del proprio cognome. Calcolare la distanza Euclidea e la distanza di Mahalanobis tra la riga 2 e la riga 9 di questa matrice. Mostrare i risultati tramite la funzione disp.

rng(1000)
RIA=sqrt(10)*randn(10,3)+5;
dM=squareform(pdist(RIA,"mahalanobis"));
dE=squareform(pdist(RIA,"euclidean"));
disp(['Distanza di Mahalanobis tra la riga due e la riga nove :' num2str(dM(2,9))])
disp(['Distanza Euclidea tra la riga due e la riga nove :' num2str(dE(2,9))])

%
%% Domanda 2
% Caricare in memoria la table di dimensione 200x6 contenente le caratteristiche di 200 banconote tramite l'istruzione load('swiss_banknotes'); Calcolare e commentare l'indice di asimmetria per la terza variabile. Dopo aver standardizzato i dati, applicare la cluster analysis utilizzando il metodo gerarchico del legame medio. Rappresentare il dendrogramma. Tagliare il dendrogramma in modo da formare 3 gruppi. Rappresentare graficamente l'allocazione delle unità ai 3 gruppi che sono stati ottenuti tramite la matrice dei diagrammi di dispersione.

load('swiss_banknotes');
Xtable=swiss_banknotes;
X=swiss_banknotes{:,:};
% Calcolare e commentare l'indice di asimmetria per la terza variabile.
disp("Indice di skewness per la terza variabile")
disp(skewness(X(:,3)))
% Commento: leggera asimmetria positiva

% Standardizzazione
% Xst matrice degli scostamenti standardizzati (formato array)
Xst=zscore(X);

% Xstable matrice degli scostamenti standardizzati (formato table)
Xsttable=Xtable;
Xsttable{:,:}=Xst;

% Dopo aver standardizzato i dati, applicare la cluster analysis utilizzando
% il metodo gerarchico del legame medio.
% Rappresentare il dendrogramma. Tagliare il dendrogramma in modo da
% formare 3 gruppi. Rappresentare graficamente l'allocazione delle unità ai
% 3 gruppi che sono stati
% ottenuti tramite la matrice dei diagrammi di dispersione.

out=linkage(Xst,'average');
dendrogram(out);
title('Dendrogramma basato sul metodo del legame medio')
ylabel('Livelli di distanza con cui avviene l''aggregazione')

% Taglio il dendrogramma in modo da formare 3 gruppi
idx=cluster(out,'Cutoff',4.3,'criterion','distance');
figure
spmplot(Xsttable,idx);
% Ovviamente questa classificazione non è ragionevole. Ci sono 198 unità
% che sono incluse in un gruppo e due unità rimanenti che vanno a formare
% i rimanenti due gruppi.

%
%% Domanda 3
%

%% Domanda 3
% Data la seguente tabella di contingenza
% farmaco  \Effetto_terapia     si            forse   no
%   farmaco A                    236             249    215
%   farmaco B                    224             263    213
%   farmaco C                    234             247    219
%
% Calcolare gli indici di associazione tra il tipo di farmaco e l'effetto
% della terapia. Commentare i risultati.
% Implementare manualmente il test Chi2 ed il relativo p-value.
% Confrontare il risultato con quello che si ottiene applicando la funzione
% corrNominal.m
% Effettuare l'analisi delle corrispondenze e commentare i
% risultati. Qual è il farmaco più efficace e quello meno efficace? 

N=200+[ 36             49    15
    24             63    13
   34             47    19];
Ntable=array2table(N,'RowNames',{'farmaco A' 'farmaco B' 'farmaco C'},...
    'VariableNames',{'si','forse','no'});
outCA=CorAna(Ntable);
out=corrNominal(Ntable);
% Tutti gli intervalli di confidenza dei diversi indici di associazione non
% risultano significativi (il loro intervallo di confidenza contiene il
% valore 0). Conclusione: non c'è alcuna evidenza statistica tra il tipo
% di farmaco e l'effetto della terapia. Il grafico di analisi delle
% corrispondenze mostra che i punti riga e colonna sono collocati vicino al
% centroide. 


% Valore del test Chi2 e relativo pval tramite la funzione corrNominal.
% Valore del test chi2 e p-value associato
disp(['Valore del test Chi2:' num2str(out.Chi2)])
disp(['pval del test Chi2:' num2str(out.Chi2pval)])


% Implementazione manuale indice Chi2 e pval
% Calcolo della tabella delle frequenze teoriche 
% sumc = frequenze marginali di colonna
sumc=sum(N,1);
% sumr = frequenze marginali di riga
sumr=sum(N,2);
n=sum(N,"all");
Ntheo=(sumr*sumc/n);

% Calcolo indice Chi2
Chi2=sum(((N-Ntheo).^2)./Ntheo,'all');

% Calcolo p-value della statistica di Pearson
% La statistica di Pearson si distribuisce come una v.c. Chi2 con (r-1)(c-1) 
% gradi di libertà. In questo esempio dato che r=c=3;
gdl=4;
pval=1-chi2cdf(Chi2,gdl);
disp('Implementazione manuale test chi2 e del relativo pvalue')
disp(['Valore del test Chi2:' num2str(Chi2)])
disp(['Il pvalue del test è: ' num2str(pval)])
% Commento: accetto l'ipotesi  nulla di assenza di relazione tra tipo di
% farmaco e effetto della terapia