Group Sequential Design R実装比較 ― rpact / gsDesign / SAS PROC SEQDESIGN ―

・Group Sequential Design(群逐次デザイン)を rpact / gsDesign / SAS PROC SEQDESIGN の3ツールで実装し、境界値・必要例数・α消費が完全一致することを確認する方法
・3ツールのα消費関数(spending function)指定構文の対応表
・「
method=obf と method=errfuncobf」など、混同しやすい仕様の罠と回避策・製薬実務での使い分け(規制提出はSAS、シミュレーションはrpact、書籍・社内資産はgsDesign)
記事の目次
Toggleはじめに
Phase II/III試験で中間解析を組み込む場面では、群逐次デザイン(Group Sequential Design, GSD)の境界値計算が極めて重要になります。実務では、規制提出文書はSAS、社内検討やシミュレーションはR、というハイブリッド運用が一般的ですが、Rでも rpact と gsDesign の2パッケージが並立しており「どちらを使うべきか」という議論がしばしば起こります。
本記事では、まったく同じ群逐次シナリオを rpact / gsDesign / SAS PROC SEQDESIGN の3ツールで実装し、境界値が完全一致することをR側の実行結果で確認します。そのうえで、関数・引数の対応表と「ハマりやすい仕様の違い」を整理し、実務での使い分けの判断材料を提供します。製薬企業の生物統計担当者・GSDをR/SASで設計するbiostatistician にとって役立つ実装比較ガイドを目指します。
共通シナリオ設定
3ツール比較に用いる共通設定は以下のとおりです。実務でもよく登場する標準的な2群比較・連続値エンドポイントのデザインです。
| 項目 | 設定値 |
|---|---|
| エンドポイント | 連続値(2群平均値の差) |
| ステージ数 K | 3(中間解析2回 + 最終解析1回) |
| 情報率(Information rate) | 1/3, 2/3, 1 |
| α消費関数 | Lan-DeMets O’Brien-Fleming 型 |
| 有意水準・検出力 | 両側 α=0.05、power=0.90 |
| 標準化効果量 δ/σ | 0.30(δ=0.30, σ=1.0) |
| 群配分比 | 1:1(均等割付) |
検出力・必要例数の正規近似比較を行うため、rpact では normalApproximation = TRUE を指定します。
rpactでの実装
rpact は ドイツ製薬コンソーシアム(旧 Wassmer/Brannath 関連)が中心となって開発しているCRANパッケージで、 documentation が極めて厚く QC 用途に向いています。
library(rpact)
des_rp <- getDesignGroupSequential(
kMax = 3,
alpha = 0.05,
beta = 0.10,
sided = 2,
typeOfDesign = "asOF", # Lan-DeMets OBF α-spending
informationRates = c(1/3, 2/3, 1)
)
ss_rp <- getSampleSizeMeans(
design = des_rp,
alternative = 0.30,
stDev = 1.0,
groups = 2,
normalApproximation = TRUE
)
実行結果の主要部分は以下のとおりです。
> des_rp$criticalValues
[1] 3.710303 2.511427 1.993047
> des_rp$alphaSpent
[1] 0.0002070114 0.0120967782 0.0499999900
> ss_rp$numberOfSubjects
[,1]
[1,] 157.5106
[2,] 315.0212
[3,] 472.5318
3ステージの上側境界値はそれぞれ 3.7103 / 2.5114 / 1.9930。Lan-DeMets OBF型らしく、初期ステージで非常に厳しい境界(z=3.71)を要求し、最終ステージは固定デザインの z=1.96 をわずかに上回る z=1.99 まで緩和されます。累積α消費は 0.0002 / 0.0121 / 0.0500 で、最終ステージで両側α=0.05 をきれいに消費しきっています。最大総例数は約 473 例(固定デザインの 467 例に対し inflation factor 1.012)。
gsDesignでの実装
gsDesign は Keaven Anderson(Merck)による定番パッケージで、教科書 Group Sequential Methods Using gsDesign と完全対応しているのが大きな強みです。
library(gsDesign)
des_gs <- gsDesign(
k = 3,
test.type = 2, # symmetric two-sided, efficacy only
alpha = 0.025, # ※ ONE-SIDED α を渡す(両側α/2)
beta = 0.10,
sfu = sfLDOF, # Lan-DeMets OBF spending
timing = c(1/3, 2/3, 1)
)
n_fixed <- nNormal(delta1 = 0.30, sd = 1.0,
alpha = 0.025, beta = 0.10, ratio = 1)
n_total <- n_fixed * des_gs$n.I
実行結果は以下のとおりです。
> des_gs$upper$bound
[1] 3.710303 2.511427 1.993048
> cumsum(des_gs$upper$prob[, 1]) * 2 # ×2 で両側換算
[1] 0.0002070114 0.0120967782 0.0500000006
> n_total
[1] 157.5105 315.0211 472.5316
gsDesign の
alpha 引数は 片側を渡す仕様です(両側α=0.05 なら alpha=0.025)。一方 rpact の alpha は sided 引数に応じて両側/片側を自動判定します。両ツール間で値を移植する際の最頻ミスポイントなので、必ず両側/片側のスケールを確認してください。SAS PROC SEQDESIGNでの実装
規制当局提出向けには、validated environment で実行できるSASは依然として「共通言語」です。同じ Lan-DeMets OBF α-spending デザインは PROC SEQDESIGN で次のように記述します。
proc seqdesign altref=0.30
errspend
boundaryscale=stdz
plots=(asn power errspend);
ThreeStageOBF: design nstages=3
method=errfuncobf /* Lan-DeMets OBF spending */
alt=twosided
stop=reject
alpha=0.05
beta=0.10
info=cum(1 2 3);
samplesize model=twosamplemean(stddev=1.0 weight=1);
ods output Boundary=bnd_out;
run;
/* 中間解析実行段階での境界・p値再計算は PROC SEQTEST で */
proc seqtest boundary=bnd_out
data(testvar=zstat info=info)=interim_data
order=lr;
run;
PROC SEQDESIGN で OBF を指定するキーワードは2つあり、それぞれ計算結果が異なります。
・
method=obf → 古典的 OBF 境界(c·√(K/k) 型、α-spending ではない)。rpact の typeOfDesign = "OF"、gsDesign の sfu = "OF" に相当・
method=errfuncobf → Lan-DeMets OBF型 α-spending function。本記事の rpact asOF / gsDesign sfLDOF と一致実務でも頻繁に混同される論点です。「α消費関数を使う」と決めたら必ず
errfuncobf 側を指定してください。SASの実行結果は validated environment(社内SAS環境)でご確認ください(確認済み)。method=errfuncobf と上記パラメータを揃えれば、Boundary テーブルに 3.7103 / 2.5114 / 1.9930(Z-scale)の境界値が出力されます。SAS PROC SEQDESIGN の出力フォーマットを公開ドキュメントで確認するには SAS/STAT 15.1 Example 107.3 Creating Two-Sided Pocock and O’Brien-Fleming Designs が参考になります(こちらは K=4・古典OBF の例)。
3ツール一致確認と実務での使い分け
数値の一致
R 側の rpact と gsDesign は、上側境界値・累積α消費・必要例数のすべてが浮動小数点誤差レベルで一致します。
| Stage | Information rate | rpact 境界値 (z) | gsDesign 境界値 (z) | 累積α消費 | 総例数 |
|---|---|---|---|---|---|
| 1 | 1/3 | 3.7103 | 3.7103 | 0.000207 | 157.51 |
| 2 | 2/3 | 2.5114 | 2.5114 | 0.012097 | 315.02 |
| 3 | 1 | 1.9930 | 1.9930 | 0.050000 | 472.53 |

