function vys = regrese(y, X, alfa)
% funkce "regrese" provede linearni regresi promenne "y" pomoci matice
% promennych "X" s rizikem "alfa" metodou nejmensich ctvercu
%
% SYNTAXE
% vys = regrese(y, X, alfa)
%
% VSTUPY
% y     ... vysvetlovana promenna
% X     ... matice vysvetlujicich promennych
% alfa  ... riziko
%
% VYSTUPY
% vys        ... promenna obsahujici vysledky, je typu "struktura"
% vys.b      ... odhad parametru LRM pomoci MNC
% vys.t_test ... t-test parametru
% vys.t_krit ... kriticka hodnota Studentova rozdeleni
% vys.e      ... rezidua modelu
% vys.sse    ... suma ctvercu rezidui modelu
% vys.n      ... pocet pozorovani v modelu
% vys.k      ... pocet odhadovanych parametru modelu
% vys.dw     ... Durbin-Watsonuv koeficient
% vys.R2     ... koeficient determinace
%
% HaPy 2007

u = find( all( ~isnan([y,X]), 2) );

n = length(u);
k = size(X, 2); 

b = inv(X(u,:)'*X(u,:))*X(u,:)'*y(u,:);
yv = X*b;
e = y - X*b;

sse = e(u,:)' * e(u,:);
se2 = sse / (n-length(b));
sb = sqrt(se2*diag(inv(X(u,:)'*X(u,:))));
t_test = abs(b)./sb;
t_krit   = tinv(1-alfa/2, n-k);

e = e(u,:); y = y(u,:); yv = yv(u,:);
dw=sum((e(2:end)-e(1:end-1)).^2)/sum(e.^2);
R2 = 1 - sum ((y-yv).^2) / sum ((y-mean(y)).^2);

vys.b = b;
vys.t_test = t_test;
vys.t_krit = t_krit;
vys.e = e;
vys.sse = sse;
vys.n = n;
vys.k = k;
vys.dw = dw;
vys.R2 = R2;

return