Fisherの正確確率検定

1ページ 2ページ 3ページ

間違った解釈をしないように!

これまで使用してきた分割表

R
tab <- matrix(c(12,6,3,8), ncol=2)
print(tab)
> print(tab)
        effect
severity yes no
  severe  12  3
  mild     6  8

帰無仮説: severeのオッズ = mildのオッズ
対立仮説: severeのオッズ > mildのオッズ

severeのオッズ がmildのオッズより有意に大きいことを証明する。Fisherの直接法により有意水準5%で両側検定を実施する。

R
fisher.test(tab)
data:  matrix(c(12, 6, 3, 8), ncol = 2)
p-value = 0.06043
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
  0.8163182 40.7244582
sample estimates:
odds ratio 
  5.003853 
R
exact2x2(tab, tsmethod="central")
data:  matrix(c(12, 6, 3, 8), ncol = 2)
p-value = 0.09203
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
  0.8163182 40.7244582
sample estimates:
odds ratio 
  5.003853 

最小尤度、centralともにp>0.05となり有意差なし・・・、という回答は間違いである。fisher.testのデフォルトを確認

R
?fisher.test
fisher.test(x, y = NULL, workspace = 200000, hybrid = FALSE,
            hybridPars = c(expect = 5, percent = 80, Emin = 1),
            control = list(), or = 1, alternative = "two.sided",
            conf.int = TRUE, conf.level = 0.95,
            simulate.p.value = FALSE, B = 2000)

alternative = “two.sided” がデフォルトであり、両側検定が初期設定となっている。しかし、今回の検定では「片側検定を5%水準で行う」と宣言しているため、alternative = “less” または “greater” を設定しなければならない。どちらを選択すべきかについては、先に述べたように X≧12 となる確率を求めることになる。したがって、alternative = “greater” と設定し、上側検定を実行するものである。

R
fisher.test(tab, alternative = "greater")
R
exact2x2(tab, alternative = "greater")
data:  matrix(c(12, 6, 3, 8), ncol = 2)
p-value = 0.04601
alternative hypothesis: true odds ratio is greater than 1
95 percent confidence interval:
 1.029929      Inf
sample estimates:
odds ratio 
  5.003853 

p=0.046p = 0.046 となり、帰無仮説は棄却される。その結果、severe のオッズは mild のオッズより有意に大きいと解釈される。ここで重要となるのは、オッズ比の解釈である。分割表の配置が異なれば、当然ながら結果の解釈も変化する。そのため、どちらが分子でどちらが分母となっているかを適切に判断する必要がある。以下の分割表では、no と yes を入れ替えている。

R
tab_m <- tab[, c(2, 1)] 
print(tab_m)
> print(tab_m)
        effect
severity no yes
  severe  3  12
  mild    8   6

これで列が入れ替わりました.検定してみましょう。

R
fisher.test(tab_m, alternative = "greater")
> fisher.test(tab_m, alternative = "greater")

        Fisher's Exact Test for Count Data

data:  tab_m
p-value = 0.9935
alternative hypothesis: true odds ratio is greater than 1
95 percent confidence interval:
 0.03358399        Inf
sample estimates:
odds ratio 
  0.199846 

この場合のオッズ比は、

tab_mのオッズ比=$\frac{severのno}{severのyse}/\frac{mildのno}{mildのyse}$

Rで分割表を検定する場合は、このことに十分気を付けながら実行しなければならない。

3群以上の場合

Fisherの正確確率検定は、通常2×2の分割表に対して用いられるが、Rでは3×2のような分割表にも適用することが可能である。この場合、行(群)と列(yes/no)の独立性を検定しており、「オッズが等しいかどうか」という仮説とは異なるものである。ここでは、方法のみ記載しておく。

R
tab3 <- matrix(c(15, 12, 6, 3, 3, 10), 3, 2)
rownames(tab3) <- c("level 1", "level 2", "level 3")
colnames(tab3) <- c("yes", "no")
print(tab3)
> print(tab3)
        yes no
level 1  15  3
level 2  12  3
level 3   6 10

オッズ=$\frac{yes}{no}$

帰無仮説:レベル1, 2, 3のオッズは等しい
対立仮説:レベル1, 2, 3のオッズは等しくない(3群のどこかでが異なる)

fisherの正確検定
R
fisher.test(tab3)
> fisher.test(tab3)

        Fisher's Exact Test for Count Data

data:  tab3
p-value = 0.0103
alternative hypothesis: two.sided

結果は p=0.0103p = 0.0103 であり、統計的に有意な差があると判断される。なお、オッズ比の比較を目的とする場合には、ロジスティック回帰などの手法が適している。

カイ二乗検定
R
chisq.test(tab3)
> chisq.test(tab3)

        Pearson's Chi-squared test

data:  tab3
X-squared = 9.6654, df = 2, p-value = 0.007965

警告メッセージ:
chisq.test(tab3) で: カイ自乗近似は不正確かもしれませ

p値はわずかに異なるものの、カイ二乗検定においても有意であるという結果が得られる。

多重比較

グループ間の割合に差があるという結果から、多重比較を行う場合が多いと考えられる。しかしながら、個人的には井口先生の見解に賛同するものである。以下を参照されたい。

Fisher 正確検定の後に多重比較するな
Fisher 正確検定の後に,下位検定(事後検定 post hoc test)として,多重比較(Bonferroni, Holm など)を行うことは適切ではない。

このことを理解した上で、多重比較の方法のみを記載しておく。使用するパッケージは RVAideMemoire である。インストールしていない場合は、install.packages(“RVAideMemoire”) を用いる。

R
library(RVAideMemoire)

以下のようなp値調整の方法がある

p.adjust.methods
# c("holm", "hochberg", "hommel", "bonferroni", "BH", "BY",
#   "fdr", "none")

Adjust P-values for Multiple Comparisons

ホルム

A=1行目、B=2行目、C=3行目.

R
fisher.multcomp(tab3, p.method="holm")
> fisher.multcomp(tab3, p.method="holm")

        Pairwise comparisons using Fisher's exact test for count data

data:  tab3

        level 1 level 2
level 2 1.00000       -
level 3 0.03673 0.05802

P value adjustment method: holm
ボンフェローニ
R
fisher.multcomp(tab3, p.method="bonferroni")
> fisher.multcomp(tab3, p.method="bonferroni")

        Pairwise comparisons using Fisher's exact test for count data

data:  tab3

        level 1 level 2
level 2 1.00000       -
level 3 0.03673 0.08702

P value adjustment method: bonferroni

どちらの方法も1行目と3行目に有意差ありという判定でした。

比率の検定(1標本問題:10人中\(k\)人が転倒した町)
「母比率の検定」と書くべきところですが、理解しやすいようにここでは「比率の検定」というタイトルにしました。検定の前に二項分布について復習しておきましょう。ここでは、僕が考えた例題「10人中6人が転倒経験のあるS町」について考えます。

タイトルとURLをコピーしました