🦁

Juliaで二項分布を正規分布・ポアソン分布で近似する

2022/08/13に公開

はじめに

高校の数学Bの教科書に『確率分布と統計的な推測』という分野があります。新課程ではいよいよこの分野も多くの生徒が共通テストで利用することになります。統計の分野は,高校の現場の先生もそれほど多く授業をやっていません。教科書を見ながら,疑問に思ったこと,その理由を確認しておく必要があります。

この統計の分野は書いてあることの理由が、よくわからないことが多いです。

今回取り上げるのは『二項分布を正規分布で近似する』というところです。

数研出版の数学Bの教科書の説明を見てみます。

nを大きくすると,正規分布のグラフに似てきますね。』

と書いてあります。そして,それを受けて,次のようにまとめてあります。

まず,ここで思うことは nがどのくらい大きいければ近似していいのだろうか?』 ということでした。「n=8くらいではダメなのかな?」とかその辺りのことは教科書から全くわかりません。

この後に例題となるわけですが,特に,近似の基準の説明もなく,正規分布を用います。(まあ,流れからするとそうするわけですが...)

そこで,これらの疑問を解消するべく,調べることにしました。

正規分布・ポアソン分布

まず,二項分布をWikipediaで見てみると,

https://ja.wikipedia.org/wiki/二項分布

正規分布で近似できるのは

との記載がありました。そしてその下に,ポアソン分布の説明があり,二項分布がポアソン分布で近似できる条件が書いてありました。

そして,『\lambda =npが適度な大きさになるため〜』とあったので「npの比率が関係するのかな?」と考えて,さらにポアソン分布をWikipediaで見てみると,

https://ja.wikipedia.org/wiki/ポアソン分布

とありました。

ということで,『二項分布を正規分布・ポアソン分布に近似するときの基準はあるのか?」 ということを調べることにしました。

二項分布を正規分布・ポアソン分布に近似するときの基準

ネットで色々探したのですが,どうも,『統計分布ハンドブック』という書籍に色々書いてあるのではないか?と行き着いたのですが,残念ながら読めていません。

https://www.asakura.co.jp/detail.php?book_code=12178

二項分布を正規分布で近似するときの条件

次のような記述を以下のサイトで見つけました。『統計分布ハンドブック』を参考にしたようです。

https://atarimae.biz/archives/7922

正規分布の近似基準は3つの条件のうち少なくとも1つを満たすことのようです。

二項分布をポアソン分布で近似するときの条件

次のような記述を以下のサイトで見つけました。

https://navaclass.com/poisson/

ポアソン分布の一般的近似基準は次の条件を満たすことのようです。

まとめ

とりあえず,条件はわかったので,下の表の4パターンについて調べることにしました。

正規分布/ポアソン分布 ×
n=720p=1/6
× n=400p=0.01 n=8p=0.5

『正規分布,ポアソン分布のどちらで近似できる条件』考えるにあたり,np≦5という条件がかなり厳しくて,このサイトの一般的近似基準は 『正規分布ではなくポアソン分布を利用するときの基準ではないか?』 と推測しました。そこで,今回,ポアソン分布の近似基準を

とすることにしました。調べる4パターンは次のようになります。

正規分布/ポアソン分布 ×
n=10000p=0.01 n=720p=1/6
× n=400p=0.01 n=8p=0.5

Juliaを使って二項分布B(n,p)の確率P(X\leqq k)を求める

julia を使って二項分布B(n,p)P(X\leqq k)の確率を近似的に求めます。分布もグラフで図示することにしました。黒木さん(@genkuroki)に教えてもらったコードを参考にしています。

https://twitter.com/genkuroki/status/1557367851735953409

approx.jl
using Distributions
using StatsPlots

function approx(n,p,k)
   dist = Binomial(n,p)
   λ = n*p
   dist2 = Poisson(λ)
   μ,σ = mean(dist),sqrt(var(dist))
   dist3 = Normal(μ,σ)
   
   ymax = map(x -> pdf(dist3,x), μ)
   
   @show mean(dist),var(dist)
   @show rationalize.((mean(dist),var(dist)))

   xs = support(dist)
   bar(xs,dist,title="",label="$dist",ylim=(0,ymax*1.3),xlim=(μ-5σ,μ+5σ),color="skyblue")
   println("二項分布よりP(X≦$k)=",cdf(dist,k))

   println("正規分布よりP(X≦$k)=",cdf(dist3,k))
   plot!(dist3,title="",label="$dist3",ylim=(0,ymax*1.3),xlim=(μ-3σ,μ+3σ),color="red")


   println("ポアソン分布よりP(X≦$k)=",cdf(dist2,k))
   scatter!(dist2,title="",label="$dist2",ylim=(0,ymax*1.3),xlim=(μ-5σ,μ+5σ),color="red")
end

(ケース1)n=720p=1/6k=100

これは先ほど紹介した教科書にあった例題です。

np=120npq=100となり,

  • ○ 正規分布
  • × ポアソン分布

の場合です。

approx(720,1/6,100)

ポアソン分布はちょっとズレてますね。

(ケース2)n=8p=0.5k=3

np=4npq=2となり,

  • × 正規分布
  • × ポアソン分布

の場合です。

approx(8,0.5,3)

まあ,nがあまり大きくないですね。こういうときは近似ではなく,二項分布より求めるということでしょうか。

(ケース3)n=400p=0.01k=2

np=4npq=3.96となり,

  • × 正規分布
  • ○ ポアソン分布

の場合です。

approx(400,0.01,2)

ポアソン分布は平均と分散が等しいので,npnpqがほぼ同じ値の時に近似できそうです。そのために,『pが十分小さい』という条件があるようですね。

(ケース4)n=10000p=0.01k=80

np=100npq=99となり,

  • ○ 正規分布
  • ○ ポアソン分布

の場合です。

approx(10000,0.01,80)

正規分布・ポアソン分布のどちらでもよさそうです。このようなときには正規分布を使うのでしょうね。

まとめ

調べてみてよかったと思います。教科書などではnが大きいと考えて二項分布を正規分布へ近似する流れとなっているわけですが,(ケース3)からわかるように,n大きくても,pが小さいと,正規分布は近似とは言えません。二項分布B(400,0.01)の確率P(X\leqq 2)の確率をみてみます。

分布 確率
二項分布 0.2366
正規分布 0.1574
ポアソン分布 0.2381

私たちが,自分で問題を作成するときに知っておかないと,近似とは言えない確率を求めていることになります。

今回,近似するときの基準を探しましたが,そもそも,個々の近似が適切かどうか調べる指標があるはずです。(検定?適合度検定?)この辺りはもう少し調べてみたいと思います。

Discussion