統計ER

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

Clopper-Pearson法で割合の信頼区間を計算するには?

ブログランキングに参加しています。
まずはぽちぽちっとお願いします。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
にほんブログ村 科学ブログ 数学へ

割合の信頼区間の推定法としてClopper-Pearson法というものを目にしたので、簡易的な割合の信頼区間推定法とどう違うのか統計ソフトRで計算してみた。

割合の区間推定(正規分布近似を用いた簡易的な方法)

割合の分散は、割合をp、サンプルサイズをnとすると、

 \displaystyle \frac{p(1-p)}{n}

と計算できる。

標準誤差はその平方根で、

 \displaystyle \sqrt{\frac{p(1-p)}{n}}

で計算できる。

割合の区間推定は、以下のように計算できる。

 \displaystyle p \pm Z_{\alpha/2} \sqrt{\frac{p(1-p)}{n}}

95%信頼区間を計算するスクリプトにすると以下のようになる。

conf.int <- function (p, n, sig.level=0.05){
 res <- c(-1, 1)*qnorm(sig.level/2, lower.tail=F)*sqrt((p*(1-p)/n))+p
 print(round(c(p=p, conf.int=res),3))
}

サンプルサイズ100で、0.95の95%信頼区間を計算すると、0.907から0.993と計算される。

> conf.int(p=0.95,n=100)
        p conf.int1 conf.int2 
    0.950     0.907     0.993 

Clopper-Pearson信頼区間(正確な方法)

Clopper-Pearson法は、F分布を使った方法で、より正確な方法である。

統計ソフトRのスクリプトは以下のようになる。

clopper.pearson <- function (x, n, sig.level=0.05){
 LL <- x/(x+(n-x+1)*qf(sig.level/2, lower.tail=F, 2*(n-x+1), 2*x))
 UL <- (x+1)*qf(sig.level/2, lower.tail=F, 2*(x+1),2*(n-x))/((n-x)+(x+1)*qf(sig.level/2, lower.tail=F, 2*(x+1),2*(n-x)))
 print(round(c(p=x/n, "lower limit"=LL, "upper limit"=UL),3))
}

0.95の95%信頼区間は、0.887から0.984と計算された。Clopper-Pearson法は区間が狭くなるというより、上限も下限も0に近くなった。

> clopper.pearson(x=95,n=100)
          p lower limit upper limit 
      0.950       0.887       0.984 

Clopper-Pearson法の傾向

0.05の信頼区間を計算すると、簡易的な方法よりも、Clopper-Pearson法のほうが、上限も下限も大きくなった。

> conf.int(p=0.05,n=100)
        p conf.int1 conf.int2 
    0.050     0.007     0.093 
> clopper.pearson(x=5,n=100)
          p lower limit upper limit 
      0.050       0.016       0.113 

0.95の時は小さくなり、0.05の時は大きくなるということは、Clopper-Pearson法のほうが、平均(もしくは中心)の0.5に近くなると言えそうだ。

まとめ

割合の信頼区間を求める方法として、正規近似を用いた簡易的な方法と正確方法Clopper-Pearson法を比較してみた。

信頼区間の幅は異ならなかったが、Clopper-Pearson法のほうが、平均的な割合0.5に近づく傾向が見られた。

いまや計算は、コンピュータを使うわけで、簡易的な方法を使う必要性は低い。

いつもClopper-Pearson法を使えばよい。

参考ウェブサイト

bellcurve.jp