統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

比率・割合のサンプルサイズ計算はどうやる?

complete pack banner

text data complete pack banner

比率つまり割合が知りたい数値の場合、 サンプルサイズ計算はどうやるか?

方法は二つある。

一つはどのくらい正確に推定するかという精度に基づくもの。

もう一つはある割合、たとえば五分五分の50%と比べて、 統計学的有意に高いかどうかという検定に基づくもの。

統計ソフトRでやってみた。

母比率の推定精度に基づくサンプルサイズ計算

相対精度deltaで,母比率を推定する際のサンプルサイズ計算は、 以下のようなスクリプトで計算できる。

myPsize <- function(p,delta){
n <- 4*(1-p)/(p*delta^2)
c("N at least"=n)
}

たとえば8%の割合を相対精度20% (95%信頼区間が±1.6%という意味) で推定するなら、 サンプルサイズは1150になる。

> myPsize(0.08,0.2)
N at least 
      1150 

確認のため二項分布で95%信頼区間を求めてみると、 おおよそ±1.6%(6.5%~9.7%)に収まっていることがわかる。

> binom.test(1150*0.08, 1150)

        Exact binomial test

data:  1150 * 0.08 and 1150
number of successes = 92, number of trials = 1150, p-value < 2.2e-16
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.06497587 0.09721197
sample estimates:
probability of success 
                  0.08 

たとえば、「はい」の回答が80%であることを、 推定精度10%(±8%)で推定したいとすれば、 サンプルサイズは100人と計算される。

95%信頼区間は71%から87%と推定され、 ±8%にはだいだい収まっている。

> myPsize(0.8, 0.1)
N at least 
       100 

> binom.test(80,100)

        Exact binomial test

data:  80 and 100
number of successes = 80, number of trials = 100, p-value = 1.116e-09
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.7081573 0.8733444
sample estimates:
probability of success 
                   0.8 

参考記事:アンケートは何人に取ればいい?(2020年4月19日追記)

こちらも参考に。エクセルでサンプルサイズ計算の方法も。

toukeier.hatenablog.com

参考書籍

母比率の検定に基づくサンプルサイズ計算

母集団の比率=割合がわかっていて、 その割合と統計学的有意に異なる割合であることを 検出するためのサンプルサイズ計算。

必要なのは母集団の割合とサンプルでの割合と検出力。

samplesize.pop.prop.test <- function (P0, P, power, alpha=.05){
A <- sqrt((P0*(1-P0))/(P*(1-P)))
n <-((qnorm(power)+qnorm(alpha/2,lower.tail=F)*A)*sqrt(P*(1-P))/(P-P0))^2

METHOD <- "Sample size calculation of the one-sample proportion test."
structure(list(n=n, p=P, p0=P0, sig.level=alpha, power=power, alternative="Two sided", method=METHOD), class="power.htest")
}

例えば、何も効果がなければ五分五分の50%だが、 効果があって「はい」と回答する人が80%になると予想する。

80%の結果が、50%とは統計学的有意に異なると結論付けるためには、 どのくらいのサンプルサイズが必要か?

> samplesize.pop.prop.test(P0=0.5, P=0.8, power=0.8)

     Sample size calculation of the one-sample proportion test. 

              n = 19.26129
              p = 0.8
             p0 = 0.5
      sig.level = 0.05
          power = 0.8
    alternative = Two sided

答えは、20人必要と計算される。

非常に小さい調査でよいことがわかる。

95%信頼区間を求めてみると、56%から94%で、 50%とは統計学的有意に異なることが確認できた。

> binom.test(16,20)

        Exact binomial test

data:  16 and 20
number of successes = 16, number of trials = 20, p-value = 0.01182
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.563386 0.942666
sample estimates:
probability of success 
                   0.8 

また、例えば、母集団では発生が10%=0.1とわかっていることがある。 新しい予防法では発生が5%=0.05に抑えられる可能性がある。

母集団の0.1と有意に異なるという結果を導くには、 検出力80%としたときにサンプルサイズはいくつになるか?

> samplesize.pop.prop.test(P0=0.1, P=0.05, power=0.8)

     Sample size calculation of the one-sample proportion test. 

              n = 238.0332
              p = 0.05
             p0 = 0.1
      sig.level = 0.05
          power = 0.8
    alternative = Two sided

結果は、239例必要と計算された。

つまり、239例をサンプリングして、 5%つまり約12例で病気が発生したとすると、 母集団の10%とは統計学的有意に異なって低いと結論づけられる。

二項分布で計算した結果は以下の通り。

p値は0.05を下回って、有意水準5%で、統計学的有意。

> binom.test(12,239,p=0.1)

        Exact binomial test

data:  12 and 239
number of successes = 12, number of trials = 239, p-value = 0.009147
alternative hypothesis: true probability of success is not equal to 0.1
95 percent confidence interval:
 0.02620962 0.08606230
sample estimates:
probability of success 
            0.05020921 

検出力を計算することもできる。

検出力を計算するスクリプトは以下の通り。

power.pop.prop.test <- function (P0, P, n, alpha=.05){
A <- sqrt((P0*(1-P0))/(P*(1-P)))
B <- (P-P0)/(sqrt((P*(1-P))/n))
power <- pnorm(-1*qnorm(alpha/2, lower.tail=FALSE)*A-B)+pnorm(qnorm(alpha/2, lower.tail=FALSE)*A-B, lower.tail=FALSE)

METHOD <- "Power calculation of the one-sample proportion test." 
structure(list(n=n, p=P, p0=P0, sig.level=alpha, power=power, alternative="Two sided", method=METHOD), class="power.htest") 
}

母比率が0.1、サンプルの比率が0.05、サンプルサイズが200だとすると、 検出力はどのくらいか?

> power.pop.prop.test(P0=0.1, P=0.05, n=200)

     Power calculation of the one-sample proportion test. 

              n = 200
              p = 0.05
             p0 = 0.1
      sig.level = 0.05
          power = 0.7076557
    alternative = Two sided

計算結果は71%と計算される。

検出力が80%になるためには上記のようにあと39人必要というわけだ。

エクセルでサンプルサイズ計算(2020年4月19日追記)

エクセルでサンプルサイズ計算ができる。よければどうぞ。

母比率の検定 サンプルサイズ計算【エクセルでサンプルサイズ】 | HHA SHOP

エクセルファイル使い方解説【動画】(2021年1月5日追記)

youtu.be

参考書籍・ウェブサイト

永田靖著 サンプルサイズの決め方 朝倉書店
11.1 母不良率の検定
11.1.2 検出力の計算方法

aoki2.si.gunma-u.ac.jp