Fonction de répartition de la loi de Student

Bonjour à tous!
J'aimerais savoir si l'un d'entre vous s'est déjà amusé un jour à calculer la fonction de répartition de la loi de Student.
Je dispose seulement de la fonction de densité de cette loi.
Je dois faire un programme qui me redonne les valeurs de la table de student en fonction de x et du nombre de degrés de liberté (n).

J'ai essayé de calculer l'intégrale de 0 à x de la fonction de densité mais sans succès.
En fait, je ne trouve pas la primitive de :
(1+ x²/n)^(-(n+1)/2)

Si quelqu'un pouvait m'éclairer le plus rapidement possible... j'en serais vraiment reconnaissant. Merci.

Réponses

  • Cette fonction est toujours tabulée, sans doute parce qu'elle n'a pas de primitive exprimable en termes simples (sauf si n= 1, où on trouve la loi de Cauchy).
  • D'accord avec Gérard, vous ne trouverez pas de primitive.
    De quoi avez-vous droit de vous servir pour faire le programme ?
  • J'ai fait une table de la loi de Student pour mes étudiants sous Excel; C'est facile, la fonction de répartition de la loi de student existe déjà.
    Sinon, en C ou autre, c'est le problème classique de l'intégrale approchée.
  • En fait le programme (en C, C++ ou Java) doit retouner une valeur la plus précise possible.

    En ce qui concerne l'intégrale approchée, je ne vois pas du tout comment faire ni à quoi ça peut bien ressembler.
    Si vous pouviez m'aider...

    Merci
  • Bonsoir,

    contrairement à Gérard, je ne sais pas si l'intégrale approchée est la meilleure solution ... Arpès quelques recherches, il ne me semble pas que la plupart des programmes générant cette fontion de répartition ne se basent pas là dessus.

    J'ai trouvé une solution qui me paraît correcte, mais avant de vous la fournir, quelques petites questions :

    1) quel est votre niveau d'étude ? Si je vous parle de fonction Beta incomplète, cela vous dit-il quelquechose ? Pensez-vous avoir le droit d'utiliser cette notion ?

    2) Etes-vous limité en temps de calcul ?

    3) Votre programme peut-il utiliser la factorielle ? ( ce n'est pas trop grave si ce n'est pas le cas étant donnée sa simplicité d'implantation )

    Amicalement,
  • "Beta incomplète"?. Dans mes classes, j'ai surtout des bétas complets.

    (voir la réponse du Furet sur les STT, hier, dans "de l'intuition avant toute chose").
  • Bonjour Richard,

    Celle-ci m'a bien fait rire (ce qui n'est guère charitable).
    J'avais beaucoup aimé aussi ta réponse à "Galois" sur la discussion "brouillon".
    Amitiés.
    Félix
  • Bonjour kuja.

    Je suis étudiant en première année d'école d'ingénieurs en informatique.
    Je ne connais pas (ou pas encore) la fonction béta. Ceci dit, ce serait une occasion d'en apprendre plus.
    A vrai dire, mes recherches sont l'objet d'un projet de mathématiques. C'est pourquoi il serait intéressant de pouvoir découvrir de nouvelles choses.

    Je n'est pas de contrainte au niveau du temps de calcul mais la réponse de la fonction ne doit pas prendre plus d'une seconde (ce qui est déjà beaucoup pour une fonction...).

    L'utilisation de la factorielle n'est pas un problème (ce serait un comble de ne pouvoir utiliser cette fonction de base que ce soit de manière itérative ou récursive).

    Je vous remercie de votre aide, mais le temps commence à presser étant donné que le rendu est fixé à la fin semaine et qu'il reste à faire un rapport en Latex...
  • Bonjour, je vous rédige un truc ce soir.

    Amicalement,
  • Bonsoir,

    voici ma proposition.

    1) Petit topo sur les fonctions Beta, Gamma et Beta incomplète ( n'en déplaise à RAJ .. :-) )


    1.1. Fonction Gamma

    La fonction Gamma est définie sous forme intégrale par

    $$\Gamma(x)=\int_0^{+\infty} t^{x-1} e^{-t} dt$$

    pour tout $x > 0$.

    Pour $x=n$ entier naturel, on a

    $$\Gamma(n)=(n-1)!$$

    Pour $x=n+\frac{1}{2}$ où $n$ entier naturel

    $$\Gamma(n+\frac{1}{2})=\frac{(2n-1) !! \sqrt{\pi}}{2^n}=\frac{(2n-1)! \sqrt{\pi}}{2^{2n-1} (n-1)!}$$

    où $n!!$ désigne la double factorielle.

    Enfin, une valeur particulière :

    $$\Gamma(1/2)=\sqrt{\pi}$$


    1.2. Fonction Beta

    La fonction Beta est définie sous forme intégrale par

    $$B(a,b)=\int_0^1 t^{a-1} (1-t)^{b-1} dt $$

    pour $a >0$ et $b>0$. On peut montrer par un simple changement de variable que

    $$B(a,b)=B(b,a)$$.

    D'autre part, on a

    $$B(a,b)= \frac{\Gamma(a) \Gamma(b)}{\Gamma(a+b)}$$


    1.3. Fonction Beta incomplète

    La fonction Beta incomplète est définie sous forme intégrale par

    $$B(x;a,b)=\int_0^x t^{a-1} (1-t)^{b-1} dt$$

    pour $0 \leq x \leq 1$, $a >0$ et $b>0$. En utilisant Chasle et un simple changement de variable, on peut montrer que

    $$B(x;a,b)=B(a,b)-B(1-x;b,a)$$

    On possède aussi le développement en série entière de la fonction Beta incomplète

    $$B(x;a,b)=x^a \left( \frac{1}{a} + \frac{(1-b)}{(a+1)} x + ... + \frac{(1-b)(2-b)...(n-b)}{n! (a+n)} x^n + .... \right)$$

    Ainsi, on peut avoit une bonne approximation de $B(x;a,b)$ en tronquant ce développement à un certain ordre. Il faut remarquer ( on s'en servira plus tard) que cette approximation est d'autant plus exacte si $x$ est petit.

    2) Transformation du problème initial

    On cherche à calculer

    $$F(x)=\int_{-\infty}^x \frac{1}{\sqrt{d} B(1/2,d/2)} (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt$$

    qui est la fonction de répartition d'une loi de Student à $d$ degrés de liberté.
    Comme $F(+\infty)=1$, on a

    $$\int_{-\infty}^{+\infty} \frac{1}{\sqrt{d} B(1/2,d/2)} (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt=1$$

    et par parité de l'intégrande

    $$\int_{-\infty}^0 \frac{1}{\sqrt{d} B(1/2,d/2)} (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt=\frac{1}{2}$$

    Donc

    $$F(x)=\int_{-\infty}^x \frac{1}{\sqrt{d} B(1/2,d/2)} (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt=\int_{-\infty}^0 \frac{1}{\sqrt{d} B(1/2,d/2)} (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt + \int_0^x \frac{1}{\sqrt{d} B(1/2,d/2)} (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt$$

    Soit

    $$F(x)=\frac{1}{2}+\int_0^x \frac{1}{\sqrt{d} B(1/2,d/2)} (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt$$

    Il faut donc calculer

    $$\int_0^x \frac{1}{\sqrt{d} B(1/2,d/2)} (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt = \frac{1}{\sqrt{d} B(1/2,d/2)} \int_0^x (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt = \frac{1}{\sqrt{d} B(1/2,d/2)} * I$$

    Maintenant, on va transformer l'intégrale $I$ :

    $$I=\int_0^x (1+\frac{t^2}{d})^{-\frac{d+1}{2}} dt =\frac{\sqrt{d}}{2} \int_0^{\frac{x^2/d}{1+x^2/d}} u^{-1/2} (1-u)^{d/2-1} dt$$

    en faisant le changement de variable $\frac{t^2/d}{1+t^2/d}=u$ (à vous de le vérifier).

    Donc, en utilisant le fonctions définies en 1), on a

    $$I=\frac{\sqrt{d}}{2} B( \frac{x^2/d}{1+x^2/d}; 1/2, d/2)$$

    En recollant tous les morceaux, on a ainsi

    $$F(x)=\frac{1}{2} + \frac{1}{2} \frac{B(z;1/2,d/2)}{B(1/2,d/2)}$$

    où $z=\frac{x^2/d}{1+x^2/d}$.

    On a deux problèmes :

    - calculer $B(1/2,d/2)$
    - calculer $B(z;1/2,d/2)$


    3) Calcul de $B(1/2,d/2)$

    On utilise l'égalité de 1) :

    $$B(1/2,d/2)=\frac{\Gamma(1/2) \Gamma(d/2)}{Gamma((d+1)/2)}$$

    Alors en utilisant les résultat de 1) sur les fonctions $\Gamma$ pour $n$ et $n+\frac{1}{2}$ on trouve :

    si $d=2n$ pair

    $$B(1/2,d/2)=\frac{(n-1)! (n-1)!}{(2n-1)! 2^{2n-1}}$$

    et si $d=2n+1$ impair

    $$B(1/2,d/2)=\frac{\pi (2n-1)!}{2^{2n-1} (n-1)! n!}$$

    Ce problème est donc réglé. Il faudrait que vos vérifiiez mes calculs ( je n'en suis pas sûr) en utilisant les résultats que j'ai cités au début et en utilisant les références que je vous donne à la fin.


    4) Calcul de $B(z;1/2,d/2)$

    C'est là qu'intervient la seule approximation (pour l'instant, tous les calculs sont exacts). On va utiliser le développement proposé en 2). Il est facile à coder, puisqu'on peut faire un programme itératif, qui à chaque itération rajoute un terme en plus du développement. Je ne détaille pas, vous êtes en école d'info !! :-)

    Deux petites remarques cependant :

    - il y a deux possibilités pour la partie itérative : soit vous fixez le nombre d'itération au départ ( par exemple 100, ce qui fait que vous prendrez le développement jusqu'à l'ordre 100), soit, et c'est la méthode que je vous conseille, vous arrêtez l'algorithme une fois que la différence entre la valeur obtenue à l'ordre $n$ et la valeur obtenue à l'ordre $n+1$ est suffisamment petite inférieure à $\epsilon$, personnellement je prendrais $\epsilon=10^{-l}$ où $l$ est le nombre de chiffres après la virgule de la valeur obtenue à l'ordre $n$.

    - j'ai précisé plus haut que le développement était d'autant plus précis que $z$ était petit. Rappelons que $z$ est compris entre $0$ et $1$. On peut alors 'couper' la poire en deux, en utilisant la formule de passage de $B(z;a,b)$ à $B(1-z;b,a)$. En effet si $z$ est plus petit que $1/2$, on utilisera la formule de base. Sinon, si $z$ est plus grand que $1/2$, alors on utilisera

    $$B(z;a,b)=B(a,b)-B(1-z;b,a)$$

    et on pourra prendre le développement de $B(1-z;b,a)$ où $1-z$ sera plus petit que $1/2$. La limite de $1/2$ pour $z$ se traduit, en revenant à $x$, par une limite de $\sqrt{d}$ pour $x$.

    En résumé (car je ne sais pas si j'ai été clair) :


    - on calcule B=B(1/2,d/2) en utilisant les formules de 3)

    - on a l'algo que je note BETA(x;a,b), algo itératif qui fait le développement en série, la règle d'arrêt des itérations étant définie comme ci-dessus ;

    - si $x \qeq \sqrt{d}$ ( $z =\frac{x^2/d}{1+x^2/d} 1/2$) on fait $a=d/2$, $b=1/2$ et donc

    $$F(x)=1-\frac{1}{2} \frac{BETA(1-z;a,b)}{B}$$

    5) Une dernière remarque

    Comme l'a signalé Gérard, si $d=1$, on tombe sur une loi de Cauchy dont on connaît la fonction de répartition :

    $$F(x)=\frac{1}{2} + \frac{1}{\pi} \textrm{arctan}(x)$$

    Donc faites tout d'abord un test pour savoir si $d=1$, et si c'est le cas, vous avez directement l'expression !

    6) Quelques références électroniques


    Propriétés des lois Gamma et Beta :

    \lien{http://functions.wolfram.com/GammaBetaErf/}

    \lien{http://mathworld.wolfram.com/IncompleteBetaFunction.html}

    \lien{http://mathworld.wolfram.com/GammaFunction.html}


    Voilà, a priori cette technique marche, il me semble que c'est même à peu près de cette façon que la fonction est implantée dans Matlab....

    Amicalement,

    ps : Ouf, j'ai fait le plus long poste de ma vie ... :-)
  • Impressionnant. Dans les propriétés élémentaires de gamma, on peut ajouter:
    gamma(x+1)=x*gamma(x) (évident en intégrant par parties) qui permet d'obtenir la valeur de gamma(n) et celle de gamma(n+1/2) en fonction de gamma(1/2)
  • Tout à fait RAJ, j'ai oublié la plus jolie !
    Cependant, ça fera un peu de boulot à ayobo de regarder ça, j'ai quand même maché pas mal le travail ...

    ps : la longueur du post fait qu'il reste quelques coquilles de Latex ... un $x \geq \sqrt{d}$ et un $\Gamma$. Si jamais un modérateur passe dans le coin ...( ça fait deux fois aujourd'hui, promis j'arrête)

    Amicalement,
  • xx $$B(1/2,d/2)=\frac{\Gamma(1/2) \Gamma(d/2)}{\Gamma((d+1)/2)}$$ xx
  • $$B(1/2,d/2)=\frac{\Gamma(1/2) \Gamma(d/2)}{\Gamma((d+1)/2)}$$
  • Merci ! ( je trouve que ça serait une bonne idée que les modérateurs 'signent' leurs modifs, comme ça on pourrait les remercier en personne pour le travail qu'ils font bénévolement. Par exemple 'Z' pour Vianney ... :-) )
  • Kuja : J'ai un doute ! La fonction densité est très lisse; Une méthode d'intégration genre Simpson ne donne-t-elle pas de très bons résultats ?
  • Bonjour Gérard,

    honnêtement je ne sais pas si une méthode d'intégration numérique est meilleure ou non. Il faudrait certainement comparer leurs résultats avec ce que je propose.

    Cependant, deux petites remarques :

    - contrairement à la longueur de mon message ( qui détaille toutes les connaissances et étapes nécessaires pour l'écriture de l'algo), l'algo que je propose ne comporte qu'une petite dizaine de ligne, ce qui est peu il me semble ;

    - après vérification c'est le DSE de la fonction Beta qui est utilisé dans la fonction Matlab qui calcule la fonction de répartition de la loi de Student dans la toolbox Statistics, et en général les algos proposés sont soigneusement choisis d'après ce que j'ai entendu dire.

    Je suis d'accord que ces deux remarques ne justifient pas l'utilisation de ma méthode par rapport à une intégration numérique du type que tu cites. D'autant plus qu'ayobo n'a pas précisé dans les détails le cadre du cours dans lequel s'insère cette question. Si c'est relié à un cours de maths sur l'intégration numérique mêlé à un cours d'info sur l'implantation de ces méthodes, alors ce que je propose n'a pas lieu d'être et tu as en effet raison.

    Ceci dit, pour raisons personnelles, j'aime bien la méthode avec les fonctions Beta ( sinon je n'aurais pas passé du temps à écrire tout ça hier ... :-) ).

    Amicalement,
  • Bien évidemment, je trouve ton travail formidable et intéressant. Ce n'était qu'un doute. Et je n'irai pas vérifier concrétement quelle méthode est la meilleure. Par contre, tes arguments sont forts, et ta méthode doit être très efficace.
    Amicalement,
Connectez-vous ou Inscrivez-vous pour répondre.