Вопросы, касающиеся моделирования Центральной предельной теоремы из книги Data Science из Scratch

Я читал книгу "Наука о науках" с нуля Джоэлем Грусом. Мой вопрос конкретно касается главы 6, где автор использовал биномиальную случайную величину для моделирования теоремы.

Результатом будет диаграмма с вероятностным распределением биномиальных проб и график приближения с использованием нормального распределения. Эти два сюжета должны быть очень похожи друг на друга. В книге показана диаграмма: Диаграмма автора

Кодами, которые он предоставил, являются:

import random
from matplotlib import pyplot as plt
from collections import Counter

def bernoulli_trial(p):
 return 1 if random.random() < p else 0

def binomial(n, p):
 return sum(bernoulli_trial(p) for _ in range(n))

def make_hist(p, n, num_points):
 data = [binomial(n, p) for _ in range(num_points)]
 histogram = Counter(data)
 plt.bar([x-0.4 for x in histogram.keys()],
 [v / num_points for v in histogram.values()],
 0.8,
 color='0.75')

 mu = p * n
 sigma = math.sqrt(n * p * (1-p))

 # use a line chart to show the normal approximation
 xs = range(min(data), max(data) + 1)
 ys = [normal_cdf(i+0.5, mu, sigma) - normal_cdf(i-0.5, mu, sigma) for i in xs]
 plt.plot(xs, ys)
 plt.title('Binomial Distribution vs. Normal Approximation')
 plt.show()

make_hist(0.75, 100, 10000)

Мой вопрос в этой строке: [normal_cdf (i +0.5, mu, sigma) - normal_cdf (i -0.5, mu, sigma) для я в xs], почему автор использовал +0. 5 и -0.5? Есть ли для этого конкретная причина?

Не уверен, что кто-то столкнулся с этим вопросом. Заранее спасибо!

1 ответ

В переменной xs вас есть список координат X с шагом 1, например [5,6,7,8,9,10]. В переменной ys вам необходимо получить соответствующие координаты Y и normal_cdf(i+0.5, mu, sigma) - normal_cdf(i-0.5, mu, sigma) в вашем коде является интегралом от i-0.5 до я + 0.5, то есть с ширина (i + 0,5) - (i-0,5) = 1, тот же шаг.

Более понятный код будет выглядеть так:

step = 1.0
xs = range(min(data), max(data) + 1, step)
ys = [normal_cdf(i + step / 2, mu, sigma) - normal_cdf(i - step / 2, mu, sigma) for i in xs]

licensed under cc by-sa 3.0 with attribution.