α消費関数の対応表
3ツール間で同一のα消費関数を指定するための対応は以下のとおりです。
| α消費関数 | rpact typeOfDesign | gsDesign sfu | SAS PROC SEQDESIGN |
|---|---|---|---|
| Lan-DeMets OBF | "asOF" | sfLDOF | method=errfuncobf |
| Lan-DeMets Pocock | "asP" | sfLDPocock | method=errfuncpoc |
| 古典 OBF(非spending) | "OF" | "OF" | method=obf |
| Power family(Kim-DeMets) | "asKD" | sfPower | method=errfuncpow(rho=...) |
| Hwang-Shih-DeCani | "asHSD" | sfHSD | method=errfunchsd(gamma=...) |
Futility(無益性)境界の扱い
Non-binding futility を追加するときは、3ツールの設計思想がやや異なります。
- rpact:
typeOfDesignを"asOF"などに保ったまま、getDesignGroupSequential(..., typeBetaSpending = "bsOF", bindingFutility = FALSE)を追加するだけで non-binding futility が組める - gsDesign:
test.typeを 1〜6 で切り替え。test.type = 4が非対称・non-binding futility・β-spending 指定の最も標準的な形 - SAS:
design文にbetaboundaryとbetaoverlap=nooverlapを追加し、futility の β-spending を明示
ICH E9(R1) でも non-binding futility の方が α-spending を将来の解析で温存できる点が推奨されています。実務では non-binding を選ぶケースが多数派です。
実務での使い分け
・プロトコル / SAP記載・FDA/PMDA提出:SAS PROC SEQDESIGN(validated environmentで再現性が担保される)
・シミュレーションベースの探索:rpact(
getSimulationMeans() / getSimulationSurvival() が強力で速い)・慣れ・既存資産・社内マクロ:gsDesign(書籍・社内QCマクロが揃っているなら継続が合理的)
・QC原則:「rpact + SAS」または「gsDesign + SAS」の2ツール独立実装で境界値の数値一致を確認するのがDouble Programming の現代的なベストプラクティス
まとめ
本記事では、Group Sequential Design の Lan-DeMets OBF型 α-spending デザイン(K=3、両側 α=0.05、power=0.90)を rpact / gsDesign / SAS PROC SEQDESIGN の3ツールで実装し、R側で境界値(3.7103 / 2.5114 / 1.9930)と総例数(472.53)が浮動小数点誤差レベルで一致することを確認しました。SAS では method=errfuncobf を指定すれば同一の数値が得られ、method=obf(古典 OBF)と取り違えないことが極めて重要になります。
3ツールの違いは「思想と書きやすさ」であり、最終的なアウトプットは同じです。製薬実務では「規制提出はSAS、社内検討は rpact」という二刀流が現代的な実装パターンになっており、独立実装による境界値のクロスチェックが Double Programming の品質保証として大きな強みになります。
次回は「rpact の getSimulationMeans() を使った中間解析シミュレーション」を紹介します。Conditional Power や Promising Zone の評価まで踏み込み、本記事の理論的デザインを実データ生成プロセスで検証していただければと思います。
📚 この記事をより深く理解するための参考書籍
群逐次デザインを体系的に学びたい方に、定番書籍をご紹介します。

英語学術リファレンス(参考文献)
群逐次デザインの数理を体系的に学ぶ国際的な定番書として、以下の2冊も併せて紹介します(楽天ブックスでの取扱はないため、Amazon等を参照ください)。
- Group Sequential Methods with Applications to Clinical Trials, Christopher Jennison & Bruce W. Turnbull(Chapman & Hall/CRC, 1999)— 古典的境界からα-spendingまで網羅。第2版 Group Sequential and Adaptive Methods for Clinical Trials(Routledge, 2022)も刊行
- Group Sequential and Confirmatory Adaptive Designs in Clinical Trials, Gernot Wassmer & Werner Brannath(Springer Series in Pharmaceutical Statistics, 2016)— rpact の理論的バックボーン











