next up previous contents index
Next: 5.2.4 Dessiner un histogramme Up: Génération de nombres aléatoires Previous: 5.2.2 Quelques petites applications

Dessiner une fonction de répartition empirique

Soit X une variable aléatoire continue (à valeur réelle) dont on ne connaît que m réalisations indépendantes stockées dans le vecteur $X^r = (X_1,\; X_2,\; \dots,\; X_m)$. Sa fonction de répartition est la fonction :

\begin{displaymath}
F(x) = \mbox{Probabilité que } X \le x \end{displaymath}

et la fonction de répartition empirique définie à partir de l'échantillon Xr est définie par :

\begin{displaymath}
F_m(x) = card \{ X_i <= x \} /m \end{displaymath}

C'est une fonction en escalier qui se calcule facilement si on trie le vecteur Xr dans l'ordre croissant (on a alors Fm(x) = i/m pour $X_i \le x < X_{i+1}$). L'algorithme standard de tri de Scilab est la fonction sort qui trie dans l'ordre décroissant[*]. Pour trier le vecteur Xr dans l'ordre croissant, on utilise alors :
X_r_o = - sort(-X_r)
et pour éviter trop de manipulation avec plot2d, il en existe une variante qui dessine des plages constantes :
plot2d2("onn",x,y,[arguments optionnels comme pour plot2d])
dessinera une plage constante de valeur y(i) dans l'intervalle [x(i),x(i+1)]. Pour être sur de faire apparaître une petite plage (de valeur 0) avant Xrmin et une autre (de valeur 1) après Xrmax, on pourra alors procéder de la façon suivante :
function repartition_empirique(X_r)
  //
  //  trace la fonction de repartition (empirique) de
  //  X_r  un vecteur (ligne ou colonne) contenant m realisations de X
  //
  m = length(X_r)
  X_r_o = matrix(X_r,m,1)  // pour etre sur d'avoir un vecteur colonne
                           // de cette facon le code marche dans les 2 cas
  X_r_o = -sort(-X_r_o)    // X_r_o pour X_r ordonne
  // on rajoute maintenant deux points a chaque extremite :
  dx = 0.05*(X_r_o(m) - X_r_o(1)) 
  X_r_o = [X_r_o(1)-dx ; X_r_o ; X_r_o(m)+dx]
  // calcul des ordonnees
  y = [0 ; (1:m)'/m ; 1]
  // et le dessin
  xbasc()
  plot2d2("onn", X_r_o , y, 1, "121", "repartition empirique")
  xselect()
Voici maintenant un exemple qui utilise la loi normale ${\cal N}(0,1)$dont la fonction de répartition peut se calculer avec la fonction erreur erf, fonction dont Scilab est muni :

\begin{displaymath}
F(x) = \int_{-\infty}^x \frac{1}{\sqrt{2 \pi}} e^{-t^2/2} dt = \frac{1}{2}(1 + erf(\frac{x}{\sqrt{2}}))\end{displaymath}

X = rand(200,1,"normal");  // on tire 200 echantillons
repartition_empirique(X);  // dessin de la fct de repartition empirique
// les donnees pour tracer la fonction de repartition "exacte"
x = linspace(-5,5,200)';   
y = (1 + erf(x/sqrt(2)))/2;
// on rajoute la courbe sur le premier dessin
plot2d(x,y,2,"000")
qui doit donner quelque chose ressemblant à la figure (5.3).
  
Figure: Fonctions de répartition exacte et empirique pour la loi normale
\begin{figure}
\begin{center}

\includegraphics [width=12cm]{repart_empi}\end{center}\end{figure}


next up previous contents index
Next: 5.2.4 Dessiner un histogramme Up: Génération de nombres aléatoires Previous: 5.2.2 Quelques petites applications
Pincon Bruno
6/23/2000