中心极限定理验证模拟:满足样本量要求为何样本均值不服从正态分布
问题背景
晚上好。
我正在学习中心极限定理(Central Limit Theorem),作为练习,我运行了模拟实验尝试计算公平骰子的均值(这是一个入门级示例问题)。
我一共采集了4000份样本,每份样本对应掷骰子50次(代码附在文末)。我计算了这4000份样本各自的均值,随后使用matplotlib绘制了这4000个样本均值的直方图,分箱大小设置为0.03。
实验结果如下:
问题咨询
本次实验已经满足CLT的样本量要求(样本量≥30),为何得到的样本均值不服从正态分布?
具体来看,直方图看起来就像两个正态分布叠加在一起;更奇怪的是,“外侧”的分布看起来是“离散”的,空白间隔出现的位置规律固定,这是什么原因导致的?
实验结果看起来存在系统性偏差,恳请各位帮忙解答,非常感谢。
补充代码
以下是我用来生成4000个样本均值的代码:
""" Take multiple samples of dice rolls. For each sample, compute the sample mean. With the sample means, plot a histogram. By the Central Limit Theorem, the sample means should be normally distributed. """ sample_means = [] num_samples = 4000 for i in range(num_samples): # Large enough for CLT to hold num_rolls = 50 sample = [] for j in range(num_rolls): observation = random.randint(1, 6) sample.append(observation) sample_mean = sum(sample) / len(sample) sample_means.append(sample_mean)
注:运行上述代码前需要先导入
random库,否则会触发名称错误。
问题解答
你观察到的异常是可视化参数设置不当导致的伪影,你的实验本身没有问题,完全符合中心极限定理的结论,不存在系统性偏差,具体原因如下:
- 首先,你的样本均值本身只能取离散值:单次掷骰子的结果是1到6的整数,50次掷骰子的总和也必然是整数,因此样本均值 = 总和/50,所有可能的取值只能是间隔为0.02的离散点(比如3.00、3.02、3.04、3.06,以此类推),不存在其他取值的可能。
- 你设置的分箱宽度为0.03,和0.02的离散间隔完全不对齐:这就会出现有的分箱刚好覆盖2个离散取值点、有的分箱只覆盖1个、有的分箱刚好落在两个离散值的空隙里完全没有数据的情况,最终呈现出规律的空白间隔、高低柱交替的效果,看起来就像两个正态分布叠加在一起。
你只需要调整直方图的分箱宽度为0.02的整数倍(比如设置分箱宽度为0.02,或者直接设置为更宽的0.1),就能看到完全符合预期的正态分布直方图。比如你可以把matplotlib绘制直方图的代码改为以下形式即可:
import matplotlib.pyplot as plt import numpy as np plt.hist(sample_means, bins=np.arange(2.5, 4.5, 0.02)) plt.show()
内容的提问来源于stack exchange,提问作者nigel
相关产品推荐
相关产品推荐

