
はじめに
製造業や医療・臨床研究の現場では、以下のような検証を行うことが多くあります。
・製造条件を変えた時に不良率は改善したのか?
・薬Aと薬Bで効果に違いはあるのか?
・アンケート結果に偏りがあると言えるのか?
このようなカテゴリデータに対して統計的な差を確認する際、代表的な手法としてχ二乗検定(カイ二乗検定)があります。
しかし、ここで注意しなければならないポイントがあります。
それは、「データ数が少ない場合、本当にχ二乗検定を使って良いのか?」という点です。
実はχ二乗検定は、χ二乗分布による近似を利用してp値を求めています。そのため、データ数が十分多い場合は問題ありませんが、データ数が少ない場合は近似精度が悪くなり、正しい判断ができない可能性があります。
このような少数データのカテゴリ解析で活躍するのが「フィッシャーの正確検定(Fisher’s exact test)」です。
フィッシャーの正確検定では近似計算ではなく、実際にその結果が発生する確率を直接計算するため、サンプル数が少ない場合でも使用できます。
本記事では、
・フィッシャーの正確検定とは何か?
・χ二乗検定との違い
・フィッシャーの正確検定の計算方法
・Excelで実践する方法
についてわかりやすく解説します。
・χ二乗検定との違いは、近似計算ではなく正確な確率計算を行う点
・期待度数が5未満の場合は、χ二乗検定よりフィッシャーの正確検定が有効
・超幾何分布を用いて、観測結果以上に偏った結果が起こる確率(p値)を計算する
・ExcelではHYPGEOM.DIST関数を使って計算できる
フィッシャーの正確検定はどんな時に使う?

フィッシャーの正確検定とは、2×2分割表(クロス集計表)などのカテゴリデータにおいて、2つの項目に関連があるかを調べる統計手法です。
特に以下のような場合に使用されます。
・カテゴリデータを比較したい
・2×2のクロス集計表で評価したい
・サンプルサイズが少ない
・期待度数が5未満のセルが存在する
一般的には「期待度数が5未満の場合はフィッシャーの正確検定を検討する」という基準が用いられます。※参考:Cochranの基準では、χ二乗検定では期待度数が小さい場合に近似精度が低下することが知られています。
例えば、薬Aと薬Bで効果の有無を比較した以下のデータを考えます。
| 薬の種類 | 改善あり | 改善なし | 合計 |
|---|---|---|---|
| 薬A | 8 | 2 | 10 |
| 薬B | 3 | 7 | 10 |
| 合計 | 11 | 9 | 20 |
この場合、一部の期待度数が5未満となるため、χ二乗検定よりもフィッシャーの正確検定を使用する方が適しています。
※期待度数は例えば薬A×改善なしで10×9÷20 = 4.5
χ二乗検定とフィッシャーの正確検定の違いをまとめると以下になります。
| 比較項目 | χ二乗検定 | フィッシャーの 正確検定 |
|---|---|---|
| 対象データ | カテゴリデータ | カテゴリデータ |
| 向いている条件 | データ数が多い場合 | データ数が少ない場合 |
| 計算方法 | χ二乗分布による 近似計算 |
発生確率を直接計算 |
| 少数データ | 精度低下の可能性あり | 使用しやすい |
| 判断基準 | 期待度数が十分大きい | 期待度数5未満を含む場合 |
どちらもカテゴリデータの関連性を調べる検定ですが、大きな違いは「p値の求め方」です。
・χ二乗検定:χ二乗分布を利用した近似計算
・フィッシャーの正確検定:発生確率を直接計算
つまり、フィッシャーの正確検定は小さいサンプルサイズでも正確な確率計算ができることが特徴です。
フィッシャーの正確検定の実施方法

