4 TP4 Simulation de lois de probabilités discr`etes finies 1

publicité
T.P.4 Simulation de lois de probabilités discrètes finies
4
1
Introduction
Soit n ∈ N∗ , on considère un ensemble S = {xi , i ∈ I = J1, nK} ainsi qu’une suite (pi )i∈I telle que ∀i ∈ I,
n
X
pi ≥ 0 et
pi = 1 (On a ainsi défini une loi L de probabilités).
i=1
Notre objectif est de générer un ou plusieurs nombres aléatoires V de S tel que P(V = xi ) = pi , ∀i ∈ I.
Simuler une loi de probabilité L consiste à écrire un algorithme qui génère des suites finies de nombres
V dont on considérera que ce sont des réalisations indépendantes de la loi L.
On notera au préalable que, puisque les algorithmes sont par nature déterministes, les suites engendrées
ne sont, dans les faits, ni aléatoires, encore moins indépendantes... On admettra qu’elles sont pourtant suffisantes dans la pratique et on parlera désormais de suites pseudo-aléatoires.
Python, via son module random permet de simuler la réalisation de la loi uniforme sur l’intervalle [0, 1[.
Il suffit pour cela d’appeler la fonction random(). Cette fonction est fondamentale car elle peut-être utilisée
dans toutes les simulations de lois usuelles qui nous intéresse. Cela étant, pour a et b deux entiers naturels
tels que a < b, il est possible d’utiliser la fonction randint(a,b) qui fournit un nombre entier aléatoire
compris entre a et b (ces valeurs étant incluses !).
On peut lire dans l’aide en lignes docs.python.org la description suivante :« Almost all module functions depend on the basic function random(), which generates a random float uniformly in the semi-open
range [0.0, 1.0). Python uses the Mersenne Twister as the core generator. It produces 53-bit precision floats
and has a period of 2**19937-1. [...] The Mersenne Twister is one of the most extensively tested random
number generators in existence. However, being completely deterministic, it is not suitable for all purposes. »
Dans la pratique, on retiendra que les générateurs de nombres pseudo-aléatoires initialisent leurs calculs
à l’aide d’une valeur initiale s0 appelée graine.
Il vous est possible de choisir cette graine grâce à la fonction random.seed(a) et les avantages sont multiples : Une fois la graine choisie par l’utilisateur, il est possible de reproduire intégralement la séquence des
nombres pseudo-aléatoires produits, ce qui peut être utile pour vérifier des résultats obtenus par simulation.
Enfin, « le fait d’employer une procédure standardisée permet de disposer d’informations fiables sur la qualité et les performances des procédures utilisées en provenance de divers chercheurs et utilisateurs » 1 .
0 La bibliothèque scipy.stats possède les fonctions randint, bernoulli, binom et hypergeom qui
permettent le calcul de P(X = k) où X est une variable aléatoire qui suit respectivement les lois uniforme,
bernoulli, binomiale et hypergéométrique.
Il suffit pour ça d’appeler : nom_Loi.pmf(k,paramètres) (pmf pour probability mass function) et également : mean, var = nom_Loi.stats(paramètres,moments=’mv’) pour obtenir moyenne et variance.
0 FX s’obtient en appelant : nom_Loi.cdf(t,paramètres) (cdf pour cumulative density function).
1. D’après http ://math.univ-lyon1.fr/ jberard/genunif-www.pdf, document complet sur lequel on trouvera quantité d’informations sur les générations possibles de nombres pseudo-aléatoires
1
2
Lois uniformes sur J1, nK
À Rappeler la définition de la loi uniforme sur J1, nK ainsi que le modèle associé. Préciser son espérance.
Á Écrire une fonction Python simul_loiUniforme(m,a,b) qui génère une liste L formée de m entiers
xi ∈ Ja, bK considérés comme m réalisations indépendantes de la loi uniforme sur J1, nK et retourne les
fréquences et les fréquences cumulées de chacune des valeurs de cette liste.
 Calculer la moyenne de la série L et la comparer à l’espérance de la loi uniforme.
à En utilisant la fonction randint de la bibliothèque scipy.stats, comparer dans un première fenêtre
les fréquences simulées et le graphe de la loi uniforme sur J1, nK et dans une deuxième fenêtre, les
fréquences cumulées et la fonction de répartition de la loi uniforme sur J1, nK et ce pour différentes
valeurs de m.
3
Loi de Bernoulli de paramètre p
À Rappeler la définition de la loi de Bernoulli de paramètre p ainsi que le modèle associé. Préciser son
espérance et sa variance.
Á Écrire une fonction Python simul_loiBernoulli(p) qui simule la réalisation d’une loi de Bernoulli
de paramètre p ainsi qu’une fonction freqEtFreqC_SimulBernoulli(m,p) qui créé une liste L formée
de m entiers xi ∈ J0, 1K considérés comme m réalisations indépendantes de la loi de Bernoulli de
paramètre p et retourne la fréquence respective des 0 et des 1 et leurs fréquences cumulées.
 Calculer la moyenne et la variance de la série L et les comparer à l’espérance et la variance de la loi
de Bernoulli de paramètre p.
à En utilisant la fonction bernoulli de la bibliothèque scipy.stats, comparer dans deux fenêtres distinctes les fréquences simulées et le graphe de la loi de Bernoulli de paramètre p, les fréquences cumulées
et la fonction de répartition de cette même moi et ce pour différentes valeurs de m.
4
Loi binomiale de paramètres n et p
À Rappeler la définition de la loi Binomiale de paramètres n et p ainsi que le modèle associé. Préciser
son espérance et sa variance.
Á Écrire une fonction Python simul_loiBinomiale(n,p) qui simule la réalisation d’une loi Binomiale
de paramètres n et p ainsi qu’une fonction freqEtFreqC_SimulBinomiale(m,n,p) qui créé une liste
L formée de m entiers xi ∈ J0, nK considérés comme m réalisations indépendantes de la loi binomiale
de paramètre n et p et retourne la fréquence respective des xi et leurs fréquences cumulées.
 Reprendre les questions 3. et 4. des deux lois précédentes.
5
Loi hypergéométrique de paramètres N , n et p
À Rappeler la définition de la loi Hypergéométrique de paramètres N , n et p ainsi que le modèle associé.
Préciser son espérance.
Á Écrire une fonction Python simul_loiHyper(m,N,n,p) qui simule la réalisation d’une loi Hypergéométrique de paramètres N , n et p ainsi qu’une fonction freqEtFreqC_SimulHyper(m,N,n,p) qui créé
une liste L formée de m entiers xi ∈ J0, nK considérés comme m réalisations indépendantes de la loi
Hypergéométrique et retourne les fréquences et les fréquences cumulées des valeurs simulées.
 Reprendre les questions 3. et 4. des deux lois précédentes.
2
Téléchargement