2×2分割表の作成(成功/失敗 × A群/B群)
現代のデータサイエンス実務において、フィッシャーの正確確率検定を数式から手計算する必要はありません。ここではデファクトスタンダードであるR言語とPythonを用いた具体的な実装手順を提示します。
1. R言語での実行手順(fisher.test)
R言語には標準で極めて精度の高いfisher.test関数が組み込まれています。2×2の分割表を入力するだけで、両側検定のp値、オッズ比、そしてオッズ比の厳密な信頼区間が出力されます。
data_matrix <- matrix(c(8, 2, 1, 5), nrow = 2, byrow = TRUE, dimnames = list(Group = c("A群", "B群"), Outcome = c("改善", "不変"))) # フィッシャーの正確確率検定を実行(両側検定) result <- fisher.test(data_matrix) print(result)
実行結果には「p-value」とともに、「odds ratio」と「95 percent confidence interval」が出力されます。デフォルトで両側検定(alternative ="two.sided")が走るため、安全な解析が可能です。
2. Pythonでの実行手順(scipy.stats.fisher_exact)
Pythonでデータ分析を行う場合は、科学計算ライブラリscipyの統計モジュールを利用します。
import scipy.stats as stats # 分割表の定義 [[a, b], [c, d]] table = [[8, 2], [1, 5]] # フィッシャーの正確確率検定を実行 odds_ratio, p_value = stats.fisher_exact(table, alternative='two-sided') print(f"オッズ比: {odds_ratio:.4f}") print(f"p値: {p_value:.4f}")
Pythonのfisher_exactはデフォルトでオッズ比とp値を返します。オッズ比の信頼区間まで厳密に求めたい場合は、scipy.stats.contingency.odds_ratioオブジェクトを利用することで、Rと同様の正確な信頼区間(Clopper-Pearson法等に基づく区間)を取得できます。