目次(まとめ)

◾️ すべての起こりうる場合を考えて、それぞれの発生確率を計算する

◾️ フィッシャーの正確確率検定では、それぞれの場合の発生確率から、実際に観測されたデータの珍しさを検定する

◾️ Rでは、デフォルトの関数を用いて実行可能

◾️ 参考文献

こんにちは、みっちゃんです。

今回の記事では「観測できた結果が偶然なのか必然なのか調べたい」「フィッシャーの正確確率検定の仕組みがよくわからない」という方向けに、フィッシャーの正確確率検定の仕組みからRをつかった実行手順まで、わかりやすく解説します。

すべての起こりうる場合を考えて、それぞれの発生確率を計算する

例として、以下のようなデータが観測されているとします。

このデータは、14人の治験者に対して、本物のクスリと偽物のクスリを使って、本物のクスリの効果があるのか、検証したときの結果例です。

偽物のクスリは6人に、本物のクスリは8人に投与されて、それぞれの治験者にクスリの効果が見られたかどうかをまとめている表になっています。

このような表を「分割表」または「クロス集計表」と呼びます。

フィッシャーの正確確率検定では、このような分割表について、各列(各行)が独立かどうか、この場合では、本物のクスリが、偽物のクスリに比べて有効だと言えるかどうか検定します。

フィッシャーの正確確率検定では、まず、観測されたデータをもとに、観測される可能性のあるすべての場合を考えます。

ここで、すべての治験者の数が14人であること、効果が見られた人数、および、効果が見られなかった人数が、それぞれ7人であること、偽物のクスリが投与された治験者が6人、本物のクスリが投与された治験者が8人であること、といった条件は固定します。

考えられるのは、以下のような7つの場合です。

それぞれの表には、そのデータから計算される確率を示しています(全てを合計すると、1になります)。

つまり、そのデータがどれぐらいの確率で生じる可能性があるのか、ということを示しています。

ちなみに、組み合わせの計算はRを使って実行することができ、例えば、実際に観測されたデータの確率は、以下のように計算できます。

> choose(6,1)*choose(8,6)/choose(14,7)
[1] 0.04895105

フィッシャーの正確確率検定では、それぞれの場合の発生確率から、実際に観測されたデータの珍しさを検定する

検定を行う場合には、あらかじめ「帰無仮説」を設定する必要があります。

例えば「本物のクスリと偽物のクスリは、有効性に差がない」という帰無仮説を設定して、その確率が有意水準(例:p = 0.05)より小さくなれば、その帰無仮説が誤っていたと棄却されて「本物のクスリと偽物のクスリは、有効性に差がある」と言えます。

また、検定には「両側検定」と「片側検定」というのがあります。

通常、両側検定を行いますが、今回の例のように、「偽物のクスリの有効性」ではなく「本物のクスリの有効性」に興味がある場合には、片側検定を行う場合があります。

両側検定

上に示した7つの場合の確率のうち、実際に観測されたデータの確率以下を示す確率をすべて足すことで、検定に用いるp値を求めます。

(p値) = 0.002331002 + 0.04895105 + 0.04895105 + 0.002331002 = 0.1025641

となり、有意水準(p = 0.05)より大きく、帰無仮説を棄却できません。

したがって、「本物のクスリの有効性は確認できない」ということになります。

片側検定

上に示した7つの場合の確率のうち、実際に観測されたデータの確率以下を示し、かつ、本物のクスリの有効性が示唆される側の確率をすべて足すことで、検定に用いるp値を求めます。

(p値) = 0.002331002 + 0.04895105 = 0.05128205

となり、有意水準(p = 0.05/2)より大きく、帰無仮説を棄却できません。

ちなみに、逆側の確率を足すと、以下のようになります。

(p値) = 0.04895105 + 0.2447552 + 0.4079254 + 0.2447552 + 0.04895105 + 0.002331002 = 0.9976689

Rでは、デフォルトの関数を用いて実行可能

まず、検定したいデータ(実際に観測されたデータ)を読み込みます。

> mx = matrix(c(1, 6, 5, 2), nrow=2, byrow=T)
> mx
     [,1] [,2]
[1,]    1    6
[2,]    5    2

フィッシャーの正確確率検定は、以下のように実行するだけです。

> fisher.test(mx)

	Fisher's Exact Test for Count Data

data:  mx
p-value = 0.1026
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
 0.001222521 1.388235111
sample estimates:
odds ratio 
0.08534283 

結果に「p-value = 0.1026」となっていることからもわかるように、デフォルトでは「両側検定」が実行されます。

「片側検定」を実行したい場合には、「fisher.test(mx, alternative = "l")」または「fisher.test(mx, alternative = "g")」と実行します。

> fisher.test(mx, alternative = "l")

	Fisher's Exact Test for Count Data

data:  mx
p-value = 0.05128
alternative hypothesis: true odds ratio is less than 1
95 percent confidence interval:
 0.00000 1.01241
sample estimates:
odds ratio 
0.08534283 

> fisher.test(mx, alternative = "g")

	Fisher's Exact Test for Count Data

data:  mx
p-value = 0.9977
alternative hypothesis: true odds ratio is greater than 1
95 percent confidence interval:
 0.00247541        Inf
sample estimates:
odds ratio 
0.08534283 

これらの結果は、上で解説した際の結果と一致しているので、確認してください。

ちなみに、p値だけを出力させたい場合には、以下のようにすればOKです。

> fisher.test(mx)$p.value

参考文献

栗原伸一・丸山敦史「統計学図鑑」オーム社