triangulaire

Lynxoria · December 06, 2023
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pareto

# Simuler la v.a. Pareto(α=9, β=2)
alpha1 = 9
beta1 = 2
Nmc = 10000
pareto_data1 = pareto.rvs(alpha1, size=Nmc, scale=beta1)

esperance_empirique1 = np.mean(pareto_data1)
variance_empirique1 = np.var(pareto_data1)

esperance_theorique1 = alpha1 / beta1
variance_theorique1 = alpha1 / (beta1 ** 2)

print(f"Espérance empirique : {esperance_empirique1}, Espérance théorique : {esperance_theorique1}")
print(f"Variance empirique : {variance_empirique1}, Variance théorique : {variance_theorique1}")

# fonction de répartition
a0, b0 = 2, 12
delta = 0.1
Nx = 100
x_values = np.linspace(a0, b0, Nx)
cdf_values1 = pareto.cdf(x_values, alpha1, scale=beta1)
plt.plot(x_values, cdf_values1, label='Pareto(9, 2)')
plt.xlabel('Valeur de la variable aléatoire')
plt.ylabel('Probabilité cumulative')
plt.legend()
plt.show()

# fonction de densité
pdf_values1 = pareto.pdf(x_values, alpha1, scale=beta1)
plt.plot(x_values, pdf_values1, label='Pareto(9, 2)')
plt.xlabel('Valeur de la variable aléatoire')
plt.ylabel('Densité de probabilité')
plt.legend()
plt.show()

# Simuler la v.a. Pareto(α=2, β=1)
alpha2 = 2
beta2 = 1
pareto_data2 = pareto.rvs(alpha2, size=Nmc, scale=beta2)

esperance_empirique2 = np.mean(pareto_data2)
variance_empirique2 = np.var(pareto_data2)

esperance_theorique2 = alpha2 / beta2
variance_theorique2 = alpha2 / (beta2 ** 2)

print(f"Espérance empirique : {esperance_empirique2}, Espérance théorique : {esperance_theorique2}")
print(f"Variance empirique : {variance_empirique2}, Variance théorique : {variance_theorique2}")

# fonction de répartition
a0, b0 = 1, 11
cdf_values2 = pareto.cdf(x_values, alpha2, scale=beta2)
plt.plot(x_values, cdf_values2, label='Pareto(2, 1)')
plt.xlabel('Valeur de la variable aléatoire')
plt.ylabel('Probabilité cumulative')
plt.legend()
plt.show()

# fonction de densité
pdf_values2 = pareto.pdf(x_values, alpha2, scale=beta2)
plt.plot(x_values, pdf_values2, label='Pareto(2, 1)')
plt.xlabel('Valeur de la variable aléatoire')
plt.ylabel('Densité de probabilité')
plt.legend()
plt.show()

# Fonction de répartition inversée pour la variable aléatoire triangulaire
def inverse_cdf_triangle(u):
    if u < 0.5:
        return np.sqrt(2 * u)
    else:
        return 2 - np.sqrt(2 * (1 - u))

def generate_triangle_samples(size):
    u_values = np.random.rand(size)  # Générer des valeurs uniformes dans [0, 1]
    x_values = np.array([inverse_cdf_triangle(u) for u in u_values])
    return x_values

bins = np.linspace(0, 2, 50)

samples = generate_triangle_samples(10000)

# histogramme
plt.hist(samples, bins=bins, density=True, alpha=0.5, label='Échantillons')

# fonction de densité 
x_values = np.linspace(0, 2, 1000)
pdf_values = np.piecewise(x_values, [x_values < 1, x_values >= 1], [lambda x: x, lambda x: 2 - x])
plt.plot(x_values, pdf_values, 'r', label='Densité théorique')

plt.xlabel('Valeur de la variable aléatoire')
plt.ylabel('Densité de probabilité')
plt.legend()
plt.show()
Output

Comments

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