Verifier empiriquement le Theoreme de la limite centrale avec une loi bernoulli de parametre p=1/2 (esperance 1/2, ecart-type 1/2).
Verifier le TLC correspond pour bernouilli consiste a verifier que les v.a.
(au choix) convergent en loi vers une v.a. de loi normale(0,1) quand n tend vers l'infini.
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import mpld3
mpld3.enable_notebook()
plt.rcParams['figure.figsize'] = [10, 5]
# une somme de n Bernoulli independante a la meme loi qu'une binomiale B(n,p)
p = 0.5
n = 5000
N = 100000
normal_tcl = (np.random.binomial(n, p, N) - n*p) / np.sqrt(n *p *(1-p))
# afficher la dentite theorique d'une loi normale(0,1) et un histogramme
x = np.linspace(-4, 4, 100)
plt.figure()
plt.hist(normal_tcl, bins=50, density=True)
plt.plot(x, np.exp(-0.5*x**2)/np.sqrt(2*np.pi))
[<matplotlib.lines.Line2D at 0x7f200eeefb20>]
S_n de loi binomiale de parmetre (n, 1/2). calculer la probabilite que S_2000 >= 1111
Calcul direct
# coefficients binomiaux (k parmi n)
from scipy.special import binom
p_S_2000_sup_1111 = 0
for i in range(1111, 2001):
p_S_2000_sup_1111 += binom(2000, i) * 0.5**2000
p_S_2000_sup_1111
/tmp/ipykernel_4144/3727624882.py:6: RuntimeWarning: invalid value encountered in double_scalars p_S_2000_sup_1111 += binom(2000, i) * 0.5**2000
nan
Eviter l'overflow en reecrivant la formule
p_S_2000_sup_1111 = 0
for i in range(1111, 2001):
numerateur = np.arange(1,2000+1) / 2
denominateur = []
for j in range(1,2000-i+1):
denominateur.append(j)
denominateur.append(j)
for j in range(2000-i+1, i+1):
denominateur.append(j)
denominateur = np.array(denominateur)
p_S_2000_sup_1111 += np.prod(numerateur / denominateur)
p_S_2000_sup_1111
3.776938587053175e-07
Calculer exactement la loi de la comme en utilisant la convolution
a = np.array([0.5,0.5])
b = np.copy(a)
for i in range(1,2000):
a = np.convolve(a,b)
plt.figure()
plt.bar(np.arange(2001),a)
plt.title('Loi d\'une binomiale de parametres 2000, 0.5')
a[1112:].sum()
2.9969702404338685e-07
avec le théoreme de la limite centrale
import scipy.stats
1 - scipy.stats.norm.cdf(111/np.sqrt(500))
3.4515360458620137e-07