先日、二項分布の累積分布関数を計算できるようになりました。
これを使って、簡単な二項検定をやってみたいと思います(あまりLISPとは関係ない内容ですが)。題材としては、ジャンケンにやたら強い人がいて「俺には天から与えられたジャンケン能力がある」とうそぶいているとき、その能力は本物かを調べる、ということにしましょう。その人にジャンケンを20回やってもらい、そのうち16回で勝ったとします。勝率は16/20=0.80で、公正なジャンケンで想定される0.50をだいぶ上回っています。この勝率から天賦のジャンケン能力の有無をどう判断しましょうか。
こういうときには、二項分布の累積分布関数を使用して「たまたま今回のような結果(ならびにそれより極端な結果)が出る確率」を計算することができます。具体的には、n=20、x=16、p0=0.50として、以下の関数を呼び出すと「確率0.50のもとで20回のうち15回を超えて勝つ確率」が計算できます。
(defun binomtest (x n &optional (p0 1/2)) (- 1.0 (pbinom (1- x) n p0))) (binomtest 16 20 0.50) ;=> 0.005908966379024716d0
0.0059という低い確率でしか起きないようなことが、まさに目の前で起きたという事実から、この人の「俺には天から与えられたジャンケン能力がある」という主張が間違っているとは言い切れない……というように判断します。
さて、それでも0.0059という確率でまぐれが起きることもあります。その場合は、「この人の主張が本当は偽なのに、主張を認める」という誤った判断をしたということになります。これを第1種の過誤といいます。
逆に、「ジャンケンについての天賦の能力があるにも関わらず、その主張を退ける」という誤った判断もあり得ます。こちらは第2種の過誤といいます。第2種の過誤はどのくらいの確率でしょうか。勝率0.80の能力があることを認めないということなので「確率0.20のもとで20回のうち15回以下で勝つ確率」を計算します。
(pbinom (1- 16) 20 (- 1 0.8)) ;=> 0.3703516509485983d0
第2種の過誤は0.37と、こちらはなかなかの確率で誤った判断をしてしまいそうです。