投資のためのデータサイエンス

個人の投資活動に役立つデータ分析にまつわる話題を綴ります。

Pythonで学ぶ統計学 (7) :大数の法則

今回は「大数の法則」を見てみましょう。今、独立に同じ分布にしたがう確率変数 X_1,X_2,\cdots があり、 X_i の共通の期待値を \mu 、分散 \sigma ^2 とします。大数の弱法則は、任意の正の実数 \epsilon に対して、以下の式が成り立つことです。

 \displaystyle P \Bigl ( | \frac{1}{n}\sum_{i=1}^{n}X_i -\mu | \geqq \epsilon \Bigr) \rightarrow 0 \ \ (n \rightarrow \infty )

これは、 \sum_{i=1}^{n}X_i /n (すなわち算術平均)が、nが大きくなると X_i の期待値 \mu に近づいていくことを意味しています。

以下のpythonコードは、各々について期待値が1である一様分布, 正規分布, 二項分布, ポアソン分布にしたがう乱数をn回発生させ、各nについて算術平均をとったものです。nが大きくなるといずれも期待値である1に近づくことがわかります。コードを簡略化するために固定サイズの配列を用いました。

import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.family']='MS Gothic'
ccolor='red','blue','green','magenta'
ctitle='一様分布(0,2)','正規分布(1,1)','二項分布(10,0.1)','ポアソン分布(1)'
X = np.arange(2000)
Y = np.zeros((4,2,2000))
for k in range(2000):
Y[0,0,k] = rd.uniform(0,2,1)
Y[1,0,k] = rd.normal(1,1,1)
Y[2,0,k] = rd.binomial(10,0.1,1)
Y[3,0,k] = rd.poisson(1,1)
for i in range(4):
Y[i,1,k] = np.mean(Y[i,0,0:k])
fig, ax = plt.subplots(2,2)
for k in range(4):
i=k//2; j=k%2
ax[i,j].plot(X[1:],Y[k,1,1:],color=ccolor[k])
ax[i,j].set_title(ctitle[k])
plt.tight_layout()

 

large_number_theory.png