Fisher正確確率またはカイ二乗検定から多重比較へ

井口豊(生物科学研究所

最終更新:2016年12月6日

統計学関連のトピックスは,生物科学研究所・井口研究室のトップページ,あるいは,このサイトのトップページ参照。


以下の,教育学論文の統計データ解析を指導したのは私だが(末尾の謝辞に名前がある),そこでも,Fisher 正確確率検定と Benjamini and Hochberg 多重比較法が用いられた。

尾之上高哉・林原有佳・宇野宏幸(2015)

項目間の多重比較でなく,残差分析を行う場合は,以下の Yahoo! 知恵ノートの私の解説ページ参照。
多重比較とは直接関係しないが,最近,私がデータ解析で関わった看護師の修士研究で,手指を洗浄・消毒後に検出される芽胞形成菌数が,日常生活の納豆摂食頻度に関連することが,カイ二乗検定で示された。
誰か,これに関して,さらに詳細な研究を行ない,多重比較や相関分析で,確認してほしい。

***********
3群以上の群相互間の比率の差の検定(多重検定 multiple comparison test)として,Fisherの正確確率検定Benjamini & Hochberg法によって有意水準の調整を行なった。Benjamini & Hochberg法は,良く知られたBonferroni法やHolm法より,総じて検出力が高い(Benjamini & Hochberg, 1995,文末に文献掲載)。

Rパッケージfmsbの中のpairwise.fisher.test関数を使った多重比較法に関しては,ページ後半に書かれている。

ここでは,Fisherの正確確率検定のみを取り上げたが,カイ二乗検定を行った後に多重比較を行なう場合も同様に考えられる。

Benjamini & Hochberg法の理論的解説として分かりやすく,かつ,Bonferroni法やHolm法との検出力の違いを示しているのは,例えば,大阪大学腎臓内科によるClinical Journal Club,その中の 1. 多重比較である。

参考文献は,このページ末尾に挙げた。

統計解析ソフトRを用い,実際のプログラムとしては,js-STAR 2012カイ二乗検定i×j表に出力されるRのプログラムを応用した。

解析したデータは,Yahoo!知恵袋のha2ako7(2014-07-14, 15:01:27のデータである。

ここでは,カテゴリ1において,4つのグループ,A,B,C,Dで,アンケートを記述した人数の比率の差を検定した。

まず,4×2を作り,縦4行をA,B,C,Dのグループとして,横2列に,それぞれ記述した人数,記述しなかった人数を入力する。つまり,以下のような入力状況となる。

js-STAR 2012カイ二乗検定2×4表

これで,計算ボタンをクリックすると,一番下に,Rプログラムが,このデータを入力した状態で出力される。

このプログラムの中で,特に,Fisherの正確確率検定とBenjamini & Hochberg法に関わる部分を抜き出し,修正を加えたのが,下のプログラムである。

修正したのは,日本語は英語に,全角は半角に直した点である。基本的に,コンピュータプログラムは,半角英語で書いたほうが汎用的であり,世界中で通用する。

プログラム冒頭のdosu(度数)部分に,さきほどの4×2表データが入力されているので,ここの数値を変えれば,他のグループの検定も同様にできる。

Rが自由に使えれば,そのコンソール画面に下のプログラムをコピペして計算させれば良い。しかし,それが使えない人は,Rweb または General Rweb Interface を使えば良い。Rwebの一番上の四角の空欄に,下のプログラムをコピペして,Submitボタンを押すと,計算結果が出力される。

R本体を使った結果
                 p値  調整後p値
群1 vs 群2   0.2453       0.2453
群1 vs 群3   0.0298       0.0447
群1 vs 群4   0.0103       0.0206
群2 vs 群3   0.0000       0.0001
群2 vs 群4   0.0004       0.0013
群3 vs 群4   0.2403       0.2453
# p値の調整は Benjamini & Hochberg(1995) による

Rwebに私が作った下のプログラムを入力して実行した結果

           p-value  adjusted p-value 
G1 vs G2    0.2453            0.2453 
G1 vs G3    0.0298            0.0447 
G1 vs G4    0.0103            0.0206 
G2 vs G3    0.0000            0.0001 
G2 vs G4    0.0004            0.0013 
G3 vs G4    0.2403            0.2453 
Rweb: #Adjusted p-values were based on Benjamini and Hochberg (1995) 

これより下の部分がjs-STAR 2012カイ二乗検定i×j表に出力されるRプログラムを応用したプログラムとなる。この例では,4群(4標本)の比率を扱っているが,もちろん,データを加えれば,自由に標本の数,いわゆるサンプル数を変えられる。

プログラム冒頭
dosu が頻度データ
levI が行数
levJ が列数
である。

なお,私がいつも口を酸っぱくして注意しているのだが,統計学上の「標本数(サンプル数)」とは「群数」のことである。標本サイズ(サンプルサイズ)と混同しないで欲しい。

以下のプログラムを R 本体またはオンラインの Rweb General Rweb interface にコピペして使う。 

dosu <- c(
  14,  2,
  48,  2,
  9,  10,
  0,  3 )

levI <- 4
levJ <- 2

pchi <- c()
for(i in 1:(levI-1))
  {
for(k in (i+1):levI)
  {
  ds <- c()
  for(j in 1:levJ)
    {
    ds <- c(ds, dosu[(i-1)*levJ+j])
    }
  for(j in 1:levJ)
    {
    ds <- c(ds, dosu[(k-1)*levJ+j])
    }
  pchi <- c(pchi,
    fisher.test(
      matrix(ds, nr=2, by=1)
      )$p.va )
  } }
padj <- c()
padj <- p.adjust(pchi, "BH")

tx3 <- c()
tx3 <- matrix( c(
  round(pchi, 4),
  round(padj, 4)
  ), nr=(levI^2-levI)/2 )

kochi<-c(); aite<-c()
for(i in 1:(levI-1))
  {
for(j in (i+1):levI)
    {
    kochi <- c(kochi, paste("G", i, sep=""))
    aite  <- c(aite,  paste("G", j, sep=""))
    }
  }
rownames(tx3) <- paste(
  kochi, aite, sep=" vs ")
colnames(tx3) <- c(
  "  p-value",
  " adjusted p-value" )
tx3
#Adjusted p-values were based on Benjamini and Hochberg (1995)

もしRwebを使うことなく,R本体を自由に使えるならば,Fisherの正確確率検定による多重比較は,パッケージfmsbの中のpairwise.fisher.test関数を使うと便利である。多重検定法のデフォルトはHolm法となっているが,オプションとして,前述のBenjamini & Hochberg法やBonferroni法も利用できる。

ただし,この関数の引数として注意すべき点は,比較対象の度数の一方と,それを含む全体の度数を入力することである

例えば,前述の度数データを用いて,Benjamini & Hochberg法によって有意水準の調整を行なった結果を示すなら,以下のようになる。

library(fmsb)
x <- c(
  14,
  48,
   9,
   0)

n <- c(
   14+2,
   48+2,
     9+10,
    0+3)
pairwise.fisher.test(x, n, p.adjust.method="BH")

多重比較の結果
       1          2            3     
2  0.2453 -      -     
3  0.0447  8e-05  -     
4  0.0206  0.0013  0.2453

前述のjs-STAR 2012による調整後p値と全く同じ結果だと分かる。

参考文献
Benjamini, Y. & Hochberg, Y. (1995) Controlling the false discovery rate: a practical and powerful approach to multiple testing. Journal of the Royal Statistical Society. Series B (Methodological), 57(1): 289-300.

著者紹介

井口豊
生物科学研究所 長野県岡谷市