Probabilités et statistiques avec Scilab

publicité
Université Joseph Fourier (Grenoble I)
Préparation à l’agrégation de mathématiques
Année 2010-2011
Épreuve de modélisation
Probabilités et statistiques
avec Scilab
version du 6 septembre 2013
Table des matières
1 Introduction à Scilab
1.1 Un premier contact . . . . . . . . . . . . . . . . . . .
1.2 Algèbre élémentaire . . . . . . . . . . . . . . . . . . .
1.2.1 Vecteurs et matrices . . . . . . . . . . . . . .
1.2.2 Extraction . . . . . . . . . . . . . . . . . . . .
1.2.3 Modification, insertion, suppression . . . . . .
1.3 Opérations matricielles . . . . . . . . . . . . . . . . .
1.4 Programmation . . . . . . . . . . . . . . . . . . . . .
1.4.1 Utilisation des fichiers . . . . . . . . . . . . .
1.4.2 Fonctions . . . . . . . . . . . . . . . . . . . .
1.4.3 Opérateurs logiques . . . . . . . . . . . . . .
1.4.4 Boucle for . . . . . . . . . . . . . . . . . . .
1.4.5 Boucle while . . . . . . . . . . . . . . . . . .
1.4.6 Instructions conditionnelles . . . . . . . . . .
1.5 Compléments . . . . . . . . . . . . . . . . . . . . . .
1.5.1 Systèmes linéaires . . . . . . . . . . . . . . .
1.5.2 Résolution d’équations non linéaires . . . . .
1.5.3 Équations différentielles . . . . . . . . . . . .
1.5.4 Polynômes . . . . . . . . . . . . . . . . . . . .
1.6 Commandes graphiques de base . . . . . . . . . . . .
1.6.1 Courbes planes et nuages de points . . . . . .
1.6.2 Courbes paramétrées et surfaces en dimension
1.6.3 Fenêtres et sous-fenêtres graphiques . . . . .
1.7 Quelques conseils . . . . . . . . . . . . . . . . . . . .
1.8 Exercices . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
3
3
5
6
6
9
9
9
12
12
12
13
13
13
14
14
14
15
15
16
16
17
17
2 Fonctions de base pour les probabilités et les statistiques
2.1 Générateurs aléatoires . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Le générateur rand . . . . . . . . . . . . . . . . . . . .
2.1.2 La fonction grand . . . . . . . . . . . . . . . . . . . .
2.1.3 Simulation de lois quelconques . . . . . . . . . . . . .
2.2 Représentation de lois . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Représentation de lois discrètes . . . . . . . . . . . . .
2.2.2 Représentation de lois à densité . . . . . . . . . . . . .
2.2.3 Quantiles . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Echantillons . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Moyenne, variance, covariance empiriques . . . . . . .
2.3.2 Répartition en classes : les fonctions dsearch et tabul
2.3.3 Représentations graphiques . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
19
19
20
23
23
23
25
25
25
25
26
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2.4
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
3 Loi des grands nombres, méthode de Monte-Carlo
3.1 Loi des grands nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Vérification graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2 Vitesse de convergence . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3 Comparaison des bornes dans l’inégalité de Bienaymé-Tchebychev et dans
l’approximation normale . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Convergence des histogrammes et des fonctions de répartition empiriques . . . . .
3.2.1 Théorème de Glivenko-Cantelli . . . . . . . . . . . . . . . . . . . . . . . .
3.2.2 Convergence des histogrammes . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Méthode de Monte-Carlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.1 L’aiguille de Buffon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.2 Calcul d’intégrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
35
35
36
4 Variables aléatoires gaussiennes, théorème limite central
4.1 Loi multinormale . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Échantillons gaussiens, loi du χ2 et lois associées . . . . . .
4.2.1 Loi du χ2 . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2 Loi de Student . . . . . . . . . . . . . . . . . . . . .
4.2.3 Loi de Fisher-Snedecor . . . . . . . . . . . . . . . . .
4.2.4 Échantillons gaussiens . . . . . . . . . . . . . . . . .
4.3 Théorème limite central . . . . . . . . . . . . . . . . . . . .
4.3.1 Le cas unidimensionnel . . . . . . . . . . . . . . . . .
4.3.2 Le cas multidimensionnel . . . . . . . . . . . . . . .
4.3.3 Application à la loi multinomiale . . . . . . . . . . .
4.4 Mouvement brownien . . . . . . . . . . . . . . . . . . . . . .
4.4.1 Mouvement brownien standard . . . . . . . . . . . .
4.4.2 Mouvement brownien dans Rd . . . . . . . . . . . . .
4.4.3 Pont brownien . . . . . . . . . . . . . . . . . . . . .
4.5 Processus gaussiens stationnaires . . . . . . . . . . . . . . .
4.5.1 Un peu de terminologie . . . . . . . . . . . . . . . .
4.5.2 Moyennes mobiles . . . . . . . . . . . . . . . . . . .
4.5.3 Processus auto-régressifs . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45
45
47
47
48
48
49
50
50
51
51
52
52
53
54
55
55
55
58
5 Chaînes de Markov à temps discret
5.1 Simulation de chaînes de Markov . . . . . . . . .
5.1.1 Commandes de base . . . . . . . . . . . .
5.1.2 Chaînes absorbantes . . . . . . . . . . . .
5.1.3 Estimation de la probabilité de transition
5.2 Exemples . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Le modèle d’urne d’Ehrenfest . . . . . . .
5.2.2 Le modèle de Wright-Fisher . . . . . . . .
5.2.3 Le processus de Galton-Watson . . . . . .
5.2.4 L’urne de Polya . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
61
61
61
62
63
64
64
67
69
71
ii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
36
37
37
39
39
39
40
42
6 Processus à temps continu
6.1 Le processus de Poisson . . . . . . . . . . . . . . . . .
6.1.1 Âge et durée de vie résiduelle . . . . . . . . . .
6.1.2 Loi conditionnelle des instants d’arrivées . . . .
6.1.3 Superposition et décomposition de processus de
6.1.4 Processus de Poisson composé . . . . . . . . . .
6.1.5 Processus de Poisson non homogène . . . . . .
6.1.6 Processus de Poisson dans le plan : . . . . . . .
6.2 Processus markoviens de sauts . . . . . . . . . . . . . .
6.2.1 Définition et propriétés . . . . . . . . . . . . . .
6.2.2 Lois stationnaires . . . . . . . . . . . . . . . . .
6.2.3 Simulation par variables exponentielles . . . . .
6.2.4 Simulation par la chaîne incluse . . . . . . . . .
6.2.5 Simulation par la chaîne harmonisée . . . . . .
6.3 Files d’attente . . . . . . . . . . . . . . . . . . . . . . .
6.3.1 La file d’attente G/G/1 . . . . . . . . . . . . .
6.3.2 Le cas markovien . . . . . . . . . . . . . . . . .
6.3.3 Files d’attente à plusieurs serveurs . . . . . . .
6.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
Poisson
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
73
73
74
74
75
75
75
76
77
77
77
78
78
79
80
80
81
82
83
7 Statistique
7.1 Régions et intervalles de confiance . . . . . . . . . . . . . . .
7.1.1 Régions et intervalles de confiance exacts . . . . . . .
7.1.2 Régions et intervalles de confiance approchés . . . . .
7.2 Tests d’adéquation . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1 Test du χ2 . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.2 Test de Kolmogorov-Smirnov . . . . . . . . . . . . . .
7.3 Comparaison de deux échantillons . . . . . . . . . . . . . . . .
7.3.1 Test de Wilcoxon-Mann-Whitney . . . . . . . . . . . .
7.3.2 Test de Smirnov . . . . . . . . . . . . . . . . . . . . .
7.4 Régression . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.1 Ajustement affine par la méthode des moindres carrés
7.4.2 Régression linéaire simple . . . . . . . . . . . . . . . .
7.4.3 Le modèle linéaire . . . . . . . . . . . . . . . . . . . .
7.4.4 Régression linéaire multiple . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
85
85
85
86
88
88
91
91
91
91
92
92
94
94
95
8 Indications de solutions
8.1 Chapitre 1 . . . . . . .
8.2 Chapitre 2 . . . . . . .
8.3 Chapitre 3 . . . . . . .
8.4 Chapitre 4 . . . . . . .
8.5 Chapitre 5 . . . . . . .
8.6 Chapitre 6 . . . . . . .
8.7 Chapitre 7 . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
97
97
99
104
106
108
111
119
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iv
Chapitre 1
Introduction à Scilab
Scilab est un logiciel de calcul numérique développé par l’INRIA et l’ENPC. Sa syntaxe et ses
possibilités sont très proches de celles du logiciel commercial Matlab, mais contrairement à celuici, il est distribué gratuitement, avec ses sources, sur le site
http://www.scilab.org
Scilab n’est pas un logiciel de calcul formel : il ne fait pas de calcul exact (à de rares exceptions
près), mais permet de faire très rapidement des calculs numériques approchés et dispose de
nombreuses fonctionnalités graphiques.
1.1
Un premier contact
Lorsque Scilab est lancé, une fenêtre de commande s’ouvre et une invite de commande -->
indique que le logiciel attend vos instructions. Cette fenêtre peut être utilisée comme une supercalculatrice : vous entrez un calcul, vous tapez sur la touche « Entrée » et Scilab vous donne le
résultat.
Mais dès que vous aurez à écrire des programmes un peu plus développés, vous aurez besoin de
deux fenêtres supplémentaires : la fenêtre de l’éditeur, accessible par le menu « Editeur », qui vous
permettra d’écrire, de sauvegarder, de modifier et d’exécuter ces programmes, et la fenêtre de
l’aide en ligne, indispensable pour retrouver rapidement la syntaxe précise des fonctions dont vous
ne vous servez pas tous les jours. On accède à l’aide en tapant help mot-clé — en anglais ! — ou
par le menu « ? » et le sous-menu « Aide de Scilab » (ou « Help browser », suivant la version et le
système d’exploitation que vous utilisez). On peut aussi utiliser la commande apropos mot-clé.
Tapez :
--> x=1
les lignes suivantes s’affichent :
x
=
1.
-->
Par contre, si vous tapez y=1;, la valeur 1 est bien affectée à y (vérifiez en tapant y), mais le
résultat de l’affectation ne s’affiche pas (ce qui est particulièrement utile si y est une matrice
100 × 100 !).
Si on tape simplement 3*5 sans affecter le résultat à une variable nommée, il est automatiquement
affecté à une variable nommée ans (pour answer ). La valeur de cette variable est conservée
jusqu’au premier calcul non affecté.
1
Dans les noms de variables, les majuscules sont distinctes des minuscules. Toutes les variables
d’une session sont globales et conservées en mémoire. Des erreurs proviennent souvent de confusions avec des noms de variables déjà affectés. Il faut penser à ne pas toujours utiliser les mêmes
noms ou à libérer les variables par clear. Vos variables sont listées par who_user.
a=[1,2]; A=[1,2;3,4];
1+1
who_user
clear a
who_user
clear
who_user
// affecte a et A
// affecte ans
// vos variables
// a disparait
// a, A et ans disparaissent
On peut, dans la fenêtre de Scilab copier et coller des lignes à l’aide de la souris (y compris les
exemples donnés par l’aide) ; on peut aussi naviguer dans l’historique des commandes au moyen
des flèches ↑ ou ↓.
Chaque instruction doit être tapée sur une ligne. Si une instruction est trop longue, on peut la
continuer sur la ligne suivante en terminant la première ligne par deux points (ou plus) :
-->a=..
-->7
a =
7.
Les constantes e, π et i sont prédéfinies ; elles sont notées %e, %pi et %i respectivement.
Scilab est un logiciel de calcul numérique et non de calcul formel : il effectue des calculs numériques approchés et non des calculs exacts. On peut le constater en calculant eiπ :
-->%e^(%i*%pi)
ans =
- 1. + 1.225D-16i
Par défaut les réels sont affichés avec 7 décimales. On peut cependant, si besoin est, changer cet
affichage par défaut en utilisant la commande format (cette commande ne change que l’affichage,
et non la valeur des variables en mémoire) :
-->%pi
%pi =
3.1415927
-->format(20);%pi
%pi =
3.14159265358979312
En fait, les réels sont codés dans Scilab sur 64 bits : un bit pour le signe, 11 bits pour l’exposant
et 52 bits pour la mantisse, ce qui permet de coder des réels entre environ 2.10−308 et 2.10308
avec une précision de l’ordre de 2.10−16 . Cette valeur est celle de la variable prédéfinie %eps :
-->%eps
%eps =
2.220D-16
Le nombre de mots en mémoire (un mot=un réel en double précision) peut être très grand (de
l’ordre de 5000000 par défaut). Si l’espace alloué n’est pas suffisant, on peut l’augmenter en
utilisant la commande stacksize(k), où k est le nombre de mots disponibles souhaité. Il n’est
naturellement pas extensible à l’infini :
2
-->stacksize(1e10)
!--error 1504
Out of bounds value for stacksize argument
La commande who liste les variables utilisées. Un éditeur de variables, accessible par le menu,
permet également de visualiser et de modifier ces variables.
Chaque variable a un type. Les principaux types qui nous intéresseront sont :
– les constantes (matrices réelles ou complexes) ;
– les booléens (vrai : %t ou faux : %f) ;
– les chaînes de caractères (’x’ ou "x", qui représentent le même objet).
Il en existe d’autres (polynômes, fonctions, listes, . . .). On obtient le type d’une variable x en
tapant typeof(x).
Des fonctions permettent de convertir certains types entre eux (string(7) équivaut à ’7’
(string=chaîne de caractères), evstr(’7’) à 7 (evstr=evaluate string), bool2s(%t) donne 1
(bool2s=boolean-to-scalar), . . .). Certaines conversions entre booléens et réels sont effectuées automatiquement par le logiciel.
Les types des variables ne doivent pas être déclarés et ils peuvent changer à tout instant : on
peut toujours affecter à une variable déjà existante une valeur d’un autre type.
1.2
Algèbre élémentaire
Pour Scilab, tout (ou presque) est matrice : un réel est simplement une matrice 1×1. Les matrices
peuvent avoir des coefficients réels, complexes, booléens, chaînes de caractères, polynômes . . ..
Les coefficients d’une matrice doivent cependant tous être de même type.
Il faut, chaque fois qu’on le peut, utiliser les opérations matricielles prédéfinies. Le gain de temps,
par rapport à l’utilisation de boucles, peut être considérable :
-->timer();
-->for j=1:100
-->for i=1:100
-->B(i,j)=rand(1,1,’n’);
-->end
-->end
-->timer()
ans =
1.3
1.2.1
-->timer();
-->C=rand(100,100,’n’);
-->timer()
ans =
0.02
Vecteurs et matrices
En petite dimension, la façon la plus simple de définir une matrice n × m est d’en écrire entre
crochets les éléments séparés par des virgules, les lignes étant séparées par des points-virgules :
x=[a11, ... , a1m ; ... ;an1, ... ,anm].
-->A=[1,1,1;3,0,0;2,0,1]
A =
!
1.
1.
1. !
!
3.
0.
0. !
!
2.
0.
1. !
3
On peut aussi séparer les colonnes par des espaces au lieu de virgules : ainsi [1 -2,2] et [1,-2,2]
définissent le même objet (la deuxième écriture est cependant fortement conseillée).
De nombreuses matrices sont prédéfinies : matrice nulle, matrice unité, matrices aléatoires, intervalles.
zeros (n,m)
ones(n,m)
eye(n,m)
rand(n,m)
diag(A,k)
triu(A)
tril(A)
toeplitz
linspace(a,b,k+1)
logspace(a,b,k+1)
matrice n × m nulle
matrice n × m telle que ai,j = 1 pour tout i, j
matrice n × m ayant des 1 sur la diagonale
principale et des zéros ailleurs
les coefficients sont des réalisations de variables aléatoires indépendantes de loi uniforme sur ]0, 1[
extrait la k-ième diagonale de la matrice A
annule les coefficients au-dessous de la diagonale
annule les coefficients au-dessus de la diagonale
matrices à diagonales constantes
vecteur (matrice 1 × (k + 1)) de coordonnées
a + j(b − a)/k avec 0 ≤ j ≤ k.
analogue au précédent en échelle logarithmique (xi+1 = Cxi entre 10a et 10b (sauf si
b = π !)
Matrices : construction
Si une matrice A est déjà définie, la commande rand(A) (resp. zeros(A). . .) définit une matrice
aléatoire (resp. nulle, . . .) ayant la même taille que A. Ainsi la commande rand(7) ne produit
pas un vecteur aléatoire à 7 éléments, mais une matrice aléatoire de même taille que la matrice
[7], i.e. un seul nombre.
Si x est un vecteur, la commande diag(x) construit la matrice diagonale de diagonale x. Par
contre, si A est une matrice, cette commande renvoie le vecteur formé par la diagonale de A.
Ainsi, la commande diag(diag(A)) renvoie la matrice diagonale dont la diagonale est celle de
A.
Il existe deux façons de définir une suite de points régulièrement espacés : la commande
linspace(a,b,k+1) renvoie un vecteur ligne de k + 1 points régulièrements espacés (par défaut k + 1 = 100), le premier étant égal à a et le dernier à b ; la commande a:h:b renvoie
sous forme de vecteur ligne la progression arithmétique de premier terme a et de raison h, le
dernier terme étant le plus grand élément de cette progression ≤ b (si h > 0). Les commandes
linspace(0,1,11) et 0:0.1:1 sont donc équivalentes. Par défaut, h est égal à 1 : les commandes
a:1:b et a:b sont équivalentes.
0:%pi
ans =
0.
1.
2.
3.
La raison h peut également être négative :
10:-1:%pi
ans =
10.
9.
8.
7.
6.
5.
4.
4
1.2.2
Extraction
Pour accéder à l’élément ai,j d’une matrice A, on tape A(i,j). Plus généralement, si A est une
matrice n × m et v = (v1 , v2 , . . . , vk ), w = (w1 , . . . , wp ) deux vecteurs d’indices (non nécessairement distincts) vérifiant :
a) 1 ≤ vi ≤ n pour tout i ∈ {1, . . . , k}
b) 1 ≤ wi ≤ m pour tout i ∈ {1, . . . , p}
alors B=A(v,w) est la sous-matrice de A formée des éléments ai,j pour i parcourant v1 , . . . , vk et
j parcourant w1 , . . . , wp .
-->A=(1:6)’*(2:7)
A =
!
2.
3.
!
4.
6.
!
6.
9.
!
8.
12.
!
10.
15.
!
12.
18.
-->v=1:2:6
v =
!
1.
3.
4.
8.
12.
16.
20.
24.
5.
10.
15.
20.
25.
30.
6.
12.
18.
24.
30.
36.
7.
14.
21.
28.
35.
42.
!
!
!
!
!
!
5. !
-->A(v,v)
ans =
//extraction par copie: A n’est pas modifiée
!
!
!
4.
12.
20.
2.
6.
10.
6. !
18. !
30. !
-->A(2*ones(1,3),:)
ans =
4.
4.
4.
6.
6.
6.
8.
8.
8.
10.
10.
10.
12.
12.
12.
14.
14.
14.
Le symbole : représente le vecteur de tous les indices lignes ou colonnes. Si A est une matrice,
A(:) est le vecteur colonne obtenu en concaténant toutes les colonnes de A.
Pour un vecteur (ligne ou colonne), on peut se contenter de n’indiquer qu’un indice :
-->v=5:-1:1;v([3:$])
ans =
3.
2.
1.
Le symbole $ représente le dernier indice (de ligne ou de colonne).
La commande size(A) renvoie la taille de la matrice A sous forme d’un vecteur ligne à deux
éléments (voir aussi size(A,1), size(A,"c") et size(A,"*")). La longueur d’un vecteur v (ligne
ou colonne) est obtenue par la commande length(v).
La commande matrix permet de remodeler une matrice :
-->matrix(1:6,2,3)
5
ans =
1.
2.
1.2.3
3.
4.
5.
6.
Modification, insertion, suppression
La commande a(i,j)=x, où a est une matrice scalaire déjà définie et x un scalaire, affecte la
valeur x au coefficient a(i,j). On peut de même modifer une sous-matrice de a en remplaçant
les indices i et j par des vecteurs d’indices.
Si l’un des indices i et j est supérieur au nombre de lignes ou de colonnes de a, la matrice a est
automatiquement complétée par des 0 :
-->a=diag(1:2);a(3,1)=5
a =
1.
0.
0.
2.
5.
0.
On peut supprimer des lignes ou des colonnes d’une matrice en leur affectant comme valeur la
matrice vide [ ] :
-->a(2,:)=[ ]
a =
1.
0.
5.
0.
1.3
Opérations matricielles
Les opérations ont en général deux versions : l’une correspond à l’opération usuelle sur les
matrices, l’autre à l’opération effectuée élément par élément. Ainsi, les opérations .∗, .^, ./
sont les versions élément par élément alors que les opérations *, ^, / représentent les opérations
usuelles sur les matrices (produit, puissance, division) lorsque ces opérations ont un sens.
Une fonction usuelle f (sin, cos, exp, abs, int, floor. . .) appliquée à la matrice A = (ai,j )
donne la matrice (f (ai,j )). Par exemple, si A = (ai,j ), exp(A) = (exp(ai,j )). Par contre, si A est
+∞ n
X
A
une matrice carrée, l’exponentielle matricielle
s’obtient par la commande expm(A). On
n!
n=0
trouve de même les fonctions cosm, sinm, etc . . .
Exemple :
-->x=rand(2,2)
x =
!
0.2113249
!
0.7560439
-->U=bool2s(x>0.1)
U =
!
1.
O !
!
1.
1. !
0.0002211 !
0.3303271 !
Les commandes min et max retournent respectivement le plus petit et le plus grand élément de
A si elles sont employées avec un seul argument A (matrice ou vecteur) ; si elles sont employées
avec plusieurs arguments A1 , . . . , An (matrices ou vecteurs de même taille), elles s’interprètent
coefficient par coefficient ; on peut également obtenir les plus petits (ou plus grands) éléments de
chaque ligne (ou colonne) :
6
+
*
.*
/
./
^
.^
\
addition usuelle des matrices
soustraction usuelle des matrices
multiplication usuelle des matrices
multiplication élément par élément des matrices
division à droite
division élément par élément
fonction puissance
puissance élément par élément
division à gauche
Matrices : opérations binaires
bool2s(A)
A’
A.’
sum(A,’c’)
sum(A,’r’)
cumsum(A,’c’)
cumsum(A,’r’)
cumprod(A,’c’)
cumprod(A,’r’)
matrice de même taille que la matrice booléenne A dont les éléments sont 1 pour %t et
0 pour %f.
matrice adjointe de A (conjuguée de la transposée)
matrice transposée de A
P
vecteur colonne : xi = j ai,j
P
vecteur ligne : xj = i ai,j
Pj
matrice : xi,j = k=1 ai,k
P
matrice : xi,j = ik=1 ak,j
Q
matrice : xi,j = jk=1 ai,k
Q
matrice : xi,j = ik=1 ak,j
Opérations sur les matrices
-->x=rand(2,3)
x =
0.7783129
0.2119030
-->min(x)
ans =
0.1121355
-->min(x,’c’)
ans =
0.1121355
0.2119030
-->y=rand(x)
y =
0.8415518
0.4062025
-->min(x,y)
ans =
0.7783129
0.2119030
0.1121355
0.6856896
0.1531217
0.6970851
0.4094825
0.8784126
0.1138360
0.1998338
0.1121355
0.6856896
0.1138360
0.1998338
7
L’addition d’un scalaire à une matrice s’interprète comme l’addition à chaque coefficient. De
même la multiplication, la division par un scalaire, l’élévation à une puissance :
-->2^(0:6)
ans =
1.
2.
4.
-->eye(2,3)-1
ans =
0. - 1. - 1.
- 1.
0. - 1.
8.
16.
32.
64.
Notez cependant que A^2 renvoie le vecteur des carrés de A si A est un vecteur, mais le carré matriciel de A si A est une matrice carrée (et un message d’erreur si A est une matrice rectangulaire).
Attention : la commande 1./ ne donne pas le résultat escompté :
-->1./(1:3)
ans =
0.0714286
0.1428571
0.2142857
En effet Scilab l’interprète comme (1.)/ et non comme 1 ./ et résout un système linéaire au
sens des moindres carrés.
Le rang d’une matrice A, le déterminant et le spectre d’une matrice carrée A, l’inverse d’une
matrice carrée inversible A, sont donnés par les commandes rank(A), det(A), spec(A), inv(A)
(ou A^(-1)). La diagonalisation (quand elle est possible) s’obtient par la commande bdiag(A).
De nombreuses autres fonctions ou décompositions matricielles sont implémentées (voir la
rubrique d’aide Algèbre linéaire).
La commande find
La fonction find permet de trouver, et donc d’extraire etc..., les éléments d’un vecteur (ou d’une
matrice) vérifiant une propriété donnée.
-->a=rand(2,3)
a =
0.2113249
0.0002211
0.7560439
0.3303271
-->find(a<0.5)
ans =
1.
3.
4.
-->x=a(find(a<0.5))
x =
0.2113249
0.0002211
0.3303271
0.6653811
0.6283918
On peut remplacer la commande a(find(a<0.5)) par la commande a(a<0.5) :
-->a(a<0.5)=0
a =
0.
0.7560439
0.
0.
0.6653811
0.6283918
8
De même si b est une matrice booléenne de la même taille que a, a(b) équivaut à a(find(b)).
Tri
La fonction gsort permet de trier les éléments d’un vecteur ou d’une matrice, soit dans leur
ensemble, soit ligne par ligne ou colonne par colonne ; l’ordre peut être croissant ou décroissant
(pour les divers arguments de cette commande, voir la rubrique d’aide). Par exemple, pour trier
chaque colonne par ordre croissant, on utilise gsort(A,’r’,’i’) (’r’ pour ’row’ : on trie sur
les lignes) :
---->A=rand(3,2)
A =
!
0.4368588
0.4051954 !
!
0.2693125
0.9184708 !
!
0.6325745
0.0437334 !
1.4
1.4.1
-->gsort(A,’c’,’i’)
ans =
!
0.4051954
0.4368588 !
!
0.2693125
0.9184708 !
!
0.0437334
0.6325745 !
Programmation
Utilisation des fichiers
En règle générale, dès qu’un programme sort du cadre de l’utilisation d’une "supercalculatrice",
on utilise un éditeur de texte (à bien distinguer d’un traitement de texte), le plus souvent l’éditeur
intégré dans Scilab, accessible par un des menus de la fenêtre de commande. On enregistre le
fichier obtenu avec le suffixe .sce (même si ce n’est pas obligatoire) puis on exécute le fichier
dans Scilab au moyen du menu File operations ou par la commande exec(’fichier.sce’)
où ’fichier.sce’ est le nom du fichier.
Lors de l’oral vous devez utiliser de tels fichiers. Pour faciliter la mise au point et la relecture du
programme par vous-même et sa compréhension par le jury, vous devez également le commenter.
Une ligne de commentaires commence par //. Plus généralement, l’interpréteur ignore tout ce qui,
sur une ligne, suit //. L’éditeur de Scilab permet de commenter et de décommenter simplement
des blocs de texte, ce qui est particulièrement utile si vous voulez n’exécuter qu’une partie de
votre programme.
1.4.2
Fonctions
Pour définir une fonction, on utilise la syntaxe function y=nomdefonction(x), où y est la
valeur retournée par la fonction, nomdefonction le nom de la fonction que l’on veut définir et x
l’argument d’entrée. La définition de la fonction se termine par le mot-clé endfunction :
-->function y=sq(x)
-->y=x.^2
-->endfunction;
-->sq(1:4)
ans =
1.
4.
9.
16.
Pour des fonctions très courtes, on peut aussi utiliser la syntaxe deff(’y=sq(x)’,’y=x.^2’) en
n’oubliant pas les guillemets (mais function y=sq(x),y=x.^2,endfunction tient aussi sur une
ligne).
Une fonction peut avoir plusieurs arguments tant en entrée qu’en sortie. Par exemple la fonction
9
prédéfinie max peut renvoyer à la fois le maximum des coefficients d’un vecteur (ou d’une matrice)
de scalaires et le premier indice où ce maximum est atteint. Si on appelle cette fonction seule,
elle ne renvoie que le maximum :
-->x=floor(3*rand(1,10))
x =
2.
2.
1.
1.
-->max(x)
ans =
2.
1.
2.
2.
1.
1.
2.
Si on veut obtenir aussi l’indice, on appelle la fonction en explicitant deux valeurs en sortie :
-->[y,k]=max(x)
k =
1.
y =
2.
La même remarque vaut pour la fonction de tri gsort qui permet de récupérer le rang de chacun
des éléments d’un vecteur :
-->x=rand(1,7)
x =
0.26395
0.41481
0.28064
0.12800
-->[y,ind]=gsort(x,’g’,’i’)
ind =
7.
4.
6.
1.
3.
2.
5.
y =
0.11213
0.12800
0.21190
0.26395
0.77831
0.21190
0.11213
0.28064
0.41481
0.77831
De manière générale, si une fonction retourne plusieurs valeurs, il faut lui demander explicitement
de retourner ces valeurs en les nommant sous forme d’un vecteur si on veut toutes les obtenir ;
sinon seul le premier argument de sortie (en général le plus important) est retourné.
Une fonction peut être récursive (s’appeler elle-même au cours de son exécution). Ainsi pour
calculer la factorielle d’un entier naturel, on pourrait définir la fonction :
function x=fact(n)
if n<=1 then x=1;else x=n*fact(n-1);end;
endfunction;
(mais la fonction prédéfinie factorial donne directement le résultat et accepte un vecteur ou
une matrice en argument :
-->factorial(0:5)
ans =
1.
1.
2.
6.
24.
120.
de même que la fonction gamma qui permet d’obtenir le même résultat).
10
1.4.2.1
Variables locales et variables globales
Une fonction peut très bien ne pas renvoyer de valeur, mais effectuer une action (par exemple
dessiner une figure ou afficher un message). La fonction dessinercercle(x,y,r) définie par
function dessinercercle(x,y,r)
square(x-r,y-r,x+r,y+r);
xarc(x-r,y+r,2*r,2*r,0,64*360)
endfunction;
dessine le cercle de centre (x,y) et de rayon r. De même la fonction affichercarre(x) définie
par :
-->function affichercarre(x)
-->disp(x^2);
-->endfunction;
-->affichercarre(5)
25.
affiche à l’écran le carré de son argument, mais ne renvoie aucune valeur. Les résultats des calculs
intermédiaires effectués lors de l’exécution d’une fonction ne s’affichent jamais à l’écran, si bien
qu’il est indifférent de terminer les instructions à l’intérieur d’une fonction par un point-virgule
ou un passage à la ligne. La commande disp permet d’afficher la valeur d’une variable ; on peut y
ajouter un texte sous forme de chaîne de caractères, comme disp(’Valeur de x: ’+string(x)).
Une fonction peut accéder en lecture à toutes les variables déjà définies, mais ne peut pas modifier
en cours d’exécution une variable existante, sauf si celle-ci a été déclarée globale. Par exemple la
fonction double() définie par :
function double()
a=2*a;
endfunction;
ne modifie pas la variable a dans le script suivant :
-->a=2;double();a
a =
2.
Pour qu’elle modifie a, il faudrait déclarer cette variable globale :
-->global a;
-->function double()
-->global a;
-->a=2*a;
-->endfunction;
-->a=3;double();a
a =
6.
Le plus simple est naturellement de définir la fonction autrement :
-->function y=double(x)
-->y=2*x;
-->endfunction;
-->a=3;a=double(a)
a =
6.
et d’éviter ainsi l’utilisation de variables globales.
11
1.4.3
Opérateurs logiques
==
<
>
<=
>=
∼= ou <>
∼
& ou and
| ou or
égal à
inférieur à
supérieur à
inférieur ou égal à
supérieur ou égal à
différent de
négation
et logique
ou logique (non exclusif)
Ces opérateurs s’appliquent coefficient par coefficient sur des matrices de même taille :
-->a=rand(2,3),b=rand(a),b<a,or(b<a)
a =
0.2113249
0.0002211
0.6653811
0.7560439
0.3303271
0.6283918
b =
0.8497452
0.8782165
0.5608486
0.6857310
0.0683740
0.6623569
ans =
F F T
T T F
ans =
T
1.4.4
Boucle for
La boucle for itère sur les composantes d’un vecteur ligne. Elle s’écrit :
for variable=indices, instruction(s), end
(ne pas oublier le end).
-->v=zeros(1,4);for i=1:2:5, v(i)=i^2;end;v
v =
1.
0.
9.
0.
25.
1.4.5
Boucle while
Elle permet de répéter une instruction tant qu’une condition est vraie. Sa syntaxe est :
while condition, instruction(s); end
Ne pas oublier le end et se méfier des boucles sans fin du type :
-->while 1
-->i=i+1;
-->end
(Scilab transforme la constante non nulle 1 en le booléen %t). On peut dans ce cas arrêter
l’exécution du programme au moyen de la commande stop du menu control de la barre de
menu.
La commande break interrompt l’exécution d’une boucle :
-->for k=1:100, if k^2>50 then break;end;end;k
k =
8.
12
1.4.6
1.4.6.1
Instructions conditionnelles
if then else
Elle s’écrit :
if condition(s) then instruction(s), else instructions, end
.
L’alternative else n’est pas obligatoire. Si elle est suivie d’un if, on peut contracter les deux
mots-clés en elseif.
Attention : le mot-clé then doit être situé sur la même ligne que if ou elseif ; il peut être
remplacé par un passage à la ligne ou une virgule.
1.4.6.2
select case
Elle s’écrit :
select n,case n1 instruction,case n2 instruction,...else instruction,end
Un exemple suffira à l’illustrer :
-->nom=’jean’;select nom, case ’pierre’ y=1, case ’jean’ y=2,else y=3,end
y =
2.
1.5
1.5.1
Compléments
Systèmes linéaires
Pour résoudre un système de Cramer Ax = b, où A est une matrice carrée inversible, on peut
soit exprimer la solution sous la forme x = A−1 b, soit utiliser la division matricielle à gauche
x=A\b :
-->A=rand(3,3);b=rand(3,1);x1=A\b;x2=inv(A)*b;norm(A*x1-b),norm(A*x2-b)
ans =
1.241D-16
ans =
2.719D-16
On peut ainsi résoudre simultanément plusieurs équations ayant le même premier membre, mais
des seconds membres différents, en remplaçant le vecteur b par la matrice rectangulaire obtenue
en concaténant les seconds membres.
Si la matrice A n’est pas inversible (ou est numériquement proche d’une matrice non inversible),
ou si A a le même nombre de lignes que la matrice b, mais n’est pas carrée, Scilab envoie un
message d’avertissement et résoud le système au sens des moindres carrés :
-->A=ones(3,3);b=rand(3,2);x1=A\b
warning
matrix is close to singular or badly scaled. rcond =
computing least squares solution. (see lsq)
x1 =
0.5119654
0.5524123
0.
0.
0.
0.
13
0.0000D+00
1.5.2
Résolution d’équations non linéaires
La résolution d’équations non linéaires se fait par la commande fsolve. La fonction dont on
cherche les zéros est d’abord définie comme fonction Scilab (par function ou deff). Le premier
argument de fsolve est la valeur initiale destinée à initialiser l’algorithme de résolution, le second
la fonction :
-->function y=f(x),y=x-cos(x),endfunction;x=fsolve(0,f)
x =
0.7390851
-->cos(x)-x
ans =
0.
1.5.3
Équations différentielles
La résolution d’équations différentielles ordinaires se fait par la fonction ode (Ordinary Differential Equation). La commande de base pour résoudre l’équation différentielle y ′ = f (t, y) est
de la forme y=ode(y0,t0,t,f), où y0 est la donnée initiale, t0 l’instant initial, t le vecteur des
instants auxquels on veut obtenir la solution et f la fonction Scilab définissant le second membre
(attention : f doit nécessairement être définie comme fonction de t et y, même si l’équation est
de la forme y ′ = g(y)). Pour résoudre numériquement l’équation y ′′ + y = 0, avec y(0) = 1,
y ′ (0) = 0, on peut donc écrire :
function y1=f(t,y),y1=[0 -1;1 0]*y,endfunction;
t=linspace(0,2*%pi);y=ode([1;0],0,t,f);
//vérification:
norm(y(1,:)-cos(t))
ans =
0.0000009
1.5.4
Polynômes
Scilab possède un type polynôme. On définit un polynôme soit par ses racines (comportement par
défaut), soit par ses coefficients. L’indéterminée est entrée sous forme de chaîne de caractères.
Ainsi les deux commandes P=poly([1 2],’s’) et Q=poly([2 -3 1],’s’,’c’) définissent le
même polynôme (s − 1)(s − 2) = s2 − 3s + 2.
La variable prédéfinie %s représente le polynôme élémentaire s :
poly(0,’s’)==%s
ans =
T
Les racines s’obtiennent par la fonction roots, les coefficients par coeff.
L’addition, la multiplication, la multiplication par un scalaire utilisent les symboles ordinaires.
L’évaluation en un point ou la composition se font par la fonction horner. Si A est une matrice,
poly(A,’t’) est le polynôme caractéristique de A.
Le script suivant représente sur un même graphique la première bissectrice, le graphe sur
l’intervalle [0, 1] de la fonction génératrice g d’une loi discrète sur {0, 1, 2, 3} ainsi que celui de
ses itérées successives, et résoud l’équation g(s) = s sur ce même intervalle, d’abord en utilisant
la commande fsolve, puis en entrant la fonction génératrice sous forme d’un polynôme (pour
l’interprétation d’un tel programme, voir la section 5.2.3) :
14
loi=[0.2 0.4 0.2 0.2];
function y=g(t)
y=loi*t^(0:length(loi)-1)’;
endfunction;
t=linspace(0,1);
y=t;
for k=1:10
plot2d(t,y,style=k);
y=feval(y,g);
end;
function y=gg(t)
y=g(t)-t;
endfunction;
q=fsolve(0,gg)
1.0
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.0
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
pg=poly(loi,’s’,’c’);fg=poly(0,’s’);
qq=roots(fg-pg);
for k=1:10
plot2d(t,horner(fg,t),style=k);
fg=horner(pg,fg);
end;
disp(qq);
1.6
Commandes graphiques de base
Les possibilités graphiques de Scilab sont importantes. Nous n’indiquerons ici que quelques commandes de base. Pour les autres, se reporter à l’aide en ligne, rubrique Graphics.
1.6.1
Courbes planes et nuages de points
La commande de base pour tracer des courbes planes est plot2d. Les variantes plot2d2 et
plot2d3 permettent de tracer des courbes en escalier ou des diagrammes en bâtons.
Cette commande prend en arguments les vecteurs des abscisses et des ordonnées d’une suite de
points et représente la ligne brisée joignant ces points. Si le nombre de points est suffisant, on
peut ainsi représenter le graphe d’une fonction :
x=linspace(0,%pi);plot2d(x,sin(x));
De nombreux arguments facultatifs permettent de règler l’affichage (couleur, échelle, axes . . .),
d’ajouter un titre (xtitle) ou des légendes (legends) : consulter à ce propos l’aide en ligne.
La commande square permet d’obtenir directement une échelle isométrique (par défaut, Scilab
représente un cercle comme une ellipse : t=linspace(0,2*%pi);plot2d(cos(t),sin(t));).
Si on veut représenter plusieurs courbes sur le même graphique, on donne en arguments de
plot2d deux matrices x et y à n lignes et nc colonnes, où n est le nombre de points de chaque
courbe et nc le nombre de courbes :
x=linspace(0,%pi);plot2d([x’,x’],[sin(x’),cos(x’)])
Pour représenter un nuage de points (ou une courbe dont les points ne sont pas reliés entre eux),
il faut donner un paramètre style=-n, où n est un entier entre 1 et 10, qui représente la marque
utilisée pour représenter chaque point.
Il existe aussi une commande plot, dont la syntaxe est plus souple. Elle permet de représenter
directement le graphe d’une fonction en donnant son nom, ou de choisir style et couleur de
représentation par des paramètres simples. Par exemple :
15
xy=[3 -1;-1 2]*rand(2,100,’n’);
plot(xy(1,:),xy(2,:),’or’)
représente le nuage de points dont les coordonnées sont données dans la matrice xy, chaque point
étant représenté par un petit cercle (’o’) de couleur rouge (’r’).
1.6.2
Courbes paramétrées et surfaces en dimension 3
La commande de base pour représenter une surface est plot3d. Dans sa version la plus simple,
la surface d’équation z = f (x, y) est obtenue en entrant les intervalles de définition discrétisés
de x et y, de longueurs respectives n et m, et une matrice z à n lignes et m colonnes donnant
les valeurs de la fonction en les points de la grille ainsi définie :
x=linspace(-%pi,%pi,40);
y=linspace(-%pi/2,%pi/2,20);
z=cos(x)’*sin(y);
plot3d(x,y,z);
Pour représenter une courbe paramétrée dans l’espace, il faut utiliser la commande param3d ou
param3d1.
En particulier, pour représenter un nuage de points dans R3 , on utilise la commande param3d1
avec un argument de couleur négatif :
n=1000;
xyz=[2 1 0;1 3 0;0 0 1]*rand(3,n,’n’);
param3d1(xyz(1,:),xyz(2,:),list(xyz(3,:),-ones(1,n)));
1.6.3
Fenêtres et sous-fenêtres graphiques
On efface le contenu d’une fenêtre graphique par la commande clf(). Cela évite de superposer
un graphique à un graphique déjà existant (par défaut, Scilab superpose le nouveau graphique
au précédent, en réajustant éventuellement l’échelle). La commande show_window() force la
fenêtre à apparaître au premier plan.
On peut créer une nouvelle fenêtre graphique par la commande xset(’window’,n), où n est le
numéro de la fenêtre que l’on veut créer. Si la fenêtre numérotée n existe déjà, elle devient la
fenêtre graphique courante.
La commande la plus simple pour diviser une fenêtre graphique en plusieurs sous-fenêtres est
subplot. La commande subplot(mnp) (ou subplot(m,n,p)), où m, n et p sont trois entiers
(p ≤ mn) divise la fenêtre graphique en mn sous-fenêtres de même taille (m lignes et n colonnes)
et situe le dessin courant dans la p-ième de ces fenêtres (numérotées par ligne, puis colonne).
La commande xsetech permet plus de souplesse, mais a une syntaxe un peu plus compliquée.
1.7
Quelques conseils
– Nommez systématiquement vos variables en utilisant des noms facilement identifiables (pour
vous d’abord, et pour ceux qui liront vos programmes ensuite). Il est bien plus facile (et
beaucoup plus sûr) de modifier un paramètre (par exemple le nombre de simulations) qui a
reçu un nom que de modifier dans tout le programme la valeur de ce paramètre à chacune de
ses occurences.
– Initialisez toujours les vecteurs et les matrices : la commande :
16
n=100000;
x=zeros(1,n);
timer();for i=1:n,x(i)=i;end;timer()
ans =
0.421875
s’exécute beaucoup plus rapidement que la commande :
n=100000;
timer();for i=1:n,y(i)=i;end;timer()
ans =
68.828125
et donne le même résultat (naturellement aucune de ces commandes n’est ici à recommander :
trouvez la bonne. . .). Ensuite, la première permet de contrôler la taille du résultat (un vecteur
ligne, alors que la seconde fournit un vecteur colonne). Enfin, et surtout, si le vecteur x est
déjà défini et de longueur supérieure à n, la commande
for i=1:n x(i)=i;end;
ne modifie que les n premières composantes de x, et laisse les suivantes en place, ce qui constitue
une source fréquente d’erreur.
– Indentez le contenu des boucles si elles contiennent plusieurs instructions imbriquées, ce qui
rend la structure du programme plus lisible.
1.8
Exercices
Exercice 1.1. Ecrire un vecteur aléatoire de 10 réels. Réécrire ce vecteur dans l’ordre inverse.
Exercice 1.2. Ecrire un vecteur ligne à 10 éléments dont les éléments sont successivement +1 et -1.
Ecrire un vecteur ligne aléatoire à 10 éléments, dont les éléments sont indépendamment +1 et -1 avec
équiprobabilité.
Exercice 1.3. Ecrire une matrice aléatoire 4 × 4, puis la matrice obtenue en remplaçant la première
ligne par la dernière.
Exercice 1.4. Ecrire une matrice carrée aléatoire d’ordre 5 à coefficients ±1, puis la matrice obtenue en
remplaçant les éléments diagonaux de cette matrice par des zéros.
Exercice 1.5. Soit a le vecteur ligne a = (1, 2, 3, 4) et b le vecteur ligne b = (1, 3, 5, 7). Ecrire la
matrice de terme général ai bj .
Plus généralement, étant donné un vecteur ligne et un entier n, écrire la matrice à n lignes toutes égales
au vecteur donné. Idem en remplaçant ligne par colonne.
Exercice 1.6. Ecrire une matrice aléatoire A à 3 lignes et 5 colonnes, puis les matrices tAA et A tA.
Comparer les spectres de ces deux matrices.
Exercice 1.7. Soit A une matrice 5 × 5. Multiplier les colonnes de A respectivement par 1, 2, 3, 4,
5. Proposer plusieurs solutions. Idem pour les lignes. Remplacer la deuxième ligne par la somme de la
première et de la dernière. Calculer le déterminant, puis le rang de la matrice obtenue.
Exercice 1.8. Écrire une fonction dif réciproque de la fonction cumsum agissant sur les vecteurs.
√
nn e−n 2πn
Exercice 1.9. Écrire la suite des quotients qn =
de l’approximation de n! par la forn!
mule de Stirling
par
la
vraie
valeur
n!
pour
n
=
1,
.
.
.
,
1000.
Idem
avec l’approximation de n! par
√
1
.
nn e−n 2πn 1 +
12 n
Exercice 1.10.
Écrire des fonctions calculant les nombres d’arrangements A(n, p) et les nombres de
n
combinaisons
de p objets parmi n :
p
– en utilisant la fonction factorial ;
– en utilisant la fonction gamma ;
17
– en utilisant la fonction gammaln (logarithme de la fonction gamma).
Discuter les avantages et les inconvénients de ces méthodes. Ces fonctions peuvent-elles prendre comme
arguments des vecteurs ?
Exercice 1.11. Écrire une fonction renvoyant les n+1 premières lignes du triangle de Pascal (complétées
par des 0 pour apparaître sous forme de matrice carrée).
Exercice 1.12. Écrire une fonction renvoyant la liste de tous les nombres premiers inférieurs ou égaux
à son argument en utilisant la méthode du crible d’Eratosthène.
π(x) ln(x)
Représenter graphiquement la fonction x 7→
, où π(x) est le nombre de nombres premiers
x
inférieurs ou égaux à x.
18
Chapitre 2
Fonctions de base pour les probabilités
et les statistiques
2.1
Générateurs aléatoires
Scilab dispose de deux générateurs de nombres pseudo-aléatoires : un générateur de base rand
et un générateur plus sophistiqué grand.
2.1.1
Le générateur rand
La commande x=rand(n,m) renvoie une matrice n × m dont les coefficients sont des nombres
pseudo-aléatoires indépendants uniformément distribués sur l’intervalle [0, 1]. Si A est une matrice
n × m, rand(A) équivaut à rand(n,m). On peut également obtenir des nombres suivant la loi
normale réduite par la commande x=rand(n,m,’n’). On peut, par la commande rand(’n’),
modifier le comportement par défaut de manière à obtenir systématiquement des nombres suivant
cette loi normale ; on revient au comportement par défaut par la commande rand(’u’). L’état
de ce paramètre est obtenu par la commande rand(’info’).
Le générateur rand est un générateur congruentiel linéaire de paramètres a = 843314861, c =
453816693, m = 231 , ce qui signifie que la suite xn des nombres renvoyés par la commande
rand est de la forme xn = un /m, où la suite un d’entiers satisfait à la relation de récurrence
un+1 ≡ aun + c (mod m), la valeur initiale (la « graine ») u0 étant 0 au démarrage de Scilab. On
peut obtenir la valeur courante un de la graine par la commande rand(’seed’) et changer la
valeur de cette graine par la commande rand(’seed’,k). Cette commande est utile pour répéter
à l’identique un tirage aléatoire et pouvoir ainsi contrôler ses résultats.
2.1.2
La fonction grand
La commande grand permet de simuler directement la plupart des lois usuelles. Elle fait appel
à un générateur beaucoup plus sophistiqué (en fait, elle permet même d’utiliser différents générateurs très performants), ce qui constitue une raison supplémentaire de l’utiliser. On peut ainsi
simuler des lois uniformes, des lois normales uni ou multidimensionnelles, des lois géométriques,
des lois exponentielles, des lois gamma, des lois bêta, des lois du χ2 , des lois uniformes sur un
intervalle de réels ou d’entiers, . . . Elle permet également de simuler l’évolution de chaînes de
Markov à espace d’états fini, ainsi que de générer des permutations aléatoires.
Pour plus de détails et pour les différents paramètres permettant d’obtenir ces lois, consulter
l’aide de la rubrique grand, dans le chapitre Fonctions de distributions statistiques.
Elle ne permet pas de simuler directement une loi arbitraire sur un ensemble fini (on peut
cependant simuler une chaîne de Markov dont la matrice de transition a toutes ses lignes égales,
19
ou utiliser une loi multinomiale). Pour simuler une telle loi p = (p1 , . . . , pr ) sur l’ensemble
{1, . . . , r}, où r est un entier et (p1 , . . . , pr ) une famille de réels positifs de somme 1, on peut
définir sa propre fonction. Par exemple :
function x=drand(m,n,p)
//matrice mxn de nombres pseudo-aléatoires de loi p sur [1,...,length(p)]
cp=cumsum(p);
y=rand(m,n);// ou : y=grand(m,n,’def’)
x=ones(y);
for k=1:length(p)-1,
ind=find(y>cp(k));
x(ind)=x(ind)+1;
end;
endfunction;
Si p est une loi sur un ensemble fini {x1 , . . . , xr } et non pas sur {1, . . . , r}, on en obtient un
échantillon de taille n en écrivant x(drand(1,n,p)), où x est le vecteur x1 , . . . , xr .
2.1.3
2.1.3.1
Simulation de lois quelconques
Inversion de la fonction de répartition
On sait que si F est une fonction de répartition sur R et G la fonction (appelée pseudo-inverse
de F ) de ]0,1[ dans R définie par :
G(x) = sup{y ∈ R | F (y) < x} = inf{y ∈ R | F (y) ≥ x} ,
la variable aléatoire G(U ), où U est une variable aléatoire de loi uniforme sur [0, 1], admet pour
fonction de répartition F .
On peut donc ainsi simuler une variable aléatoire de fonction de répartition F quelconque, à
condition toutefois que la fonction G ne soit pas trop difficile à implémenter. C’est en fait cette
méthode qui a permis de simuler une variable aléatoire discrète à valeurs dans {1, . . . , r} (la
fonction de répartition F était dans ce cas en escalier, ainsi que G).
En particulier, si F est une bijection d’un intervalle I de R sur ]0, 1[, la fonction G n’est autre
que la bijection réciproque de F . C’est le cas dans les exemples qui suivent :
Exemple : loi exponentielle Une variable aléatoire réelle suit la loi exponentielle de paramètre λ > 0 si elle admet la densité λe−λx sur ]0, +∞[. Sa fonction de répartition F (x) = 1−e−λx
1
définit une bijection de ]0, +∞[ sur ]0, 1[ dont la bijection réciproque est G(y) = − ln(1 − y).
λ
1
1
La variable aléatoire − ln(1 − U ) (ou encore − ln(U ), puisque U et 1 − U ont même loi), où
λ
λ
U suit la loi uniforme sur ]0, 1[, suit donc la loi exponentielle de paramètre λ. Pour simuler un
échantillon de cette loi, on peut donc utiliser indifféremment les commandes :
lambda=2;n=1;m=1000;
x=-log(grand(n,m,’def’))/lambda;
ou
x=grand(n,m,’exp’,1/lambda)
cette loi étant déjà préprogrammée dans Scilab (attention : le paramètre à entrer est la
1
moyenne de la loi, i.e. , et non λ).
λ
20
Exemple : loi de Cauchy Une variable aléatoire réelle suit la loi de Cauchy de paramètre c >0
1
x
c
1 1
si elle admet la densité
sur R. Sa fonction de répartition est F (x) = + arctan
.
2
2
π c + x
2 π
c
1
La variable aléatoire c tan π(U − ) (ou, plus simplement, c tan(πU )), où U suit la loi uni2
forme sur ]0, 1[, suit donc la loi de Cauchy de paramètre c.
La loi de Cauchy de paramètre 1 est aussi la loi du quotient de deux variables aléatoires gaussiennes réduites indépendantes, ce qui fournit une autre façon de simuler cette loi. Les deux
commandes
n=10000;x=tan(%pi*rand(1,n));
et
n=10000;x=rand(1,n,’n’)./rand(1,n,’n’);
fournissent donc toutes deux un échantillon de cette loi.
2.1.3.2
La méthode de rejet
Soit f une densité de probabilité bornée et à support borné : f est nulle en-dehors d’un intervalle
[a, b] et majorée par un réel M . Soit (Yn )n≥1 une suite indépendante de variables aléatoires de
loi uniforme sur [a, b] et (Un )n≥1 une suite indépendante (et indépendante de la précédente) de
variables aléatoires de loi uniforme sur [0,1]. On montre alors que la variable aléatoire T à valeurs
dans N ∪ {+∞} définie par
f (Yn )
T = inf{n ≥ 1 | Un ≤
}
M
est presque sûrement finie et suit une loi géométrique et que la variable aléatoire réelle X = YT
suit la loi de densité f et est indépendante de T . La loi de X est la loi conditionnelle de Y
f (Y )
sachant U ≤
.
M
Ce résultat permet de simuler une variable aléatoire admettant la densité f : on tire Y suivant
la loi uniforme sur [a, b], U suivant la loi uniforme sur [0, 1], on accepte Y comme valeur de X si
1
f (Y )
, sinon on rejette Y et on recommence. La probabilité d’accepter Y est α =
.
U≤
M
M (b − a)
On a donc intérêt à prendre M le plus petit possible.
En pratique, si on veut obtenir un échantillon de grande taille n de la loi de densité f , on génère
un échantillon y1 , . . . , ym de taille m = kn de la loi uniforme sur [a, b], un échantillon u1 , . . . , um
de même taille de la loi uniforme sur [0, 1], avec k un peu supérieur à 1/α, et on conserve les n
f (yk )
premières valeurs yk vérifiant uk ≤
.
M
Plus généralement, si f et g sont deux densités de probabilité sur R, M un réel positif vérifiant
f ≤ M g, (Yn )n≥1 une suite indépendante de variables aléatoires de loi de densité g et (Un )n≥1
une suite indépendante (et indépendante de la précédente) de variables aléatoires de loi uniforme
sur [0,1], la variable aléatoire T définie par
f (Yn )
T = inf n ≥ 1 | Un ≤
M g(Yn )
est presque sûrement finie et X = YT suit la loi de densité f . On peut ainsi simuler une variable
aléatoire de densité f si l’on sait simuler une variable aléatoire de densité g. On remarque que
M ≥ 1 et qu’on a ici encore intérêt à prendre M le plus petit possible.
Le résultat est encore valable si f et g sont des densités de probabilité sur Rd . En particulier,
pour simuler une variable aléatoire de loi uniforme sur un domaine compact A de Rd , il suffit de
simuler une variable aléatoire Y de loi uniforme sur un pavé contenant A. On accepte Y comme
valeur si Y appartient à A et on la rejette sinon.
21
Simulation de lois conditionnelles Plus généralement, si A est un événement de probabilité
P(A) > 0 lié à une certaine expérience aléatoire et si on veut simuler sous la probabilité conditionnelle P( · | A) une variable aléatoire dépendant de cette expérience, on effectue une suite de
tirages successifs sous la probabilité P et on conserve les tirages pour lesquels l’événement A est
réalisé.
Exemple : une propriété de la loi de Pareto Soit X une variable aléatoire réelle admettant
2
1
la densité 3 sur [1, +∞[. La fonction de répartition FX (x) = 1 − 2 de X s’inverse aisément. Il
x
x
1
1
√
√
en résulte que X a même loi que
, ou encore que
, où U suit la loi uniforme sur [0, 1].
1−U
U
Une propriété remarquable d’une telle variable est que, pour tout réel b ≥ 1, E(X | X ≥ b) = 2b,
ou encore E(X − b | X ≥ b) = b. On peut vérifier cette propriété en simulant un échantillon de
grande taille de cette loi et en ne conservant que les valeurs supérieures à b :
n=1000000;x=1 ./sqrt(rand(1,n));mean(x),mean(x(x>2))
ans =
1.9996072
ans =
4.0023543
2.1.3.3
Mélange de lois
Les mélanges de lois apparaissent de façon assez naturelle. Considérons par exemple un système
constitué de r serveurs en parallèle ; on se connecte sur le k-ième serveur avec une probabilité pk
r
X
pk = 1) et le temps de service sur ce serveur suit une loi exponentielle de paramètre λk (et
(
1
donc d’espérance µk = 1/λk ). On se propose de déterminer la loi du temps de service.
Pour modéliser cette situation avec r = 2, on peut utiliser le script suivant :
//melange de lois
N=5000;
p=0.7;
X=grand(1,N,’bin’,1,p);
//muk: esperance de Yk
mu1=3;
mu2=1;
Y1=grand(1,N,’exp’,mu1);
Y2=grand(1,N,’exp’,mu2);
Z=X.*Y1 +(1-X).*Y2;
Si on ne s’intéresse qu’à l’échantillon dans son ensemble, et non pas à l’ordre d’apparition des
individus, on pourrait tirer d’abord le nombre d’individus de chaque espèce en utilisant une loi
multinomiale, puis réunir les échantillons obtenus :
y=grand(1,’mul’,nb,p(1:$-1)’)
//nb est la taille de l’échantillon
//p la loi de probabilité des types (vecteur ligne)
x=[];
for k=1:size(y,’r’)
x=[x,grand(1,y(k),’exp’,mu(k))];
//mu vecteur des espérances des lois de Poisson
end;
Si on veut un vrai échantillon, on peut écrire :
22
y=grand(nb,’mul’,1,p(1:$-1)’);
for i=1:size(y,’r’)
y(i,:)=y(i,:).*grand(1,nb,’exp’,mu(i));
end;
x=sum(y,’r’);
2.2
2.2.1
Représentation de lois
Représentation de lois discrètes
Une loi discrète sur une partie finie de R peut se représenter par un diagramme en bâtons ou par
un diagramme en barres. On dispose pour cela des commande plot2d3 et bar :
x=binomial(0.6,20);
subplot(121);
plot2d3(0:20,x);
subplot(122);
bar(0:20,x)
2.2.2
Représentation de lois à densité
Pour représenter graphiquement la densité d’une loi à densité sur R, il suffit d’utiliser la
commande plot2d.
On peut ainsi vérifier que la loi binomiale de paramètres n et p est proche de la loi normale de
mêmes moyenne et variance si n est grand et p et 1 − p pas trop petits :
x=binomial(0.6,20);
plot2d3(0:20,x,style=5);
x1=linspace(0,20);m=12;v=4.8;
plot2d(x1,exp(-(x1-m).^2/2/v)/sqrt(2*%pi*v),style=2);
23
0.20
0.18
0.16
0.14
0.12
0.10
0.08
0.06
0.04
0.02
0.00
0
2
4
6
8
10
12
14
16
18
20
Pour représenter la fonction de répartition d’une loi à densité, on peut intégrer numériquement
cette densité. Mais la plupart des fonctions de répartition classiques sont préprogrammées (voir
la rubrique Fonctions de distributions statistiques de l’aide). Les commandes associées
commencent toutes par cdf (Cumulative Distribution Function) : cdfbet (lois bêta), cdfnor (lois
normales),. . . Le premier argument en entrée est la chaîne de caractères ’PQ’ si on veut évaluer
la fonction de répartition elle-même. On peut ainsi tracer le graphe de la fonction de répartition
de la loi normale réduite :
x=linspace(-3,3);
y=cdfnor(’PQ’,x,zeros(x),ones(x));
plot2d(x,y)
ou de la loi bêta de paramètres 1 et 3 :
x=linspace(-3,3);
y=cdfbet(’PQ’,x,1-x,ones(x),3*ones(x));
plot2d(x,y)
1.0
1.0
0.9
0.9
0.8
0.8
0.7
0.7
0.6
0.6
0.5
0.5
0.4
0.4
0.3
0.3
0.2
0.2
0.1
0.1
0.0
0.0
−3
−2
−1
0
1
2
3
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
On peut aussi, à partir de la fonction de répartition, reconstituer numériquement la densité si
celle-ci est suffisamment régulière :
x=-3:0.01:3;
y=cdfnor(’PQ’,x,zeros(x),ones(x));
dy=100*(y(2:$)-y(1:$-1));
plot2d(x,y);
24
2.2.3
Quantiles
Les commandes cdf* permettent également d’inverser les fonctions de répartition et ainsi de
déterminer les quantiles des lois usuelles. Il faut pour cela donner comme premier argument en
entrée la chaîne de caractères ’X’. Par exemple, pour déterminer le réel x tel que P(|X| > x) = α,
i.e. tel que P(|X| ≤ x) = 1 − α, pour une variable aléatoire réelle X normale réduite, il suffit
d’écrire :
-->alpha=0.05;x=cdfnor(’X’,0,1,1-alpha/2,alpha/2)
x =
1.959964
Ces quantiles seront particulièrement utiles dans la recherche d’intervalles de confiance.
2.3
Echantillons
Un échantillon de taille n d’une variable aléatoire X (ou d’une loi PX ) est une suite X1 , . . . , Xn
de n variables aléatoires indépendantes de même loi que X (ou de loi PX ). On aura souvent
tendance par la suite à appeler également échantillon de cette variable aléatoire (ou de cette loi)
la suite x1 = X1 (ω), . . . , xn = Xn (ω) des valeurs prises par cette suite de variables aléatoires.
2.3.1
Moyenne, variance, covariance empiriques
n
1X
xi d’un échantillon (x1 , . . . , xn ) est donnée par la fonction
n
i=1
mean : mean(x) donne le même résultat que sum(x)/length(x).
n
1 X
(xi − x̄)2 de cet échantillon est donnée par variance(x) (AttenLa variance empirique
n−1
i=1
tion : il s’agit de l’estimateur sans biais de la variance, d’où le facteur n − 1 et non n).
La covariance empirique d’une série statistique à deux variables (xi , yi )i=1,...,n est donnée par
corr(x,y,1). On peut vérifier que variance(x)=n*corr(x,x,1)/(n-1) :
La moyenne empirique x̄ =
-->n=5;x=rand(1,n,’n’);y=rand(x,’n’);
-->corr(x,x,1),variance(x)
ans =
0.6437903
ans =
0.8047378
2.3.2
Répartition en classes : les fonctions dsearch et tabul
Pour analyser et visualiser rapidement les propriétés d’un échantillon d’une variable aléatoire
réelle (discrète ou continue), on est souvent amené à regrouper ses valeurs par classes. La fonction
dsearch (dichotomic search) est là pour cela. La fonction tabul remplit le même rôle dans le
cas d’un échantillon d’une loi discrète : elle donne les valeurs distinctes prises par la variable et
les fréquences d’apparition de ces valeurs.
-->x=floor(5*rand(1,10))
x =
2.
3.
3.
0.
2.
-->[ind,occ]=dsearch(x,0:2:4)
occ =
6.
4.
1.
1.
25
1.
4.
3.
ind =
1.
2.
2.
1.
1.
1.
-->[ind,occ]=dsearch(x,0:2:4,’d’)
occ =
1.
2.
1.
ind =
2.
0.
0.
1.
2.
0.
-->tabul(x)
ans =
4.
1.
3.
3.
2.
2.
1.
3.
0.
1.
2.3.3
1.
1.
2.
2.
0.
0.
3.
0.
Représentations graphiques
Pour visualiser les propriétés d’un échantillon d’une loi réelle et tenter d’identifier cette loi, on
dispose de plusieurs possibilités : l’histogramme de l’échantillon est analogue au diagramme en
bâtons de la loi si cette loi est discrète et permet d’approcher la densité si cette loi en admet
une ; le graphe de la fonction de répartition empirique permet dans tous les cas d’approcher la
fonction de répartition de la loi théorique.
2.3.3.1
Histogrammes
L’histogramme d’un échantillon est un diagramme constitué de barres verticales juxtaposées,
chacune de ces barres représentant le nombre de termes de l’échantillon appartenant à une classe
donnée. Pour représenter un histogramme d’un échantillon d’une loi réelle, on commence donc par
répartir cet échantillon en classes, chacune de ces classes correspondant aux valeurs appartenant
à un certain intervalle de R, et on représente cette classe par un rectangle vertical dont l’aire est
proportionnelle à l’effectif de la classe. On normalise souvent ces aires de façon à ce que l’aire
totale soit égale à 1 (comme l’aire sous la courbe représentative d’une densité de probabilité).
La commande histplot permet de tracer directement un tel histogramme. Son premier argument
est soit un entier (nombre de classes) soit un vecteur dont les composantes donnent les limites
des classes. Son second argument est le vecteur x = (x1 , . . . , xn ) des données ; on peut aussi
ajouter des arguments de style comme dans plot2d.
// melange de lois normales
N=5000;
p=0.7;
X=grand(1,N,’bin’,1,p);
//faire varier les paramètres
Y1=grand(1,N,’nor’,0,1);
Y2=grand(1,N,’nor’,4,1);
Z=X.*Y1 +(1-X).*Y2;
histplot(100,Z);
function y=f(x) // la densité du mélange
y=(p/sqrt(2*%pi))*exp(-x.^2/2)+((1-p)/sqrt(2*%pi))*exp(-(x-4).^2/2);
endfunction;
26
u=linspace(min(Z),max(Z),200);
plot2d(u,f(u),5,"000");
legends([’histogramme’;’densite théorique’],[1,5],2);
xtitle(’mélange de deux gaussiennes’);
mélange de deux gaussiennes
0.35
histogramme
densite théorique
0.30
0.25
0.20
0.15
0.10
0.05
0.00
−4
−2
0
2
4
6
8
Si le premier argument est un entier (nombre de classes), les classes sont de longueurs égales, la
limite inférieure de la première classe est le minimum min(x) des données et la limite supérieure
de la dernière le maximum max(x) des données. La commande histplot(p,x) équivaut donc à
histplot(linspace(min(x),max(x),p+1),x).
Si le premier argument est un vecteur (a1 , a2 , . . . , ap+1 ), l’histogramme est obtenu en déterminant le nombre de données dans chaque classe Ci (i = 1, . . . , p), où la première classe C1 est
égale à l’intervalle fermé [a1 , a2 ] et les classes suivantes Ci aux intervalles semi-ouverts ]ai , ai+1 ].
Ni
Les rectangles de base [ai , ai+1 ] (i = 0, . . . , p) et de hauteur
, où Ni est le nombre
N (ai+1 − ai )
de données xk appartenant à la classe Ci et N le nombre total de données (N=length(x)), sont
alors dessinés. L’histogramme est ainsi normalisé : si a1 ≤ min(x) ≤ max(x) ≤ ap+1 , la somme
des aires des rectangles représentés est égale à 1. On peut changer ce comportement par défaut
en ajoutant l’argument normalization=%f.
Si on veut représenter l’histogramme d’un échantillon de valeurs entières, on a donc intérêt à
préciser les limites (entières) de chaque classe : par exemple, si x est un échantillon d’une loi
portée par {0, 1, 2}, la commande histplot(4,x) divisera l’intervalle [0, 2] en quatre intervalles
de même longueur (si les valeurs 0 et 2 sont prises par l’échantillon), soit [0, 1/2], ]1/2, 1],
]1, 3/2], ]3/2, 2] et la troisième classe sera toujours vide. Il faut faire attention également à
ce que la première classe est fermée : ainsi si x est à valeurs dans {0, . . . , m}, la commande
histplot(0:m,x) mettra les valeurs 0 et 1 dans la même classe. Pour remédier à ce problème,
il suffit par exemple d’entrer histplot((-0.5:m+0.5,x) (les rectangles dessinés seront alors
centrés en les valeurs prises).
Si on représente ainsi un échantillon x = (x1 , . . . , xN ) de grande taille d’une loi admettant
N
1
1 X
une densité continue f , la valeur
1{ai <xk ≤ai+1 } de l’histogramme sur l’intervalle
ai+1 − ai N
k=1
27
Z ai+1
1
f (t) dt
ai+1 − ai ai
de f sur cet intervalle. Si N et le nombre p de classes sont suffisamment grands, l’histogramme
sera donc proche du graphe de f .
Vérifions le pour un échantillon d’une loi beta, obtenu par quotient à partir de deux lois gamma :
[ai , ai+1 ] sera proche, d’après la loi des grands nombres, de la valeur moyenne
N=10000;p=50;
x1=grand(1,N,’gam’,2,1);
x2=grand(1,N,’gam’,3,1);
x=x1 ./(x1+x2);
histplot(p,x,style=2);
t=linspace(0,1);
plot2d(t,t.*(1-t).^2/beta(2,3),style=5);
2.0
1.8
1.6
1.4
1.2
1.0
0.8
0.6
0.4
0.2
0.0
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Pour représenter la densité, on a entré ici la vraie valeur de f . Si cette densité a une expression
compliquée, on peut aussi utiliser la dérivée numérique approchée de la fonction de répartition
pour la dessiner. Par exemple ici :
t=linspace(0,1);
y=cdfbet(’PQ’,t,1-t,2*ones(t),3*ones(t));
plot2d((t(1:$-1)+t(2:$))/2,(y(2:$)-y(1:$-1))/(t(2)-t(1)),style=3);
donne un tracé de la densité indiscernable du précédent.
2.3.3.2
Fonction de répartition empirique
La fonction de répartition empirique d’un échantillon x = (x1 , . . . , xn ) est la fonction de réparn
1X
tition de la loi empirique
δxi de cet échantillon, i.e. la fonction Fn de R dans [0, 1] définie
n
i=1
par
n
1X
1{xi ≤y} .
Fn (y) =
n
i=1
Si on dispose d’un échantillon de taille n d’une loi inconnue, on peut tracer le graphe de la
fonction de répartition empirique de cet échantillon en ordonnant cet échantillon et en utilisant
la fonction plot2d2. L’exemple suivant tire un échantillon de taille 100 d’une loi normale réduite,
trace le graphe de sa fonction de répartition empirique et la compare à la fonction de répartition
de la loi normale :
28
1.0
0.9
n=100;
x=rand(1,n,’n’);
xx=gsort(x,’g’,’i’);
plot2d2(xx,(1:n)/n);
y=cdfnor(’PQ’,xx,zeros(xx),ones(xx));
plot2d(xx,y,style=3)
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.0
−3
−2
−1
0
1
2
3
Pour obtenir la valeur en u de la fonction de répartition empirique, il suffit d’écrire
sum(x<=u)/length(x) ou length(find(x<=u))/length(x), où x est l’échantillon.
2.3.3.3
Quantiles empiriques
Si on veut construire la pseudo-inverse de la fonction de répartition empirique, et ainsi déterminer
les quantiles empiriques, on peut définir la fonction suivante :
function y=Q(p,x)
//x est l’échantillon
//p le vecteur des points de ]0,1] où l’on veut calculer la fr empirique
n=length(x);
x=gsort(x,’g’,’i’);
//on ordonne l’échantillon
y=x(n*p);
endfunction;
x=rand(1,1000,’n’);p=0.01:0.01:1;plot2d(Q(p,x),p)
On utilise ici le fait que Scilab remplace automatiquement les indices n ∗ p par leur partie entière
(il faut cependant que cette partie entière appartienne à [1, n], où n est la taille de l’échantillon,
sinon on obtient un message d’erreur).
La boîte à outils Stixbox possède une fonction quantile qui évite d’avoir à définir sa propre
fonction.
Application : QQ-plot. On peut tester graphiquement si un échantillon provient d’une loi
donnée en comparant les quantiles empiriques de cet échantillon avec les quantiles de la loi
théorique. On trace la courbe passant les points d’abscisses les quantiles théoriques et d’ordonnées
les quantiles empiriques. Cette courbe devrait être une droite si l’adéquation était totale. On peut
tracer sur la même figure la droite passant par les quartiles pour vérifier.
n=1000;
r=rand(1,n,’n’);
p=0.05:0.05:0.95;
x=quantile(r,p);
y=cdfnor(’X’,zeros(p),ones(p),p,1-p);
plot2d(x,y,style=-1);
a=(y(15)-y(5))/(x(15)-x(5));b=y(5)-a*x(5);//droite y=ax+b
plot2d(x([1,$]),a*x([1,$])+b,style=2);
29
2.0
1.5
1.0
0.5
0.0
−0.5
−1.0
−1.5
−2.0
−2.0
−1.5
−1.0
−0.5
0.0
0.5
1.0
1.5
2.0
La boîte à outils Stixbox possède une fonction qqplot (quantile to quantile plot) qui compare
ainsi graphiquement les quantiles empiriques de deux échantillons de même taille.
2.4
Exercices
Exercice 2.1. On considère le générateur congruentiel de nombres pseudo-aléatoires suivant. On part
d’une graine u0 , on définit une suite uk à valeurs dans {0, . . . , 2047} par la relation de récurrence :
uk+1 ≡ 1365uk + 1
(mod 2048)
uk
et on pose xk =
.
2048
Montrer que la suite xk est périodique de période 2048. Représenter graphiquement les 200 premiers
termes de cette suite (xk en fonction de k). Etudier la moyenne et la variance empirique d’un échantillon
de longueur 200 de cette loi. Représenter graphiquement xk+1 en fonction de xk pour k variant de 1 à
200. Que pensez-vous d’un tel générateur ?
Exercice 2.2. Générer un échantillon X de taille n d’une loi diffuse classique sur R (normale, exponentielle,. . .) de fonction de répartition F , puis l’échantillon F (X). Représenter graphiquement la fonction
de répartition empirique de cet échantillon. Que constate-t-on ?
Exercice 2.3. Déterminer les valeurs de x telles que P(|X| > x) = α pour α = 0.01, 0.05, 0.1, où X est
une variable aléatoire réelle normale réduite.
Exercice 2.4. Simuler par la méthode de rejet un échantillon de la loi triangulaire sur [−a, a] de densité
+
1
|x|
1−
. Représenter sur une même figure l’histogramme de cet échantillon et la densité de cette
a
a
loi. Indiquer une autre méthode de générer un tel échantillon.
Exercice 2.5. Loi de Pareto : Simuler un échantillon de la loi de Pareto de paramètres α > 0 et a > 0,
αaα
de densité 1+α 1[a,+∞[ (x). Estimer, pour différentes valeurs des paramètres, l’espérance et la variance
x
de cette loi (on pourra, soit étudier la loi de ln(X) pour X suivant cette loi, soit expliciter l’inverse
de sa fonction de répartition)). Représenter sur un même graphique l’histogramme de cet échantillon
et la densité de sa loi. Vérifier la propriété suivante de la loi de Pareto : si X suit la loi de Pareto
αb
, ce qui s’écrit encore
de paramètres α > 1 et a > 0, alors pour tout b ≥ a, E(X | X ≥ b) =
α−1
b
E(X − b | X ≥ b) =
.
α−1
Exercice 2.6. Loi de Weibull : Une variable aléatoire réelle positive X suit la loi de Weibull de paramètre
d’échelle λ > 0 et de paramètre de forme a > 0 si sa fonction de répartition F vaut
a
F (x) = 1 − exp [− (λx) ]
30
pour x ≥ 0 .
Montrer qu’une variable aléatoire suivant une loi de Weibull admet une densité dont on donnera l’expression. Représenter graphiquement cette densité pour diverses valeurs du paramètre a. Calculer l’espérance
d’une variable aléatoire suivant une loi de Weibull. Que peut-on dire d’une loi de Weibull de paramètre
de forme a = 1 ? Pourquoi le paramètre λ est-il appelé paramètre d’échelle ?
Montrer que si une variable aléatoire U suit la loi uniforme sur [0, 1], alors la variable aléatoire X =
1
1/a
[− ln(U )]
suit la loi de Weibull de paramètres λ et a. Utiliser cette propriété pour simuler un
λ
échantillon de grande taille de la loi de Weibull et représenter un histogramme de cet échantillon.
Les lois de Weibull sont souvent utilisées en fiabilité pour modéliser la durée de vie de certains composants.
Elles interviennent également dans la loi des valeurs extrêmes.
Exercice 2.7. La loi de Fréchet de paramètres a > 0 et α > 0 est la loi sur [0, +∞[ de fonction de
répartition exp(−(a/x)α ). Simuler par inversion un échantillon de grande taille de cette loi. Représenter
sur un même graphique la fonction de répartition empirique de cet échantillon et la fonction de répartition
théorique de la loi.
Exercice 2.8. On rappelle que la distance en variation totale de deux lois de probabilité µ et ν sur un
ensemble fini ou dénombrable E est définie par :
dV T (µ, ν) =
1X
|µ({x}) − ν({x})| .
2
x∈E
Evaluez numériquement la distance en variation totale entre la loi de Poisson de paramètre λ et la loi
binomiale de paramètres n et λ/n pour différentes valeurs de n et λ. Représentez graphiquement ces deux
lois sur une même figure, puis sur deux figures juxtaposées.
Exercice 2.9. Loi de Dirichlet
On veut tirer au hasard une loi de probabilité sur un ensemble fini à n éléments. On considère pour
cela une famille indépendante Y1 , . . . , Yn de n variables aléatoires suivant des lois gamma de paramètres
respectifs α1 , . . . αn . Montrer que la somme Y = Y1 + · · · + Yn de ces variables aléatoires suit la loi gamma
Y1
Yn
de paramètre α1 + · · · + αn et que la famille
,...,
suit la loi de Dirichlet de densité
Y
Y
Γ(α1 + · · · + αn ) α1 −1
n −1
p
. . . pα
1∆n (p1 , . . . , pn )
n
Γ(α1 ) + · · · + Γ(αn ) 1
sur le simplexe ∆n = {(p1 , . . . , pn ) | p1 ≥ 0, . . . , pn ≥ 0, p1 + · · · + pn = 1}.
Simuler cette loi dans le cas où tous les αi sont égaux : α1 = · · · = αn = α > 0. Dans ce cas les pi ont,
1
par symétrie, tous la même espérance , mais leur répartition diffère suivant la valeur de α : pour α = 1,
n
on obtient la loi uniforme sur ∆n ; pour α grand, la loi se concentre autour de sa valeur moyenne, tandis
que pour α proche de 0, cette loi se concentre vers le bord du simplexe (typiquement, un petit nombre
des pi sont grands et les autres très petits). Vérifier cette propriété dans le cas n = 3 en représentant
dans le plan le nuage des points (p1 , p2 ) correspondant à un échantillon de taille 1000.
Exercice 2.10. Soit X une variable aléatoire réelle à valeurs dans un intervalle I de R, et F sa fonction
de répartition. On suppose que F réalise une bijection de l’intérieur de I sur l’intervalle ]0, 1[ et on note
F −1 la bijection réciproque. On souhaite simuler une variable aléatoire suivant la loi conditionnelle de X
sachant que X appartient à un sous-intervalle J de I.
1) Proposer une méthode de rejet. La mettre en œuvre dans le cas où X suit la loi normale N (0, 1) et
J =]m, +∞[ pour un réel donné m (on prendra successivement m = 1, m = 3, m = 5 et on évaluera la
probabilité de rejet).
2) On suppose ici J = [m, +∞[ pour un réel donné m ∈ I. Montrer que la variable aléatoire Z =
F −1 (F (m)+(1−F (m))U ), où U est une variable aléatoire de loi uniforme sur ]0, 1[ suit la loi conditionnelle
de X sachant X > m. Expliciter cette variable aléatoire dans le cas où X suit la loi exponentielle de
paramètre λ > 0.
3) Généraliser la méthode précédente au cas où J =]a, b].
4) Proposer une méthode de rejet utilisant une loi exponentielle pour simuler une variable aléatoire réelle
suivant la loi conditionnelle de X sachant X > m, où X est une variable aléatoire de loi N (0, 1) (on
1
2
cherchera deux réels λ et M strictement positifs tels que √ e−x /2 ≤ M λe−λ(x−m) pour tout x > m).
2π
31
Exercice 2.11. Estimer par simulation la probabilité p(n) que le déterminant d’une matrice aléatoire A
d’ordre n dont les coefficients sont des variables aléatoires i.i.d. de loi uniforme sur {−1, 1} soit nul. On
estimera p(n) pour n = 2, . . . , 20 et on tracera la courbe représentative de p(n) en fonction de n.
Estimer par simulation l’espérance de (det A)2 pour n = 2, . . . , 5. Énoncer, puis démontrer une conjecture
sur l’espérance de ce déterminant.
Exercice 2.12. Temps de retour en 0 de la marche aléatoire symétrique simple
Pnsur Z
Soit (Sn )n≥0 la marche aléatoire symétrique simple sur Z issue de 0 : Sn = k=1 Xk , où (Xk )k≥1 est
une suite i.i.d. de variables aléatoires de loi P(Xk = 1) = P(Xk = −1) = 0.5. On montre que√le temps de
2
retour T = inf{n ≥ 1 | Sn = 0} de cette marche en 0 a pour
r fonction génératrice gT (s) = 1 − 1 − s . On
2
de la queue de T quand t tend vers l’infini.
en déduit la loi de T , ainsi que l’équivalent P(T > t) ∼
πt
Illustrer la loi de T par simulation et comparer la valeur exacte de la queue de cette loi à son équivalent.
Exercice 2.13. On désire simuler la marche
Pnaléatoire simple symétrique sur Z conditionnée à revenir en
0 à un instant déterminé. On a donc Sn = k=1 Xk , où (Xk )k≥1 est une suite i.i.d. de variables aléatoires
de loi P(Xk = 1) = P(Xk = −1) = 0.5, et on veut simuler des trajectoires (Sk )0≤k≤2n jusqu’à l’instant
2n sous la probabilité conditionnelle P(· | S2n = 0).
a) Que peut-on penser de la méthode de rejet ? Donner en particulier un équivalent de la proportion de
trajectoires conservées en appliquant cette méthode quand n est grand.
b) Proposer une autre méthode.
c) Traiter le même problème pour une marche aléatoire simple non symétrique (i.e. pour P(Xk = 1) = p,
P(Xk = −1) = 1 − p avec p quelconque dans ]0, 1[).
Exercice 2.14. Mots
Soit (Xn )1≤n≤N une suite aléatoire de 0 et de 1. On cherche à déterminer, pour toute suite finie s de 0
et de 1, la fréquence d’apparition de cette suite dans la suite (Xn )1≤n≤N . Ainsi la suite s = 00 apparaît
trois fois dans la suite 010001100.
1) Ecrire une fonction [n,t]=nbappar(x,s) calculant le nombre n d’apparitions du vecteur s dans le
vecteur x ainsi que l’indice t de la première apparition de s.
2) Ecrire une version vectorialisée de cette fonction permettant de rechercher les apparitions d’une même
suite s dans chaque ligne d’une matrice x de 0 et de 1.
3) Déterminer le nombre moyen d’apparitions de la suite 00, puis de la suite 01 dans une longue suite
aléatoire de 0 et de 1. Simuler ensuite le temps d’attente moyen de la première apparition pour chacune
de ces suites. Que constate-t-on ?
Exercice 2.15. Permutations aléatoires
Le générateur grand permet de simuler des permutations aléatoires par la commande
x=grand(n,’prm’,v) où n est le nombre de permutations souhaité et v le vecteur colonne à permuter ; le résultat x est alors une matrice à n colonnes, chaque colonne représentant une permutation
aléatoire du vecteur v.
Montrer que l’algorithme suivant génère une permutation aléatoire uniformément répartie du vecteur v
de longueur m et écrire une fonction implémentant cet algorithme : pour i = 1, . . . , m − 1, on choisit
aléatoirement un entier r dans [i, . . . , m] et on permute vi et vr .
Tester cette fonction, par exemple en évaluant la moyenne et la variance du nombre de points fixes de la
permutation engendrée.
Exercice 2.16. Parties aléatoires
a) Simuler un tirage uniforme d’une partie à n élements d’un ensemble E à N éléments (1 ≤ n ≤ N étant
des entiers fixés) en utilisant la fonction grand. On supposera ici que l’entier N n’est pas trop grand.
b) Adapter l’algorithme étudié à l’exercice précédent à la simulation d’un tel tirage.
c) Proposer un algorithme basé sur une méthode de rejet dans le cas où N est très grand et n petit par
rapport à N (on pourra par exemple simuler un tirage uniforme de 1000 individus dans une population
de 50 millions d’habitants).
Exercice 2.17. Echantillons ordonnés, statistique de Wilcoxon
Soient x et y deux familles finies de réels supposés tous distincts représentées par des matrices de tailles
quelconques. Expliquez pourquoi la fonction suivante compte le nombre de couples (xi , yj ) vérifiant yj <
xi :
function r=nb(x,y);
n=size(x,’*’);
32
m=size(y,’*’);
[z,k]=gsort([x(:);y(:)],’g’,’i’);
ind=1:n+m;
r=sum(ind(k<=n))-n*(n+1)/2;
endfunction;
On montre que si X = (X1 , . . . , Xn ) et Y = (Y1 , . . . , Ym ) sont deux échantillons d’une même loi continue
sur R, alors la variable aléatoire U comptant le couple d’indices (i, j) tels que Yj < Xi a pour espérance
mn
mn(n + m + 1)
U − E(U )
2
E(U ) =
et pour variance σU
=
et que la loi de
converge vers la loi normale
2
12
σU
N (0, 1) quand n et m tendent vers l’infini. Vérifier cette propriété sur un échantillon d’une loi uniforme
sur [0, 1].
Exercice 2.18. Loi uniforme sur les sphères
a) Proposer diverses méthodes pour tirer un point au hasard uniformément sur la sphère unité S 1 de R2 .
On pourra en particulier tester les méthodes suivantes :
– tirer uniformément sur [0, 2π[ l’angle polaire du point ;
– tirer un point uniformément dans le disque unité en utilisant une méthode de rejet et diviser le vecteur
obtenu par sa norme ;
– tirer un point dans le plan selon la loi de Gauss standard (i.e. centrée et de matrice de covariance I2 )
et diviser le vecteur obtenu par sa norme.
Étudier en utilisant ces méthodes la loi de l’angle géométrique (compris entre 0 et π) de deux vecteurs
unitaires aléatoires indépendants de R2 .
b) Tirer de même des points aléatoires sur la sphère unité S 2 de R3 . Représenter graphiquement un nuage
de 1000 points aléatoires sur cette sphère. Étudier la loi de l’angle géométrique de deux vecteurs unitaires
aléatoires indépendants.
c) Proposer diverses méthodes pour tirer un point uniformément sur la sphère unité de Rd pour d quelconque. Comparer l’efficacité de ces méthodes.
Exercice 2.19. Tri par insertion Le but de cet exercice est d’implémenter un algorithme de tri très
intuitif, mais pas très efficace (le tri par insertion) et d’en étudier la complexité, mesurée par le nombre
moyen de comparaisons effectuées lors du tri d’un vecteur.
On se propose donc de trier dans l’ordre croissant un vecteur donné x = (x1 , . . . , xn ) de nombres réels. On
supposera, pour simplifier, les xk tous différents et, pour évaluer le nombre de comparaisons à effectuer,
leur ordre initial uniformément réparti parmi les n! ordres possibles.
Le tri par insertion consiste à créer un nouveau vecteur x∗ , initialement vide, et à y insérer successivement
les éléments de x en les ordonnant au fur et à mesure. Le vecteur x∗ est donc initialisé par x∗ = (x1 ),
puis, quand les k − 1 premières composantes de x ont été rangées, on insère xk à sa place dans le vecteur
ordonné x∗ = (x∗1 , . . . , x∗k−1 ). Le nombre total Nk de comparaisons à effectuer pour cette insertion est i
si xk occupe le rang i dans (x1 , . . . , xk ) avec i < k, k − 1 si i = k. L’espérance de ce nombre est donc
k
1X
i − 1, de sorte que le nombre total de comparaisons à effectuer est en moyenne
k i=1
n
X
k+1
k=2
2
−
n
n
X
1
n(n + 3) X 1
=
−
.
k
4
k
k=2
k=1
Ecrire un programme implémentant cet algorithme (on définira une fonction retournant le vecteur trié
et le nombre de comparaisons effectuées). Comparer la moyenne empirique du nombre de comparaisons
avec la valeur théorique. Représenter un histogramme du nombre de comparaisons effectuées.
Remarque : si on a des raisons de penser que le vecteur x initial est déjà plus ou moins ordonné, on a
intérêt à effectuer les comparaisons pour placer les xk de la droite vers la gauche, et non de la gauche vers
la droite. Le nombre de comparaisons dans l’algorithme précédent est en effet maximal quand le vecteur
est déjà ordonné par ordre croissant, et minimal quand il est ordonné par ordre décroissant.
33
34
Chapitre 3
Loi des grands nombres, méthode de
Monte-Carlo
3.1
3.1.1
Loi des grands nombres
Vérification graphique
La loi des grands nombres dit que si (Xn )n≥1 est une suite i.i.d. de variables aléatoires réelles
n
1X
Xk tend presque sûrement vers l’espérance commune E(X1 ) des
intégrables, alors Mn =
n
k=1
Xn .
On peut illustrer graphiquement ce résultat pour des suites de variables aléatoires suivant des
lois usuelles en représentant l’évolution de Mn en fonction de n :
n=1000;nbsimul=5;
subplot(121);
x1=rand(n,nbsimul);
mx1=cumsum(x1,’r’)./((1:n)’*ones(1,nbsimul));
plot2d(mx1);
xtitle(’Loi uniforme sur [0,1]’);
subplot(122);
x2=zeros(n,nbsimul);
x2(rand(x2)<0.5)=1;
mx2=cumsum(x2,’r’)./((1:n)’*ones(1,nbsimul));
plot2d(mx2);
xtitle(’Loi de Bernoulli (p=0.5)’);
Loi uniforme sur [0,1]
Loi de Bernoulli (p=0.5)
0.8
1.0
0.9
0.7
0.8
0.7
0.6
0.6
0.5
0.5
0.4
0.4
0.3
0.2
0.3
0.1
0.2
0.0
0
100 200 300 400 500 600 700 800 900 1000
0
35
100 200 300 400 500 600 700 800 900 1000
Par contre, si (Xn )n≥1 est une suite i.i.d. de variables aléatoires réelles non intégrables (E(|Xn |) =
+∞), alors la suite (Mn )n≥1 diverge presque sûrement. On peut illustrer ce résultat en considérant une suite (Xn )n≥1 de variables aléatoires suivant la loi de Cauchy (cette loi est la loi du
quotient X1 /X2 de deux variables aléatoires normales réduites indépendantes) :
Loi de Cauchy
10
8
//loi de Cauchy
x1=rand(n,nbsimul,’n’);x2=rand(x1,’n’);
x=x1./x2;
mx=cumsum(x,’r’)./((1:n)’*ones(1,nbsimul));
plot2d(mx);
xtitle(’Loi de Cauchy’);
6
4
2
0
−2
−4
−6
0
3.1.2
100
200
300
400
500
600
700
800
900
1000
Vitesse de convergence
Var(X1 )
Si les variables aléatoires Xn sont de carré intégrable, la variance de Mn est égale à
et
n
σX1
son écart-type est √ . On peut vérifier cette propriété en représentant graphiquement l’évolution
n
de la variance empirique de Mn sur un grand échantillon :
n=200;
nb=1000;
x=grand(nb,n,’def’);//loi uniforme sur [0,1]
mx=cumsum(x,’c’)./(ones(nb,1)*(1:n));
sigma=sqrt(variance(mx,’r’));
plot2d(1:n,sigma,style=2);
plot2d(1:n,1 ./sqrt(1:n)/sqrt(12),style=5);
3.1.3
Comparaison des bornes dans l’inégalité de Bienaymé-Tchebychev et
dans l’approximation normale
Il résulte de l’inégalité de Bienaymé-Tchebychev que
P(|Mn − E(X1 )| > ε) ≤
Var(X1 )
nε2
pour tout ε > 0.
Cette inégalité permet de donner un intervalle de confiance pour l’estimation de E(X1 ) si la
variance de X1 est connue, ou si on sait la majorer. Par exemple, dans le cas où les Xn suivent
une loi de Bernoulli de paramètre inconnu p, la variance p(1 − p) de X1 est majorée par 1/4. Il
en résulte que
1
P(Mn − ε ≤ p ≤ Mn + ε) ≥ 1 −
4nε2
pour tout ε > 0.
L’inégalité de Bienaymé-Tchebychev est en fait très mauvaise comme on peut le constater : le
programme suivant tire 1000 fois un échantillon de la loi de Bernoulli de paramètre p = 0.5 et
compte le nombre de fois où l’inégalité |Mn − E(X1 )| > ε est vérifiée pour n = 105 et ε = 0.01. :
36
n=1e5;
nb=1000;
epsilon=0.01;
m=zeros(1,nb);
for k=1:nb
x=grand(1,n,’uin’,0,1);
m(k)=mean(x);
end;
sum(abs(m-0.5)>epsilon)/nb
ans =
0.
On constate que, sur 1000 expériences, la borne n’est jamais dépassée, alors que l’inégalité de
Bienaymé-Tchebychev nous apprend simplement que la probabilité qu’elle le soit est inférieure à
1/40.
Le théorème limite central nous donne en fait une bien meilleure approximation, puisqu’il nous
√
apprend que n(Mn − E(X1)) suit asymptotiquement
la loi normale N (0, σX1 ). Il en résulte que
|Mn − 0.5|
√
≥ 1.96 est de l’ordre de 0.05 :
dans l’exemple précédent P 2
n
sum(abs(m-0.5)>1.96/2/sqrt(n))/nb
ans =
0.054
3.2
3.2.1
Convergence des histogrammes et des fonctions de répartition
empiriques
Théorème de Glivenko-Cantelli
Soit (Xn )n≥1 une suite de variables aléatoires réelles i.i.d. de fonction de répartition F . On rapn
1X
pelle que la loi empirique de l’échantillon X1 (ω), . . . , Xn (ω) est la loi de probabilité
δXk (ω) .
n
k=1
La fonction de répartition Fn (ω, ·) de cette loi est appelée fonction de répartition empirique de
l’échantillon. Elle est définie par :
n
Fn (ω, x) =
1X
1{Xk ≤x} (ω) pour x ∈ R .
n
k=1
Il résulte immédiatement de la loi forte des grands nombres que, pour tout réel x, Fn (·, x) tend
presque sûrement vers F (x) quand n tend vers l’infini.
Le théorème de Glivenko-Cantelli affirme que cette convergence est uniforme sur R :
Théorème : Soit (Xn )n≥1 une suite de variables aléatoires réelles i.i.d. de fonction de répartition F et Fn la fonction de répartition empirique de l’échantillon X1 , . . . , Xn . Alors la variable
aléatoire Dn = sup |Fn (·, x) − F (x)| tend presque sûrement vers 0 quand n tend vers l’infini.
x∈R
√
√
Plus précisément, la variable aléatoire nDn = n sup |Fn (x) − F (x)| converge en loi vers une
x∈R
variable aléatoire W suivant la loi de Kolmogorov-Smirnov de fonction de répartition
K(w) =
+∞
X
k −2k2 w2
(−1) e
k=−∞
+∞
X
2 2
(−1)k e−2k w
=1+2
k=1
37
pour w > 0 .
Cette convergence en loi est à la base d’un important test d’adéquation, le test de KolmogorovSmirnov (voir 7.2.2).
La fonction de répartition de la loi de Kolmogorov-Smirnov n’est pas préprogrammée dans le
noyau de Scilab, mais elle est accessible par la commande pks de la boîte à outils Stixbox :
x=linspace(0,2);y=pks(x);
plot(x,y,’b’);
xtitle(’Fonction de répartition de la loi de Kolmogorov-Smirnov’);
Fonction de répartition de la loi de Kolmogorov−Smirnov
1.0
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.0
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
On montre de plus que la loi de Dn est la même pour toutes les variables aléatoires diffuses :
elle ne dépend donc pas de la fonction de répartition F si celle-ci est continue. Vérifions-le pour
un échantillon de la loi uniforme sur [0, 1] et un échantillon de même taille de la loi de Cauchy :
function d=dks(x,F)
//distance de KS de la loi empirique de l’échantillon x à la fr F
xs=gsort(x(:)’,’g’,’i’);
n=length(xs);
Fxs=F(xs);//F doit s’évaluer sur un vecteur
d=max(abs([Fxs-(1:n)/n,Fxs-(0:n-1)/n]));
endfunction;
function y=F1(x),y=x,endfunction;
function y=F2(x),y=0.5+atan(x)/%pi,endfunction;
n=100;
nbsimul=5000;
d1=zeros(1,nbsimul);d2=zeros(d1);
for k=1:nbsimul
x1=rand(1,n);
d1(k)=dks(x1,F1);
x2=rand(1,n,’n’)./rand(1,n,’n’);
d2(k)=dks(x2,F2);
end;
subplot(121);
histplot(20,d1,style=2);
xtitle(’Loi uniforme sur [0,1]’);
subplot(122);
histplot(20,d2,style=5);
xtitle(’Loi de Cauchy’);
Loi uniforme sur [0,1]
Loi de Cauchy
18
18
16
16
14
14
12
12
10
10
8
8
6
6
4
4
2
2
0
0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22
0
0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22
On remarque que pour calculer Dn , il suffit d’évaluer F en les valeurs Xk prises par l’échantillon.
∗ [,
En effet comme F est continue croissante et Fn constante sur chacun des intervalles [Xk∗ , Xk+1
38
où (X1∗ , . . . , Xn∗ ) est l’échantillon (X1 , . . . , Xn ) réordonné par ordre croissant, on a :
Dn = max{ |F (Xk ) − Fn (Xk )|, |F (Xk ) − Fn (Xk −)| | k = 1, . . . , n }
k
k−1
= max{ |F (Xk∗ ) − |, |F (Xk∗ ) −
| | k = 1, . . . , n } .
n
n
3.2.2
Convergence des histogrammes
Si les variables aléatoires Xk admettent une densité continue f , pour tout intervalle [a, b] la pro1[a,b] (X1 ) + · · · + 1[a,b] (Xn )
portion
d’éléments de l’échantillon tombant dans l’intervalle [a, b]
n
Rb
tend vers E(1[a,b] (X1 )) = a f (x) dx. Ce nombre est proche de (b − a)f (x) pour xi n[a, b] si la
longueur de l’intervalle est petite et la densité suffisamment régulière. Il en résulte que l’histogramme normalisé de l’échantillon est proche du graphe de la densité si le nombre de classes est
assez grand.
3.3
Méthode de Monte-Carlo
On appelle méthode de Monte-Carlo toute méthode de calcul numérique consistant à représenter
la valeur qu’on cherche à calculer sous forme d’espérance d’une certaine variable aléatoire et à
estimer cette espérance par simulation. Historiquement, le premier exemple en est attribué à
Buffon, qui a proposé en 1777 une méthode de calcul de π basée sur la simulation d’expériences
répétées (jets d’une aiguille sur des lames de parquet), mais ce n’est qu’avec l’apparition des
ordinateurs que cette méthode a pris son véritable essor.
3.3.1
L’aiguille de Buffon
On lance une aiguille au hasard sur un plan où sont tracées des droites parallèles et équidistantes.
On montre alors facilement que la probabilité pour que l’aiguille rencontre une de ces droites
est p = 2l/πd, où l est la longueur de l’aiguille et d la distance entre les droites, à condition de
supposer l < d, de sorte que l’aiguille ne peut rencontrer au plus qu’une des droites.
En répétant un grand nombre de fois l’expérience, on peut ainsi approcher π par 2lN/nd, où N
est le nombre d’expériences et n le nombre de fois où l’aiguille rencontre une des droites.
Le programme suivant simule cette expérience.
Nombre de lancers: 20 Nombre d’intersections: 13
Approximation de pi: 3.0769231
//une représentation graphique pour vérifier:
39
n=input("Nombre de lancers");
r=rand(3,n);
x=[r(1,:);r(1,:)+cos(2*%pi*r(3,:))];
y=[r(2,:);r(2,:)+sin(2*%pi*r(3,:))];
lx=[-1,-1;2,2];ly=[0,1;0,1];rectangle=[-1,0,2,1];
colors=2*ones(1,n);
cuts=find(((y(2,:)>1)|(y(2,:)<0)));
nbcuts=length(cuts);
colors(cuts)=5*ones(cuts);
xbasc();xselect();
plot2d(lx,ly,strf=’012’,style=[1,1],frameflag=3,axesflag=1,rect=rectangle);
plot2d(x,y,style=colors);
xtitle([" Nombre de lancers: "+string(n)+" Nombre d’’intersections: "+string(nbcuts);
"
Approximation de pi: "+string(2*n/nbcuts)]);
//un calcul plus conséquent:
n=100000;r=rand(3,n);
x=[r(1,:);r(1,:)+cos(2*%pi*r(3,:))];
y=[r(2,:);r(2,:)+sin(2*%pi*r(3,:))];
pi=2*n/(sum((y(2,:)>1)|(y(2,:)<0)));
disp("Approximation de pi pour "+string(n)+" lancers: "+string(pi));
Approximation de pi pour 100000 lancers: 3.1444069
3.3.2
Calcul d’intégrales
Un exemple élémentaire d’application de la méthode de Monte-Carlo consiste à évaluer numériquement une intégrale. L’idée en est
R 1 simple : supposons qu’on cherche à calculer une valeur
numérique approchée de l’intégrale 0 h(x) dx d’une fonction h intégrable sur [0, 1]. On commence par représenter cette intégrale comme l’espérance E(h(U )) d’une fonction d’une variable
aléatoire U de loi uniforme sur [0, 1]. On évalue ensuite cette espérance en simulant un échantillon indépendant de grande taille de la loi de U . La loi des grands nombres nous apprend que
la moyenne des valeurs de h sur cet échantillon converge, quand la taille de l’échantillon tend
vers l’infini, vers la valeur de l’intégrale.
L’avantage de la méthode est qu’elle ne suppose aucune régularité sur la fonction h. Sa converh(X1 ) + · · · + h(Xn )
est de
gence est par contre très lente, puisque l’écart-type de la moyenne
n
1
l’ordre de √ . Il existe bien d’autres méthodes de calcul numérique d’une intégrale ne reposant
n
pas sur l’utilisation du hasard. Ces méthodes convergent beaucoup plus rapidement. On n’utilise donc pas une méthode de Monte-Carlo pour évaluer une intégrale simple. Par contre, si la
dimension de l’espace sur lequel on intègre est grande et la fonction peu régulière, ces méthodes
peuvent se révéler efficaces. En effet, la rapidité de convergence de la méthode ne dépend pas de
la dimension de l’espace sur lequel on intègre.
3.3.2.1
Un exemple en dimension un
R∞
2
On se propose de calculer par une méthode de Monte-Carlo l’intégrale I = 0 e−x | cos(x)| dx.
√
π
X
On remarque que I =
E(| cos( √ )|), où X est une variable aléatoire suivant la loi normale
2
2
N (0, 1), d’où le calcul :
n=100000;//nombre de simulations
40
x=grand(1,n,’nor’,0,1);
y=abs(cos(x/sqrt(2)));
I=sqrt(%pi)*mean(y)/2
Si on veut donner un intervalle de confiance à un niveau de confiance 1 − α donné pour I, il
X
faut connaître ou savoir majorer la variance de Y = | cos( √ )|, puisque l’intervalle de confiance
2
√
√
√
π
[Ȳn − cσY / n, Ȳn + cσY / n], où c est tel que
pour I si on effectue n simulations sera
2
P(Z ∈ [−c, +c]) = 1 − α pour une variable aléatoire Z de loi N (0, 1). On pourrait ici majorer
brutalement σY par 1/4, puisque Y est à valeurs dans [0, 1], mais il est préférable d’estimer la
variance de Y en utilisant l’estimateur sans biais de la variance de l’échantillon et en déduire un
intervalle de confiance :
alpha=0.05;
sigma=sqrt(variance(y))
c=-cdfnor(’X’,0,1,alpha/2,1-alpha/2)
I-sqrt(%pi)*c*sigma/sqrt(n)/2,I+sqrt(%pi)*c*sigma/sqrt(n)/2
sigma =
0.2404235
c =
1.959964
ans =
0.6997564
ans =
0.7023976
L’intégration numérique par Scilab donne :
integrate(’exp(-x^2)*abs(cos(x))’,’x’,0,5)
ans =
0.7011849
3.3.2.2
Réduction de la variance
On voit qu’il importe donc de réduire au maximum la variance des variables aléatoires utilisées
dans la simulation pour réduire l’intervalle de confiance. Diverses techniques existent pour cela :
échantillonnage préférentiel, utilisation de variables négativement corrélées ou de variables de
contrôle, stratification dans l’échantillonnage.
3.3.2.3
Calculs de volumes
La méthode de Monte-Carlo se prête bien au calcul de volumes. Traitons l’exemple suivant : on
tire 5 points au hasard dans le cube unité C = [0, 1]3 de R3 et on se propose de déterminer par
une méthode de Monte-Carlo le volume du complémentaire dans C de la réunion des sphères de
centres ces points et de rayon 1/2.
r=0.5;//rayon des spheres
centres=rand(3,5);//les coordonnees des centres
n=100000;//nombre de points dans la methode de Monte-Carlo
U=rand(3,n);//points aleatoires dans C
X=ones(1,n);//fonction indicatrice du complementaire des spheres
for k=1:5
dist=sum((U-centres(:,k)*ones(1,n)).^2,’r’);
41
X(dist<r^2)=0;
end;
mean(X)
3.4
Exercices
n
Exercice 3.1. Vérifier par simulation que la variance empirique V =
1X
(Xk − X̄)2 (où X̄ =
n
k=1
X1 + · · · + Xn
est la moyenne empirique de l’échantillon) d’un échantillon X1 , . . . , Xn de taille n de
n
n−1
la loi uniforme sur [0, 1] a pour espérance
Var(X1 ). C’est pourquoi il est souvent préférable d’utin
n
1 X
liser la variance empirique modifiée S 2 =
(Xk − X̄)2 qui est un estimateur sans biais de la
n−1
k=1
variance de X1 .
Exercice 3.2. Records : Soient x = (x1 , . . . , xn ) une suite i.i.d. de loi uniforme sur [0,1]. On appelle
record de la suite x tout indice i tel que xi = max(xj | j ≤ i). Compter le nombre de records de la suite x.
n
X
1
.
Evaluer par simulation la moyenne du nombre de records d’une telle suite. Comparer ce nombre à
i
i=1
Démontrer l’égalité.
Exercice 3.3. Représenter sur un même graphique le cercle unité et un nuage de 20 points tirés au
hasard dans [−1, 1]2 . Compter le nombre de points tombant à l’intérieur du cercle. Recommencer avec
100000 points (sans chercher à les représenter graphiquement).
Exercice 3.4. Simuler une marche aléatoire plane
Pn de n pas, tous les pas étant indépendants, de longueur
1 et de direction uniforme sur [0, 2π[ : Sn = k=1 Zk , où Zk = (cos Θk , sin Θk ), les variables aléatoires
Θk étant i.i.d. de loi uniforme sur [0, 2π[. Représenter graphiquement le nuage des points Sn obtenus en
effectuant 500 simulations pour n = 10. Vérifier par la simulation le résultat suivant : la probabilité que
1
Sn appartienne au disque unité est égale à .
n
Exercice 3.5. On se propose de calculer par une méthode de Monte-Carlo l’aire du disque unité D.
Comparer les deux méthodes suivantes :
(i) tirer des points au hasard uniformément dans le carré C = [−1, 1]2 et retenir ceux qui appartiennent
au disque ;
Z 1
√
g(x) dx, où g(x) = 2 1 − x2 pour x ∈ [−1, 1], en estimant par une méthode
(ii) évaluer l’intégrale
−1
de Monte-Carlo l’espérance de la variable aléatoire g(X), où X suit la loi uniforme sur [−1, 1].
On explicitera et on comparera la variance théorique et la variance empirique pour un même entier n
n
4X
des variables aléatoires S1 =
1D (Mk ), où les variables aléatoires M1 , . . . , Mn sont indépendantes
n
k=1
n
2X
et uniformément distribuées sur C, et S2 =
g(Xk ), où les variables aléatoires X1 , . . . , Xn sont
n
k=1
indépendantes et uniformément distribuées sur [−1, 1], et on donnera pour chacune des deux méthodes
un intervalle de confiance pour l’aire du disque.
Exercice 3.6. Un problème de gestion de stock
On considère le problème de gestion de stock suivant. Un magasin vend un produit à l’unité. On note
Xi le stock de ce produit au début du i-ème jour et Di la demande pour ce jour. Les variables aléatoires
Di sont supposées indépendantes équidistribuées de loi la loi de Poisson de paramètre λ. Chaque article
vendu entraîne un bénéfice g et tout invendu en fin de la journée un coût de stockage cs. La politique de
commande est donnée par des seuils s et S : si à la fin de la i-ème journée, le stock restant (Xi − Di )+ est
strictement plus petit que s, une commande est passée pour ramener le stock au niveau S > s. Chaque
commande est honorée le matin suivant et il y a un coût forfaitaire de commande cc si une commande
est passée. On se propose de comparer par la simulation l’espérance du bénéfice total sur une période de
n jours consécutifs de deux politiques correspondant à des seuils (s1 , S1 ) et (s2 , S2 ).
42
Implémenter une méthode de Monte-Carlo pour estimer la différence des espérances de bénéfice entre
ces deux politiques. On donnera un intervalle de confiance pour cette différence et on comparera les
résultats obtenus en utilisant des réalisations différentes des demandes aléatoires Di ou en utilisant les
mêmes réalisations des Di pour les deux politiques. On justifiera le résultat obtenu en remarquant que le
bénéfice est une fonction croissante de la demande.
Exercice 3.7. Loi des grands nombres et théorème limite central
Soit (Xn )n≥1 une suite indépendante de variables aléatoires suivant respectivement la loi uniforme sur
n
1X
α
α
[−n , n ] où α est un réel strictement positif. Étudier la convergence de la suite Mn =
Xk et la
n
k=1
Mn
convergence en loi de
.
σ Mn
Exercice 3.8. Bornes de Chernov
Soit (Xn )n≥1 une suite indépendante de variables aléatoires suivant la même loi de Bernoulli de paramètre
X1 + · · · + Xn
. Alors :
p, q = 1 − p et X̄n =
n
P(X̄n > p + ε) ≤ e−nε
P(X̄n < p − ε) ≤ e−nε
P(|X̄n − p| > ε) ≤ 2e
2
/2q
,
2
/2p
,
−nε2 /2
pour tout ε > 0 (bornes de Chernov).
Comparer graphiquement cette dernière borne à celle obtenue en appliquant l’inégalité de BienayméTchebychev, puis à la borne asymptotique résultant du théorème limite central.
Tester la validité de ces bornes par la simulation.
43
44
Chapitre 4
Variables aléatoires gaussiennes,
théorème limite central
4.1
Loi multinormale
Pour générer un échantillon d’une loi multinormale sur Rd de moyenne m et de matrice de
covariance Γ données, on utilise la fonction grand avec l’option ’mn’. Le script suivant génère
t
2
un échantillon de
taille
100 de la loi de Gauss sur R de moyenne m = (2, 3) et de matrice de
2 1
covariance Γ =
et représente dans le plan le nuage de points associé :
1 3
m=[2;3];Gamma=[2 1;1 3];//moyenne et matrice de covariance
n=100;//nombre de points du nuage
points=grand(n,’mn’,m,Gamma);
xbasc();
plot(points(1,:),points(2,:),’.b’);
On peut également générer un tel échantillon à partir d’un échantillon de la loi normale réduite
(i.e. de moyenne nulle et de matrice de covariance l’identité). En effet si A est une racine carrée
symétrique de Γ et Y une variable aléatoire gaussienne réduite, le vecteur aléatoire X = m + AY
suit la loi normale d’espérance m et de matrice de covariance AId tA = Γ. Le script suivant
génère un échantillon de même taille de la même loi normale et superpose le nuage de points
obtenu au précédent :
A=sqrtm(Gamma);//racine carrée matricielle: A symétrique positive, A*A=Gamma
Y=rand(2,n,’n’);//échantillon de la loi normale réduite
X=m(:,ones(1,n))+A*Y;//échantillon de la loi voulue
plot(X(1,:),X(2,:),’xr’);
9
8
7
6
5
4
3
2
1
0
−1
−3
−2
−1
0
1
2
45
3
4
5
6
Si on veut représenter la densité d’une loi multinormale non dégénérée sur R2 , on peut opter
pour une représentation en 2D ou en 3D. La commande Sfgrayplot permet de représenter cette
densité en niveaux de gris. Il faut d’abord entrer l’expression de la densité sous forme d’une
fonction Scilab. Reprenons l’exemple précédent :
function z=f(x,y)//densité de la loi multinormale
z=exp(-[x-m(1),y-m(2)]*inv(Gamma)*[x-m(1);y-m(2)]/2)/2/%pi/sqrt(det(Gamma));
endfunction;
xset(’colormap’,graycolormap(32));
x=linspace(m(1)-3,m(1)+3);
y=linspace(m(2)-3,m(2)+3);
Sfgrayplot(x,y,f);
La représentation en 3D s’obtient par la fonction fplot3d
fplot3d(x,y,f);//représentation 3D de la densité
8
7
6
0.08
5
0.06
Z
4
0.04
3
0.02
10
2
8
0.00
1
6
−4
0
4
−2
0
−1
2
2
X
−2
−3
−2
−1
0
1
2
3
4
5
6
7
4
Y
0
6
−2
8
On peut également représenter les lignes de niveau de la densité en utilisant la fonction contour2d. Ces lignes de niveau sont aussi celles de la forme quadratique Q(x) =
t
(x − m)Γ−1 (x − m) associée à la matrice inverse de la matrice de covariance, i.e. des ellipses
centrées en m.
Plus précisément, si X suit la loi normale N (m, Γ), la variable aléatoire Q(X) =
t
(X − m)Γ−1 (X − m) suit la loi du χ2 à 2 degrés de liberté. On en déduit que les lignes de
niveau de la densité contenant en leur intérieur 50% et 95% de la masse totale de la loi de X
sont les ellipses d’équations Q(x) = α et Q(x) = β, où α et β sont les quantiles d’ordre 0.5 et
0.95 de cette loi du χ2 . Le script suivant superpose ces lignes de niveau au nuage de points et
vérifie que la proportion de points tombant à l’intérieur de ces lignes est correcte :
function z=Q(x,y)//forme quadratique associée à Gamma^-1
z=[x-m(1),y-m(2)]*inv(Gamma)*[x-m(1);y-m(2)];
endfunction;
xbasc();
plot(points(1,:),points(2,:),’.b’);
x=linspace(min(points(1,:)),max(points(1,:)));
y=linspace(min(points(2,:)),max(points(2,:)));
xset("fpf"," ");//pour ne pas afficher les valeurs sur la figure
cdf=cdfchi(’X’,[2 2],[0.5 0.95],[0.5 0.05]);
//quantiles de la loi du chi-deux
46
contour2d(x,y,Q,cdf,style=5*ones(cdf));//lignes de niveau de Q
//la moitié des points à l’intérieur de la première ellipse
//95% à l’intérieur de la seconde
//vérification
Qp=zeros(1,n);
for k=1:n,Qp(k)=Q(points(1,k),points(2,k));end;
sum(Qp<cdf(1))/n
sum(Qp<cdf(2))/n
Exercice 4.1. Générer un échantillon de taille 500 de la loi normale précédente. Vérifier sur cet échantillon que la loi de 4X1 − 2X2 est gaussienne. Préciser sa moyenne et sa variance.
Exercice 4.2. Représenter
en3D le nuage de points obtenu par la transformation linéaire de R2 dans

2 −1
R3 de matrice B = −2 1  à partir de l’échantillon précédent. La variable aléatoire BX admet-elle
4
2
une densité sur R3 ?
4.2
4.2.1
Échantillons gaussiens, loi du χ2 et lois associées
Loi du χ2
La loi du χ2 à n degrés de liberté est la loi de la somme X12 + · · · + Xn2 des carrés de n variables
aléatoires réelles indépendantes X1 , . . . , Xn suivant toutes la loi normale centrée réduite.
x
n
1
Cette loi admet la densité n n x 2 −1 e− 2 1]0,+∞[ (x). C’est donc une loi gamma de paramètres
2
2 Γ( 2 )
n
1
et . En particulier, pour n = 2, la loi du χ2 à 2 degrés de liberté est une loi exponentielle.
2
2
Densité de quelques lois du chi−deux
0.50
2
0.45
5
10
0.40
0.35
0.30
0.25
0.20
0.15
0.10
0.05
0.00
0
2
4
6
8
10
12
14
16
18
20
On a déjà remarqué que si X suit la loi normale N (m, Γ) sur Rn , où Γ est non dégénérée, alors
t
(X − m)Γ−1 (X − m) suit la loi du χ2 à n degrés de liberté. En effet, (X − m) a même loi que
AY , où A est une racine carrée symétrique positive de Γ et Y une variable aléatoire gaussienne
n
X
Yk2 .
réduite à valeurs dans Rn . Il en résulte que t(X − m)Γ−1 (X − m) a même loi que tY Y =
k=1
t
Exercice 4.3. Vérifier sur l’échantillon obtenu à l’exercice 4.1 que (X − m)Γ
χ2 à 2 degrés de liberté.
47
−1
(X − m) suit la loi du
4.2.2
Loi de Student
X
La loi de Student T (n) à n degrés de liberté est la loi du quotient p
, où X et Y sont deux
Y /n
variables aléatoires réelles indépendantes, X suivant la loi normale réduite N (0, 1) et Y la loi
du χ2 à n degrés de liberté.
Elle admet la densité :
Γ n+1
2
√ f (t) =
Γ n2
πn
1+
t2
n
1
(n+1)/2 .
Une variable aléatoire suivant cette loi est intégrable si n > 1 (son espérance est alors nulle) et
n
de carré intégrable si n > 2 (sa variance est alors égale à
).
n−2
nb=10000;//taille de l’échantillon
n=5;//degrés de liberté
a=5;//borne du graphique
x=grand(1,nb,’nor’,0,1);
y=grand(1,nb,’chi’,n);
z=x ./sqrt(y/n);
histplot(linspace(-a,a,50),z,style=2);
t=linspace(-a,a);
y=cdft(’PQ’,t,5*ones(t));
plot2d((t(1:$-1)+t(2:$))/2,(y(2:$)-y(1:$-1))/(t(2)-t(1)),style=5);
En particulier, pour n = 1, la loi de Student T (1) n’est autre que la loi de Cauchy de densité
1 1
. C’est aussi la loi du quotient de deux variables aléatoires normales réduites indépenπ 1 + t2
dantes, comme le vérifie le script suivant :
t=linspace(-10,10);y=cdft(’PQ’,t,ones(t));
plot((t(1:$-1)+t(2:$))/2,(y(2:$)-y(1:$-1))/(t(2)-t(1)),’+g’)
plot2d(t,1 ./(1+t.^2)/%pi,style=2);
nb=10000;
x=grand(1,nb,’nor’,0,1);
y=grand(1,nb,’nor’,0,1);
z=x ./y;
histplot(-10:0.2:10,z,style=5);
4.2.3
Loi de Fisher-Snedecor
X/n
où X et Y
Y /p
sont des variables aléatoires indépendantes suivant respectivement les lois du χ2 à n et p degrés
de liberté.
Elle admet la densité :
n/2
n
1
t 2 −1
n
f (t) =
(n+p)/2 1[0,+∞[ (t) ,
B( n2 , p2 ) p
1 + nt
p
La loi de Fisher-Snedecor F (n, p) de paramètres n et p est la loi du quotient
où la fonction bêta est définie par B(n, p) =
Γ(n)Γ(p)
pour n > 0, p > 0.
Γ(n + p)
48
nb=10000;//taille de l’échantillon
n=10;//degrés de liberté du numérateur
p=5;//degrés de liberté du dénominateur
x=grand(1,nb,’chi’,n);
y=grand(1,nb,’chi’,p);
z1=(x/n)./(y/p);
histplot(0:0.2:10,z1,rect=[0,0,10,0.7],style=2);
t=linspace(0,10);
yt=cdff(’PQ’,t,10*ones(t),5*ones(t));
plot2d((t(1:$-1)+t(2:$))/2,(yt(2:$)-yt(1:$-1))/(t(2)-t(1)),style=5);
xtitle(’Loi de Fisher F(10,5)’);
Loi de Fisher F(10,5)
0.6
0.5
0.4
0.3
0.2
0.1
0.0
0
4.2.4
1
2
3
4
5
6
7
8
9
10
Échantillons gaussiens
Ces lois interviennent dans l’étude des échantillons des lois normales et jouent un rôle crucial
dans plusieurs problèmes d’estimation ou de tests.
Si X1 , . . . , Xn est un échantillon d’une loi gaussienne N (m, σ 2 ), on sait que la moyenne empirique
X1 + · · · + Xn
X̄ =
de cet échantillon suit la loi de Gauss N (m, σ 2 /n).
n
n
1 X
La variance empirique non biaisée S 2 =
(Xk − X̄)2 est indépendante de X̄ et
n−1
k=1
(n − 1)S 2 /σ 2 suit la loi du χ2 à n − 1 degrés de liberté.
√ X̄ − m
suit la loi de Student à n − 1 degrés de liberté. L’intérêt
Il en résulte que le quotient n
S
de ce résultat est que cette variable aléatoire ne dépend pas de la variance des Xk , qui n’a pas
besoin d’être connue.
Si X = (X1 , . . . , Xn1 ) et Y = (Y1 , . . . , Yn2 ) sont deux échantillons gaussiens de lois respectives
(n1 − 1)S12
N (m1 , σ12 ) et N (m2 , σ22 ) et de variances empiriques respectives S12 et S22 , alors
et
σ12
(n2 − 1)S22
suivent respectivement les lois du χ2 à (n1 − 1) et (n2 − 1) degrés de liberté et sont
σ22
S2
indépendantes. Il en résulte que si σ1 = σ2 , alors F = 12 suit la loi de Fisher F (n1 − 1, n2 − 1).
S2
49
Ce résultat ne dépend pas des espérances m1 et m2 des deux échantillons, qui n’ont pas besoin
d’être connues, pas plus que la valeur commune de la variance des deux échantillons.
4.3
4.3.1
Théorème limite central
Le cas unidimensionnel
Le théorème limite central nous apprend que si (Xn )n≥1 est une suite de variables aléatoires
réelles indépendantes équidistribuéesde carré intégrable
d’espérance m et d’écart-type σ > 0, et
Sn − nm
√
converge en loi vers une variable aléatoire
Sn = X1 + · · · + Xn , alors la suite
σ n
n≥1
Sn − nm
√
réelle gaussienne réduite, i.e. pour tout intervalle [a, b] de R, P a ≤
≤ b tend vers
σ n
Z b
x2
1
√
e− 2 dx.
2π a
Cette convergence permet en particulier d’approcher une loi binomiale de paramètres n grand et
p pas trop proche de 0 ou de 1 par une loi normale. En pratique, on utilise cette approximation
pour np et n(1 − p) tous deux supérieurs à 5.
Historiquement, la première version de ce théorème concernait la convergence de chacun des
coefficients de la loi binomiale renormalisée :
Théorème (de Moivre-Laplace) Si B(n, p, k) désignep
la probabilité qu’une variable
p aléatoire
suivant la loi binomiale B(n, p) prenne la valeur k, alors np(1 − p)B(n, p, [np + x np(1 − p)])
tend vers ϕ(x) quand n tend vers l’infini, où [y] désigne la partie entière de y et ϕ la densité de
la loi normale réduite.
//la loi binomiale réduite et son approximation gaussienne
n=30;p=0.4;q=1-p;
pr=binomial(p,n);//loi binomiale B(n,p)
valeurs=((0:n)-n*p)/sqrt(n*p*q);//valeurs prises par une variable binomiale réduite
plot2d3(valeurs,sqrt(n*p*q)*pr,2);//diagramme en bâtons normalisé
x=linspace(min(valeurs),max(valeurs));
plot2d(x,exp(-x.^2/2)/sqrt(2*%pi),5);//densité de la loi normale N(0,1)
0.40
0.35
0.30
0.25
0.20
0.15
0.10
0.05
0.00
−6
−4
−2
0
2
50
4
6
8
4.3.2
Le cas multidimensionnel
Théorème limite central multidimensionnel : Soit (Xn )n≥1 une suite de variables aléatoires
indépendantes équidistribuées de carré intégrable à valeurs dans Rd , m = E[X1 ]leur espérance,
Sn − nm
√
Γ = ΓX1 leur matrice de covariance, et Sn = X1 + · · · + Xn . Alors la suite
n
n≥1
converge en loi vers une variable aléatoire gaussienne à valeurs dans Rd de loi N (0, Γ).
4.3.3
Application à la loi multinomiale
Soit (Yn )n≥1 une suite de variables aléatoires indépendantes équidistribuées à valeurs dans un
ensemble fini {y1 , . . . , yd } de loi commune p = (p1 , . . . , pd ) : P(Yn = yi ) = pi > 0 pour tout n ≥ 1
et tout i = 1, . . . , d.
Notons, pour tout n, Xn la variable aléatoire à valeurs dans Rd :
Xn = (1Yn =y1 , . . . , 1Yn =yd )
et :
Sn = (Sn(1) , . . . , Sn(d) ) =
n
X
Xj
j=1
le vecteur aléatoire des nombres d’obtention des yi au cours des n premières expériences.
La variable aléatoire Sn suit la loi multinomiale de paramètres n et p1 , . . . , pd . La loi forte des
Sn
tend presque sûrement vers p quand n tend vers l’infini
grands nombres nous apprend que
n
Sn − np
√
converge en loi vers un vecteur gaussien Z de loi
et le théorème central limite que
n
N (0, Γ), où Γ est la matrice de covariance de X1 . Les coefficients Γi,j de cette matrice valent
Γi,j = pi δi,j − pi pj , de sorte qu’on peut écrire Γ = D − tpp, où D est la matrice diagonale de
coefficients diagonaux p1 , . . . , pd . Cette matrice a un déterminant nul (la somme de chacune de ses
d
X
lignes ou de ses colonnes est nulle), ce qui traduit la relation de dépendance affine
Sn (i) = n,
i=1
et la loi normale N (0, Γ) n’admet donc pas de densité par rapport à la mesure de Lebesgue sur
Rd .
(1)
(d−1)
Par contre la loi de la variable aléatoire S̃n = (Sn , . . . , Sn
) converge vers la loi normale
d−1
centrée sur R
de matrice de covariance Γ̃ = (Γi,j )1≤i,j≤d−1 qui est définie positive. Cette loi
normale admet donc une densité.
Vérifions ce résultat en représentant sur un même graphique, pour d = 3, un nuage de points
associé à un échantillon d’une loi multinomiale normalisée (les marqueurs sont des cercles) et le
nuage de points associé à un échantillon de la loi normale N (0, Γ̃) (les marqueurs sont des croix).
nbsimul=100;n=100;p=[0.2;0.5;0.3];
Gammatilde=[p(1)*(1-p(1)),-p(1)*p(2);-p(1)*p(2),p(2)*(1-p(2))];
y=grand(nbsimul,’mul’,n,p(1:$-1));//échantillon de la loi multinomiale
plot((y(1,:)-n*p(1))/sqrt(n),(y(2,:)-n*p(2))/sqrt(n),’ob’);
z=grand(nbsimul,’mn’,zeros(2,1),Gammatilde);//échantillon de la loi normale
plot(z(1,:),z(2,:),’+r’)
51
1.5
1.0
0.5
0.0
−0.5
−1.0
−1.5
−1.5
−1.0
−0.5
0.0
On montre aussi que la variable aléatoire réelle Dn2 =
0.5
1.0
1.5
d
(i)
X
(Sn − npi )2
i=1
npi
converge en loi vers une
variable aléatoire suivant la loi du χ2 à d − 1 degrés de liberté. Cette loi limite ne dépend donc
pas de la loi p.
Exercice 4.4. Générer un échantillon de la loi multinomiale de paramètres n = 100, p = (0.2, 0.5, 0.3)
en simulant n tirages de la loi p. Déterminer la moyenne et la matrice des covariances empiriques de
3
X
(Ni − npi )2
, où Ni est le nombre
cet échantillon. Comparer aux valeurs théoriques. Évaluer Dn2 =
npi
i=1
d’occurences de i dans l’échantillon. Refaire la même chose en utilisant la fonction grand pour simuler cet
échantillon. Recommencer avec d’autres valeurs de n. Générer un nombre suffisant d’échantillons pour
pouvoir comparer la loi empirique de Dn2 à la loi du χ2 à 2 degrés de liberté.
4.4
4.4.1
Mouvement brownien
Mouvement brownien standard
On appelle mouvement brownien standard tout processus à temps continu (Bt )t≥0 qui vérifie les
propriétés suivantes :
(i) B0 = 0 ;
(ii) pour tout 0 ≤ s < t, Bt − Bs suit la loi normale centrée de variance t − s ;
(iii) pour toute suite 0 < t1 < · · · < tn , les accroissements Bt1 − B0 , Bt2 − Bt1 , . . ., Btn − Btn−1
sont indépendants ;
(iv) presque toutes les trajectoires t 7→ Bt (ω) sont continues.
Il existe plusieurs façons de construire un tel processus ; nous en admettrons ici l’existence.
Son importance vient en particulier de ce qu’il apparaît comme limite de nombreuses familles de
processus.
Pour simuler une trajectoire d’un mouvement brownien, il suffit de simuler des variables gaussiennes indépendantes et d’interpoler les sommes cumulées de ces variables.
dt=0.001;//pas
tmax=1;
nb=5;//nombre de trajectoires
B=[zeros(1:nb);cumsum(grand(tmax/dt,nb,’nor’,0,sqrt(dt)),’r’)];
plot2d((0:dt:tmax)’*ones(1,nb),B);
52
1.5
1.0
0.5
0.0
−0.5
−1.0
−1.5
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Exercice 4.5. On peut démontrer que pour tout réel t > 0, la variable aléatoire Bt∗ = max Bs suit la
0≤s≤t
même loi que |Bt |. Vérifier cette propriété en simulant un grand nombre de trajectoires du mouvement
brownien et en représentant les histogrammes de ces deux variables aléatoires.
On montre facilement que, pour tout couple (s, t) de réels positifs, la covariance des variables
aléatoires Bs et Bt est égale à min(s, t). On pourrait utiliser cette propriété pour simuler les trajectoires d’un mouvement brownien. Cette approche est à déconseiller dans le cas du mouvement
brownien, mais elle peut s’avérer utile pour simuler d’autres processus gaussiens.
Exercice 4.6. Simuler une trajectoire d’un mouvement brownien en utilisant une loi multinormale.
4.4.2
Mouvement brownien dans Rd
(1)
(d)
Un processus à temps continu Bt = (Bt , . . . , Bt ) à valeurs dans Rd est un mouvement brow(i)
nien standard si ses composantes Bt (i = 1, . . . , d) sont des mouvements browniens standard
indépendants. Il est facile de simuler une trajectoire d’un tel processus :
dt=0.001;
tmax=1;
B=[zeros(2,1),cumsum(grand(2,tmax/dt,’nor’,0,sqrt(dt)),’c’)];
plot2d(B(1,:),B(2,:),frameflag=4);//échelle isométrique
0.6
0.4
0.2
0.0
−0.2
−0.4
−0.6
−0.8
−1.0
−0.5
0.0
53
0.5
4.4.3
Pont brownien
Le pont brownien standard est le processus (Zt )0≤t≤1 défini par Zt = Bt − tB1 , où (Bt )t≥0 est
un mouvement brownien standard. Il représente le mouvement brownien standard conditionné
à revenir en son point de départ à l’instant 1. C’est un processus gaussien centré de matrice de
covariance Cov(Zs , Zt ) = s(1 − t) pour 0 ≤ s ≤ t ≤ 1.
1.5
1.0
0.5
0.0
−0.5
−1.0
−1.5
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Exercice 4.7. Simuler une trajectoire d’un pont brownien en utilisant cette dernière propriété.
Pont brownien et fonctions de répartition empiriques Soit (Xn )n≥1 une suite indépendante de variables aléatoires suivant toutes la loi uniforme sur [0, 1], et Fn la fonction de
répartition empirique de l’échantillon (X1 , . . . , Xn ) définie par
n
Fn (s) =
1X
1[0,s] (Xk )
n
k=1
pour s ∈ [0, 1] .
Pour tout couple 0 < s < t < 1 de réels, la suite (Yn )n≥1 de variables aléatoires à valeurs dans
R2 définie par
Yn = (1[0,s] (Xn ), 1[0,t] (Xn ))
est indépendante équidistribuée d’espérance (s, t) et de matrice de covariance
s(1 − s) s(1 − t)
Γs,t =
.
s(1 − t) t(1 − t)
√
1
Il en résulte que √ (nFn (s) − ns, nFn (t) − nt) = n(Fn (s) − s, Fn (t) − t) converge en loi vers
n
une variable aléatoire suivant la loi normale N (0, Γs,t ). Cette loi est celle du couple (Zs , Zt ), où
(Z )
est un pont brownien. Plus généralement, pour 0 < s1 < · · · < sr < 1, le r-uplet
√ t 0≤t≤1
n(Fn (s1 ) − s1 , . . . , Fn (sr ) − sr ) converge en loi vers (Zs1 , . . . , Zsr ). Ceci laisse penser (et on
√
peut démontrer) que la variable aléatoire nDn , où Dn = sup |Fn (s) − s|, converge en loi
s∈[0,1]
vers une variable aléatoire suivant la loi de Z ∗ = sup |Zs |. Cette loi n’est autre que la loi de
s∈[0,1]
Kolmogorov-Smirnov vue à la section 3.2.1.
On sait par ailleurs que la loi de Dn = sup |Fn (s) − F (s)|, où Fn est la fonction de répartition
s∈[0,1]
empirique d’un échantillon de taille n d’une loi de fonction de répartition continue F , ne dépend
pas de F . Le résultat précédent s’étend donc à toute suite i.i.d. de variables aléatoires réelles de
loi diffuse.
54
Exercice 4.8. Simuler un grand nombre de trajectoires du pont brownien. Tracer l’histogramme du
maximum des valeurs absolues de ces trajectoires. Représenter sur le même diagramme la densité de la
loi de Kolmogorov-Smirnov.
4.5
4.5.1
Processus gaussiens stationnaires
Un peu de terminologie
Un processus réel indexé par Z est une suite (Xk )k∈Z de variables aléatoires réelles indexée par
Z. En pratique, l’indice k représente souvent le temps, supposé discrétisé.
Le processus (Xk )k∈Z est dit de carré intégrable si toutes les variables aléatoires Xk sont de carré
intégrable. On peut alors définir la moyenne m du processus comme la fonction m : Z → R qui à
tout entier k associe l’espérance m(k) = E(Xk ) de Xk et la fonction de covariance K : Z×Z → R
qui à tout couple (i, j) d’indices associe la covariance de Xi et Xj : K(i, j) = Cov(Xi , Xj ).
Cette fonction de covariance est définie positive, en ce sens que
X
zi z̄j K(ki , kj ) ≥ 0
1≤i,j≤n
pour toute famille (k1 , k2 , . . . , kn ) d’entiers relatifs et toute famille (z1 , z2 , . . . , zn ) de nombres
complexes.
Le processus (Xk )k∈Z est dit gaussien si le vecteur (Xk )k∈I est gaussien pour toute partie finie
I de Z. Un processus gaussien est de carré intégrable et sa loi est entièrement déterminée par sa
moyenne et sa fonction de covariance.
Un processus est dit fortement stationnaire si sa loi est invariante par translation du temps : pour
tout entier j ∈ Z et toute famille (k1 , k2 , . . . , kn ) d’entiers relatifs, les n-uplets (Zk1 , . . . , Zkn ) et
(Zj+k1 , . . . , Zj+kn ) ont même loi.
Un processus de carré intégrable est dit faiblement stationnaire si sa moyenne m et sa fonction
de covariance K sont invariantes par translation du temps, autrement dit si sa moyenne m est
constante et si K(n + i, n + j) = K(i, j) pour tout triplet (i, j, n) d’entiers relatifs. Il existe alors
une fonction paire r : Z → R telle que K(i, j) = r(j − i) pour tout couple (i, j) ∈ Z × Z.
Un processus fortement stationnaire de carré intégrable est faiblement stationnaire, mais la réciproque est en général forte. Elle est vraie si le processus est gaussien : tout processus gaussien
faiblement stationnaire est fortement stationnaire.
On appelle bruit blanc tout processus stationnaire (Wk )k∈Z de carré intégrable de moyenne nulle
tel que Wi et Wj soient non corrélées pour i 6= j, i.e. tel que la fonction de covariance r associée
soit nulle en-dehors de 0. Un bruit blanc (Wk )k∈Z est dit gaussien si le processus (Wk )k∈Z est
gaussien.
4.5.2
Moyennes mobiles
Une série chronologique est simplement une suite de variables aléatoires indexée par le temps,
supposé discrétisé. De telles séries interviennent naturellement en météorologie, en économie et
dans bien d’autres domaines de la vie économique et sociale. L’utilisation de processus gaussiens
pour modéliser de tels phénomènes est justifiée, pour une part par le thérème limite central, mais
surtout par la grande facilité avec laquelle sont effectués les calculs dans de tels modèles.
Dans l’observation de phénomènes chronologiques, on distingue souvent une tendance déterministe globale (augmentation générale des prix en économie) doublée de variations saisonnières
péridodiques, cette évolution déterministe étant perturbée par des variations aléatoires. On modélise souvent ces perturbations par un bruit blanc gaussien.
On peut alors être amené à considérer des moyennes mobiles de la série observée pour éliminer
les variations saisonnières : par exemple, dans le cas d’une étude des prix de produits agricoles,
on fera une moyenne sur les douze mois de l’année.
55
Dans l’exemple suivant, on génère de manière pseudo-aléatoire une série chronologique présentant
une tendance haussière doublée d’une variation saisonnière de période 12, l’unité de temps étant
le mois ; cette évolution déterministe est perturbée par un bruit blanc gaussien. On commence
par estimer la tendance globale, que l’on soustrait à la variation brute ; on estime ensuite les
variations saisonnières, que l’on retranche à leur tour pour faire apparaître la partie aléatoire des
variations, que l’on représente en même temps que le bruit blanc initial qui nous avait servi à
générer l’exemple. On estime ensuite la variance du bruit, ainsi que la corrélation ou l’absence
de corrélation de ce bruit, en utilisant la fonction corr de Silab.
2.5
2.0
1.5
1.0
0.5
0.0
−0.5
0
20
40
60
n=10;//nombre d’annees
a=0.01;//tendance mensuelle
b=0.1;//fluctuations periodiques
c=0.05;//fluctuations aleatoires
t=1:12*n;//temps
e=rand(1,12*n,’n’);//bruit blanc
//les pseudo-donnees:
x=1+a*t+b*sin(2*%pi*t/12)+c*e;
clf
plot2d(t,x)
//moyennes mobiles:
X=zeros(12,12*n-11);
for i=1:12
X(i,:)=x(i:12*n-12+i);
end;
xm=mean(X,’r’);
plot2d(12:12*n,xm,style=5);
//estimation de la tendance:
aest=(x($)-x(12))/(n-1)/12;
y=x-aest*t;
plot2d(t,y,style=3);
//estimation des fluctuations saisonnieres:
my=mean(y);
56
80
100
120
fs=zeros(1,12);
for i=1:12
fs(i)=mean(y(i:12:12*n))-my;
end;
//estimation du bruit
w=zeros(y);
for i=1:n
w(1+12*(i-1):12*i)=y(1+12*(i-1):12*i)-fs-my;
end;
plot2d(t,w,style=2);
plot2d(t,c*e,style=4);
disp(corr(w,10))
column 1 to 6
0.0028704
0.0004340
column 7 to 10
0.0003022
0.0008124
0.0003434
0.0005744
0.0001707
0.0003716
0.0005102
0.0000684
La fonction corr retourne les autocovariances empiriques de la série X1 , . . . , Xn :
n−k
1X
r̂(k) =
(Xi − X̄)(Xi+k − X̄)
n
i=1
où X̄ désigne la moyenne (X1 + · · · + Xn )/n. En particulier, pour k = 0, r̂(0) est la variance
empirique (biaisée). Si le processus est stationnaire, ces autocovariances empiriques convergent
quand n tend vers l’infini vers les covariances théoriques r(k). En particulier, dans le cas d’un
bruit blanc, r̂(k) converge vers la variance du bruit blanc si k = 0 et vers 0 pour k > 0.
Dans le cas d’une moyenne mobile :
Xn =
q
X
bj Wn−j
j=0
les covariances théoriques sont données par :
r(k) =
(
σ2
0
Pq−k
j=0 bj bk+j
si j ≤ q − k
sinon
où σ 2 est la variance du bruit blanc W .
Vérifions le pour une moyenne mobile sur 12 mois (et une très longue durée) :
n=12000;
W=rand(1,n,’n’);
X=W(1:$-11);
for i=1:11
X=X+W(1+i:$-11+i);
end;
X=X/12;
plot(corr(X,20))
57
4.5.3
Processus auto-régressifs
Un processus autorégressif est un processus (Xn )n∈Z vérifiant une relation de récurrence de la
forme
p
X
Xn =
ai Xn−i + Wn
i=1
pour tout n ∈ Z, où p est un entier positif, les ai des scalaires et (Wn )n∈Z un bruit blanc. Si
ap 6= 0, on dit que le processus est autorégressif d’ordre p.
Ces processus sont très utilisés, par exemple en économie pour modéliser l’évolution d’un marché :
les prix dans le futur sont une fonction linéaire des prix des quelques derniers mois perturbée
par une variation aléatoire.
Le cas p = 1
Dans ce cas, l’équation s’écrit :
Xn = aXn−1 + Wn
en notant a = a1 .
Le processus est markovien : son évolution future ne dépend de son passé qu’au travers de son
état présent (ce n’est plus le cas si p > 1).
Si |a| < 1, on peut alors écrire Xn comme somme d’une série :
Xn =
∞
X
ak Wn−k .
k=0
Cette série converge presque sûrement et dans L2 . Le processus X apparaît ainsi comme une
moyenne mobile d’ordre infini et sa variance se calcule facilement :
Var(Xn ) =
∞
X
a2k σ 2 =
k=0
σ2
1 − a2
où σ 2 est la variance du bruit blanc W .
La simulation d’un tel processus est donc simple : on simule X0 suivant la loi normale centrée
de variance σ 2 /(1 − a2 ), puis on génère le bruit blanc W et on en déduit les Xn en utilisant la
relation de récurrence.
Pour calculer la fonction de covariance r, il suffit de remarquer qu’elle vérifie la relation de
récurrence r(k) = ar(k − 1) pour tout k ≥ 1. Cette relation s’obtient en multipliant l’égalité
Xn = aXn−1 + Wn par Xn−k et en prenant l’espérance.
Le cas général
Si un processus stationnaire centré vérifie la relation de récurrence
Xn − a1 Xn−1 − · · · − ap Xn−p = Wn ,
on obtient, en multipliant cette relation par Xn−k (supposé indépendant de Wn ) et en prenant
l’espérance, une relation de récurrence vérifiée par la fonction de covariance r :
r(k) = a1 r(k − 1) + a2 r(k − 2) + · · · + ap r(k − p)
pour k ≥ p.
Si toutes les racines du polynôme q(z) = z p − a1 z p−1 − · · · − ap sont de module strictement
inférieur à 1, ou, ce qui revient au même, si toutes les racines du polynôme 1 − a1 z − · · · − ap z p
sont extérieures au disque unité, r(k) tend 0 quand k tend vers l’infini.
58
Pour simuler une trajectoire du processus, on peut donc partir d’une valeur quelconque de
X0 , . . . , Xp−1 , générer le bruit blanc et utiliser la relation de récurrence pour calculer Xn . La stabilisation autour du processus stationnaire se fera d’autant plus vite que les racines du polynôme
q sont petites en module.
Estimation des coefficients ai et prévision
En statistique, on dispose seulement d’une partie de la série chronologique et le but est de trouver
un modèle le plus simple possible rendant compte au mieux de ces données. Si on pense qu’une
modélisation par un processus autorégressif peut convenir, le premier problème est de déterminer
l’ordre du modèle, i.e. la valeur de l’entier p, puis d’estimer les paramètres ai (1 ≤ i ≤ p) et la
variance du bruit blanc au vu des données.
On commence par estimer la moyenne et la fonction d’autocovariance en utilisant les covariances
empiriques. Si on suppose déterminée la valeur de p, les coefficients ai vérifient les équations de
Yule-Walker, qui peuvent s’écrire sous forme matricielle :


 

r(1)
a(1)
r(0)
r(1)
. . . r(p − 1)

 
 r(1)

r(0)
. . . r(p − 2)
 a(2) = r(2)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   . . .   . . . 
r(p)
a(p)
r(p − 1) r(p − 2) . . .
r(0)
(ces équations s’obtiennent de même que précédemment en multipliant la relation de récurrence
définissant le processus successivement par Xn−1 , . . . , Xn−p et en prenant l’espérance).
On obtient donc une estimation des ai en résolvant ce système, après avoir remplacé les autocovariances théoriques par leurs estimées.
Si on veut essayer de prévoir le futur du processus au vu de son passé, on utilisera comme
prévision de Xn+1 l’espérance conditionnelle de Xn+1 connaissant la tribu FnX du passé de X
jusqu’à l’instant n : E(Xn+1 | FnX ) = a1 Xn + a2 Xn−1 + · · · + ap Xn−p+1 .
Remarque : ces deux types de processus (autorégressifs et moyennes mobiles) sont en fait des
cas particuliers d’une classe plus large de processus, appelés processus ARMA (Auto Regressive
Moving Average). Un processus ARMA(p, q) vérifie une relation de récurrence du type
p
X
ai Xn−i =
i=0
q
X
bj Wn−j
j=0
pour tout n ∈ Z, où p et q sont deux entiers positifs, les ai et les bj des scalaires et (Wn )n∈Z un
bruit blanc. Les moyennes mobiles correspondent donc à p = 0 et les processus autorégressifs à
q = 0.
Scilab possède une bibliothèque de fonctions arma pour simuler les processus ARMA et estimer
leurs paramètres, mais l’étude se situant ici à un niveau élémentaire, nous nous sommes contentés
d’utiliser les fonctions statistiques usuelles.
59
60
Chapitre 5
Chaînes de Markov à temps discret
5.1
5.1.1
Simulation de chaînes de Markov
Commandes de base
Le générateur grand permet de simuler des trajectoires d’une chaîne de Markov d’espace d’états
fini dont on connaît la matrice de transition. La commande Y=grand(n,’markov’,P,x0) renvoie
une trajectoire de longueur n de la chaîne de Markov d’espace d’états E = {1, . . . , N }, de
matrice de transition P , et d’état initial x0 , où P est une matrice stochastique d’ordre N et x0
un élément de E. On peut simuler simultanément par la même commande m trajectoires de la
chaîne en prenant pour x0 un vecteur de longueur m : Y est alors une matrice à m lignes et
n colonnes, la i-ième ligne de cette matrice représentant une trajectoire de la chaîne issue de x0 (i).
La fonction eigenmarkov(P) renvoie l’unique loi stationnaire d’une chaîne de Markov irréductible de matrice de transition P . Si la chaîne comporte m classes récurrentes, elle renvoie une
matrice à m lignes dont la i-ième ligne est la loi stationnaire correspondant à la i-ième classe
récurrente. Avec deux arguments en sortie, la commande [M,Q]=eigenmarkov(P) renvoie en
outre une matrice Q à m colonnes, où Q(i, j) est la probabilité de terminer dans la j-ième classe,
l’état initial étant i.
La commande genmarkov renvoie une matrice de transition aléatoire. Ses arguments sont
en entrée un vecteur contenant le nombre d’éléments de chacune des classes récurrentes, et
le nombre d’états transients. Ainsi genmarkov([n1,n2,...,np],nt) renvoie la matrice de
transition d’une chaîne de Markov ayant p classes récurrentes, de cardinaux respectifs n1 ,
n2 , . . ., np , et nt états transients communiquant tous entre eux. En particulier, la commande
genmarkov(N,0) renvoie la matrice de transition d’une chaîne irréductible d’espace d’états
{1, . . . , N }. Cette commande peut être utile pour tester certaines propriétés d’une chaîne de
Markov.
La commande [perm,rec,tr,indsRec,indsT]=classmarkov(P) permet de trouver le nombre
d’états transients (tr), les tailles des classes récurrentes (rec), les indices des états récurrents
(indsRec) et transients (indsT) ainsi qu’une permutation (perm) de ces indices permettant de
mettre la matrice de transition P sous forme canonique.
Vérifions pour commencer sur un exemple le théorème ergodique :
N=5;n=10000;//5 états, 10000 pas
P=genmarkov(N,0);//une seule classe récurrente, pas d’états transients
x=grand(n,’markov’,P,1);
t=tabul(x);//fréquences de passage
61
eigenmarkov(P)//loi stationnaire
t($:-1:1,2)’/n
ans =
0.1305591
0.3130950
0.1635297
ans =
0.1301
0.3088
0.1623
0.1997
0.1950212
0.1977949
0.1991
On peut vérifier également que, dans le cas d’une chaîne irréductble apériodique d’espace d’états
fini, la matrice P n tend très vite vers la matrice de rang 1 dont toutes les lignes sont égales à la
probabilité stationnaire :
N=3;P=genmarkov(N,0);P^100,eigenmarkov(P)
ans =
0.3159087
0.2556059
0.4284854
0.3159087
0.2556059
0.4284854
0.3159087
0.2556059
0.4284854
ans =
0.3159087
0.2556059
0.4284854
Exercice 5.1. Générer une matrice de transition aléatoire P pour une chaîne ayant 2 classes récurrentes
de cardinaux 1 et 3 et une classe transiente de cardinal 4. Étudier la convergence de P n quand n tend vers
l’infini et comparer la limite à la matrice QM , où M et Q sont obtenues par la commande eigenmarkov.
Que peut-on dire de la matrice QM ?
5.1.2
Chaînes absorbantes
Si une chaîne de Markov (Xn )n≥0 possède r états absorbants et s états transients, la matrice
de
Ir 0
transition de cette chaîne peut s’écrire, quitte à renuméroter les états, sous la forme P =
R Q
Ir
0
n
n
,
où Q est une matrice sous-stochastique d’ordre s. La matrice P s’écrit alors P =
Rn Q n
où Rn = (Ir + Q + · · · + Qn−1 )R. La matrice Qn tend vers 0 quand n tend vers l’infini, puisque
Qn (i, j) = P(Xn = j | X0 = i) tend vers 0 pour tout état transient j. On en déduit que la
n−1
∞
X
X
Qk = Is − Qn tend
Qk puisque (Is − Q)
matrice Is − Q est inversible d’inverse N =
k=0
k=0
vers Is . La matrice N est parfois appelée matrice fondamentale de la chaîne. Elle permet en
particulier de calculer les temps et les probabilités d’absorption. En effet pour tout couple (i, j)
∞
X
P k (i, j) est l’espérance du nombre total de visites en j pour la chaîne issue
d’états, U (i, j) =
k=0
de i. Ce nombre est fini si j est transient et la somme
r+s
X
U (i, j) de ces espérances sur tous
j=r+1
les états transients représente le temps moyen de séjour dans l’ensemble des états transients, i.e.
l’espérance du temps T d’atteinte de l’ensemble des états absorbants pour la chaîne issue de i.
La matrice N Js , où Js est la matrice colonne d’ordre s dont tous les coefficients valent 1, a donc
pour coefficients ces espérances.
La loi du temps d’absorption s’obtient en remarquant que
Pi (T = n) =
r
X
j=1
(P n (i, j) − P n−1 (i, j)) .
Soit f une fonction définie sur l’ensemble {1, . . . , r} des états absorbants et g la fonction définie
sur l’ensemble des états transients par g(i) = Ei (f (XT )) pour tout i = r + 1, . . . , r + s. La
62
relation g = Rf + Qg s’écrit encore (Is − Q)g = Rf , ou g = N Rf . En particulier si f est la
fonction indicatrice d’un état absorbant particulier j0 , la matrice N Rf a pour coefficients les
probabilités Pi (XT = j0 ), i parcourant l’ensemble des états transients.
La commande genmarkov(ones(1,r),s) fournit une matrice de transition aléatoire pour une
chaîne de Markov comportant r états absorbants et s états transients. Elle permet de tester
facilement les résultats précédents.
r=2;//nombre d’états absorbants
s=3;//nombre d’états transients
P=genmarkov(ones(1,r),s);
Q=P(r+1:r+s,r+1:r+s);
N=inv(eye(Q)-Q);
t=sum(N*ones(s,1),’c’)
R=P(r+1:r+s,1:r);
N*R//espérance du temps d’absorption
nbsimul=10000;
x=grand(50,’markov’,P,(r+s)*ones(1,nbsimul));
//simulation de la chaîne issue de r+s
for k=1:r
p(k)=sum(x(:,$)==k)/nbsimul;
end;
p//fréquences d’absorption
temps=sum(x>r,’c’)+1;
mean(temps)//temps moyen d’absorption en partant de r+s
tmax=max(temps);
histplot(0:tmax,temps)//histogramme du temps d’absorption
tempstheorique=zeros(1,tmax);
M=P-eye(P);
for k=1:tmax
tempstheorique(k)=sum(M(r+s,1:r));
M=P*M;
end;
plot2d2(0:tmax-1,tempstheorique,style=5);
5.1.3
Estimation de la probabilité de transition
Soit (Xn )n≥0 une chaîne de Markov d’espace d’états fini E et de matrice de transition P . Supposons que l’on sache simuler cette chaîne sans connaître la valeur de P . L’estimateur du maximum
de vraisemblance de P est alors donné par :
P̂ (i, j) =
N (i, j)
N (i)
pour tout (i, j) ∈ E × E tel que N (i) > 0 ,
où N (i, j) est le nombre de transitions de i à j observées et N (i) =
X
N (i, j) le nombre de
j∈E
passages en i observés. Cet estimateur est convergent, i.e. P̂ (i, j) converge vers P (i, j) quand le
nombre de pas observés tend vers l’infini.
Exemple Reprenons l’exemple et les notations de la section 5.1.2. Soit j0 un état absorbant,
et h la fonction définie sur l’espace d’états par h(i) = Pi (XT = j0 ). On peut montrer que la
63
chaîne conditionnée à être absorbée en j0 est une chaîne de Markov de probabilité de transition
Ph définie par
P (i, j)h(j)
Ph (i, j) =
h(i)
pour tout état transient i. On souhaite vérifier ce résultat par la simulation.
r=2;//nombre d’états absorbants
s=3;//nombre d’états transients
P=genmarkov(ones(1,r),s);
Q=P(r+1:$,r+1:$);
R=P(r+1:$,1:r);
h=[1;0;(eye(Q)-Q)\(R*[1;0])];
Ph=P;
for i=r+1:r+s
for j=1:r+s
Ph(i,j)=Ph(i,j)*h(j)/h(i);
end;
end;
nbsimul=10000;
x=grand(20,’markov’,P,(r+s)*ones(1,nbsimul));
ind1=find(x(:,$)==1);
x1=x(ind1,:);
i=r+1;
ni=sum(x1(:,1:$-1)==i);
ni1=sum(x1(:,1:$-1)==i&x1(:,2:$)==1);
ni1/ni
Ph(i,1)
Exercice 5.2. Retournement du temps. Générer une matrice de transition aléatoire P pour une chaîne
de Markov Xk irréductible d’espace d’états à 5 éléments. Simuler un nombre n suffisant de pas de cette
chaîne de Markov. Estimer,
P
Pn pour tout couple (i, j) d’états la fréquence Q̃(i, j) = N (i, j)/N (i) (où N (i) =
n
1
,
N
(i,
j)
=
k=2 Xk =i
k=2 1Xk =i,Xk−1 =j ) du nombre de passages de i en j du processus retourné Xn−k
P (j, i)π(i)
, où π
(k = 0, . . . , n − 1). Comparer la matrice Q̃ à la matrice Q de terme général Q(i, j) =
π(j)
est la loi stationnaire de la chaîne initiale. Montrer que Q est la matrice de transition d’une chaîne de
Markov irréductible. Déterminer la loi stationnaire de cette chaîne de Markov.
5.2
Exemples
Dans beaucoup de cas, le mécanisme de transition d’une chaîne de Markov permet de simuler directement cette chaîne sans avoir à expliciter sa matrice de transition, ce qui permet en
particulier de simuler des chaînes d’espace d’états dénombrable.
5.2.1
Le modèle d’urne d’Ehrenfest
Les lois de la mécanique classique sont réversibles : un système confiné finira toujours par revenir
à un état proche de son état initial. Or la thermodynamique des particules semble montrer un
phénomène diamétralement opposé : un système tend toujours de manière irréversible vers un
état d’équilibre. Pour tenter d’expliquer cet apparent paradoxe, les physiciens Paul et Tatiana
Ehrenfest ont introduit un modèle d’urne très simple qui porte leur nom. Le modèle physique
est le suivant : on considère une enceinte confinée séparée en deux compartiments et contenant
N = 2L particules. A l’instant initial, toutes les particules sont dans l’un des compartiments.
64
Elles diffusent ensuite à travers la paroi séparant les compartiments de manière à se répartir
entre les deux. Le modèle d’urne associé consiste en deux urnes contenant N boules. A l’instant
initial, toutes les boules se trouvent dans l’une des urnes. A chaque unité de temps, on tire au
hasard une des N boules et on la change d’urne.
5.2.1.1
Le modèle microscopique
Dans cette description, on considère que toutes les particules (ou les boules) sont discernables.
Le système est alors représenté par l’espace d’états E = (Z/2Z)N , où la k-ième coordonnée
représente la position de la k-ième particule, 0̄ représentant un des compartiments et 1̄ l’autre.
Changer la k-ième particule de compartiment consiste à ajouter à l’état Xn du système à l’instant
n le vecteur (0, . . . , 1̄, . . . , 0), où 1̄ est situé à la k-ième position. Tirer une particule au hasard
avec équiprobabilité et la changer d’urne revient donc à ajouter à Xn une variable aléatoire de
loi uniforme sur l’ensemble E1 des vecteurs ayant exactement une coordonnée non nulle. La suite
(Xn )n∈N n’est autre qu’une marche aléatoire sur E, la loi de chaque pas étant la loi uniforme sur
E1 . On peut aussi représenter les éléments de E comme les sommets d’un graphe, deux points
étant voisins sur ce graphe si et seulement si ils diffèrent en exactement une coordonnée. La
chaîne est alors la marche aléatoire simple sur ce graphe.
5.2.1.2
Le modèle macroscopique
On suppose cette fois les particules indiscernables. L’état du système est alors représenté par le
nombre de particules dans chacun des deux compartiments. On choisit donc cette fois pour E
l’intervalle d’entiers {0, 1, . . . , N }, l’état Yn du système à l’instant n étant le nombre de particules
dans le compartiment initialement vide. La matrice de transition est cette fois donnée par P (i, i−
i
N −i
1) = , P (i, i + 1) =
pour tout i ∈ {0, 1, . . . , N }. Cette chaîne de Markov est récurrente :
N
N
elle revient indéfiniment à son état initial, mais l’espérance du temps de retour est telle que ce
retour est physiquement inobservable. En pratique, le système se rapproche très vite de l’équilibre,
et semble ensuite osciller très peu autour de sa position d’équilibre.
5.2.1.3
Simulations
On commence par représenter graphiquement pour diverses valeurs de N (par exemple N =
20, 50, 1000) une trajectoire du nombre Yn de particules dans le compartiment initialement vide
en utilisant le modèle microscopique.
N=50;n=1000;
x=zeros(1,N);
y=zeros(1,n);
for k=1:n-1
i=ceil(N*rand());
x(i)=1-x(i);
y(k+1)=y(k)+2*x(i)-1;
end;
plot(y)
On constate que le nombre de particules dans le compartiment initialement vide commence par
croître, puis se met à osciller autour de la valeur moyenne N/2.
On peut également utiliser ce modèle pour simuler la loi du temps d’atteinte de cette valeur
moyenne (N/2 particules dans chaque compartiment) et évaluer l’espérance de ce temps :
nbsimul=10000;t=zeros(1,nbsimul);
for j=1:nbsimul,
65
x=zeros(1:N);
k=0;y=0;
while y<N/2
i=ceil(N*rand());
x(i)=1-x(i);
y=y+2*x(i)-1;
k=k+1;
end;
t(j)=k;
end;
histplot(20,t);
mean(t)
On peut en fait donner une formule exacte pour l’espérance de ce temps d’atteinte en utilisant
le modèle macroscopique. Entrons d’abord la matrice de transition de cette chaîne de Markov :
function P=ehrenfest(N)
d1=(N-(0:N-1))/N;
d2=(1:N)/N;
P=diag(d1,1)+diag(d2,-1);
endfunction;
On peut alors utiliser la commande grand pour simuler cette chaîne de Markov et reprendre les
simulations précédentes :
P=ehrenfest(N);
nbsimul=10000;nmax=200;
y=grand(nmax,’markov’,P,ones(1,nbsimul));
t=zeros(nbsimul);
for k=1:nbsimul
t(k)=min(find(y(k,:)==N/2+1));
end;
sum(t==0)//nombre de simulations n’ayant pas atteint N/2
t(t==0)=nmax;
mean(t)
xbasc();histplot(20,t)
On peut aussi déterminer l’espérance du temps d’atteinte de N/2 en utilisant la matrice P (cf
5.1.2) :
Q=P(1:N/2,1:N/2);
temps=sum((eye(Q)-Q)^(-1),’c’);
On vérifie aisément que la loi stationnaire π du processus est la loi binomiale de paramètres N
et 0.5 :
pi1=eigenmarkov(P);
pi2=binomial(0.5,N);
norm(pi1-pi2)
On peut alors vérifier le théorème ergodique pour cette chaîne de Markov :
n
pour tout i = 0, . . . , N,
1X
lim
1i (Yk ) = π(i)
n→∞ n
k=1
66
presque sûrement.
nbpas=1e6;
x=grand(nbpas,’markov’,P,1);
histplot(0.5:N+1.5,x,style=2);
p=binomial(0.5,N);
plot2d3(1:N+1,p,style=5);
Par contre la loi de Yn ne converge pas vers la loi stationnaire : en effet la chaîne est périodique
de période 2 et Yn a toujours la parité de n. Une façon d’éliminer cette périodicité est de
considérer la chaîne Ỹn de matrice de transition Pα = αIN + (1 − α)P , où α ∈]0, 1[. Cette
chaîne a les mêmes transitions que la chaîne initiale, mais à chaque pas elle reste sur place avec
une probabilité α. Elle admet la même loi stationnaire que la chaîne initiale mais n’est plus
périodique. On constate que la loi de Ỹn converge vers la loi stationnaire :
0.12
alpha=0.1;
Palpha=(1-alpha)*P+alpha*eye(P);
nbsimul=10000;n=200;
y1=grand(n,’markov’,Palpha,ones(1,nbsimul));
histplot(-0.5:N+0.5,y1(:,$)-1)
plot2d2(-0.5:N+0.5,[pi2,0],style=5)
0.10
0.08
0.06
0.04
0.02
0.00
0
5
10
15
20
25
30
35
40
45
50
L’espérance du temps de retour Ei (Ri ) en i est l’inverse de π(i). On peut vérifier ce résultat en
prenant N pas trop grand et une situation initiale où toutes les particules sont situées dans un
même compartiment. Dans ce cas E0 (R0 ) = 2N est aussi l’espérance du temps d’atteinte de 0
en partant de 1 augmenté d’une unité :
N=20;
P=ehrenfest(N);
Q=P(2:$,2:$);
Q1=inv(eye(Q)-Q);
t1=1+sum(Q1(1,:))
t2=2^N
5.2.2
Le modèle de Wright-Fisher
Une population de taille constante N évolue sans mutation au cours du temps. Les individus
sont de deux types, A et B. La génération initiale comporte m individus du type A et N − m
individus du type B. Chaque individu de la (n + 1)-ième génération a un parent tiré au sort
avec équiprobabilité parmi les N individus de la génération précédente et hérite du type de
son unique parent. Tous les tirages sont supposés indépendants, de sorte que le nombre Xn
d’individus de type A dans la n-ième génération suit, conditionnellement à Xn−1 , la loi binomiale
de paramètres N et Xn−1 /N . Il en résulte que (Xn )n∈N est une chaîne de Markov d’espace d’états
E = {0, . . . , N }, d’état initial X0 = m et de matrice de transition :
j N
i
N − i N −j
P (i, j) =
j
N
N
pour tout (i, j) ∈ E × E .
Les deux états 0 et N sont absorbants pour cette chaîne de Markov, et les autres états communiquent tous entre eux. Il en résulte que Xn converge presque sûrement vers 0 ou N . Plus
précisément, (Xn )n∈N est une martingale bornée qui converge presque sûrement vers l’un de ces
deux états. Il en résulte que E(XT ) = X0 = m, où T est le temps de fixation de la chaîne, i.e.
T = inf{n ≥ 0 | Xn = 0 ou N }. La probabilité de fixation en N est donc P(XT = N ) = m/N et
67
celle de fixation en 0 est P(XT = 0) = 1 − m/N .
Vérifions-le par simulation. On commence par entrer la matrice de transition :
n=20;N=2*n;
P=zeros(N+1,N+1);
for i=0:N
P(i+1,:)=binomial(i/N,N);
end;
et par représenter graphiquement quelques trajectoires de la chaîne :
nbsimul=6;
genmax=300;
for k=1:nbsimul
x=grand(genmax,’markov’,P,n+1);
ind=min(find(x==1|x==N+1));
plot2d(0:ind,[n,x(1:ind)-1],style=k);
end;
On effectue ensuite un plus grand nombre de simulations pour tester la probabilité de fixation
en l’un ou l’autre des états ainsi que la loi du temps de fixation :
nbsimul=10000;
x=grand(genmax,’markov’,P,(n/2+1)*ones(1,nbsimul));
//initialement 10 individus de type A
temps=sum(x>1&x<N+1,’c’)+1;//temps de fixation empiriques
f0=sum(x(:,$)==1)/nbsimul;//fréquence de fixation en 0
disp(’fréquence de fixation en 0: ’+string(f0));
xbasc();histplot(20,temps);
On peut alors comparer la loi empirique du temps de fixation à sa loi théorique :
Q=P(2:$-1,2:$-1);R=eye(Q)-Q;
tmax=max(temps);
tempsth=zeros(1,tmax);
for k=1:tmax,
tempsth(k)=sum(R(n/2,:));
R=Q*R;
end;
plot2d(1:tmax,tempsth,style=5);
Exercice 5.3. Processus généalogique associé
Déterminer la probabilité que deux individus donnés de la n-ième génération aient un parent commun,
puis la probabilité qu’ils aient un ancêtre commun. Simuler la loi du nombre d’individus de la génération
initiale ayant un descendant à la n-ième génération. Evaluer par simulation le temps d’apparition
dans le passé de l’ancêtre commun le plus récent de la génération actuelle. Représenter graphiquement
l’évolution dans le temps du nombre d’ancêtres de cette génération.
Exercice 5.4. Chaîne conditionnée
On s’intéresse à la chaîne conditionnée à se fixer en 0. On peut montrer que le processus ainsi conditionné
est encore une chaîne de Markov et qu’on peut le décrire de la façon suivante : chaque individu sauf un
choisit son parent de la même manière que précédemment, le dernier parent étant systématiquement de
type B. Vérifier par la simulation que ce modèle équivaut bien à la chaîne conditionnée.
68
5.2.3
Le processus de Galton-Watson
On étudie l’évolution d’une population au cours du temps. On note Zn la taille de cette
population à la n-ième génération et on suppose que la génération initiale comporte un seul
individu, de sorte que Z0 = 0. Tout individu a un nombre aléatoire de descendants, et on
suppose tous ces nombres indépendants et équidistribués. Pour modéliser cette situation, on
(i)
introduit une famille (Xn )n≥0,i≥1 de variables aléatoires indépendantes et équidistribuées à
(i)
valeurs dans N : Xn sera le nombre de descendants du i-ième individu de la n-ième génération,
P n (i)
(i)
si cet individu existe. On a donc : Zn+1 = Z
i=1 Xn . On suppose les variables aléatoires Xn
intégrables, on note m leur espérance et g leur fonction génératrice. On s’intéresse en particulier
à la probabilité d’extinction q de la population, i.e. la probabilité q = P(T < +∞) que l’instant
d’extinction T de la population, défini par T = inf{n ∈ N | Zn = 0}, soit fini.
On remarque d’abord que l’événement {T < +∞} est la réunion croissante de la suite d’événements {Zn = 0}. Il en résulte que q est la limite de la suite croissante P(Zn = 0) = gn (0), où gn
est la fonction génératrice de Zn . On a g0 (s) = s, g1 = g et la relation E(sZn+1 | Zn ) = g(s)Zn
implique gn+1 (s) = gn (g(s)) pour tout n ≥ 0 et tout s ∈ [0, 1], d’où aussi gn+1 (s) = g(gn (s)).
On en déduit que q est la plus petite solution dans [0, 1] de l’équation g(s) = s. Cette solution
vaut 1 si m < 1 (cas sous-critique) ou m = 1 et g(s) 6= s (cas critique). Elle appartient à [0, 1[
sinon (cas surcritique).
Si la population initiale comporte k individus, i.e. Z0 = k, la probabilité d’extinction de la
population est égale à q k .
Le programme ci-dessous représente 10 trajectoires du processus Zn :
loi=[0.5 0.2 0.1 0.2]’;nbsimul=10;nmax=100;
for k=1:nbsimul
z=1;nbgen=0;
while z($)>0&z($)<nmax
z=[z,(0:length(loi)-1)*grand(1,’mul’,z($),loi(1:$-1))];
nbgen=nbgen+1;
end;
plot2d(0:nbgen,z,style=k);
end;
On peut également simuler un grand nombre de réalisations de ce processus pour évaluer empiriquement la probabilité d’extinction, puis calculer la probabilité théorique d’extinction et tracer
le graphe sur [0, 1] de la fonction génératrice :
loi=[0.3 0.2 0.3 0.2]’;nbsimul=10000;nmax=100;
//probabilite d’extinction empirique (cas surcritique)
results=zeros(1,nbsimul);
for k=1:nbsimul
z=1;
while z>0&z<nmax
z=(0:length(loi)-1)*grand(1,’mul’,z,loi(1:$-1));
end;
if z==0 then results(k)=1;end;
end;
disp(’probabilite empirique d’’extinction: ’+..
string(sum(results)/nbsimul));
function y=g(s) //fonction generatrice de la loi de reproduction
69
y=loi’*s.^(0:length(loi)-1)’;
endfunction;
function y=h(s)
y=g(s)-s;
endfunction;
// h(s)=g(s)-s
q=fsolve(0,h);
disp(’probabilite theorique d’’extinction: ’+..
string(q));
t=linspace(0,1);
plot(t,g,’b’);
plot([0 1],[0 1],’r’);
probabilite empirique d’extinction: 0.5014
probabilite theorique d’extinction: 0.5
Zn
On vérifie facilement que la suite Wn = n est une martingale positive. Elle converge donc
m
presque sûrement, ce que l’on peut vérifier graphiquement dans le cas surcritique :
loi=[0.4 0.1 0.5]’;nbsimul=10;nmax=100;
//trajectoires du processus normalisé (cas surcritique)
m=(0:length(loi)-1)*loi;
trajectoires=zeros(nbsimul,nmax);
for k=1:nbsimul
z=1;
for n=1:nmax-1
if z>0 then
z=(0:length(loi)-1)*grand(1,’mul’,z,loi(1:$-1));
trajectoires(k,n+1)=z/m^n;
else break;
end;
end;
end;
plot2d(0:nmax,[zeros(1,nbsimul);trajectoires’])
14
12
10
8
6
4
2
0
0
10
20
30
40
50
60
70
80
90
100
Exercice 5.5. Population totale d’un processus de Galton-Watson.
T
−1
∞
X
X
Zn la population totale d’un processus de Galton-Watson et h sa fonction
Zn =
Soit Y =
n=0
n=0
70
génératrice. La variable aléatoire Y est finie si et seulement si T l’est et son espérance est, si m < 1,
∞
X
1
la somme
E(Zn ). La fonction génératrice h(s) = E(sY ) de Y vérifie, pour tout
de la série
1−m
n=0
s ∈ [0, 1], h(s) = sg(h(s)) (conditionner par rapport à la taille Z1 de la génération à l’instant 1). C’est
s
donc la fonction réciproque de la fonction s →
.
g(s)
1) Expliciter cette solution dans le cas où p0 + p2 = 1. En déduire dans ce cas la loi de Y . Montrer que
cette loi est celle du temps d’atteinte de 1 par la marche aléatoire simple sur Z de paramètre p = p0 .
Vérifier ce résultat par la simulation.
2) Dans le cas où la loi du nombre de descendants est la loi de Poisson de paramètre θ < 1, on montre
k k−1
pour k ≥ 1. Vérifier ce
que la loi de Y est la loi de Borel de paramètre θ sur N∗ : P(Y = k) = e−kθ
k!
résultat par simulation.
3) Dans le cas où le nombre de descendants est borné, déterminer numériquement la loi de la population
totale. Vérifier ce calcul par simulation.
5.2.4
L’urne de Polya
Une urne contient des boules noires et des boules blanches. On effectue une suite de tirages
dans cette urne de la façon suivante : à chaque tirage, on tire une boule avec équiprobabilité, on
regarde sa couleur, on la remet dans l’urne et on y rajoute une boule de la même couleur. On
note Nk (resp. Bk ) le nombre de boules noires (resp. blanches) dans l’urne après k tirages, et
Bk
la proportion de boules blanches après ces k tirages.
Xk =
Bk + N k
La loi conditionnelle de (Bk+1 , Nk+1 ) sachant (Bk , Nk ) est donnée par :
b
b+n
n
.
= Nk + 1 | Bk = b, Nk = n) =
b+n
P(Bk+1 = Bk + 1, Nk+1 = Nk | Bk = b, Nk = n) =
P(Bk+1 = Bk , Nk+1
Il en résulte que (Xk )k∈N est une martingale positive, qui converge donc presque sûrement. La
loi de la limite sous les conditions initiales B0 = i, N0 = j est
la loi bêta B(i, j).
En particulier
1
k+1
pour B0 = N0 = 1, Xk suit pour tout k l’équiprobabilité sur
,...,
; sa limite suit
k+2
k+2
donc la loi uniforme sur [0, 1]. On peut vérifier ces résultats par la simulation. Commençons par
représenter quelques trajectoires :
nbsimul=10;
nbpas=100;
for k=1:nbsimul
b=ones(1,nbpas);
for i=1:nbpas-1
if rand()<b(i)/(i+1) then b(i+1)=b(i)+1;
else b(i+1)=b(i);
end;
end;
plot2d(0:nbpas-1,b./(2:nbpas+1),style=k);
end;
71
Urne de Polya : b0=2, n0=4
1.0
2.5
0.9
2.0
0.8
0.7
1.5
0.6
0.5
1.0
0.4
0.3
0.5
0.2
0.1
0.0
0
10
20
30
40
50
60
70
80
90
100
0.0
0.1
0.2
0.3
0.4
0.5
0.6
Vérifions maintenant que la loi de X1000 approche bien la loi bêta :
nbsimul=10000;
nbpas=1000;
b0=input("Nombre de boules blanches");
n0=input("Nombre de boules noires");
b=b0*ones(nbsimul,1);
for i=1:nbpas
r=rand(nbsimul,1);
ind=find(r<b/(i+n0+b0-1));
b(ind)=b(ind)+1;
end;
xbasc();
histplot(0:0.02:1,b/(b0+n0+nbpas))
t=0:0.005:1;
F=cdfbet(’PQ’,t,1-t,b0*ones(t),n0*ones(t));
f=(F(2:$)-F(1:$-1))/0.005;
plot((t(1:$-1)+t(2:$))/2,f,’r’);
xtitle(’Urne de Polya : b0=’+string(b0)’+’, n0=’+string(n0));
72
0.7
0.8
0.9
1.0
Chapitre 6
Processus à temps continu
6.1
Le processus de Poisson
On appelle processus de Poisson d’intensité λ le processus de comptage associé à la suite
(Sn )n∈N∗ des sommes partielles d’une suite (Xn )n∈N∗ de variables aléatoires indépendantes suivant toutes la même loi exponentielle de paramètre λ > 0 :
Nt =
∞
X
n=1
où Sn =
1Sn ≤t
pour tout t ≥ 0 ,
Pn
k=1 Xk .
Exercice 6.1. Loi de Sn : Montrer que pour tout n ≥ 1, Sn suit la loi gamma de paramètres n et λ,
c’est-à-dire la loi de densité :
e−λs λn sn−1
fSn (s) = 1[0,+∞[ (s)
.
(n − 1)!
On peut commencer par représenter une trajectoire de ce processus :
//processus de Poisson d’intensité lambda
n=10;lambda=2;
S=[0,cumsum(grand(1,n,’exp’,1/lambda))];
plot2d2(S,0:n,style=2)
Le processus de Poisson tire son nom de ce que la loi de Nt est la loi de Poisson de paramètre
λt, ce que l’on vérifie facilement :
nbsimul=10000;
lambda=2;t=10;
S=cumsum(grand(nbsimul,50,’exp’,1/lambda),’c’);
Nt=sum(S<t,’c’);
//vérification que S_50>t pour toutes les simulations
sum(S(:,$)<t)
histplot(-0.5:50.5,Nt,style=2);
y=cdfpoi(’PQ’,0:50,t*lambda*ones(1,51));
plot2d3(0:50,y-[0,y(1:$-1)],style=5)
Exercice 6.2. Effectuer un test du χ2 pour vérifier l’adéquation de la loi empirique de Nt à la loi de
Poisson.
Le processus de Poisson est un processus à accroissements indépendants et stationnaires (ses accroissements sur des intervalles de temps disjoints sont indépendants et leurs lois sont invariantes
par translation du temps). Plus précisément :
73
Théorème : Soient N un processus de Poisson de paramètre λ et 0 = t0 < t1 < t2 < · · · < tp
des réels. Alors les variables aléatoires Nt1 , Nt2 − Nt1 , . . . , Ntp − Ntp−1 sont indépendantes et
suivent des lois de Poisson de paramètres respectifs λt1 , λ(t2 − t1 ), . . . , λ(tp − tp−1 ) :
p
Y
(λ(tk − tk−1 ))nk
e−λ(tk −tk−1 )
P Nt1 = n1 , Nt2 − Nt1 = n2 , . . . , Ntp − Ntp−1 = np =
.
nk !
k=1
Exercice 6.3. Vérifier que les accroissements de Nt sur deux intervalles de temps disjoints ne sont pas
corrélés.
6.1.1
Âge et durée de vie résiduelle
Pour tout réel t, on a SNt ≤ t < SNt +1 . On définit des variables aléatoires réelles positives Ut et
Vt (t ∈ [0, +∞[) par Ut = t − SNt et Vt = SNt +1 − t. Si la suite (Sn )n∈N représente les instants
où l’on change un composant, Ut représente donc l’âge du composant en place à l’instant t et Vt
sa durée de vie résiduelle. On démontre le résultat suivant :
Proposition : Pour tout réel t ≥ 0, les variables aléatoires Ut et Vt sont indépendantes. La loi
de Ut est celle de X1 ∧ t et celle de Vt est égale à celle de X1 (c’est-à-dire la loi exponentielle de
paramètre λ).
2 − e−λt
, qui
En particulier l’espérance de la longueur de l’intervalle [SNt , SNt +1 ] est égale à
λ
2
tend très vite vers , alors que l’espérance de la longueur de chaque intervalle inter-arrivées Xk
λ
1
est (ce qu’on appelle parfois paradoxe de l’inspection).
λ
Exercice 6.4. Vérifier par la simulation cette propriété.
6.1.2
Loi conditionnelle des instants d’arrivées
Une autre modélisation possible du processus de Poisson repose sur la propriété suivante :
Proposition : La variable aléatoire (S1 , . . . , Sn ) des instants successifs d’arrivées a, conditionnellement à Nt = n, la même loi que la statistique d’ordre (U1∗ , . . . , Un∗ ) obtenue en ordonnant
par ordre croissant une suite (Uk )k=1,...,n de variables aléatoires indépendantes équidistribuées
de loi uniforme sur [0, t] :
{U1∗ , . . . , Un∗ } = {U1 , . . . , Un }
et
U1∗ < · · · < Un∗ .
On peut utiliser cette propriété pour simuler une trajectoire du processus de Poisson sur un
intervalle de temps de longueur donnée :
lambda=2;t=10;
nt=grand(1,1,’poi’,t*lambda);
S=gsort(t*rand(1,nt),’g’,’i’);
plot2d2([0,S],0:nt);
Exercice 6.5. Vérifier sur ce modèle le caractère exponentiel des temps inter-arrivées.
74
6.1.3
Superposition et décomposition de processus de Poisson
Proposition : Soient (Mt )t≥0 et (Nt )t≥0 deux processus de Poisson indépendants d’intensités respectives λ et µ. Alors le processus (Mt +Nt )t≥0 est un processus de Poisson d’intensité λ+µ.
Exercice 6.6. Vérifier que les temps inter-arrivées du processus (Mt + Nt )t≥0 sont bien exponentiels de
paramètre λ + µ.
Proposition : Soient (Mt )t≥0 un processus de Poisson d’intensité λ et (Yn )n≥1 une suite i.i.d.
de variables aléatoires à valeurs dans {1, . . . m} de loi commune {p1 , . . . , pm } indépendante du
∞
X
(i)
(i)
1Sn ≤t 1Yn =i , où (Sn )n≥1
processus (Mt )t≥0 . On définit m processus (Mt )t≥0 par Mt =
n=1
(i)
est la suite des temps d’arrivée du processus (Mt )t≥0 . Alors les m processus (Mt )t≥0 sont des
processus de Poisson indépendants d’intensités respectives λpi .
Exercice 6.7. Vérifier ce résultat par la simulation.
6.1.4
Processus de Poisson composé
Soit λ un réel positif et µ une loi de probabilité sur R. On appelle processus de Poisson composé
d’intensité λ et de loi de sauts µ le processus (Zt )t≥0 défini par
Zt =
∞
X
1Sn ≤t Yn
n=1
où (Sn )n≥1 est la suite des temps d’arrivée d’un processus de Poisson (Mt )t≥0 d’intensité λ et
(Yn )n≥1 une suite i.i.d. de variables aléatoires réelles de loi µ indépendante de (Mt )t≥0 .
Les trajectoires d’un tel processus se représentent aisément :
//processus de Poisson composé à loi de sauts gaussienne
n=50;lambda=2;
S=[0,cumsum(grand(1,n,’exp’,1/lambda))];
Z=[0,cumsum(grand(1,n,’nor’,0.5,1))];
plot2d2(S,Z,style=2)
Exercice 6.8. Vérifier par la simulation que l’espérance et la variance de Zt valent respectivement λtm
et λt(σ 2 + m2 ), où m et σ sont l’espérance et l’écart-type des variables aléatoires Yn .
6.1.5
Processus de Poisson non homogène
Soit λ une fonction mesurable positive sur [0, +∞[ intégrable sur tout compact. On appelle
processus de Poisson d’intensité λ tout processus (Nt )Rt≥0 à accroissements indépendants tel que
t
la loi de Nt − Ns soit la loi de Poisson de paramètre s λ(u) du pour tout couple s < t.
Un tel processus peut se simuler par effacement à partir d’un processus de Poisson homogène
(i.e. d’intensité constante). Supposons pour cela λ majorée par une constante Λ. Soit (Mt )t≥0 un
processus de Poisson d’intensité Λ et (Nt )t≥0 le processus obtenu en gardant le n-ième saut de
λ(Sn )
(Mt )t≥0 avec probabilité
, où Sn est l’instant de ce n-ième saut. En formule :
Λ
Nt =
∞
X
1Sn ≤t 1U
n=1
n≤
λ(Sn )
Λ
où (Un )n≥1 est une suite i.i.d. de variables aléatoires uniformes sur [0, 1] indépendante du
processus (Mt )t≥0 . On montre alors que le processus (Nt )t≥0 est un processus de Poisson
75
d’intensité λ.
Exercice 6.9. Simuler par effacement un processus de Poisson (Nt )t≥0 d’intensité λ(t) = 50(1+cos(2πt)).
Vérifier que les accroissements ∆s,t = Nt − Ns de ce processus suivent des lois de Poisson de paramètres
Rt
m(t) − m(s) = s λ(u) du.
6.1.6
Processus de Poisson dans le plan :
Soit D = [a, b] × [c, d] un rectangle, λ > 0 un réel, N une variable aléatoire suivant la loi de
Poisson de paramètre λ(b − a)(d − c) et (Xn )n∈N∗ une suite indépendante équidistribuée de
variables aléatoires de loi uniforme dans D indépendante de N . Pour tout borélien B de D, on
définit une variable aléatoire NB à valeurs entières par :
NB =
N
X
1B (Xk ) .
k=1
On montre alors que pour toute partition D = B1 ∪ B2 ∪ · · · ∪ Bp de D par des boréliens,
les variables aléatoires NB1 , . . . , NBp sont indépendantes et suivent des lois de Poisson de
paramètres λµ(B1 ), . . . , λµ(Bp ), où µ désigne la mesure de Lebesgue sur R2 .
Exercice 6.10. Simuler un processus de Poisson de paramètre λ = 100 dans le carré D = [0, 1] × [0, 1].
Vérifier que les variables aléatoires N1 et N2 égales au nombre de points du processus appartenant aux
domaines D1 et D2 , où D1 est le disque de centre (0.2, 0.6) et de rayon 0.2 et D2 le triangle défini par
y ≤ x, sont non corrélées et suivent les lois de Poisson de paramètres respectifs 4π et 50.
Exercice 6.11. Un modèle écologique
1) On étudie une population de plantes qui évolue d’année en année. On suppose qu’initialement ces
plantes sont distribuées dans le plan suivant un processus de Poisson d’intensité constante λ. À la génération suivante, chacune de ces plantes a un descendant situé à la position x + D(x) si la plante initiale
est située en x ∈ R2 , où les variables aléatoires D(x) (x ∈ R2 ) représentant les déplacements des plantes
relativement à leur parent sont supposées indépendantes équidistribuées et indépendantes du processus
de Poisson initial. Montrer que la distribution des plantes reste constante au fil des années. Tester ce
résultat par la simulation.
2) On suppose maintenant que chaque plante a un nombre aléatoire de descendants suivant une loi de
Poisson de paramètre α, chacun de ces descendants subissant un déplacement lui-même aléatoire. Tous
ces déplacements sont supposés indépendants et indépendants de la position initiale et du nombre de descendants de chaque plante. Montrer que la famille des déplacements des descendants d’une même plante
constitue un processus de Poisson plan dont on précisera l’intensité en fonction de α et de la loi des
déplacements. Tester par la simulation la nature poissonienne du processus des localisations des plantes
de la seconde génération. On pourra supposer les déplacements bornés (par exemple de loi uniforme sur
un disque centré en la position de la plante parente) et on étudiera l’indépendance du nombre de plantes
de seconde génération dans deux domaines contigus du plan.
Exercice 6.12. On se propose de tirer au hasard une famille de droites dans le plan. On représente pour
cela toute droite D par son équation normale x cos θ + y sin θ − p = 0, où θ ∈ [0, 2π[ est l’angle polaire
de la normale à D et p > 0 la distance de l’origine à D. On suppose que les points (p, θ) associés à la
famille de droites aléatoires constituent une réalisation d’un processus de Poisson d’intensité constante λ
sur [0, +∞[×[0, 2π[.
1) Représenter l’intersection du carré [−A, +A]2 , où A est un réel donné, avec les droites de ce processus.
2) On peut montrer que la loi de cette famille de droites est invariante par toutes les isométries du plan.
Vérifier que les distances d’un point fixé du plan à cette famille de droites constituent bien une réalisation
d’un processus de Poisson sur [0, +∞[ et préciser l’intensité de ce processus.
76
6.2
6.2.1
Processus markoviens de sauts
Définition et propriétés
Un processus à temps continu (Xt )t≥0 à valeurs dans un espace fini ou dénombrable E est un
processus de sauts s’il existe une suite strictement croissante (Tn )n≥1 tendant vers l’infini d’instants aléatoires (les instants de sauts) tels que Xt soit constant sur chaque intervalle [Tn , Tn+1 [
et vérifie XTn+1 6= XTn pour tout n ≥ 0 (en posant T0 = 0).
Un processus de sauts est markovien si, pour tout t ≥ 0, la loi conditionnelle du futur (Xs )s≥t
du processus sachant tout son passé (Xs )0≤s≤t est égale à la loi conditionnelle du futur (Xs )s≥t
sachant Xt .
Un processus markovien de sauts peut se décrire de la façon suivante : si à l’issue du saut intervenu à l’instant Tn , le processus se trouve en un état x de E, il reste en x pendant un temps
aléatoire Tn+1 − Tn suivant une loi exponentielle de paramètre λ(x) (dépendant de x) et indépendant de son passé ; à l’instant Tn+1 , il saute de l’état x en un état y avec une probabilité p(x, y)
indépendante de tout son passé (y compris la durée de séjour Tn+1 − Tn en x). La matrice P
est donc la matrice de transition d’une chaîne de Markov à temps discret d’espace d’états E de
diagonale nulle. La chaîne de Markov (XTn )n≥0 est appelée chaîne incluse du processus (Xt )t≥0 .
Les probabilités de transition du processus (Xt )t≥0 sont définies par :
Pt (x, y) = P(Xt = y | X0 = x) = P(Xs+t = y | Xs = x)
pour tout (x, y) ∈ E × E et tout (s, t) ∈ [0, +∞[2 .
Ces probabilités de transition forment un semi-groupe : Pt+s = Pt Ps pour tout (s, t) ∈ [0, +∞[2
et les fonctions t 7→ Pt (x, y) sont dérivables à droite en tout point. La matrice Q dérivée à droite
en 0 de Pt , de coefficients :
(
λ(x)p(x, y) si x 6= y
Pt (x, y) − δx,y
q(x, y) = lim
=
t→0+
t
−λ(x)
si x = y
est appelée générateur du processus. Tous les coefficients hors de la diagonale de la matrice Q
sont positifs ou nuls, et la somme des coefficients d’une ligne est toujours nulle.
Les coefficients q(x, y) représentent les intensités de saut du processus :
P(Xt = y | X0 = x) = q(x, y)t + o(t)
pour tout y 6= x
et :
P(Xt = x | X0 = x) = 1 + q(x, x)t + o(t) = 1 − λ(x)t + o(t) .
Le semi-groupe (Pt )t≥0 vérifie les équations de Kolmogorov :
dPt
= Pt Q = QPt
dt
pour tout t ≥ 0 ,
dPt
désigne la dérivée à droite de Pt au point t.
dt
En particulier, si E est fini, ces équations s’intègrent : Pt = etQ .
où
6.2.2
Lois stationnaires
Une loi de probabilité π sur E est dite stationnaire (ou invariante) si elle vérifie πPt = π pour
tout t ≥ 0, ou encore πQ = 0. Si X0 a pour loi une loi stationnaire π, la loi de Xt est égale à π
pour tout t ≥ 0.
Il n’existe pas toujours de loi stationnaire (le processus de Poisson fournit un exemple élémentaire), mais on montre que s’il existe une et si le processus est irréductible (tous les états
communiquent), alors :
77
– cette probabilité invariante est unique ;
– Pt (x, y) tend vers π(y) pour tout (x, y) ∈ E 2 (où π est la probabilité invariante) quand t tend
vers
Z l’infini ;
1 t
–
1Xs =y ds tend presque sûrement vers π(y) pour tout y ∈ E quand t tend vers l’infini, et
t 0
ce quelle que soit la loi de X0 (théorème ergodique).
6.2.3
Simulation par variables exponentielles
Une interprétation possible de l’évolution du processus est la suivante : quand le processus arrive
dans l’état x, un saut potentiel vers l’état y a lieu au bout d’un temps aléatoire de loi exponentielle
de paramètre q(x, y) (et donc d’espérance 1/q(x, y)), tous ces temps étant indépendants ; c’est
le premier de ces sauts qui se produit effectivement. La loi du temps de séjour en x est donc la
loi du minimum d’une famille de variables aléatoires exponentielles
X indépendantes de paramètres
q(x, y).
q(x, y) (y 6= x), i.e. la loi exponentielle de paramètre λ(x) =
y6=x
On peut remarquer que c’est ainsi que se présentent naturellement certains processus markoviens
de sauts (le processus de Poisson ou les files d’attente M/M/s). Le programme suivant utilise
cette représentation pour simuler une trajectoire d’un processus markovien de sauts de générateur
donné à valeurs dans un espace d’états fini :
function [etats,temps]=markov1(n,Q,x0)
//simulation de n sauts d’un processus de générateur Q
//état initial x0
//etats: les états visités (y compris l’état initial)
//temps: les temps de séjour dans ces états
etats=zeros(1,n+1);
temps=zeros(1,n);
m=size(Q,’c’);
etats(1)=x0;
ieee(2);//pour autoriser les divisions par 0
P=Q-diag(diag(Q));
for k=1:n
t=grand(1,m,’exp’,1)./P(etats(k),:);
[temps(k),etats(k+1)]=min(t);
end;
etats=etats(1:$-1);
ieee(0);
endfunction;
Cette méthode de simulation n’est en général pas la plus efficace du point de vue du temps de
calcul.
6.2.4
Simulation par la chaîne incluse
La simulation par la chaîne incluse se base sur la représentation suivante d’un processus markovien de sauts : si (Xn )n≥0 est une chaîne de Markov à temps discret de matrice de transition
P , et (Vn )n≥0 une suite i.i.d. de variables aléatoires exponentielles de paramètre 1, la suite des
temps
n
X
V (Xk )
Tn =
λ(Xk )
k=1
78
est la suite des instants de sauts d’un processus markovien de sauts visitant successivement les
états Xk .
Le programme suivant utilise cette représentation :
function [etats,temps]=markov2(n,Q,x0)
//simulation d’une trajectoire de longueur n issue de x0
//d’un processus markovien de sauts de générateur Q
//etats: les états visités, temps: les temps de séjour
lambda=-diag(Q);
P=Q+diag(lambda);
P=P./(lambda*ones(lambda’));//matrice de transition de la chaine incluse
etats=[x0,grand(n,’markov’,P,x0)];
temps=(grand(n+1,1,’exp’,1)./lambda(etats))’;
endfunction;
6.2.5
Simulation par la chaîne harmonisée
Une autre méthode de simulation consiste à utiliser la chaîne de Markov à temps discret de
1
matrice de transition R = I + Q, où Λ est un majorant de {λ(x) | x ∈ E} si λ est majorée
Λ
(ce qui est toujours le cas si E est fini). Cette matrice est bien la matrice de transition d’une
chaîne de Markov à temps discret d’espace d’états E (tous ses coefficients sont positifs et la
somme des coefficients de chaque ligne est égale à 1). On montre alors que si (Xn )n≥0 est une
chaîne de Markov à temps discret de matrice de transition R, (Vn )n≥0 une suite i.i.d. de variables
n
X
Vk
aléatoires exponentielles de paramètre 1, et Tn =
, le processus à temps continu égal à Xn
Λ
k=1
sur l’intervalle [Tn , Tn+1 [ est un processus markovien de sauts de générateur Q. Le programme
suivant utilise ce résultat pour simuler une trajectoire de ce processus :
function [etats,temps]=markov3(n,Q,x0)
//simulation d’une trajectoire de longueur n issue de x0
//d’un processus markovien de sauts de générateur Q
//etats: les états visités, temps: les temps de séjour
lambda=-diag(Q);
lambdamax=max(lambda);
R=eye(Q)+Q/lambdamax;
etats=[x0,grand(n,’markov’,R,x0)];
temps=grand(1,n+1,’exp’,1)/lambdamax;
endfunction;
Il faut remarquer que l’on n’obtient pas ainsi n sauts du processus, certains sauts de la chaîne
harmonisée étant fictifs : si l’on veut vraiment obtenir n sauts du processus à temps continu, il
faut simuler davantage de pas de la chaîne harmonisée. Cette méthode peut néanmoins se révéler
plus efficace numériquement que la précédente.
Un des avantages de la chaîne harmonisée est que sa loi stationnaire est aussi la loi stationnaire
du processus de sauts (ce qui n’est pas le cas pour la chaîne incluse, sauf si les intensités de
sauts λ(x) ne dépendent pas de x). La fonction suivante utilise cette remarque pour calculer la
loi stationnaire :
function pi=eigen(Q)
//loi stationnaire d’un processus markovien de saut de générateur Q
lambda=-diag(Q);
lambdamax=max(lambda);
79
P=eye(Q)+Q/lambdamax;
pi=eigenmarkov(P);
endfunction;
Exercice 6.13. Écrire une autre fonction (utilisant les fonctions d’algèbre linéaire de Scilab) pour calculer
la loi stationnaire d’un processus markovien de sauts de générateur donné.
Exercice 6.14. Tester les trois méthodes de simulation proposées pour un processus markovien de sauts
à deux états. Vérifier dans ce cas le théorème ergodique.
Exercice 6.15. Un système est constitué de trois composants A, B, C dont les durées de vie sont des
variables aléatoires X, Y , Z indépendantes de lois exponentielles de paramètres respectifs λ, µ, ν. Á
l’instant initial, les trois composants sont en état de marche. Une panne de C ou une panne simultanée
de A et B entraîne l’arrêt du système.
Proposer une modélisation du sytème par un processus de Markov homogène (on distinguera 4 états
pour le système, dont l’un absorbant). Écrire le générateur infinitésimal de ce processus. Écrire, puis
résoudre les équations de Kolmogorov associées. Simuler le fonctionnement d’un tel système et comparer
les probabilités de fonctionnement empiriques aux probabilités de fonctionnement calculées.
6.3
Files d’attente
Une file d’attente est constituée d’un ou plusieurs serveurs dans lesquels arrivent des clients
qui sont servis suivant certaines règles ou disciplines (le plus souvent : premier arrivé premier
servi, en anglais FIFO : first in first out, ou dernier arrivé premier servi, en anglais LIFO :
last in first out, mais il peut y en avoir d’autres...). Le flot d’arrivée des clients constitue un
processus de renouvellement à temps continu et les temps de service sont des variables aléatoires
indépendantes équidistribuées, indépendantes du processus des arrivées.
Nous considérerons d’abord des files d’attente à un seul serveur, où le premier arrivé est le premier
servi. Une telle file se note traditionnellement G/G/1, en utilisant les notations de Kendall.
Une file d’attente est représentée, dans ce système, par une suite de symboles A/S/P/..., où A
représente le type du processus d’arrivées, S la loi du temps de service, P le nombre de serveurs
et les points de suspension d’autres paramètres éventuels dont nous ne parlerons pas ; A et S
peuvent prendre par exemple les valeurs G (loi générale), D (loi déterministe, pour des temps qui
ne dépendent pas du hasard), M (pour Markov : loi exponentielle, ou sans mémoire). La chaîne
M/M/1 correspond par exemple à des temps inter-arrivées et de services exponentiels et à un
seul serveur.
6.3.1
La file d’attente G/G/1
On considère ici une file d’attente à un serveur. On note An (n ≥ 1) les instants d’arrivée des
clients et Yn = An − An−1 les temps inter-arrivées (en posant A0 = 0). Les variables aléatoires Yn
sont supposées indépendantes équidistribuées intégrables et on note 1/λ leur espérance commune.
Le temps de service du n-ième client est noté Sn . Les variables aléatoires Sn sont également
indépendantes équidistribuées, intégrables, indépendantes des instants d’arrivées, d’espérance
commune 1/µ. Ces notations s’expliquent : si les arrivées constituent un processus de Poisson,
λ
E(S1 )
λ en est le paramètre et représente l’intensité du flot d’arrivées. Le quotient ρ =
=
µ
E(Y1 )
s’appelle l’intensité de trafic. On note Nt le nombre de clients dans le système à l’instant t (c’està-dire le nombre de clients en attente ou en train d’être servis).
Le comportement asymptotique de la file dépend fortement de la valeur de ρ : si ρ > 1, il arrive en
moyenne plus de clients que l’on ne peut en servir ; le serveur va donc finir par se congestionner.
Au contraire, si ρ < 1, la file va presque sûrement finir par être vide à certains instants, comme
le montre la proposition suivante.
80
Proposition : Si l’intensité de trafic ρ est strictement plus petite que 1, la file se vide presque
sûrement une infinité de fois.
La fonction suivante prend en entrée les instants d’arrivées des clients et les durées de service
d’une file G/G/1 et retourne les instants où un événement (arrivée ou départ) se produit, ainsi
que le nombre de clients présents dans la file après chaque événement :
function [e,d,n]=GG1(a,s)
//file d’attente générale FIFO à un serveur
//a: vecteur ligne des instants d’arrivée
//s: vecteur ligne des temps de service
//(deux vecteurs de même longueur m)
//e: instants des événements (arrivées ou départs)
//d: vecteur ligne des instants de départs
//n: nombre de clients dans la file après chaque événement
d=zeros(a);m=length(a);
dn=ones(1,2*m);//variation du nombre de clients dans le système: +1 ou -1
d(1)=a(1)+s(1);//premier client
for k=1:m-1
d(k+1)=max(a(k+1),d(k))+s(k+1);
end;
[e,ind]=gsort([a,d],’g’,’i’);
dn(ind>m)=-1;//departs
n=cumsum(dn);
endfunction;
Exercice 6.16. Ecrire une fonction retournant le temps d’attente moyen d’un client (temps séparant
son arrivée du début de son service), le temps total moyen passé par un client dans le système (temps de
réponse = temps d’attente + temps de service), ainsi que la longueur moyenne de la file.
Exercice 6.17. Soit R le temps total moyen qu’un client d’une file G/G/1 passe dans le système :
n
1X
Rk , où Rk est le temps passé par le k-ième client dans le système, et N le nombre
R = lim
n→+∞ n
k=1
Z
1 t
moyen de clients présents : N = lim
Ns ds. On peut montrer que N = λR (formule de Little).
t→+∞ t 0
Vérifier ce résultat par la simulation.
6.3.2
Le cas markovien
Dans le cas des files d’attente M/M/p, où les temps inter-arrivées et les temps de service suivent
tous des lois exponentielles et p est un entier ≥ 1 ou +∞, le nombre Nt de clients présents dans
le système à l’instant t est un processus markovien de sauts de générateur Q donné par :
q(n, n + 1) = λ
pour n ≥ 1
q(n, n − 1) = µ min(n, p)
pour m 6∈ {n − 1, n, n + 1}.
q(n, m) = 0
6.3.2.1
La file d’attente M/M/1
Le processus d’arrivées est dans ce cas un processus de Poisson d’intensité λ et les temps de service
i.i.d. de loi exponentielle de paramètre µ. Le processus Nt admet une probabilité invariante et
une seule si λ < µ. Cette probabilité est alors la loi géométrique sur N de paramètre λ/µ. Le
système tend dans ce cas vers un régime stationnaire, le nombre moyen de clients présents dans
81
λ
et le facteur d’utilisation du serveur (pourcentage de temps où le serveur est
µ−λ
occupé, ou probabilité qu’à un instant donné il y ait au moins un client présent dans le système)
est λ/µ en régime stationnaire. Si λ > µ, la longueur de la file tend vers l’infini avec le temps.
la file est
Exercice 6.18. Simuler en utilisant la fonction GG1 une file d’attente M/M/1 pour différentes valeurs
des paramètres λ et µ. Représenter graphiquement l’évolution de la longueur de la file. Vérifier que si
ρ < 1 la file évolue vers un régime stationnaire, i.e. Nt converge en loi quand t tend vers l’infini. Identifier
la loi limite. Déterminer la longueur moyenne de la file en régime stationnaire. Vérifier que le temps total
passé par un client dans le système (temps d’attente + temps de service) suit en régime stationnaire la
loi exponentielle de paramètre µ − λ. Démontrer cette dernière propriété.
Exercice 6.19. Proposer une autre modélisation de la file M/M/1 basée sur les deux propriétés suivantes :
1. l’absence de mémoire de la loi exponentielle ;
2. le fait que le minimum de deux variables aléatoires exponentielles indépendantes de paramètres λ
et µ suit la loi exponentielle de paramètre λ + µ.
(En appelant événement un départ ou une arrivée dans la file, on remarquera que le temps séparant deux
événements est le minimum de deux variables aléatoires exponentielles indépendantes.)
6.3.2.2
La file d’attente M/M/∞
Dans ce cas, il y a une infinité de serveurs : le temps d’attente est donc nul quelle que soit
l’intensité du flot d’arrivées. Le processus Nt admet comme unique probabilité invariante la loi
de Poisson de paramètre λ/µ. Le nombre moyen de serveurs occupés est donc λ/µ en régime
stationnaire.
Exercice 6.20. Simuler une file d’attente M/M/∞ sur un temps suffisamment long. Représenter graphiquement une trajectoire du processus Nt . Vérifier le théorème ergodique et étudier la convergence de
Nt vers la loi stationnaire.
6.3.3
Files d’attente à plusieurs serveurs
On peut modifier la fonction GG1 pour gérer une file d’attente LIFO à p serveurs, où p est un
entier ≥ 1 :
function [e,d,n]=GGp(a,s,p)
//file d’attente générale FIFO à p serveurs
//a: vecteur ligne des instants d’arrivée
//s: vecteur ligne des temps de service
//(deux vecteurs de même longueur m)
//e: instants des événements (arrivées ou départs)
//d: vecteur ligne des instants de départs
d=zeros(a);m=length(a);
fds=zeros(1,p);//fins de service des différents serveurs
dn=ones(1,2*m);//variation du nombre de clients: +1 ou -1
for k=1:m
[fdsmin,servmin]=min(fds);
serv=min(servmin);//premier serveur libre
fds(serv)=max(a(k),fds(serv))+s(k);
d(k)=fds(serv);
end;
[e,ind]=gsort([a,d],’g’,’i’);
dn(ind>m)=-1;//départs
n=cumsum(dn);
endfunction;
82
Dans le cas particulier d’une file M/M/p, on peut montrer que le processus Nt admet une
λ
probabilité invariante si et seulement si ρ =
< 1. La file évolue donc dans ce cas vers un
pµ
régime stationnaire.
Exercice 6.21. On peut montrer qu’en régime stationnaire le nombre moyen de serveurs occupés est
égal à λ/µ (comme dans le cas p = ∞). Vérifier ce résultat par la simulation.
Exercice 6.22. Vérifier par la simulation que, dans le cas non saturé (i.e. λ < pµ) le flot des sorties
d’une file M/M/p, où p est un entier ≥ 1 ou ∞, est en régime stationnaire un processus de Poisson de
même paramètre que le processus de Poisson des arrivées (théorème de Burke).
6.4
Exercices
Exercice 6.23. Processus de renouvellement alterné
On veut modéliser le fonctionnement d’une machine qui est alternativement dans deux états : en marche
ou en panne. Pour cela, on introduit deux suites (Un )n∈N∗ et (Vn )n∈N∗ de variables aléatoires réelles
positives : Un représente la durée de fonctionnement de la machine, Vn le temps qu’il faut pour la réparer. Les variables aléatoires Wn = (Un , Vn ) sont supposées indépendantes et de même loi (mais on ne
suppose pas Un indépendant de Vn ). La durée totale du n-ième cycle fonctionnement+réparation est donc
Yn = Un + Vn . On voudrait connaître la proportion de temps pendant lequel la machine est en marche.
On introduit pour cela un processus (Xt )t≥0 où la variable aléatoire Xt vaut 1 si la machine est en marche
Z
1 t
Xs ds. Le
à l’instant t et 0 sinon. Le but est alors d’étudier la limite quand t tend vers l’infini de
t 0
Pn
processus (Tn )n∈N , où Tn = k=1 Yk est un processus de renouvellement et il est intuitivement clair (c’est
E(U1 )
une conséquence de la loi des grands nombres) que la limite cherchée existe et est égale à
E(U1 ) + E(V1 )
si les Un et les Vn sont intégrables.
Simuler un tel processus et vérifier cette propriété (on pourra commencer par représenter quelques trajectoires en prenant par exemple pour Un des variables aléatoires exponentielles et pour Vn des variables
aléatoires uniformes sur un intervalle compact). Vérifier également que la probabilité que la machine soit
E(U1 )
en service à l’instant t tend vers
quand t tend vers l’infini.
E(U1 ) + E(V1 )
Exercice 6.24. Coalescent de Kingman
On reprend l’étude du processus généalogique dans le modèle de Wright-Fisher (cf. exercice 5.3) en
supposant que la taille N de la population totale est très grande. On s’intéresse à la généalogie d’un
échantillon de taille n fixée de cette population en remontant dans le temps. Si en remontant jusqu’à la
k-ième génération, les n individus de l’échantillon ont i ancêtres distints, la probabilité qu’à
la génération
1
1 i
+O
précédente (i.e. la k + 1-ième, puisqu’on remonte dans le temps) ils en aient i − 1 est
N 2
N2
1
et celle qu’ils en aient j est O
pour tout j < i − 1. Si maintenant on fait tendre N vers l’infini en
N2
renormalisant le temps en posant k = N t, où t est un réel positif, on voit que le nombre Xt d’ancêtres
de l’échantillon à l’instant t constitue un processus markovien de sauts à temps continu de générateur
i
infinitésimal Q donné par q(i, i − 1) =
= −q(i, i) pour tout i = 2, . . . , n.
2
Simuler ce processus et estimer la loi et l’espérance du temps de coalescence, i.e. le temps d’apparition
de l’ancêtre commun de l’échantillon le plus proche dans le temps (on remarquera que la chaîne incluse
de ce processus est triviale, ce qui en rend la simulation aisée).
On peut raffiner le modèle en ne s’intéressant pas seulement au nombre Xt d’ancêtres de l’échantillon
à l’instant t, mais à la partition Pt de l’échantillon dont les blocs sont constitués des individus ayant
un même ancêtre en remontant de t dans le temps. Le processus Pt est aussi une chaîne de Markov à
temps continu d’espace d’états l’ensemble des partitions de {1, . . . , n} (en supposant qu’on ait numéroté
les individus de 1 à n), d’état initial la partition constituée de tous les singletons, et de générateur
infinitésimal Q donné par q(α, β) = 1 silapartition β est obtenue à partir de α en regroupant exactement
i
deux classes en une seule, q(α, α) = −
si i est le nombre de blocs de la partition α. Autrement dit,
2
deux blocs quelconques fusionnent à un taux constant 1. Le temps de coalescence T est le premier instant
83
où Pt est la partition triviale constituée d’un seul bloc.
Simuler cette version du processus, en remarquant par exemple que pour la chaîne incluse la probabilité
de transition p(α, β) est uniforme sur l’ensemble des partitions obtenues en regroupant deux blocs de la
partition α.
Exercice 6.25. Évolution d’une population de bactéries (urne de Polya en temps continu)
Une population est constituée de deux types de bactéries, A et B. Chaque bactérie de type A se reproduit
à un taux λ et chaque bactérie de type B à un taux µ, indépendamment les unes des autres, et les
bactéries ne sont pas supposées mourir, de sorte que le nombre Xt de bactéries de type A et le nombre Yt
de bactéries de type B à l’instant t constituent des processus markoviens de saut de générateurs respectifs
qA (n, n + 1) = nλ et qB (n, n + 1) = nµ. Ces processus explosent en un temps fini.
Simuler sur un temps suffisamment long l’évolution de cette population de bactéries pour pouvoir observer
ce phénomène.
Montrer que si λ = µ, la chaîne incluse dans la chaîne à temps continu (Xt , Yt ) est une urne de Polya.
Xt
Etudier en fonction de a = X0 et b = Y0 la loi limite de Zt =
quand t tend vers le temps
Xt + Y t
d’explosion de la population.
84
Chapitre 7
Statistique
7.1
7.1.1
Régions et intervalles de confiance
Régions et intervalles de confiance exacts
Si X1 , . . . , Xn est un échantillon de taille n d’une loi normale de moyenne inconnue m et de
variance connue σ 2 , l’estimateur du maximum de vraisemblance de m est la moyenne empirique
X1 + · · · + Xn
Xn =
de l’échantillon. De plus X n suit la loi normale de moyenne m et de
n
2
σ
variance
. Il en résulte que
n
P(X n − a ≤ m ≤ X n + b) = P(m − b ≤ X n ≤ m + a) = P(−b ≤ Z ≤ a)
pour tout couple (a, b) de réels, où Z est une variable aléatoire réelle de loi normale de moyenne
σ2
nulle et de variance
. Tout intervalle [−b, a] vérifiant P(−b ≤ Z ≤ a) = α est donc un intervalle
n
de confiance exact pour m au niveau α. Le choix le plus naturel consiste à prendre un intervalle
1−α
de confiance symétrique, i.e. vérifiant a = b. On a alors P(Z ≤ −a) =
et la fonction
2
cdfnor permet de calculer a en fonction de n, α et σ.
Le programme suivant calcule un intervalle de confiance au niveau 0.95 pour un échantillon de
taille 100 d’une loi normale d’écart-type 3. Il vérifie ensuite ce calcul en simulant 10000 fois un
tel échantillon : on constate bien que dans environ 95% des cas la vraie valeur du paramètre
appartient à l’intervalle de confiance obtenu.
alpha=0.95;n=100;sigma=3;
a=-cdfnor(’X’,0,sigma/sqrt(n),(1-alpha)/2,(1+alpha)/2)
//vérification
m=2;nbsimul=10000;
x=grand(nbsimul,n,’nor’,m,sigma);
mx=mean(x,’c’);
sum(abs(mx-m)<a)/nbsimul
Exercice 7.1. Soit X1 , . . . , Xn un échantillon de taille n d’une loi exponentielle de paramètre inconnu
1
λ. Montrer que l’estimateur du maximum de vraisemblance de l’espérance de cette loi est la moyenne
λ
X1 + · · · + Xn
empirique X n =
de l’échantillon. Montrer que nλX n = λ(X1 + · · · + Xn ) suit la loi
n
Gamma de paramètres 1 et n. En déduire un intervalle de confiance exact pour l’espérance de cette loi.
85
7.1.1.1
Échantillons gaussiens
Il n’est pas toujours possible d’expliciter un intervalle de confiance exact pour le paramètre à
estimer. On doit alors se contenter d’intervalles de confiance approchés (voir 7.1.2). Dans le cas
où l’échantillon est gaussien, le calcul est possible, tant pour la moyenne que pour la variance, l’un
de ces paramètres étant éventuellement connu. On a déjà étudié le cas où la variance était connue
et l’espérance inconnue. Les lois reliées à la loi normale (loi du χ2 et de Student) permettent de
traiter les autres.
Espérance connue : estimation de la variance Si X1 , . . . , Xn est un échantillon de taille
n d’une loi normale de moyenne connue m et de variance inconnue σ 2 , la variable aléatoire
n
nS 2
1X
Dn2 = 2n , où Sn2 =
(Xk − m)2 , suit la loi du χ2 à n degrés de liberté. Si [κ1 , κ2 ] est un
σ
n
k=1
intervalle de probabilité α pour cette loi, en particuliersi κ1 et κ2 sont
niveau
les2 quantiles de2 1−α
1+α
nSn2
nS
nSn
n
et
pour cette loi, on a P κ1 ≤ 2 ≤ κ2 = α, d’où P
≤ σ2 ≤
= α.
2
2
σ
κ
κ
2
1
nSn2 nSn2
est donc un intervalle de confiance au niveau α pour σ 2 .
,
L’intervalle
κ2 κ1
Espérance et variance inconnues : estimation de la variance Si X1 , . . . , Xn est un
échantillon de taille n d’une loi normale de moyenne m et de variance σ 2 inconnues, la variable
n
1X
nS̃n2
2
2
(Xk −X n )2 est la variance empirique (biaisée) de l’échantillon,
aléatoire D̃n = 2 , où S̃n =
σ
n
k=1
suit la loi du χ2 à n − 1 degrés de liberté. Si [κ1 , κ2 ] est un intervalle de probabilité α pour cette
1+α
1−α
et
pour cette loi, on a
loi, en particulier si κ1 et κ2 sont les quantiles de niveau
2
2 "
!
!
#
nS̃n2
nS̃n2
nS̃n2 nS̃n2
nS̃n2
2
≤σ ≤
= α. L’intervalle
,
est donc
P κ1 ≤ 2 ≤ κ2 = α, d’où P
σ
κ2
κ1
κ2 κ1
un intervalle de confiance au niveau α pour σ 2 .
Espérance et variance inconnues : estimation de l’espérance Si X1 , . . . , Xn est un
échantillon de taille n √d’une loi normale de moyenne m et de variance σ 2 inconnues, la van
1X
n − 1(X n − m)
riable aléatoire Tn =
, où S̃n2 =
(Xk − X n )2 , suit la loi de Student à
n
S̃n
k=1
n − 1 degrés de liberté. Si [t1 , t2 ] est un intervalle de probabilité α pour cette loi, en particu1+α
1−α
et
pour cette loi (t1 = −t2 par symélier si t1 et t2 sont les quantiles de niveau
2
2
!
t2 S̃n
t1 S̃n
= α. L’intervalle
≤ m ≤ Xn − √
trie), on a P (t1 ≤ Tn ≤ t2 ) = α, d’où P X n − √
n−1
n−1
"
#
t2 S̃n
t1 S̃n
est donc un intervalle de confiance au niveau α pour m.
, Xn − √
Xn − √
n−1
n−1
Exercice 7.2. Écrire une fonction Scilab retournant un intervalle de confiance au niveau α pour σ 2 ou
m dans ces trois cas. Vérifier ces niveaux de confiance par la simulation.
7.1.2
Régions et intervalles de confiance approchés
Si les échantillons ne sont pas gaussiens, on ne peut en général pas calculer d’intervalles de
confiance exacts. On doit alors se contenter de valeurs approchées.
86
7.1.2.1
Intervalles de confiance par excès
L’inégalité de Bienaymé-Tchebychev permet souvent de majorer la probabilité qu’un paramètre
estimé appartienne à un intervalle donné.
Par exemple si X1 , . . . , Xn est un échantillon d’une loi de Bernoulli de paramètre inconnu p,
X1 + · · · + Xn
l’estimateur X n =
du maximum de vraisemblance de p vérifie P(|X n − p| ≥ ε) ≤
n
p(1 − p)
p(1 − p)
1
puisque la variance de X n est égale à
. Mais p(1 − p) ≤ pour tout p ∈ [0, 1].
2
nε
n
4
1
indépendamment
de
la
vraie
valeur
du paramètre p.
Il en résulte que P(|X n − p| ≥ ε) ≤
4nε2
On obtient ainsi un intervalle de confiance par excès au niveau α :
"
#!
1
1
P p ∈ Xn − p
, Xn + p
≥α.
2 n(1 − α)
2 n(1 − α)
n=30;
alpha=0.95;
dp=1/2/sqrt(n*(1-alpha))
//vérification:
p=0.4;
nbsimul=10000;
x=bool2s(rand(nbsimul,n)<p);
pemp=mean(x,’c’);
sum(abs(p-pemp)<alpha)
dp =
0.4082483
ans =
10000.
7.1.2.2
Intervalles de confiance asymptotiques
On voit que l’intervalle de confiance obtenu dans l’exemple précédent pour un échantillon de
taille 30 est très médiocre, puisqu’il est de longueur supérieure à 0.8. En conséquence, les 10000
simulations donnent toutes un intervalle contenant la vraie valeur de p. En fait, la loi de X1 +
· · · + Xn est connue : c’est la loi binomiale de paramètres n et p, et cette loi s’approche, quand
np et n(1 − p) sont suffisamment grands, par une loi normale (c’est le théorème limite central).
On obtient un intervalle de confiance asymptotique en remplaçant l’utilisation
r de l’inégalité
n
de Bienaymé-Tchebychev par cette approximation. La variable Zn = (X n − p)
suit
p(1 − p)
approximativement la loi normale N (0, 1) ; P(|Zn | > a) est donc proche de 2F (−a), où F est la
fonction de répartition de la loi normale réduite. Or :
!
√
√
ε n
P(|X n − p| > ε) = P |Zn | > p
≤ P(|Zn | > 2ε n) .
p(1 − p)
1−α
au moyen de la fonction cdfnor. L’intervalle de
2
a
a
confiance asymptotique est alors [X n − √ , X n + √ ].
2 n
2 n
Le programme ci-dessous permet de constater la validité de cette approximation pour n = 30,
p = 0.4.
On calcule donc a tel que F (−a) =
n=30;p=0.4;alpha=0.95;nbsimul=10000;
a=-cdfnor(’X’,0,1,(1-alpha)/2,(1+alpha)/2);
87
epsilon=a/2/sqrt(n)
x=bool2s(rand(nbsimul,n)<p);
pemp=mean(x,’c’);
sum(abs(p-pemp)<epsilon)
epsilon =
0.1789194
ans =
9598.
7.2
7.2.1
7.2.1.1
Tests d’adéquation
Test du χ2
Adéquation à une loi connue
Soit (X1 , · · · , Xn ) un échantillon indépendant à valeurs dans un ensemble fini E = {x1 , · · · , xm }
et p = (p1 , · · · , pm ) une loi de probabilité sur E. On se propose de tester l’hypothèse H0 : « la
loi commune des Xi est p ». On définit pour cela la « distance » du χ2 de la loi empirique de
l’échantillon à la loi p par :
m
m
j=1
j=1
X (Fj − pj )2
1 X (Nj − npj )2
Dn =
=n
n
pj
pj
où, pour tout j = 1, . . . , m, Nj = card{k | Xk = j} est le nombre d’occurences du résultat xj et
Nj
Fj =
la fréquence d’obtention de ce résultat dans l’échantillon (Dn n’est naturellement pas
n
une distance, puisqu’elle n’est pas symétrique).
L’espérance de Dn sous l’hypothèse H0 est m − 1 : en effet (N1 , N2 , . . . , Nm ) suit sous cette
hypothèse la loi multinomiale de paramètres (n, p1 , . . . , pm ), de sorte que E[(Nj − npj )2 ] =
Var(Nj ) = npj (1 − pj ) pour tout j. Par contre, si la loi de l’échantillon est différente de p, Dn
tend presque sûrement vers l’infini avec n par la loi des grands nombres, puisque l’un au moins
des termes (Fj − pj )2 a une limite non nulle.
On montre en fait que, sous l’hypothèse H0 , la loi de Dn converge quand n tend vers l’infini vers
la loi du χ2 à m − 1 degrés de liberté. Pour tester l’hypothèse H0 au niveau de confiance α, on
rejette l’hypothèse nulle H0 si Dn > z, où z est défini par P(W > z) = α, où W est une variable
aléatoire suivant la loi du χ2 à m − 1 degrés de liberté. On accepte cette hypothèse sinon.
Il faut remarquer que le test du χ2 est un test asymptotique. En pratique, on l’utilise si les Ni
ou les npi sont tous supérieurs à 5 ou 10. Sinon, on commence par regrouper certaines valeurs xi
pour diminuer le nombre de classes et ainsi augmenter l’effectif de celles-ci.
Exemple : On veut tester si les chiffres obtenus à la sortie d’un générateur de nombres aléatoires sont uniformément répartis sur {0, 1, . . . , 9}. On observe 100 chiffres et on obtient le tableau
suivant :
i
Ni
0
5
1
9
2
16
3
9
4
10
5
16
6
10
7
6
8
11
9
8
Le programme suivant calcule la distance du χ2 entre la loi empirique et la loi uniforme, puis la
p-valeur du test :
n=100;m=10;
N=[5 9 16 9 10 16 10 6 11 8];
d=n*m*sum((N/n-ones(1,m)/m).^2)
88
pval=1-cdfchi(’PQ’,d,m-1)
d =
12
pval =
0.2133093
Il n’y a donc pas de raison de rejeter l’hypothèse d’équirépartition, puisque la probabilité qu’une
variable aléatoire suivant la loi du χ2 à 9 degrés de liberté prenne une valeur supérieure à la
distance observée est 0.2133093.
7.2.1.2
Cas de paramètres inconnus
Si on veut simplement tester l’hypothèse H0 : « la loi de l’échantillon appartient à une classe
donnée de lois dépendant d’un paramètre inconnu θ ∈ Rd », on commence par estimer ce paramètre au moyen d’un estimateur du maximum de vraisemblance θ̂n , et on calcule ensuite la
distance du χ2 de la loi empirique à la loi théorique correspondant au paramètre θ̂n . On montre
alors que, sous des hypothèses de régularité assez larges, la loi de cette distance Dn converge
vers la loi du χ2 à m − 1 − q degrés de liberté, où q est le nombre de paramètres indépendants à
estimer.
Exemple : On lance 1000 fois 10 pièces et on observe à chaque fois le nombre de piles obtenu.
On obtient le tableau suivant :
i
Ni
0
0
1
4
2
32
3
78
4
158
5
239
6
242
7
168
8
57
9
20
10
2
On veut tester l’hypothèse H0 : « le résultat de chaque expérience suit la loi binomiale de
paramètre 1/2 ».
n=1000;m=11;
N=[0 4 32 78 158 239 242 168 57 20 2];
p=binomial(0.5,m-1);
d=sum((N-n*p).^2 ./p)/n
pval=1-cdfchi(’PQ’,d,m-1)
d =
76.099657
pval =
2.905D-12
L’hypothèse H0 est donc clairement à rejeter. On se propose donc de tester l’hypothèse moins
restrictive H0′ : « le résultat de chaque expérience suit une loi binomiale ».
q=1;
theta=N*(0:m-1)’/n/(m-1)
p=binomial(theta,m-1);
d=sum((N-n*p).^2 ./p)/n
pval=1-cdfchi(’PQ’,d,m-1-q)
theta =
0.5413
d =
6.2317831
pval =
0.7165150
L’hypothèse est cette fois parfaitement acceptable.
89
7.2.1.3
Test d’indépendance
On peut en particulier utiliser les résultats du paragraphe précédent pour tester sur un échantillon
((X1 , Y1 ), . . . , (Xn , Yn )) de variables aléatoires à valeurs dans un produit E × F d’ensembles finis
E = {x1 , . . . , xr } et F = {y1 , . . . , ys } si les variables aléatoires Xk et Yk sont indépendantes. On
introduit pour cela les nombres
Ni,j =
n
X
1Xk =xi ,Yk =yj ,
Ni,. =
s
X
Ni,j ,
N.,j =
Ni,j
i=1
j=1
k=1
r
X
d’observations du résultat (xi , yj ) (resp. xi , yj ) et les fréquences empiriques
Fi,j =
Ni,j
,
n
Fi,. =
Ni,.
,
n
F.,j =
N.,j
n
de ces observations.
Les estimateurs du maximum de vraisemblance des lois marginales P(Xk = xi ) et P(Yk = yj )
sont alors les fréquences empiriques Fi,. et F.,j et la statistique Dn mesurant la distance du χ2
de la loi empirique du couple à la loi produit des lois marginales empiriques est donnée par :
s
r X
X
(Fi,j − Fi,. F.,j )2
.
Dn = n
Fi,. F.,j
i=1 j=1
Cette distance suit asymptotiquement la loi du χ2 à (r − 1)(s − 1) degrés de liberté. Ici encore
on peut être amené à regrouper des classes pour éviter que les effectifs ne soient trop faibles.
Exemple : Soit Z une variable aléatoire suivant la loi de Poisson de paramètre λ, p ∈ [0, 1]
un réel, X une variable aléatoire à valeurs entières dont la loi conditionnelle sachant Z est la loi
binomiale de paramètres Z et p, et Y = Z − X (de telles variables aléatoires interviennent de
manière naturelle dans l’étude de la décomposition de processus de Poisson : voir section 6.1.3).
On peut alors montrer que les variables aléatoires X et Y sont indépendantes, de lois respectives
les lois de Poisson de paramètres pλ et (1 − p)λ. Le programme suivant génère un échantillon
de taille 10000 de telles variables aléatoires et teste l’indépendance de X et Y (sans chercher à
tester les lois marginales de ces variables) :
lambda=5;p=0.3;n=10000;
X=zeros(1,n);Y=X;
for k=1:n
r=grand(1,1,’poi’,lambda);
X(k)=grand(1,1,’bin’,r,p);
Y(k)=r-X(k);
end;
r=6;s=8;N=zeros(r,s);
for i=0:r-2
for j=0:s-2,N(i+1,j+1)=sum(X==i&Y==j);end;
N(i+1,$)=sum(X==i&Y>s-2);
end;
for j=0:s-2, N($,j+1)=sum(X>r-2&Y==j);end;
N($,$)=sum(X>r-2&Y>s-2);
FX=sum(N,’c’)/n;FY=sum(N,’r’)/n;FXY=N/n;FP=FX*FY;
d=n*sum((FXY-FP).^2 ./FP)
pval=1-cdfchi(’PQ’,d,(r-1)*(s-1))
pval=
90
d
=
40.951028
pval =
0.2256433
7.2.2
Test de Kolmogorov-Smirnov
La fonction de répartition de la loi de Kolmogorov-Smirnov n’est pas préprogrammée dans le
noyau de Scilab, mais elle est accessible par la commande pks de la boîte à outils Stixbox :
x=linspace(0,2);y=pks(x);
plot(x,y,’b’);
xtitle(’Fonction de répartition de la loi de Kolmogorov-Smirnov’);
Fonction de répartition de la loi de Kolmogorov−Smirnov
1.0
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.0
0.0
7.3
7.3.1
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
Comparaison de deux échantillons
Test de Wilcoxon-Mann-Whitney
Ce test s’appuie sur la statistique de Wilcoxon étudiée à l’exercice 2.17. Il teste si deux échantillons X = (X1 , . . . , Xn ) et Y = (Y1 , . . . , Ym ) suivent une même loi continue sur R.
On sait que dans ce cas la variable aléatoire U égale au nombre de couples d’indices (i, j) tels que
mn
U − E(U )
mn(n + m + 1)
Yj < Xi a pour espérance E(U ) =
et pour variance σU2 =
et que
2
12
σU
suit asymptotiquement la loi normale N (0, 1) (en pratique on utilise ce test si n et m sont tous
deux supérieurs à 8). On se donne un seuil d’erreur α (par exemple 0.05, ou 0.01) et on rejette
U − E(U )
> cα , où cα est l’unique
l’hypothèse que les deux échantillons suivent la même loi si
σU
réel vérifiant P(|Z| > cα ) = α si Z suit la loi normale réduite.
Exercice 7.3. Générer deux échantillons indépendants et de même taille X = (X1 , . . . , Xn ) et Y =
(Y1 , . . . , Yn ) de deux lois gamma de paramètres α et β, ainsi qu’un échantillon de taille Z1 , . . . , Zm de la
loi bêta de paramètres α et β et tester si les échantillons X1 /(X1 + Y1 ), . . . , Xn /(Xn + Yn ) et Z1 , . . . , Zm
proviennent d’une même loi.
7.3.2
Test de Smirnov
Soient (X1 , . . . , Xn ) et (Y1 , . . . , Ym ) deux échantillons, Fn et Gm leurs fonctions de répartition
empiriques. On cherche à tester l’hypothèse H0 : « ces deux échantillons proviennent d’une même
loi continue ». Soit alors Dn,m la statistique
Dn,m = sup |Fn (x) − Gm (x)| .
x∈R
91
q
mp
Dm,p cconverge en loi quand n et m tendent
On montre que si l’hypothèse est vérifiée, m+p
tous deux vers l’infini vers une variable aléatoire W suivant la loi de Kolmogorov-Smirnov :
K(x) = P(W ≤ x) = 1 − 2
+∞
X
(−1)k e−2k
2 x2
.
1
Sinon cette quantité tend vers l’infini.
q
mp
La région critique du test au niveau α est donc m+p
Dm,p ≥ w, où P(W ≥ w) = 1−K(w) = α.
Ce test est implémenté dans la boîte à outils Stixbox sous le nom kstwo.
Exercice 7.4. Reprendre l’exercice 7.3 en utilisant le test de Smirnov.
7.4
7.4.1
Régression
Ajustement affine par la méthode des moindres carrés
On dispose de données statistiques ou expérimentales mesurant deux caractères X et Y d’une
population (par exemple en statistique la taille et le poids d’un individu, la taille du père et
celle du fils,. . .ou en physique l’intensité Y du courant passant dans un circuit en fonction de
la différence de potentiel X appliquée aux bornes . . .). Ces données permettent de penser qu’il
existe une relation approximativement affine entre ces deux caractères, cette relation pouvant
soit traduire une relation exacte (loi physique) perturbée par des erreurs de mesure ou une simple
tendance statistique. Cette relation se constate graphiquement par la forme allongée du nuage
de points (xi , yi )1≤i≤n dans le cas d’une tendance statistique, ou par sa quasi linéarité dans le
cas d’une loi physique. Le problème de l’ajustement affine consiste à trouver la droite d’équation
y = ax + b qui approche au mieux ce nuage de points. Le critère le plus souvent retenu et le plus
maniable du point de vue mathématique est de mesurer la qualité de cette approximation par la
n
X
(yi − axi − b)2 des carrés des différences des ordonnées entre les points du nuage et
somme
i=1
ceux de même abscisse sur la droite.
Un calcul élémentaire permet de montrer que ce problème admet, si tous les points du nuage
n’ont pas la même abscisse, une unique solution donnée par
â = ρx,y
σy
,
σx
b̂ = ȳ − âx̄
!1/2
!1/2
n
n
n
n
1X
1X
1X
1X
2
2
où x̄ =
xi , ȳ =
yi , σ x =
(xi − x̄)
(yi − ȳ)
, σy =
,
n
n
n
n
i=1
i=1
i=1
Pn i=1
i=1 (xi − x̄)(yi − ȳ)
sont respectivement les moyennes et les écarts-types empiriques
ρx,y =
n σx σy
de X et Y et le coefficient de corrélation empirique de ces deux variables.
Les coefficients â et b̂ sont appelés coefficients de régression de Y en X. La droite d’équation
y = âx + b̂, appelée droite de régression de Y en X, passe par le point moyen (x̄, ȳ) du nuage.
On remarque que les deux variables X et Y ne jouent pas des rôles symétriques dans ce problème.
La variable X, appelée variable explicative, peut être celle dont on choisit les valeurs lors d’une
expérimentation physique, ou celle à laquelle on attribue un rôle de causalité dans une relation
statistique. La variable Y s’appelle variable réponse.
Si on échange les rôles de ces variables, on obtient une autre droite de régression. Ces deux
droites de régression (de Y en X et de X en Y ) ont des pentes de même signe et sont d’autant
plus proches que la corrélation entre les deux variables est forte (elles seraient naturellement
confondues s’il existait une relation affine exacte entre les deux caractères).
92
Le programme suivant génère un nuage aléatoire de points (xi , yi )1≤i≤n , calcule les coefficients
de régression en utilisant les formules précédentes et trace les deux droites de régression (dans
une application réelle, les valeurs xi et yi résultent naturellement d’observations ou de mesures :
on génère ici un échantillon artificiel pour ne pas avoir à utiliser un tableau de données externe) :
x=rand(1,50);y=-2*x+3+0.3*rand(x,’n’);
xbasc();
plot(x,y,’.b’);//trace le nuage
mx=mean(x);my=mean(y);
plot(mx,my,’or’);//point moyen du nuage
cov=corr(x,y,1);//covariance de x et y
vx=corr(x,x,1);//variance de x
t=[min(x),max(x)];
z=my+cov*(t-mx)/vx;
plot2d(t,z,style=5);//droite de régression de y en x
vy=corr(y,y,1);
u=[min(y),max(y)];
v=mx+cov*(u-my)/vy;
plot2d(v,u,style=3);//droite de régression de x en y
3.5
3.0
2.5
2.0
1.5
1.0
0.5
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Scilab possède plusieurs commandes permettant de calculer ces coefficients de régression et même
de tracer la droite de régression sans avoir à recourir à ces formules. Les fonctions regress,
reglin, lsfit font partie du noyau de Scilab, le fonction linreg de la boîte à outils Stixbox
(attention à l’ordre de retour des coefficients) :
coeffs=regress(x,y)
[a,b]=reglin(x,y)
On peut
 quece problème est un pur problème d’algèbre linéaire. En posant
 remarquer
 aussi
x1 1
y1
 .. .. 
 .. 
Y =  .  et X =  . . , il s’agit de résoudre au sens des moindres carrés le système
xn 1
yn
a
a
linéaire Y = X
, d’inconnues
.
b
b
C’est précisément ce que fait la commande \ (division à gauche) :
X=[x(:),ones(x(:))];Y=y(:);ab=X\Y
93
7.4.2
Régression linéaire simple
D’un point de vue probabiliste, ce problème s’inscrit dans le cadre général de l’étude de la
régression. On peut en effet considérer, dans le cas d’une série statistique, le nuage de points
(xi , yi )1≤i≤n comme un échantillon de taille n d’une variable aléatoire vectorielle (X, Y ) dont les
deux composantes X et Y sont liées. Il s’agit alors d’approcher au mieux Y par une fonction
affine aX + b de X. En supposant X et Y de carré intégrable, on peut prendre comme mesure
de la qualité de cette approximation l’espérance du carré de Y − (aX + b), i.e. le carré de la
distance de Y au plan vectoriel engendré par X et les constantes dans l’espace de Hilbert L2 (Ω)
des variables aléatoires de carré intégrable (en supposant X non presque sûrement constante).
La solution est donnée par la projection orthogonale âX + b̂ de Y sur ce plan vectoriel, où
Cov(X, Y )
σY
â =
= ρX,Y
et b̂ = E(Y ) − âE(X) (cette dernière formule traduisant le fait que
Var(X)
σX
la droite d’équation y = ax + b passe par le point de coordonnées (E(X), E(Y ))).
Le problème posé est alors celui de l’estimation des coefficients de régression â et b̂ au vu des
observations.
7.4.3
Le modèle linéaire
Dans le cas de données expérimentales, on peut souvent considérer les valeurs xi comme déterministes, et parfois choisies par l’expérimentateur. Le modèle linéaire consiste alors à considérer
que Y est donnée par une expression de la forme Y = aX + b + ε, où ε est une variable aléatoire
réelle centrée de carré intégrable. On observe alors n valeurs y1 , . . . , yn de Y correspondant à des
valeurs distinctes, mais déterministes x1 , . . . , xn de X, de sorte que yi = axi + b + εi pour tout
i = 1, . . . , n. On suppose les résidus ε1 , . . . , εn indépendants et de même variance (inconnue) σ 2
et on cherche à estimer les paramètres a, b, σ 2 de ce modèle.
Le théorème de Gauss-Markov nous apprend alors que l’estimateur (Â, B̂) de variance minimale
parmi tous les estimateurs linéaires sans biais des paramètres a et b est l’estimateur des moindres
carrés obtenu précédemment :
 = ρx,Y
σY
,
σx
B̂ = Ȳ − Âx̄
!1/2
!1/2
n
n
n
n
1X
1X
1X
1X
2
2
xi , Ȳ =
Yi , σx =
(xi − x̄)
(Yi − Ȳ )
où x̄ =
, σY =
,
n
n
n
n
i=1
i=1
i=1
i=1
Pn
(xi − x̄)(Yi − Ȳ )
ρx,Y = i=1
.
n σx σY
Dans le cas particulier où les variables aléatoires εi sont gaussiennes, ces estimateurs sont aussi
les estimateurs du maximum de vraisemblance. L’estimateur du maximum de vraisemblance de
la variance V = σ 2 des résidus est alors donné par :
n
V̂ =
1X
(Yi − Âxi − B̂)2 .
n
i=1
La variable aléatoire (Â, B̂) est gaussienne et indépendante de V̂ , qui suit la loi du χ2 à n − 2
degrés de liberté.
Ces estimateurs permettent ensuite de faire de la prédiction, i.e. de donner un estimateur de
Y = ax + b + ε pour une valeur x du caractère X pour laquelle on ne dispose pas d’observations.
La fonction reglin retourne une estimation de la variance des résidus :
[a,b,sig]=reglin(x,y)
La fonction lsfit retourne en outre les résidus et des intervalles de confiance (par défaut au
niveau 0.95) pour les coefficients a et b.
94
[ab,Iab,s,e,Is]=lsfit(y’,x’)
La fonction linreg de la boîte à outils Stixbox représente directement le nuage de points, la
droite de régression et des intervalles de confiance pour les estimateurs  et B̂, ainsi que pour
les valeurs de Y obtenues par prédiction :
linreg(y,x)
4.0
3.5
3.0
2.5
2.0
1.5
1.0
0.5
0.0
−0.2
7.4.4
0.0
0.2
0.4
0.6
0.8
1.0
1.2
Régression linéaire multiple
Tous ces résultats se généralisent au cas de plusieurs variables explicatives, i.e. au modèle Y =
a1 X (1) + · · · + am X (m) + b + ε, où les variables X (1) , . . .,X (m) sont les variables explicatives, a1 ,
. . ., am , b les constantes réelles que l’on cherche à optimiser, et ε le résidu aléatoire de variance
σ2.
(1)
(m)
On dispose dans ce cas d’un échantillon (Yk , Xk , . . . , Xk )k=1,...,n de taille n de telles observations. Le système peut ici encore s’écrire sous forme matricielle :
   
   (1)
(m)
ε1
a1
X1
. . . X1
1
Y1
   
. . .  
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.


  +  ..
 =
. . .   . . . . . . . . . . . . . . . . . . . . 
  a m  . . . 
(m)
(1)
εn
b
Yn
1
. . . Xn
Xn
et il s’agit donc encore de résoudre au sens des moindres carrés le système linéaire :
 
   (1)
(m)
a1
X1
. . . X1
1
Y1
 
. . .  
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
 ..
 =
.

. . .  
 . . . . . . . . . . . . . . . . . . . .   am 
(1)
(m)
b
Yn
Xn
. . . Xn
1
C’est ce que fait le programme suivant :
n=100;
x1=rand(1,n);
x2=2*rand(1,n)-3;
a1=4;a2=-1;b=1;sigma=0.3;epsilon=sigma*rand(x1,’n’);
y=a1*x1+a2*x2+b+epsilon;
[x1(:),x2(:),ones(x1(:))]\y(:)
ans =
3.8938953
- 0.9769580
1.1130642
95
Ici encore la fonction reglin fournit directement le résultat :
[aest,best,sest]=reglin([x1;x2],y)
sest =
0.2439004
best =
1.1130642
aest =
3.8938953 - 0.9769580
On pouvait également programmer à la main les formules théoriques :
X=[x1(:),x2(:)];Y=y(:);
X=X-ones(n,1)*mean(X,’r’);Y=Y-mean(Y);
A=inv(X’*X)*X’*Y
res=y-A(1)*x1-A(2)*x2;
b=mean(res)
sigma2=sum((res-b).^2)/n;
sqrt(sigma2)
96
Chapitre 8
Indications de solutions
8.1
Chapitre 1
1.1.
x=rand(1,10)
x($:-1:1)
1.2.
x=ones(1,10);x(2:2:10)=-1
y=2*round(rand(1,10))-1
y=2*floor(2*rand(1,10))-1
y=ones(1,10);y(rand(1,10)<0.5)=-1
1.3.
a=rand(4,4),b=a([4 2 3 4],:)
ou b=a;b(1,:)=b(4,:)
1.4.
a=rand(5,5);a=a-diag(diag(a))
1.5.
a=1:4;b=1:2:7;a’*b
1.6.
a=rand(3,5);b=a’*a;c=a*a’;spec(b),spec(c)
On constate bien que les valeurs propres non nulles de tAA et A tA sont les mêmes (voir cours d’algèbre).
1.7.
a=rand(5,5)
for k=1:5,a(:,k)=k*a(:,k);end;a
//Mieux:
a=rand(5,5)
a=a*diag(1:5)
//Pour les lignes:
a=rand(5,5)
a=diag(1:5)*a
a(2,:)=a(1,:)+a(5,:)
det(a),rank(a)
97
1.9.
function y=dif(x)
y=[x(1),x(2:$)-x(1:$-1)];
endfunction;
//vérification
x=rand(1,10),cumsum(dif(x)),dif(cumsum(x))
1.10.
q=ones(1,1000);q(1)=sqrt(2*%pi)/%e;
for n=1:999,q(n+1)=q(n)/%e*sqrt((n+1)/n)*((n+1)/n)^n;end;
r=q.*(1+1 ./(1:1000)/12);
On remarque que l’approximation est excellente, même pour de petites valeurs de n.
1.11. La fonction la plus naïve :
function c=bincoeff(n,p)
c=factorial(n)/factorial(p)/factorial(n-p);
endfunction;
200
ne permet pas de calculer
.
100
La fonction un peu moins naïve :
function c=bincoeff(n,p)
c=prod(n-p+1:n)/prod(1:p);
endfunction;
le permet, mais ne permet pas de calculer
400
. La version suivante le permet :
200
function c=bincoeff(n,p)
c=prod((n-p+1:n)./(1:p));
endfunction;
mais les fonctions les plus efficaces utilisent la fonction gamma ou, mieux, son logarithme. Par exemple :
function c=bincoeff(n,p)
c = exp(gammaln(n+1)-gammaln(p+1)-gammaln(n-p+1));
endfunction;
1000
calcule correctement
, mais présente l’inconvénient de ne pas renvoyer un entier :
500
-->format(20);bincoeff(10,5)
ans =
252.000000000000682
Il suffit de le lui demander en ajoutant la ligne
c=round(c)
à l’intérieur de sa définition. Elle admet des vecteurs (ou même des matrices) en argument :
-->bincoeff([5 5;10 10],[3 4;3 4])
ans =
10.
5.
120.
210.
98
C’est essentiellement cette méthode qu’utilise la fonction bincoef disponible dans la boîte à outils
Stixbox.
1.12.
function T=pascal(n)
//triangle de Pascal
T=zeros(n+1,n+1);
T(:,1)=1;
for k=2:n+1
T(k,2:$)=T(k-1,2:$)+T(k-1,1:$-1);
end;
endfunction;
Cette fonction permet de calculer les coefficients
du binôme sans avoir à manipuler des nombres inuti1000
lement grands. On peut ainsi calculer
et vérifier en utilisant l’approximation par la formule de
500
2n
(2n)!
2n
2
Stirling :
=
∼√ .
2
n
(n!)
πn
n=500;T=pascal(2*n);T(2*n+1,n+1)
2^(2*n)/sqrt(%pi*n)
--> ans =
2.703+299
ans =
2.704+299
1.13.
function [P,T]=crible(n)
//crible d’Eratosthene
T=ones(1,n);T(1)=0;
for k=2:sqrt(n)
ind=k*(2:n/k);
ind=ind(ind<=n);
T(ind)=0;
end;
P=find(T);
endfunction;
n=10000;
[P,T]=crible(n);
plot2d(1:n,cumsum(T).*log(x)./x);
8.2
Chapitre 2
2.6.
La fonction de répartition de la loi de Weibull définit une bijection de ]0, +∞[ sur ]0, 1[ dont la bijection
1
1/a
réciproque est donnée par F −1 (y) = − [ln(1 − y)] . Il en résulte que si U suit la loi uniforme sur [0, 1],
λ
1
1/a
F −1 (U ) suit la loi de Weibull ; mais 1 − U suit aussi la loi uniforme sur [0, 1], et − [ln U ]
suit donc
λ
la loi de Weibull, ce qui permet de la simuler rapidement.
On voit ainsi que le paramètre λ est un paramètre d’échelle : si X suit la loi de Weibull de paramètres a
1
et 1, X suit la loi de Weibull de paramètres a et λ.
λ
Pour a = 1, on retrouve la loi exponentielle (et une façon rapide de la simuler à partir de la loi uniforme).
99
Si X suit la loi de Weibull de paramètres a et λ, alors, pour tout entier n ≥ 0 :
E(X n ) =
1 n
Γ
1
+
λn
a
(effectuer le changement de variable (λx)a = t).
a α
2.7. La fonction de répartition F (x) = e−( x ) s’inverse aisément : F −1 (x) = a(− ln x)−1/α . Il en résulte
que a(− log U )−1/α suit la loi de Fréchet de paramètres a et α si U suit la loi uniforme sur [0, 1].
//simulation de la loi de Fréchet
a=2;alpha=4;
t=linspace(0.01,6);
plot2d(t,exp(-(a ./t).^alpha));//fonction de répartition
n=10000;
x=a*(-log(rand(1,n))).^(-1/alpha);//échantillon
xx=gsort(x,’g’,’i’);
plot2d2([0,xx],(0:n)/n,style=5);
2.9.
n=1000;
alpha=0.1;
x=grand(n,3,’gam’,alpha,1);
s=sum(x,’c’);
subplot(121);
plot(x(:,1)./s,x(:,2)./s,’.r’);
a=gca();a.data_bounds=[0,0;1,1];
xtitle(’Loi de Dirichlet : alpha=0.1’);
alpha=3;
x=grand(n,3,’gam’,alpha,1);
s=sum(x,’c’);
subplot(122);
plot(x(:,1)./s,x(:,2)./s,’.r’);
a=gca();a.data_bounds=[0,0;1,1];
xtitle(’Loi de Dirichlet : alpha=3’);
100
Loi de Dirichlet : alpha=0.1
Loi de Dirichlet : alpha=3
1.0
1.0
0.9
0.9
0.8
0.8
0.7
0.7
0.6
0.6
0.5
0.5
0.4
0.4
0.3
0.3
0.2
0.2
0.1
0.1
0.0
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
0.0
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
2) Si X suit la loi exponentielle de paramètre λ > 0, F (x) = 1 − e−λx pour x ≥ 0, d’où
1
1
F −1 (y) = − ln (1 − y). La formule précédente s’écrit Z = m − ln (1 − U ). Mais la variable aléatoire
λ
λ
1
− ln (1 − U ) suit la loi exponentielle de paramètre λ. Il en résulte que m + X suit la loi conditionnelle de
λ
X sachant X > m. On retrouve ainsi la propriété bien connue d’absence de mémoire de la loi exponentielle.
2.10.
2.11.
nmax=5;
nb=10000;//nombre de simulations
pr=zeros(1,nmax);//probabilites empiriques
d=ones(1,nmax);//estimation de (det(A))^2
for n=2:nmax
r=zeros(1,nb);
for k=1:nb
a=ones(n,n);
a(rand(a)<0.5)=-1;
r(k)=det(a);
end;
pr(n)=sum(r==0)/nb;
d(n)=mean(r.^2);
end;
xbasc();
plot2d(2:nmax,pr(2:nmax))
pr,d
On ne connaît pas de formule explicite pour la probabilité que le déterminant de A soit nul, mais l’espérance de (det A)2 = det(A2 ) est facile à calculer (elle est égale à n!).
2.12.
//etude du temps de retour en 0 de X
nbsimul=10000;n=50;t=zeros(1,nbsimul);
for k=1:nbsimul
x=cumsum(2*round(rand(1,n))-1);
101
t(k)=min(find(x==0));
end;
xbasc();xselect();
subplot(121);
histplot(0.5:n+0.5,t);
p=zeros(1:n);
p(2)=0.5;
for k=2:n/2
p(2*k)=p(2*k-2)*(2*k-3)/2/k;
end;
plot2d3(1:n,p,style=5);
legends([’Loi empirique’,’Loi théorique’],[1 5],1);
xtitle(’Loi de T1’);
n=100;
p=zeros(1:n);
p(2)=0.5;
for k=2:n/2
p(2*k)=p(2*k-2)*(2*k-3)/2/k;
end;
subplot(122);
plot2d2(1:n,1-cumsum(p),style=2);
plot2d(1:n,sqrt(2/%pi ./(1:n)),style=5);
legends([’Valeur exacte’,’Equivalent’],[2 5],1);
xtitle(’Queue de la loi de T1’);
2.13. La formule de Stirling donne :
P(S2n = 0) =
2n 1
n 22n
∼
n→∞
1
√ .
πn
La proportion de trajectoires conservées dans une méthode de rejet tend donc vers 0 quand n tend vers
l’infini. Cette méthode n’est donc pas utilisable si n est grand.
On peut par contre simuler directement une telle marche conditionnée à revenir en 0 à l’instant 2n en
remarquant que
P(Sk+1 = l + 1 | Sk = l) =
2n − k − l
,
2(2n − k)
P(Sk+1 = l − 1 | Sk = l) =
2n − k + l
2(2n − k)
pour tout couple (k, l) vérifiant 0 ≤ k ≤ 2n − 1, |l| ≤ min(k, 2n − k).
On peut par exemple utiliser cette méthode pour étudier la loi du maximum d’une telle marche :
//marche aleatoire conditionnee a revenir en 0
n=100;
x=zeros(1,2*n+1);
for k=1:2*n
if rand()<(2*n-k+1-x(k))/2/(2*n-k+1) then
x(k+1)=x(k)+1;
else x(k+1)=x(k)-1;
end;
end;
plot2d(0:2*n,x)
//version vectorialisee
ns=1000;//nombre de simulations
x=zeros(ns,2*n+1);
for k=1:2*n
ind=find(rand(ns,1)<(2*n-k+1-x(:,k))/2/(2*n-k+1));
x(:,k+1)=x(:,k)-1;
102
x(ind,k+1)=x(ind,k)+1;
end;
xbasc();
histplot(20,max(x,’c’))
14
0.09
12
0.08
0.07
10
0.06
8
0.05
6
0.04
4
0.03
2
0.02
0
0.01
−2
0.00
0
20
40
60
80
100
120
140
160
180
200
0
5
10
15
20
25
30
2.14.
function [n,t]=nbappar(x,s)
m=length(s);
b=x(1:$-m+1)==s(1);
for k=2:m
b=b&x(k:$-m+k)==s(k);
end;
n=sum(b);
t=min(find(b));
if t<>[] then t=t+m-1;end;
t(t>length(x))==%inf;
endfunction;
function [n,t]=nbappar2(x,s)
m=length(s);
b=x(:,1:$-m+1)==s(1);
for k=2:m
b=b&x(:,k:$-m+k)==s(k);
end;
n=sum(b,’c’);
t=sum(cumprod(1-bool2s(b),’c’),’c’)+m;
t(t>size(x,’c’))=%inf;
endfunction;
nbsimul=10000;longueur=100;
x=round(rand(nbsimul,longueur));
[n0,t0]=nbappar2(x,[0 0]);
mean(n0),mean(t0)
[n1,t1]=nbappar2(x,[0 1]);
mean(n1),mean(t1)
2.17. La fonction nb renvoie la somme des rangs des xi dans le vecteur obtenu en concaténant x et y,
n(n + 1)
. Or cette somme vaut :
diminuée de
2


m
n
n
n m
X
X
X
n(n + 1) X X

1yj <xi  =
1xk ≤xi +
1yj <xi .
+
2
j=1
i=1
i=1 j=1
k=1
103
nbsimul=10000;
n=100;m=300;
nbs=zeros(1,nbsimul);
for k=1:nbsimul
nbs(k)=nb(rand(1,n),rand(1,m));
end;
disp(’Moyenne empirique: ’+string(mean(nbs)));
mth=n*m/2;
disp(’Moyenne théorique: ’+string(mth));
disp(’Variance empirique: ’+string(variance(nbs)));
vth=n*m*(n+m+1)/12;
disp(’Variance théorique: ’+string(vth));
histplot(50,(nbs-mth)/sqrt(vth));
t=linspace(-4,4);
plot2d(t,exp(-t.^2/2)/sqrt(2*%pi),style=5);
2.19.
function [xs,nb]=tri(x)
//xs: x ordonné par ordre croissant
//nb: nombre de comparaisons
//tri par insertion
xs=x(1);nb=0;//initialisation
for i=2:length(x)
//on compare x(i) aux elements deja ranges:
j=1;nb=nb+1;
while (j<i)&(x(i)>xs(j))
j=j+1;nb=nb+1;
end;
if j==i then nb=nb-1;end;
//on met x(i) a sa place:
xs=[xs(1:j-1),x(i),xs(j:$)];
end;
endfunction;
n=20;//taille du vecteur
nbs=10000;//nombre de simulations
nbcomps=zeros(1,nbs);//nombres de comparaisons
for k=1:nbs
x=rand(1,n);
[xs,nb]=tri(x);
nbcomps(k)=nb;
//on verifie quand meme en envoyant un message d’erreur
//si une des simulations renvoie un resultat faux
if or(xs<>gsort(x,’g’,’i’)) then error (’Erreur!’);end;
end;
mean(nbcomps)
n*(n+3)/4-sum(1 ./(1:n))
histplot(10,nbcomps);
8.3
Chapitre 3
3.1. On effectue 10000 simulations d’un échantillon de taille 10 et on calcule la moyenne des variances
empiriques de ces échantillons :
nb=10000;n=10;
x=rand(nb,n);
104
xbar=mean(x,’c’);
sigma2=sum((x-xbar(:,ones(1,n))).^2,’c’);
mean(sigma2)
--> ans =
0.7480254
On sait que la variance théorique est 1/12 :
(n-1)/n/12
--> ans =
0.075
La commande variance de Scilab donne la variance empirique sans biais :
mean(variance(x,’c’))
ans =
0.0831139
3.2. La probabilité P(Xi = max(Xj | j ≤ i)) que i soit un record est égale à 1/i pour tout i. L’espérance
n
X
1
du nombre de records est donc égale à
.
i
i=1
n=100;nb=1000;
x=rand(nb,n);
mx=zeros(x);
for k=1:n,
mx(:,k)=max(x(:,1:k),’c’);
end;
r=sum(x==mx,’c’);
mean(r)
sum(1 ./[1:n])
3.3.
n=20;
xy=2*rand(2,n)-1;
square();
t=linspace(0,2*%pi);
plot2d(cos(t),sin(t));
plot(xy(1,:),xy(2,:),’or’);
sum(sum(xy.^2,’r’)<1)
n=100000;
xy=2*rand(2,n)-1;
4*sum(sum(xy.^2,’r’)<1)/n
On obtient ainsi une valeur approchée de π par une méthode de Monte-Carlo.
3.4.
n=10;//nombre de pas
ns=500;//nombre de simulations
theta=2*%pi*rand(ns,n);
x=sum(cos(theta),’c’);
y=sum(sin(theta),’c’);
xbasc;square;
plot2d(x,y,style=-1);
sum(x^2+y^2<1)/ns
1/(n+1)
3.7.
105
alpha=1;
n=10000;
x=grand(1,n,’unf’,-1,1).*(1:n)^alpha;
m=cumsum(x)./(1:n);
//converge si alpha<0.5
xset(’window’,0);
xbasc();
plot2d(1:n,m);
n=1000;
nb=10000;
stacksize(3e7);
x=grand(nb,n,’unf’,-1,1).*(ones(nb,1)*(1:n)^alpha);
v=sum((1:n)^(2*alpha))/3;
y=sum(x,’c’)/sqrt(v);
//converge vers la loi normale pour tout alpha>0
xset(’window’,1);
xbasc();
histplot(20,y);
t=linspace(min(y),max(y));
plot2d(t,exp(-t.^2/2)/sqrt(2*%pi),style=5);
8.4
Chapitre 4
4.1.
b=[4 -2];
y=b*points;//échantillon obtenu par combinaison linéaire
mu=b*m;//moyenne théorique de l’échantillon transformé
sigma2=b*Gamma*b’;//variance théorique de l’échantillon transformé
histplot(20,y);//histogramme
t=linspace(min(y),max(y));
//densité théorique
plot2d(t,exp(-(t-mu).^2/2/sigma2)/sqrt(2*%pi*sigma2),style=5);
0.09
0.08
0.07
0.06
0.05
0.04
0.03
0.02
0.01
0.00
−15
−10
−5
0
5
10
15
4.2.
c=[2 -1;-2 1;4 2];//matrice de la transformation linéaire
p3=c*points;//nuage de points de R^3
param3d1(p3(1,:),p3(2,:),list(p3(3,:),-ones(p3(1,:))))
106
20
40
−6
−4
30
−2
Z
20
0
10
2
0
4
−10
6
−10
−8
−6
X
8
−4
−2
Y
0
10
2
4
6
4.3.
pts=points-m(:,ones(1,n));//échantillon centré
xi=sum((inv(Gamma)*pts).*pts,’r’);//échantillon de (X-m)Gamma^(-1)(X-m)
histplot(20,xi);
t=linspace(min(xi),max(xi));
plot2d(t,exp(-t/2)/2,style=5);//densité de la loi du chi-deux
0.50
0.45
0.40
0.35
0.30
0.25
0.20
0.15
0.10
0.05
0.00
0
2
4
6
8
10
4.4.
n=100;
p=[0.2;0.5;0.3];
//échantillon généré par tirages répétés de la loi p
r=rand(1,n);
cp=[0;cumsum(p)];
x=zeros(length(p),n);//échantillon de taille n de la loi p
for k=1:length(p)
x(k,r>=cp(k)&r<cp(k+1))=1;
end;
y=sum(x,’c’);//réalisation de la loi multinomiale
Gamma=mvvacov(x’)//matrice de covariance empirique de x
det(Gamma)//vérification: det(Gamma)=0
ones(1,length(p))*Gamma*ones(length(p),1)//vérification: 0
cov=diag(p)-p*p’//matrice de covariance théorique
107
12
d2=sum((y-n*p).^2 /n ./p)//distance du chi-deux sur l’échantillon
//échantillon de la loi multinomiale par grand
y1=grand(1,’mul’,n,p(1:$-1));
d2=sum((y1-n*p).^2 /n ./p)//distance du chi-deux
//échantillon de la loi multinomiale par grand
//et comparaison à la loi du chi-deux
nbsimul=1000;
y2=grand(nbsimul,’mul’,n,p(1:$-1));
pp=p(:,ones(1,nbsimul));
d2=sum((y2-n*pp).^2 ./pp/n,’r’);//distance du chi-deux
histplot(50,d2);
t=linspace(min(d2),max(d2));
plot2d(t,exp(-t/2)/2,style=5);//la densité de la loi du chi-deux à 2 degrés
4.8.
//simulation du pont brownien
stacksize(3e7);
nbsimul=1000;
nbpas=1000;
Z=grand(nbsimul,nbpas,’nor’,0,1/sqrt(nbpas));
Z=cumsum(Z,’c’);
Z=Z-Z(:,$)*(1:nbpas)/nbpas;
//représentation graphique de quelques trajectoires
xset(’window’,0);
xbasc();
for k=2:6
plot2d((0:nbpas)/nbpas,[0,Z(k,:)],style=k);
end;
//étude de la loi du maximum
Zmax=max(abs(Z),’c’);
xset(’window’,1);
xbasc();
histplot(20,Zmax,style=2);
t=linspace(0,max(Zmax));
plot2d((t(1:$-1)+t(2:$))/2,(pks(t(2:$))-pks(t(1:$-1)))/(t(2)-t(1)),style=5);
8.5
Chapitre 5
5.1.
P=genmarkov([1 3],4)
P^100
[M,Q]=eigenmarkov(P);
L=Q*M
La matrice M a deux lignes représentant les deux mesures invariantes extrémales portées par les deux
classes récurrentes, et la matrice Q deux colonnes représentant les probabilités de terminer dans l’une de
ces deux classes en partant d’un état donné. La i-ième ligne de la matrice QM représente la loi limite de
Xn sachant X0 = i, comme on peut le vérifier :
ns=10000;//nombre de simulations
x=grand(100,’markov’,P,8*ones(1,ns));
[ind,occ]=dsearch(x(:,$),1:8,’d’);
occ/ns
L(8,:)
108
5.2.
N=5;
P=genmarkov(N,0);
n=1000000;
x=grand(n,’markov’,P,1);
Q=zeros(P);
for i=1:N
ni=sum(x(2:$)==i);
for j=1:N
Q(i,j)=sum(x(2:$)==i&x(1:$-1)==j)/ni;
end;
end;
pi=eigenmarkov(P);
Q
Q1=diag(1 ./pi)*P’*diag(pi)
norm(Q-Q1)
Remarque : on montre facilement que si Xn est stationnaire (la loi de Xn est π pour tout n), alors le
processus retourné est une chaîne de Markov de matrice de transition Q ; il en résulte, comme un calcul
immédiat le montre également, que π est aussi vecteur propre à gauche de Q. La chaîne de Markov Xn
atteint rapidement son équilibre, ce qui explique que Q̃ est proche de Q.
5.3.
function nbs=nbsancetres(N)
x=1:N;
nbs=N;
while nbs($)>1
r=grand(1,N,’uin’,1,N);
x=r(x);
nbs=[nbs,length(unique(x))];
end;
endfunction;
20
18
16
14
12
10
8
N=20;
nbsimul=5;
temps=zeros(1,nbsimul);
xset(’window’,0);xbasc();
for k=1:nbsimul
nbs=nbsancetres(N);
plot2d(1:length(nbs),nbs,style=k+1);
temps(k)=length(nbs);
end;
6
4
2
0
0
10
20
30
40
50
60
0.030
0.025
0.020
0.015
nbsimul=1000;
temps=zeros(1,nbsimul);
for k=1:nbsimul
nbs=nbsancetres(N);
temps(k)=length(nbs);
end;
xset(’window’,1);xbasc();
histplot(20,temps);
0.010
0.005
0.000
0
5.4.
n=10;N=2*n;//nombre total d’individus
m=5;//nombre initial d’individus de type A
P=zeros(N+1,N+1);//matrice de transition
109
20
40
60
80
100
120
140
for i=0:N, P(i+1,:)=binomial(i/N,N);end;
nbsimul=10000;nbgen=200;
x=grand(nbgen,’markov’,P,(m+1)*ones(1,nbsimul));
ind0=find(x(:,$)==1);//fixation en 0
x0=x(ind0,:);//trajectoires se fixant en 0
temps0=sum(x0>1,’c’)+1;//temps de fixation empirique en 0
subplot(221);
histplot(0:50,temps0,style=2);
indN=find(x(:,$)==N+1);//fixation en N
xN=x(indN,:);//trajectoires se fixant en N
tempsN=sum(xN<N+1,’c’)+1;//temps de fixation empirique en N
subplot(222);
histplot(0:50,tempsN,style=2);
P0=zeros(N+1,N+1);//matrice de transition de la chaîne conditionnée à se fixer en 0
P0(N+1,N+1)=1;
for i=0:N-1, P0(i+1,1:$-1)=binomial(i/N,N-1);end;
x00=grand(nbgen,’markov’,P0,(m+1)*ones(1,nbsimul));
temps00=sum(x00>1,’c’)+1;//temps de fixation empirique en 0
subplot(223);
histplot(0:50,temps00,style=5);
PN=zeros(N+1,N+1);//matrice de transition de la chaîne conditionnée à se fixer en N
PN(1,1)=1;
for i=1:N, PN(i+1,2:N+1)=binomial(i/N,N-1);end;
xNN=grand(nbgen,’markov’,PN,(m+1)*ones(1,nbsimul));
tempsNN=sum(xNN<N+1,’c’)+1;//temps de fixation empirique en N
subplot(224);
histplot(0:50,tempsNN,style=5);
0.07
0.035
0.06
0.030
0.05
0.025
0.04
0.020
0.03
0.015
0.02
0.010
0.01
0.00
0.005
0
5
10
15
20
25
30
35
40
45
50
0.000
0.07
0.035
0.06
0.030
0.05
0.025
0.04
0.020
0.03
0.015
0.02
0.010
0.01
0.00
0
5
10
15
20
25
30
35
40
45
50
0
5
10
15
20
25
30
35
40
45
50
0.005
0
5
10
15
20
25
30
35
40
45
50
0.000
5.5.
function p=borel(theta,nmax)//la loi de Borel
//loi de Borel de parametre theta
p=exp(-theta)*ones(1,nmax);
for k=2:nmax
p(k)=p(k-1)*theta*exp(-theta)*(k/(k-1))^(k-2);
end;
endfunction;
function y=poptot(theta)//simulation de la population totale
110
z=1;y=1;
while z>0
z=sum(grand(1,z,’poi’,theta));
y=y+z;
end;
endfunction;
nbsimul=10000;theta=0.9;
y=zeros(1,nbsimul);
for k=1:nbsimul
y(k)=poptot(theta);
end;
nmax=30;
disp(’Moyenne: ’+string(mean(y))+’ ; Espérance théorique: ’+string(1/(1-theta)));
p=borel(theta,nmax);
histplot(0:nmax,y);
plot(1:nmax,p,’or’);
8.6
Chapitre 6
6.1. //loi de S_n
n=10;nbsimul=10000;lambda=2;
Sn=sum(grand(nbsimul,n,’exp’,1/lambda),’c’);
histplot(50,Sn);
x=linspace(0,max(Sn));
plot2d(x,exp(-lambda*x)*lambda^n .*x.^(n-1)/prod(1:n-1),style=5);
6.2. nbsimul=10000;
lambda=2;t=10;
results=zeros(1,nbsimul);
T=cumsum(grand(nbsimul,50,’exp’,1/lambda),’c’);
for k=1:nbsimul
ind=max(find(T(k,:)<t));
results(k)=T(k,ind+1)-T(k,ind);
end;
mean(results)
(2-exp(-lambda*t))/lambda
//test du chi-deux
mu=lambda*t;
p=exp(-mu)*mu.^(0:30)./[1,cumprod(1:30)];//loi theorique
//ou: cp=cdfpoi(’PQ’,0:30,mu*ones(1,31));
//p1=cp-[0,cp(1:$-1)];
[ind,occ]=dsearch(Nt,0:30,’d’);
pth=[sum(p(1:10)),p(11:31),1-sum(p)];//regroupement de valeurs
fr=[sum(occ(1:10)),occ(11:31),nbsimul-sum(occ)]/nbsimul;//frequences empiriques
d2=nbsimul*sum((fr-pth).^2 ./pth);//distance du chi-deux
cdfchi(’PQ’,d2,length(pth)-1)
6.3.
//non-correlation des accroissements sur [a,b] et [c,d] disjoints
a=2;b=5;c=5;d=10;
lambda=2;
nbsimul=10000;
T=cumsum(grand(nbsimul,50,’exp’,1/lambda),’c’);
111
Nab=sum(T>a&T<b,’c’);Ncd=sum(T>b&T<d,’c’);
cv=corr(Nab,Ncd,1)//covariance empirique
cv/sqrt(corr(Nab,Nab,1)*corr(Ncd,Ncd,1))//coefficient de correlation
6.6. //superposition
t=1000;
lambda=2;mu=3;
Nt=grand(1,1,’poi’,t*lambda);
Mt=grand(1,1,’poi’,t*mu);
S1=t*rand(1,Nt);
S2=t*rand(1,Mt);
S=gsort([S1,S2],’g’,’i’);
X=S-[0,S(1:$-1)];
histplot(20,X);
x=linspace(0,max(X));
nu=lambda+mu;
plot2d(x,nu*exp(-nu*x),style=5)
6.7. On peut commencer par représenter quelques trajectoires des processus obtenus en décomposant
un processus de Poisson :
lambda=5;p=0.3;n=20;
s=cumsum(grand(1,n,’exp’,1/lambda));//instants d’arrivée du processus initial
u=rand(s);
s1=s(u<p);s2=s(u>=p);//les deux processus obtenus par décomposition
plot2d2([0,s],0:n,style=2);
plot2d2([0,s1],0:length(s1),style=3);
plot2d2([0,s2],0:length(s2),style=5);
Le programme suivant teste la non-corrélation des valeurs en t = 10 des deux processus obtenus en
décomposant un processus de Poisson de paramètre λ = 5.
lambda=5;p=0.3;t=10;nbsimul=10000;
Nt1=zeros(1,nbsimul);Nt2=Nt1;
for k=1:nbsimul
Nt=grand(1,1,’poi’,lambda*t);//nombre d’arrivées du processus initial
Nt1(k)=grand(1,1,’bin’,Nt,p);//nombre d’arrivées des processus décomposés
Nt2(k)=Nt-Nt1(k);
end;
corr(Nt1,Nt2,1)
6.8. //processus de Poisson composé à loi de sauts gaussienne
nmax=30;lambda=2;nbsimul=10000;t=5;m=0.5;sigma=1;
Zt=zeros(1,nbsimul);
for k=1:nbsimul
S=cumsum(grand(1,nmax,’exp’,1/lambda));
n=sum(S<t);
if n==nmax then warning(’augmentez nmax’);end;
Zt(k)=sum(grand(1,n,’nor’,m,sigma));
end;
mean(Zt)
lambda*t*m
variance(Zt)
lambda*t*(m^2+sigma^2)
6.9. Simulation d’un processus de Poisson d’intensité λ(t) = 50(1 + cos 2πt) :
112
lambda=100;
n=1000;
s=cumsum(grand(1,n,’exp’,1/lambda));//processus de Poisson d’intensité 100
u=rand(s);
s1=s(u<(1+cos(s*2*%pi))/2);
plot2d2([0,s1],0:length(s1),style=2);
length(s1(cos(s1*2*%pi)<0))/length(s1)
On vérifie que les accroissements de ce processus sur un intervalle de temps
[a, b] suivent la loi de Poisson
Rb
sin(2πt)
:
de paramètre m(b) − m(a) = a λ(u) du, i.e. m(t) = 50 t +
2π
a=1.25;b=1.5;lambda=100;n=300;
nbsimul=10000;
Delta=zeros(1,nbsimul);
for k=1:nbsimul
s=cumsum(grand(1,n,’exp’,1/lambda));
u=rand(s);
s1=s(u<(1+cos(s*2*%pi))/2);
Delta(k)=sum(s1>a&s1<=b);
end;
histplot(-0.5:20.5,Delta)
mu=50*(0.25-1/2/%pi);//moyenne théorique
p=exp(-mu).*mu.^(0:20)./[1,cumprod(1:20)];
plot2d3(0:20,p,style=3);
On peut aussi effectuer un grand nombre de simulations et représenter l’intensité empirique du processus
des arrivées :
n=100;nbsimul=10000;lambda=50;
s=cumsum(grand(nbsimul,n,’exp’,1/lambda),’c’);
u=rand(s);
s=s(u<(1+cos(s*2*%pi))/2);
s=s(s<1);
histplot(50,s);
t=linspace(0,1);
plot(t,1+cos(2*%pi*t),’r’);
6.10.
lambda=100;
nbsimul=10000;
N1=zeros(1,nbsimul);N2=N1;
for k=1:nbsimul
N=grand(1,1,’poi’,lambda);
x=rand(1,N);y=rand(1,N);
N1(k)=sum((x-0.2).^2+(y-0.6).^2<0.2^2);
N2(k)=sum(y<=x);
end;
mean(N1)
ans =
12.5686
mean(N2)
ans =
50.0367
corr(N1,N2,1)
ans =
- 0.3520676
113
On constate par contre que si le nombre total de points était fixé (égal à λ), les espérances de N1 et
N2 ne changeraient pas, mais la covariance serait beaucoup plus importante : en remplaçant la ligne
N=grand(1,1,’poi’,lambda); par N=lambda; on obtient :
corr(N1,N2,1)
ans =
- 6.2280674
6.12.
n=20;lambda=2;
//for k=1:10
p=cumsum(grand(1,n,’exp’,1/lambda));
theta=2*%pi*rand(1,n);
pmax=max(p);
x=[p.*cos(theta)-pmax*sin(theta);p.*cos(theta)+pmax*sin(theta)];
y=[p.*sin(theta)+pmax*cos(theta);p.*sin(theta)-pmax*cos(theta)];
xbasc();plot2d(x,y,axesflag=1,style=2*ones(1,n));
square(-pmax/sqrt(2),-pmax/sqrt(2),pmax/sqrt(2),pmax/sqrt(2));
//xpause(1e6);
//end;
n=10000;x0=20;y0=-40;
p=cumsum(grand(1,n,’exp’,1/lambda));
theta=2*%pi*rand(1,n);
//distances des doites au point (x0,y0)
dist=abs(x0*cos(theta)+y0*sin(theta)-p);
dist=gsort(dist(1:n/2),’g’,’i’);
//differences
inter=dist-[0,dist(1:$-1)];
histplot(50,inter)
t=linspace(0,max(inter));
plot2d(t,lambda*exp(-lambda*t),style=5);
6.13.
function pi=eigen1(Q)
p=kernel(Q’);
pi=p’/sum(p);
endfunction;
6.14.
l=3;m=4;Q=[-l,l;m,-m];n=100000;x0=1;
timer();[x1,t1]=traj1(n,Q,x0);timer()
timer();[x2,t2]=traj2(n,Q,x0);timer()
timer();[x3,t3]=traj3(n,Q,x0);timer()
sum(x3(2:$)<>x3(1:$-1))//nombre réel de sauts
pi=eigen(Q);pi1=eigen1(Q);
pi(1),pi1(1)
sum(t1(x1==1))/sum(t1)
sum(t2(x2==1))/sum(t2)
sum(t3(x3==1))/sum(t3)
6.15. Le système peut se trouver dans l’un des quatre états suivants :
1. les trois composants fonctionnent ;
2. A est en panne, B et C fonctionnent ;
3. B est en panne, A et C fonctionnent ;
114
4. le système est en panne.
Le caractère exponentiel des durées de vie des différents composants et leur indépendance font alors du
système un processus de Markov à temps continu de générateur :


−λ − µ − ν
λ
µ
ν

0
−µ − ν
0
µ + ν
 .
Q=

0
0
−λ − ν λ + ν 
0
0
0
0
La loi p(t) = (p1 (t), p2 (t), p3 (t), p4 (t)) du système à l’instant t vérifie alors l’équation de Kolmogorov
p′ (t) = p(t)Q, i.e. p(t) = p(0)etQ . On peut, pour représenter l’évolution de la loi de l’état du système
en fonction du temps, utiliser la commande ode qui permet de résoudre l’équation différentielle, ou la
commande expm qui calcule l’exponentielle d’une matrice.
lambda=3;mu=2;nu=4;
Q=[-(lambda+mu+nu) lambda mu nu;
0 -mu-nu 0 mu+nu;
0 0 -lambda-nu lambda+nu;
0 0 0 0];
function dy=f(t,y)
dy=Q’*y;
endfunction;
//résolution numérique de l’équation différentielle
t=linspace(0,1);
p=ode([1 0 0 0]’,0,t,f);
subplot(121);
plot2d(t(ones(1,4),:)’,p’);
legends([’p1’ ’p2’ ’p3’ ’p4’],1:4,4);
//utilisation de l’exponentielle matricielle
subplot(122);
h=0.01;
t=0:h:1;
Ph=expm(h*Q);
P=zeros(length(t),4);
P(1,:)=[1 0 0 0];
for k=1:length(t)-1, P(k+1,:)=P(k,:)*Ph; end;
plot2d(t(ones(1,4),:)’,P);
legends([’p1’ ’p2’ ’p3’ ’p4’],1:4,4);
On peut ensuite simuler la durée de fonctionnement des divers composants :
nbsimul=1000;
A=grand(nbsimul,1,’exp’,1/lambda);
B=grand(nbsimul,1,’exp’,1/mu);
C=grand(nbsimul,1,’exp’,1/nu);
Pemp=zeros(length(t),4);
for k=1:length(t)
Pemp(k,1)=sum(A>t(k)&B>t(k)&C>t(k));
Pemp(k,2)=sum(A<=t(k)&B>t(k)&C>t(k));
Pemp(k,3)=sum(A>t(k)&B<=t(k)&C>t(k));
Pemp(k,4)=sum((A<=t(k)&B<=t(k))|(C<=t(k)));
end;
Pemp=Pemp/nbsimul;
subplot(122)
plot2d(t(ones(1,4),:)’,Pemp);
legends([’p1’ ’p2’ ’p3’ ’p4’],1:4,4);
xtitle(’Loi empirique’);
Loi théorique
1.0
Loi empirique
1.0
p1
0.9
p2
p1
0.9
p3
0.8
6.16.
115
p4
p2
p3
0.8
p4
0.7
0.7
0.6
0.6
0.5
0.5
0.4
0.4
0.3
0.3
0.2
0.2
0.1
0.1
0.0
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
0.0
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
function [ma,mr,mn]=moyennes(a,s,e,d,n)
//a,s,e,d,n: mêmes notations que dans la fonction GG1
//ma: temps d’attente moyen
//mr: temps de réponse moyen
//mn: longueur moyenne de la file
rep=d-a;mr=mean(rep);
att=rep-s;ma=mean(att);
temps=e(2:$)-e(1:$-1);
mn=sum(temps.*n(1:$-1))/(e($)-e(1));
endfunction;
6.18.
//file MM1
m=50000;lambda=2;mu=2.5;
a=cumsum(grand(1,m,’exp’,1/lambda));
s=grand(1,m,’exp’,1/mu);
[e,d,n]=GG1(a,s);
[ma,mr,mn]=moyennes(a,s,e,d,n)
lambda*mr//formule de Little
//xset(’window’,1);xbasc();
//plot2d2([0,e],[0,n]);
//recherche de la loi stationnaire
nmax=max(n);//longueur maximale de la file
//on élimine les temps d’initialisation et de vidage
m0=0.1*m;m1=1.8*m;
t=zeros(1,nmax+1);
for k=0:nmax
ind=find(n(m0:m1)==k);
t(k+1)=sum(e(ind+m0)-e(ind+m0-1));
end;
t=t/(e(m1+1)-e(m0));
loi=(1-lambda/mu)*(lambda/mu).^(0:nmax);//loi géométrique
xset(’window’,2);xbasc();
plot2d2(0:nmax,t,style=2);
plot2d2(0:nmax,loi,style=5);
6.19.
tmax=100;lambda=1;mu=1.2;
t=-log(rand())/lambda;//première arrivée
n=1;//longueur de la file
while t($)<tmax
if n($)==0 then t=[t,t($)-log(rand())/lambda];n=[n,n($)+1];
else
r1=-log(rand())/lambda;
r2=-log(rand())/mu;
if r1<r2 then t=[t,t($)+r1];n=[n,n($)+1];
else t=[t,t($)+r2];n=[n,n($)-1];
end;
end;
end;
plot2d2([0,t],[0,n],style=2,rect=[0 0 tmax max(n)+1])
6.20.
//file MMinf
lambda=10;//intensité d’arrivées
mu=1;//inverse du temps moyen de service
116
//représentation d’une trajectoire
n=10000;//nombre d’arrivées
x=grand(1,n,’exp’,1/lambda);//temps inter-arrivées
a=cumsum(x);//instants d’arrivées
s=grand(a,’exp’,1/mu);//temps de service
d=a+s;//instants de départs
evts=[a,d];//événements (arrivées ou départs)
dnt=[ones(a),-ones(d)];//variation du nombre de clients
[evts,ind]=gsort(evts,’g’,’i’);//événements ordonnés
dnt=dnt(ind);
nt=cumsum(dnt);//nombre de clients aux instants d’arrivées ou de départs
xset(’window’,1);xbasc();
plot2d2([0,evts],[0,nt]);
//théorème ergodique:
n1=50;n2=2*n-50;
temps=evts(n1+1:n2+1)-evts(n1:n2);//durées entre deux événements
nbs=nt(n1:n2);//nombre de clients présents
mnbs=sum(temps.*nbs)/sum(temps)//nombre moyen de clients
nbmax=max(nbs);
fr=zeros(1,nbmax+1);
for k=0:nbmax
fr(k+1)=sum(temps(nbs==k));
end;
fr=fr/sum(fr);
xset(’window’,2);xbasc();
subplot(121);
xtitle(’Theoreme ergodique’);
plot2d2(-0.5:nbmax-0.5,fr);
pc=cdfpoi(’PQ’,0:max(nbs),lambda/mu*ones(1,nbmax+1));
p=pc-[0,pc(1:$-1)];//loi de Poisson
plot2d3(0:nbmax,p,style=5);
//convergence vers la loi stationnaire:
//loi empirique de Nt pour t=10
nbsimul=1000;n=200;t=10;
x=grand(nbsimul,n,’exp’,1/lambda);//temps inter-arrivées
a=cumsum(x,’c’);//instants d’arrivées
s=grand(a,’exp’,1/mu);//temps de service
d=a+s;//instants de départs
Nt=sum(a<t,’c’)-sum(d<t,’c’);//nombre de clients présents à l’instant t
subplot(122);
xtitle(’Loi empirique de N10’);
histplot(-0.5:max(Nt)+0.5,Nt)
plot2d3(0:nbmax,p,style=5);
6.22. Représentation du flot de sortie d’une file M/M/p (on utilise la fonction MMp du texte) :
//file MMp
m=50;lambda=2.9;mu=1;p=3;
a=cumsum(grand(1,m,’exp’,1/lambda));
s=grand(1,m,’exp’,1/mu);
[e,d,n]=GGp(a,s,p);
departs=gsort(d,’g’,’i’);//départs
xbasc();
subplot(211);
plot2d2([0,e],[0,n],style=2);
xtitle(’Nombre de clients dans la file’);
subplot(212);
plot2d2([0,a],[0:m],style=2);//flot d’arrivées
117
plot2d2([0,departs],[0:m],style=3);//flot de départs
xtitle(’Flots d’’arrivées et de départs’);
legends([’arrivées’,’départs’],[2,3],2)
Nombre de clients dans la file
10
9
8
7
6
5
4
3
2
1
0
0
2
4
6
8
10
12
14
16
18
12
14
16
18
Flots d’arrivées et de départs
50
45
arrivées
40
départs
35
30
25
20
15
10
5
0
0
2
4
6
8
10
6.23.
//représentation d’une trajectoire
n=10;//nombre de cycles
EU=7;//espérance du temps de service
EV=1;//espérance du temps de panne
U=grand(1,n,’exp’,EU);//durées de service
V=2*EV*rand(1,n);//durées de réparation
UV=zeros(1,2*n);UV(1:2:2*n-1)=U;UV(2:2:2*n)=V;UV=cumsum(UV);
S=ones(1,2*n);S(2*(1:n))=0;
//plot2d2([0,UV],[0,S],frameflag=1,rect=[0,0,max(UV),3],style=2);
//proportion de temps de service
n=100000;
U=grand(1,n,’exp’,EU);
V=2*EV*rand(1,n);
sum(U)/sum(U+V)
p=EU/(EU+EV)
//état de la machine à un instant fixé
nbsimul=10000;
n=10;
U=grand(nbsimul,n,’exp’,EU);
V=2*EV*rand(nbsimul,n);
UV=zeros(nbsimul,2*n);
UV(:,1+2*(0:n-1))=U;UV(:,2*(1:n))=V;
UV=cumsum(UV,’c’);
t=linspace(0,20);
St=zeros(t);
for k=1:length(t)
St(k)=1-sum(pmodulo(sum(UV<t(k),’c’),2))/nbsimul;
end;
xbasc();
plot(t,St);
plot([0 20],[p p],’r’)
6.24. Le temps de coalescence T est somme de n − 1 variables aléatoires exponentielles indépendantes,
118
n
X
i(i − 1)
i
2
de paramètres respectifs
=
(i = 2, . . . , n). Son espérance est donc E(T ) =
=
2
2
i(i
−
1)
i=2
1
.
2 1−
n
n=20;//taille de l’echantillon
nbs=100000;//nombre de simulations
t=zeros(nbs,n-1);
for k=n:-1:2
t(:,k-1)=grand(nbs,1,’exp’,2/k/(k-1));
end;
T=sum(t,’c’);
mean(T)//moyenne empirique
2*(1-1/n)//esperance theorique
xbasc();
histplot(20,T)
On peut également représenter quelques trajectoires du processus (nombre d’ancêtres distincts en fonction
du temps) :
X=[zeros(5,1),cumsum(t(1:5,:),’c’)];
plot2d2(X’,(n:-1:1)’*ones(1,5));
6.25.
//évolution d’une population de bacteries en temps continu
//cas lambda=mu=1
a=10;b=20;//population initiale
nbsimul=10;nmax=2000;
tA=cumsum(grand(nbsimul,nmax,’exp’,1)./(ones(nbsimul,1)*(a:a+nmax-1)),’c’);
tB=cumsum(grand(nbsimul,nmax,’exp’,1)./(ones(nbsimul,1)*(b:b+nmax-1)),’c’);
[t,k]=gsort([tA,tB],’c’,’i’);
dx=zeros(t);
dx(k<=nmax)=1;
x=[a*ones(nbsimul,1),a*ones(dx)+cumsum(dx,’c’)];
y=x ./ (ones(nbsimul,1)*((a+b):(a+b)+2*nmax));
y=y(:,1:nmax);
plot2d(y’)
8.7
Chapitre 7
Si X1 , . . . , Xn est un échantillon de taille n d’une loi exponentielle de paramètre inconnu λ,
1
de cette loi est la moyenne empirique
l’estimateur du maximum de vraisemblance de l’espérance
λ
X1 + · · · + Xn
de l’échantillon. Or nλX n = λ(X1 + · · · + Xn ) suit la loi Gamma Γ(1, n). Il en
Xn =
n
résulte que
Z 1/a
1
1
1
1 =
∈ naX n , nbX n = P
≤ nλX n ≤
tn−1 e−t dt .
P
λ
b
a
Γ(n) 1/b
7.1.
1
L’intervalle naX n , nbX n est donc un intervalle de confiance de niveau α pour dès que les constantes
λ
Z 1/a
1
a et b vérifient
tn−1 e−t dt = α.
Γ(n) 1/b
La recherche de ces constantes ne dépend pas de λ et s’effectue au moyen de la fonction cdfgam. On
remarque qu’on dispose d’un certain degré de liberté dans le choix de l’une des constantes ; l’autre est
alors parfaitement déterminée.
119
n=30;//taille de l’échantillon
//intervalle de confiance au niveau alpha
alpha=0.95;
a=1/cdfgam(’X’,n,1,(1+alpha)/2,(1-alpha)/2);
b=1/cdfgam(’X’,n,1,(1-alpha)/2,(1+alpha)/2);
n*a,n*b
//vérification par simulation
lambda=3;nbsimul=10000;
x=grand(nbsimul,n,’exp’,1/lambda);
sum(a*sum(x,’c’)<1/lambda&1/lambda<b*sum(x,’c’))/nbsimul
ans =
0.7203082
ans =
1.4821494
ans =
0.9474
7.2.
function moy=idcm(x,alpha)
//intervalle de confiance au niveau alpha pour l’espérance m
//d’un échantillon gaussien x de variance inconnue
n=size(x,’*’);
xbar=mean(x);
s=sqrt(sum((x-xbar).^2)/n);
t=cdft(’T’,n-1,(1-alpha)/2,(1+alpha)/2);
moy=[xbar+t*s/sqrt(n-1),xbar-t*s/sqrt(n-1)];
endfunction;
function v=idcv(x,alpha,m)
//intervalle de confiance au niveau alpha pour la variance v
//d’un échantillon gaussien x d’espérance connue m
n=size(x,’*’);
s2=sum((x-m).^2);
k1=cdfchi(’X’,n,(1-alpha)/2,(1+alpha)/2);
k2=cdfchi(’X’,n,(1+alpha)/2,(1-alpha)/2);
v=[s2/k2,s2/k1];
endfunction;
function v=idcv2(x,alpha)
//intervalle de confiance au niveau alpha pour la variance v
//d’un échantillon gaussien x d’espérance inconnue
n=size(x,’*’);
xbar=mean(x);
s2=sum((x-xbar).^2);
k1=cdfchi(’X’,n-1,(1-alpha)/2,(1+alpha)/2);
k2=cdfchi(’X’,n-1,(1+alpha)/2,(1-alpha)/2);
v=[s2/k2,s2/k1];
endfunction;
//vérification
n=10;alpha=0.95;m=-3;sigma=2;
nbsimul=10000;
test1=0;test2=0;test3=0;
for k=1:nbsimul
x=sigma*rand(1,n,’n’)+m;
moy=idcm(x,alpha);
v=idcv(x,alpha,m);
120
v2=idcv2(x,alpha);
if moy(1)<m&m<moy(2) then test1=test1+1;end;
if v(1)<sigma^2&sigma^2<v(2) then test2=test2+1;end;
if v2(1)<sigma^2&sigma^2<v2(2) then test3=test3+1;end;
end;
disp([test1,test2,test3]/nbsimul)
Il est naturellement souhaitable (et facile) de vectorialiser ces fonctions pour en accélérer l’exécution.
7.3.
n=50;m=30;alpha=2;beta=3;
x=grand(1,n,’gam’,alpha,1);
y=grand(1,n,’gam’,beta,1);
z=grand(1,m,’bet’,alpha,beta);
//on utilise la fonction nb définie à l’exercice ???
u=nb(x./(x+y),z);
v=(u-n*m/2)/sqrt(n*m*(n+m+1)/12);
cdfnor(’PQ’,v,0,1)
7.4.
n=300;m=500;alpha=2;beta=4;
x=grand(n,1,’gam’,alpha,1);
y=grand(n,1,’gam’,beta,1);
z=grand(m,1,’bet’,alpha,beta);
[d,p]=kstwo(x./(x+y),z)
On peut également redéfinir soi-même cette fonction :
function [dmax,pval]=ks2(t,z)
z=z(:);t=t(:);n=length(t);m=length(z);
zt=[z;t];
[zts,k]=gsort(zt,’g’,’i’);
indz=bool2s(k<=m);
indt=bool2s(k>m);
fz=[0;cumsum(indz)/m];
ft=[0;cumsum(indt)/n];
xbasc();xselect();
plot2d2([0;zts],fz,style=2);
plot2d2([0;zts],ft,style=5);
dmax=max([abs(fz-ft);abs(fz(2:$)-ft(1:$-1))])
N=sqrt(n*m/(n+m));
w=(N+0.12+0.11/N)*dmax;
pval=1-pks(w);
endfunction;
t=x./(x+y);
[dmax,pval]=ks2(t,z)
121
122
Bibliographie
[1] P. Baldi, Mazliak L., Priouret P., Martingales et chaînes de Markov, Hermann, 2000.
[2] B. Bercu, D. Chafaï, Modélisation stochastique et simulation, Dunod, 2007.
[3] J.-F. Delmas, B. Jourdain, Modèles aléatoires : applications aux sciences de l’ingénieur et
du vivant, Springer, 2006.
[4] C. Graham, Chaînes de Markov, Dunod, 2008.
[5] J.-Y. Ouvrard, Probabilités, Maîtrise, agrégation, Cassini, 2000.
[6] V. Rivoirard, G. Stoltz, Statistique en action, Vuibert, 2009.
[7] G. Saporta, Probabilités, analyse des données et statistique, Technip, 2006.
[8] P. Toulouse, Thèmes de probabilités et statistique, Dunod, 1999.
[9] P. Vallois, Modélisations stochastiques et simulations, Ellipses, 2007.
[10] B. Ycart, Modèles et algorithmes markoviens, Springer, 2002.
[11] S. L. Campbell, J. -P. Chancelier, R. Nikoukhah, Modeling and simulation in Scilab/Scicos,
Springer, 2006.
123
Téléchargement
Study collections