clear, close all

%% Cvičení 9. Testy hypotéz pro 3 a více  výběrů
% Table of Contents
% Jednofaktorový parametrický test  - ANOVA 1
% Jednofaktorový neparametrický test  - Kruskal-Wallisův test
% Jednofaktorový parametrický test  - ANOVA 1
% Dvoufaktorový parametrický test  - ANOVA 2
% Dvoufaktorový neparametrický test - Friedmanův test
% Samostatná práce v Graderu
%
% Postup:
% kolik výběrů máme?  minimálně 3
% máme jeden faktor nebo dva faktory?
% máme normalitu dat?
% pokud máme normalitu dat, máme stejné rozptyly výběrů? (Pre-analýza - Bartlettův test)
% podle předpokladů zvolíme správný test  - viz. tabulka s testy.
% H0: všechny strední hodnoty / mediány jsou stejné
% HA:  aspoň jedná střední hodnota  / medián se liší
% vypočteme p-hodnotu
% porovnáme p-hodnotu s hladinou významnosti: (pokud není řečeno jinak, je \alpha =0,05)
% H0 nezamítáme (p>\alpha ) nebo zamítáme (p<\alpha )
% Pokud zamítneme H0 - post-analýza (co se lišilo?)
% Závěr
%% Jednofaktorový parametrický test  - ANOVA 1
% Předpoklad:
% normalita všech výběrů
% stejné rozptyly výběrů
% Testujeme výdrž baterie mobilů od 6 výrobců. Každý z mobilů jsme intenzivně používali  pro volání, psaní a sledování videí a dobu každodenní výdrže baterie  v minutách jsme psali do tabulky. Na hladině významnosti 0,05 testujte tvrzení, že se výdrž baterie mobilů od různých výrobců neliší.
%

T=readtable("data_cv9.xlsx","Sheet","Sheet1","VariableNamingRule","preserve")

% Máme 6 výběrů
% Nezajímá nás, jak se lišila výdrž baterie každý den v průběhu používání, ale v závislosti na výrobci - to je jeden faktor
% Ověříme normalitu všech výběrů:
%

[h,pN1]=adtest(T.("A"))
[h,pN2]=adtest(T.("B"))
[h,pN3]=adtest(T.("C"))
[h,pN4]=adtest(T.("D"))
[h,pN5]=adtest(T.("E"))
[h,pN6]=adtest(T.("F"))

% Nezamítáme normalitu všech výběrů - můžeme pokračovat testováním shody rozptylů (pre-analýza)
% Bartlettův test:
% H0: rozptyly všech výběrů jsou stejné
% HA: aspoň jeden se liší
%

data=T.Variables; % data
% groups - abychom nemuseli řešit různý počet dat ve sloupcích
% jinak se použije matice
group=ones(size(data)).*[1:size(data,2)]; 


p_Bart=vartestn(data(:),group(:)) % Bartlettův test - pozor, v Graderu se volá jinak!

% pozor - v Graderu musíme vypnout obrázky:

p_Bart=vartestn(data(:),group(:), "Display","off")

% Zamítáme nebo nezamítáme předpoklad stejných rozptylů? Můžeme použít test ANOVA 1?
% můzeme použít parametrický test ANOVA 1
% H0: $\mu_1=\mu_2=\mu_3=\mu_4=\mu_5=\mu_6$ - baterie všech výrobců mají v průměru stejnou výdrž (výrobce nemá vliv)
% HA: baterie aspoň od jednoho výrobce se liší (výrobce má vliv)
%

[pA1,h,statsA1]=anova1(data(:),group(:))% statsA1 potřebujeme pro případ zamítnutí
%[pA1,h,statsA1]=anova1(data(:),group(:),"off") % pro Grader

% Zamítáme nebo nezamítáme H0? Závěr? Potřebujeme test post-analýzy?
%

tab_multcompareA1=multcompare(statsA1)% Tukey-Kramerův test

