はじめに
このシリーズは久保川達也氏著「現代数理統計学の基礎」を簡潔に説明し、その内容をpythonで実装してみよう、というものです。実装にはGoogle Colaboratory(以下:Colab)を使いました。ご指摘があればコメント欄に書いて下さるとありがたいです。
説明が必要だと思ったところにだけ触れて、アウトプットできればいいよねくらいのスタンスで書くので本の内容をちゃんと全部理解したい方にとっては向いていないかもしれないです。
式番号や命題・定義のインデックスは本に合わせて書いた場合、この記事では番号がとびとびになることがありますので予めご了承ください。
1章の概観
確率を集合論で定義するところから始まります。そんな定義どうでもいいって思う方でもこの本を読み進められます。著者自身数理統計に主眼を置いていて、確率論の理論体系には軽く触れているだけです。1章の内容は主に
・確率の定義
・用語の説明
・Bayesの定理
です。1.3発展的事項では、前のページに書いてあることを用いて命題を証明しています(追うだけなら簡単)。
言葉
$ $世の中のランダムな現象を数学的に記述するのが確率です。立方体のサイコロを例に説明します。
試行:サイコロを1回投げました。
全事象・標本空間$\Omega$:$\Omega$={ 1,2,3,4,5,6}
事象:{1},{3,6}など、$\Omega$の部分集合。本書では$A$とか$B$で表している
積集合:$A\cap B=${$x|x\in A かつ x\in B$}$ $
和集合:$A\cup B=${$x|x\in A または x\in B$}$ $
・・・
と、いろいろ続きますが補集合、差集合、対称差などはベン図を描いてみると分かりやすいです。
定義
$ $確率は次の三つで定義されます。
$ $(P1)すべての $A \in \mathcal{B}$ に対して$P(A) \geq 0$.
(P2)$P(\Omega)=1$.
(P3)$A_k \in \mathcal{B},k=1,2,...,$が互いに背反であるとき、すなわち$A_i \cap A_j=\emptyset,i\neq j$の場合、$P(\bigcup_{k=1}^{\infty}{A_k})= \sum_{n=1}^\infty P(A_k)$ が成り立つ.
$\mathcal B$は可測集合族で、次の性質を満たします。
(M1) $\emptyset\in\mathcal{B} , \Omega\in\mathcal{B}$.
(M2) $A \in \mathcal{B}$ ならば $A^c \in \mathcal{B}$ ($A^c$は$A$の補集合).
(M3) $A_k \in \mathcal{B},k=1,2,3...,$ならば $\bigcup_{k=1}^{\infty}{A_k} \in \mathcal B $.
なんだか難しそうですが、ここを深掘りすると着地点が分からなくなりそうなので$\mathcal B$は標本空間$\Omega$の部分集合からなる集合、$A$は$\Omega$の部分集合と思ってください。(P3)もそうですが、今後もベン図で表してみるとなるほどとなることが多いでしょう。$\bigcup$は集合族の和集合を取るという記号です。
$$ \bigcup_{k=1}^{n}{A_k} = A_1 \cup A_2 \cup ...\cup A_n$$
要するに確率$P$は集合$A$の関数で(例:サイコロを振って2が出る確率は? 答え:$P(A= ${2}$)=1/6$)、P1~P3を満たすというわけです。
(P1)確率はつねに0以上です
(P2)全事象のうちどれかが起こる確率は1です(どれかは必ず起こる)
(P3)考えている事象が互いに背反(ベン図で書いたとき集合がかぶっていない)なとき、その事象の和集合の部分の事象が起こる確率は、それぞれの事象が起こる確率の和で表せる。
みたいな考え方です。
そのあとも色々と書いてますが、ここは測度論を学習してからでないと読んでも意味がないと思います。
いろいろ書きましたが、結局いつもの確率でしたね。確率は関数であるという意識を持っていればGoodだと思います。
Bayes(ベイズ)の定理
$ $ベイズの定理を理解するために説明しておくことがあります。
・条件付き確率
定義:
二つの事象$A$と$B$があって$P(B)>0$のとき、
$$ P(A|B)=\frac{P(A \cap B)}{P(B)} \tag{1.1a} $$
を、$B$を与えたときの$A$の条件付き確率という。
$P(A|B)$は、事象$B$が起こるという条件のもとで事象$A$が起こる確率という意味です。$A$と$B$を入れ替えても成り立ちます。式(1.1a)を移項した式
$$P(A \cap B) = P(A|B)P(B) \tag{1.1b}$$
も便利です。
・全確率の公式
$B_1,B_2...$を互いに背反な事象とし、$P(B_k)>0,\bigcup_{k=1}^{\infty}{B_k}= \Omega$を満たすとき、事象$A$の確率は次のように表せる。
$$P(A)=\sum_{k=1}^\infty P(A|B_k)P(B_k) \tag{1.2}$$
とありますが、下の図を見てもらえば分かりやすいと思います。式(1.1b)をうまく使って証明してみてください。
($k \to \infty$とします)
(画像はhttps://bellcurve.jp/statistics/course/6444.html より引用。special thanks!)
・本題
条件付き確率の式と、全確率の式を組み合わせるとベイズの定理を証明できます。ベイズの定理の正確な表現は以下の通りです。
$B_1,B_2...$を互いに背反な事象の列とし、$P(B_k)>0,\bigcup_{k=1}^{\infty}{B_k} = \Omega$を満たすとする。このとき任意の事象$A$に対して、$A$を与えたときの$B_j$の条件付き確率$P(B_j|A)$は次のように表される。
$$P(B_j|A)= \frac{P(A|B_j)P(B_j)}{\sum_{k=1}^\infty P(A|B_k)P(B_k)}$$
図を描いて考えると分かりやすいと思います。条件付き確率の式の右辺をいじると導出できます。ベイズの定理は結果から原因を推定する($A$という事象(結果)が起こった時、それが$B_j(j=1,2,...)$に起因する確率はいくらか)重要な考え方です。
1章の説明は以上です。本の例題は自分で手を動かしたほうが理解できると思いますので、本を持っている方は是非やってみてください。
pythonを動かしてみよう
適当に例題を作ったので、pythonで解いてみます。
例:水槽にコリドラスが20匹、グッピーが7匹、ネオンテトラが9匹います。普段、コリドラスに虫を与えて食べる確率は0.1でグッピーは0.8 、ネオンテトラは0.3の確率で虫を食べます。ある日餌の時間に目をつぶって虫を投げたところ、虫は一口で食べられてしまいました。この時、グッピーが虫を食べた確率はいくらでしょうか?
これを解いてみましょう
Corydoras = 0
Guppy = 1
Neontetora = 2
#それぞれの魚が普段虫を食べる確率
_p_eat = []
_p_eat.insert(Corydoras,0.1)
_p_eat.insert(Guppy,0.8)
_p_eat.insert(Neontetora,0.3)
#魚の比率
_p_fish = []
_p_fish.insert(Corydoras,20/36)
_p_fish.insert(Guppy,7/36)
_p_fish.insert(Neontetora,9/36)
#事後確率
def prob_eat(fish):
if int(fish) == 0 :
return _p_eat[fish]*_p_fish[fish]
elif int(fish) == 1 :
return _p_eat[fish]*_p_fish[fish]
else:
return _p_eat[fish]*_p_fish[fish]
#〇〇が虫を食べた確率
def probability(fish):
return prob_eat(fish) / (prob_eat(Corydoras) + prob_eat(Guppy) + prob_eat(Neontetora))#総数が多いときは工夫が必要
print(round(probability(Guppy),2))
これを実行すると、
0.54
となり、グッピーが食べた確率が出ました。
1章はこんな感じです。気が向いたら次章以降もやります。ありがとうございました。
参考文献
「現代数理統計学の基礎」久保川達也氏著