LoginSignup
0

More than 1 year has passed since last update.

scipy.stats: Fisher の正確検定  fisher_exact <-- 使うな!!

Last updated at Posted at 2022-05-30

scipy.stats: Fisher の正確検定  fisher_exact <-- 使うな!!

この際,はっきり言おう。

Fisher の正確検定は,決して使ってはいけない

そもそも,Fisher の正確検定の前提は,実際に使われている場面とかけ離れている。

代替案というか,Fisher の正確検定を使わないで,「連続性の補正をしない$\chi^2$検定を使いなさい」ということに尽きるようだ。

それを受け入れられない人は,いろいろ自分で調べてみよう。その上で使いたい場合は自己責任でどうぞ。

ということで,以下は読む必要なし


fisher_exact(table, alternative='two-sided')

引数には 2×2 分割表を与える。デフォルトで両側検定である(alternative='two-sided'。他に 'less'’greater' が指定できる)。

戻り値は「オッズ比」と 2 変数が独立であるという検定結果(両側検定)の $p$ 値である。

以下の分割表について検定する。

import numpy as np
tbl = np.array([[15, 9], [9, 18]])
from scipy.stats import fisher_exact
fisher_exact(tbl)
(3.3333333333333335, 0.051250670703359466)

オッズ比は以下のように計算される。

odds_ratio = (tbl[0,0] * tbl[1,1]) / (tbl[0,1] * tbl[1,0])
print(f"オッズ比 = {odds_ratio}")
オッズ比 = 3.3333333333333335
fisher_exact より優れているという2 つの検定法が実装されている詳しくは自分で調べてみよう

確かにこの例ではFisher の正確検定では有意でない場合でも以下の 2 つの検定では有意となっているつまり検定力が高い強いということである

ただ広く知られていないということは確かである影の実力者なのか口ほどにもないということなのかそのへんの情報も少ない

まあ使わなくても良いということなのだろう

ちなみに, R で実装されている `exact.test` はオプションがたくさんあるのだがどれとも結果が一致しないのはなぜだろう理解不足か?)。
from scipy.stats import barnard_exact
barnard_exact(tbl)
BarnardExactResult(statistic=2.082916624991665, pvalue=0.03991921726930299)
from scipy.stats import boschloo_exact
boschloo_exact(tbl)
BoschlooExactResult(statistic=0.03533077208146509, pvalue=0.04273122668534922)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0