% Který výrobce se lišil? kolik výrobců se lišilo?

   kolik=sum(tab_multcompareA1(:,end)<0.05)

%% Jednofaktorový neparametrický test  - Kruskal-Wallisův test
% Předpoklad:
% alespoň jeden výběr nemá normalitu  nebo není splněn předpoklad stejných rozptylů
% U pacientů s onemocněním A, B, C, D jsme sledovali kolik mg léků dostávají. Zároveň jsme i zjišťovali jejich věk. Data jsme uložili do tabulky v excelu. Na hladině významnosti 0,05 testujte tvrzení, že dávka léku je shodná pro všechny nemoci.
%

T2=readtable("data_cv9.xlsx","Sheet","List3","VariableNamingRule","preserve")

% Máme 4 výběry (A, B, C, D)
% Zajímá nás shoda dávky léku pro všechny nemoci - nemoc je jeden faktor (nemoc nemá vliv)
% Ověříme normalitu všech výběrů, ale nejdřív musíme zjistit, kde jsou v datech výběry A, B, C, D:

kde=strcmp(T2.("diagnóza"),'A'); % touto funkcí zjistím, kde v datech je diagnóza A
data_A=T2.("dávka léku")(kde); % to je náš výběr - dávky léku pro diagnózu A  
[h1A,p1A]=adtest(data_A)

%

kde=strcmp(T2.("diagnóza"),'B'); % touto funkcí zjistím, kde v datech je diagnóza B
[h1B,p1B]=adtest(T2.("dávka léku")(kde)) % testujeme jen dávky léku pro diagnózu B 
kde=strcmp(T2.("diagnóza"),'C'); % touto funkcí zjistím, kde v datech je diagnóza C
[h1C,p1C]=adtest(T2.("dávka léku")(kde)) % vyberu jen dávky lékup pro diagnózu C 
kde=strcmp(T2.("diagnóza"),'D'); % touto funkcí zjistím, kde v datech je diagnóza D
[h1D,p1D]=adtest(T2.("dávka léku")(kde)) % vyberu jen dávky lékup pro diagnózu D 

% Zamítáme nebo nezamítáme H0? Závěr? Potřebujeme test pre-analýzy?
% nemusíme testovat shodu rozptylů - rovnou jdeme na neparametrický Kruskal-Wallisův test
% H0: $\tilde x_{0,5(1)}=\tilde x_{0,5(2)}=\tilde x_{0,5(3)}$ - dávka léku je shodná pro všechny nemoci (onemocnění nemá vliv)
% HA: alespoň v jednom výběru se dávka liší
%


[p1,tbl,statskw]=kruskalwallis(T2.("dávka léku"),T2.("diagnóza")) %hodnoty,skupina(group)
% [p1,~,statskw]=kruskalwallis(T2.("dávka léku"),T2.("diagnóza"),"off") %
% pro grader

% Zamítáme nebo nezamítáme H0? Závěr? Potřebujeme test post-analýzy?

figure
tab_multcomparekw=multcompare(statskw) %post analýza
kolik=sum(tab_multcomparekw(:,end)<0.05)

%% Jednofaktorový parametrický test  - ANOVA 1
% Zkusme použít stejnou tabulku, ale sloupeček s hodnotami věku pacientů. Ptáme se na hladině významnosti 0,05, zda věk pacientů je shodný pro všechny nemoci.
% Postup je stejný:
% Máme 4 výběry (A, B, C, D)
% Zajímá nás shoda věku pacientů pro všechny nemoci - nemoc je jeden faktor (nemoc nemá vliv)
% Ověříme normalitu všech výběrů, ale nejdřív musíme zjistit, kde jsou v datech výběry A, B, C, D:

kde=strcmp(T2.("diagnóza"),'A'); %touto funkcí zjistím, kde v datech je diagnóza A
[h1A,p1A2]=adtest(T2.("věk")(kde)) %ted vyberu jen dávky lékup pro diagnózu A 
kde=strcmp(T2.("diagnóza"),'B'); %touto funkcí zjistím, kde v datech je diagnóza A
[h1B,p1B2]=adtest(T2.("věk")(kde)) %ted vyberu jen dávky lékup pro diagnózu A 
kde=strcmp(T2.("diagnóza"),'C'); %touto funkcí zjistím, kde v datech je diagnóza A
[h1C,p1C2]=adtest(T2.("věk")(kde)) %ted vyberu jen dávky lékup pro diagnózu A 
kde=strcmp(T2.("diagnóza"),'D'); %touto funkcí zjistím, kde v datech je diagnóza A
[h1D,p1D2]=adtest(T2.("věk")(kde)) %ted vyberu jen dávky lékup pro diagnózu A 

% Máme normalitu dat a jdeme na Bartlettův test:

 
[p]=vartestn(T2.("věk"),T2.("diagnóza"))
%p=vartestn(T1.("věk"),T1.("diagnóza"),"Display","off")

% Můžeme použít test ANOVA?
% H0:  věk pacientů je v průměru shodný pro všechny nemoci (onemocnění nemá vliv)
% HA: alespoň v jednom výběru se věk liší

[p12,~,statsA1]=anova1(T2.("věk"),T2.("diagnóza"))
tab_multcompareA1=multcompare(statsA1)% Tukey-Kramerův test
kolik=sum(tab_multcompareA1(:,end)<0.05)

%% Dvoufaktorový parametrický test  - ANOVA 2
% Předpoklad:
% normalita všech výběrů v řádcích a sloupcích
% stejné rozptyly výběrů v řádcích a sloupcích
% stejný počet dat
% Zkoumáme, zda je průměrná rychlost vozidel na šesti vybraných úsecích dálnice shodná. Zajímá nás, zda se liší mezi úseky a mezi jednotlivými vozidly. Záznamy máme v tabulce, kde v řádcích jsou rychlosti jednotlivých vozidel a ve sloupcích jsou rychlosti na jednotlivých úsecích dálnice.
%

y=[121.22342   120.74845   119.49307   120.5861    117.72534   119.26038;
   119.91272   119.09886   119.84852   118.27439   121.31547   120.05333;
   119.41168   119.28543   120.53148   120.13955   119.46769   120.16141;
   118.45102   120.39379   121.89569   119.35673   119.33481   121.16697;
   121.17875   118.89045   118.72896   120.68609   120.03936   119.79114;
   120.48738   119.58971   122.57643   118.80942   119.93599   117.73509;
   118.45102   120.39379   121.89569   119.35673   119.33481   121.16697;
   121.17875   118.89045   118.72896   120.68609   120.03936   119.79114;];

% Máme 6 výběrů
% Zajímá nás, zda se lišila průměrná rychlost  mezi úseky a mezi jednotlivými vozidly - to jsou dva faktory
% Ověříme normalitu všech výběrů  v řádcích a sloupcích - tady máme stejný počet dat, stačí použít matici. Můžeme testovat každý sloupec  a řádek zvlášť, ale rychleji bude v cyklu:

% [h,pN]=adtest(y(1,:))
% [h,pN]=adtest(y(2,:)) % dále pro každý řádek
% [h,pN]=
% [h,pN]=adtest(y(:,1))
% [h,pN]=adtest(y(:,2)) % dále pro každý sloupec
% [h,pN]=

%

for i=1:size(y,1)
    [h,p]=adtest(y(i,:)) %pro všechny řádky (vozidla)
end
for i=1:size(y,2)
    [h,p]=adtest(y(:,i)) %pro všechny sloupce (úseky)
end

% Nezamítáme normalitu výběrů  v řádcích a sloupcích - můžeme pokračovat testováním shody rozptylů  v řádcích a sloupcích (pre-analýza)
% Bartlettův test  ve sloupcích (pro úseky):
% H0: rozptyly všech výběrů ve sloupcích jsou shodné
% HA: aspoň jeden se liší
%

p_Bart=vartestn(y)
% p_Bart=vartestn(y,[], "Display","off")% pro Grader, [] - místo Groups

