条件付き検出力(Conditional Power)と無効中止 ― 中間解析で「やめる」判断をRで実装する ―

記事の目次
Toggleこの記事でわかること
- 条件付き検出力の定義と計算式:中間データを所与としたときに最終解析で有意になる確率を、B値を使って一本の式に落とすまで
- 同じデータから3つの答えが出る理由:計画時の効果量・中間の観測トレンド・帰無仮説のどれを仮定するかで、条件付き検出力が0.709・0.238・0.041と大きく振れること
- 自前関数とrpactの両方で計算する手順:閉じた式をそのまま実装する方法と、
getAnalysisResults()に中間データを渡す方法、そして両者の値がわずかにずれる理由 - 無効中止境界を入れる「値段」:非拘束futilityをgsDesignで設計すると必要情報量が約3.4%増えること、拘束的/非拘束的の選択が規制対応に直結すること
- 増例が効く場面と効かない場面:promising zoneの考え方と、条件付き検出力0.238の試験は情報量を3倍にしても0.546止まりだという現実
はじめに
第III相試験の中間解析を終えたIDMCの会議で、こんな問いが出ることがあります。「この試験、このまま続けて意味がありますか」。
計画時には効果量0.4 SDを見込んで、片側有意水準2.5%・検出力90%で1群132例、計264例と決めました。ところが症例登録が半分まで進んだ時点で開けてみると、群間差は0.18 SDしかありません。方向は期待どおりですが、大きさが足りない。残りの半分を集めきったとき、この試験は有意差を示せるのでしょうか。
この問いに数字で答えるための道具が条件付き検出力(conditional power)です。設計時に計算する検出力が「まだ一例も集めていない段階で、想定した効果量が真だったら有意になる確率」であるのに対し、条件付き検出力は「中間解析で実際に観測されたデータを踏まえたうえで、最終解析で有意になる確率」を表します。同じ「検出力」という言葉が付いていても、立っている場所がまったく違います。
そして、この数字がそのまま「無効中止(futility stopping)」の判断材料になります。成功する見込みが乏しい試験を最後まで走らせることは、被験者を無益な介入にさらし続けることであり、次の開発に回せたはずの資源を使い切ることでもあります。一方で、無効中止の基準を設けること自体にもコストがあります。「やめられる権利」を持つ代わりに、必要症例数は増えるのです。
この記事では、条件付き検出力の定義から出発して、Rの自前関数・rpact・gsDesign で実際に数字を出しながら、無効中止境界の設計、そして「やめずに増やす」という第三の選択肢であるpromising zone設計までを一本の線でつなぎます。想定読者は製薬企業やCROで臨床試験の統計解析を担当されている方、そして中間解析まわりを体系的に整理したい統計検定準1級レベルの学習者です。
中間解析そのものの位置づけや目的については中間解析入門:臨床試験における役割と目的を、設計時の検出力とサンプルサイズの関係については検出力分析(Power Analysis)入門を先にご覧いただくと、この先の議論がぐっと読みやすくなります。
条件付き検出力とは
第III相試験の中間解析報告会。独立データモニタリング委員会(IDMC)の統計担当委員が、盲検解除された集計表を数分眺めたあと、静かにこう尋ねます。「この試験、続ける意味がありますか」。会議室にいる開発担当者にとって、これほど答えにくい質問はありません。有意ではない、しかし方向は正しい。中止すれば数十億円と数年を失い、続行すれば同じものをもっと失うかもしれない。この問いに数字で答えるための道具が、条件付き検出力(conditional power)です。
中間で「効いていないように見える」とはどういう状態か
本記事で一貫して使う設定を先に置きます。第III相・2群並行群間・優越性の検証試験で、主要エンドポイントは連続量です。片側 \( \alpha=0.025 \)、目標検出力90%(\( \beta=0.10 \))、想定効果量は \( \delta=0.4 \) SD(SD = 1.0)。この条件で計算した必要症例数は1群131.34例、切り上げて1群132例・計264例です。中間解析は情報割合 \( t=0.5 \) の時点、すなわち1群66例・計132例が揃った1回のみとします。設計そのものの考え方は検出力分析(Power Analysis)入門と中間解析入門で扱っているので、ここでは前提として進めます。
さて中間解析を開けてみると、群1の平均が0.18、群2の平均が0.00、各群のSDは1.0でした。差は正しい向きに出ています。しかし0.4を狙って設計した試験で、半分のデータを使って0.18しか出ていない。このときのZ統計量は \( z=1.034 \) です。片側の棄却点1.96には遠く及びませんが、マイナスでもない。IDMCの委員が「意味がありますか」と聞きたくなるのは、まさにこの中途半端さのためです。
ここで多くの人が最初にやってしまうのが、中間のp値を見て「有意差なし」と言うことです。しかしこれは中間解析では答えになりません。知りたいのは「今この瞬間に差があるか」ではなく、「残り半分のデータを集めきったとき、最終解析で有意になるか」だからです。時制が違うのです。
定義:今あるデータを所与とした、将来の成功確率
条件付き検出力とは、中間時点までに観測されたデータを所与としたとき、試験を予定どおり最後まで実施した場合に最終解析で帰無仮説が棄却される確率です。「条件付き」という言葉は、中間データで条件付けているという意味です。
設計時に計算する検出力(無条件の検出力、この試験では0.90)と混同しないでください。設計時の検出力は、まだ1例も組み入れていない段階で、想定した効果量が真だという仮定だけを頼りに計算した期待値です。これに対し条件付き検出力は、すでに半分のデータを見てしまった後の、更新された見通しです。前者は試験計画書を書く道具、後者は走っている試験を止めるかどうかを議論する道具であり、使う場面も計算に入る情報量も別物です。
B値による定式化
条件付き検出力を扱いやすくしたのが、Lan と Wittes が Biometrics 誌に発表したB値(B-value)です(Lan KKG, Wittes J. The B-value: a tool for monitoring data. Biometrics. 1988;44(2):579-585)。情報割合を \( t \)(0から1)、その時点の累積Z統計量を \( Z_t \) とします。\( Z_t \) は情報が増えても分散が1になるよう毎回標準化し直されるため、時間を通じた素直な確率過程にはなりません。そこで次のように変換します。
\[ B(t)=Z_t\sqrt{t} \]
と定義されます。今回の設定では \( t=0.5 \)、\( Z_t=1.034 \) ですから、中間時点のB値は \( 1.034\times\sqrt{0.5} \) です。このB値は、平均 \( \theta t \)、分散 \( t \) の正規分布に従います。ここで \( \theta \) はドリフトと呼ばれ、試験全体を通じた効果の大きさを表すパラメータです。試験終了時点(\( t=1 \))では \( B(1)=Z_1 \) となり、B値そのものが最終解析のZ統計量に一致します。これがB値の使い勝手のよさです。
ブラウン運動の増分は互いに独立なので、中間以降に積み上がる分は
\[ B(1)-B(t)\sim N(\theta(1-t),\,1-t) \]
に従います。日本語に直すと、「残りの情報から得られる上積みは、平均が \( \theta(1-t) \)、分散が \( 1-t \) の正規分布に従い、しかもすでに観測した \( B(t) \) とは独立」ということです。すでに見た部分は固定された定数、これから見る部分だけがランダム、という切り分けができるわけです。
最終解析で有意になる条件は \( B(1)>z_\alpha \)(片側 \( \alpha \) の標準正規点、ここでは1.960)ですから、上の分布に当てはめて整理すると、条件付き検出力は次の形になります。
\[ CP(\theta)=\Phi\!\left(\frac{B(t)+\theta(1-t)-z_\alpha}{\sqrt{1-t}}\right) \]
記号を確認します。\( \Phi \) は標準正規分布の累積分布関数、\( B(t) \) は中間までに稼いだ「貯金」、\( \theta(1-t) \) は残り区間で期待される上積み、\( z_\alpha \) は最終解析で越えるべきハードル、分母の \( \sqrt{1-t} \) は残り区間のばらつきです。分子は「貯金+これから期待できる分-必要な高さ」であり、それを残りのばらつきで標準化して正規分布に通しただけの、素直な式です。
どの \( \theta \) を仮定するかで答えが変わる
この式を見て気づいてほしいのは、右辺に \( \theta \) が残っていることです。条件付き検出力は \( \theta \) の関数であって、単一の数値ではありません。将来どれだけの効果が積み上がると仮定するかを決めない限り、条件付き検出力は決まらないのです。ここが条件付き検出力の最大の勘所であり、実務で最も揉めるところでもあります。
標準的に使われる仮定は3つあります。第一に、計画時の効果量が真だと仮定する立場。目標検出力を達成するドリフトは \( \theta=z_\alpha+z_\beta \) で与えられ、今回は3.242です。第二に、中間で観測されたトレンドがそのまま続くと仮定する立場。この場合のドリフトは \( \hat{\theta}=Z_t/\sqrt{t} \) で、今回は1.457になります。第三に、帰無仮説すなわち \( \theta=0 \) を仮定する立場です。
中間の \( z\approx1.03 \) という同じデータに対して、この3つを入れた条件付き検出力は 0.709 / 0.238 / 0.041 となります。0.7と0.04の間には、意思決定として何の共通点もありません。同じデータ、同じ式、違う仮定。それだけで「まだ十分いける」から「ほぼ絶望的」まで揺れるのです。
| 想定 | \( \theta \) の値 | CP | 誰の立場に近いか・使いどころ | 注意点 |
|---|---|---|---|---|
| 計画時の効果量(design) | 3.242 | 0.709 | 試験を続けたい開発側の立場。プロトコルの前提が崩れていないかを確かめる基準点として使う | 中間データを一切反映しないため楽観的になりやすい。データが仮定を否定していても高い値が出る |
| 中間の観測トレンド(current trend) | 1.457 | 0.238 | 実務の既定値。無効中止の判断やpromising zoneの定義は通常この想定で書かれる | 半分のデータの推定値をそのまま将来に延長するため、症例数が少ない中間ほど不安定 |
| 帰無仮説(null) | 0 | 0.041 | 最も保守的な下限。「効果がまったくない世界でも、この貯金だけで有意になり得る確率」を示す | 判断基準そのものには使いにくい。中止の根拠を強めたい側に都合よく引用されがち |
どの \( \theta \) を使うかは、データを見てから選んではいけません。中間解析を開けた後で「今回は計画時の効果量で評価しましょう」と言い出すのは、結論を先に決めてから根拠を選ぶのと同じです。SAP(統計解析計画書)に、想定するドリフトと閾値をあらかじめ書き切っておくことが前提になります。
3つの値がどれだけ離れているかは、並べて眺めたほうが実感できます。

