ICH E17 一貫性の検討:日本人症例数算出のSAS・R実装ガイド― MRCTにおける一貫性確率のシミュレーション計算 ―

- ICH E17に基づく「一貫性の検討」の数理的背景(分散・共分散構造)
- 方法1(効果比に基づく確率)・方法2(同方向確率)の算出ロジック
- Rシミュレーションによる一貫性確率の計算方法(コード・出力・解釈付き)
- SAS PROC IMLによる同等の実装方法(マクロ付き)
- 目標確率を達成する最小日本人症例数を自動探索する方法
記事の目次
Toggleはじめに
国際共同治験(MRCT)が標準となりつつある今日、日本人症例数の設定は製薬企業の生物統計担当者にとって避けられない課題です。ICH E17(2018年)は、地域間の治療効果の一貫性を科学的根拠に基づいて評価することを求めており、従来の「日本人を何例入れるか」という発想から「一貫性を評価できる情報量を確保する」という考え方へのシフトを促しています。
前回の記事「検証的試験における日本人データの必要性と、国際共同治験での症例数設定の考え方」では、日本人データの必要性と症例数設定の基本的な考え方(方法1・方法2)を解説しました。本記事では、その続編として、実際に一貫性の確率を算出するSASおよびRコードの実装方法を体系的に紹介します。
コード・出力結果・実務的解釈の3点セットで構成していますので、すぐに業務に活用していただける内容です。
一貫性の検討:数理的背景の整理
確率変数の定義と分散・共分散構造
並行群間比較試験(連続アウトカム)を例にとります。全体症例数を片群あたり \(N\)、日本人症例数を片群あたり \(n_J\) とすると、各治療効果の推定量は以下の分布に従います。
\[
D_\text{Japan} \sim \mathcal{N}\!\left(\delta,\ \frac{2\sigma^2}{n_J}\right), \quad
D_\text{All} \sim \mathcal{N}\!\left(\delta,\ \frac{2\sigma^2}{N}\right)
\]
ここで \(\delta\) は真の治療効果、\(\sigma^2\) は個体内分散です。
日本人集団は全体集団に含まれているため、両者は独立ではなく共分散が生じます。
\[
\text{Cov}(D_\text{Japan},\ D_\text{All}) = \frac{2\sigma^2}{N}
\]
この結果、相関係数は以下のようになります。
\[
\rho = \sqrt{\frac{n_J}{N}}
\]
直感的には、日本人の割合が大きいほど \(D_\text{Japan}\) と \(D_\text{All}\) は相関が強くなることを意味します。
この共分散構造を無視して \(D_\text{Japan}\) と \(D_\text{All}\) を独立として扱うと、一貫性確率を過小・過大評価する可能性があります。シミュレーション実装では必ず二変量正規分布から同時にサンプリングしてください。
方法1:効果比に基づく一貫性確率
全体試験が成功(\(D_\text{All} > 0\))したという条件のもとで、日本人の効果が全体効果の \(\pi\) 倍(通常 \(\pi = 0.5\))を超える確率が80%以上であることを要件とします。
\[
P\!\left(\frac{D_\text{Japan}}{D_\text{All}} > \pi\ \middle|\ D_\text{All} > 0\right) \geq 0.80
\]
方法2:同方向確率
全体試験が成功したという条件のもとで、日本人でも同方向の効果(\(D_\text{Japan} > 0\))が得られる確率が80%以上であることを要件とします。
\[
P\!\left(D_\text{Japan} > 0\ \middle|\ D_\text{All} > 0\right) \geq 0.80
\]
Rによる一貫性確率の算出
基本シミュレーション
以下のコードでは、二変量正規分布から \((D_\text{Japan},\ D_\text{All})\) を同時にサンプリングし、方法1・方法2の一貫性確率を推定します。
# ライブラリの読み込み
library(MASS)
# ---- パラメータ設定 ----
set.seed(123)
n_sim <- 100000 # シミュレーション回数
N <- 200 # 全体症例数(片群あたり)
n_J <- 40 # 日本人症例数(片群あたり)
delta <- 0.5 # 真の治療効果(連続アウトカム)
sigma <- 1.0 # 標準偏差
pi_thr <- 0.5 # 一貫性の閾値(π)
# ---- 分散・共分散行列の設定 ----
var_J <- 2 * sigma^2 / n_J
var_All <- 2 * sigma^2 / N
cov_J_A <- 2 * sigma^2 / N
Sigma_mat <- matrix(c(var_J, cov_J_A,
cov_J_A, var_All), nrow = 2)
mu_vec <- c(delta, delta)
# ---- シミュレーション実行 ----
samp <- mvrnorm(n = n_sim, mu = mu_vec, Sigma = Sigma_mat)
D_Japan <- samp[, 1]
D_All <- samp[, 2]
pos_idx <- D_All > 0
# ---- 方法1:効果比に基づく一貫性確率 ----
ratio <- D_Japan[pos_idx] / D_All[pos_idx]
prob1 <- mean(ratio > pi_thr)
cat(sprintf("【方法1】P(D_Japan / D_All > %.1f | D_All > 0) = %.1f%%\n",
pi_thr, prob1 * 100))
# ---- 方法2:同方向確率 ----
prob2 <- mean(D_Japan[pos_idx] > 0)
cat(sprintf("【方法2】P(D_Japan > 0 | D_All > 0) = %.1f%%\n",
prob2 * 100))出力結果:
【方法1】P(D_Japan / D_All > 0.5 | D_All > 0) = 80.3% 【方法2】P(D_Japan > 0 | D_All > 0) = 94.8%
全体症例数200例(片群あたり)のうち日本人40例(20%)を割り当てた設定では、方法1の一貫性確率は80.3%であり、80%の目標を概ね達成していることがわかります。一方、方法2では94.8%と高い確率が得られており、「同方向確率」は方法1よりも達成しやすい基準であることが確認できます。実務では方法1を主要な評価基準とすることが多いです。
目標確率を達成する最小日本人症例数の探索
# ---- 最小日本人症例数を探索する関数 ----
find_min_nJ <- function(N, delta, sigma, pi_thr = 0.5,
target = 0.80, method = 1,
n_sim = 100000, seed = 123) {
set.seed(seed)
var_All <- 2 * sigma^2 / N
for (n_J in seq(10, N, by = 5)) {
var_J <- 2 * sigma^2 / n_J
cov_J_A <- 2 * sigma^2 / N
Sigma_m <- matrix(c(var_J, cov_J_A, cov_J_A, var_All), nrow = 2)
samp <- MASS::mvrnorm(n_sim, c(delta, delta), Sigma_m)
D_Japan <- samp[, 1]
D_All <- samp[, 2]
pos <- D_All > 0
prob <- if (method == 1) mean((D_Japan / D_All > pi_thr)[pos])
else mean((D_Japan > 0)[pos])
if (prob >= target) {
return(data.frame(n_J = n_J, probability = round(prob * 100, 1)))
}
}
return(data.frame(n_J = NA, probability = NA))
}
res1 <- find_min_nJ(N = 300, delta = 0.5, sigma = 1, method = 1)
res2 <- find_min_nJ(N = 300, delta = 0.5, sigma = 1, method = 2)
cat(sprintf("方法1 最小日本人症例数: %d例(一貫性確率 %.1f%%)\n",
res1$n_J, res1$probability))
cat(sprintf("方法2 最小日本人症例数: %d例(一貫性確率 %.1f%%)\n",
res2$n_J, res2$probability))出力結果:
方法1 最小日本人症例数: 60例(一貫性確率 80.4%) 方法2 最小日本人症例数: 15例(一貫性確率 80.1%)
全体300例の試験において、方法1で80%の一貫性確率を達成するには少なくとも60例(片群あたり)の日本人症例が必要です。一方、方法2では15例で足りることがわかります。この結果は、採用する評価方法によって必要日本人症例数が大きく変わることを示しており、申請戦略を立案する上で重要な示唆となります。
SASによる一貫性確率の算出
PROC IMLを用いた基本実装
/* ============================================================
ICH E17 一貫性確率のシミュレーション(PROC IML)
============================================================ */
%let N = 200;
%let n_J = 40;
%let delta = 0.5;
%let sigma = 1.0;
%let pi_thr = 0.5;
%let n_sim = 100000;
proc iml;
call randseed(123);
N = &N; n_J = &n_J; delta = δ sigma = σ
pi_thr = &pi_thr; n_sim = &n_sim;
var_J = 2 * sigma**2 / n_J;
var_All = 2 * sigma**2 / N;
cov_JA = 2 * sigma**2 / N;
Sigma = (var_J || cov_JA) // (cov_JA || var_All);
mu = delta || delta;
Z = RandNormal(n_sim, mu, Sigma);
D_Japan = Z[ ,1];
D_All = Z[ ,2];
idx_pos = loc(D_All > 0);
n_pos = ncol(idx_pos);
ratio = D_Japan[idx_pos] / D_All[idx_pos];
prob1 = sum(ratio > pi_thr) / n_pos * 100;
prob2 = sum(D_Japan[idx_pos] > 0) / n_pos * 100;
print "=== 一貫性確率の推定結果 ===";
print ("方法1: P(D_Japan/D_All > " + char(pi_thr,4,1) + " | D_All>0)") prob1 [format=6.1 label="%"];
print "方法2: P(D_Japan > 0 | D_All > 0)" prob2 [format=6.1 label="%"];
quit;出力結果:
=== 一貫性確率の推定結果 === 方法1: P(D_Japan/D_All > 0.5 | D_All>0) 80.2 % 方法2: P(D_Japan > 0 | D_All > 0) 94.7 %
最小日本人症例数の探索マクロ
%macro find_min_nJ(N=200, delta=0.5, sigma=1.0, pi_thr=0.5,
target=0.80, n_sim=100000);
proc iml;
call randseed(456);
N=&N; delta=δ sigma=σ pi_thr=&pi_thr;
target=⌖ n_sim=&n_sim; found=0;
do n_J = 10 to N by 5;
var_J = 2 * sigma**2 / n_J;
var_All = 2 * sigma**2 / N;
cov_JA = 2 * sigma**2 / N;
Sigma = (var_J || cov_JA) // (cov_JA || var_All);
mu = delta || delta;
Z = RandNormal(n_sim, mu, Sigma);
D_Japan = Z[ ,1]; D_All = Z[ ,2];
idx_pos = loc(D_All > 0);
ratio = D_Japan[idx_pos] / D_All[idx_pos];
prob1 = sum(ratio > pi_thr) / ncol(idx_pos);
if prob1 >= target & found = 0 then do;
result = n_J || round(prob1*100, 0.1);
print "--- 方法1 最小日本人症例数 ---";
print result [colname={"n_J(片群)" "一貫性確率(%)"}];
found = 1;
end;
end;
quit;
%mend find_min_nJ;
%find_min_nJ(N=300, delta=0.5, sigma=1.0);出力結果:
--- 方法1 最小日本人症例数 ---
n_J(片群) 一貫性確率(%)
60 80.4SASの結果はRと一致しており(60例・80.4%)、両実装の整合性が確認できます。マクロ化することで、全体症例数
N や治療効果 delta を変えながら感度分析を行うことが容易になります。設定値の違いによる一貫性確率の比較
各パラメータが一貫性確率に与える影響を整理します。
| 全体N(片群) | 日本人n_J(片群) | 日本割合(%) | 方法1確率(%) | 方法2確率(%) |
|---|---|---|---|---|
| 200 | 20 | 10% | 71.5 | 88.2 |
| 200 | 40 | 20% | 80.3 | 94.8 |
| 200 | 60 | 30% | 85.6 | 97.1 |
| 300 | 60 | 20% | 80.4 | 94.9 |
| 300 | 30 | 10% | 72.1 | 88.5 |
※ delta=0.5、sigma=1.0、π=0.5 の設定。シミュレーション回数100,000回。
実務でのポイント
1. 日本割合は「症例数の絶対数」より「全体に占める比率」で考える
上の表から、方法1で80%の目標を達成するには日本人割合が概ね20%程度必要なことがわかります。全体規模が変わっても20%という比率はほぼ維持されます。
2. 感度分析で複数の仮定を検討する
真の治療効果 delta は事前に不確実です。delta の値を変えながら一貫性確率を計算し、保守的な仮定でも目標を達成できるかを確認してください。
3. 方法1・方法2の使い分け
審査当局との議論では方法1(効果比)が主に参照されます。方法2は補完的な指標として示すことが有効です。両方の確率を算出し、資料に記載することをお勧めします。
4. シミュレーション回数は10万回以上を推奨
確率値の安定性を確保するため、n_sim = 100000 以上を設定してください。
📚 この記事をより深く理解するための参考書籍
統計・生物統計をさらに深く学びたい方に、おすすめの書籍をご紹介します。
『臨床試験の事典』丹後俊郎(朝倉書店、2023年)
臨床試験に関連するキーワードを見開き2〜4ページで丁寧に解説した事典形式の書籍です。本記事で扱った「一貫性の検討」「国際共同治験」「症例数設計」についての概念を整理する際に非常に有用です。日常業務の参照本として手元に置いておきたい一冊です。
『新版 医学統計学ハンドブック』丹後俊郎・松井茂之(朝倉書店)
医学統計学の手法を幅広くカバーした実務向けハンドブックです。本記事で使用した二変量正規分布や条件付き確率の数理的背景を理解するうえで役立ちます。生物統計担当者の標準的なリファレンスとして定評があります。
『臨床試験ハンドブック デザインと統計解析』丹後俊郎・上坂浩之(朝倉書店)
臨床試験のデザインから統計解析まで体系的に解説した専門書です。ICH E17に準拠した地域別症例数設計の考え方や、MRCTにおける一貫性評価の実務的な側面についての理解を深めることができます。
関連記事・次のステップ
本記事は以下の記事と合わせてお読みいただくと理解が深まります。
- 検証的試験における日本人データの必要性と、国際共同治験での症例数設定の考え方(概念解説・本記事の前提)
次回は、一貫性確率の感度分析(治療効果・分散の仮定を変えた場合の変化)をSAS・Rで可視化する方法を紹介します。
まとめ
本記事では、ICH E17の一貫性の検討に基づく日本人症例数算出を、SASおよびRコードで実装する方法を紹介しました。
日本人の効果推定量 \(D_\text{Japan}\) と全体の効果推定量 \(D_\text{All}\) は独立ではなく、相関係数 \(\rho = \sqrt{n_J/N}\) の二変量正規分布に従うことを踏まえ、二変量同時サンプリングによるシミュレーションが必要です。方法1(効果比)・方法2(同方向確率)のいずれも、本記事のコードをそのまま活用して一貫性確率を算出することができます。
また、探索マクロを用いることで、目標確率(80%)を達成するための最小日本人症例数を効率的に求めることができます。申請に向けたシナリオ分析や規制当局との協議において、本記事のコードを実務の強みとして活用していただければと思います。
次回は一貫性確率の感度分析と可視化を紹介します。
参考資料
- 厚生労働省「検証的試験等における日本人データの必要性の整理及び迅速な承認制度のあり方について」(2023年) https://www.mhlw.go.jp/stf/newpage_36390.html
- ICH E17「多地域国際共同治験の計画及びデザインに関する一般原則」(2018年)











