function [T,Q,P,h]=autokorelace(x,k,alfa)
% funkce testuje linearni nezavislost mezi cleny posloupnosti
% Autor: Petr Mareška, 2015
% syntaxe: [T,Q,P,h]=autokorelace(x,k,alfa)
% vstupni parametry:
% x...vektor realizaci
% k...maximalni rad koeficientu autokorelace
% alfa...volitelny parametr, hladina vyznamnosti pro Cochranuv test, implicitne alfa=0.05
% vystupni parametry:
% T...tabulka obsahujici korelogram a vysledky testu hypotezy H0: rk=0
% Q...hodnota testove statistiky Cochranova testu
% P ... p-hodnota Cochranova testu
% h...vysledek testu: H=0 nezamitame hyp., ze vsechny koeficienty autokorelace jsou nula
%                       H=1 zamitame hypotezu

%kontrola vstupnich parametru, implicitni alfa je 0.05
if nargin==2
    alfa=0.05; 
end;
%nastaveni pocatecnich hodnot (vygenerovani vektoru)
n=size(x,1);
Q=0;
ri=zeros(k,1);
p_value=zeros(k,1);
rozhodnuti=zeros(k,1);
%vypocet autokorelaci
for i=1:k
    [r,p]=corrcoef(x(1:n-i),x(i+1:n));
    ri(i)=str2double(sprintf('%.4f',r(1,2)));
    p_value(i)=str2double(sprintf('%.4f',p(1,2)));
%zaokrouhleni na 4 des. mista, str2double tam je, protoze z funkce  
%sprintf vznikne textovy retezec, muzeme zaokrouohlit, protoze 
%tyto hodnoty jsou pouze orientacni
%v novejsich verzich matlabu lze pouzit round(x,n)
    if p(1,2)<alfa
    rozhodnuti(i)=1;%zamitame hyp., ze koef. autokorelace je roven nule
    else rozhodnuti(i)=0;%nezamitame hyp, ze koef. je nula
    end
    risq=r(1,2)^2;
    Q=Q+risq;
end;
i=(1:k)';
T=[i,ri,p_value,rozhodnuti];
%Cochranuv test
Q=n*Q;
stat=chi2inv(1-alfa,k);
P=1-chi2cdf(Q,k);
if Q >= stat
    h=1;%zamita hypotezu, ze vsechny koef autokorelace jsou nulove
else h=0;%nezamita hypotezu
end;