clear, clc, close 

%% Cvičení 5. Náhodné vektory. Regrese
% Příští týden - 1.zápočtový test v Graderu (nový kurz, pozvánka v mailu)
% vzorová písemka je na webu
% čas - 60 minut, 33% navýšení - do konce hodiny
%
% Table of Contents
% Náhodný vektor. Sdružené, podmíněné a marginální rozdělení
% Kovariance, korelační koeficient
% Regresní analýza
%     Lineární regrese
%     Vícenásobná lineární  regrese
%     Polynomiální regrese
%     Logistická regrese
% Samostatná práce - Grader
%
%% Náhodný vektor. Sdružené, podmíněné a marginální rozdělení
% sdružené=podmíněné $\cdot$marginální
% $f(x,y)=f(x|y)f(y)=f(y|x)f(x)$
% podmíněné = sdružené/marginální
% $f(x|y)=\frac{f(x,y)}{f(y)}$
% $ f(y|x)=\frac{f(x,y)}{f(x)}$
% Zajímal nás vztah různých věkových kategorií (junior, dospělý, senior) k zimním sportům. Ptali jsme se, zda preferují lyže, snowboard nebo běžky. Výsledky jsme zpracovali ve tvaru tabulky:
% \begin{array}{|c|c|c|c|}
% \hline
%  sport,věk& junior& dospělý & senior  \\
%  \hline
%   lyže&159 & 628 & 89  \\
%   \hline
%   snowboard  &256 & 112 &13   \\
%   \hline
%    běžky & 18 & 179 & 138  \\
%  \hline
%  \end{array}
% Určete, jaká bude pravděpodobnost toho, že pokud náhodně potkáme snowboardistu, to bude junior? Jaká bude pravděpodobnost toho, že pokud náhodně potkáme seniora, tak to bude běžkař (lyžař, snowboardista)?
% Máme dvě diskrétní náhodné veličiny: sport $\in$(lyže, snowboard, běžky) a věk$\in$(junior, dospělý, senior), tj každá má tři možné hodnoty.
% Potřebujeme obě podmíněná rozdělení - v prvním případě  f(věk | sport), v druhém  f(sport | věk).
% Nejdřív z tabulky vyrobíme sdružené rozdělení f(sport, věk):

%%% y- junior, dospely, senior
tabulka=[159 628 89; %% x - lyze
         256 112 13; %%snowboard
         18 179 138]; %% bezky

sport_vek=tabulka/sum(tabulka,'all')% sdružené rozdělení
sum(sport_vek,'all') %součet pravděpodobností z celého sdruženého rozdělení = 1 (jenom kontrola)

% Čemu se rovná pravděpodobnost, že senior pojede na snowboardu?



% Marginální rozdělení  f(sport):

sport=sum(sport_vek,2)% 2 - sečteme sdružené ve sloupcích
sum(sport) %součet pravděpodobností ve sloupci = 1 (jenom kontrola)

% Marginální rozdělení   f(věk):

vek=sum(sport_vek,1)% 1 - sečteme sdružené v řádcích

sum(vek)%součet pravděpodobností v řádku = 1 (jenom kontrola)

% Čemu se rovná pravděpodobnost, že pokud náhodně  potkáme sportovce,  to bude běžkař? že to bude junior?



% Podmíněné rozdělení věku v závislosti na znalosti sportu spočteme takto:  f(věk | sport) $=\frac{f(\mbox{sport},\mbox{věk})}{f(\mbox{sport})}$.

vek_podm_sport=sport_vek./sport % vek - sloupce, sport - řádky
sum(vek_podm_sport,2) % součet pravděpodobností = 1 v řádcích (jenom kontrola)

% Čemu se rovná pravděpodobnost, že pokud náhodně potkáme snowboardistu, bude to junior?



% Podmíněné rozdělení sportu v závislosti na věku f(sport | věk)$=\frac{f(\mbox{sport},\mbox{věk})}{f(\mbox{věk})}$:

sport_podm_vek=sport_vek./vek % vek - sloupce, sport - řádky


sum(sport_podm_vek,1) %součet pravděpodobností = 1 ve sloupcích (jenom kontrola)

% Čemu se rovná pravděpodobnost, že pokud náhodně potkáme seniora, to bude běžkař?



