フィッシャーの直接確率検定

Rにてフィッシャーの直接確率検定 (Fisher exact test) を行う。直接確率検定は正確確率検定と訳されることも多い。推定統計学の父Ronald Aylmer Fisherによって開発された。本検定法は分割表 (クロス集計表) における2つ以上のカテゴリーが独立であるかどうかを調べる手法である。すなわち、観測された2つ以上の分類が互いに無関係であるか、または何らかの関係性を有しているかを検定する方法である。同様の検定を行うものにカイ二乗検定 (適合度検定・独立性の検定) があるが、分割表のセルの期待値に10未満のものがある場合はカイ二乗検定は避け、フィッシャーの直接確率検定を用いるほうが良いとされる。

フィッシャーの直接確率検定のコンセプトは非常にシンプルである。本検定法では、観測された分割表に対し、観測され得る値の全出現パターンの生起確率をそれぞれ超幾何分布にて計算し、それらの中で観測された分割表の生起確率よりも小さい生起確率を有する分割表の生起確率の和をp値と定義する。その名の通り、データの出現パターンを直接計算して確率を割り出すナイーブな手法であるが、それ故にデータ数が大きい場合は非常に大きな計算量が必要になり、コンピューターなしでは計算できなくなる。Rではデフォルトでインストールされている関数 'fisher.test' を用いることで実行できる。

以下のように2x2の分割表が得られたとき、行および列で示される2要因が互いに独立であるかどうかは以下のように検定する。帰無仮説 (H0) は2要因間に独立性が成り立つこと、すなわち、2要因の比率に差がない、または、2要因が互いに無関係であることである。有意水準5%にて検定する。

項目1項目2
分類A2 (a)10 (b)
分類B15 (c)3 (d)

まず、Rを起動させ、以下のコマンドにて、上の分割表を変数 'table' に格納する。

1|$table=matrix(c(2, 10, 15, 3), nrow=2, byrow=T, dimnames=list(c("cat.A", "cat.B"), c("item.1","item.2")))

フィッシャーの直接確率検定はコマンド 'fisher.test' にて実行する。この関数はRにデフォルトでインストールされているパッケージに含まれている。検定は、最も簡単には、以下のようにコマンドを打つ。

1|$fisher.test(table)
        Fisher's Exact Test for Count Data

data:  table 
p-value = 0.0005367
alternative hypothesis: true odds ratio is not equal to 1 
95 percent confidence interval:
 0.003325764 0.363182271 
sample estimates:
odds ratio 
0.04693661

以上の結果では、p値が '0.0005367' となっており、有意水準を5%で帰無仮説が棄却され、行および列の2要因の間には何らかの関連性があることが示唆された。'alternative hypothesis' とある行には、対立仮説が明記されている。上の場合の対立仮説は、'オッズ比が1とは有意に異なること' である。オッズ比とは上の2x2の分割表における 'ad/cd' を計算した値であり、要因間の関連の強さをあらわす指標である。独立性の検定とは超幾何分布によるオッズ比の検定ともいえる。この対立仮説のオッズ比の値は以下の 'or' コマンドで別の値に指定することが可能である。結果の次の行には、オッズ比の95%信頼区間が表示される。計算させる信頼区間の幅等は以下のオプションで変更できる。最後の行の値は、超幾何分布に基づいたオッズ比の最尤推定量である。

また、上は2x2の分割表における検定であるが、以下のような2x2より大きい分割表の検定も実行できる。

項目1項目2項目3
分類A2108
分類B1532

以下のように実行する。

1|$table=matrix(c(2, 10, 8, 15, 3, 2), nrow=2, byrow=T, dimnames=list(c("cat.A", "cat.B"), c("item.1","item.2","item.3")))
2|$fisher.test(table)
        Fisher's Exact Test for Count Data

data:  table 
p-value = 0.0001025
alternative hypothesis: two.sided

このように、2x2より大きい分割表を対象にした検定では、信頼区間やオッズ比は計算されない。結果の 'p-value' と書かれている値がp値である。その下には、検定を両側検定で行ったことが明記されている。両側検定を行うか片側検定を行うかは以下のオプションで選択できる。

オプションには以下のようなものがある。

OptionDescription
x行列形式にて分割表 (クロス集計表) を指定する。
yデータを 'factor(c(2, 10))' のような因子形式で読み込む。yに因子を指定する場合は、xにも因子を指定する。
workspace2x2より大きい分割表を対象とする場合に、正確なp値を計算するためのメモリ容量を指定。整数を指定。
hybrid'T' または 'F' で指定。2行2列より大きい分割表を対象とする場合に、コクランの条件 (どのセルにも '0' が出現しておらず、かつセルの値が5以上であるものが80%以上を占める場合) を満たす場合にカイ二乗分布への近似からp値を計算し、それ以外の場合には正確なp値を計算するハイブリッド法を利用するかどうかの指定。
or検定に用いるオッズ比の指定。2x2の分割表を対象とするときのみ指定できる。
alternative両側検定か片側検定の指定。'alternative="t"' のように指定する。両側検定は 't'、左側検定は 'l'、右側検定は 'g'を指定する。両側検定は、オッズ比が1 (または 'or' で指定した値) から有意に異なるかどうかの検定、左側検定はオッズ比が1より有意に小さいか、右側検定はオッズ比が1より有意に大きいかの検定である。
conf.intオッズ比の信頼区間を表示させるかどうかの指定。'T' または 'F' で指定。
conf.level表示させる信頼区間を指定。0以上1より小さい数を入力する。
simulate.p.value2x2より大きい分割表を対象とする場合に、p値の算出にモンテカルロシミュレーションを用いるかどうかの指定。'T' または 'F' で指定。
Bモンテカルロシミュレーションを行う場合のその試行回数の指定。
このエントリーをはてなブックマークに追加

Site search

ページのトップへ戻る