MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

R でマンホイットニーの U 検定に必要なサンプル数を計算する方法

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

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




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

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


↑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万人以上の医療従事者が購読中

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


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

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

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

よければぜひ。

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

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

こちらもよければぜひ。

まとめ

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

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

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメントする

目次