Я читаю книгу " Статистика" (Фріман, Пісані, Первес) і намагаюся відтворити приклад, коли монета кидається, скажімо, 50 разів, кількість підрахованих голів, і це повторюється, скажімо, 1000 разів.
По-перше, я тримав кількість кидків (розмір зразка) на рівні 1000 і збільшував повтори. Чим більше повторень, тим краще дані відповідають нормальній кривій.
Тож далі я спробував утримати кількість повторень фіксованою на 1000 і збільшив розмір вибірки. Чим більший розмір вибірки, тим гіршим було те, що нормально вигнута нормально відповідала даним. Це, здається, суперечить прикладу книги, який краще наближає нормальну криву зі збільшенням розміру вибірки.
Я хотів побачити, що буде, якщо збільшити розмір вибірки, але з більшою кількістю повторень, які були зафіксовані на 10 000. Це, здається, також суперечить книзі.
Будь-які ідеї, що я роблю неправильно?
Код та графіки нижче.
%matplotlib inline
def plot_hist(num_repetitions, num_tosses):
tosses = np.random.randint(0, 2, size=[num_repetitions, num_tosses])
sums = np.apply_along_axis(lambda a: np.sum(a == 1), 1, tosses)
xmin, xmax = min(sums), max(sums)
lnspc = np.linspace(xmin, xmax, len(sums))
m, s = stats.norm.fit(sums) # get mean and standard deviation
pdf_g = stats.norm.pdf(lnspc, m, s) # now get theoretical values in our interval
bins = np.arange(xmin, xmax) - 0.5
step = int((xmax - xmin)/5)
fig, ax = plt.subplots()
_ = ax.hist(sums, bins, edgecolor='black', linewidth=1.2, density=True)
_ = ax.plot(lnspc, pdf_g, label="Norm", color='red')
_ = ax.set_xticks(bins[::step] + 0.5)
_ = ax.set_title('{:,} tosses - {:,} repetitions'.format(num_tosses, num_repetitions))
1. Експериментуйте зі збільшенням кількості повторень (фіксований розмір вибірки 1000)
plot_hist(1000, 1000)
plot_hist(10000, 1000)
plot_hist(100000, 1000)
2. Експериментуйте зі збільшенням розміру вибірки (фіксовано на 1000 повторень)
plot_hist(1000, 100)
plot_hist(1000, 1000)
plot_hist(1000, 10000)
3. Експериментуйте зі збільшенням обсягу вибірки (фіксовано на 10000 повторень)
plot_hist(10000, 100)
plot_hist(10000, 1000)
plot_hist(10000, 10000)
plot_hist(10000, 100000)