%% Domanda 1

%% Domanda 1
% Costruire la matrice riportata di seguito
%      0     2     0     0     0     0
%      0     0     3     0     0     0
%      0     0     0     4     0     0
%      0     0     0     0     5     0
%      0     0     0     0     0     6
%      0     0     0     0     0     0
% Denominare questa matrice con le prime 3 lettere del proprio cognome
% (senza accenti)
% Mostrare la matrice tramite l'istruzione disp

% Soluzione
% Inserisco la seguenza 2:6 nella diagonale appena superiore a quella
% principale
RIA=diag(2:6,1);
disp(RIA);

%
%% Domanda 2

%% Domanda 2
% Caricare in memoria la table di dimensione 200x6 contenente le
% caratteristiche di 200 banconote Svizzere tramite l'istruzione
% load('swiss_banknotes');
% Le prime 100 righe si riferiscono a 100 banconote vere e le rimanenti 100
% righe si riferiscono a 100 banconote false.
% Calcolare e commentare l'indice di asimmetria per la terza variabile.
% Dopo aver standardizzato i dati, 
% 2) Rappresentare i dati tramite la matrice dei
% diagrammi di dispersione distinguendo tra banconote vere e banconote
% false.
% 3) Costruire il diagramma di dispersione tra la variabile 4 (asse x) e la
% variabile 6 (asse y) con l'aggiunta dei due boxplot ai margini del diagramma di
% dispersione. Inserire come titolo del grafico il proprio cognome ed il
% numero di matricola.

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;

%
%% 1) costruire il grafico a coordinate
% parallele utilizzando un colore diverso per le prime 100 osservazioni (righe). Creo la variabile di ragguppamento

group=ones(200,1);
group(101:200)=2;

% 1) costruire il grafico a coordinate
% parallele utilizzando un colore diverso per
% le prime 100 osservazioni (righe). 

% Modo 1: tramite chiamata a parallelplot
% aggiungo la variabile di raggruppamento alla table Xsttable 
Xsttable.group=group;
parallelplot(Xsttable,'GroupVariable',"group")

% Modo 2: tramite chiamata a parallelcoords
figure
parallelcoords(Xst,"Group",group)

% Commento: le banconote false tendono ad avere valori più grandi delle
% variabili in esame (ad eccezione della variabile diagonal_distance (variabile 6))


% 2) Rappresentare i dati tramite la matrice dei
% diagrammi di dispersione distinguendo tra banconote vere e banconote
% false.
figure
spmplot(Xsttable(:,1:6),group);

%
% % In alcuni diagrammi di dispersione I due gruppi di banconote sono abbastanza separati.
%
%% 3) Costruire il diagramma di dispersione
%  tra la variabile 4 (asse x) e la variabile 6 (asse y) con l'aggiunta dei due boxplot ai margini del diagramma di dispersione. Inserire come titolo del grafico il proprio cognome ed il numero di matricola.

figure
i=4; j=6;
scatterboxplot(Xst(:,i),Xst(:,j),'Group',group);
xlabel(Xsttable.Properties.VariableNames(i),'Interpreter','none')
ylabel(Xsttable.Properties.VariableNames(j),'Interpreter','none')
title("RIANI 051485")
% Nel testo dell'esercizio non si specificava se la funzione scatterboxplot doveva essere
% chiamata con o senza la variabile di raggruppamento.
% Di conseguenza andava bene anche la semplice istruzione 
% scatterboxplot(Xst(:,i),Xst(:,j)

%
%% Domanda 3

%% Domanda 3
% Data la seguente tabella di contingenza
% farmaco  \Effetto_terapia     si            forse   no
%   farmaco A                    136             149    115
%   farmaco B                    124             163    113
%   farmaco C                    134             147    119
%
% 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. Commentare
% il risultato del test.
% Effettuare l'analisi delle corrispondenze e commentare i
% risultati. Qual è il farmaco più efficace e quello meno efficace? 
N=100+[ 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 della relazione 
% 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