予測検出力(predictive power)との違い
「\( \theta \) を1つ選ぶのが恣意的なら、確率的に平均してしまえばよい」という発想もあります。これが予測検出力(predictive power)です。\( \theta \) に事前分布を置き、中間データで事後分布に更新したうえで、条件付き検出力をその事後分布で積分して平均を取ります。式で書けば \( \int CP(\theta)\,p(\theta\mid \text{中間データ})\,d\theta \) です。
予測検出力は「どれか1つの仮定に賭けない」という点で正直な指標で、探索的な意思決定や社内のポートフォリオ判断ではよく使われます。一方で値が事前分布の選び方に依存するため、検証的試験の中止基準として規制当局と合意するのは条件付き検出力より手間がかかります。ベイズ流の考え方そのものはベイズ臨床試験デザイン入門で扱っているので、本記事ではこれ以上踏み込まず、以降は条件付き検出力に絞ります。
条件付き検出力は確率であって、意思決定ではない
最後に釘を刺しておきます。0.238という数字は、「現在のトレンドが続くと仮定したとき、この試験が最終的に有意になる確率」でしかありません。それが「中止すべき」を意味するかどうかは、統計量が決めることではないのです。
判断には、条件付き検出力に加えて、安全性プロファイル、他剤の開発状況、残りの症例を組み入れるコストと期間、その疾患に他の選択肢があるかどうかが入ってきます。条件付き検出力が0.238でも、致死的な疾患で代替治療がなく副次評価項目に一貫した傾向があるなら、続行が正当化される場面はあります。逆に0.4を超えていても、競合品が先行承認された時点で開発中止という決定はあり得ます。
だからこそ重要なのは、閾値をいくつにするか、誰がどのタイミングでその数字を見るかを、試験開始前に文書化しておくことです。中間解析でαをどれだけ使うかという枠組みは中間解析におけるα消費関数法の解説で整理していますが、無効中止はそれとは別に、境界の置き方と検出力への影響を設計しなければなりません。まずは、ここで導いた式を実際に手元で動かすところから始めます。
条件付き検出力をRで計算する
条件付き検出力は、専用パッケージがなくても数行の関数で計算できます。ここでは閉じた式をそのままRの関数に写し取り、その関数で中間結果を振って挙動を確かめ、最後に rpact へ実際の中間データを渡して同じ量を計算します。自前の関数とパッケージを両方通しておくと、数字が合えば安心でき、合わなければ「どの仮定が違うのか」を突き止める手がかりになります。実際この章の最後では、その小さなズレが設計の違いから来ていることを見ます。
閉じた式をそのまま関数にする
前章で書いた条件付き検出力の式を、記号の順番も変えずにRへ移します。
cp_normal <- function(z_t, t, theta, alpha = 0.025) {
b_t <- z_t * sqrt(t)
z_a <- qnorm(1 - alpha)
pnorm((b_t + theta * (1 - t) - z_a) / sqrt(1 - t))
}
alpha <- 0.025
beta <- 0.10
t <- 0.5
z_t <- 1.03
theta_design <- qnorm(1 - alpha) + qnorm(1 - beta)
theta_current <- z_t / sqrt(t)
print(round(c(theta_design = theta_design, theta_current = theta_current), 3))
cp <- c(
CP_planned = cp_normal(z_t, t, theta_design),
CP_observed = cp_normal(z_t, t, theta_current),
CP_null = cp_normal(z_t, t, 0)
)
print(round(cp, 3))
関数の中身は3行で、1行ずつ式の部品に対応しています。1行目の b_t <- z_t * sqrt(t) は、情報割合 \( t \) 時点のZ統計量をB値 \( B(t)=z_t\sqrt{t} \) に変換する部分です。Z統計量は情報が増えても分散が1になるよう標準化されているためそのままでは足せませんが、B値に直せば「これまでに積み上げた証拠の量」として残り区間の増分と素直に足せます。2行目の z_a <- qnorm(1 - alpha) は最終解析の棄却点 \( z_\alpha \)、つまり越えるべきハードルの高さです。3行目が本体で、分子の b_t + theta * (1 - t) が「いま持っている証拠+残り \( 1-t \) の区間に \( \theta \) のペースで積み増される証拠」の期待値、そこから z_a を引いてハードルとの差を取り、まだ観測していない区間の標準偏差 sqrt(1 - t) で割って pnorm() に通しています。「期待値からハードルを引いて標準偏差で割る」という形は、通常の検出力計算とまったく同じです。なお z_t には中間のZ統計量1.034を1.03に丸めて入れています。
出力は次のとおりです。
theta_design theta_current
3.242 1.457
CP_planned CP_observed CP_null
0.709 0.238 0.041
まず \( \theta \) を見ます。theta_design = 3.242 は \( z_{0.025}+z_{0.10}=1.960+1.282 \) であり、片側 \( \alpha=0.025 \)・検出力90%で設計した試験のドリフトパラメータです。設計段階で「この速さで証拠が溜まるはずだ」と宣言した値がそのまま数字になっています。対する theta_current = 1.457 は中間で実際に観測されたペースで、計画の半分にも届いていません。
そのうえで条件付き検出力の3つの値です。重要なのは、この3つが同じ1組の中間データから出ているという点です。データは一切変えていません。変えたのは「残りの半分で効果がどのペースで積み上がると仮定するか」だけです。計画時の \( \theta=3.242 \) を信じ続ければ成功確率は0.709とまだ高く、いま見えているトレンド \( \theta=1.457 \) が続くと考えれば0.238まで落ち、効果がゼロなら0.041です。どれを「この試験の条件付き検出力」と呼ぶかで、IDMCへの報告は「順調です」にも「厳しいです」にもなります。仮定を明示しないままCPという単語だけを会議に持ち込む危険が、ここに表れています。
中間Zを振って挙動を見る
1点の中間結果だけでは、条件付き検出力という指標の性格はつかめません。中間Zを0から2.5まで動かし、3つの仮定がどう振る舞うかを一覧にします。
z_grid <- seq(0, 2.5, by = 0.5)
cp_tab <- data.frame(
z_interim = z_grid,
CP_planned = round(cp_normal(z_grid, t, theta_design), 3),
CP_observed = round(cp_normal(z_grid, t, z_grid / sqrt(t)), 3),
CP_null = round(cp_normal(z_grid, t, 0), 3)
)
print(cp_tab)
z_interim CP_planned CP_observed CP_null
1 0.0 0.316 0.003 0.003
2 0.5 0.508 0.038 0.012
3 1.0 0.699 0.220 0.038
4 1.5 0.846 0.590 0.102
5 2.0 0.936 0.890 0.220
6 2.5 0.978 0.987 0.393
読み取るべき点を整理します。
| 列 | 仮定する \( \theta \) | 中間Zに対する振る舞い |
|---|---|---|
| CP_planned | 計画時の 3.242 に固定 | z = 0 でも 0.316 と高止まり。中間結果に鈍感で楽観的 |
| CP_observed | 中間の観測値 \( z_t/\sqrt{t} \) | z = 1.5 付近を境に 0.220 → 0.590 → 0.890 と急に立ち上がる |
| CP_null | 0(効果なし) | 全域で小さく、最終的な棄却域の裾の確率にすぎない |
まず CP_planned の1行目です。中間で群間差がまったく出ていない(z = 0)のに、条件付き検出力は0.316もあります。「中間結果がどうであれ残り半分では計画どおりの効果が出る」と仮定しているからで、データが悪いほど仮定と現実の乖離は大きくなります。この列は「設計が正しかった場合の確率」を答えているのであって、「この試験が成功する確率」を答えてはいません。無効中止の根拠として使いにくい理由がここにあります。
CP_observed は逆に中間結果へ強く反応します。z = 1.0 で0.220、z = 1.5 で0.590、z = 2.0 で0.890と、狭い区間で一気に立ち上がる非線形な曲線です。この急峻さは、CPの値でゾーンを切る運用が実際にはZ統計量のごく狭い帯を切り出していることを意味します。境界値を0.30にするか0.365にするかで、対象になる試験の範囲は思ったより大きく変わります。
CP_null は解釈を誤りやすい列です。効果がゼロなら成功確率もゼロのはずだと考えると、z = 2.5 の0.393が不可解に見えます。しかしこれは「効果がゼロでも、残り半分の偶然の揺らぎで最終Zが \( z_\alpha \) を超えてしまう確率」にすぎません。中間ですでに大きなZが出ていれば偶然だけでも棄却域に入りうる、と言っているだけです。第一種の過誤そのものではなく、中間データで条件付けた後の裾の確率だと理解してください。中間解析の枠組みは中間解析入門:臨床試験における役割と目的を、有意水準の配分は中間解析におけるα消費関数法の解説をあわせてご覧ください。
rpactで実データから計算する
自前の関数は理解には最良ですが、実務で提出する数字は検証済みのパッケージで出すのが筋です。rpact なら、群逐次デザインを定義して中間データを渡すだけで条件付き検出力が返ってきます。
library(rpact)
design <- getDesignGroupSequential(
kMax = 2, sided = 1, alpha = 0.025, beta = 0.10,
informationRates = c(0.5, 1), typeOfDesign = "asOF"
)
print(round(design$criticalValues, 4))
dataMeans <- getDataset(
n1 = 66,
n2 = 66,
means1 = 0.18,
means2 = 0.00,
stDevs1 = 1.0,
stDevs2 = 1.0
)
res <- getAnalysisResults(
design = design, dataInput = dataMeans,
thetaH0 = 0, nPlanned = 132, allocationRatioPlanned = 1
)
print(round(res$.stageResults$overallTestStatistics, 4))
print(round(res$conditionalPower, 4))
print(round(res$thetaH1, 4))
getDesignGroupSequential() は解析計画そのものを作る関数です。kMax = 2 で中間1回+最終1回、informationRates = c(0.5, 1) で中間を情報割合50%に置き、typeOfDesign = "asOF" で O’Brien-Fleming型のα消費関数を指定しています。O’Brien-Fleming型は早期にαをほとんど使わず終盤に残す配分です。なお、デザイン作成そのものを rpact・gsDesign・SAS PROC SEQDESIGN で横並びに比較した内容はGroup Sequential Design R実装比較 ― rpact / gsDesign / SAS PROC SEQDESIGN ―にまとめてあります。デザインの作り方で迷ったらそちらを参照してください。この記事は、作ったデザインに中間データを流し込んだ後の話に集中します。
getDataset() には中間時点の生データ相当(各群66例、平均0.18と0.00、SDともに1.0)を渡します。getAnalysisResults() の引数で必ず意識してほしいのが2つあります。nPlanned = 132 は「中間解析以降に追加で組み入れる予定の症例数」で、両群の合計です。計画264例のうち中間時点で132例が入っているので、残りが132例になります。ここを片群あたりと取り違えると残り情報量の見積もりが倍ずれ、条件付き検出力もまったく別の値になります。もう1つの allocationRatioPlanned = 1 は、その残り132例を1対1で割り付けるという指定です。1対1以外の割付なのに既定のまま計算すると、有効な情報量を過大に見積もることになります。
出力は次のとおりです。
[1] 2.9626 1.9686
[1] 1.034 NA
[1] NA 0.2357
[1] 0.18
1行目が棄却限界で、中間が2.9626、最終が1.9686です。O’Brien-Fleming型らしく中間のハードルが非常に高く設定されています。2行目は各ステージの検定統計量で、中間の1.034が今回の観測値です(最終は未実施なので NA)。3行目が求めたかった条件付き検出力0.2357、4行目の thetaH1 = 0.18 は rpact がこの計算で仮定した効果量です。
自前関数とrpactでわずかに値がずれる理由
自前関数の CP_observed = 0.238 と rpact の 0.2357 はわずかに違います。この差は実装の揺らぎでも丸め誤差でもなく、設計の違いです。閉じた式は最終解析の棄却点として素朴に \( z_\alpha = 1.960 \) を使っています。一方 rpact が使うのは、α消費関数で中間に少しαを配分した後に残る最終ステージの棄却点 \( 1.9686 \) です。中間で見た分だけ最終のハードルが上がっており、越えるべき線が高くなれば条件付き検出力は下がります。差が小さいのは O’Brien-Fleming型が中間でほとんどαを使わないからで、Pocock型のように中間へ厚く配分すれば差はもっと開きます。
条件付き検出力は単独では決まらず、どのα消費関数でどこに中間解析を置いたかというデザイン全体に紐づいた量です。SAPに「条件付き検出力が20%を下回ったら無効中止を検討する」と書くなら、その20%がどのデザインの棄却点で計算された値なのかまで揃えておかないと、後から再現できません。
ツールの既定値に埋め込まれた仮定
もう1つ、最後の行 thetaH1 = 0.18 を見逃さないでください。これは rpact が既定で中間解析の観測値を効果量に採用したことを示しています。つまり何も指定せず得られた0.2357は、前章の区分でいう「現在のトレンドが続くと仮定した条件付き検出力」です。計画時の効果量0.4を仮定すれば、ずっと高い別の値が返ってきます。
ここが実務で最も事故の起きやすいところです。どの \( \theta \) を仮定するかという重い判断が、パッケージの既定値としてコードの外側に隠れています。既定のまま計算した数字をIDMC資料に貼り、後から「何を仮定した値ですか」と問われて答えられない事態は避けなければなりません。検出力分析(Power Analysis)入門で扱った通常の検出力計算と同じで、前提を書かない検出力の数字には意味がありません。
SAPには「条件付き検出力を算出する」とだけ書かず、①仮定する \( \theta \)(計画時の効果量か、中間の観測値か、その中間の縮小推定量か)、②使用するデザインとα消費関数、③残りの症例数と割付比、の3点を必ず明記してください。この3つが揃って初めて、条件付き検出力は誰が計算しても同じ数字になります。
無効中止(futility)境界の設計
条件付き検出力はあくまで「数字」です。試験を止めるという意思決定に使うためには、その数字がどの水準を割ったら何をするのかを、試験開始前に境界線として引いておかなければなりません。ここで登場するのが無効中止(futility)境界です。中間解析の枠組みそのものについては中間解析入門:臨床試験における役割と目的で整理していますので、本節では「止める側の境界をどう設計するか」に絞って進めます。
有効中止と無効中止は非対称である
群逐次デザインには2種類の中止があります。ひとつは有効中止(efficacy stopping)で、中間解析の時点で効果が明らかなので早く終わらせる、という判断です。もうひとつが無効中止で、このまま続けても成功する見込みが薄いので打ち切る、という判断です。
この2つは似て見えますが、統計的にはまったく別の性質を持ちます。有効中止は「帰無仮説を棄却する機会」を増やす操作なので、第一種の過誤 \( \alpha \) に直接効きます。だからα消費関数で厳格に配分する必要があります。一方、無効中止は「棄却する機会を捨てる」操作です。αを増やす方向には決して働かず、代わりに本当は効いている薬を取り逃がす確率、すなわち第二種の過誤 \( \beta \) を増やします。検出力が削られるのです。α消費関数そのものの構成は中間解析におけるα消費関数法の解説で扱っていますので、ここでは下側の境界に集中します。
無効中止を入れる動機は2つあります。第一に被験者保護です。有効性が見込めない試験に新たな患者を組み入れ続けることは倫理的に正当化しにくい。第二に開発資源の配分です。1つの第III相試験に投じる費用と時間は膨大で、見込みの薄い試験を早く畳めば次の候補品に資源を回せます。無効中止は統計手法であると同時に、開発判断のインフラでもあります。
拘束的futilityと非拘束的futility
futility境界には、守ることを前提に設計するか否かで2つの流儀があります。この違いは実務上きわめて重要で、SAPの文言も規制当局との議論の内容も変わります。
| 観点 | 拘束的(binding) | 非拘束的(non-binding) |
|---|---|---|
| 境界を割ったとき | 必ず中止する(前提) | 中止を検討するが、続行してもよい |
| αの計算前提 | 下側境界を割った経路は棄却されないものとして計算 | 下側境界が存在しないものとして計算 |
| 有効性境界への影響 | 緩くなる(棄却しやすい) | futilityなしの場合と同一のまま |
| ルールを破った場合 | 第一種の過誤が名目水準を超えうる | αは保護されたまま崩れない |
| gsDesignでの指定 | test.type = 3(β消費) | test.type = 4(β消費) |
拘束的futilityは、下側境界を割った経路を最初から「棄却されない領域」として扱うぶん、上側の有効性境界を緩められます。理論的には効率が良い設計です。しかしその効率は、境界を必ず守るという約束にすべて依存しています。
現実の試験では、この約束が守られない場面があります。IDMCが無効中止を勧告しても、治験依頼者が副次評価項目の傾向や外部データを理由に継続を選ぶことは起こり得ます。そして継続を選んだ瞬間、拘束的設計の第一種の過誤の保証は壊れます。FDAのAdaptive Designs guidance(2019年11月最終版)も、非拘束のfutilityガイドラインを加えても第一種の過誤確率は増加せず多くの場合適切であるとする一方、拘束的なfutilityルールでは有効性判定の閾値を緩められる利点があるものの第一種の過誤は中止規則が遵守された場合にのみ制御される、と明記しています。この非対称なリスクゆえに、規制当局は実務上ほぼ常に非拘束的futilityを求めます。
非拘束的futilityでは、下側境界を割っても続行する自由が残ります。これは「境界を無視してよい」という意味ではありません。境界を割った試験を続行するなら、その判断根拠をIDMC議事録と治験依頼者側の記録に必ず残してください。αは守られていても、説明責任は残ります。
β消費関数で下側境界を引く
非拘束的futility境界の作り方として最も標準的なのが、β消費関数(beta-spending function)を使う方法です。考え方はα消費関数と対称的で、目標とする第二種の過誤 \( \beta = 0.10 \) を各中間解析にどう配分するかを事前に決め、その配分を満たすように下側境界を逆算します。
gsDesignでは、次の引数でこれを指定します。test.type = 4 は非拘束的futility付きの片側検定を意味します。sfu = sfLDOF は上側(有効性)にLan-DeMets型のO’Brien-Fleming近似α消費関数を使う指定で、序盤の中間解析でαをほとんど使わない保守的な形です。sfl = sfHSD は下側にHwang-Shih-DeCani型のβ消費関数を使う指定、sflpar = -2 はそのパラメータで、負に振るほど序盤のβ消費が抑えられます。つまり -2 は「早い段階では簡単には無効中止しない」という保守的な設定です。gsDesignとrpactのデザイン作成手順の対応関係はGroup Sequential Design R実装比較にまとめています。
library(gsDesign)
d_nofut <- gsDesign(k = 2, test.type = 1, alpha = 0.025, beta = 0.10,
timing = 0.5, sfu = sfLDOF)
d_fut <- gsDesign(k = 2, test.type = 4, alpha = 0.025, beta = 0.10,
timing = 0.5, sfu = sfLDOF, sfl = sfHSD, sflpar = -2)
print(round(d_nofut$upper$bound, 3))
print(round(d_fut$upper$bound, 3))
print(round(d_fut$lower$bound, 3))
print(round(c(nofut = max(d_nofut$n.I), fut = max(d_fut$n.I),
ratio = max(d_fut$n.I) / max(d_nofut$n.I)), 4))
[1] 2.963 1.969
[1] 2.963 1.969
[1] 0.406 1.969
nofut fut ratio
1.0034 1.0377 1.0342
上2行を見比べてください。futilityなし(test.type = 1)とfutilityあり(test.type = 4)で、上側境界はどちらも 2.963 / 1.969 でまったく同じです。これが非拘束の定義そのものです。下側境界を無視した前提でαを配分しているので、有効性境界は緩みません。
下側境界は 0.406 / 1.969 です。中間解析で観測Z統計量が 0.406 を下回ったら無効中止を検討する、という線が引かれました。最終ステージで下側と上側がともに 1.969 に一致しているのは、最終解析では棄却するかしないかの二択しか残らず、境界が閉じるためです。
そして最後の行が、この節でいちばん見てほしい数字です。n.I は「futility境界なしで検出力90%を達成するのに必要な情報量」を1としたときの相対値を表します。futilityなしの 1.0034 に対し、非拘束futilityを入れると 1.0377 に増え、比は 1.0342 になります。つまり必要情報量が約3.4%増えます。1群132例・計264例の設計なら、約9例の上乗せです。
約9例。これが「途中でやめられる権利」の値段です。下側境界を割った試験を止めるということは、そこから先で挽回したはずのシナリオを捨てることを意味し、その分だけ検出力が目減りします。目標の90%を維持したいなら、失った分を症例数で買い戻すしかありません。futilityを入れるかどうかは、この9例と、無駄な試験を早く畳める価値との比較で決める問題です。
同じ境界が、仮定次第で正反対の意味を持つ
引かれた下側境界 z = 0.406 は、条件付き検出力の言葉に翻訳するとどれくらいの厳しさなのでしょうか。前章で定義した cp_normal() を使って確かめます。
z_fut <- d_fut$lower$bound[1]
print(round(z_fut, 3))
print(round(c(CP_observed = cp_normal(z_fut, t, z_fut / sqrt(t)),
CP_planned = cp_normal(z_fut, t, theta_design)), 4))
[1] 0.406
CP_observed CP_planned
0.0251 0.4708
同じ 0.406 という1本の線が、まったく違う2つの顔を持っています。現在観測されているトレンドがそのまま続くと仮定すれば、成功確率はわずか 0.0251、2.5%です。この読み方をすれば「ほぼ絶望的、直ちに止めるべき」となります。ところが、計画時に想定した効果量 \( \delta = 0.4 \) SD が本当に真の効果だと仮定すると、条件付き検出力は 0.4708、47.1%あります。この読み方をすれば「まだ半分近い勝ち目がある、中間の低調は偶然の揺らぎかもしれない」となります。
どちらの計算も間違っていません。違うのは仮定する \( \theta \) だけです。条件付き検出力は \( \theta \) を与えて初めて定まる量であり、\( \theta \) を明示しないCPの数値には意味がありません。
このことは、SAPの書き方に直結します。「中間解析で条件付き検出力が20%を下回った場合に無効中止を検討する」とだけ書かれた文書は、実は何も決めていません。どの \( \theta \) のもとでのCPなのかが書かれていないからです。現在トレンド想定なのか、計画時効果量想定なのか、あるいは中間推定値の信頼区間下限を使うのか。ここまで書き切って初めて、事前規定として機能します。
閾値の水準については、現在トレンド(観測された効果量)を仮定したCPが概ね10〜20%を下回れば無効中止を検討する、という運用がよく見られます。ただしこれは絶対的な規則ではなく、疾患領域の重篤度、代替治療の有無、開発ポートフォリオの状況によって妥当な水準は動きます。数字だけを他試験から借りてくるのではなく、自分の試験でその閾値を割ったときに何例の被験者が守られ、どれだけの検出力を失うのかを計算したうえで決めてください。アダプティブな要素を持つ試験全般の設計上の考え方はアダプティブデザインとは何かも参考になります。
Promising zoneとサンプルサイズ再設定
無効中止は「やめる」という判断でした。しかし中間解析の選択肢は、続けるか止めるかの二択ではありません。その手前に「症例数を増やして粘る」という第三の道があります。条件付き検出力が絶望的なほど低いわけではないが、このまま予定通り進めても足りない ― そういう中途半端な帯域に中間結果が落ちたときにだけ増例する、という考え方です。これを実務に載る形に整理したのが Mehta & Pocock (2011, Statistics in Medicine, 30: 3267–3284) の promising zone デザインです。
手順は素直です。中間で観測された効果量をそのまま真の効果だと仮定して条件付き検出力を計算し、その値で「favourable(すでに見込み十分・増やす必要なし)」「promising(見込みはあるが足りない・増やせば届く)」「unfavourable(増やしても割に合わない)」「futile(見込みなし)」に分類し、promising のときだけ症例数を上乗せします。増例のトリガーを一つの数字に集約したところが、この設計の使いやすさの源です。
ただし先に確認すべき厳しい事実があります。増例は「効果が小さい」という事実を覆せないということです。
中間 z = 1.03 のまま増例しても届かない
前章までと同じシナリオ ― 中間の \( z = 1.03 \)、現在のトレンドでの条件付き検出力 0.238 ― で、中間以降に集める情報量を何倍かに増やしたとき、条件付き検出力がどこまで回復するかを計算します。前章で定義した cp_normal() は情報量が計画どおりであることを前提にしているため、ここでは増例後の情報量を明示的に扱う関数を新たに用意します(cp_normal() はこのあとのゾーン分類でそのまま使います)。中間以降の情報量を \( r \) 倍にすると、最終解析の情報量は \( t + (1-t)r \) になり、棄却点との比較もこの新しい情報量のスケールで行う必要があるためです。
cp_extended <- function(z_t, t, r, alpha = 0.025) {
theta_hat <- z_t / sqrt(t)
b_t <- z_t * sqrt(t)
i2 <- (1 - t) * r
z_a <- qnorm(1 - alpha)
pnorm((b_t + theta_hat * i2 - z_a * sqrt(t + i2)) / sqrt(i2))
}
r_grid <- c(1.0, 1.5, 2.0, 2.5, 3.0)
print(data.frame(
ratio_N = r_grid,
CP = round(sapply(r_grid, function(r) cp_extended(z_t, t, r)), 3)
))
ratio_N CP
1 1.0 0.238
2 1.5 0.334
3 2.0 0.415
4 2.5 0.484
5 3.0 0.546
ratio_N は「中間以降に集める予定だった情報量を何倍にするか」です。1.0 が増例なし、3.0 なら後半だけで当初計画の3倍を集めることを意味します。3倍にしても条件付き検出力は 0.546 止まりです。計画264例に照らせば、後半の132例を396例に膨らませて総計約528例、試験規模を2倍にしてなお成功確率はコイン投げと大差ありません。
理由は単純で、条件付き検出力を押し下げているのが症例数の不足ではなく観測された効果量そのものだからです。中間で見えている効果は 0.18 SD、想定した 0.4 SD の半分にも届きません。症例数を増やして減らせるのは推定量のばらつきだけで、中心がずれている事実には手が出ません。増例は「ノイズに沈んだシグナルを拾い上げる」手段であって、「小さいシグナルを大きくする」手段ではないのです。
「条件付き検出力が低い=症例数が足りない」と読み替えてしまうのが、この領域で最も多い誤りです。低い条件付き検出力の原因が効果量なのか情報量なのかを切り分けないまま増例を提案すると、費用と被験者を投じて失敗を先送りするだけの試験になります。
効果がそこそこ見えていれば増例は効く
では増例が意味を持つのはどういうときか。中間の \( z \) を 1.5 に変えて同じ計算をします。
z_p <- 1.5
print(round(cp_normal(z_p, t, z_p / sqrt(t)), 3))
r_grid <- c(1.0, 1.25, 1.5, 1.75, 2.0)
print(data.frame(
ratio_N = r_grid,
CP = round(sapply(r_grid, function(r) cp_extended(z_p, t, r)), 3)
))
[1] 0.59
ratio_N CP
1 1.00 0.590
2 1.25 0.651
3 1.50 0.702
4 1.75 0.746
5 2.00 0.783
出発点の条件付き検出力が 0.590 であれば、後半の情報量を2倍にするだけで 0.783 まで届きます。1.5倍でも 0.702 です。先ほどの \( z = 1.03 \) のケースと並べると差は歴然です。
| 中間の状況 | 増例なしのCP | 後半2倍のCP | 増例の見返り |
|---|---|---|---|
| z = 1.03(本記事のシナリオ) | 0.238 | 0.415 | 3倍にしても0.546止まり |
| z = 1.50 | 0.590 | 0.783 | 2倍で実用的な水準に到達 |
増例が効くのは、そもそも効果がそこそこ見えているときだけです。promising zone という名前は、まさにこの非対称性を指しています。追加投資が回収できる見込みのある領域だけを、あらかじめ切り出しておくわけです。
ゾーン分類をRで実装する
Mehta & Pocock の分類を条件付き検出力の閾値で書き下すとこうなります。ここでは前章で定義した cp_normal() を使います。
classify_zone <- function(z_t, t, alpha = 0.025) {
cp <- cp_normal(z_t, t, z_t / sqrt(t), alpha)
zone <- ifelse(cp >= 0.90, "favourable",
ifelse(cp >= 0.365, "promising",
ifelse(cp >= 0.10, "unfavourable", "futile")))
data.frame(z_interim = z_t, CP = round(cp, 3), zone = zone)
}
print(classify_zone(c(0.4, 0.8, 1.03, 1.3, 1.5, 2.0), t))
z_interim CP zone
1 0.40 0.024 futile
2 0.80 0.121 unfavourable
3 1.03 0.238 unfavourable
4 1.30 0.432 promising
5 1.50 0.590 promising
6 2.00 0.890 promising
本記事のシナリオである \( z = 1.03 \) は promising ではなく unfavourable に落ちます。増例の対象ですらない、というのがこの設計の答えです。増例して粘る帯域にすら入っていない以上、続行するなら「規定の264例を最後まで走らせて結論を出す」以外の選択は正当化しにくい、ということになります。
ここで必ず断っておくことがあります。この 0.365 や 0.90 という境界は文献で用いられた一例であって、普遍的な定数ではありません。 Mehta & Pocock 自身、ゾーンの選び方と再設定ルールの決め方に一般解は示さず、代替案の作動特性をシミュレーションで比較して決めるべきだという立場です。実際のプロトコルでは、想定効果量の分布・追加症例のコストと組入れ期間・上限症例数の制約を踏まえて試験ごとに境界を決め、その根拠を統計解析計画書(SAP)に書き残します。閾値を他試験から理由なく借りてくるのは、査察で最初に突かれる部分です。
条件付き検出力の値と、それに対応する打ち手の関係を一枚に落とすと、次のような帯になります。

