2015年10月9日金曜日

確率の「Outside or Inside the Head」

Doing Bayesian Data Analysis」の「3.2 Probability: Outside or inside the head」は自明なことだが、そのタイトルも含めて、その内容に納得した。

このタイトルから、すぐにPixar の最新作「Inside Out」を思い出した。DVDの発売待ちでまだ観ていない。すでに劇場で見た幼馴染みにこの映画について尋ねたとき「Inside Out」と言ったら、相手は怪訝な顔をした。日本語タイトルは「インサイド・ヘッド」なのね...。あはは「何で?」(笑)


Outside the Head:大量の観測

「コインの不正の有無」を確認するのに、何度もコイン投げしてその結果を観察する方法がある。以下は本書のサンプルスクリプトを使って、Rで500 回のコイン投げ」を 4 回実施した結果。
R スクリプトは末尾に掲載した。面白いのは、x 軸を常用対数にして、確率値が収束する様子が分かりやすくなっている点。「確率密度を例える(潰したスポンジ)」でも、同様に対数を使っている。plot 関数の引数に「log="x"」を加えるだけです。

この4回の最終的な確率は一致していないが「50%に収束」。コンピュータを使わずに実際にコイン投げをしても、「不正のないコイン」の場合、同様の結果になることは明らか。このグラフで気づいたのは、擬似乱数であったとしても、高々10回程度の試行で答えの「50%」に近い値になっていること。無作為抽出の威力 を感じてしまった。「極端な結果(外れ値)て、人間の直感以上に出にくい」ということかもしれない。

とはいえ、「不正かどうか」を確かめているので、本来はコンピュータで算出することではない。つまり、実際に疑いのあるコインを投げなければならない。そういう意味で「Outside the Head」となる、「頭で考えても答えは出ない」ということ。


Inside the Head:主観的信念

subjective belief を「主観的信念」と訳した。一般的にもこう訳されることが多い。ところが、厳密な数学の分野である確率で、「主観的」も「信念」も、何だかシックリこない。この辺りが「頻度主義者」が「ベイジアン」に懐疑的な理由の一つなのかもしれない。とはいえ、シックリしないながらも「主観的信念」と訳す。

次の二つのギャンブルがあった場合、どちらを選びますか?
  • ギャンブルA:昨夜の大雪で予約したフライトが欠航すれば 1万円もらえる。
  • ギャンブルB:赤玉と白玉がそれぞれ5個入っているバッグから赤玉を引いたら 1万円もらえる。

ギャンブルBを選んだ人は、ギャンブルAの出来事は「50%より低い確率でしか起こらない」という「主観的信念」があることになる。

次の二つではどうだろうか?
  • ギャンブルA:昨夜の大雪で予約したフライトが欠航すれば 1万円もらえる。
  • ギャンブルB:赤玉が1個、白玉が9個入っているバッグから赤玉を引いたら 1万円もらえる。

ギャンブルAを選んだ人は、欠航する確率は10%より高いという「主観的信念」がある。

これらのどのギャンブルであっても「コイン投げ」のように試すことはないだろう。そもそもギャンブルAの場合は試しようがない。やれることといえば、過去のデータから欠航確率を調べることぐらい。その場合でも「Inside the Heads」で「頭の中で決定できること」なのだ。


未だ「ベイジアン」か不明(どっちでも良いじゃん)

次は本書からの引用

Nevertheless, the mathematical properties, of probabilities outside the head and beliefs inside the head, are the same in their essentials, as we will see. 
しかしながら、「頭の外での確率」と「頭の中の信念」という「数学的特性」は本質的には同じもの。

Outside the Head」が「頻度主義者の統計学」、「Inside the Head」が「ベイジアン」と言っていない、本書でもそういう記述はない。ただ「頻度主義者の統計学」で「subjective belief」という用語は見たことはない。

「ベイズの基礎」と題して、一週間余り、ベイズのルールを使った基礎的な課題に取り組んだ。条件付確率など、基本的な確率の知識は必要だが、多くの中学生でも分かる内容だ。

「中学生でも分かる」は言い過ぎではないと思う。つい先日、高校受験を控えた甥っ子と電話で話した際、「サイコロの目の確率て知ってる?」と尋ねると正しく答えた。「確率」という分野も知っていた。

そんな課題を解くのに「帰無仮説」「値」など一切出ない。「帰無仮説」や「値」を正しく理解して使える中学生は多くはないだろう。大人にだって簡単じゃない。少なくとも私には難しかった。今では理解しているが「適切に使っている」という意識は未だに低い。

だからといって「頻度主義者の統計学」を否定しているつもりはない。ただ、確率や統計学を教えるのに「ベイジアンから教える」ことには賛同する。

「頻度主義者の統計学 vs ベイジアン」なんて「どうでも良いじゃん」が正直な意見。自分なりに「良いとこ取りのデータ分析法」を確立するだけです。


「コイン投げ」Rスクリプト

N = 500 # 試行回数
# Generate a random sample of N flips for a fair coin (heads=1, tails=0);
# the function "sample" is part of R:
#set.seed(47405) # 乱数作成に seed を設定する場合
flipsequence = sample( x=c(0,1) , prob=c(.5,.5) , size=N , replace=TRUE )
# 表の割合を算出
r = cumsum( flipsequence ) # 累積
n = 1:N
runprop = r / n
# グラフの描画(log="x" で X軸を対数にしているのがポインント)
plot( n , runprop , type="o" , log="x" ,
 xlim=c(1,N) , ylim=c(0.0,1.0) , cex.axis=1.5 ,
 xlab="Flip Number" , ylab="Proportion Heads" , cex.lab=1.5 ,
 main="Running Proportion of Heads" , cex.main=1.5 )
# 50%ライン
lines( c(1,N) , c(.5,.5) , lty=3 )
# 詳細値の表示
flipletters = paste( c("T","H")[ flipsequence[ 1:10 ] + 1 ] , collapse="" )
displaystring = paste( "Flip Sequence = " , flipletters , "..." , sep="" )
text( 5 , .9 , displaystring , adj=c(0,1) , cex=1.3 )
# Display the relative frequency at the end of the sequence.
text( N , .3 , paste("End Proportion =",runprop[N]) , adj=c(1,0) , cex=1.3 )

0 件のコメント:

コメントを投稿