为什么中心极限定理在我的模拟中失效?

机器算法验证 中心极限定理
2022-01-22 19:08:28

假设我有以下数字:

4,3,5,6,5,3,4,2,5,4,3,6,5

我对其中的一些进行采样,比如说,其中 5 个,然后计算 5 个样本的总和。然后我一遍又一遍地重复以获得许多总和,并在直方图中绘制总和的值,由于中心极限定理,这将是高斯的。

但是当他们关注数字时,我只是用一些大数字替换了 4:

4,3,5,6,5,3,10000000,2,5,4,3,6,5

从这些样本中抽取 5 个样本的总和永远不会在直方图中变成高斯分布,而更像是一个拆分,变成两个高斯分布。这是为什么?

4个回答

让我们准确地回忆一下中心极限定理所说的内容。

如果是独立且同分布的随机变量,具有(共享)均值和标准差,则在分布中收敛到标准正态分布 (*)。X1,X2,,XkμσX1+X2++XkkσkN(0,1)

这通常以“非正式”形式使用:

如果和标准差的独立同分布随机变量,则 “分布”收敛到标准正态分布X1,X2,,XkμσX1+X2++XkN(kμ,kσ)

由于“极限”分布发生变化,因此没有好的方法可以使 CLT 的这种形式在数学上精确,但它在实践中很有用。

当我们有一个静态的数字列表时

4,3,5,6,5,3,10000000,2,5,4,3,6,5

我们通过从这个列表中随机抽取一个数字进行抽样,为了应用中心极限定理,我们需要确保我们的抽样方案满足这两个独立且同分布的条件。

  • 相同分布是没有问题的:列表中的每个数字都同样可能被选中。
  • 独立更微妙,取决于我们的抽样方案。如果我们在没有放回的情况下进行抽样,那么我们就违反了独立性。只有当我们进行放回抽样时,中心极限定理才适用。

因此,如果我们在您的方案中使用替换抽样,那么我们应该能够应用中心极限定理。同时,您是对的,如果我们的样本大小为 5,那么我们将看到非常不同的行为,具体取决于在我们的样本中是否选择了非常大的数字。

那么问题是什么?嗯,收敛到正态分布的速度很大程度上取决于我们从中抽样的人口的形状,特别是,如果我们的人口非常偏斜,我们预计需要很长时间才能收敛到正态分布。在我们的示例中就是这种情况,因此我们不应期望大小为 5 的样本足以显示正常结构。

三个正态分布

上面我对大小为 5、100 和 1000 的样本重复了您的实验(使用替换抽样)。您可以看到,对于非常大的样本,正常结构是出现的。

(*) 请注意,这里需要一些技术条件,例如有限均值和方差。在我们从列表示例中进行的抽样中,它们很容易被验证为真实。

通常,每个样本的大小应大于,以使 CLT 近似值良好。经验法则是大小为或更大的样本。但是,对于您的第一个示例的人口,是可以的。5305

pop <- c(4, 3, 5, 6, 5, 3, 4, 2, 5, 4, 3, 6, 5)
N <- 10^5
n <- 5
x <- matrix(sample(pop, size = N*n, replace = TRUE), nrow = N)
x_bar <- rowMeans(x)
hist(x_bar, freq = FALSE, col = "cyan")
f <- function(t) dnorm(t, mean = mean(pop), sd = sd(pop)/sqrt(n))
curve(f, add = TRUE, lwd = 2, col = "red")

在此处输入图像描述

在您的第二个示例中,由于人口分布的形状(一方面,它太偏斜了;请阅读下面GuyGlen_b的样本也无法为您提供一个很好的近似分布使用 CLT 的样本均值。30

pop <- c(4, 3, 5, 6, 5, 3, 10000000, 2, 5, 4, 3, 6, 5)
N <- 10^5
n <- 30
x <- matrix(sample(pop, size = N*n, replace = TRUE), nrow = N)
x_bar <- rowMeans(x)
hist(x_bar, freq = FALSE, col = "cyan")
f <- function(t) dnorm(t, mean = mean(pop), sd = sd(pop)/sqrt(n))
curve(f, add = TRUE, lwd = 2, col = "red")

在此处输入图像描述

但是,对于这第二个总体,例如大小为的样本是可以的。100

pop <- c(4, 3, 5, 6, 5, 3, 10000000, 2, 5, 4, 3, 6, 5)
N <- 10^5
n <- 100
x <- matrix(sample(pop, size = N*n, replace = TRUE), nrow = N)
x_bar <- rowMeans(x)
hist(x_bar, freq = FALSE, col = "cyan")
f <- function(t) dnorm(t, mean = mean(pop), sd = sd(pop)/sqrt(n))
curve(f, add = TRUE, lwd = 2, col = "red")

在此处输入图像描述

我只是想解释一下,使用复杂的累积量生成函数,为什么每个人都把这归咎于偏斜。

让我们把你抽样的随机变量写成,其中是平均值,是标准差,所以μ+σZμσZ有意思0和方差1. 的累积量生成函数Z12t2iγ16t3+o(t3). 这里γ1表示偏斜Z; 我们可以用偏斜来写κ3原始变量的μ+σZ,即。γ1=σ3κ3.

如果我们将总和除以n样品Z的分布n, 结果有 cgf

n(12(tn)2iγ16(tn)3)+o(t3)=12t2iγ16nt3+o(t3).
为了使正态近似在足够大时有效t为了使图表看起来正确,我们需要足够大n. 这种计算激发nγ12. 您考虑的两个样本具有非常不同的值γ1.

简短的回答是,您没有足够大的样本来应用中心极限定理。