%% TESTO
% Un’azienda che produce detersivi per lavatrice si rivolge ad un’agenzia pubblicitaria perché sviluppi una pubblicità per il proprio prodotto. Si decide di valutare l’effetto sui consumatori di cinque diversi messaggi pubblicitari.
% Nella pubblicità A non si accenna minimamente alle caratteristiche del prodotto, nella pubblicità B si accenna vagamente a tali caratteristiche, nelle pubblicità C e D le caratteristiche sono rispettivamente abbastanza e molto enfatizzate, mentre nella pubblicità E si tenta di descrivere onestamente quali sono le caratteristiche del prodotto.
% Si estraggono a caso 30 consumatrici e si assegnano casualmente a 5 gruppi (ognuno costituito da 6 consumatrici). Ad ogni gruppo viene presentata una delle cinque pubblicità, in modo da creare un’”aspettativa” sul prodotto guidata dal diverso tipo di pubblicità presentata. Dopodiché a tutte le consumatrici viene fornito il detersivo pubblicizzato in modo che possano utilizzarlo e quindi ne possano valutare le caratteristiche. A questo punto, ad ogni consumatrice viene chiesto di assegnare al detersivo un punteggio. I punteggi (nella scala 0-20) sono riportati di seguito.
%
%
%

% Soluzione
X=[15 15 8 5 12;
18 17 7 6 19;
17 21 10 13 18;
19 13 15 11 12;
19 19 13 9 15;
20 17 13 10 14];

%% Creo la variabile classificatoria
group=[repmat('A',6,1); repmat('B',6,1); repmat('C',6,1); repmat('D',6,1); repmat('E',6,1)];
group=cellstr(group);

% Trasformo la marice X in un vettore 
xvec=X(:);

% Si tratta di applicare l’analisi della varianza. 
% Quindi il sistema d’ipotesi è:
% \mu_1=\mu_2=\mu_3=\mu_4=\mu_5

%
%% Boxplot

boxplot(xvec,group);

%
%% Test ANOVA di uguaglianza delle medie

% Modo 1 di realizzare il test ANOVA
% Viene passata come input la matrice X. MATLAB interepreta i dati di ogni
% colonna come appartenenti ad un diverso gruppo
[pchk,anovatabchk,statschk]=anova1(X);

% Modo 2 di realizzare il test ANOVA
% Viene passato come input il vettore xvec e la cell group
[p,anovatab,stats]=anova1(xvec,group);
% Al livello di significatività alpha = 0,05, con 4 gradi di libertà al
% numeratore e 25 al denominatore il valore tabulato di F è 2,76 il quale è
% inferiore al risultato del test (11,48) per cui H0 viene rifiutata cioè
% si considera significativa la diversità delle medie campionarie e quindi
% l'influenza della pubblicità sui punteggi assegnati.

%
%% Calcolo manuale della devianza nei gruppi e della devianza tra i gruppi e degli intervalli di confidenza
% unigroup=cell che contiene le etichette dei diversi gruppi

unigroup=unique(group);

% inizializzazione di devNEI e devFRA  
devNEI=0;
devFRA=0;
n=length(xvec);
ngroups=length(unigroup);
% conflev = scalare associato all'ampiezza dell'intervallo di confidenza
conflev=0.99;
zalpha=norminv(1-(1-conflev)/2);
Mglobal=mean(xvec);

% inizializzazione della matrice ConfInt
% Prima colonna di Confint = estremo inferiore intervallo di confidenza del
% gruppo j
% Seconda colonna di Confint = Media del gruppo j 
% Terza colonna di Confint = estremo superiore intervallo di confidenza del
% gruppo j
Confint=zeros(ngroups,3);

for j=1:ngroups
    booj=strcmp(group,unigroup(j));
    % nj = numerosità del gruppo j
    nj=sum(booj);
    % Xj= vettore di lunghezza nj che contiene le unità appartenenti al
    % gruppo j
    Xj=xvec(booj);
    % varj = varianza (corretta) delle unità appartenenti al gruppo j
    varj=var(Xj);
    % stdj= standard deviation (s corretto) delle unità appartenenti ai
    % gruppo j
    stdj=sqrt(varj);
    
    devNEI=devNEI+varj*(nj-1);
    % Mj=media del gruppo j
    Mj=mean(Xj);
    devFRA=devFRA+(Mj-Mglobal)^2 *nj;
    
    % Costruzione dell'intervallo di confidenza per le unità appartenenti
    % al gruppo j
    Confint(j,:)=[Mj-zalpha*stdj/sqrt(nj) Mj  Mj+zalpha*stdj/sqrt(nj)];
end
varFRA=devFRA/n;
varNEI=devNEI/n;

% test ANOVA
numANOVA=devFRA/(ngroups-1);
denANOVA=devNEI/(n-ngroups);
testANOVA=numANOVA/denANOVA;
pvaltestANOVA=fcdf(testANOVA,ngroups-1,n-ngroups,'upper');

%
%% Rappresentazione grafica intervalli di confidenza
% Rappresentazione degli intervalli di confidenza tramite la funzione errorbar

errorbar((1:ngroups)',Confint(:,2),(Confint(:,3)-Confint(:,2)),'o')
text(1:ngroups,22*ones(ngroups,1),unigroup,'Units','data','HorizontalAlignment','Center')
xlim([0.5 5.5])
set(gca,'XTickLabel','')
ylabel(['Intervalli di confidenza al ' num2str(100*conflev) '% del voto per ogni strato'])
ylim([0 25])

%
%% Calcolo delle statistiche (ed intervalli di confidenza basati sulla T) tramite grspstats

Xtable=table(xvec,group);
X1=grpstats(Xtable,'group',{'mean','std','var','meanci'},'Alpha',0.01);