大數法則與中央極限定理

弱大數法則

定義

隨機樣本 \(X_1, X_2, ..., X_n \overset{i.i.d.}{\sim} F_X(x)\) ,滿足以下式子

\[ \bar{X} \overset{P}{\rightarrow} \mu \hspace{1em} as \hspace{1em} n \rightarrow \infty \]

表示樣本平均數機率收斂於母體期望值,其中 \(\bar{X}\) 為樣本平均數, \(\mu\) 為母體期望值, \(F_X(x)\) 為任意分配。也可以表示成

\[ \lim_{n \rightarrow \infty} \mathbb{P}(|\bar{X} - \mu| > \epsilon) = 0 \]

上面的式子表示:當樣本數 \(n\) 趨近於無窮時,其樣本平均數 \(\bar{X}\) 跟母體期望值 \(\mu\) 的差距要大於一個很小的數 \(\epsilon\) 的機率為0,代表樣本平均數幾乎等於母體平均數

  • 弱大數法則在講的是樣本平均數會機率收斂於母體期望值,所以母體期望值不存在的分配就不適用,如:柯西分配。

以指數分配為例,隨機樣本 \(X_1, X_2, ..., X_n \overset{i.i.d.}{\sim} \mathcal{Exp}(\lambda)\) ,其母體期望值 \(\mu = \frac{1}{\lambda}\)

我們會針對不同的 \(n\) ,各模擬1000次的樣本平均數 \(\bar{X}\) ,並得到樣本平均數的抽樣分配

import numpy as np
import scipy.stats as stats
from plotly.subplots import make_subplots
import plotly.graph_objects as go

n_sample = 1000
lmbd = 5
ns = [[3, 10], [100, 10000]]

fig = make_subplots(
    rows=2,
    cols=2,
    shared_xaxes=True
)
mean = stats.expon.mean(scale=1 / lmbd)

for i, row in enumerate(ns, start=1):
    for j, col in enumerate(row, start=1):
        sample_means = []

        for _ in range(n_sample):
            sample_means.append(
                np.mean(stats.expon(scale=1 / lmbd).rvs(size=col)))

        hist = go.Histogram(x=sample_means, name=f'$n = {col}$')
        fig.add_trace(hist, row=i, col=j)
        fig.add_vline(x=mean, row=i, col=j)

fig.update_layout(title={'text': '指數分配的樣本平均數抽樣分配'})
fig

中央極限定理

定義

隨機樣本 \(X_1, X_2, ..., X_n \overset{i.i.d.}{\sim} F_X(x)\) 滿足

\[ Z = \frac{\bar{X} - \mu}{\frac{\sigma}{\sqrt{n}}} \overset{n \rightarrow \infty}{\rightarrow} \mathcal{N}(0, 1) \]

其中 \(\mu\) 為母體期望值, \(\sigma\) 為母體標準差。

中央極限定理在講的是,當 \(n \rightarrow \infty\)

  • 樣本平均數 \(\bar{X}\) 的分配,會趨近於常態分配

  • 樣本平均數的分配之期望值 \(\mu_{\bar{X}} = \mu\)

  • 樣本平均數的分配之標準差 \(\sigma_{\bar{X}} = \frac{\sigma}{\sqrt{n}}\)

下面為指數分配在樣本數不同的情況下,各模擬1000次 \(Z\) 的機率分配。

import numpy as np
import scipy.stats as stats
from plotly.subplots import make_subplots
import plotly.graph_objects as go

# 模擬次數設定
ns = [[3, 10], [30, 100]]
N = 1000

# 圖形初始化
fig = make_subplots(
    rows=2,
    cols=2,
    shared_xaxes=True,
    specs=[[
        {
            'secondary_y': True,
        },
        {
            'secondary_y': True,
        },
    ], [
        {
            'secondary_y': True,
        },
        {
            'secondary_y': True,
        },
    ]],
)

# 母體分配的參數
mu = stats.expon.mean()
sigma = stats.expon.std()

for i, row in enumerate(ns, start=1):
    for j, col in enumerate(row, start=1):
        zs = []

        # 模擬 N 次
        for _ in range(N):
            rvs = stats.expon.rvs(size=col)
            x_bar = np.mean(rvs)
            x_std = np.std(rvs)
            z = (x_bar - mu) / (sigma / np.sqrt(col))
            zs.append(z)

        # 畫出 Z
        hist = go.Histogram(
            x=zs,
            name=f'$n = {col}$',
        )
        fig.add_trace(
            hist,
            row=i,
            col=j,
        )

        # 畫出標準常態分配的 pdf
        xs = np.linspace(-3, 3, 1000)
        ys = [stats.norm.pdf(x) for x in xs]
        fig.add_trace(
            go.Scatter(
                x=xs,
                y=ys,
                showlegend=False,
            ),
            row=i,
            col=j,
            secondary_y=True,
        )

fig.update_xaxes(range=[-3, 3])
fig.update_layout(title={'text': '指數分配下的中央極限定理'})
fig