中心极限定理是统计学中比较重要的一个定理。 本文将通过实际模拟数据的形式,形象地展示中心极限定理是什么,是如何发挥作用的。
什么是中心极限定理(Central Limit Theorem)
中心极限定理指的是给定一个任意分布的总体。我每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。 然后把这 m 组抽样分别求出平均值。 这些平均值的分布接近正态分布。
我们先举个栗子🌰
现在我们要统计全国的人的体重,看看我国平均体重是多少。当然,我们把全国所有人的体重都调查一遍是不现实的。所以我们打算一共调查1000组,每组50个人。 然后,我们求出第一组的体重平均值、第二组的体重平均值,一直到最后一组的体重平均值。中心极限定理说:这些平均值是呈现正态分布的。并且,随着组数的增加,效果会越好。 最后,当我们再把1000组算出来的平均值加起来取个平均值,这个平均值会接近全国平均体重。
其中要注意的几点:
总体本身的分布不要求正态分布
上面的例子中,人的体重是正态分布的。但如果我们的例子是掷一个骰子(平均分布),最后每组的平均值也会组成一个正态分布。(神奇!)样本每组要足够大,但也不需要太大
取样本的时候,一般认为,每组大于等于30个,即可让中心极限定理发挥作用。
话不多说,我们现在来一步步看到中心极限定理是如何起作用的。
用实际数据来展示中心极限定理
注:我们使用python语言以及iPython Notebook来生成和展现数据。不懂的童鞋可以略过代码
第一步, 生成数据
假设我们现在观测一个人掷骰子。这个骰子是公平的,也就是说掷出1~6的概率都是相同的:1/6。他掷了一万次。我们用python来模拟投掷的结果:
import numpy as np
random_data = np.random.randint(1, 7, 10000)
print random_data.mean() # 打印平均值
print random_data.std() # 打印标准差
生成出来的平均值:3.4927 (每次重新生成都会略有不同)
生成出来的标准差:1.7079
平均值接近3.5很好理解。 因为每次掷出来的结果是1、2、3、4、5、6。 每个结果的概率是1/6。所以加权平均值就是3.5。
第二步,画出来看看
我们把生成的数据用直方图画出来直观地感受一下:
可以看到1~6分布都比较平均,不错。
第三步,抽一组抽样来试试
我们接下来随便先拿一组抽样,手动算一下。例如我们先从生成的数据中随机抽取10个数字:
sample1 = []
for i in range(0, 10):
sample1.append(random_data[int(np.random.random() * len(random_data))])
print sample1 # 打印出来
这10个数字的结果是: [3, 4, 3, 6, 1, 6, 6, 3, 4, 4]
平均值:4.0
标准差:1.54
可以看到,我们只抽10个的时候,样本的平均值(4.0)会距离总体的平均值(3.5)有所偏差。
有时候我们运气不好,抽出来的数字可能偏差很大,比如抽出来10个数字都是6。那平均值就是6了。 为什么会出现都是6的情况呢?因为我比较6...哦不是,因为这就是随机的魅力呀!
不过不要担心,接下去就是见证奇迹的时刻。
第四步,见证奇迹的时刻
我们让中心极限定理发挥作用。现在我们抽取1000组,每组50个。
我们把每组的平均值都算出来。
samples = []
samples_mean = []
samples_std = []
for i in range(0, 1000):
sample = []
for j in range(0, 50):
sample.append(random_data[int(np.random.random() * len(random_data))])
sample_np = np.array(sample)
samples_mean.append(sample_np.mean())
samples_std.append(sample_np.std())
samples.append(sample_np)
samples_mean_np = np.array(samples_mean)
samples_std_np = np.array(samples_std)
print samples_mean_np
这一共1000个平均值大概是这样的:[3.44, 3.42, 3.22, 3.2, 2.94 ... 4.08, 3.74] (我肯定不会把1000个数字都写完,又没有稿费可以骗)
然后,我们把这1000个数字用直方图画出来:
TADA! 完美地形成了正态分布。
结果打印如下:
平均值:3.48494
标准差:0.23506
实际应用
在实际生活当中,我们不能知道我们想要研究的对象的平均值,标准差之类的统计参数。中心极限定理在理论上保证了我们可以用只抽样一部分的方法,达到推测研究对象统计参数的目的。
在上文的例子中,掷骰子这一行为的理论平均值3.5是我们通过数学定理计算出来的。而我们在实际模拟中,计算出来的样本平均值的平均值(3.48494)确实已经和理论值非常接近了。
本文最先发布于朱曦炽个人博客:中心极限定理通俗介绍