マンホイットニー U 検定のサンプルサイズ計算の方法
マンホイットニーの 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
マンホイットニーの U 検定のサンプルサイズ計算をエクセルで
エクセルシートでマンホイットニーの U 検定のためのサンプルサイズ計算ができるようにした。
よければぜひ。
マン・ホイットニーのU検定 サンプルサイズ計算【エクセルでサンプルサイズ】 | TKER SHOP
使い方解説動画を作成した。
こちらもよければぜひ。
まとめ
マンホイットニーの U 検定のためのサンプルサイズ計算を R で実施した。
エクセルでも計算できるように移植した。
正確な方法ではなく正規近似を用いる方法であるが、実用上は問題ないと思う。
コメント