概率論整理(三)

概率論整理(二)

大數定律背後的理論支撐

一組獨立同分布的隨機變量:\(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次得到的均值數據分佈。從上圖我們可以發現,隨着每次選取的樣本數據增多,樣本均值分佈的圖像越來越向數學期望集中,同時方差不斷的減小(分佈越來越窄,越來越高)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章