第一種の過誤とCui-Hung-Wangの重み付き統計量
ここからが本題です。中間結果を見てから症例数を変える行為は、データに依存した適応的な意思決定です。そして適応的に情報量を変えたあと、全データを素朴にプールしたZ統計量をそのまま最終解析に使うと、第一種の過誤が守られる保証はありません。「うまくいきそうなときだけ試行回数を増やす」という操作が、帰無仮説のもとでも有意に届く経路を余分に作るからです。Cui, Hung & Wang (1999, Biometrics, 55: 853–857) は、観測された治療効果に基づく増例が実用的な状況の多くで過誤確率を実質的に膨張させうることを示し、その対処として重み付き統計量を提案しました。
CHW法の発想は単純です。当初の情報割合で決めた重みを、最後まで固定する。 中間の情報割合を \( t \)、各ステージのステージ別Z統計量を \( Z_1, Z_2 \) とすると、重みは \( w_1=\sqrt{t},\ w_2=\sqrt{1-t} \) です。
\[ Z_{CHW}=w_1 Z_1+w_2 Z_2,\qquad w_1^2+w_2^2=1 \]
\( w_1^2+w_2^2=1 \) なので、帰無仮説のもとで \( Z_{CHW} \) は標準正規分布に従います。しかもこの分布は、第2ステージで実際に何例集めたかに一切依存しません。重みが実データの量ではなく、設計時に決めた \( t \) だけで決まるからです。だからこそ、どんな増例ルールでも α が守られます。
この保証には代償があります。増例して集めた後半のデータは、増例前に決めた \( w_2=\sqrt{1-t} \) という重みしか持てません。症例を増やせば第2ステージの推定は精確になるはずですが、CHWではその増分が重みに反映されません。結果として追加した1例あたりの寄与が薄まるのです。実務では「増例したのに条件付き検出力の伸びが計算より鈍い」という形で現れます。増例幅が大きいほど効率の目減りも大きくなるため、上限症例数は統計的な理由からも必要です。
素朴なZとCHWをシミュレーションで比べる
では、実際にどれだけ違うのか。帰無仮説のもとで20万回シミュレーションし、promising zone に入ったときだけ後半の情報量を2倍にする運用で、素朴なZ統計量とCHW統計量それぞれの第一種の過誤を数えます。
set.seed(4869)
sim_chw <- function(nsim = 200000, t = 0.5, r = 2, alpha = 0.025) {
z1 <- rnorm(nsim)
z2 <- rnorm(nsim)
w1 <- sqrt(t); w2 <- sqrt(1 - t)
z_chw <- w1 * z1 + w2 * z2
z_naive <- (sqrt(t) * z1 + sqrt((1 - t) * r) * z2) / sqrt(t + (1 - t) * r)
cp1 <- cp_normal(z1, t, z1 / sqrt(t))
extend <- cp1 >= 0.365 & cp1 < 0.90
z_final_naive <- ifelse(extend, z_naive, w1 * z1 + w2 * z2)
c(naive = mean(z_final_naive > qnorm(1 - alpha)),
chw = mean(z_chw > qnorm(1 - alpha)))
}
print(round(sim_chw(), 4))
naive chw
0.0234 0.0249
読み方には注意が必要です。promising zone に限って増例したこの設定では、素朴な(重み付けしない)Z統計量でも第一種の過誤は 0.0234 で、名目の 0.025 を超えていません。これは Chen, DeMets & Lan (2004, Statistics in Medicine, 23: 1023–1038) が示した「現在のトレンドでの条件付き検出力が十分高い領域に増例を限れば、過誤は膨らまない」という結果と整合しています。
しかし、これはゾーンの定義に依存した結論です。 上のコードで extend の条件を変えれば ― 下限を 0.365 より低く置いたり、CP以外の指標で増例を判断したりすれば ― この保証は消えます。α が守られたのは「promising zone に限定した」からであって、「増例したから大丈夫」なのではありません。
だからこそ、どんな増例ルールでもαを守るCHW(この設定で 0.0249)が実務の既定です。CHWを使っていれば、増例の判断根拠が条件付き検出力であろうと予測区間であろうと、第一種の過誤の議論はそこで終わります。素朴なZが偶然αを守る条件を毎回証明しにいくより、はじめから重み付き統計量を採用するほうが規制対応としても安全です。CHWは「使わなくてよい場合がある」ものではなく、「使わない理由を証明できたときだけ外せる」ものだと理解してください。
CHWを採用したら、最終解析の点推定値と信頼区間も重み付きの枠組みに揃える必要があります。SAPには検定統計量だけでなく、推定量と信頼区間の構成方法まで書いておいてください。
事前規定してあることが全て
promising zone デザインの成否は、統計手法の選択よりも運用設計で決まります。増例の判断指標、ゾーンの境界値、増例後の上限症例数、判断を誰が行い誰が結果を見るのか、そして重み付き統計量の定義 ― これらが試験開始前にプロトコルとSAPに書かれていて初めて、この設計は機能します。
逆に、中間結果を見てから増例ルールを作るのは、規制当局が最も嫌う運用です。ルールを後から作れば、そのルール自体が観測データの関数になり、シミュレーションで確認したはずの作動特性が成り立たなくなります。「promising zone を採用したこと」ではなく「事前に規定してあったこと」が、審査で問われる論点です。
なお、症例数再設定には効果量ベースの手法のほかに、ブラインドを保ったまま分散などのナイサンスパラメータを再推定する系統もあります。目的も規制上の扱いも異なるので、Sample Size Re-estimation(SSR)実装ガイド ― ブラインド/アンブラインドで手続きの違いを確認してください。この設計が適応的デザイン全体のどこに位置づくかはアダプティブデザインとは何かとICH E20(臨床試験のためのアダプティブデザイン)とは、中間解析そのものの位置づけは中間解析入門:臨床試験における役割と目的が参考になります。
実務でのポイント
ここまでで、条件付き検出力の計算と無効中止境界の設計、そして promising zone での増例までを見てきました。最後に、これらを実際の試験でどう運用するかを整理します。計算そのものよりも、「誰が、いつ、何を根拠に、どこまで決めるのか」を事前に文書化しておくことのほうが、実務では圧倒的に重要です。
SAPと中間解析計画に何を書くか
条件付き検出力を使う試験では、統計解析計画書(SAP)と中間解析計画に最低限これだけは書き込みます。
- 中間解析の時期。暦の日付ではなく情報割合で規定します(本記事の設定なら \( t = 0.5 \)、1群66例・計132例が揃った時点)。
- 条件付き検出力の計算に用いる \( \theta \) の仮定。計画時の効果量を使うのか、中間時点の観測値をそのまま将来に外挿するのか、あるいはその両方を併記するのか。
- 無効中止の閾値と、それが拘束的(binding)か非拘束的(non-binding)か。
- 増例する場合のルールと上限。どのゾーンに入ったら何倍まで増やすのか、増例の意思決定を誰が行うのか。
- 最終解析で使う検定統計量。素朴なプール統計量なのか、Cui-Hung-Wang型の重み付き統計量なのか。
「条件付き検出力が20%未満なら中止を検討する」とだけ書かれたSAPを見かけますが、これは仕様として成立していません。理由は前章までに見たとおりです。無効中止境界 \( z = 0.406 \) は、中間の観測トレンドが続くと仮定すれば条件付き検出力 0.0251、つまり成功確率2.5%の線ですが、計画時に想定した効果量が真だと仮定すれば 0.4708、成功確率47%の線でもあります。同じ1本の線が、\( \theta \) の置き方ひとつで「ほぼ絶望」にも「五分五分」にもなるのです。閾値の数字だけを書いて \( \theta \) の定義を書かなければ、中間解析の当日に「どちらの計算だったのか」で議論が始まります。閾値と \( \theta \) の仮定は、必ずセットで規定してください。
非拘束futilityを採用するなら、その旨をSAPに明記したうえで、有効性境界は「futility境界を無視して試験が続いた場合」でも第一種の過誤を守る値になっていることを確認します。この保守性こそが、非拘束を選んだ試験が支払っているコストです。
IDMCと治験依頼者の役割分担
条件付き検出力の計算・中間解析の実施・そこから導かれる勧告・最終的な決定は、それぞれ担当者が異なります。実際の流れはこうです。非盲検の統計担当(多くの場合、治験依頼者から独立した解析チーム)が中間データを解析し、条件付き検出力や境界との比較結果を独立データモニタリング委員会(IDMC)に提示します。IDMCはその結果に加えて安全性データも併せて評価し、「継続」「無効中止」「増例の検討」といった勧告を出します。そして試験を止めるか続けるかを最終的に決定するのは治験依頼者です。
ここで押さえておきたいのは、無効中止はあくまで勧告であって自動執行ではないという点です。IDMCが中止を勧告しても、依頼者が別の判断を下す余地は制度上残っています。だからこそ、無効中止境界を拘束的に設計してしまうと危険なのです。拘束的境界は「境界に触れたら必ず止める」ことを前提に有効性境界を計算しているため、止めずに続けた瞬間に第一種の過誤の保証が崩れます。非拘束futilityが実務の既定になっている最大の理由は、統計的な好みではなく、この意思決定構造にあります。無効中止境界を入れると必要症例数が約3.4%増える(264例なら約9例の上乗せ)という代償は、「止める権利を持ちながら、止めなくても数字が壊れない」ための保険料だと考えてください。
盲検性の管理も同じくらい重要です。中間の群別結果は非盲検統計担当とIDMCの内部に閉じ、治験依頼者側の試験運営チームには渡しません。トレンドが漏れれば、その後の症例登録の進め方、併用薬の扱い、脱落例の追跡の熱心さといった運営そのものにバイアスが入り、最終解析の解釈が救えなくなります。誰が非盲検情報にアクセスするかは、IDMC憲章(charter)に人単位で書き出しておくのが実務です。中間解析の基本的な枠組みについては中間解析入門:臨床試験における役割と目的も参照してください。
無効中止の判断は統計量だけでは決まらない
条件付き検出力が 0.238 だという事実は、それだけでは中止の理由になりません。IDMCの議論では、必ずほかの材料が乗ります。安全性プロファイルに懸念があれば、成功確率が同じでも中止に傾きます。同じ化合物の別試験で良好な結果が出ていれば、続ける判断もありえます。対象疾患に既存治療がほとんどない領域なら、多少低い成功確率でも完遂する価値があります。逆に、後続の開発品にリソースを移したい状況なら、統計以外の理由が決定打になります。
条件付き検出力は、こうした議論の出発点を与える道具です。「感覚的にうまくいっていない気がする」を「現在のトレンドが続くなら成功確率は24%、計画時の効果量が本当なら71%」という共通言語に翻訳します。会話の終着点ではなく、始点だと位置づけてください。
よくある落とし穴
現場で繰り返し見かける失敗を整理しました。いずれも中間解析の当日ではなく、プロトコル作成時に潰しておくべきものです。
| 落とし穴 | 何が起きるか/どう防ぐか |
|---|---|
| 中間結果を見てからルールを作る | データを見た後に閾値を決めれば、どんな値でも「妥当」に見えます。第一種の過誤の議論も成立しません。閾値・ゾーン・増例上限はすべて盲検下で確定させます。 |
| CPの \( \theta \) 想定を明記しない | 同じ境界が 0.0251 とも 0.4708 とも読めてしまいます。SAPには計算式と \( \theta \) の定義を書き、可能なら両方の値を報告様式に含めます。 |
| 拘束的futilityを設計して実際には守らない | 境界に触れても続行した時点で、有効性境界が前提にしていた過誤の制御が失われます。守り切れないなら最初から非拘束で設計します。 |
| 増例後も素朴なZ統計量で検定する | 特定のゾーンに限れば過誤が膨らまない場合もありますが、それはルール依存の結論です。増例の余地を残すなら重み付き統計量を既定にします。 |
| 情報割合が小さすぎる時点でCPを見る | 観測トレンドに基づく条件付き検出力は推定量の分散をそのまま引き継ぐため、初期は激しく揺れます。無効中止の判断に使うなら、十分な情報が蓄積する時点を選びます。 |
規制の視点
米国FDAは2019年11月に「Adaptive Designs for Clinical Trials of Drugs and Biologics」を最終ガイダンスとして公表しました(連邦官報での公示は2019年12月2日)。ここで一貫して要求されているのは、適応の内容を事前に規定すること、第一種の過誤を適切に制御すること、推定のバイアスと運営上のバイアスを最小化すること、そしてシミュレーションに依拠する設計ではその前提と結果を提出することです。無効中止と増例は、まさにこの4点が全部かかる領域です。
国際的な調和という点では、ICH E20(Adaptive Designs for Clinical Trials)が進行中です。2025年6月30日にStep 2bの草案が公表されてパブリックコンサルテーションに付され(EUでの意見受付は2025年11月30日まで)、2026年2月には寄せられた意見の概要が公表されています。本稿執筆時点でStep 4(最終合意)到達の公表は確認できていません。ガイドラインの全体像はICH E20(臨床試験のためのアダプティブデザイン)とはで、アダプティブデザインの類型についてはアダプティブデザインとは何か:FDAガイダンスから読み解くで扱っています。症例数再設定の実務手順はSample Size Re-estimation(SSR)実装ガイドが詳しいので、あわせてご覧ください。
ガイドラインのステータスは更新されます。規制当局への提出資料で引用する際は、必ずICHおよび各極の規制当局サイトで最新の版と段階を確認してください。
参考書籍
条件付き検出力と無効中止を独学で押さえるには、三つの層の本が要ります。アダプティブデザインと群逐次デザインの方法論そのものを扱う本、検出力とサンプルサイズの土台を固める本、そして用語と周辺知識を横断的に引ける本です。以下の3冊はその役割分担で選びました。



