概率论整理(三)

概率论整理(二)

大数定律背后的理论支撑

一组独立同分布的随机变量:\(X_1,X_2,X_3,...,X_n\),期望μ,方差\(σ^2\),则这组随机变量的均值为

\(M_n={X_1+X_2+X_3+...+X_n\over n}\)

  • 用样本均值估计总体均值,为什么可行?

\(M_n\)的期望E[\(M_n\)]=E[\(X_1+X_2+X_3+...+X_n\over n\)]

根据数学期望的齐次性和可加性,有

 E[\(M_n\)]=E[\(X_1+X_2+X_3+...+X_n\over n\)]=\({1\over n}(E[X_1]+E[X_2]+...+E[X_n])\)

由于是独立同分布,则上式等于

\(nμ\over n\)=μ=E[\(X_i\)]

结果我们可以知道,一组独立同分布样本均值的期望就等于随机变量的期望

  • 样本数越多,估计越准

样本均值的方差:var[\(M_n\)]

 var[\(M_n\)]=var[\(X_1+X_2+X_3+...+X_n\over n\)]

根据方差的性质,以及是独立分布,有

 var[\(M_n\)]=var[\(X_1+X_2+X_3+...+X_n\over n\)]=\({1\over n^2}(var[X_1]+var[X_2]+...var[X_n])\)=\(nσ^2\over n^2\)=\(σ^2\over n\)

通过推导,我们知道n个随机变量的方差是单一随机变量的\(1\over n\),样本均值的方差变小了。随着样本量的增大,样本均值的分布越接近于总体均值。当n趋近于无穷大的时候,也就是说当样本量非常非常大的时候,通过抽样得到的抽样样本去计算所得到的平均值就等于总体均值。

验证大数定律

  • 样本均值与随机变量的期望

以15000个服从参数为(10,0.4)的二项分布随机变量为总体,观察随着样本数量增多,样本均值越来越接近分布期望。

这里需要补充一下二项分布的数学期望E[X]=np,方差V[X]=np(1-p)。

import numpy as np
from scipy.stats import binom
import matplotlib.pyplot as plt

if __name__ == '__main__':

    # 一组实验是进行10次
    n = 10
    # 单次命中概率为0.4
    p = 0.4
    # 总共进行15000次
    sample_size = 15000
    # 期望值
    expected_value = n * p
    N_samples = range(1, sample_size, 10)
    # 进行3组实验
    for k in range(3):
        # 创建一个二项分布对象
        binom_rv = binom(n=n, p=p)
        # 每组实验进行15000次采样,生成15000个二项分布的随机变量
        X = binom_rv.rvs(size=sample_size)
        # 得到前1、11、21...14991个随机变量的均值
        sample_average = [X[:i].mean() for i in N_samples]
        # 画出每组实验的横纵坐标,横坐标为二项分布间隔10次的采样次数,纵坐标为二项分布累计满10次的均值
        plt.plot(N_samples, sample_average, label='average of sample {}'.format(k))
    # 画出数学期望的横纵坐标,横坐标为二项分布间隔10次的采样次数,纵坐标为数学期望
    plt.plot(N_samples, expected_value * np.ones_like(sample_average), ls='--',
             label='true expected value:n*p={}'.format(n * p), c='k')
    plt.legend()
    plt.grid(ls='--')
    plt.show()

运行结果

从上图可以看到,3次数据采样中,无论是哪一次,它们的累计均值都随着采样次数的增大而逼近二项分布的数学期望。

  • 样本均值的方差与分布

100万个服从均值为0,标准差为20的正态分布随机变量数据,每次从正态分布总体中随机抽取5个样本,计算样本均值,重复1万次观察样本均值的分布;再每次从正态分布总体中随机抽取50个样本,计算样本均值,重复1万次观察样本均值的分布。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

if __name__ == '__main__':

    # 创建一个正态分布的随机变量,并对该随机变量采集1000000个数据
    norm_rvs = norm(loc=0, scale=20).rvs(size=1000000)
    # 对这1000000个正态分布的数据画出直方图
    plt.hist(norm_rvs, density=True, alpha=0.3, color='b', bins=100, label='original')

    mean_array = []
    # 进行10000次抽取
    for i in range(10000):
        # 每次从该1000000个正态分布的数据中随机抽取不重复的5个数据
        sample = np.random.choice(norm_rvs, size=5, replace=False)
        # 获取这5个随机数据的均值
        mean_array.append(np.mean(sample))
    # 对这10000次抽取的均值画出直方图
    plt.hist(mean_array, density=True, alpha=0.3, color='r', bins=100, label='sample size=5')

    mean_array = []
    # 进行10000次抽取
    for i in range(10000):
        # 每次从该1000000个正态分布的数据中随机抽取不重复的50个数据
        sample = np.random.choice(norm_rvs, size=50, replace=False)
        # 获取这50个随机数据的均值
        mean_array.append(np.mean(sample))
    # 对这10000次抽取的均值画出直方图
    plt.hist(mean_array, density=True, alpha=0.3, color='g', bins=100, label='sample size=50')

    plt.gca().axes.set_xlim(-60, 60)
    plt.legend(loc='best')
    plt.grid(ls='--')
    plt.show()

运行结果(运行时间较长)

上图中蓝色的部分是原始的正态分布数据;红色的部分是每次从原始数据中抽取5个数据,连续抽取10000次得到的均值数据分布;绿色的部分是每次从原始数据中抽取50个数据,连续抽取10000次得到的均值数据分布。从上图我们可以发现,随着每次选取的样本数据增多,样本均值分布的图像越来越向数学期望集中,同时方差不断的减小(分布越来越窄,越来越高)。

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/3768341/blog/10084367