統計ER

R, EZR, SPSS, KH Coder を使ったデータ分析方法を紹介するブログ。ニッチな内容が多め

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

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

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

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

R の”samplesize"というパッケージで、マンホイットニーの U 検定のサンプルサイズ計算ができる。

samplesize パッケージのn.wilcox.ord()を使う。

マンホイットニーの U 検定は、ウィルコクソンの順位和検定と数学的に同じなため、ウィルコクソン・マン・ホイットニー検定とも言われるため、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

マンホイットニーの U 検定 サンプルサイズ計算 プログラムの中身を公開

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

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

マンホイットニーの U 検定のサンプルサイズ計算をエクセルで

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

よければぜひ。

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

使い方解説動画を作成した。

こちらもよければぜひ。

youtu.be

まとめ

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

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

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