'중심 극한정리'시뮬레이션(두 가지 분포)

2926 단어 통계학
도쿄대 출판회가 펴낸'통계학 입문(기초통계학 I)에서 해설한'중심극한정리'에 대한 컴퓨터 시뮬레이션 결과가 실렸다.
※ "대다수의 법칙"에 대한 시뮬레이션은 여기.을 참조하십시오.
책에 두 가지 분포와 지수 분포의 시뮬레이션 결과가 실렸는데 이번에 우리는 두 가지 분포를 시뮬레이션하여 여기에 실었다.

■ Python 샘플 코드

# 統計学入門(東京大学出版会)の「中心極限定理」シミュレーション
# [0,1)の乱数を発生させ、0.1未満なら成功(1)、0.1以上なら失敗(0)とする。
# 繰り返し回数n(5,10,20,30,50,100)の二項乱数を250個生成し、標準化した確率分布が
# 正規分布に法則収束するかシミュレーションする。
import numpy as np
import pandas as pd

n_list = [5, 10, 20, 30, 50, 100] # ベルヌーイ試行の回数(n)
N = 250 # 試行回数
p = 0.1 # ベルヌーイ試行の成功確率
z = np.array([]) # 標準化後の確率変数値の格納用リスト
E_list, V_list = [], [] # 平均値、分散の格納用リスト
E_t_list, V_t_list = [], [] # 期待値(理論値)、分散(理論値)の格納用リスト
x = {} # データ可視化用ディクショナリ

for n in n_list:
    r_n = np.random.rand(N, n) # 250×n の一様分布を生成
    r_n = np.vectorize(lambda x: 1 if x<p else 0)(r_n)
    r = np.sum(r_n, axis=1)
    E = np.sum(r)/N # 平均値
    V = np.sum((r-r.mean())*(r-r.mean()))/N # 分散
    E_t = n*p # 期待値(理論値)
    V_t = n*p*(1-p) # 分散(理論値)
    #z = (r-E_t)/np.sqrt(V_t) # 標準化(理論値)
    z = (r-E)/np.sqrt(V) # 標準化

    E_list.append(E)
    E_t_list.append(E_t)
    V_list.append(V)
    V_t_list.append(V_t)
    x[n] = z

fig, axes = plt.subplots(3, 2, figsize=(10, 8), sharex=True, sharey=False)

# グラフ出力
for ax, n in zip(axes.ravel(), n_list):
    ax.set_title('Distribution after standardization - Bi('+str(n)+','+str(p)+')', fontsize = 10)
    ax.set_xlabel('Random variable(Z)')
    ax.set_ylabel('Frequency')
    ax.set_xlim(-4, 4)
    ax.grid()
    ax.hist(x[n], bins=40)
fig.suptitle('Central limit theorem - Simulation', fontsize = 14)
fig.tight_layout()
plt.show()

# 平均、分散出力
E_V = []
E_V.append(E_list)
E_V.append(E_t_list)
E_V.append(V_list)
E_V.append(V_t_list)
df = pd.DataFrame(E_V, columns=n_list, index=['平均','平均(理論値)','分散','分散(理論値)'])
display(df)

■ 결과


<두 가지 분포 상황에서의 실험 결과>

<평균과 방차>

■ 요약


반복 횟수는 5회→10회→···에서 100회로 늘려 정규 분포된 형태로 변하는 것을 확인했다.책의 평균치와 방차도 그대로 출력했지만 이 수치는 기본적으로 이론치와 같다.확률론은 수학이 증명한 정리이지만 두 가지 분포된 데이터를 모방하여 실제적으로 정규 분포의 느낌을 얻을 수 있고 이해할 수 있다.

좋은 웹페이지 즐겨찾기