pkpd-modeling について
薬物動態・薬力学の解析スクリプトと手順を提供するスキルです。研究者や薬物動態解析の専門家向けに、曝露量の計算、モデルの適合と診断、シミュレーションなどを扱い、臨床判断ではなく解析結果を報告します。
主な機能
- 01非コンパートメント曝露量解析
- 02コンパートメントモデル適合
- 03母集団データセットの点検
- 04投与レジメンのシミュレーション
- 05曝露反応・生物学的同等性解析
活用シーン
- 01濃度-時間データから曝露指標を計算
- 02母集団 PK 解析前のデータ点検
- 03集団における投与レジメンのシミュレーション
- 04曝露反応や生物学的同等性基準の評価
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kalarislabs/ research-agent-skills --skill pkpd-modelingインストール後、Claude Code で/pkpd-modelingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/nca-reporting-checklist.mdpopk-analysis-plan.mdreferences/antimicrobial-and-tdm.mdbioequivalence.mddataset-standards.mdddi-and-qt.mdnca-conventions.mdpbpk.mdpd-and-exposure-response.mdpopulation-pk.mdregulatory-guidance.mdsoftware-ecosystem.mdsource-ledger.mdspecial-populations.mdstructural-models.mdtmdd-and-biologics.mdscripts/_common.py_models.pyallometry_and_fih.pybioequivalence.pycheck_popk_dataset.pyddi_static.pyexposure_response.pyfit_compartmental.pynca.pysimulate_regimen.pytdm_bayes.py詳細
薬物動態学・薬力学モデリング
使用する場面
薬物に対して身体がどのような作用をするのか、または薬物が身体にどのような作用をするのかに関するあらゆる質問です。濃度‐時間データから曝露指標を算出する、構造モデルをフィッティングする、母集団解析を構築または検証する、用量や投与レジメンを選択する、曝露と効果の関係を調べる、製剤を比較する、または新たな母集団にスケーリングする場合などです。
3つのルール
1. 計算を始める前に、曝露指標と解析対象集団を確定します。 AUC(0-t)、AUC(0-inf)、定常状態におけるAUC(0-tau)、Cavgは、それぞれ異なる量であり、異なる問いに答えるものです。観測値に基づくClastと予測値に基づくClastから算出するAUCinfも同様です。数値を見てから選ぶと、陰性試験が陽性になることがあります。
2. 構造モデル、変動モデル、共変量モデルは、それぞれ別の決定事項です。 これらは頻繁に混同されます。実際にはモデル化されていない投与機会間変動を吸収するためにコンパートメントを追加したり、本当は吸収モデルの誤指定なのにそれを修正するために共変量を追加したりします。変更する前に、どのモデルが誤っているのかを診断してください。
3. 収束は識別可能性を意味しません。 パラメーターの相対標準誤差が200%で収束したフィットや、2つのパラメーター間の相関が0.99であるフィットは、データから両者を区別できないことを示しています。この状況でもパラメーターテーブルだけを見ると問題がないように見えるため、ここにあるすべてのフィッティングスクリプトは両方を報告し、警告を出します。
対象範囲
このスキルは計算、診断、構造化を行います。製剤が生物学的同等性を有すると判断すること、試験の用量を選択すること、患者への推奨用量を決めること、薬物にQTリスクがないと結論づけること、または有資格の薬物動態学者、臨床薬理学者、規制当局による審査に代わることはしません。スクリプトは結果を報告するだけで、結論は出しません。特に tdm_bayes.py はモデリングの補助ツールです。患者の投与レジメンを変更するかどうかは、担当医師が決定します。
スクリプト
cd skills/pkpd-modeling/scripts
| スクリプト | 回答する質問 |
|---|---|
nca.py | 曝露指標は何ですか。また、終末相は指標を報告するのに十分な精度ですか? |
fit_compartmental.py | このデータが裏付ける構造モデルはどれですか。また、そのパラメーターは識別可能ですか? |
simulate_regimen.py | この投与レジメンは定常状態でどのような結果をもたらし、母集団のどの割合に当てはまりますか? |
check_popk_dataset.py | NONMEMはこのデータセットを想定どおりに読み込みますか? |
exposure_response.py | 曝露‐反応関係はありますか。また、データ内にプラトーはありますか? |
bioequivalence.py | 90% CIは基準を満たしていますか。また、どの基準が適用されますか? |
allometry_and_fih.py | 開始用量、またはより小さな集団や若年集団における用量はどれくらいですか? |
ddi_static.py | in vitroデータは、ICH M12に基づく臨床DDI試験の実施基準に該当しますか? |
tdm_bayes.py | 測定した血中濃度から、この患者の個別パラメーターはどのように推定されますか? |
すべてのスクリプトで --format table|tsv|json を使用できます。データは標準出力に、出典情報と所見は標準エラー出力に送られるため、> out.tsv を使えば分離できます。終了コードは、所見がない場合は 0、所見があった場合は 1、入力が不正な場合は 2 です。そのため、どのスクリプトもワークフローのゲートとして使用できます。
共通処理は2つのプライベートモジュールにまとめられています。_models.py(線形マンモセプティックモデルの解析解、および統合されたMichaelis-Menten、TMDD、間接反応構造)と _common.py(入出力とレポート)です。Bateman関数を再導出するのではなく、これらをインポートしてください。
ワークフロー
1. ノンコンパートメント解析
python3 nca.py -i profile.csv --dose 100 --route extravascular --partial-auc 0-24
答えを左右する選択肢は4つあり、通常は暗黙のままです。このスクリプトでは、その4つすべてを明示します。
--auc-method(デフォルトは linup-logdown)、--blq-rule、--lambda-z-points または明示的な
--lambda-z-window、そして auc_inf_obs と auc_inf_pred のどちらを報告するかです。
Lambda_z の選択には標準ルールを用います。定量可能な最後の3点から開始し、後方へ拡張していき、 調整済み R 二乗が0.0001を超えて改善する場合に限り、より長いウィンドウを採用します。 通常の R 二乗は点を追加するたびに上昇し得るため、常に最長のウィンドウが選ばれてしまいます。 Tmax 以前または Tmax と同時点の値は、適格な点にはなりません。Tmax を含めると吸収相のテールを 当てはめることになり、半減期、Vz、AUCinf を過小評価するためです。
CL/F = 5、V/F = 20、ka = 1.2のノイズのない1コンパートメント経口投与プロファイルのシミュレーションでは、次のようになります。
id cmax tmax auc_last lambda_z t_half r2_adj auc_inf_obs pct_auc_extrap cl_f vz_f
1 3.29678 1.5 19.8737 0.25 2.77259 1 19.8739 0.000781037 5.03173 20.1269
CL/Fの0.6%の過大評価は、サンプリング間隔が疎な吸収相で台形則を用いたことによるもので、誤りでは ありません。このサンプリングスケジュールにおけるNCAの避けられないバイアスであり、NCAとコンパートメント解析による クリアランスの推定値が完全には一致しない理由です。
重要なのは結果です。tauまでで打ち切った定常状態のプロファイルでは、次のようになります。
finding: subject A: 25.2% of AUCinf is extrapolated (above 20%); AUCinf is driven by the
lambda_z fit, not by data
finding: subject A: lambda_z window spans 0.58 half-lives (below 2.0); the terminal phase may
not have been reached
どちらも正しく、どちらも日常的に無視されています。定常状態で報告すべき曝露指標は AUC(0-tau)であり、AUCinfではありません。スクリプトはAUCinfも計算しますが、信頼しないよう警告します。
2. コンパートメント解析とモデル選択
python3 fit_compartmental.py -i profile.csv --dose 500 --route iv-bolus --compare 1cmt,2cmt,3cmt
パラメータは対数スケールで推定されるため、負の値にはならず、信頼区間は非対称になります。
重み付けのデフォルトは 1/y2(CV一定)で、PKには適切ですが、等分散のPDエンドポイントには適しません。
CL 4、V1 12、Q 6、V2 40、比例誤差8%の2コンパートメントデータをシミュレーションして当てはめると、次のようになります。
model parameters wssr aic bic f_vs_simpler f_p_value compared_with
1cmt 2 3.13201 -19.4956 -18.0795 n/a n/a n/a
2cmt 4 0.0309579 -84.7477 -81.9155 550.936 9.38016e-12 1cmt
3cmt 6 0.0232859 -85.0193 -80.771 1.4826 0.27762 2cmt
AICは3コンパートメントモデルを選びます。BICとF検定はどちらもこれを棄却します。 AICのパラメータごとの固定ペナルティ2は、このサンプルサイズでは弱く、実務者が想定する以上の頻度で過剰パラメータ化されたモデルを選択します。パラメータ表で判断がつきます。
finding: fit: Q3 has 98% RSE - not estimable from these data at this model size
finding: fit: V3 has 71% RSE - not estimable from these data at this model size
一方、1コンパートメントの当てはめでは、次の結果が得られます。
finding: fit: residual signs are not random (runs test p = 0.0036) - a structural
misspecification, which no amount of reweighting will fix
構造の誤指定と誤った誤差モデルの違いを正しく見極めることが重要です。残差対時間プロットで同じ符号が連続して現れる場合は、モデルの形状が誤っています。異分散の残差で符号がランダムな場合は、重み付けが誤っています。前者で重みを変更しても、問題を隠すだけで解決にはなりません。
3. 母集団PK
何かを実行する前に、データセットを確認してください。実際に最も時間がかかるのはここです。
python3 check_popk_dataset.py -i nmdata.csv --covariates WT,CRCL --time-varying WT
重要なのは、見過ごされやすい欠陥です。NM-TRANは数値以外のDVをエラーとして拒否しません。BLQを0として読み込み、真のゼロ濃度として当てはめます。共変量が空欄の場合は0になるため、体重の欠測は体重0 kgの患者になります。IIのないADDLでは、追加投与は設定されません。同じタイムスタンプを持つレコードはファイル内の順序で処理されるため、濃度が投与前か投与後かは、どちらの行が先に来たかによって決まります。これらのどれも、実行を停止させません。
severity check detail
error non-numeric DV DV contains text... NM-TRAN reads them as 0
error subject with no dose 1 subject(s) have observations but no dose: 2
error TIME not sorted 1 subject(s) have out-of-order TIME: 1
error covariate WT missing 1 record(s) have no value...
warning duplicate TIME within a subject NONMEM applies them in file order...
推定自体について、このスキルではNLMEを再実装しません。推定方法、BLQのM1~M7法、共変量モデルの構築、モデルが妥当かどうかを判断する診断については
references/population-pk.mdを参照してください。また、使用するツールの選択については
references/software-ecosystem.mdを参照してください。
4. シミュレーションと用法・用量の選択
python3 simulate_regimen.py --cl 5 --v 40 --dose 500 --interval 12 --n-doses 10 --steady-state
python3 simulate_regimen.py --cl 5 --v 40 --dose 500 --interval 12 --n-doses 10 \
--simulate 2000 --omega-cl 0.35 --omega-v 0.25 --target-trough 4.0
決定論的シミュレーションで分かるのは「典型的な患者がどのような状態か」ですが、実際にはほとんどの場合、知りたいのはそれではありません。
metric p5 p25 median p75 p95 geo_mean
peak 11.861 14.6018 16.6702 19.1476 22.9339 16.6453
trough 0.863226 2.15191 3.64412 5.49655 9.21053 3.27035
target fraction_attaining
trough >= 4 0.444
典型的なトラフ値は3.6で、目標値は4なので、母集団の44%が目標を達成します。典型的な患者に合わせて調整した用法・用量では、母集団の約半数が目標値のどちらか一方の側に外れます。ここで報告される達成率も、実際より楽観的です。個体間変動のみを考慮しており、残差変動や投与機会間変動は含まれていません。
線形モデルは解析的に解いて重ね合わせるため、正確です。--nonlinearを指定すると、ミカエリス・メンテン消失を積分する方式に切り替わります。この場合、重ね合わせは無効であり、単回投与の結果から複数回投与時の挙動を推測することもできません。
5. 曝露反応
python3 exposure_response.py --emax -i er.csv --sigmoid
python3 exposure_response.py --cqtc -i qt.csv --cmax 250
Emaxフィッティングではfraction_of_emax_reachedが報告され、プラトーがデータの範囲外にあるフィットにはフラグが付けられます。観測された曝露量の最高値が、推定Emaxの3分の1にしか達していない場合、EmaxとEC50は外挿値であり、互いに強く相関しています。これらを独立した推定値として提示することは妥当ではありません。また、「線形」の曝露反応は、同じ曲線の低濃度側の部分にすぎません。
--cqtcは、予測されたプラセボ補正ベースラインからの変化量QTcの両側90%信頼区間の上限を10 msの閾値と比較します。これは、ICH E14が実際に問うている内容です。点推定値や95%信頼区間では、異なる問いに答えることになります。同梱モデルはスクリーニング用の通常の線形回帰です。申請に使用できるC-QTc解析には、被験者ごとのランダム切片とランダム傾きを含む混合モデルが必要です。
どのモードにも同じ注意事項が付いています。忘れられがちな点だからです。患者は曝露量ではなく用量にランダム化されています。ランダム化試験の中であっても、分位点間の曝露反応は観察的なものであり、クリアランスに影響する共変量を反映している場合があります。
6. 生物学的同等性
python3 bioequivalence.py -i be.csv --design 2x2 --metric AUC
python3 bioequivalence.py -i be.csv --design replicate --metric Cmax --scaling both
python3 bioequivalence.py --power --cv 0.30 --gmr 0.95 --target-power 0.80
「生物学的同等性」という言葉を使う基準は3つありますが、相互に置き換えることはできません。平均BE(90%信頼区間が80.00~125.00%以内)、EMAのABEL(CVwRに応じて限界値を拡大し、69.84~143.19%を上限とするが、点推定値は引き続き80~125%以内)、FDAのRSABE(Hyslopの方法によるスケーリングされた線形化限界で、そもそも信頼区間ではありません)です。--scalingは2×2デザインでは実行できません。
error: reference-scaling requires --design replicate. High observed variability in a 2x2 study
does not license widening: without replicated reference administrations there is no estimate of
within-subject reference variability to scale to.
サンプルサイズは公表済みの表を正確に再現します(CV 30%、GMR 0.95、検出力80%の場合、2×2デザインでN = 40)。標準誤差を既知として扱うのではなく、推定標準偏差の標本分布を積分して検出力を計算します。正規近似では、現実的なサンプルサイズで検出力が過大評価されます。NはCVよりも、仮定するGMRによって大きく左右される点に注意してください。GMRを0.95ではなく1.00と仮定すると、計算上のNはおよそ半分になり、BE試験の検出力が不足するよくある原因となります。
7. スケーリング、小児、初回ヒト投与
python3 allometry_and_fih.py --scale --cl 5 --weight-from 70 --weight-to 6 --pma-weeks 44
python3 allometry_and_fih.py --fih --noael rat=50,dog=10 --safety-factor 10
生後約2歳未満の患者で体格のみを用いてスケーリングすると、クリアランスが過大評価されます。新生児では数倍になることもあります。これは、クリアランスが体格ではなく、酵素や腎機能の成熟によって制限されるためです。--pma-weeksを指定すると、Anderson-Holfordのシグモイド型成熟項が追加されます。20 kg未満でこれを省略すると、所見が引き上げられます。
parameter reference exponent size_scaled maturation_factor final
CL 5 0.75 0.792063 0.30634 0.242641
V 40 1 3.42857 1 3.42857
体格のみでは0.79 L/hと予測されますが、月経後年齢44週での成熟を考慮すると0.24 L/hとなり、3.3倍の差があります。体積は成熟を考慮しません。成熟が表すのは消失能力であり、分布容積ではないためです。
--fihは、FDAの2005年最大安全初回投与量ガイダンスに基づく体表面積換算を使用します。また、NOAELから導いたMRSDだけではアゴニスト免疫調節薬に不十分であることを、必ず所見として出力します。--mabelでMABELを計算し、より低い値を採用してください。
8. 薬物相互作用
python3 ddi_static.py --basic --ki 0.5 --imax 2.0 --fu 0.05 --dose 0.4
python3 ddi_static.py --msm --ki 0.5 --imax 2.0 --fu 0.05 --dose 0.4 --fm 0.9 --fg 0.7
カットオフ値を含むICH M12の基本モデル(R1 ≥ 1.02(肝臓)、≥ 11(腸管)、TDIではR2 ≥ 1.25、誘導ではR3 ≤ 0.8、トランスポーターのカットオフ値は部位別)と、機序論的静的モデルです。基本モデルは意図的に保守的です。陰性なら意味がありますが、陽性はさらなる検討のきっかけであり、臨床的な影響の大きさを予測するものではありません。
機序論的静的モデルでは、予測値とあわせて上限値も示されます。
note: With fm = 0.9, no inhibitor of this pathway can raise the victim AUC above 10.00-fold. If
the prediction approaches that ceiling, fm is doing more work than the inhibition constants.
計算では阻害定数よりもfmとFgがはるかに大きく結果を左右しますが、通常、この2つは最も確実性の低い数値です。
9. 治療薬物モニタリング
python3 tdm_bayes.py --model vancomycin-adult --weight 80 --crcl 75 \
--dose 1500 --interval 12 --level [email protected] --level 42@2 --target-auc24 500
MAPベイズ推定は、データに情報が乏しい場合は母集団の値に近づき、情報がある場合はデータに追従します。そのため、母集団パラメータに照らしてトラフ値を読む方法にも、2点に対する対数線形回帰にも勝ります。単一の血中濃度値からは所見が得られますが、クリアランスと分布容積を区別することはできません。また、データから情報が得られないパラメータは、そのまま事前分布の値になります。
同梱されているバンコマイシンのパラメータ化は、例示用であることが明記されています。出力を意味のあるものにするには、対象集団で検証されたモデルに置き換えてください。
ソフトウェアエコシステム
2026-07-27 時点の最新情報を確認しています。全体像についてはreferences/software-ecosystem.mdを、出典についてはreferences/source-ledger.mdを参照してください。
- Pharmpy 2.1.1(2026-05-19)は、実用的なPythonのエントリーポイントです。モデルに依存せず、NONMEM/nlmixr2/rxode2を操作し、
run_amd、run_modelsearch、run_covsearch、run_structsearch、run_pdsearch、run_modelrank、run_vpc、run_qaを含む19個のrun_*ツールを提供します。最近の変更のうち、注意が必要な後方互換性のない変更が2つあります。2.0.0(2026-02-12)ではデータセットの行インデックスが1始まりに変更され、 2.1.0(2026-05-08)ではadd_placebo_modelがset_placebo_modelに改名され、numpy ≥ 2が必須になりました。 - NONMEM 7.6(ユーザーガイドの日付は2025年11月)は、引き続き規制上の標準です。7.5からの新機能には、ADVAN16(硬い遅延微分方程式に対応するRADAR5陰的ルンゲ・クッタ法)、ADVAN17(硬い遅延微分代数方程式)、NUTSベイズサンプリング、個別サンプルのSAEM保存があります。
- nlmixr2(rxode2 ≥ 5.0.0が必要)は、信頼できるオープンソースのNLME代替ツールです。
babelmixr2とmonolix2rxを使うと、nlmixr2、NONMEM、Monolix間でモデルを変換できます。 - PKPy(PeerJ、2025)はPythonのpopPKフレームワークですが、GitHubのみで公開されており、PyPIにはありません。そのため、
uv pip install pkpyは失敗します。chi-drm(1.0.3)は、ベイズPKPD向けにPyPIで公開されています。 - Open Systems Pharmacology Suite v12(PK-Sim/MoBi)はオープンソースのPBPKプラットフォームです。SimcypとGastroPlusは商用製品です。
ospsuiteはR専用で、.NET 8が必要です。
Pythonには、規制上の実績を持つ成熟したNCAまたはNLMEパッケージがありません。このギャップを埋めるため、このスキルでは既存の実装を単にラップするのではなく、検証済みのNCAおよびフィッティング機能を独自に提供しています。
このスキルが防ぐ問題
- 単純なr-squaredでLambda_zを選ぶ、またはTmaxをまたいでフィッティングする。
- 25%が外挿されたプロファイルからAUCinfを報告する。
- AICによって、コンパートメント間クリアランスのRSEが98%のコンパートメントモデルを選択する。
- 構造上の問題である非ランダムな残差を、重み付けの変更で修正しようとする。
BLQをDV列に残し、NM-TRANに実際のゼロ値として読み取らせる。- 典型的な患者に基づいて用法・用量を選び、母集団における目標達成率を推定しない。
- プラトーが一度も観測されていないのに、EmaxとEC50を独立した推定値として提示する。
- 2x2試験に参照製剤スケーリング生物学的同等性限界を適用する。
- 成熟度項を含めずに新生児へアロメトリックスケーリングを適用する。
- NOAELに基づくMRSDを、アゴニスト型免疫調節薬の開始用量に用いる。
参考資料
references/nca-conventions.md— パラメーターの定義、lambda_z のルール、BLQ の処理、定常状態references/structural-models.md— 閉形式解、パラメーター化、NONMEM ADVAN/TRANS の対応表references/population-pk.md— NLME 推定、共変量の構築、BLQ M1-M7、診断、VPCreferences/pd-and-exposure-response.md— Emax、間接反応、効果コンパートメント、ER 解析references/tmdd-and-biologics.md— TMDD の近似、モノクローナル抗体の PK、免疫原性references/pbpk.md— PBPK がコストに見合う場合、プラットフォーム、検証に必要なことreferences/bioequivalence.md— 試験デザイン、ABE/ABEL/RSABE、ICH M13 シリーズ、変動性の高い薬剤references/special-populations.md— 小児、腎機能障害および肝機能障害、肥満、妊娠references/dataset-standards.md— CDISC PC/PP と ADPC/ADPP、NONMEM のデータ項目、よくある不備references/ddi-and-qt.md— ICH M12 の段階的評価、静的モデル、ICH E14/S7B C-QTcreferences/antimicrobial-and-tdm.md— PK/PD 指標、PTA/CFR、バンコマイシンの AUC ガイド下投与、MIPDreferences/software-ecosystem.md— 各ツールの用途、ライセンス、確認済みバージョンreferences/regulatory-guidance.md— 日付、ステータス、各ガイダンスの要求事項を記載した台帳references/source-ledger.md— このスキルの各主張の出典と調査日
アセット
assets/popk-analysis-plan.md— 決定事項を冒頭に明記した母集団解析計画の構成assets/nca-reporting-checklist.md— 数値を解釈可能にするため NCA レポートに記載すべき事項
エージェントの運用手順
- 環境を確認します。 ツールキットのバージョンと入力形式(SMILES、SDF、PDB、CIF)を確認し、計算前に分子をサニタイズします。
- 入力内容を特定します。 データまたはユーザーから形式、識別子、パラメーターを確認します。結果を左右する値は推測せず、質問してください。
- まず小規模に実行します。 最初に少数の分子または 1 つのターゲットを処理し、出力を確認します。
- 上記の手順と参考資料を使用して、タスク全体を実行します。
- 結果を検証します。 無効な構造、単位の整合性、予測モデルの適用領域を確認します。
- 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の点を明記します。
| 次の事態が発生した場合 | 対応 |
|---|---|
| 分子の解析またはサニタイズに失敗する | 理由を添えて報告し、該当する分子をスキップします。構造を黙って削除または変更してはいけません。 |
| この手順に記載された関数、フラグ、エンドポイントがインストール済みバージョンに存在しない | インストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認して対応し、ユーザーに伝えます。API を捏造してはいけません。 |
| 必須の入力、識別子、パラメーターが曖昧である | ユーザーに確認するか、実行前に仮定を明示します。 |
整合性に関するルール
- 結果、パラメーター、識別子、引用、統計値を捏造してはいけません。実行または検証できない場合は、その旨を明確に伝えます。
- 計算による予測は仮説であり、実験結果ではありません。予測であることを明記します。
- バージョン固有の詳細は古くなっている可能性があるため、インストール済みバージョンの公式ドキュメントで確認します。
- 費用が発生する、共有 GPU やクラウドのクォータを消費する、個人データまたは患者データに触れる、あるいは取り消せない操作を行う場合は、事前に確認します。