診断検査の感度・特異度分析におけるサンプルサイズ計算は、研究の目的、疾患有病率、期待される感度・特異度、許容誤差、検出力に基づいて行われる。小さすぎると信頼性が低く、大きすぎるとリソースが無駄になる。統計的に信頼できる結果を得るには、これらの要素を考慮し、適切なサンプルサイズを決定することが不可欠である。
診断検査の感度・特異度分析におけるサンプルサイズ計算の枠組み
診断検査の感度・特異度分析におけるサンプルサイズ計算の枠組みは、主に単一の感度・特異度を推定する場合と、複数の検査の感度・特異度を比較する場合に分けられる。
単一推定の場合、目標とする感度または特異度の値をある「許容される誤差」(例:95%信頼区間の幅)で推定するために必要な症例数を算出する。この際、推定する値と誤差の許容範囲を設定する。
比較の場合、特定の差(例:感度10%の差)を「統計的検出力」(通常80%以上)と「有意水準」(通常0.05)で検出するために必要な症例数を算出する。
いずれの枠組みでも必要となる主な値は以下のとおり:
- 期待される感度・特異度: 先行研究や予備データに基づく推定値
- 対象疾患の有病率: 集団における疾患の割合
- 許容される誤差(精度): 推定値の信頼区間の幅
- 統計的検出力(1 – β): 真の差を検出できる確率
- 有意水準 (α): 偽陽性を許容する確率
これらの値を適切に設定することで、統計的に信頼できる結果を得るための適切なサンプルサイズが導き出される。
感度または特異度単一値を推定する場合
R言語で、単一の感度または特異度を推定する場合のサンプルサイズ計算は、基本的に二項分布の信頼区間の幅を基に逆算する形で行われる。特定の割合(感度や特異度)を、指定した信頼度(例:95%)と許容誤差(信頼区間の半分の幅)で推定するために必要な症例数を求める。
presize パッケージの prec_prop 関数を用いるのが便利である。この関数は、割合の信頼区間の幅からサンプルサイズを計算することができる。
感度を推定する場合のサンプルサイズ計算例
感度を推定する場合、疾患のある被験者(真の陽性、偽陰性)の数が必要。
シナリオ例:
- 期待される感度: 90% (0.90)
- 許容される信頼区間の半分の幅 (precision): ±5% (0.05)
- 信頼水準: 95% (0.95)
# presize パッケージをインストールしていない場合はインストール
# install.packages("presize")
library(presize)
# 感度を推定するためのサンプルサイズ計算
# p: 期待される感度(割合)
# conf.width: 信頼区間の全幅 (例: 0.10 は ±0.05 を意味する)
# conf.level: 信頼水準
# シナリオ1: 感度 90% を ±5% の精度 (全幅 10%) で推定したい場合
# ここで得られる 'n' は、「疾患を持つ人」の必要なサンプルサイズです。
n_sensitivity <- prec_prop(p = 0.90, conf.width = 0.10, conf.level = 0.95, method = "wilson")
print(n_sensitivity)
# 結果の解釈
# $n: 必要なサンプルサイズ(疾患を持つ人の数)
# $p_adj: Wilson法で調整された割合
# $conf.width: 設定した信頼区間の全幅
# $conf.level: 設定した信頼水準
# note: 使用した計算方法に関する注意
計算すると、141 人(140.9728 を切り上げて 141)必要であることがわかる。
> print(n_sensitivity)
sample size for a proportion with Wilson confidence interval.
p padj n conf.width conf.level lwr upr
1 0.9 0.8893893 140.9728 0.1 0.95 0.8393893 0.9393893
NOTE: padj is the adjusted proportion, from which the ci is calculated.
特異度を推定する場合のサンプルサイズ計算例
特異度を推定する場合、疾患のない被験者(真の陰性、偽陽性)の数が必要。
シナリオ例:
- 期待される特異度: 80% (0.80)
- 許容される信頼区間の半分の幅 (precision): ±7% (0.07)
- 信頼水準: 95% (0.95)
# 特異度を推定するためのサンプルサイズ計算
# p: 期待される特異度(割合)
# conf.width: 信頼区間の全幅 (例: 0.14 は ±0.07 を意味する)
# シナリオ2: 特異度 80% を ±7% の精度 (全幅 14%) で推定したい場合
# ここで得られる 'n' は、「疾患を持たない人」の必要なサンプルサイズです。
n_specificity <- prec_prop(p = 0.80, conf.width = 0.14, conf.level = 0.95, method = "wilson")
print(n_specificity)
計算結果は、124 人(123.7188 を切り上げて 124)である。
> print(n_specificity)
sample size for a proportion with Wilson confidence interval.
p padj n conf.width conf.level lwr upr
1 0.8 0.7909655 123.7188 0.14 0.95 0.7209655 0.8609655
NOTE: padj is the adjusted proportion, from which the ci is calculated.
総サンプルサイズの算出
上記の計算で得られる n は、それぞれ「疾患を持つ人」と「疾患を持たない人」の必要なサンプルサイズである。研究全体の総サンプルサイズを決定するには、対象集団における疾患の有病率(Prevalence)を考慮する必要がある。
総サンプルサイズ N は、以下の関係で算出できる。
$$ \begin{array} {rcl} N &=& \text{必要な疾患有りの人数} / \text{有病率} \\
N &=& \text{必要な疾患無しの人数} / (1 – \text{有病率}) \end{array} $$
より厳密には、感度と特異度の両方をある程度の精度で推定したい場合、両方の条件を満たすようにサンプルサイズを設定する必要がある。一般的には、それぞれで算出された「疾患のある被験者」と「疾患のない被験者」の必要な数を合計し、有病率を考慮して調整する。
例えば、疾患のある被験者が 141 人、疾患のない被験者が 124 人必要で、有病率が20%の場合、総サンプルサイズは以下のように計算される。
- 疾患のある被験者の確保に必要な総数 = 141 / 0.20 = 705 人
- 疾患のない被験者の確保に必要な総数 = 124 / (1 – 0.20) = 155 人
この場合、両方の条件を満たすには、より大きい方の人数、つまり 705 人のサンプルサイズが必要になる。
重要な注意点:
疾患の有病率が非常に低い場合、疾患を持つ患者さんを十分に集めることが困難になるため、非対称なサンプルサイズ(疾患のある患者を多めに集めるなど)を検討することもある。
感度または特異度を比較する場合
診断検査の感度や特異度を比較する場合のサンプルサイズ計算は、2つの割合(比率)の差の検定に基づくことが一般的である。これは、新しい診断検査の性能が既存の検査よりも優れているか、または同等であるかを統計的に検証したい場合に用いられる。
この場合、R の pwr パッケージの pwr.2p.test 関数を使うのが便利である。この関数は、2つの独立した比率の差を検定するためのサンプルサイズや検出力を計算できる。
比較のシナリオ1: 感度の比較(疾患ありの被験者でのサンプルサイズ)
ここでは、2つの診断検査の感度を比較する例を示す。特異度を比較する場合も同様の考え方で適用できる。
シナリオ:
- 検査A(既存の標準検査)の期待される感度: P_1 = 0.70 (70%)
- 検査B(新しい検査)の期待される感度: P_2 = 0.85 (85%)
- 検出したい感度の差: 0.85 – 0.70 = 0.15 (15%)
- 有意水準 (α): 0.05 (両側検定)
- 統計的検出力 (1 – β): 0.80 (80%)
- 各群のサンプルサイズ比: n_1 = n_2 (同数)
この計算では、「疾患のある被験者」における感度の比較に焦点を当てている。したがって、算出されるサンプルサイズは、疾患を持つ被験者の数になる。総サンプルサイズを求めるには、別途、対象疾患の有病率を考慮する必要がある(後述)
Rスクリプト例
# 比較の場合
# pwr パッケージをインストールしていない場合はインストール
# install.packages("pwr")
library(pwr)
# 2つの感度を比較するためのサンプルサイズ計算
# p1: 検査Aの感度 (既存の検査)
# p2: 検査Bの感度 (新しい検査)
# sig.level: 有意水準 (α)
# power: 統計的検出力 (1-β)
# alternative: 検定の種類 ("two.sided", "less", "greater")
# - "two.sided": 差があるかを検定
# - "greater": p2 が p1 より大きいかを検定 (優越性試験)
# - "less": p2 が p1 より小さいかを検定 (稀)
# Effect size (h) の計算
# h = 2 * (asin(sqrt(p2)) - asin(sqrt(p1)))
h <- ES.h(p1 = 0.70, p2 = 0.85)
cat("計算された効果量 (Effect size, h):", h, "\n")
n_compare_sens <- pwr.2p.test(h = h, n = NULL, sig.level = 0.05, power = 0.80, alternative = "two.sided")
print(n_compare_sens)
効果量が、約 -0.364 と計算される。分野によっては、統計解析時に提示が必要になる指標である。
結果として、119 人必要と計算される。
> cat("計算された効果量 (Effect size, h):", h, "\n")
計算された効果量 (Effect size, h): -0.3638807
> print(n_compare_sens)
Difference of proportion power calculation for binomial distribution (arcsine transformation)
h = 0.3638807
n = 118.5547
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: same sample sizes
比較のシナリオ2: 特異度の比較(疾患なしの被験者でのサンプルサイズ)
特異度の比較も、感度の比較と同様である。
# 特異度の比較
# 特異度 1 (Sp1): 0.75
# 特異度 2 (Sp2): 0.90
# 他のパラメータはシナリオ1と同じ
h_spec <- ES.h(p1 = 0.75, p2 = 0.90)
cat("計算された効果量 (Effect size, h):", h_spec, "\n")
n_compare_spec <- pwr.2p.test(h = h_spec, n = NULL, sig.level = 0.05, power = 0.80, alternative = "two.sided")
print(n_compare_spec)
効果量は、約 -0.404 と計算され、必要なサンプル数は、97 人と計算される。
> cat("計算された効果量 (Effect size, h):", h_spec, "\n")
計算された効果量 (Effect size, h): -0.4036964
> print(n_compare_spec)
Difference of proportion power calculation for binomial distribution (arcsine transformation)
h = 0.4036964
n = 96.32225
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: same sample sizes
結果の解釈と総サンプルサイズ
pwr.2p.test の出力に含まれる n は、各群に必要なサンプルサイズを示している。
感度比較の場合: 算出された n は、疾患のある被験者の各群における必要な数である。例えば、上記のように n = 119 と出たら、検査Aの感度評価に119人の疾患あり被験者、検査Bの感度評価に119人の疾患あり被験者、合計238人の疾患あり被験者が必要ということになる。
特異度比較の場合: 算出された n は、疾患のない被験者の各群における必要な数である。
両方の比較を考慮する場合、感度と特異度それぞれで必要な「疾患あり」と「疾患なし」のサンプルサイズを計算し、有病率を考慮して最終的な総サンプルサイズを決定することになる。
例えば、感度比較で疾患あり被験者が各群119人、特異度比較で疾患なし被験者が各群97人必要になったとします。
有病率が20%の場合:
- 疾患あり被験者の確保に必要な総患者数: (119 + 119) / 0.20 = 238 / 0.20 = 1190 人
- 疾患なし被験者の確保に必要な総患者数: (97 + 97) / (1 – 0.20) = 194 / 0.80 = 243 人
この場合、感度比較の条件を満たすために総計1190人の患者が必要となる。この1190人の中には、238人の疾患あり患者と952人の疾患なし患者が含まれることになる。特異度評価に必要な243人の疾患なし患者は、この952人の中に含まれるため、全体のサンプルサイズは1190人となる。
注意事項:
- 効果量 h は、2つの割合の差が小さいほど(つまり、検出したい差が小さいほど)、大きなサンプルサイズが必要になる。
- 臨床的に意味のある最小の差(Minimum Clinically Important Difference, MCID)を考慮して、効果量を設定することが重要。
- これは、2つの独立した群での比率の差を検定する一般的な方法である。診断検査の比較では、同じ患者群で2つの検査を行う対応のあるデータとなることが多い。対応のあるデータの比率の比較には、マクネマー検定に基づいたサンプルサイズ計算が必要で、上記の pwr.2p.test は直接適用できない。マクネマー検定に基づく必要なサンプル数計算は以下の関連記事を参照のこと。

まとめ
診断検査の感度・特異度分析におけるサンプルサイズ計算は、研究の信頼性と効率を左右する要である。単一の感度や特異度を正確に推定する場合も、複数の検査を比較する場合も、期待値、有病率、許容誤差、検出力といった要素を慎重に考慮する必要がある。適切なサンプルサイズ設定は、費用対効果の高い、倫理的かつ統計的に意義のある研究を実施するために不可欠。本記事が、あなたの研究計画の一助となれば幸いである。
コメント