3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

二項分布における正規分布とポアソン分布

Last updated at Posted at 2024-11-19

はじめに

ある試行を複数回くりかえしたとき、特定の事象が何回起こるのかを分布として示したものを二項分布という。ここで、試行回数が十分に大きい場合を考える。二項分布において、サンプルの平均が1より十分大きい場合は正規分布(連続的ではあるが)に漸近する。一方で特定の事象が確率的にレアであるときの二項分布は、ポアソン分布に漸近する。そこで、Pythonを用いた数値計算により、二項分布が正規分布やポアソン分布に漸近することを視覚的に調査することを目的とする。
以下、計算結果の概略を示す。

1.正規分布に漸近する二項分布のイメージ
二項分布反復試行回数100.png
2.ポアソン分布に漸近する二項分布のイメージ
二項分布反復試行回数20.png

二項分布について

導入

コインのモデルで考える。表が出る確率を$p$とすると、裏の出る確率は$(1-p)$となる。したがって、$n$回の試行のうち$m$回だけ表が出る確率は、反復試行の確率$P_m$は以下のように表すことができる。

P_m={}_n C_m p^m(1-p)^{n-m}

ただし、二項定理より$\Sigma^{n}_{m=0}P_m=1$となる(全事象の確率の和は1)。

ここで、プログラムを作成しやすいようにコンビネーションを以下のように階乗で表す。

{}_n C_m =\frac{n!}{m!(n-m)!}

プログラム

コンビネーションを上記載のように階乗で定義して計算する。ちなみに階乗は再帰のアルゴリズムではなくて、計算量の少ない反復forを用いた。

python coin_2.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
#全試行回数
n=100
#1回の事象の発生確率
p=0.01
#表が出る回数の合計
m=np.arange(0,n+1,1)

#階乗計算
def factorial(num):
  num2=1
  for i in range(1,num+1):
    num2=num2*i
  return num2

P_ary=[]
for k in range(len(m)):
  #コンビネーションの計算
  combi=factorial(n)/(factorial(m[k])*factorial(n-m[k]))
  #反復試行の確率
  P=combi*(p**(m[k])*(1-p)**(n-m[k]))
  P_ary.append(P)

plt.plot(m,P_ary)
plt.title("二項分布"+str(n)+"回の反復試行")
plt.xlabel("表の出る回数")
plt.ylabel("反復試行の確率")
plt.savefig("二項分布反復試行回数"+str(n)+".png")
plt.show()

これを実行すると以下のようなグラフが出力される。

二項分布反復試行回数100.png

正規分布

$np>>1$例えば、$n=100,p=0.5$のときは、$P_m$は概ね正規分布にしたがう。これは、スターリングの公式により極限計算をすると求められる。

解析結果

$p=0.5$のもとで、$n=5,10,20,100$の場合の$P_m$の分布について以下に示す。

二項分布反復試行回数5.png

二項分布反復試行回数10.png

二項分布反復試行回数20.png

二項分布反復試行回数100.png

このように、試行回数を増やしていけば釣鐘型のガウス関数に漸近する。

分布関数

また、表の出る回数が0から$m$回までの確率を足したものを分布関数と呼び、以下のように定義する。

F(m)=\Sigma_{m=0}^{m}P(m)

プログラム

2項分布の分布関数を表現するプログラムは以下のように書くことができる。

python coin_2_sigma.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math

n=100

p=0.5
F=0
m=np.arange(0,n+1,1)


def factorial(num):
  num2=1
  for i in range(1,num+1):
    #print(i)
    num2=num2*i
  return num2


P_ary=[]
F_ary=[]
for k in range(len(m)):
  #print(m[k])
  combi=factorial(n)/(factorial(m[k])*factorial(n-m[k]))
  P=combi*(p**(m[k])*(1-p)**(n-m[k]))
  F=F+P
  P_ary.append(P)
  F_ary.append(F)

plt.plot(m,F_ary)
plt.title("二項分布"+str(n)+"回の反復試行と分布関数")
plt.xlabel("表の出る回数")
plt.ylabel("反復試行の確率")
plt.savefig("二項分布反復試行回数_分布関数"+str(n)+".png")
plt.show()

これを実行すると以下のようなグラフが出力される。

二項分布反復試行回数_分布関数100.png

このように、分布関数は$m$を増やすと平均(期待値)付近で急激に増加し、1に漸近することが分かる。

ポアソン分布

$p<<1$例えば、$p=0.01$というレア事象が$m$回生じるときの確率$P_m$は概ねポアソン分布にしたがう。

解析結果

$p=0.01$のもとで、$n=5,10,20,30,100$の場合の$P_m$の分布について以下に示す。

二項分布反復試行回数5.png

二項分布反復試行回数10.png

二項分布反復試行回数20.png
二項分布反復試行回数30.png
二項分布反復試行回数100.png

このように、試行回数が増加するほど指数減衰関数のようなほぼ単調減少する関数に漸近する。これは、レアな事象が立て続けに起きるのはまれだという直感にも一致する。

まとめ

今回は、コンピュータの計算能力を利用することで、二項分布を延長していくと、正規分布やポアソン分布に漸近するということを視覚的に明らかにした。数学的つまり厳密に考える場合、はさみうちの定理を用いた極限計算を行う必要性があるが、その場合は階乗計算においてスターリングの近似式を用いる。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?