二項検定とは
二項検定は二項分布を利用した「1群の頻度の検定」です。
例えば性比は1:1、つまりオスの母比率は0.5であるという帰無仮説で、10匹中、オスが0匹となるときの二項検定は、以下のようにおこないます。
binom.test(0, n=10, p=0.5)
出力結果が英語だからと焦らずに、じっくり見て下さい。
ここでは「オス」に注目して、それが0だったので、number of successes =0
全体のデータ数は10なので、number of trials = 10
そしてP値はp-valueで記されています。この値が0.05よりも小さいので「有意」です。
最後に、sample estimates: probability of success 0とは「データからの推定値」つまりオスの母比率が0だということです。そのほかに、95%信頼区間なども記してありますが、まず使わないので無視してください。

二項分布で個々の確率を計算してみる
二項分布の確率を求める呪文で同じ計算をおこなうと、
dbinom(0, size=10, prob=0.5)
dbinom(10, size=10, prob=0.5)
dbinom(0, size=10, prob=0.5)+dbinom(10, size=10, prob=0.5)
#たしかに両側検定をしていることが分かると思います。総和の呪文sumを使うと
sum(dbinom(c(0, 10), size=10, prob=0.5)

同じように、
データ数が多くても、Rなら関係ありません。
例えば200回中60回成功したというデータに対して帰無仮説「母比率は0.5」を検定するならば、
binom.test(60, n=200, p=0.5)
ちなみに、この解析結果では、p-value = 1.507e-08となっていますが、e-08は、10のマイナス8乗のことです。

標準正規分布を利用した二項検定
でも、上のようにデータ数が多いときに手計算で二項検定しようとすると計算が大変です。
そこで、二項分布を標準正規分布に近似させて検定する手法があります。
これはRが使えなかった時代のものですが、一応知っておきましょう。

この方法では、データから標準正規分布のX軸であるZ値を計算して、そのZ値から裾野のへりのほうの面積を計算して、さらに両方の裾野となるように2倍してP値を求めます。
Z値の絶対値が1.96よりも大きければP値が0.05より小さいことになります。

標準正規分布でZの絶対値が1.96より大きければP値がいくつになるかは、
pnormで、それ以下の値となる確率(面積)を求めれば分かります。
pnorm(1.96)  #0.975を少し超えた値ですね。
pnorm(-1.96)  #こちらは、ぎりぎり0.025に達しません。
つまり分布の山の両方の裾野を足した両側検定でP < 0.05となるわけです。

あと、pnormではある値以下の確率を計算するのが普通なので (lower.tail=TRUE)、
Z値を計算するときは、そのZ値がマイナスになるようにしておけば便利です。
ということで、以下でマイナスを付けたり付けなかったりしているのは、そういう調整をしています。

二項分布を標準正規分布に近似した場合の計算
Z値を求める式は以下のとおりです。
\( Z = \frac{x - np}{ \sqrt[]{np(1-p)} } \)
ここでxは成功した回数、pは母比率、nはデータ数です。
上の例についてRで計算してみましょう。
(60-200*0.5)/(200*0.5*(1-0.5))^0.5
上の式で、約-5.657の値となりましたね。
絶対値が1.96よりもずっと大きいので、これだけで「有意」なのは分かります。
ちゃんと確率を求めるならば、両側検定なので
pnorm(-5.657)*2
とすると、求まります。e-08は10のマイナス8乗のことです。
binom.test(60, 200)
かたや1.54e-08で、かたや1.51e-08なので、まあまあ正確ですね。

近似はデータ数が多いときだけ使える
標準正規分布を使う方法は、あくまでも近似式なので、データ数が少ないほど不正確になります。
データ数が少ない場合についても、同じようにRで計算してみましょう。
10回中9回成功した場合です。
(9-10*0.5)/(10*0.5*(1-0.5))^0.5
x <- (9-10*0.5)/(10*0.5*(1-0.5))^0.5
pnorm(-x)*2   #Z値から求めたP値は0.01141ですね。
binom.test(9, 10)  #近似せずに計算するとP値は0.02148
2倍近くP値が違いますね。

5匹中0匹みたいなデータで同じようにやってみると
x <- (0-5*0.5)/(5*0.5*(1-0.5))^0.5
pnorm(x)*2   #この計算ではP = 0.025 < 0.05ですが
binom.test(0, 5)  #本当はP = 0.0625 > 0.05です。
これでは、「有意」についての結論が違ってしまいます。

最后修改: 2021年02月13日 星期六 10:52