这周滨口老师特地从日本过来给我们进行为期一周的统计学授课。滨口老师在统计学方面是非常专业和博学的。在日本出版过很多书籍。本次我作为助教参加。
他在解释中值极限定理时,用了一个掷骰子的案例。

骰子的点数分布,1-6出现的概率相同(均匀分布)考虑投出n个骰子后出现的点数的平均值。n 越大,平均值的分布越接近正态分布 (上图是蒙特卡罗模拟的结果)
其中比较容易误解的是,n指的是抽样次数还是抽样个数。
网上有一张图,看起来比较好懂,但是实际上还是没有分清楚抽样个数n和抽样次数m对最终分布的影响。中值极限定理说明的重点到底是什么。

为了更直观得向学员展示抽样次数和抽样数之间的关系,我做了一个python演示程序。
import numpy as npimport matplotlib.pyplot as pltfrom scipy.stats import norm, uniform
指定总体分布def population_distribution(x): return uniform.pdf(x, loc=4, scale=12) # 均匀分布,范围在[8, 12]
参数设置n = 2 # 抽样量m = 1000 # 抽样次数
生成总体数据x = np.linspace(0, 20, 1000)population = population_distribution(x)
抽样和求平均值sample_means = []for i in range(m): sample = np.random.choice(x, size=n, p=population/np.sum(population)) sample_mean = np.mean(sample) sample_means.append(sample_mean)
绘制总体分布曲线plt.subplot(2, 1, 1)plt.plot(x, population, color=‘blue’)plt.xlabel(‘Value’)plt.ylabel(‘Probability Density’)plt.title(‘Population Distribution’)
绘制抽样平均值分布直方图plt.subplot(2, 1, 2)plt.hist(sample_means, bins=30, density=True, alpha=0.7, color=‘blue’, edgecolor=‘black’)plt.xlabel(‘Sample Mean’)plt.ylabel(‘Probability Density’)plt.title(‘Distribution of Sample Means’)
添加理论正态分布曲线mu = np.mean(sample_means) # 平均值sigma = np.std(sample_means) # 标准差x_normal = np.linspace(min(sample_means), max(sample_means), 100)y_normal = norm.pdf(x_normal, loc=mu, scale=sigma)plt.subplot(2, 1, 2)plt.plot(x_normal, y_normal, color=‘red’)plt.legend([‘Normal Distribution’, ‘Sample Means’])
调整图形间的间距plt.tight_layout()
显示图形plt.show()
程序定义了一个population_distribution()函数来指定总体分布,可以通过修改该函数来变更原始分布。在这里我使用了uniform.pdf来生成均匀分布的概率密度函数,并指定了范围为4到16。
然后,按照指定的分布生成总体数据,并依次抽样和求平均值。
最后,将绘制总体分布曲线和抽样平均值分布的直方图,并添加理论的正态分布曲线以用作比较。
下面是这个程序对中值极限定理的模拟:
情景1:
假设每次抽样数是n=2,抽样次数m=100000次。下面是抽样分布的结果。我们看到抽样分布的结果其实是一个三角形分布,并不是正态分布。

情景2:
抽样数量n=30,抽样次数m=1000呢?整体分布就变成正态分布了。只不过抽样次数不够多,图形看着有点犬牙交错。但确实接近正态分布了。

情景3:
抽样数量n=30,抽样次数m=10000。图形非常接近正态分布。

所以说,抽样数量的大小决定了它分布的形状,数量越多越接近正态。
而抽样次数决定了直方图有多密,多线性。数量越多越接近真正的正态分布。