二群の割合を比較したいときは割合の差の検定を使う。割合の差の検定を使う場合のサンプルサイズ計算はどのようにすればいいか?
統計ソフトRでやってみるとどうなるか?
エクセルではできないか?
- 割合の差の検定のサンプルサイズ計算
- 割合の差の検定サンプルサイズ計算を power.prop.test() を使わずに
- 割合の差の検定(1:kの割り付け比の場合)
- エクセルでサンプルサイズ計算
- まとめ
割合の差の検定のサンプルサイズ計算
統計ソフトRには、power.prop.test()という関数が用意されていて、簡単に計算できる。
第1群が50%(0.5)、第2群が75%(0.75)と想定された場合、有意水準αを5%(0.05)、検出力を80%(0.8)、とすると、必要なサンプルサイズは、一群58例と計算される。
> power.prop.test(p1=0.5, p2=0.75, power=0.8) Two-sample comparison of proportions power calculation n = 57.67344 p1 = 0.5 p2 = 0.75 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is number in *each* group
検出力を90%(0.9)に上げると必要なサンプルサイズは大きくなり、一群77例となる。
> power.prop.test(p1=0.5, p2=0.75, power=0.9) Two-sample comparison of proportions power calculation n = 76.70693 p1 = 0.5 p2 = 0.75 sig.level = 0.05 power = 0.9 alternative = two.sided NOTE: n is number in *each* group
割合の差の検定サンプルサイズ計算を power.prop.test() を使わずに
割合の差の検定のためのサンプルサイズ計算を power.prop.test() を使わずに行ってみる。
power.prop.test() のプログラムの一部を抜き出して、独自の関数 prop.test.sample.size() を作る。
prop.test.sample.size <- function (p1, p2, sig.level=0.05, power=0.8, alternative=c("two.sided","one.sided")) { alternative <- match.arg(alternative) tside <- switch(alternative, one.sided=1, two.sided=2) Za <- qnorm(sig.level/tside, lower.tail=FALSE) Zb <- qnorm(power) d <- abs(p1-p2) q1 <- 1-p1 q2 <- 1-p2 pbar <- (p1+p2)/2 qbar <- 1-pbar v1 <- p1*q1 v2 <- p2*q2 vbar <- pbar*qbar n <- ((Za*sqrt(2*vbar)+Zb*sqrt(v1+v2))/d)^2 NOTE <- "n is number in *each* group" METHOD <- "Two-sample comparison of proportions sample size" structure(list(n=n, p1=p1, p2=p2, sig.level=sig.level, power=power, alternative=alternative, note=NOTE, method=METHOD), class="power.htest") }
第1群0.5、第2群0.75、有意水準0.05、検出力0.8での必要例数は、さきほどと同じく一群58例と計算される。
> prop.test.sample.size(p1=0.5, p2=0.75) Two-sample comparison of proportions sample size n = 57.67344 p1 = 0.5 p2 = 0.75 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is number in *each* group
検出力を0.9に上げると、77例に必要例数が上昇するのも同じだ。適切に抜き出せている。
> prop.test.sample.size(p1=0.5, p2=0.75, power=0.9) Two-sample comparison of proportions sample size n = 76.70693 p1 = 0.5 p2 = 0.75 sig.level = 0.05 power = 0.9 alternative = two.sided NOTE: n is number in *each* group
割合の差の検定(1:kの割り付け比の場合)
割合の差の検定は、同数の二群ではなく、割り付け比例えば 1:2 とか、1:3 とかで例数に差をつけたい場合がある。上記関数を少し改造して、そのような場合の関数を作った。
prop.test.sample.size.unequal <- function (p1, p2, sig.level=0.05, power=0.8, alternative=c("two.sided","one.sided"), ctrl.ratio=1) { alternative <- match.arg(alternative) tside <- switch(alternative, one.sided=1, two.sided=2) Za <- qnorm(sig.level/tside, lower.tail=FALSE) Zb <- qnorm(power) k <- ctrl.ratio d <- abs(p1-p2) q1 <- 1-p1 q2 <- 1-p2 pbar <- (p1+p2)/2 qbar <- 1-pbar v1 <- p1*q1 v2 <- p2*q2 vbar <- pbar*qbar n <- ((Za*sqrt(2*vbar)+Zb*sqrt(v1+v2))/d)^2 nA <- 1/k*((Za*sqrt((k+1)*vbar)+Zb*sqrt(k*v1+v2))/d)^2 nB <- k*nA NOTE <- "n is number in *each* group" METHOD <- "Two-sample comparison of proportions sample size" structure(list(n.equal=n, n.unequal.1=nA, n.unequal.2=nB, control.ratio=ctrl.ratio, p1=p1, p2=p2, sig.level=sig.level, power=power, alternative=alternative, note=NOTE, method=METHOD), class="power.htest") }
参考文書:比率の差の検定の例数設計
http://www012.upp.so-net.ne.jp/doi/sas/simulation/sample_size2/sample_size_prop.pdf
割り付け比 ctrl.ratio を1にすると(デフォルトなので指定不要)、改造前の結果と同一になる。
> prop.test.sample.size.unequal(p1=0.5, p2=0.75) Two-sample comparison of proportions sample size n.equal = 57.67344 n.unequal.1 = 57.67344 n.unequal.2 = 57.67344 control.ratio = 1 p1 = 0.5 p2 = 0.75 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is number in *each* group
割り付け比を2にすると、群2と群1の比が2になる。群1の例数は少なくて済むようになるが、合計必要例数は116例から132例に増加する。
> prop.test.sample.size.unequal(p1=0.5, p2=0.75, ctrl.ratio=2) Two-sample comparison of proportions sample size n.equal = 57.67344 n.unequal.1 = 43.85406 n.unequal.2 = 87.70811 control.ratio = 2 p1 = 0.5 p2 = 0.75 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is number in *each* group
割り付け比を3にすると、合計必要例数はさらに大きくなり158例になる。
> prop.test.sample.size.unequal(p1=0.5, p2=0.75, ctrl.ratio=3) Two-sample comparison of proportions sample size n.equal = 57.67344 n.unequal.1 = 39.2444 n.unequal.2 = 117.7332 control.ratio = 3 p1 = 0.5 p2 = 0.75 sig.level = 0.05 power = 0.8 alternative = two.sided NOTE: n is number in *each* group
エクセルでサンプルサイズ計算
エクセルシートでサンプルサイズ計算ができるように、エクセルファイルを作成した。よければどうぞ。
割合の差の検定(割り付け比にも対応)サンプルサイズ計算【エクセルでサンプルサイズ】 | HHA SHOP
割合の差の検定のサンプルサイズ計算 エクセルファイルの使い方の解説【動画】(2021年1月4日追記)
まとめ
割合の差の検定を行うためのサンプルサイズ計算を統計ソフトRでやってみた。
割り付け比を考慮したサンプルサイズ計算もできるようにした。1:1 以外は、検出力が下がるため、必要な全体例数が大きくなる。割り付けは、可能な限り1:1が望ましい。
また、エクセルファイルでも実施できるようにした。