:吸收与制剂建模——ADAM 与 ACATPlus 的九段胃肠、释放曲线与食物效应)
PBPK/PD 仿真二次开发教程7吸收与制剂建模——ADAM 与 ACATPlus 的九段胃肠、释放曲线与食物效应版本声明块工具/软件Simcyp PBPK Simulator V24胃肠排空细化、胃排空协变量模型、快速胃排空 Magenstrasse 模型、药物-脂质相互作用模型为 V24 增强项、Simcyp R 包 24.0.18、GastroPlus X.210.22025-08-28引入 ACATPlus 与 Orchestrator上一代末版 9.9语言/环境R 4.4、Python 3.11pandas / requests / sqlite3 / subprocess本文目标把溶出曲线 粒径 进食状态变成两平台都能吃进去的输入文件并且知道哪些机制一开就会改变 Cmax 而哪些只改 Tmax一句话结论吸收模型不能跨平台混用——Simcyp 侧只有 First Order、ADAMadvanced dissolution, absorption and metabolism把胃肠切成9 个解剖节段并各自携带f_a、k_a、Q_gut、酶与顶膜/基底侧转运体与 M-ADAMGastroPlus 侧才是 ACAT 及其升级版 ACATPlus新增肠腔内容物与黏液、黏膜/黏膜下/肌层组织层、全结肠分段可评估结肠局部作用与结肠靶向控释V24 新增的 Magenstrasse 快速胃排空通道与胃排空协变量、药物-脂质相互作用模型直接决定进食状态预测脚本层的正确姿势是把实测溶出曲线转成 release profile / IVRT / IVPT /.psd输入用 CQAcritical quality attribute关键质量属性作为扫描轴再经 Orchestrator 的create_run(RUN_NAME, gp.RunType.BatchSimulation)或 Simcyp 的多工作区循环批量跑。〇、本篇要解决的认知问题ADAM 和 ACAT 是同一类模型的两个名字吗我在 Simcyp 里写 ACAT 会被审稿人挑什么错Simcyp 的 First Order、ADAM、M-ADAM 三档在f_a、k_a、Q_gut上到底差在哪什么时候必须升到 ADAMGastroPlus X.2 的 ACATPlus 相对 ACAT 多刻画了什么为什么结肠靶向控释绕不开它V24 的 Magenstrasse、胃排空协变量和药物-脂质相互作用会让进食效应预测发生多大变化实测溶出曲线、IVRT/IVPT、粒径分布particle size distributionPSD分别以什么形式进模型和 CQA、溶出规格是什么关系一、机制解析1.1 一条链释放 → 溶出 → 沉淀/再溶解 → 跨膜 → 肠壁代谢/外排口服药的肠道吸收不是一个k_a指数上升。真实链条是按节段重复的胃排空速率 KE / Magenstrasse 快速通道 ↓ 内容物分批进入 ┌──────────── 9 个解剖节段ADAM/ ACAT·ACATPlus 多室链 ────────────┐ │ 胃 → 十二指肠 → 空肠 → 回肠 → 结肠ACATPlus 对全结肠再分段 │ │ ↑ 上图为机理示意各段的确切名称、数量与参数以安装版 Help 为准 │ │ 每段独立持有 │ │ 溶出/沉淀 ← 释放曲线或 .psd 粒径 介质 pH/胆盐 │ │ 有效渗透面积与 Q_gut肠血流 │ │ 肠壁酶代谢、顶膜与基底侧转运体外排回肠腔 │ └────────────────────────────────────────────────────────────────────┘ ↓ 门静脉 肝PerMCL 分区见第 8 篇→ 体循环三个后果其一峰浓度maximum concentrationCmax由最慢的那一步决定释放限速还是渗透限速用药理参数改不动其二达峰时间time to peakTmax由胃排空主导所以进食状态、变异极大的胃排空协变量比很多药物参数更重要其三肠道首过代谢 外排与Q_gut耦合把f_a与肠道代谢混成一个数DDI 预测第 9 篇就会系统性偏。1.2 Simcyp三档吸收模型的真实差别项First Order (FO)ADAMM-ADAM胃肠道结构无节段单一室9 个解剖节段官方列为第三种口服吸收模型内部结构以安装版 Help 为准吸收描述一个k_a一阶速率每段溶出 渗透 转运 代谢以安装版 Help 为准f_a吸收分数通常作为整体输入或被k_a掩盖逐段积分得到可 1 且随位置变同属素材列出的对比维度之一k_a唯一显式参数不出现单一k_a由速率过程合成素材把k_a列为 FO/ADAM 的对比项Q_gut肠血流不参与吸收限速参与跨膜与首过素材把Q_gut列为对比维度之一酶/转运体不定位到肠段顶膜/基底侧转运体 肠壁酶分布素材把酶分布、顶膜/基底侧转运体列为对比维度制剂信息基本不刻画处理释放/粒径等制剂输入素材把制剂处理列为对比维度何时用快速筛选、静脉数据为主口服申报、缓释、DDI、食物效应适用条件素材未展开以安装版 Help 为准一句实话FO 便宜但常常看起来挺对——它的均值曲线可以被调得很漂亮代价是进食状态、肠溶/缓释、肠道 DDI 三类场景全部失真。申报口径下只要论证依赖吸收环节就不该停留在 FO。另外要如实说明素材核实了 Simcyp 提供 First Order / ADAM / M-ADAM 三种口服吸收模型、ADAM 的 GI 分 9 个解剖节段、对比维度含f_a、k_a、Q_gut、酶分布、顶膜/基底侧转运体与制剂处理但M-ADAM 的确切定义、节段处理与适用条件素材未展开一律以安装版内 Help / 许可区文档为准不要照抄二手文献的描述。1.3 GastroPlusACAT → ACATPlus 多了什么ACATAdvanced Compartmental Absorption and Transit源自 Yu 与 Amidon 的 CAT 腔室转运模型扩展已经是胃肠道刻画相当细的模型。X.2 的ACATPlus在其上加了四件东西每件都对应一类以前只能近似的问题ACATPlus 新增结构能回答的问题肠腔内容物contents餐后内容物体积/黏度对释放与溶出的稀释与阻滞黏液层mucus黏液滞留时间、局部浓度衰减解释结肠吸收意外的好或坏黏膜 / 黏膜下 / 肌层组织层肠壁各层暴露、肠道局部作用炎症/IBD 靶向与跨壁转运全结肠分段结肠靶向控释的定位释放、结肠局部 Cmax 与全身暴露分离评估同时 GastroPlus 的制剂侧输入本来就宽即释、缓释控释、肠溶、纳米Weibull 拟合、PSD、biorelevant 溶出、user-defined permeability correlation 都是官方支持项。注意官方宣传 no equation or code writing required未查到用户级手写 ODE 的开放 SDK——想加新机制如自定义黏液结合在 GastroPlus 里不是脚本能解决的事这一点与 MoBi 路线不同第 13 篇讨论自定义组织时会再对比。1.4 V24 的胃Magenstrasse、协变量与脂质Simcyp V24 官方增强清单里的吸收相关三项必须一起理解Magenstrasse快速胃排空通道官方在 V24 增强清单里给出的名称是快速胃排空 Magenstrasse 模型。机理上是让胃内容物中未被颗粒截留的部分尤其是溶解态小分子经一条直通通道更快进入十二指肠建模后果是进食状态下的 Cmax 可显著抬高、Tmax 提前而这在旧口径下常被误判为个体变异大。通道开关条件、半衰期与阈值等实现细节以安装版内 Help / 许可区文档为准。胃排空协变量模型把胃排空半衰期与人群协变量关联个体间差异进入抽样第 6 篇的协变量结构。这意味着同一受试者数、同一种子V23 与 V24 的 Tmax 分布可不同。药物-脂质相互作用模型食物尤其脂质与药物的相互作用如脂质依赖溶解度提升不再靠胃容积改一改来近似。坑在这里这三项让进食效应更有机理但也让历史模型V23/V23R1 文献口径与 V24 结果不可直接对照。做版本回归时要专门看 fed/fasted 的 Cmax/AUC 比。1.5 制剂输入的四类通道与 CQA/溶出规格输入类型内容用途与注意释放曲线release profile时间-累积释放分数表最常用必须单调不减、时间单位统一IVRTin vitro release test扩散池释放数据半固体制剂/透皮相关作为释放输入源IVPTin vitro permeation test透皮/透膜通量提供渗透侧观测用于校准渗透参数PSD粒径分布.psd文件分布型或离散 bins溶出限速药物的主变量GastroPlus 另有 P-PSDUSP2 溶出-粒径分布建模.psd等旧版文件已被 FDA eCTD 列入 Modeling Simulation 可接受文件类型铁律 8所以粒径分布是能在申报正文里作为材料提交的别只留在本地 Excel。CQA 在脚本层的意义是它是扫描轴。FDA 2020 年《The Use of PBPK Analyses — Biopharmaceutics Applications for Oral Drug Product Development, Manufacturing Changes, and Controls》Draft尚未生效建立临床相关溶出规格clinically relevant dissolution specificationCRDS与**安全空间safe space**概念逻辑链是以 PBPK/PBBM 找出哪些溶出/粒径区间内 BE 仍然成立→ 把该区间的边界写成溶出规格 → 制造偏离时凭模型豁免而非重做临床。虚拟生物等效性virtual bioequivalenceVBE在这条链上承担给定设计下达到 BE 的概率评估GastroPlus 侧是 IVIVCPlus/PBBM 工作流并在 X.2 新增 Replicate DesignSimcyp 侧是 VBE 扩展模块第 16 篇专讲。二、完整代码与逐行剖析2.1 脚本 APython实测溶出曲线 → 两平台输入 Weibull 拟合把 USP 溶出数据转成 GastroPlus/Simcyp 可用的释放输入并做质量校验importjson,math,hashlib,pandasaspdfrompathlibimportPath Path(output).mkdir(exist_okTrue)# 先建输出目录否则批量脚本在首台机器上就断# 实测采样时间点(min) 与累积溶出百分数%——申报里必须能追溯到原始溶出报告t[5,10,15,30,45,60,90,120,180,240]fr[8,18,31,58,74,85,94,97,99.2,99.5]dfpd.DataFrame({time_min:t,fraction_dissolved:[x/100forxinfr]})# 校验 1单调不减。GUI 导入非单调曲线常见静默截断脚本层必须先拦assertall(ba-1e-9fora,binzip(df.fraction_dissolved[:-1],df.fraction_dissolved[1:])),溶出曲线非单调# 校验 2末点接近完全溶出否则 f_a 与溶出被混在一起解释assertdf.fraction_dissolved.iloc[-1]0.85,末点溶出 85%需确认是否为介质漏失或规格如此# Weibull 累积分布 F(t)1-exp(-(t/tau)^beta)GastroPlus 官方支持 Weibull 拟合# 用拟合参数而非原始表格可以显著减小输入体积与批任务差异defnll(p):beta,taup pred[1-math.exp(-((x/tau)**beta))forxint]returnsum((o-q)**2foro,qinzip(df.fraction_dissolved,pred))bestmin(((b,s)forbin[i/10foriinrange(3,31)]# beta 0.3~3.0 粗网格forsin[x/10forxinrange(20,400)]),keynll)# tau 2~40 minbeta,taubest ssenll(best);sstotsum((y-df.fraction_dissolved.mean())**2foryindf.fraction_dissolved)r21-sse/sstotprint(fWeibull beta{beta:.2f}tau{tau:.1f}min R2{r2:.4f})# R20.98 说明该曲线不宜用两参数描述df.to_csv(output/release_profile_gp_input.csv,indexFalse)# GastroPlus 释放曲线输入时间累积分数Path(output/weibull.json).write_text(json.dumps({model:Weibull,beta:beta,tau_min:tau,r2:round(r2,5),profile_sha256:hashlib.sha256(Path(output/release_profile_gp_input.csv).read_bytes()).hexdigest()},indent2),encodingutf-8)剖析assert不是装饰。GUI 里导入一条 99%→98.5% 抖动曲线往往照样出图只是把沉淀当成误差忽略了脚本层拦下来才算可审计。Weibull 拟合用粗网格而不是引优化库是为了让任何环境都能跑——拟合是脚本层的辅助计算不是平台内建功能申报里要写清参数由申办方拟合得到。2.2 脚本 BPython Orchestrator制剂变量矩阵批量跑GastroPlus X.2 Orchestrator一个矩阵释放曲线 × 粒径 × 进食状态批任务importgastroplus_apiasgp# 官方 Python 包为 gastroPlusAPIimport 名与函数签名以安装版 Orchestrator 文档为准fromgastroplus_api.clientimportConfiguration,ApiClientimportitertools,sqlite3,hashlib,os HOSTos.environ.get(GPX_HOST,127.0.0.1:8700)# 官方示例默认端口 8700改没改以安装版为准gp.start_service()# 启动本地 API 服务RESTapiApiClient(Configuration(hostHOST))# 鉴权/端口细节以安装版 Orchestrator 文档为准gpxgp.GpxApiWrapper(api)projgpx.open_project(Projects/GPX Library.gpproject)# .gpproject 是 GPX 工程文件真实扩展名SCENlist(itertools.product(# 场景枚举CQA 作为显式扫描轴[IR,MR-24h,Enteric],# 释放剖面类别即释/缓释/肠溶[4.6357,2.6,5.5],# PSD Mean Radius (um)此处为示例 CQA 取值[Fasted,Fed]# 进食状态V24/X.2 下影响 Tmax 与 Cmax))connsqlite3.connect(output/batch_runs.db)conn.execute(CREATE TABLE IF NOT EXISTS runs(sim TEXT, cqa REAL, state TEXT, project TEXT, gpx_version TEXT, status TEXT, sha TEXT))runproj.create_run(VBE_matrix_P7,gp.RunType.BatchSimulation)# RunType 含 BatchSimulationforir,rad,stateinSCEN:sim_namef{ir}|PSD{rad}|{state}run.add_simulations([sim_name])# 一次 run 里可排队多个仿真避免手工开 N 次 GUIconn.execute(INSERT INTO runs VALUES(?,?,?,?,?,?,?),(sim_name,rad,state,GPX Library.gpproject,GastroPlus X.2 (10.2),queued,hashlib.sha256(sim_name.encode()).hexdigest()[:16]))conn.commit()run.execute_run()# 提交执行结果与日志落在工程目录按铁律 10 回读落库剖析先建表再提交任务是为了让排队中的任务也留下记录——批量最常见的事故是跑到一半断电没人知道哪些没跑。sim_name用|分隔的三个维度直接对应申报里的情景模拟一节EMA 指南要求写明模拟情景命名即文档。2.3 脚本 CRSimcyp 侧 FO vs ADAM 对照判断是否必须换模型# Simcyp 侧同一份化合物两个已存好的工作区一个 FO、一个 ADAM批量对照# 为什么要预先存两份 .wksz 而不是脚本里现场改吸收模型# 吸收模型是结构级选择setter 改的是临时值且不覆盖原工作区铁律 4# 申报需要的是可提交的文件因此结构变化必须落在工作区文件上。library(Simcyp);library(dplyr)Initialise()ws-c(FOruns/compoundX_FO_fasted.wksz,ADAMruns/compoundX_ADAM_fasted.wksz,ADAMfedruns/compoundX_ADAM_fed.wksz)out-list()for(kinnames(ws)){if(!file.exists(ws[[k]])){warning(缺工作区: ,ws[[k]]);next}SetWorkspace(ws[[k]])Simulate()s-as.data.frame(GetCompoundSummaryStats_DB())out[[k]]-s%%summarise(across(where(is.numeric),~exp(mean(log(.x)))))# 几何均值抗偏态}cmp-as.data.frame(lapply(out,function(x)x[1,]))# 行PK 指标列场景FO/ADAM/ADAMfed# 经验法则|log2(比值)|0.26约 1.2 倍即判为模型选择敏感须写入参数假设与灵敏度分析l2-log2(cmp$ADAM/cmp$FO)print(round(cbind(ratio_ADAM_over_FOcmp$ADAM/cmp$FO,log2l2),3))stopifnot(all(!is.na(l2)))if(any(abs(l2)0.26,na.rmTRUE))message(模型选择敏感ADAM 与 FO 差异超 1.2 倍申报不得使用 FO 结果论证吸收)# 进食效应V24 的 Magenstrasse / 药物-脂质相互作用只在 fed 工作区里生效if(all(c(ADAM,ADAMfed)%in%names(cmp))Cmax%in%rownames(cmp))message(sprintf(预测食物效应 Cmax 比 %.2f,cmp[Cmax,ADAMfed]/cmp[Cmax,ADAM]))Cmax/AUC 一律取几何均值口服 PK 分布是近似对数正态的算术均值会被少数高暴露个体拉偏而这恰好是 BE 论证里最要命的偏差。三、常见报错与排查在 Simcyp 的 Compound 文件里翻不到 ACAT在 GastroPlus 里翻不到 ADAM。根因ACAT/ACATPlus 只属 GastroPlusADAM/M-ADAM 只属 Simcyp。解法报告与方法学描述按平台各自术语写跨平台对照只比预测的 PK 指标不比模型名。导入释放曲线后曲线整体右移或仿真直接不开始。根因时间单位不一致min vs h或首点不为 0。解法统一为分钟并在首点补 (0, 0)用 2.1 的单调性断言先自检。进食状态仿真结果与空腹几乎一样。根因只改了胃容积没启用排空/脂质机制或在 V23 口径工作区里期待 V24 的 Magenstrasse 行为。解法确认 Simulator 版本、确认工作区里 fed 场景定义具体面板字段以安装版 Help 为准并在版本回归中记录差异。ACATPlus 结肠分段场景不收敛/耗时暴涨。根因全结肠分段 黏液层 组织层使刚性上升。解法先减少结肠段数做灵敏度测试再定最终设置把该选择作为参数假设写进报告。f_a被设成 1 之后 DDI 预测幅度偏低。根因把完全吸收和无肠道首过混为一谈。解法ADAM/ACATPlus 下让肠道代谢与外排自己产生表观f_a不要手工写死。溶出规格比模型能支持的范围更宽。根因CRDS/安全空间结论只在被扫描的 CQA 区间内有效。解法把扫描轴与区间写死在情景表里超出区间的规格变更一律回到临床或补充模拟。四、动手练习释放输入自检把 2.1 的曲线人为改成非单调把第 6 点调低 2%再运行。判定标准脚本必须抛 AssertionError 且不生成release_profile_gp_input.csv。模型选择敏感性用 2.3 对同一化合物跑 FO 与 ADAM 两工作区。判定标准输出表中存在至少一个 PK 指标|log2| 0.26并在报告草稿里写出该场景必须使用 ADAM的结论若全部 0.26注明该化合物吸收非限速、FO 可用于探索但不能用于申报论证。批量落库完整性用 2.2 跑 3×3×218 个场景。判定标准batch_runs.db中runs表恰好 18 行、gpx_version与state无空值、(sim, cqa, state)组合无重复。五、小结与下一篇预告吸收建模的第一原则是平台术语与机制不可混用Simcyp 用 First Order/ADAM/M-ADAM9 段胃肠、逐段f_a/Q_gut/酶与转运体GastroPlus 用 ACAT→ACATPlus肠腔内容物、黏液、黏膜/黏膜下/肌层、全结肠分段与结肠靶向控释。第二原则是把制剂变量当 CQA 来扫描释放曲线、IVRT/IVPT、.psd粒径都是输入Weibull 拟合是脚本层的辅助手段CRDS 与安全空间只在被扫描区间内成立。第三原则是版本敏感V24 的 Magenstrasse、胃排空协变量与药物-脂质相互作用会移动 Tmax/Cmax历史口径不能直接对照。吸收之后是分布——第 8 篇讲组织分配与 IVIVEGastroPlus 官方提供的五种基于组织组成的 Kp 估算方法、Simcyp 的 Minimal/Full PBPK 与 PerMCL 肝小叶分区以及 SIVA Toolkit 如何做体外到体内外推。本篇认知问题回显FAQQ1Simcyp 的 ADAM 和 GastroPlus 的 ACAT/ACATPlus 可以互换说法吗A不可互换。ACAT 与 ACATPlus 只属 GastroPlusADAM 与 M-ADAM 只属 Simcyp在 Simcyp 语境写 ACAT或反向就是命名错误跨平台只能在预测出的 PK 指标层面比较。Q2First Order、ADAM、M-ADAM 在 f_a、k_a、Q_gut 上的核心区别是什么AFO 只有一个显式k_a、不分节段、Q_gut不参与吸收限速ADAM 把胃肠分 9 个解剖节段逐段算溶出、渗透、顶膜/基底侧转运与酶代谢f_a由逐段积分得出M-ADAM 是官方列出的第三种口服吸收模型内部结构以安装版 Help 为准。Q3ACATPlus 相比 ACAT 新增了什么什么时候必须用AX.210.2的 ACATPlus 新增肠腔内容物、黏液层、黏膜/黏膜下/肌层组织层与全结肠分段。要评估结肠局部作用、结肠靶向控释的定位释放或黏液滞留影响时必须用普通即释的全身暴露用 ACAT 已够。Q4V24 的 Magenstrasse 模型和胃排空协变量为什么会改变进食效应预测AMagenstrasse 允许小分子在高脂餐后经胃直通通道提前进入十二指肠抬高 Cmax、提前 Tmax胃排空协变量把排空差异纳入人群抽样药物-脂质相互作用使脂质依赖溶出机理化。三者叠加导致 V24 与 V23/V23R1 的 fed 结果不可直接对照。Q5实测溶出数据、IVRT/IVPT、PSD 分别怎么进模型和 CQA、溶出规格什么关系A溶出数据转成时间-累积释放分数表或拟合 WeibullGastroPlus 官方支持IVRT/IVPT 提供释放与渗透观测用于校准粒径以.psd文件输入已列入 FDA eCTD 可接受文件类型。这些量作为 CQA 扫描轴结果支撑 CRDS 与安全空间FDA 2020 生物药剂学 PBPK 指南仍是 Draft。