大数定律

机器算法验证 r 大数定律
2022-03-27 14:14:18

假设 X 是一组 (1,2,3,...,m) 的均匀离散分布。我如何为此调查大数定律?我想通过可能将 m 设置为 10 并使用 R 将分布样本从 1 到 10 来做到这一点。通过多次运行程序,我将有多个 X 分布为(1:10)。假设我运行该程序 20 次,我将有 20 个从(1 到 10)的样本分布。我可以计算每个分布的平均值。然后我会收集手段并找到手段的平均值。例如,对于前 5 个分布,我将有 5 个均值,我将它们相加除以 5。我对 10、15 和 20 做同样的事情。随着我这样做的次数增加,我会接近人口(1+10)/2 = 5.5 我的方法是正确的还是有更好的方法来做到这一点?

3个回答

大数定律与样本平均值有关,随着样本量的增加,样本平均值会向期望值收敛。

因此,在您的情况下,您将从分布中采样并取平均值。然后当你重复采样时,每次增加样本量,样本的平均值都会接近预期值。

我经常用掷一个公平的 6 面骰子的简单例子向学生解释这一点。期望值显然是 3.5。首先,请注意,我们永远无法一次获得 3.5。通过 1 次滚动,我们将以 1/6 的概率获得 6 种可能性中的任何一种。随着我们增加样本量,样本均值将接近 3.5。

我们可以在 R 中显示如下:

我们将从整数 1 到 6 的均匀离散分布中采样,从样本量 1 开始,将样本量增加到 1000。每次我们将计算样本均值,最后我们将绘制均值与样本量的关系图:

set.seed(15)
N <- 1000
m <- 6
vec.mean <- numeric(N)

for (i in 1:N) {
  vec.mean[i] <- mean(sample(1:m, i, replace = TRUE))
}
plot(vec.mean)

在此处输入图像描述

假设通过“分布样本”您的意思是从 1 到 10 之间的相同均匀分布中抽取 m 个样本,那么是的,您的方法是正确的。随着 m 的增加,样本均值在真实(总体)均值 5.5(概率收敛 = LLN)附近“跳跃”的幅度越来越小。

但是,您几乎不会注意到 m = 20 的差异。我建议逐步将 m 从 1 取到 1000 并绘制如下所示的平均值:

# Sim LLN
m     = 500 #no of iterations
means = 0   #vector to store means
for(i in 1:m){
  means[i] = mean(runif(i,1,10)) #drawing i samples from ~unif(1,10)
}
plot(means,type='l')    #plot sample means
abline(h=5.5,col='red') #plot population mean

请注意,要使(弱)LLN 起作用,所有随机变量都需要同分布且独立(在本例中它们是)。

准确地说,中心极限定理(通常称为“大数定律”)说,给定具有有限标准偏差的基础分布(均匀分布就是这样),对于分布的平均值和目标概率附近的任何范围,大于 1 时,存在一些样本量,其中相同均值在该范围内的概率大于目标概率。

因此,例如,如果您希望样本均值在分布均值的 0.1 范围内的概率超过 99%,则有一些样本量可以满足这一要求。

CLT 是一个关于概率的定理,所以我们不能确定样本意味着什么。样本均值会越来越接近分布均值并不完全正确。样本均值会跳来跳去,但它们可能会越来越少地跳来跳去。

例如,对于前 5 个分布,我将有 5 个均值,我将它们加起来除以 5。

这比它必须要复杂一些。均值的期望值只是基础分布的均值。如果您有 20 个样本,每个样本包含 10 个观测值,则均值的平均值将与仅将这 200 个观测值的平均值加在一起得到的平均值相同。