DM / EX / PC 50例 PKデモデータ仕様
DM / EX / PC 50例 PKデモデータ仕様
- ステータス: Implemented v0.1
- 作成日: 2026-07-27
- 対象:
pkdummy-harnessの workflow fixture
1. 目的
pkdummy-harness の既存PK specとデモ生成ツールを使い、50例分の濃度データと、対応する限定版SDTM-like DM.csv, EX.csv, PC.csv を作る。
主用途はCSV取込、ドメイン結合、ADPC/NCA/PopPK入力生成、レポート生成のデモとスモークテストである。臨床予測、用量設定、申請用SDTM/ADaM、モデル妥当性の証明には使用しない。
2. v0.1の決定事項
| 項目 | 仕様 |
|---|---|
| 薬剤 | apixaban 1薬剤 |
| PK参照 | drugs/apixaban/pk.yml, targets.yml, spec_pk1_oral.yml |
| 投与 | Arm A、10 mg、単回経口投与 |
| 症例数 | 50例 |
| シミュレーション | analytical_demo、1-compartment workflow fixture |
| 採血時点 | 0, 1, 2, 3, 4, 8, 12, 24 h(8時点/例) |
| 濃度 | DV をPCに採用、単位 ng/mL |
| 個体差 | demo-only iiv_cv: 0.1 |
| 残差 | demo-only residual_cv: 0.05 |
| 乱数seed | 20260217 |
| 基準日時 | 2026-01-01T08:00:00 |
| STUDYID | spec由来の OSP_apixaban |
iiv_cv と residual_cv は既存デモ設定に合わせた見た目上のfixture個体差であり、apixaban固有の推定値とは扱わない。
3. 入力契約
実行入口は1つのYAMLとする。simulation.n_subjects と demo_setでの sampling.method / sampling.predose_mdv1 は実行時overrideとして run_harness.py から run_demo_set.py へ引き渡す。canonical specは書き換えない。
version: "0.1"
mode: demo_set
drugs_dir: drugs
out_dir: outputs/demo_dm_ex_pc_50
drugs:
- apixaban
simulation:
engine: analytical_demo
n_subjects: 50
variability:
iiv_cv: 0.1
residual_cv: 0.05
seed: 20260217
sampling:
times_h: [0, 1, 2, 3, 4, 8, 12, 24]
method: exact
predose_mdv1: true
validation:
allow_failed: false
入力バリデーション
drugsはv0.1では1薬剤のみとする。simulation.n_subjectsは1以上の整数とし、本仕様では50を必須とする。- 複数armの薬剤specに単一の
n_subjectsを与えた場合は自動配分せずエラーとする。v0.1のapixaban specは単一armである。 - 採血時点は重複なしの非負数とし、specのシミュレーション範囲内とする。
method: exactのため、全指定時点が0.5 h間隔のsim_full.csvに実在することを必須とする。- canonicalな
pk.yml,targets.yml,spec_pk1_oral.ymlは書き換えない。症例数の50例化は実行時オーバーライドだけで適用する。
4. データフロー
flowchart LR
A["harness.yml"] --> B["run_harness.py"]
B --> C["run_demo_set.py"]
C --> D["raw/sim_full.csv"]
D --> E["run_workflow.py"]
E --> F["sample_clinical_timepoints.py"]
F --> G["raw/clinical_samples.csv"]
G --> H["make_sdtm_like_domains.py"]
H --> I["DM.csv"]
H --> J["EX.csv"]
H --> K["PC.csv"]
I --> L["make_analysis_inputs.py"]
J --> L
K --> L
analytical_demo は既存specの model.theta から解析式で濃度形状を作る。mrgsolve runnerの代替とは表現しない。mrgsolveを使う場合は、外部runnerが作成した sim_full.csv を post_simulation モードに渡す別経路とする。
5. 出力と件数
以下のパスは <run_dir> = outputs/demo_dm_ex_pc_50/apixaban からの相対パスとする。
| 出力 | 予定件数 | 説明 |
|---|---|---|
raw/sim_full.csv |
7,250 | 50例 × 145時点(0–72 h、0.5 h間隔) |
workflow/raw/clinical_samples.csv |
400 | 50例 × 8採血時点 |
workflow/sdtm_like/DM.csv |
50 | 1例1行 |
workflow/sdtm_like/EX.csv |
50 | 1例1投与 |
workflow/sdtm_like/PC.csv |
400 | 1例8採血行 |
workflow/sdtm_like/VS.csv |
200 | 既存workflowの副生成物、4項目/例 |
workflow/sdtm_like/LB.csv |
50 | 既存workflowの副生成物、CREAT 1行/例 |
workflow/analysis_inputs/ADPC.csv |
400 | 下流スモークテスト用 |
workflow/analysis_inputs/NCA_INPUT.csv |
400 | 下流スモークテスト用 |
workflow/analysis_inputs/POPPK_INPUT.csv |
450 | 50投与行 + 400観測行 |
加えて HARNESS_STATUS.json, HARNESS_MANIFEST.yml, DEMO_MANIFEST.yml, workflow MANIFEST.yml, trace.log, simulation_validation.md を出力する。
6. ドメイン仕様
6.1 DM
主キーは USUBJID。USUBJID は OSP_apixaban-001 から OSP_apixaban-050 までとする。
| 列 | 規則 |
|---|---|
STUDYID |
OSP_apixaban |
DOMAIN |
DM |
USUBJID |
study ID + 3桁番号 |
SUBJID |
1–50 |
RFSTDTC, RFENDTC |
2026-01-01 |
ARM, ACTARM |
A |
AGE |
現行demo generatorの決定的規則、40–59歳 |
AGEU |
YEARS |
SEX |
奇数ID=M、偶数ID=F(25例ずつ) |
体重は sim_full.csv とVSに64, 67, 70, 73, 76 kgの決定的パターンで入るが、v0.1の濃度式のCL/V/KA共変量には接続しない。
6.2 EX
主キーは USUBJID + EXSEQ。1例に1行作成する。
| 列 | 規則 |
|---|---|
STUDYID |
OSP_apixaban |
DOMAIN |
EX |
USUBJID |
DMと完全一致 |
EXSEQ |
1–50の決定的連番 |
EXTRT |
APIXABAN |
EXDOSE |
10 |
EXDOSU |
mg |
EXROUTE |
ORAL |
EXINFH |
0 |
EXSTDTC, EXENDTC |
2026-01-01T08:00:00 |
EXARM, EXACTARM |
A |
6.3 PC
主キーは USUBJID + PCSEQ。DMの各50例に8行ずつ作成する。
| 列 | 規則 |
|---|---|
STUDYID |
OSP_apixaban |
DOMAIN |
PC |
USUBJID |
DMと完全一致 |
PCSEQ |
出力全体で決定的な1–400連番 |
PCTESTCD |
DRUGCONC |
PCTEST |
Drug Concentration |
PCORRES, PCSTRESN |
clinical_samples.csv の DV |
PCORRESU, PCSTRESU |
ng/mL |
PCTPTNUM |
1–8 |
PCTPT |
Pre-dose, 1 h, 2 h, 3 h, 4 h, 8 h, 12 h, 24 h |
PCELTM |
PT0H, PT1H, PT2H, PT3H, PT4H, PT8H, PT12H, PT24H |
PCDTC |
基準日時 + 実採血時間 |
PCMDV |
Pre-doseのみ 1、その他は 0 |
specに根拠のあるLLOQがないため、PCLLOQ は空欄とし、BLQ判定を作らない。Pre-dose行は採血ポイントとして残すが、PopPK観測尤度に使わないよう MDV=1 とする。
7. 濃度生成規則
- CL, V, KA, F1, ALAG1、濃度単位、投与量は
drugs/apixaban/spec_pk1_oral.ymlの値をそのまま使う。本仕様にPK値を複製しない。 - デモ生成ではCL, V, KAに同一CVの独立lognormal factorを適用し、
DVにdemo-onlyの比例残差を加える。 CPとIPREDは残差なし、DVは残差ありとする。PCにはDVを採用する。- 濃度は負値にしない。
- WT, AGE, SEXはドメイン結合デモ用の属性であり、現行v0.1ではCL/V/KAの共変量モデルに使わない。
- 同じseedと入力の再実行でCSVデータは一致する。manifestの実行時刻は再現性比較から除外する。
8. 実装状況
実装済みの変更は次のとおり。
tools/run_demo_set.pyn_subjects_overrideを受け、単一armの実行時人数だけを50にする。- コマンド行に
--n-subjectsを追加する。 - sampling methodと
predose_mdv1をrun_workflow()へ引き渡す。
tools/run_harness.pysimulation.n_subjects,sampling.method,sampling.predose_mdv1をdemo_set実行に引き渡す。
tools/validate_harness_config.pysimulation.n_subjectsの正の整数チェックを追加する。
- manifest/status
- 要求症例数、実生成症例数、採血スケジュール、sampling method、seed、demo-only variabilityを記録する。
- テスト
- 50例override、不正な人数、複数armの曖昧性防止、Pre-dose MDV、件数、再現性をカバーする。
- CDISC API補助アダプタ
tools/fetch_cdisc_reference.pyでDM/EXの参照fixtureを任意取得できる。- API取得物は
CDISC_API_MANIFEST.ymlにURL、リクエスト条件、行数、症例数、SHA-256を記録する。 - API取得物はPK workflowへ自動結合せず、PC濃度はpkdummy生成物を正とする。
9. 受け入れ条件
- 実行は異常終了せず、workflow statusとvalidation statusがともに
OKとなる。 - DM=50行、EX=50行、PC=400行である。
- DMの
USUBJIDは50件ユニークである。EXとPCのすべてのUSUBJIDがDMに存在する。 - 各例にEXが1行、PCが8行ある。
- 各例のPC時点集合が
{0, 1, 2, 3, 4, 8, 12, 24}hと一致する。 PCSTRESNはPre-doseを含めて数値で、全行でPCSTRESN >= 0、単位はng/mLである。- Pre-dose行は
PCMDV=1、その他はPCMDV=0である。 - EXの投与量、単位、経路がspecと一致する。
- 同一seedで2回生成したDM/EX/PCのファイルchecksumが一致する。
pk.yml,targets.yml,spec_pk1_oral.yml,INDEX.csv,pk_library.ymlに差分がない。make harness-checkが通る。
10. 非目標
- submission-ready SDTM/ADaM/XPTの作成
- 実患者や特定臨床試験の再現
- apixabanの用量妥当性や臨床的予測性能の証明
- 共変量モデル、IOV、欠測メカニズム、相関omega、薬剤固有の残差モデルの再現
- mrgsolve、NONMEM、nlmixr2、Phoenixの実行保証
11. 将来拡張
subjects.csv/ simPopを使った現実的な人口統計属性- 複数armまたは複数用量
- LLOQに根拠がある薬剤でのBLQシナリオ
- 欠測、採血時刻jitter、protocol deviationのstress fixture
- 外部mrgsolve runnerが作った
sim_full.csvと同じDM/EX/PC後処理の接続試験