Mímisbrunnr知恵の泉

← シミュレーション 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:シミュレーションとは(決定的 vs 確率的) | 関連:収束率と誤差(√n則) | 推定量の信頼区間

要点(BLUF)

1. 二本の支柱

モンテカルロ法の戦略は「求めたい量 θ\theta を、ある確率変数 XX の期待値 E[X]=θE[X] = \theta として表し、独立標本 X1,,XnX_1,\dots,X_n標本平均 Xˉn=1nXi\bar{X}_n = \frac{1}{n}\sum X_i で近似する」ことでした(シミュレーションとは(決定的 vs 確率的))。この近似が正当化されるのは、次の2つの定理があるからです。

LLN が「収束する」ことを、CLT が「どれくらいの速さ・誤差で収束するか」を教えます。確率論の厳密な証明は統計分野に譲り、ここではシミュレーションでの役割を実証します。

XˉnPE[X](LLN),n(XˉnE[X])dN(0, σ2)(CLT)\bar{X}_n \xrightarrow{P} E[X] \quad\text{(LLN)}, \qquad \sqrt{n}\,(\bar{X}_n - E[X]) \xrightarrow{d} \mathcal{N}(0,\ \sigma^2) \quad\text{(CLT)}

2. 大数の法則:走る平均は真値に収束する

サイコロの目(期待値 E[X]=3.5E[X] = 3.5)を繰り返し振り、nn 回目までの平均を見ます。

import numpy as np

# 乱数シードを固定
rng = np.random.default_rng(0)

rolls = rng.integers(1, 7, 100_000)                  # 1..6 を10万回
running_mean = np.cumsum(rolls) / np.arange(1, len(rolls)+1)

for n in [10, 100, 1000, 10000, 100000]:
    print(f"n={n:>6}: 走る平均 = {running_mean[n-1]:.4f}  (真値 3.5)")

出力:

n=    10: 走る平均 = 2.8000  (真値 3.5)
n=   100: 走る平均 = 3.6200  (真値 3.5)
n=  1000: 走る平均 = 3.6000  (真値 3.5)
n= 10000: 走る平均 = 3.5045  (真値 3.5)
n=100000: 走る平均 = 3.4980  (真値 3.5)

出力の意味n=10n = 10 では 2.80 と大きくずれていますが、nn が増えるほど 3.5 に収束していきます(10万回で 3.498)。これが大数の法則です。注目すべきは収束がゆっくりな点で、nn を10倍にしても誤差はおおよそ 103.16\sqrt{10} \approx 3.16 分の1にしかなりません。

3. 中心極限定理:誤差の大きさを定量化する

CLT は誤差の「大きさ」を教えます。一様分布 U(0,1)U(0,1)(平均 0.5、分散 1/121/12)から大きさ m=30m = 30 の標本を取り、その平均を 5万回作って、平均値の散らばりを見ます。

import numpy as np

# 乱数シードを固定
rng = np.random.default_rng(1)

m = 30           # 1標本の大きさ
reps = 50_000    # 標本平均を作る回数
means = rng.random((reps, m)).mean(axis=1)   # 各行が大きさ30の標本平均

print(f"標本平均の平均   = {means.mean():.4f}  (真値 0.5)")
print(f"標本平均の標準偏差 = {means.std():.4f}")
print(f"CLT予言の標準偏差 = {np.sqrt((1/12)/m):.4f}")

出力:

標本平均の平均   = 0.5000  (真値 0.5)
標本平均の標準偏差 = 0.0525
CLT予言の標準偏差 = 0.0527

出力の意味:標本平均そのものの平均は 0.5(LLN)。その散らばり(標準偏差=標準誤差)は実測 0.0525 で、CLT が予言する σ2/m=(1/12)/30=0.0527\sqrt{\sigma^2/m} = \sqrt{(1/12)/30} = 0.0527 とほぼ一致。つまり「もとの U(0,1)U(0,1) は正規でなくても、平均を取ると正規に近づき、その散らばりは σ/m\sigma/\sqrt{m}」という CLT の二段の主張が両方確認できました。

4. シミュレーションへの含意

数式の直観的意味

LLN は「偶然のブレは平均化で打ち消し合う」という主張、CLT は「打ち消し残りの揺らぎは正規分布に従い、n\sqrt{n} で縮む」という主張です。標本平均の分散が Var(Xˉn)=σ2/n\text{Var}(\bar{X}_n) = \sigma^2/n になるのは、独立な nn 個の和の分散が nσ2n\sigma^2、それを nn で割ると (1/n2)nσ2=σ2/n(1/n^2)\cdot n\sigma^2 = \sigma^2/n だから。標準偏差はその平方根で σ/n\sigma/\sqrt{n}——ここから 1/n1/\sqrt{n} 則が出るのがモンテカルロ誤差論の核心です。

⚠️ よくある誤解・落とし穴

対応シミュレーション参照

本文の LLN(サイコロ走る平均・default_rng(0))と CLT(一様の標本平均分布・default_rng(1))。収束率の詳細は収束率と誤差(√n則)へ。

関連ノート