
// Tests d'adéquations du chi2.

function fqempirique=pchapo(x) // x est la donnée des observations brutes (pas réparties dans des classes)
    n=length(x)
    m=tabul(x)
    tm=size(m,"r")
    fqempirique=zeros(1,tm)
    for j=1:tm
        fqempirique(j)=m(j,2)/n
    end
endfunction

function fqempirique2=pchapo2(x) // x est la donnée des observations réparties dans les classes étudiées
    n=length(x)
    d=sum(x)
    fqempirique2=zeros(1,n)
    for i=1:n
        fqempirique2(i)=x(i)/d
    end
endfunction

function chi2ad(x,p,erreur)
    n=length(x)
    tm=length(p)
    test=n*sum(((pchapo(x)-p).^(2))./p) // choisir pchapo ou pchapo2 selon les observations
    if (test < cdfchi("X",tm-1,1-erreur,erreur)) then disp("Ho n est pas rejetée")
    else disp("Ho est rejetée")
    end
endfunction

//Tests d'indépendance du chi2

function tab=tableau(x) // on crée un tableau qui fait les sommes sur les lignes et sur chaque colonne.
    [l,c]=size(x)
    tab=zeros(l+1,c+1)
    for i=1:l
        for j=1:c
           tab(i,j)=x(i,j) 
        end
    end
    for i=1:l
        tab(i,c+1)=sum(x(i,:))
    end
    for j=1:c
        tab(l+1,j)=sum(x(:,j))
    end
    s=0
    for i=1:l
        s=s+tab(i,c+1)
    end
    tab(l+1,c+1)=s
endfunction


function chi2ind(x,erreur)
    tab=tableau(x)
    [l,c]=size(tab)
    n=tab(l,c)
    theo=zeros(l-1,c-1)
    for i=1:l-1
        for j=1:c-1
            theo(i,j)=tab(i,c)*tab(l,j)/n // calcul des valeurs théoriques
        end
    end
    s=0
    for i=1:l-1
        for j=1:c-1
           s=s+((tab(i,j)-theo(i,j))^2)/theo(i,j) 
        end
    end
    if (s < cdfchi("X",(l-2)*(c-2),1-erreur,erreur)) then disp("Ho n est pas rejetée")
    else disp("Ho est rejeté")
    end
endfunction

// Test de Kolmogorov Smirnof

function y=F(x) //F est la fonction de répartition de la loi théorique que l'on veut tester
    a=3
    if x >= 0 then y=1-exp(-a*x)
        else y=0
    end
endfunction

function KS(X) 
      X=gsort(X,'g','i') // on trie X
      n=length(X)
      Y=zeros(1,n)
      for i=1:n
          Y(i)=F(X(i))
      end
      D=sqrt(n)*max(max(abs([1/n:1/n:1]-Y)),max(abs([0:1/n:(1-1/n)]-Y)))
      if (D <= 1.36) then disp("Ho n est pas rejeté")
          else disp("Ho est rejeté")
      end
endfunction
