Binomial

Lynxoria · December 04, 2023
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom
import random

###1###

# données

N_binomial = 20
p_binomial = 0.5
Nmc_binomial = 10000

# Simulation de la variable aléatoire binomiale
binomial_data = np.random.binomial(N_binomial, p_binomial, Nmc_binomial)

# fonction de répartition 
x_cdf_binomial = np.arange(0, N_binomial + 1)
y_cdf_binomial = np.array([np.sum(binomial_data <= xi) / Nmc_binomial for xi in x_cdf_binomial])

plt.figure(figsize=(10, 6))
plt.step(x_cdf_binomial, y_cdf_binomial, where='post', label='CDF de Binomiale')
plt.title('Fonction de Répartition de Binomiale')
plt.xlabel('Nombre de succès')
plt.ylabel('Probabilité')
plt.legend()
plt.grid(True)
plt.show()

# fonction de densité 
x_pmf_binomial = np.arange(0, N_binomial + 1)
y_pmf_binomial = binom.pmf(x_pmf_binomial, N_binomial, p_binomial)

plt.figure(figsize=(10, 6))
plt.bar(x_pmf_binomial, y_pmf_binomial, label='PMF de Binomiale', alpha=0.7)
plt.title('Fonction de Densité de Binomiale')
plt.xlabel('Nombre de succès')
plt.ylabel('Probabilité')
plt.legend()
plt.grid(True)
plt.show()

###2###

def V_A_Binomiale(p, N):
    k = 0
    proba = (1 - p) ** N
    F = proba
    U = random.uniform(0, 1)
    while U > F:
        proba = (p * (N - k)) / ((1 - p) * (k + 1)) * proba
        F = F + proba
        k = k + 1
    X = k
    return X

# utilisation
p_binom = 0.5
N_binom = 20

# Simulation d'une variable aléatoire binomiale
result = V_A_Binomiale(p_binom, N_binom)

print(f'Variable aléatoire binomiale simulée: {result}')

###3###

# données
p_binom = 0.2
N_binom = 50
Nmc_binom = 10000

# Simulation de la variable aléatoire binomiale
binomial_data = [V_A_Binomiale(p_binom, N_binom) for _ in range(Nmc_binom)]

# Calcul des statistiques empiriques
esperance_empirique = np.mean(binomial_data)
variance_empirique = np.var(binomial_data)

# Calcul des valeurs théoriques
esperance_theorique = N_binom * p_binom
variance_theorique = N_binom * p_binom * (1 - p_binom)

# Affichage des résultats
print(f'Espérance empirique: {esperance_empirique}')
print(f'Variance empirique: {variance_empirique}')
print(f'Espérance théorique: {esperance_theorique}')
print(f'Variance théorique: {variance_theorique}')

# fonction de répartition 
a_cdf, b_cdf = 0, 50
delta_cdf = 0.5
Nx_cdf = 100
x_cdf = np.arange(a_cdf, b_cdf + delta_cdf, delta_cdf)
y_cdf = [np.sum(binomial_data <= xi) / Nmc_binom for xi in x_cdf]

plt.figure(figsize=(10, 6))
plt.step(x_cdf, y_cdf, where='post', label='CDF de Binomiale')
plt.title('Fonction de Répartition de Binomiale')
plt.xlabel('Nombre de succès')
plt.ylabel('Probabilité')
plt.legend()
plt.grid(True)
plt.show()

# fonction de densité
a_pmf, b_pmf = 0, 20
delta_pmf = 1
Nx_pmf = 20
x_pmf = np.arange(a_pmf, b_pmf + delta_pmf, delta_pmf)
y_pmf = binom.pmf(x_pmf, N_binom, p_binom)

plt.figure(figsize=(10, 6))
plt.bar(x_pmf, y_pmf, label='PMF de Binomiale', alpha=0.7)
plt.title('Fonction de Densité de Binomiale')
plt.xlabel('Nombre de succès')
plt.ylabel('Probabilité')
plt.legend()
plt.grid(True)
plt.show()
Output

Comments

Please sign up or log in to contribute to the discussion.