什么是中心极限定理(Central Limit Theorem)
中心极限定理指的是给定一个任意分布的总体。我每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。 然后把这 m 组抽样分别求出平均值。 这些平均值的分布接近正态分布。
注:任务分布的含义是即使是从偏态总体中随机抽样,当n足够大时(如n>30),样本均值也近似正态分布。
如以下实验:
非正态分布总体样本均数抽样分布
图 (a) 是正偏峰分布原始数据对应的直方图,用计算机随机抽取样本量分别为5, 10, 30和50的样本各1000份,计算样本均数并绘制4个直方图。
当n足够大的时候,样本均值趋于正态分布。
案例:
现在我们要统计全国的人的体重,看看我国平均体重是多少。当然,我们把全国所有人的体重都调查一遍是不现实的。所以我们打算一共调查1000组,每组50个人。 然后,我们求出第一组的体重平均值、第二组的体重平均值,一直到最后一组的体重平均值。中心极限定理说:这些平均值是呈现正态分布的。并且,随着组数的增加,效果会越好。 最后,当我们再把1000组算出来的平均值加起来取个平均值,这个平均值会接近全国平均体重。
其中要注意的几点:
1、总体本身的分布不要求正态分布
上面的例子中,人的体重是正态分布的。但如果我们的例子是掷一个骰子(平均分布),最后每组的平均值也会组成一个正态分布。(神奇!)
2、样本每组要足够大,但也不需要太大
取样本的时候,一般认为,每组大于等于30个,即可让中心极限定理发挥作用。
用python来展示中心极限定理
第一步, 生成数据
假设我们现在观测一个人掷骰子。这个骰子是公平的,也就是说掷出1~6的概率都是相同的:1/6。他掷了一万次。我们用python来模拟投掷的结果:
import numpy as np
import pandas as pd
random_data=np.random.randint(1,7,10000)
random_data.mean() #均值
random_data.std() #标准差
生成出来的平均值:3.4927 (每次重新生成都会略有不同)
生成出来的标准差:1.7079
平均值接近3.5很好理解。 因为每次掷出来的结果是1、2、3、4、5、6。 每个结果的概率是1/6。所以加权平均值就是3.5。
第二步,画出来看看
我们把生成的数据用直方图画出来直观地感受一下:
from matplotlib import pyplot as plt
import collections
data_count2=collections.Counter(random_data)#分组聚合
plt.bar(data_count.keys(),data_count.values())
可以看到1~6分布都比较平均,不错。
第三步,抽一组抽样来试试
我们接下来随便先拿一组抽样,手动算一下。例如我们先从生成的数据中随机抽取10个数字:
sample=[]
for i in range(10):
sample.append(random_data[int(len(random_data)*(np.random.random()))])
np.mean(sample)
np.std(sample)
这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_mean=[]
samples_std=[]
for i in range(1000):
sample_=[]
for j in range(50):
sample_.append(random_data[int(len(random_data)*(np.random.random()))])
samples_mean.append(np.mean(sample_))
samples_std.append(np.std(sample_))
这一共1000个平均值大概是这样的:[3.44, 3.42, 3.22, 3.2, 2.94 … 4.08, 3.74] (我肯定不会把1000个数字都写完,又没有稿费可以骗)
然后,我们把这1000个数字用直方图画出来:
plt.hist(samples_mean)
完美地形成了正态分布。
结果打印如下:
平均值:3.48494
标准差:0.23506
实际应用
在实际生活当中,我们不能知道我们想要研究的对象的平均值,标准差之类的统计参数。中心极限定理在理论上保证了我们可以用只抽样一部分的方法,达到推测研究对象统计参数的目的。
在上文的例子中,掷骰子这一行为的理论平均值3.5是我们通过数学定理计算出来的。而我们在实际模拟中,计算出来的样本平均值的平均值(3.48494)确实已经和理论值非常接近了。