Quickstart: PK-like Dummy Data Harness
Quickstart: PK-like Dummy Data Harness
このQuickstartは、初めてこのリポジトリを触る人が 複数薬剤デモを実行し、SDTM-like -> ADPC/NCA/PopPK入力まで確認する ための最短手順です。
このハーネスは臨床推論や投与設計のためのものではありません。目的は、SDTM -> ADaM -> NCA / PopPK workflowを開発・検証するための実データ風dummy fixtureを作ることです。
1. What You Will Run
flowchart LR
A["harness_examples/demo_set.yml"] --> B["run_harness.py"]
B --> C["run_demo_set.py"]
C --> D["raw/sim_full.csv"]
D --> E["run_workflow.py"]
E --> F["clinical_samples.csv"]
E --> G["SDTM-like DM/VS/LB/EX/PC"]
E --> H["ADPC.csv / NCA_INPUT.csv / POPPK_INPUT.csv"]
E --> I["MANIFEST.yml / trace.log / summary"]
run_demo_set.py は外部mrgsolve runnerがない環境でも複数薬剤デモを確認するためのツールです。既存specのthetaからデモ専用の解析式 sim_full.csv を作ります。mrgsolve runnerの代替ではありません。
run_harness.py は設定ファイルから既存ツールを呼び出す共通入口です。Shiny Cloud、Tauri、CLIのどれからでも同じconfigを使えるようにするための薄いdispatcherです。
tools/pk_fixture_cli.py は正式なstandalone CLI入口です。リポジトリのルートから python3 -m tools.pk_fixture_cli ... として実行します(checkout前提のため専用のconsole scriptは提供していません)。
UI/launcherから呼ぶ場合の契約は LAUNCHER_CONTRACT.md を参照してください。
説明資料用のdraw.io図は assets/pk-harness-process.drawio にあります。今回の単回・反復・mrgsolve・ADNCAの簡易図は assets/pkdummy-workflow.drawio(PNG)です。図の読み方は PROCESS_FLOW.md を参照してください。
成果物の形だけ先に確認したい場合は、Git管理された最小例 ../examples/minimal_aciclovir と ../examples/minimal_albuterol_iv を見てください。
2. Install And Check
リポジトリ直下で実行します。
python3 -m pip install -r requirements.txt
make validate
make validate がOKなら、薬剤テンプレート、必須ファイル、基本的なハーネス構造は読めています。
環境依存の確認を先に行う場合:
make doctor
python3 -m tools.pk_fixture_cli doctor
Git管理された最小exampleの再生成チェック:
make examples-check
READMEだけで第三者が動かせるかまでまとめて確認する場合:
make acceptance-check
configだけを確認する場合:
python3 tools/validate_harness_config.py harness_examples/demo_set.yml
3. Run Multi-drug Demo
OK例、WARN例、限界例が混ざる標準デモセットです。
python3 tools/run_harness.py harness_examples/demo_set.yml
CLI入口から実行する場合:
python3 -m tools.pk_fixture_cli run harness_examples/demo_set.yml
主な出力:
outputs/demo_set_config/
HARNESS_MANIFEST.yml
HARNESS_STATUS.json
DEMO_MANIFEST.yml
summary.csv
summary.md
albuterol/
raw/sim_full.csv
workflow/
MANIFEST.yml
reports/simulation_validation.md
raw/clinical_samples.csv
sdtm_like/
DM.csv
VS.csv
LB.csv
EX.csv
PC.csv
analysis_inputs/
ADPC.csv
NCA_INPUT.csv
POPPK_INPUT.csv
MANIFEST.yml
4. Read The Summary
cat outputs/demo_set_config/summary.md
見るポイント:
| Column | Meaning |
|---|---|
Workflow |
後処理全体のステータス |
Validation |
AUC/t1/2などのPK sanity check |
ADPC rows |
ADPC-like出力行数 |
NCA rows |
NCA入力行数 |
PopPK rows |
NONMEM-like入力行数 |
Warnings |
文献targetやspec thetaとのズレなど |
WARN や FAILED は、workflow fixtureでは必ずしも悪ではありません。処理系が境界条件を扱えるかを見る材料になります。ただし、臨床的に正しい再現とは説明しないでください。
5. Check Downstream Inputs
薬剤ごとに analysis_inputs を確認します。
head outputs/demo_set_config/albuterol/workflow/analysis_inputs/ADPC.csv
head outputs/demo_set_config/albuterol/workflow/analysis_inputs/NCA_INPUT.csv
head outputs/demo_set_config/albuterol/workflow/analysis_inputs/POPPK_INPUT.csv
cat outputs/demo_set_config/albuterol/workflow/analysis_inputs/MANIFEST.yml
| File | Intended use | Limitation |
|---|---|---|
ADPC.csv |
ADPC-like parser / ADaM workflow smoke test | submission-ready ADaMではない |
NCA_INPUT.csv |
NCA pipeline smoke test | NCAツール固有列はadapterで調整する |
POPPK_INPUT.csv |
NONMEM-like parser / control stream smoke test | モデル固有datasetではない |
MANIFEST.yml |
入力対応、件数、警告確認 | 警告があれば下流投入前に読む |
6. Generate A Descriptive Report
ADPC-like出力から、被験者背景の要約統計、時点別の濃度統計、ggplot2の濃度推移図を作れます。
Rscript tools/report_pk_fixture.R \
--analysis-dir outputs/demo_set_config/albuterol/workflow/analysis_inputs \
--out-dir outputs/demo_set_config/albuterol/workflow/reports/pk_fixture_report \
--title "albuterol PK fixture report"
主な出力:
| File | Content |
|---|---|
REPORT.md |
被験者背景、濃度統計、linear/log plotをまとめたMarkdown |
subject_numeric_summary.csv |
年齢、体重、身長、BMI、BSA、クレアチニンなど |
subject_categorical_summary.csv |
性別、arm、routeなど |
concentration_summary.csv |
TIME_H ごとの n/mean/SD/CV/geometric mean/median |
concentration_profile_linear.png |
そのままの濃度スケールのggplot |
concentration_profile_log.png |
log10濃度スケールのggplot。非陽性濃度はlog plotから除外 |
これはfixture確認用の記述統計レポートです。臨床薬理モデルの妥当性確認やsubmission-ready ADaM reportではありません。
6.1 Generate ADNCA-like Records and Concentration Plots
単回投与では ADPC.csv から線形上昇/log-linear下降の台形則、Cmax/Tmax、terminal lambda-z(保守的な減少尾部がある場合のみ)を計算します。反復投与では、既存の NCA_SS_SUMMARY.csv、TROUGH_SUMMARY.csv、NCA_SS_INPUT.csv を読み、定常状態NCA、トラフ、定常状態区間の濃度プロットを作ります。
# 単回投与
Rscript tools/make_adnca.R \
--analysis-dir outputs/demo_dm_ex_pc_50/apixaban/workflow/analysis_inputs \
--out-dir outputs/demo_dm_ex_pc_50/apixaban/workflow/adnca \
--title "Apixaban single-dose ADNCA fixture"
# 反復経口投与(--mode auto は summary CSV を検出して repeated を選択)
Rscript tools/make_adnca.R \
--analysis-dir outputs/demo_repeated_oral_trough_ss_50/apixaban/workflow/analysis_inputs \
--out-dir outputs/demo_repeated_oral_trough_ss_50/apixaban/workflow/adnca \
--title "Apixaban repeated-dose ADNCA fixture"
主な出力は ADNCA.csv(long形式)、ADNCA_WIDE.csv(被験者1行)、ADNCA_REPORT.md、ADNCA_MANIFEST.yml、線形/log濃度プロットです。反復投与では steady_state_profile_linear.png と steady_state_profile_log.png も作成します。0時間baselineトラフは ANL01FL=N として残し、解析対象から除外します。これは解析配管用のADNCA-like fixtureであり、submission-ready ADaMや実NCAエンジンの代替ではありません。
Word共有用のdocxが必要な場合は、同じ入力からQuarto版を作成します。
Rscript tools/render_pk_fixture_quarto.R \
--analysis-dir outputs/demo_set_config/albuterol/workflow/analysis_inputs \
--out-dir outputs/demo_set_config/albuterol/workflow/reports/pk_fixture_quarto \
--title "albuterol PK fixture report"
出力は pk_fixture_report.qmd, pk_fixture_report.docx, QUARTO_REPORT_MANIFEST.yml です。Wordスタイルを合わせたい場合は、任意で --reference-doc reference.docx を指定します。
同梱のたたき台は templates/pk_fixture_reference.docx です。
7. Generate Tool-specific Adapter CSVs
ADPC/NCA/PopPK入力から、NCA/PopPKツール別の軽量adapter CSVを作れます。
python3 tools/make_downstream_adapters.py \
--analysis-dir outputs/demo_set_config/albuterol/workflow/analysis_inputs \
--out-dir outputs/demo_set_config/albuterol/workflow/adapters
出力:
| File | Intended use |
|---|---|
nca_r.csv |
R系NCA parser smoke test |
nca_phoenix.csv |
Phoenix風NCA取り込み確認 |
poppk_nonmem.csv |
NONMEM風control-stream parser確認 |
poppk_nlmixr2.csv |
nlmixr2風parser確認 |
これは列名adapterであり、各ツールの正式な解析仕様を保証するものではありません。
施設ごとのCSV列名や必須列に合わせたい場合:
python3 tools/make_site_adapters.py \
--analysis-dir outputs/demo_set_config/albuterol/workflow/analysis_inputs \
--spec-yml external_validation/site_adapter_template.yml \
--out-dir outputs/demo_set_config/albuterol/workflow/site_adapters
external_validation/site_adapter_template.yml をコピーして、施設のNCA/PopPK dataset仕様に合わせて編集します。
adapter生成、簡易NCA、PopPK parser template作成まで一括で確認する場合:
python3 tools/run_downstream_smoke.py \
--analysis-dir outputs/demo_set_config/albuterol/workflow/analysis_inputs \
--out-dir outputs/demo_set_config/albuterol/workflow/downstream_smoke
この結果は DOWNSTREAM_SMOKE_MANIFEST.yml に残ります。正式なPhoenix/NONMEM/nlmixr2検証ではなく、下流接続用のE2E smoke checkです。
8. Two Input Patterns
このハーネスは2パターンで使えます。
| Pattern | Command path | What happens |
|---|---|---|
| 既存DM/LB/VS/PCなし | sim_full.csv -> run_workflow.py |
clinical_samples.csv, SDTM-like, analysis inputsを生成 |
| 既存DM/LB/VS/PC skeletonあり | run_workflow.py --dm-csv --vs-csv --lb-csv --pc-csv |
既存DM/VS/LBを保持し、PC skeletonに濃度を注入 |
既存skeletonを使う例:
python3 tools/run_workflow.py \
--sim-full outputs/<run>/raw/sim_full.csv \
--drug <slug> \
--times 0,0.5,1,2,4,8,12,24 \
--dm-csv existing/DM.csv \
--vs-csv existing/VS.csv \
--lb-csv existing/LB.csv \
--pc-csv existing/PC_skeleton.csv \
--out-dir outputs/<run>/workflow
PC skeletonは USUBJID + PCTPTNUM を優先して照合します。次に USUBJID + PCTPT、最後に USUBJID + PCELTM/TIME を使います。
既存skeletonは実行前に最低限の列チェックを受けます。DM は USUBJID、VS は USUBJID/VSTESTCD/VSSTRESN、LB は USUBJID/LBTESTCD/LBSTRESN、PC は USUBJID と時点照合列が必要です。
9. External Runner Pattern
実運用に近いシミュレーションでは、利用環境側のmrgsolve runnerで sim_full.csv を作ってから、後処理だけをこのハーネスで行います。
このリポジトリには、比較検証用のrunnerも含まれます。
Rscript tools/mrgsolve_runner.R \
--spec drugs/apixaban/spec_pk1_oral.yml \
--out outputs/mrgsolve_demo/apixaban/raw/sim_full.csv \
--n-subjects 50 --seed 20260217
tools/mrgsolve_runner.R の詳細、IV点滴、反復投与、mrgsolve と
analytical_demo の比較手順は MRGSOLVE_RUNNER.md にまとめています。
これはmrgsolveを使わない既存のPython経路を置き換えず、独立した二重検証経路として追加するものです。
反復経口投与をmrgsolveで生成する場合は、単回投与用の run_workflow.py に
event-aware raw CSVを直接渡さず、専用設定から実行します。
python3 tools/run_harness.py \
--config harness_examples/demo_repeated_oral_trough_ss_50_mrgsolve.yml
Rscript <mrgsolve-runner> drugs/<slug>/spec_pk1_oral.yml
python3 tools/run_workflow.py \
--sim-full outputs/<run>/raw/sim_full.csv \
--drug <slug> \
--times 0,0.5,1,2,4,8,12,24 \
--out-dir outputs/<run>/workflow
10. What To Show Reviewers
臨床薬理、統計、プログラマーに共有する場合は、次をセットで見せるのが安全です。
drugs/<slug>/pk.yml
drugs/<slug>/targets.yml
drugs/<slug>/spec_pk1_*.yml
outputs/<run>/workflow/reports/simulation_validation.md
outputs/<run>/workflow/reports/pk_fixture_report/REPORT.md
outputs/<run>/workflow/reports/pk_fixture_quarto/pk_fixture_report.docx
outputs/<run>/workflow/MANIFEST.yml
outputs/<run>/workflow/trace.log
outputs/<run>/workflow/sdtm_like/MANIFEST.yml
outputs/<run>/workflow/analysis_inputs/MANIFEST.yml
複数薬剤デモでは、まず outputs/demo_set_config/summary.md を見せると全体像が伝わります。
run-level MANIFEST.yml には生成CSV/レポートartifactごとの output_checksums
(SHA-256)も残ります。timestampを固定した監査runでは run_workflow.py --reproducible
と SOURCE_DATE_EPOCH を使います。
11. Completion Checklist
[ ] make validate がOK
[ ] 必要なら make doctor で環境差を確認
[ ] make examples-check でversioned exampleの出力形式を確認
[ ] run_harness.py が完走
[ ] summary.md で OK/WARN/FAILED の意味を確認
[ ] 少なくとも1薬剤で ADPC/NCA/PopPK入力を確認
[ ] 必要なら report_pk_fixture.R で記述統計レポートを作成
[ ] Word共有が必要なら render_pk_fixture_quarto.R でdocxを作成
[ ] 必要なら make_downstream_adapters.py でtool別adapter CSVを作成
[ ] 必要なら run_downstream_smoke.py で下流E2E smoke checkを実行
[ ] 必要なら validate_manifest.py でMANIFEST.yml構造を確認
[ ] MANIFEST.yml と trace.log が残っている
[ ] pk.yml は自動更新していない
より詳しい説明は USER_GUIDE.md を参照してください。