大数の法則
大数の法則とその証明
大数の法則の定理
ある確率変数列\({X_1,X_2,\dots,X_n}\)が独立で同一分布に従う場合、
\begin{equation*} \lim_{n \to \infty} P\left(\left|\frac{1}{n}\sum_{i=1}^{n}X_i – \mu\right| \geq \epsilon\right) = 0 \end{equation*} を満たす。ここで、\(\mu=E(X_1)\)であり、\(\epsilon\)は任意の正数である。
大数の法則の証明
独立性から、各\(X_i\)の期待値は\(\mu=E(X_1)\)である。
したがって、期待値の線形性より、
\begin{equation*} E\left(\frac{1}{n}\sum_{i=1}^{n}X_i\right) = \frac{1}{n}\sum_{i=1}^{n}E(X_i) = \mu \end{equation*} である。
また、分散の線形性から、
\begin{align*} Var\left(\frac{1}{n}\sum_{i=1}^{n}X_i\right) &= \frac{1}{n^2}Var\left(\sum_{i=1}^{n}X_i\right) \\ &= \frac{1}{n^2}\sum_{i=1}^{n}Var(X_i) \\ &= \frac{\sigma^2}{n} \end{align*} ここで、\(\sigma^2 = Var(X_1)\)である。
これらの結果から、
\begin{equation*} P\left(\left|\frac{1}{n}\sum_{i=1}^{n}X_i – \mu\right| \geq \epsilon\right) \leq \frac{Var\left(\frac{1}{n}\sum_{i=1}^{n}X_i\right)}{\epsilon^2} = \frac{\sigma^2}{n\epsilon^2} \end{equation*} である。
ここで、右辺は\(n\to \infty\)のとき0に収束するため、左辺も0に収束する。
大数の法則を確認するためのRのプログラム
# 真の平均
true_mean <- 10
# サンプル数
n <- 1000
# シミュレーション回数
sim_num <- 100
# 標本平均を保存するベクトル
sample_means <- numeric(sim_num)
# シミュレーションを実行
for (i in 1:sim_num) {
# 標本を生成
sample <- rnorm(n, true_mean)
# 標本平均を計算して保存
sample_means[i] <- mean(sample)
}
# 標本平均の推移をグラフ化
plot(sample_means, type = "l", col = "blue")
# 真の平均を赤い線で表示
abline(h = true_mean, col = "red", lwd = 2)
# グラフのタイトル等を設定
title("Sample Means Converging to True Mean")
xlab("Simulation Iteration")
ylab("Sample Mean")
legend("topleft", legend = c("True Mean", "Sample Mean"), col = c("red", "blue"), lwd = 2)
大数の法則を確認するためのPythonのプログラム
import random
n = 1000 # 試行回数
mu = 5 # 真の平均
sum_x = 0 # Xの合計を初期化
for i in range(n):
x = random.normalvariate(mu, 1) # 平均mu, 分散1の正規分布からランダムにサンプリング
sum_x += x
print(f"Trial {i+1}: Sampled x = {x:.3f}, Running mean = {sum_x/(i+1):.3f}")
print(f"Final mean estimate: {sum_x/n:.3f}")