大數法則與中央極限定理¶
弱大數法則¶
定義
隨機樣本 \(X_1, X_2, ..., X_n \overset{i.i.d.}{\sim} F_X(x)\) ,滿足以下式子
表示樣本平均數機率收斂於母體期望值,其中 \(\bar{X}\) 為樣本平均數, \(\mu\) 為母體期望值, \(F_X(x)\) 為任意分配。也可以表示成
上面的式子表示:當樣本數 \(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)\) 滿足
其中 \(\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