Rの関数から binciW {plotrix} を確認します。
関数 binciW とは
binciW は、二項分布における成功比率の信頼区間を、ウィルソン・スコア法(Wilson score interval)を用いて算出する関数です。
比率の信頼区間を求める際、標準的に用いられる正規近似(ワルド法)は、標本サイズが小さい場合や成功確率が 0 または 1 に極めて近い場合に、実際の被覆確率が設定した信頼水準を大きく下回るという欠点があります。
本関数が採用しているウィルソン・スコア法は、特に小標本や極端な比率のデータにおいて、正規近似よりも妥当な推定結果を提供します。
内部処理では、指定された有意水準(デフォルトは 5%)に基づき、標準正規分布の分位点を用いて上下限を計算します。
また、連続修正(Continuity Correction)の有無を選択可能であり、算出された下限値が 0 を下回る場合や上限値が 1 を超える場合には、それぞれ 0 と 1 に丸める処理が施されています。
関数 binciW の活用シーン
- 小規模な臨床試験や実験データの解析:
- 試行回数が限られている中で、特定の事象が発生する確率をより精度高く推定したい場合。
- 極稀な事象の発生率推定:
- 不良品率や特定の疾患の発生率など、分母に対して分子が極めて小さい、あるいは極めて大きいデータの信頼区間を算出したい場合。
- ABテストの評価:
- ウェブサイトのコンバージョン率など、二値の結果を伴う指標において、ワルド法よりも厳密な統計的評価が求められる場合。
関数 binciW の引数
library(plotrix)
args(binciW)function (x, n, alpha = 0.05, cc = FALSE)
NULL- x
- 成功回数、あるいは関心のある事象が発生した回数を指定します。
- n
- 全試行回数(分母となる総数)を指定します。
- alpha
- 有意水準を指定します。初期値は 0.05 であり、95% 信頼区間が算出されます。
- cc
- 連続修正(Continuity Correction)を適用するかどうかを論理値で指定します。
-
TRUEを指定すると、より保守的な(幅の広い)信頼区間が算出されます。
関数 binciW のコード
function(x, n, alpha = 0.05, cc = FALSE) {
# 標本における成功比率(p)と、その補数(q)を算出します
p <- x / n
q <- 1 - p
# 指定された有意水準(alpha)に基づき、標準正規分布の上側累積確率に対応するz値を算出します
# 信頼水準が 95%(alpha=0.05)の場合、z は約 1.96 となります
z <- qnorm(1 - alpha / 2)
# 計算の効率化のため、z値の2乗をあらかじめ変数に格納します
z2 <- z * z
# 連続修正(Continuity Correction)を適用する場合の計算処理です
if (cc) {
# ウィルソン・スコア法の数式に連続修正の項を加味した演算を実行します
# 離散的な二項分布を正規分布で近似する際の誤差を補正するための処理です
cil <- (2 * n * p + z2 - (z * sqrt(z2 - 1 / n + 4 * n *
p * q + (4 * p - 2)) + 1)) / (2 * (n + z2))
ciu <- (2 * n * p + z2 + (z * sqrt(z2 - 1 / n + 4 * n *
p * q + (4 * p - 2)) + 1)) / (2 * (n + z2))
}
# 連続修正を適用しない(標準的なウィルソン・スコア法)場合の計算処理です
else {
# 二項分布の分散の推定に標本比率ではなく真の比率の構造を組み込んだ数式を用います
# 本処理により、小標本においても信頼性の高い区間推定が可能となります
cil <- (1 / (1 + z2 / n)) * (p + z2 / (2 * n) - z * sqrt((p / n *
q) + z2 / (4 * n * n)))
ciu <- (1 / (1 + z2 / n)) * (p + z2 / (2 * n) + z * sqrt((p / n *
q) + z2 / (4 * n * n)))
}
# 算出された下限値(cil)が確率の定義域である 0 を下回った場合、0 に修正します
if (cil < 0) {
cil <- 0
}
# 算出された上限値(ciu)が確率の最大値である 1 を超えた場合、1 に修正します
if (ciu > 1) {
ciu <- 1
}
# 最終的な信頼区間の下限および上限をベクトル形式で返却します
return(c(cil, ciu))
}サンプルコード
以下に、特定の品質検査シナリオを想定した binciW の実行例を提示します。
連続修正の有無の比較
# 1. データの準備
# 50個の部品を検査し、そのうち2個が不良品であった状況を想定します
total_samples <- 50
success_count <- 2
# 2. ウィルソン・スコア法による信頼区間の算出(連続修正なし)
# デフォルトの設定(alpha = 0.05)で 95% 信頼区間を求めます
ci_standard <- binciW(x = success_count, n = total_samples, cc = FALSE)
# 3. 連続修正を適用した信頼区間の算出
# より保守的な推定を行うため、cc = TRUE を指定します
ci_corrected <- binciW(x = success_count, n = total_samples, cc = TRUE)
# 4. 算出された結果の表示
# 成功比率(2/50 = 0.04)とともに信頼区間を確認します
cat("点推定値(比率):", success_count / total_samples, "\n")
cat("Wilson 信頼区間(修正なし):", ci_standard, "\n")
cat("Wilson 信頼区間(連続修正あり):", ci_corrected, "\n")点推定値(比率): 0.04
Wilson 信頼区間(修正なし): 0.01103888 0.1346009
Wilson 信頼区間(連続修正あり): 0.006958623 0.1386812 連続修正を適用した結果、信頼区間は修正なしで算出された「0.01103888 から 0.1346009」から「0.006958623 から 0.1386812」へと拡大しています。
連続修正により、離散的な二項分布を連続的な正規分布で近似する際の誤差が補正され、不確実性をより保守的に見積もっていることになります。
正規近似法(ワルド法)とウィルソン・スコア法の比較検証
以下の検証コードにより、成功回数が 0 の状況において、両手法が導き出す結論の差異を確認します。
# 1. ワルド法(正規近似法)による信頼区間算出関数の定義
wald_ci <- function(x, n, alpha = 0.05) {
p <- x / n
z <- qnorm(1 - alpha / 2)
se <- sqrt(p * (1 - p) / n) # 標準誤差の算出
cil <- p - z * se
ciu <- p + z * se
return(c(max(0, cil), min(1, ciu))) # 0と1の範囲に収めます
}
# 2. パラメータの設定
# 全試行回数を 50、成功回数を 0 と設定します
n_val <- 50
x_val <- 0
# 3. 両手法による算出の実行
res_wald <- wald_ci(x_val, n_val)
res_wilson <- binciW(x_val, n_val)
# 4. 結果の統合と提示
comparison_table <- data.frame(
Method = c("正規近似法 (Wald)", "ウィルソン・スコア法 (Wilson)"),
Lower = c(res_wald[1], res_wilson[1]),
Upper = c(res_wald[2], res_wilson[2])
)
print(comparison_table) Method Lower Upper
1 正規近似法 (Wald) 0 0.0000000
2 ウィルソン・スコア法 (Wilson) 0 0.0713476正規近似法においては、成功回数が 0 であると標準誤差が 0 と算出されてしまいます。
それゆえ、信頼区間の幅が消失し、上限・下限ともに 0 という非現実的な結果を提示します。
対照的に、ウィルソン法では標本サイズ 50 という情報の制約を評価し、有意な上限値を算出しています。
本手法は、正規分布への近似を標本比率ではなく、真の比率の仮定に基づいて行っているため、極端なデータに対しても頑健性を維持します。
故に、一度も発生していないリスクの最大確率を検討する様な場合に役割を果たします。
以上です。
