function [zamitnuti,K,p,lam]=darling(X,distrib,alfa)
% TEST K OVERENI EXPONENCIALNIHO A POISSONOVA ROZLOZENI 
%  function [zamitnuti,K,p,lambda]=DARLING(X,ROZLOZENI,ALFA)
%    X muze byt n-vektor pozorovanych velicin, jejichz rozdeleni overujeme;
%         - pro souhrnne zadana data je X tvaru (r x 2), kde prvni sloupec
%           obsahuje jednotlive varianty a druhy sloupec cetnosti;
%         - pro vypoctene statistiky je X=[n,m,s2], kde n=pocet pozorovani, 
%                                  m=vyberovy prumer a s2=vyberovy rozptyl
%    ROZLOZENI je 'exp' pro overeni exponencialniho rozlozeni (implicitni)
%            nebo 'poiss' pro overeni Poissonova rozlozeni
%    ALFA je hladina vyznamnosti testu (implicitne 0.05)
% 
%   vystup: zamitnuti=1 => ZAMITAME hypotezu o shode rozdeleni
%           zamitnuti=0 => hypotezu o shode rozdeleni NEZAMITAME
%           K = hodnota testoveho kriteria
%           p = p-hodnota testu
%           lambda = odhadnuty parametr rozdeleni

% (c) Ondrej Petrik, 10.03.2010

if (nargin==1) distrib='exp'; end
if (nargin<3) alfa=0.05; end

[a,b]=size(X);
if(a<b) X=X';[a,b]=size(X); end
if(a==3&&b==1) n=X(1); m=X(2); s2=X(3); 
elseif(b==1&&a~=3) m=mean(X); n=a; s2=var(X);
else vaha=X(:,2); n=sum(vaha); 
     s2=var(X(:,1),vaha); m=X(:,1)'*vaha/n;
end

lam=m;
if strcmp(distrib,'exp') m=m2; disp('Darlinguv test exponencialniho rozlozeni');
else disp('Jednoduchy test Poissonova rozlozeni'); 
end
K=(n-1)*s2/m;
p=2*min(chi2cdf(K,n-1),1-chi2cdf(K,n-1));
zamitnuti=(p<alfa);