まとめ
本記事では、条件付き検出力の定義から無効中止境界の設計、そしてpromising zoneによる増例判断までを、Rで数字を出しながら追いました。
出てきた数値を振り返っておきます。効果量0.4 SDを見込んで264例と設計した試験で、中間解析(情報割合0.5)に群間差0.18 SD・\( z=1.034 \) が観測されたとき、条件付き検出力は計画時の効果量を信じれば0.709、中間のトレンドを信じれば0.238、帰無仮説のもとでは0.041でした。同じ1組のデータから3つの答えが出るのは計算ミスではなく、\( \theta \) に何を仮定するかという設計上の選択がそのまま数字に現れているためです。無効中止境界を非拘束で入れると必要情報量は1.0034から1.0377へ、約3.4%(264例なら約9例)増えました。そして \( z=1.03 \) のこの試験は、中間以降の情報量を3倍にしても条件付き検出力は0.546止まりで、増例では届きません。中間が \( z=1.5 \) なら情報量2倍で0.783まで伸びるのとは対照的です。
ここから引き出せる実務的な結論は3つに集約されます。第一に、条件付き検出力は単独では意思決定にならないこと。どの \( \theta \) のもとでの確率なのかを明示して初めて、他人と共有できる数字になります。第二に、無効中止は無料ではないこと。やめられる権利には必要症例数という対価があり、それを承知のうえで設計に組み込むかどうかが判断です。第三に、増例は効果の小ささを埋め合わせないこと。増例が効くのは、そもそも効果がある程度見えている場合に限られます。
そして、これらすべてに共通する前提が「事前規定」です。中間結果を見てから閾値や増例ルールを決めることは、統計的な保証を失うだけでなく、規制当局との対話でも最も説明の難しい行為になります。SAPに書き切っておくこと、それ自体が最大の技術です。
関連するトピックとしては、中間解析の多重性をどう調整するかを扱った中間解析におけるα消費関数法の解説、群逐次デザインそのものの作り方を3ツールで比較したGroup Sequential Design R実装比較、分散の再推定に基づく症例数見直しを扱ったSample Size Re-estimation(SSR)実装ガイド、そしてアダプティブデザイン全体の国際調和ガイドラインを整理したICH E20(臨床試験のためのアダプティブデザイン)とはもあわせてご覧ください。
まずはご自身が担当している試験の設計値を cp_normal() に入れて、中間解析で観測されうるいくつかの \( z \) について条件付き検出力を並べてみることをおすすめします。「どのあたりから雲行きが怪しくなるのか」を事前に体感しておくと、いざ中間解析の議論が始まったときの足場がまるで違ってきます。











