統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

マン・ホイットニーのU検定のサンプルサイズ計算

Toukei Consul Banner

KH Coder Consul Banner

マン・ホイットニー Mann-Whitney のU検定のサンプルサイズ計算はどうやったらいいのか?

統計ソフトRではどうやるか?

エクセルでできないか?

質問

マン・ホイットニー Mann-Whitney のU検定のサンプルサイズ計算をしたい。

どうやったらいいか?

回答

統計ソフトRの”samplesize"というパッケージで、Mann-Whitney U検定のサンプルサイズ計算ができる。

samplesize パッケージのn.wilcox.ord()。Mann-Whitney U検定は、Wilcoxon検定と数学的に同じなため、Wilcoxon-Mann-Whitney検定とも言われるため、n.wilcox.ord()という名前のプログラムである。

正規近似を用いた簡易的な方法である。

samplesizeパッケージをインストールして、library()で呼び出す。

install.packages("samplesize")
library(samplesize)

検出力80%、有意水準5%、両群同数で1:1(t=0.5)、グループ1は33%、33%、34%と三分割したグループが同数に対し、グループ2は、66%、20%、14%だとすると、サンプルサイズは36例ずつ必要と計算される。

> n.wilcox.ord(power=0.8, alpha=0.05, t=0.5, p=c(0.33, 0.33, 0.34), q=c(0.66, 0.20, 0.14))
$`total sample size`
[1] 72

$m
[1] 36

$n
[1] 36

プログラムの中身を公開(2020年4月24日追記)

n.wilcox.ord()のプログラム中の主要な部分を抜き出してみると以下のようになる。計算結果が見やすいように改造してある。

n.wilcox.ord.abs <- function(power=0.8, sig.level=0.05,
t, p, q, alternative=c("two.sided","one.sided")){
 
 alternative <- match.arg(alternative)
 side <- switch(alternative, one.sided=1, two.sided=2)

 Za <- qnorm(sig.level/side, lower.tail=FALSE)
 Zb <- qnorm(power)
 
 pq1 <- function(p,q){
  D <- length(p)
  PQ1 <- 0
  for (i in 2:D){
   PQ1 <- PQ1 + p[i] * sum(q[1:(i-1)])
  }
  return(PQ1)
 }
 p.t <- (1-t)*p
 q.t <- t*q
 pq.t <- p.t+q.t
 pq.t.3 <- pq.t^3
 t.sum <- sum(pq.t.3)
 pq <- cbind(p,q)
 pq.sum <- sum(apply(pq,1,prod))
 N <- (((Za+Zb)^2)*(1-t.sum))/(12*t*(1-t)*(pq1(p=p,q=q)+0.5*pq.sum-0.5)^2)
 samplesize <- ceiling(N)
 m <- round(ceiling(N)*(1-t),0)
 n <- round(ceiling(N)*t,0)

 NOTE <- "m or n means sample size for each group"
 METHOD <- "Wilcoxon-Mann-Whitney test sample size"
 structure(list(`total sample size` = samplesize, m=m, n=n,
 t=t, p=p, q=q, sig.level=sig.level, power=power, 
 alternative=alternative, note=NOTE, method=METHOD),
 class="power.htest")
}

同じ設定で計算してみると、一群36例と計算されて、同一の結果になる。

> n.wilcox.ord.abs(t=0.5, p=c(0.33, 0.33, 0.34), q=c(0.66, 0.20, 0.14))

     Wilcoxon-Mann-Whitney test sample size 

total sample size = 72
                m = 36
                n = 36
                t = 0.5
                p = 0.33, 0.33, 0.34
                q = 0.66, 0.20, 0.14
        sig.level = 0.05
            power = 0.8
      alternative = two.sided

NOTE: m or n means sample size for each group

片群を小さくして2:1の割り付け(t=0.33)にすると、56例と28例と計算される。

> n.wilcox.ord.abs(t=0.33, p=c(0.33, 0.33, 0.34), q=c(0.66, 0.20, 0.14))

     Wilcoxon-Mann-Whitney test sample size 

total sample size = 84
                m = 56
                n = 28
                t = 0.33
                p = 0.33, 0.33, 0.34
                q = 0.66, 0.20, 0.14
        sig.level = 0.05
            power = 0.8
      alternative = two.sided

NOTE: m or n means sample size for each group

片側検定にも対応できるように改造した。両群同じ例数で片側検定の場合、28例ずつと計算される。

> n.wilcox.ord.abs(t=0.5, p=c(0.33, 0.33, 0.34), q=c(0.66, 0.20, 0.14), alternative="one.sided")

     Wilcoxon-Mann-Whitney test sample size 

total sample size = 57
                m = 28
                n = 28
                t = 0.5
                p = 0.33, 0.33, 0.34
                q = 0.66, 0.20, 0.14
        sig.level = 0.05
            power = 0.8
      alternative = one.sided

NOTE: m or n means sample size for each group

エクセルでサンプルサイズ計算(2020年4月25日追記)

エクセルシートでマン・ホイットニーのU検定のためのサンプルサイズ計算ができるようにした。よければぜひ。

マン・ホイットニーのU検定 サンプルサイズ計算【エクセルでサンプルサイズ】 | HHA SHOP

使い方解説動画を作成した。こちらもよければぜひ。(2020年10月8日追記)

youtu.be

まとめ(2020年4月25日追記)

マン・ホイットニーのU検定のためのサンプルサイズ計算を統計ソフトRで実施した。

エクセルでも計算できるように移植した。

正確な方法ではなく正規近似を用いる方法であるが、実用上は問題ないと思う。