Fisherの正確確率検定

*本サイトのサンプルデータは全て架空のものです

データの準備と要約

例題

新たなトレーニング方法(Z法)が開発されました。果たしてこのトレーニングは運動障害が重度群と軽度群で効果に差があるのか?

Googleでのヒット数(2024.1.24調べ)

Fisherの正確確率検定-> 9200件
Fisherの正確検定->5220件
Fisherの直接確率検定-> 4230件
Fisherの直接法-> 3220件

Fisherの正確検定、Fisherの正確確率検定、Fisherの直接確率検定、Fisherの直接法などと呼ばれています(統一してくれれば良いのにといつも思います)。Fisherの正確確率検定が多かったので、このタイトルに使ってます。

定義

\(\displaystyle オッズ=(\frac{効果あり}{効果なし})\)

  • ここではオッズを効果率と定義します
  • このようにオッズやオッズ比の定義を確認しておくことが重要です

サンプル(架空のサンプルです)

効果あり効果なし
重度群12315
軽度群6814
合計181129

重度群の効果率は4、軽度群の効果率は0.75となります

この効果率の比が「1」か「1ではない」かということを調べるために、下記のオッズ比を利用します

\(\displaystyle (オッズ比 =)(\dfrac{重度群の効果率}{軽度群の効果率})(= 5.33)\)

5.33なのでオッズ比は1より大きいようですが・・・

オッズ比が高くなると重度群の効果率が高くなることを意味しており、オッズ比が1より大きくなると軽度群の効果率より重度群の効果率が高いことを意味します

この検定の仮説は以下のようになります

帰無仮説H0: オッズ比=1(重度群の効果率 = 軽度群の効果率
対立仮説H1: オッズ比1(重度群の効果率 ≠ 軽度群の効果率

Rで分割表の作成

tabという単語の中にサンプルの分割表を挿入してみます

R
tab <- matrix(c(12, 6, 3, 8), 2, 2)
print(tab)

これで「tab」という単語(なんでも構いません)の中に分割表が入りました

ベクトルから作成すると以下のようになります

R
障害 <- c(rep("重症", 12), rep("軽症", 6), rep("重症", 3), rep("軽症", 8))
障害 <- factor(障害)
障害 <- relevel(障害 , ref=c("重症")) 
効果 <- c(rep("あり", 18), rep("なし", 11))
効果 <- factor(効果)

xtabs(
    ~障害 + 効果
)

Fisherの正確検定では、「効果あり=18」となる12パターンの確率を求めます
つまり「効果あり=18」を条件とした場合の確率です

これでFisherの正確検定の準備は完了、有意水準5%で検定してみましょう

研究計画(何を立証したいのか)に従い以下から適切な検定方法を選択します

Rの関数で検定

tabには上記の分割表が入っています

R
fisher.test(tab, alternative = "less")

fisher.test(tab, alternative = "greater")

fisher.test(tab, alternative = "two.sided")

ごちゃごちゃしてますが、以下のように出力されれば成功です

上記結果の3つの違いについて

x:重度群かつ効果あり、効果あり=18は固定
つまり、もとめる確率は、P(X | X=x, 効果あり=18)という条件付き確率となります 

fisher.test(tab, alternative = “less”)

X≦12となる確率を求めます
X=12, X=11, X=10, ・・・, X=4となる確率
つまり効果率がX≦12になる場合の確率です

P(X | x≦12, 効果あり=18) 

\(P(X=12) + P(X=11) + ・・・ + P(X=4)=0.9935\)

*この確率は超幾何分布を使って求めます (後で出てきます)

p値は0.9935なので重度群と軽度群の効果率の差はありません

fisher.test(tab, alternative = “greater”)

X≧12となる確率を求めます
X=12, x=13, X=14, X=15となる確率
つまり効果率がX≧12になる場合の確率です

P(X | x≧12, 効果あり=18) 

\(P(X=12) + P(X=13) + P(X=14) + P(X=15)=0.04601384\)

p-value = 0.04601384
有意水準が0.5%の場合
X が12以上になるのは稀であることを意味します
つまり、効果率は1以上と考え重症群の効果率が有意に高いと判断します

fisher.test(tab, alternative = “two.sided”)

P=0.06043 なので有意差はありません
このp値は後半で説明します

fisher.test(tab, alternative = “greater”) の結果の説明
  1. p-value(p値)
    0.04601384
  2. alternative hypothesis(対立仮説)
    Rは対立仮説を出力します
    真のオッズ比は1ではない
    すなわち・・・p値<0.05なので「重症群と軽度群には有意差があり、
    AM実施群の効果率は有意に高いという結果になります
    注意)両側検定の場合P値が大きくなり有意ではなくなります
  3. 95 percent confidence interval
    下記のオッズ比の95%信頼区間
  4. odds ratio(オッズ比)5.003853
    注意
    これは単純な割り算のオッズ比(5.33)ではありません
    条件付き最尤推定から算出されています(効果あり=18)
    詳細は下記の奥村晴彦先生のページをご参照ください
    https://oku.edu.mie-u.ac.jp/~okumura/stat/fishertest.html

コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください

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