% Bartlettův test  v řádcích (pro vozidla):
% H0: rozptyly všech výběrů v řádcích jsou shodné
% HA: aspoň jeden se liší

p_Bart=vartestn(y')
% p_Bart=vartestn(y',[], "Display","off")% pro Grader,[] - místo Groups

% Zamítáme nebo nezamítáme předpoklady shodných rozptylů? Závěr?
% Můžeme použít test ANOVA 2
% H0: $\mu_1=\mu_2=\mu_3=\mu_4=\mu_5=\mu_6$ - průměrné rychlosti se neliší mezi úseky (úsek nemá vliv)
% HA: rychlost aspoň na jednom úseku se liší (úsek má vliv)
% H0: $\mu_1=\mu_2=\mu_3=\mu_4=\mu_5=\mu_6=\mu_7=\mu_8$ - průměrné rychlosti se neliší mezi vozidly (řidič nemá vliv)
% HA: rychlost aspoň na jednom úseku se liší (řidič má vliv)
%

[p_A2,h,statsA2]=anova2(y,1,'off') % 1 - jedno opakování (pro Anovu s opakováním)
%[p_A2,h,statsA2]=anova2(y,1,"off") % pro Grader

% Zamítáme nebo nezamítáme H0 ve sloupcích? v řádcích? Závěr? Potřebujeme test post-analýzy?
%% Dvoufaktorový neparametrický test - Friedmanův test
% Předpoklad:
% alespoň jeden výběr nemá normalitu ve sloupcích nebo v řádcích  nebo není splněn předpoklad stejných rozptylů ve sloupcích nebo v řádcích
% párové výběry
% 20 náhodně vybraných lidí bylo dotázáno na názor na 4 prezidentské kandidáty a hodnotilo je od 1 do 5 jako ve škole.  Na hladině významnosti 0,05 testujte tvrzení, že všichni kandidáti jsou hodnoceni všemi respondenty stejně a všichni respondenti hodnotí kandidáty stejně.
%

T3=readtable("data_cv9.xlsx","Sheet","List2","VariableNamingRule","preserve")

% Máme 4 výběry
% Zajímá nás, zda se lišila hodnocení  mezi kandidáty  a mezi respodenty - to jsou dva faktory
% máme párová data
% Ověříme normalitu všech výběrů  v řádcích a sloupcích:

dataF=T3.Variables;
for i=1:size(dataF,1)
    [h,p]=adtest(dataF(i,:)) %pro všechny řádky (respondenti)
end

% Zamítáme normalitu v řádcích, dále už nemusíme ověřovat předpoklady - použijeme Friedmanův test
% H0: $\tilde x_{0,5(1)}=\tilde x_{0,5(2)}=\tilde x_{0,5(3)}=\tilde x_{0,5(4)}$ - hodnocení všech kandidátů jsou stejná (kandidát nemá vliv).
% HA: alespoň jeden kandidát byl hodnocen jinak
% H0: $\tilde x_{0,5(1)}=\tilde x_{0,5(2)}=\tilde x_{0,5(3)}=\tilde x_{0,5(4)}$ - všichni respondenti hodnotí stejně (respondent nemá vliv).
% HA: alespoň jeden respondent hodnotí jinak
%

[pF,h,statsF]=friedman(dataF,1,'off') % 1 - jedno opakování
%[pF,h,statsF]=friedman(dataF,1,"off") % pro Grader

% Zamítáme nebo nezamítáme H0 ve sloupcích? Závěr? Potřebujeme test post-analýzy?

post_sloupce=multcompare(statsF)% Tukey-Kramerův test
kolik=sum(post_sloupce(:,end)<0.05)

% Který kandidát se lišil?

[pF,h,statsF]=friedman(dataF',1,'off') % 1 - jedno opakování

% Zamítáme nebo nezamítáme H0 v řádcích? Závěr? Potřebujeme test post-analýzy?
%% Samostatná práce v Graderu
%