September 23, 2022
Нормальная аппроксимация биномиального распределения¶
Математический факт, что биномиальное распределение хорошо аппроксимируется нормальным распределением при больших n. Это удобно использовать для расчетов (попробуйте посчитать по формуле). Рассмотрим утверждение на примерах.
Сначала зададим количество испытаний n=10 и сравним распределения:
import pandas as pd import numpy as np from scipy.stats import norm, binom import matplotlib.pyplot as plt import seaborn as sns n = 10 p = 0.3 bin_distr = binom(n=n,p=p) plt.figure(figsize=(15,5)) sns.barplot(x=list(range(n+1)), y=[bin_distr.pmf(k) for k in range(n+1)])
Посчитаем математическое ожидание и стандартное отклонение распределения и зададим нормальный "аналог":
bin_distr.expect(), bin_distr.std()
norm_distr = norm(loc=bin_distr.expect(), scale=bin_distr.std()) plt.figure(figsize=(15,5)) sns.lineplot(x=np.arange(0,n,1) , y = norm_distr.pdf(np.arange(0,n,1)))
Видим, что распределения похожи. А теперь для наглядности сравним распределения для разных n:
n_l = [10,30,50] fig, axes = plt.subplots(len(n_l), 1, figsize=(15,6)) for i, n in enumerate(n_l): binom_distr = binom(n,p) norm_distr = norm(binom_distr.expect(), binom_distr.std()) x = np.arange(n+1) sns.barplot(x = x, y = [binom_distr.pmf(it) for it in x], ax = axes[i]) sns.lineplot(x = x, y = [norm_distr.pdf(it) for it in x], ax = axes[i])