ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

カテゴリー変数の多群比較と多重比較補正(fmsbパッケージ)[R]

以下のような3群(A,B,C)で2値変数を測定したサンプルデータを作成して実行してみる。

> group <- c(rep("A",10),rep("B",10),rep("C",10))
> response <- c(rep(0,8),rep(1,2),rep(0,4),rep(1,6),0,rep(1,9))
> (tbl <- table(response, group))
group
response A B C
0 8 4 1
1 2 6 9

fisher.test( )を使って全体を比較する

サンプル数が多ければchisq.test()を使う。

> fisher.test(tbl)

    Fisher's Exact Test for Count Data

data:  tbl
p-value = 0.007807
alternative hypothesis: two.sided

2群ずつ対比較する

Fisher正確検定を使って3通りの2群比較を行った結果は以下のとおり。

  • A vs. B:P=0.1698
  • A vs. C:P=0.005477
  • B vs. C:P=0.06978

このままだとαエラーが想定より大きくなってしまうので補正が必要。

pairwise.fisher.test( )を使って対比較をする

サンプル数が多くカイ2乗検定を行う場合は、pairwise.chisq.test()を使う。

まず偶現表から「各カテゴリーの陽性数」および「各カテゴリーの合計数」を取り出す。
必要なパッケージも読み込んでおく。

> library(fmsb)
> (n_pos <- tbl[2,])
A B C 
2 6 9 
> (n_total <- apply(tbl,2, sum))
 A  B  C 
10 10 10 

p.adjust.methodで使用する補正方法を指定する。

よく使われる補正方法:bonferroni, holm, hochbergなど

> pairwise.fisher.test(n_pos,n_total, p.adjust.method="bonferroni")

    Pairwise comparisons using Pairwise comparison of proportions (Fisher) 

data:  n_pos out of n_total 

  A     B    
B 0.509 -    
C 0.016 0.910

P value adjustment method: bonferroni 

代表的な補正方法について

Bonferroni法

単純にP値に比較の数を掛け合わせただけ(判定の水準は0.05のままで良い)。3通りの比較ペアがあるので有意水準は3倍厳しくなる。

それぞれの対比較に3をかけると、

  • A vs. B:P=0.1698×3=0.5094
  • A vs. C:P=0.005477×3=0.016431
  • B vs. C:P=0.06978×3=0.9102

となり、前述のBonferroni補正後の結果と一致する。

Holm法

Bonferroni法は保守的すぎるので比較群数が多い時はHolm法がよく使われる。これは一律に比較ペア数(=3)をかけるのではなく、1番小さいP値には×3、2番目に小さいP値には×2、というように計算していく。

実際の計算手順は、

  • まずペア比較で1番小さかったP値には×3をして判定。「有意差あり」なら次へ進む。
    • A対C:P=0.005477×3=0.016431
  • 次に、2番目に小さかったP値に対しては×2をして判定。
    • A対B:P=0.1698×2=0.3396
    • 0.05なのでここで終了。以後のペア比較については上記と同じP値を表示。

pairwise.fisher.test()で計算された結果も同じようになっている。

> pairwise.fisher.test(n_pos,n_total, p.adjust.method="holm")

    Pairwise comparisons using Pairwise comparison of proportions (Fisher) 

data:  n_pos out of n_total 

  A     B    
B 0.340 -    
C 0.016 0.340

P value adjustment method: holm 

Hochberg法*1

補正P値の計算方法はHolm法と同じだが、判定順序が逆。

  • まずペア比較で1番大きかったP値には×1をして判定。有意差があれば、以後の比較は全て有意差ありと判定する。
    • B対C:P=0.3034>0.05なので次に進む。
  • 2番目に大きかったP値に対しては×2をして判定。
    • A対B:P=0.1698×2=0.3396>0.05なので次に進む。
    • 1段階目のP値の方が小さいので、そちらを記載。
  • 3番目に大きかったP値に対しては×3をして判定。
    • A対C:P=0.005477×3=0.016431
    • このペアのみ「有意差あり」と判定。
> pairwise.fisher.test(n_pos,n_total, p.adjust.method="hochberg")

    Pairwise comparisons using Pairwise comparison of proportions (Fisher) 

data:  n_pos out of n_total 

  A     B    
B 0.303 -    
C 0.016 0.303

P value adjustment method: hochberg 

おわりに

  • Bonferroni法, Holm法, Hochberg法はP値の判定基準を変更する補正法。
  • 対比較のP値が得られれば手計算でもできることがメリット。
  • 比較のペア数が多くなるとBonferroni法は極端に保守的になるので避けた方がよい。

参考資料

  • 大阪大学腎臓内科グループの解説がわかりやすい。

www.med.osaka-u.ac.jp

*1:ホッホバーグ