%% Kovariance, korelační koeficient
% Kovariance (pozor na výběrovou kovarianci):
%  $C[x,y]=\sum_i\sum_j(x_i-E[x])(y_j-E[y])f(x_i,y_j)$
% Přímá závislost  C[x,y]>0
% Nepřímá závislost C[x,y]<0
% Nezávislé veličiny C[x,y]=0
% Pearsonův / Spearmanův korelační koeficient (pozor na výběrový korelační koeficient):
% $\rho_{xy}=\frac{C[x,y]}{\sigma_{x}\sigma_{y}}, \;\;\;r_s=1-\frac{6\sum^n_{i=1}d_i^2}{n(n^2-1)},\;\;\;oba\in(-1,1)$
% blížící se k 1 - výrazná pozitivní korelace,
% blížící se k -1 - výrazná negativní korelace
% Máme data v tabulce. Hledáme závislost mezi cenou havarijiního pojištění, cenou vozu a počtem měsíců bez nehody.

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

% Spočteme kovarianci mezi cenou vozu a havarijiního pojištění:

vuz=T.("Cena vozu"); pojisteni=T.("Havarijní pojištění");

covariance1=cov(vuz,pojisteni) %to je kovarianční matice. Kovariance je covariance1(2,1)

% Určíme míru korelace - spočteme Pearsonův korelační koeficient:

pear_koef=corr(vuz,pojisteni,"type","Pearson")% lineární závislost mezi daty - později

sedadla=T.("Počet sedadel");
spear_koef=corr(sedadla,pojisteni,"type","Spearman")% nelineární závislost mezi daty - později

% Uveďte, zda je mezi cenou vozu a havarijiního pojištění  přímá závislost (Z=1) nebo nepřímá závislost (Z=2) nebo jsou nezávislé (Z=3)

% Z=

% Vypočtěte korelační koeficient pro veličiny: a) cenou havarijiního pojištění a počtem měsíců bez nehody., 2) cenou vozu a počtem měsíců bez nehody, 3) cenou vozu a počtem sedadel. Která dvojice veličin vykazuje vyšší korelaci?

mesice=T.("Bezeškodný průběh");

%
%

%% Regresní analýza
% Cena vozu a havarijiního pojištění  prokazují vysokou korelaci. Zkusíme popsat jejich vztah pomocí regresní analýzy.
%% Lineární regrese
% $y=b_{0}+b_{1}x$

x=T.("Cena vozu"); y=T.("Havarijní pojištění");% x - nezávislá, y - závislá
mdl=fitlm(x,y,'linear')% lineární regrese
b=mdl.Coefficients.Estimate % regresní koeficienty

% Predikce ceny havarijiního pojištění  pro cenu vozu 1 000 000 Kč:

ypred=predict(mdl,1000)
%nebo takto:
ypred=b(1)+b(2)*1000

% Proložíme regresní přímku:

figure
plot(x,y,'bx')
xlabel('Cena vozu')
ylabel('Havarijní pojištění')
hold on 
% yp=b(1)+b(2)*x;% hodnoty na přímce - predikce
yp=predict(mdl,x);% hodnoty na přímce - predikce
plot(x,yp,'r','LineWidth',2,'LineStyle','--')

%% Vícenásobná lineární  regrese
% $y=b_0+b_1x_{1}+b_2x_{2}+b_3x_{3}+\ldots+b_nx_{n}$

X=[vuz mesice sedadla];
mdl2=fitlm(X,pojisteni)
b2=mdl2.Coefficients.Estimate % regresní koeficienty
ypred2=predict(mdl2,[1000 180 7]) %predikce pro cenu vozu 1mln Kč, 180 měsíců a 7 sedadel

%% Polynomiální regrese
% $y=b_0+b_1x+b_2x^{2}+b_3x^{3}+\ldots+b_nx^{n}$

T1=readtable("data2023_cv5.xlsx","Sheet","List1","VariableNamingRule","preserve")
x=T1.("Rychlost");y=T1.("Spotřeba");
mdl3=fitlm(x,y,'poly3')%  poly2 - 2.řádu, atd
b3=mdl3.Coefficients.Estimate % regresní koeficienty

% Predikce spotřeby paliva pro rychlost 40 km/h:

ypred3=predict(mdl3,40)

% Proložíme regresní křivku:

figure
plot(x,y,'bx')
xlabel('Rychlost')
ylabel('Spotřeba paliva')
hold on 
x1=min(x):0.5:max(x);
yp3=b3(1)+b3(2)*x1+b3(3)*x1.^2+b3(4)*x1.^3;% hodnoty na křivce - predikce
plot(x1,yp3,'r','LineWidth',2,'LineStyle','-')

%% Logistická regrese
% $\ln(\frac{p_1}{p_0})=b_0+b_1x_1+b_2x_2+\ldots+b_nx_n$

MnrModel = fitmnr([vuz mesice pojisteni],sedadla)
b4=MnrModel.Coefficients.Value % koeficienty
predict(MnrModel,[700 100 10]) % predikce pro nová data

%% Samostatná práce - Grader