Module utile pour les représentations graphiques et fonctions utiles pour la génération de nombres aléatoires et le calcul d'une racine carrée :
import matplotlib.pyplot as plt
from random import random, randint
from math import sqrt
bernoulli(p)
simulant une variable aléatoire suivant une loi de Bernoulli de paramètre p
, c'est-à-dire une fonction qui renvoie 1 avec une probabilité p
et qui renvoie 0 avec une probabilité 1-p
.def bernoulli(p):
alea = random()
if alea < p:
return 1
else :
return 0
bernoulli(0.4)
freq_rep_bernoulli(n, p)
qui renvoie la fréquence d'apparition de la valeur 1 dans un échantillon de taille n
de variables aléatoires suivant une loi de Bernoulli de paramètre p
.def freq_rep_bernoulli(n, p):
f = 0
for i in range(n):
f = f + bernoulli(p)
return f/n
freq_rep_bernoulli(1000, 0.3)
La fréquence $f$ calculée par la fonction freq_rep_bernoulli(n, p)
est un estimation de la proportion p
à partir d'un échantillon de taille $n$.
Un intervalle de confiance pour cette proportion, au niveau de 95%, est : $$\left[ f-\frac{1}{\sqrt{n}};f+\frac{1}{\sqrt{n}}\right]$$
freq_rep_bernoulli_confiance(n, p)
identique à la fonction précédente mais qui renvoie en plus les bornes d'un intervalle de confiance au niveau de 95%.def freq_rep_bernoulli_confiance(n, p):
f = 0
for i in range(n):
f = f + bernoulli(p)
f = f/n
return f, f-1/sqrt(n), f+1/sqrt(n)
freq_rep_bernoulli_confiance(1000, 0.3)
liste_freq_rep_bernoulli(e, n, p)
qui renvoie une liste de e
éléments, chaque élément contenant la fréquence d'appartition de la valeur 1 dans un échantillon de taille n
de variables aléatoires suivant une loi de Bernoulli de paramètre p
.def liste_freq_rep_bernoulli(e, n, p):
lf = []
for i in range(e):
lf.append(freq_rep_bernoulli(n, p))
return lf
liste_freq_rep_bernoulli(5, 1000, 0.4)
On veut représenter graphiquement les fréquences obtenues pour plusieurs échantillons.
# paramètre p d'une loi de Bernoulli
p_bernoulli = 0.4
# taille n d'un échantillon
taille_echantillon = 1000
# nombre e d'échantillons à réaliser
nb_echantillon = 100
liste_freq = liste_freq_rep_bernoulli(nb_echantillon, taille_echantillon, p_bernoulli)
Dans la représentation graphique ci-dessous, on trace, pour chaque fréquence de chaque échantillon, l'intervalle de confiance correspondant.
Le paramètre $p$ de la variable de Bernoulli est également représenté, ce qui permet d'observer les cas, rares, où $p$ n'appartient pas à l'intervalle de confiance centrée sur la fréquence simulée.
x = list(range(nb_echantillon))
ymin, ymax = min(liste_freq), max(liste_freq)
plt.figure(figsize = (18, 5))
plt.ylim(ymin-0.05, ymax+0.05)
plt.xlabel("échantillons de taille {}".format(taille_echantillon))
plt.ylabel("fréq. obtenue par l'échantillon simulé")
plt.scatter(x, liste_freq, s=14)
plt.errorbar(x, liste_freq, yerr = 1/sqrt(taille_echantillon), fmt = 'none', capsize = 4, errorevery = 1, ecolor = 'red')
plt.plot(x, [p_bernoulli]*nb_echantillon, 'g--')
plt.show()
# plt.savefig('repr_ech_freq_confiance.png', dpi = 600)
Supposons une population dont l'effectif $N$ est inconnu, dans laquelle on a capturé et marqué 800 individus.
Le rapport $p=\frac{800}{N}$ est la proportion d'individus marqués dans cette population.
Pour réaliser une simulation, choisissons au hasard, à l'aide de Python, l'effectif de la population totale $N$ entre 4000 et 6000 individus, stocké ci-dessous dans la variable effectif_total
.
On évite d'afficher $N$ afin de simuler le fait de l'ignorer.
effectif_total = randint(4000, 6000)
marques = 800
proportion = marques/effectif_total
freq_rep_bernoulli(n,p)
?La fonction freq_rep_bernoulli(n,p)
permet de simuler la capture de n
individus dans une population dans laquelle une proportion p
d'individus sont marqués.
eval_pop_totale(n, m, p)
qui renvoie une estimation de l'effectif de la population totale par la méthode de Capture, Marquage et Recapture. n
est la taille de l'échantillon prélevé dans une population ayant m
individus préalablement marqués correspondant à une proportion p
d'individus marqués.def eval_pop_totale(n, m, p):
f = freq_rep_bernoulli(n, p)
return int(m/f)
eval_pop_totale(200, marques, proportion)
eval_pop_totale(n, m, p)
de sorte qu'elle renvoie également les bornes d'un encadrement de l'effectif de la population totale obtenus à partir de l'intervalle de confiance à 95% de la fréquence calculée.def eval_pop_totale(n, m, p):
f = freq_rep_bernoulli(n, p)
return int(m/(f+1/sqrt(n))), int(m/f), int(m/(f-1/sqrt(n))+1)
eval_pop_totale(200, marques, proportion)