In [69]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as sts
%matplotlib inline

Возьмем для исследования распределение Гилбрата. Сгенерируем выборку объема 1000.


In [70]:
gilbrat_rv = sts.gilbrat()
sample = gilbrat_rv.rvs(1000)

Построим гистограмму выборки и график теоретической плотности распределения случайной величины


In [75]:
plt.hist(sample, bins = 15, normed=True)
plt.ylabel('$f(x)$, number of samples')
plt.xlabel('$x$')

x = np.linspace(0,15,1000)
pdf = gilbrat_rv.pdf(x)
plt.plot(x, pdf, label='theoretical PDF', color='red')
plt.legend(loc='upper right')


Out[75]:
<matplotlib.legend.Legend at 0xa75e38cc>

Из справочных источников следует, что для распределения Гилбрата среднее равно $\sqrt{e}$, а дисперсия равна $e*(e-1)$. Таким образом, согласно центральной предельной теореме распределение выборочных средних описывается нормальным распределением с параметрами $\mu$=$\sqrt{e}$ и $\sigma^2$=$e*(e-1)/n$, где n - размер выборки, по которой считаются выборочные средние.

Построим гистограмму распределения выборочного среднего для выборки размера 5 и соответствующий график функции плотности вероятности.


In [72]:
n = 5
sample_means = []
for i in xrange(1000):
    smpl = gilbrat_rv.rvs(n)
    sample_means.append(smpl.mean())
plt.hist(sample_means, normed=True)  
plt.ylabel('$f(x)$, number of sample means')
plt.xlabel('$x$')

norm_rv = sts.norm(loc=np.sqrt(np.e), scale=np.sqrt(np.e*(np.e-1)/n))
pdf = norm_rv.pdf(x)
plt.plot(x, pdf, color='red', linewidth=2)


Out[72]:
[<matplotlib.lines.Line2D at 0xa790382c>]

Построим гистограмму распределения выборочного среднего для выборки размера 10 и соответствующий график функции плотности вероятности.


In [73]:
n = 10
sample_means = []
for i in xrange(1000):
    smpl = gilbrat_rv.rvs(n)
    sample_means.append(smpl.mean())
plt.hist(sample_means, normed=True)
plt.ylabel('$f(x)$, number of sample means')
plt.xlabel('$x$')

norm_rv = sts.norm(loc=np.sqrt(np.e), scale=np.sqrt(np.e*(np.e-1)/n))
pdf = norm_rv.pdf(x)
plt.plot(x, pdf, color='red', linewidth=2)


Out[73]:
[<matplotlib.lines.Line2D at 0xa792242c>]

Построим гистограмму распределения выборочного среднего для выборки размера 50 и соответствующий график функции плотности вероятности.


In [74]:
n = 50
sample_means = []
for i in xrange(1000):
    smpl = gilbrat_rv.rvs(n)
    sample_means.append(smpl.mean())
plt.hist(sample_means, normed=True)
plt.ylabel('$f(x)$, number of sample means')
plt.xlabel('$x$')

norm_rv = sts.norm(loc=np.sqrt(np.e), scale=np.sqrt(np.e*(np.e-1)/n))
pdf = norm_rv.pdf(x)
plt.plot(x, pdf, color='red', linewidth=2)


Out[74]:
[<matplotlib.lines.Line2D at 0xa79223ec>]

Из построенных гистограмм видно, что с увеличением размера выборки гистограммы становятся более гладкими, а точность аппроксимации распределения выборочных средних нормальным распределением увеличивается. Таким образом, продемонстрировано графическое подтверждение справедливости центральной предельной теоремы.


In [ ]: