<jupyter_start><jupyter_text>Задание: Центральная предельная теорема своими руками<jupyter_code>#Выберите ваше любимое непрерывное распределение (чем меньше оно будет похоже на нормальное, 
# тем интереснее; попробуйте выбрать какое-нибудь распределение из тех, что мы не обсуждали в курсе). 
# Сгенерируйте из него выборку объёма 1000, постройте гистограмму выборки и нарисуйте поверх 
# неё теоретическую плотность распределения вашей случайной величины (чтобы величины были в 
# одном масштабе, не забудьте выставить у гистограммы значение параметра normed=true).
import numpy as np
#генерируем распределение лапласа
loc, scale = 0., 1.
s = np.random.laplace(loc, scale, 1000)
# строим гистаграмму по выборке объема 1000 и теорит. поверх нее
%matplotlib inline
import matplotlib.pyplot as plt
count, bins, ignored = plt.hist(s, 30, normed=True, label='Laplase actual')
x = np.arange(-10., 10., .01)
pdf = np.exp(-abs(x-loc)/scale)/(2.*scale)
plt.plot(x, pdf, label='Laplase theor')
plt.legend()
plt.ylabel('$f(x)$')
plt.xlabel('$x$')
plt.show()
# Ваша задача — оценить распределение выборочного среднего вашей случайной величины при разных объёмах выборок. 
# Для этого при трёх и более значениях n (например, 5, 10, 50) сгенерируйте 1000 выборок объёма n и постройте 
# гистограммы распределений их выборочных средних. Используя информацию о среднем и дисперсии исходного распределения 
# (её можно без труда найти в википедии), посчитайте значения параметров нормальных распределений, которыми, 
# согласно центральной предельной теореме, приближается распределение выборочных средних. Обратите внимание:
#     для подсчёта значений этих параметров нужно использовать именно теоретические среднее и дисперсию вашей 
#     случайной величины, а не их выборочные оценки. Поверх каждой гистограммы нарисуйте плотность соответствующего 
#     нормального распределения (будьте внимательны с параметрами функции, она принимает на вход не дисперсию, 
#                                а стандартное отклонение).
print s.mean()
# создаем выборку размера sub_sample_size 1000 раз и записываем её в массив mean по которому далее построим графики 
mean = []
sub_sample_size = 50
for i in range(1000):
    s = np.random.laplace(loc, scale, sub_sample_size)
    mean.append(s.mean())

# mu VAR сосчитано на основе теории с вики
import math
from scipy import stats
mu = 0
VAR = 2
SIGMA = math.sqrt(VAR)
SE = SIGMA/math.sqrt(sub_sample_size)
print mu, VAR, SIGMA, 2*SE
# строим искомые графики
count, bins, ignored = plt.hist(mean, 50, normed=True, label='actual laplace')
x = np.arange(-1, 1, .0001)
pdf = np.exp(-abs(x-loc)/scale)/(2.*scale)
plt.plot(x, pdf,label='Laplase theor')

norm_rv = stats.norm(mu,SE)
plt.plot(x,norm_rv.pdf(x),label='Norm theor')
plt.legend()
plt.ylabel('$f(x)$')
plt.xlabel('$x$')
plt.show()
import math 
mu = 0
VAR = 2
SIGMA = math.sqrt(VAR)
SE = SIGMA/math.sqrt(sub_sample_size)
print mu, VAR, SIGMA, 2*SE
mean = []
sub_sample_size = 5
for i in range(1000):
    s = np.random.laplace(loc, scale, sub_sample_size)
    mean.append(s.mean())
    
mu = 0
VAR = 2
SIGMA = math.sqrt(VAR)
SE = SIGMA/math.sqrt(sub_sample_size)
print mu, VAR, SIGMA, 2*SE
count, bins, ignored = plt.hist(mean, 50, normed=True, label='actual laplace')
x = np.arange(-3, 3, .0001)
pdf = np.exp(-abs(x-loc)/scale)/(2.*scale)
plt.plot(x, pdf,label='Laplase theor')

norm_rv = stats.norm(mu,SE)
plt.plot(x,norm_rv.pdf(x),label='Norm theor')
plt.legend()
plt.ylabel('$f(x)$')
plt.xlabel('$x$')
plt.show()
mean = []
sub_sample_size = 10
for i in range(1000):
    s = np.random.laplace(loc, scale, sub_sample_size)
    mean.append(s.mean())
    
mu = 0
VAR = 2
SIGMA = math.sqrt(VAR)
SE = SIGMA/math.sqrt(sub_sample_size)
print mu, VAR, SIGMA, 2*SE
count, bins, ignored = plt.hist(mean, 50, normed=True, label='actual laplace')
x = np.arange(-1.6,1.6, .0001)
pdf = np.exp(-abs(x-loc)/scale)/(2.*scale)
plt.plot(x, pdf,label='Laplase theor')

norm_rv = stats.norm(mu,SE)
plt.plot(x,norm_rv.pdf(x),label='Norm theor')
plt.legend()
plt.ylabel('$f(x)$')
plt.xlabel('$x$')
plt.show()
mean = []
sub_sample_size = 150
for i in range(1000):
    s = np.random.laplace(loc, scale, sub_sample_size)
    mean.append(s.mean())
    
mu = 0
VAR = 2
SIGMA = math.sqrt(VAR)
SE = SIGMA/math.sqrt(sub_sample_size)
print mu, VAR, SIGMA, 2*SE
count, bins, ignored = plt.hist(mean, 50, normed=True, label='actual laplace')
x = np.arange(-0.5,0.5, .0001)
pdf = np.exp(-abs(x-loc)/scale)/(2.*scale)
plt.plot(x, pdf,label='Laplase theor')

norm_rv = stats.norm(mu,SE)
plt.plot(x,norm_rv.pdf(x),label='Norm theor')
plt.legend()
plt.ylabel('$f(x)$')
plt.xlabel('$x$')
plt.show()
# чем больше  размер генерируемой выборки, тем точнее получаем наша нормальная апрокмимация<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13358538122243227, 'fraction_numerical': 0.024154589371980676, 'mean_word_length': 4.8717632552404435, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '242320', 'license': 'Apache-2.0', 'n_tokens_mistral': 2094, 'n_tokens_neox': 2157, 'n_words': 488, 'path': 'statistics/Графики, распределения, центральная пределельная теорема.ipynb', 'repo_name': 'Diyago/ML-DL-scripts', 'size': '4761'}