統計ER

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

母比率の差の検定のサンプルサイズ計算

母比率の差の検定のサンプルサイズ計算を R で行う方法、エクセルで行う方法

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


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

母比率の差の検定のサンプルサイズ計算 R の関数を使って

統計ソフト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万人以上の医療従事者が購読中

母比率の差の検定のサンプルサイズ計算 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

母比率の差の検定のサンプルサイズ計算をエクセルで

エクセルシートでサンプルサイズ計算ができるように、エクセルファイルを作成した。

よければどうぞ。

割合の差の検定(割り付け比にも対応)サンプルサイズ計算【エクセルでサンプルサイズ】 | TKER SHOP

母比率の差の検定のサンプルサイズ計算 エクセルファイルの使い方の解説【動画】

youtu.be

まとめ

母比率の差の検定のサンプルサイズ計算を R で実施してみた。

割り付け比を考慮したサンプルサイズ計算もできるスクリプトも書いてみた。

1:1 以外は、検出力が下がるため、必要な全体例数が大きくなる。

割り付けは、可能な限り1:1が望ましい。

また、エクセルファイルでも実施できるようにした。

参考になれば。

参考PDF

比率の差の検定の例数設計

http://www012.upp.so-net.ne.jp/doi/sas/simulation/sample_size2/sample_size_prop.pdf