Я читаю книгу Статистика (Freeman, Pisani, Purves) и пытаюсь воспроизвести пример, когда монету подбрасывают, скажем, 50 раз, подсчитывают количество голов, и это повторяется, скажем, 1000 раз.
Во-первых, я сохранил количество бросков (размер выборки) на 1000 и увеличил количество повторений. Чем больше повторений, тем лучше данные соответствуют нормальной кривой.
Итак, затем я попытался сохранить количество повторений фиксированным на 1000 и увеличил размер выборки. Чем больше размер выборки, тем хуже, казалось, что нормальная кривая соответствует данным. Это, кажется, противоречит книжному примеру, который лучше приближается к нормальной кривой при увеличении размера выборки.
Я хотел посмотреть, что произойдет, если я увеличу размер выборки, но с большим количеством повторений, которые были зафиксированы на 10000. Это, кажется, также противоречит книге.
Есть идеи, что я делаю не так?
Код и графики ниже.
%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)