ここからは数理的な観点にも触れながら、フィッシャーの正確検定の流れを説明します。
今回は以下の薬A・薬Bの効果比較を例に考えます。
| 薬の種類 | 改善あり | 改善なし | 合計 |
|---|---|---|---|
| 薬A | 8 | 2 | 10 |
| 薬B | 3 | 7 | 10 |
| 合計 | 11 | 9 | 20 |
検定の流れは以下です。
①帰無仮説、対立仮説を設定する
②各パターンが発生する確率を計算する
③p値から有意差を判定する
順番に確認していきましょう。
帰無仮説・対立仮説の設定
まずは統計検定で必ず必要となる帰無仮説と対立仮説を設定します。
(フィッシャーの正確検定に限らず非常に重要です!)
今回確認したいことは、「薬の種類によって改善率に差があるのか?」です。
そのため、仮説は以下になります。
・帰無仮説 H0:薬の種類と改善率に関連はない
・対立仮説 H1:薬の種類と改善率に関連がある
フィッシャーの正確検定では、この帰無仮説が正しいと仮定した時に、現在得られたような偏りが偶然発生する確率を求めます。
超幾何分布から発生確率を計算する
フィッシャーの正確検定では、超幾何分布という確率分布を利用します。
少し難しく聞こえますが、考え方はシンプルです。
「合計人数が決まっている状態で、このような偏った結果になる確率はどれくらいか?」を計算しています。
2×2分割表を以下のように表します。
| 結果あり | 結果なし | 合計 | |
|---|---|---|---|
| 群1 | a | b | a+b |
| 群2 | c | d | c+d |
| 合計 | a+c | b+d | n |
この時、それぞれの組み合わせが発生する確率を計算し、観測された結果以上に偏ったパターンの確率を合計します。
この合計値がフィッシャーの正確検定におけるp値になります。
今回は以下の薬A・薬Bの改善効果を例に考えます。
| 薬の種類 | 改善あり | 改善なし | 合計 |
|---|---|---|---|
| 薬A | 8 | 2 | 10 |
| 薬B | 3 | 7 | 10 |
| 合計 | 11 | 9 | 20 |
ここで重要なのは、フィッシャーの正確検定では「周辺合計を固定する」という考え方です。つまり、
・薬Aを使用した人数:10人
・薬Bを使用した人数:10人
・改善した人数:11人
・改善しなかった人数:9人
という条件は変えず、「薬Aで改善した人数が8人以上になる確率はどれくらいか?」を計算します。具体的な数式と計算方法は次項で解説します
観測された結果になる確率を求める(p値の元)
今回観測された結果は以下です。
・薬A改善あり:8人
・薬A改善なし:2人
・薬B改善あり:3人
・薬B改善なし:7人
この組み合わせになる確率は、超幾何分布を用いて以下の式で計算できます。
それぞれの意味は、
・20人の中から薬A群10人を選ぶ全パターン
・改善者11人の中から8人が薬Aになるパターン
・未改善者9人の中から2人が薬Aになるパターン
を表しています。
計算すると、
P = 165 × 36 184756
P = 0.0322
になります。
つまり、「改善率に差がないと仮定した場合でも、今回のような結果になる確率は約3.2%」という意味になります。
さらに極端な結果も考慮する
ここで注意が必要なのは、フィッシャーの正確検定のp値は、観測された結果だけではないという点です。今回確認したいのは、「薬Aの方が改善率が高いと言えるほど偏っているか?」です。
そのため、さらに極端なケースも足し合わせます。
今回であれば
・薬A改善:8人
・薬A改善:9人
・薬A改善:10人
とった、観測された結果よりもされに極端な事象についてそれぞれの発生確率を求めます。
上で計算した方法と同様に計算すると、以下のようになります。
| 薬A改善人数 | 発生確率 |
|---|---|
| 8人 | 0.0322 |
| 9人 | 0.0027 |
| 10人 | 0.0001 |
これらを合計すると、
となります。
これがフィッシャーの正確検定におけるp値です。
p値をもとにした判定
検定によって算出された p値(有意確率) を基準に、帰無仮説を棄却するかどうかを判断します。一般的には有意水準5%(0.05)を基準として、以下のように判定します。
| p値の条件 | 判定 | 解釈 |
|---|---|---|
| p値 < 0.05 | 帰無仮説を棄却する | 薬の種類と改善率には 関連があると言える |
| p値 ≧ 0.05 | 帰無仮説を棄却できない | 薬の種類と改善率に 関連があるとは言えない |
ただし、p値が0.05以上の場合は「関連が全くないことを証明した」という意味ではありません。あくまで「今回のデータからは、関連があると判断できる十分な証拠が得られなかった」という解釈になります。この考え方自体は、t検定やχ二乗検定など他の統計検定と同じです。
Excelでフィッシャーの正確検定を実施する方法

フィッシャーの正確検定はExcel関数を組み合わせることで実施できます。
使用する代表的な関数が以下です。
フィッシャーの正確検定では、2×2分割表の周辺合計を固定した条件で、観測結果やそれ以上に極端な結果が発生する確率(p値)を計算する際に使用します。
構文の意味するところは以下になります。
=HYPGEOM.DIST(成功数, 標本数, 母集団成功数, 母集団サイズ, FALSE)
この関数を使用することで、それぞれの組み合わせが発生する確率を求めることができます。その後、観測値と同じ、またはそれ以上に極端な結果となる確率を合計することで、フィッシャーの正確検定のp値を計算できます。
それぞれの改善人数となる確率は以下のように求められます。
計算結果:0.0322
計算結果:0.0027
計算結果:0.0001
p値 = 0.0322 + 0.0027 + 0.0001
p値 = 0.0350
フィッシャーの正確検定の注意点

フィッシャーの正確検定を使用する際に注意したい点があります。
それは、差の大きさまでは判断できないという点です。
よく勘違いされますが、「有意差あり=影響が大きい」ではありません。フィッシャーの正確検定で判断できるのは、あくまで「統計的に関連があると言えるか」です。
例えば、p値=0.03となった場合、統計的な差はあると判断できます。
しかし、その差が実用上意味のある大きさなのかまでは判断できません。そのため実務では以下も合わせて確認することが重要です。
・実際の割合差
・オッズ比
・信頼区間
信頼区間の基本的な考え方から95%信頼区間の意味、計算方法まで初心者にもわかりやすく解説しています。
まとめ
カテゴリデータに対する検定を学んだ後、多くの技術者が陥りやすいミスがあります。
それが、「データ数が少ないにも関わらずχ二乗検定を実施してしまう」ということです。
χ二乗検定とフィッシャーの正確検定は同じデータを使用しても、算出されるp値が異なる場合があります。
その結果、本来とは異なる統計判断をしてしまう可能性があります。
クロス集計表を用いるカテゴリデータ解析では、すぐに検定を実施するのではなく、まず期待度数を確認しましょう。
・十分なデータ数がある→ χ二乗検定
・期待度数が小さい→ フィッシャーの正確検定
という使い分けを理解することが重要です。適切な統計手法を選択するために、以下の記事も参考にしてください。
クロス集計表を用いて2つのカテゴリ間に関係性があるかを判断するχ二乗検定(独立性の検定)について、計算方法やp値の解釈まで実例を用いて解説します。
統計的仮説検定で必ず出てくる「p値」についてわかりやすく解説!
統計検定で必ず登場する帰無仮説(H0)と対立仮説(H1)について、考え方から判定方法まで初心者向けに解説しています。
