はじめに
データ分析では、異なるカテゴリ間の有意性を確認するために、「フィッシャーの正確確率検定」や「カイ二乗検定」がよく使われます。
しかし、特に小さなサンプル数に対して有効なフィッシャーの正確確率検定は、医療分野や小規模な実験において重要な役割を果たします。
本記事では、フィッシャーの正確確率検定の計算方法を解説し、カイ二乗検定との違いも説明します。
データ分析の際には様々な統計値を見ながら適切な方法に進めていくことが重要です。これらについて、経験豊富な方とマンツーマンで学習していくのもオススメです。
フィッシャーの正確確率検定とは
フィッシャーの正確確率検定は、2×2のクロス集計表において2つのカテゴリ間に有意差があるかどうかを判定するための手法です。
特に小規模なサンプルサイズや、期待度数が小さい(例: 5未満のセルがある)場合に強力で、正確な結果が得られるのが特徴です。
フィッシャーの正確確率検定の計算方法
フィッシャーの正確確率検定では、2×2のクロス集計表を次のように考えます。
| 効果あり | 効果なし | 合計 | |
| 薬を投与されたグループ(A) | a | b | a + b |
| 薬を投与されなかったグループ(B) | c | d | c + d |
| 合計 | a + c | b + d | N |
この式では、それぞれのセルに含まれる観測値の組み合わせを全て考慮して計算します。
これにより、サンプルサイズが小さい場合でも、正確なp値が得られます。
フィッシャーの正確確率検定の具体例
次に、実際の例を用いてフィッシャーの正確確率検定を適用してみます。
| 効果あり | 効果なし | 合計 | |
| 薬を投与されたグループ(A) | 5 | 1 | 6 |
| 薬を投与されなかったグループ(B) | 1 | 6 | 7 |
| 合計 | 6 | 7 | 13 |
これをもとにフィッシャーの正確確率検定を行うと、次のPythonコードで実行できます。
import scipy.stats as stats
import numpy as np
import math
# データのクロス集計表
table = np.array([[5, 1], [1, 6]])
# フィッシャーの正確確率検定を実行
oddsratio, p_value = stats.fisher_exact(table, alternative = 'greater')
print(f"p値: {p_value}")
この結果、p値は0.025となり、有意水準0.05以下であるため、薬を投与されたグループと投与されないグループ間に有意差があると判断されます。
今回調査したのですが、pythonのfisher_exactには計算手法が”two-sided”, “greater”, “less”という3手法が存在します。今回は片側検定a, dが多いときにp値が低くなる”greater”を使っていますが、場合によって変更する必要があります。
色々な記事を見ましたがこの使い分けについて書いてあることが少なかったですが、こちらによってp値が全く変わってくるので注意しましょう。
フィッシャーの正確確率検定が適しているケース
フィッシャーの正確確率検定と合わせて、カテゴリ間の際を見る際には「カイ二乗検定」がよく用いられます。
カイ二乗検定はカイ二乗分布を用いてp値を計算するため、大規模なサンプルに適しています。しかしサンプル数が小さい場合は、信頼性が低下し、結果への影響が大きくなります。
一方、フィッシャーの正確確率検定は分布を仮定しないため、サンプルサイズが小さくても使用することができます。
まとめ
フィッシャーの正確確率検定は、カイ二乗検定のようにカイ二乗分布に基づく近似計算を行わず、全てのデータの組み合わせを考慮したp値を計算します。
このため、サンプルサイズが小さかったり、期待度数が少ない場合でも、正確な結果を提供できる点が大きなメリットです。
実際に現場で活用する際は、サンプル数への依存が少ないため、こちらの「フィッシャーの正確確率検定」の方が使いやすいこともあるかと思います。
下記にカイ二乗検定の記事もまとめているので参考にしてください。

フィッシャーの正確確率検定におススメの勉強方法
書籍:Rで学ぶ確率統計学 多変量統計編
こちらの書籍は「カイ二乗検定」や「フィッシャーの正確確率検定」について記載されており、これらの違いを認識し、活用するにはおススメの書籍になります。
書籍や資格などで学ぶ
フィッシャーの正確確率検定は実用的な方法であるものの、他の様々な手法を学ばないと使いこなせない可能性もあります。
下記に様々な書籍や資格などをまとめたので参考いただければと思います。




コメント