为什么增加抛硬币的样本量并不能改善正态曲线逼近?

机器算法验证 正态分布 中心极限定理 正态近似
2022-02-05 05:29:00

我正在阅读Statistics (Freeman, Pisani, Purves) 一书,我试图重现一个例子,其中一枚硬币被抛 50 次,正面数数,重复 1,000 次。

  1. 首先,我将投掷次数(样本大小)保持在 1000 次,并增加了重复次数。重复次数越多,数据越符合正态曲线。

  2. 所以接下来,我尝试将重复次数固定为 1,000 并增加样本量。样本量越大,法线曲线似乎与数据的拟合越差。这似乎与随着样本量增加而更好地逼近正态曲线的书本示例相矛盾。

  3. 我想看看如果我增加样本量会发生什么,但重复次数更多,固定为 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. 增加样本量进行实验(固定为 10,000 次重复)

plot_hist(10000, 100)

在此处输入图像描述

plot_hist(10000, 1000)

在此处输入图像描述

plot_hist(10000, 10000)

在此处输入图像描述

plot_hist(10000, 100000)

在此处输入图像描述

4个回答

在第二种情况下,通过增加投掷次数,您可以增加单次试验可以落入的箱数。虽然实验 2 的第一个案例最多只能填充 100 个 bin,但最后一个示例有 10000 个 bin。您将实验的“分辨率”提高了 100 倍(即,您的第一个实验中的一个 bin 现在由您的第二个实验中的大约 100 表示)。当然,这意味着您预计需要多 100 倍的数据来填充您的垃圾箱。

您可以将单个硬币翻转视为独立的伯努利试验。一次试验将分别给您正面/反面或成功/失败。如果你重复这个说 100,000 次,如果硬币是公平的,平均正面数量将非常接近 0.5。

现在,如果您将试验次数增加到 1,000 并保持重复次数为 1,您将获得 1,000 次成功/失败的序列,并且不能说明平均观察到 500 次正面的概率,除非您增加重复次数每一个独立的试验。随着重复次数的增加,您将越来越接近正态分布。

对我来说,更容易将试验视为不是“投掷”或“样本大小”,而是将单独的硬币和重复视为每个硬币的翻转次数。然后直观地感觉到,通过增加硬币(或试验)的数量,同时保持重复(或翻转)的总数不变,数据对正态分布的逼近会变得更糟。

我认为这里的其他答案很棒,但想添加一个扩展到另一个统计工具的答案。

你从一个你认为应该接近正态曲线的基线开始,然后从那里开始看看你是否能更好地逼近正态曲线。试着换个方向,看看你能做些什么来做一个更糟糕的近似工作。尝试进行 10 次翻转和 1000 次重复的模拟。将此与您有 1000 次翻转和 10 次重复的模拟进行比较。应该清楚的是,前一种情况具有更好的近似性。

我想做的扩展是 ANOVA(方差分析)。你会看到很多新的数据科学家对这个问题的理解很差,并设计他们的研究,让他们有很多翻转,但很少重复。他们有很多数据,但它说的比他们想要的要少。就像测量一棵树上的每一片叶子,但只有两棵树。我们可以说很多关于这两棵树上的叶子,但不是一般的树上的叶子。你最好得到一个小得多的叶子样本,并得到很多树。

为了获得一些额外的直觉,请考虑以下几点:

想象一下,你只做一次重复。

在这种情况下,您可以随心所欲地增加投掷次数,但这不会类似于正态分布。这是有道理的,因为您的直方图只有一个峰值。


正态分布是概率分布(二项分布)的近似值。

您所做的并不是创建此发行版。但相反,您通过使用有限(和少量)的模拟来近似此分布。(你发现当你增加直方图中的 bin 数量时,这种近似会变得更糟)


所以你们需要大量的抛掷重复。

  • 当投掷次数较多时,二项分布(多次投掷硬币)可以近似为正态分布。
  • 当重复/模拟的数量高于这些实验的直方图时,近似于二项式分布的密度。