集结经典应用案例<br/>用户成功案例解读<br/>分享项目中的实践方案
A classic case
集结经典应用案例
用户成功案例解读
分享项目中的实践方案
12/12
December 12, 2022

WinNonlin案例9:PML系列(8)——肝肠循环

前言:本案例介绍如何Phoenix的“最大似然模型(Maximum Likehood Model)”(曾用名“Phoenix Model”)操作对象,通过内置模型→图形编辑→文本编辑的方式逐步构建出一个肝肠循环模型。

    

目录

双峰现象与肝肠循环

案例背景数据

绘制药时曲线

非房室模型分析(NCA)

描述模型结构:
- 抽象:
- 内置模型搭“骨架”
- 图形编辑修改模型
- 文本编辑进一步修改模型

参数初值估计

执行操作对象
- 自定义报表


双峰现象与肝肠循环

   自1988年首先报道了地西泮的双峰现象以来,双峰问题收到从事药物代谢动力学研究人员的高度重视,从临床反应的情况看,有70%~80%的药物有程度不同的双峰现象,只不过收到诸多影响因素影响,常常被掩盖、忽略,比如由于数据的波动、个体差异、给药途径、用药剂量、合并用药。

   造成药物在生物题内出现双峰现象的原因有很多,比如肝肠循环、双部位吸收、胃肠循环、蛋白质竞争、代谢药物对肝酶的抑制、肌内注射药物发在代谢,等等。

   脂溶性药物常存在肝肠循环,肝肠循环是指药物经血液入肝,然后在肝脏被转运至胆囊,由肝脏至到囊的过程是单项的,且胆汁有浓缩的作用,胆囊中的胆汁是间断脉冲式的传输至肠道,胆汁的排泄过程容易收到多种因素的影响,比如进食的影响,肝肠循环的存在一般可通过胆汁引流手术进行进一步机制性的确认。

   在被本案例中对胆汁的排泄做了如下假设:

   1. 给药后到首次胆汁排泄间的时间间隔为Ri,Ri的值通过图形获取

   2. 胆汁排泄至肠道的持续时间为Tau,Tau的初值通过图形获取,估计值通过拟合获取。

   3. 药物经胆汁排泄至肠道的的速率可能存在多种情况,此案例采用较为简单的零级速率的方式作为排泄速率的假设。


案例背景数据

   1名受试者接受了以静脉推注的方式给与的5617.3μg的药物,并收集了该受试者给药后36小时内多个时间点的血浆,并测得了血浆中的药物浓度,之后将数据导入至Phoenix软件。


绘制药时曲线

   在Phoenix软件中,将“浓度数据”发送至“散点图(XY Plot)”操作对象,


a802f3dd2b9aa3a1b5b95219a25ee39a.png

   绘制如下的半对数尺度散点图。


eb58273bcdab4c1aae11b0f6dbe99ea5.png

   通过对药时曲线观察,可以获取到一下信息:

   ◆ 药物的下降段曲线与双指数函数曲线较为相似,可能是所以推测药物的分布模型可能是二房室模型

   ◆ 药物在10小时左右开始出现第二个峰。


非房室模型分析(NCA)

   在Phoenix中将数据发送至“NCA”操作对象,


4ab50b7f2c7a3bf910d02d5c346d61c6.png

   对数据进行进行非房室模型分析:


c2dcfba04543d807ec05cb111b338140.png


描述模型结构:

   按照如顺序逐步描述出模型结构:

   抽象→内置模型→模型结构示意图图形编辑→模型代码文本编辑


5a9018441321858edcc63f435dd5c9ee.png


抽象:

   综合已有的信息,想象出模型的草图:

   1.血管内给药的二房室线性消除模型


5e283790b367d503b813283d4e262fab.png

   2.存在肝肠循环的重吸收现象


a1cdcb943d71b16cdd75d48f2244f9cd.png

   结合起来,我们想要的模型可能是这样一个模型:


ef1877c3dd1d6d3e047df6ecde64fa63.png


内置模型搭“骨架”

   Phoenix软件所提供的内置模型中不包括二房室肝肠循环模型,但提供的有血管内给药的二房室线性消除模型,我们可以先选择它作为“骨架”,之后切换到其他模式在该模型基础之上进行额外的修改。

   操作:

   在Phoenix软件中,将“浓度数据”发送至“最大似然模型(Maximum Likelihood Mode)”操作对象,并重命名为“内置模型”


0504d318e55a3bc4d309b4158507bd2e.png

   通过下拉列表,设置为:“清除率(Clearance)”参数化的,“血管内(Intravenous)”给药的,“二房室”模型,采用“比例型(Multiplicative)”误差模型。


77b2865966edeb386603ae93e86bc810.png


图形编辑修改模型

   在Phoenix软件中复制“内置模型”操作对象,并粘贴,将新的操作对象重命名为“结构示意图编辑”,


baa4895092e336a33d2aa001c04b67d2.png


   单击“结构(Structure)”选项卡上的“以图形形式编辑(Edit as Graphical)”按钮,切换到模型结构示意图图形编辑模式。


d775cc854f24464e4b2e09a396a2ed80.png


   切换到图形编辑模式后,

   通过鼠标左键单击工具栏中的第二个按钮多次以增加两个“房室”,之后将两个“房室”分别重命名为“Abile”、“Agut”,并在选项卡中取消这两个“房室”的“浓度(Conc)”复选框(不使用浓度进行参数化),使用新增的两个房室表示胆囊和肠道。

   分别添加“A1”→“Abile”、“Abile”→“Agut”、“Agut”→“A1”房室间的“PK流(PK flow)”,并加盖你“PK流”设置为单向形式,并分别重命名为“k1g”、“GBr”、“ka”,使用新增的三个PK流参数表示血液、胆囊、肠道间的物质流量。


9f10f4d23a0bbec9466e1c4797829518.png


文本编辑进一步修改模型

   在Phoenix软件中复制“结构示意图编辑”操作对象,并粘贴,将新的操作对象重命名为“模型文本编辑”,


9bd1319ec174e048b4d6c1297f954d18.png


   单击“结构(Structure)”选项卡上的“以文本形式编辑(Edit as Textual)”按钮,切换到模型结构示意图图形编辑模式。

   原代码如下:

   test(){

   deriv(A1 = - (Cl * C)- (Cl2 * (C - C2))- (A1 * k1b) + (Agut * ka))

   urinecpt(A0 = (Cl * C))

   deriv(A2 = (Cl2 * (C - C2)))

   deriv(Abile = (A1 * k1b)- (Abile * GBr))

   deriv(Agut = (Abile * GBr)- (Agut * ka))

   C = A1 / V

   dosepoint(A1, idosevar = A1Dose, infdosevar = A1InfDose, infratevar = A1InfRate)

   C2 = A2 / V2

   error(CEps = 1)

   observe(CObs = C * (1 + CEps))

   stparm(V = tvV)

   stparm(Cl = tvCl)

   stparm(V2 = tvV2)

   stparm(Cl2 = tvCl2)

   stparm(k1b = tvk1b)

   stparm(GBr = tvGBr)

   stparm(ka = tvka)

   fixef(tvV = c(, 1, ))

   fixef(tvCl = c(, 1, ))

   fixef(tvV2 = c(, 1, ))

   fixef(tvCl2 = c(, 1, ))

   fixef(tvk1b = c(, 1, ))

   fixef(tvGBr = c(, 1, ))

   fixef(tvka = c(, 1, ))

   }

   代码进行如下修改:

   test(){

   deriv(A1 = - (Cl * C)- (Cl2 * (C - C2))- (A1 * k1b) + (Agut * ka))

   urinecpt(A0 = (Cl * C))

   deriv(A2 = (Cl2 * (C - C2)))

   #deriv(Abile = (A1 * k1b)- (Abile * GBr)) 改写此微分方程,将(Abile * GBr)改为GBr,改写后的方程为

   deriv(Abile = (A1 * k1b)- GBr)

   #deriv(Agut = (Abile * GBr)- (Agut * ka))改写此微分方程,将(Abile * GBr)改为GBr,改写后的方程为

   deriv(Agut =  GBr- (Agut * ka))

   C = A1 / V

   dosepoint(A1, idosevar = A1Dose, infdosevar = A1InfDose, infratevar = A1InfRate)

   C2 = A2 / V2

   error(CEps = 1)

   observe(CObs = C *( 1 + CEps))


   #####################################

   #添加一部分代码,用于控制胆汁的排泄

   double(Switch)

   Ri=10#Ri是发生发生肝肠循环的周期的间隔,通过观察图形获取初值

   GBr= Switch/Tau#Tau是胆囊排泄胆汁持续的时长,此处假设胆汁以0级速率从胆囊排泄至肠道

   #此处的“sequence”代码块用于控制胆汁向肠道的排泄

   sequence{

   Switch=0;

   sleep(Ri);

   Switch=Abile;

   sleep(Tau);

   Switch=0;

   }

   #####################################


   stparm(V = tvV)

   stparm(Cl = tvCl)

   stparm(V2 = tvV2)

   stparm(Cl2 = tvCl2)

   stparm(k1b = tvk1b)

   #stparm(GBr = tvGBr) #注释掉此行,GBr不再是一个被估计的参数

   stparm(ka = tvka)

   fixef(tvV = c(, 1, ))

   fixef(tvCl = c(, 1, ))

   fixef(tvV2 = c(, 1, ))

   fixef(tvCl2 = c(, 1, ))

   fixef(tvk1b = c(, 1, ))

   #fixef(tvGBr = c(, 1, ))#注释掉此行,GBr不再是一个被估计的参数

   fixef(tvka = c(, 1, ))

   fixef(Tau=c(,3,))#添加此行,Tau是一个需要被估计的参数,表示胆汁排泄持续的时长

   }


参数初值估计

   在 “结构示意图编辑”操作对象中,鼠标左键单击“初值估计(Initial Estimates)”选项卡,切换到可视化初始值估计界面,并将X轴显示的“持续(Dration)”范围指定为40以显示出所有的观测值。


ae280f402cc53f61b8a6fdd54dc65d2d.png


   初值估计:

   V=32,来自于NCA(Dose/C0)

   Cl=5.5,来自于NCA(Cl_obs)

   V2=16,来自于NCA(Vss-V)

   Cl2=5.5,令其等于Cl

   Ka=1,从1开始

   K1g=1,从1开始

   τ=3,来自于图


e178fb0453d8be5cc1f27c9400223ac7.png


b2808ab07e00a2b33488aea3b2b0a113.png


   用户可根据需要拖拽参数值左侧的小滚轮调整某个参数的大小,在调整的时候,可在右侧同步的观察到曲线相应的变化。

   当寻找到一组满意的初始值后,到代码中对应位置修改参数的初始值。


执行操作对象

   部分结果如下


9497e97a86f345ba9e7d77c477ceb7e8.png


9497e97a86f345ba9e7d77c477ceb7e8.png


47d417951edfa9a475ca801d3ddb5f24.png


自定义报表

   在“运行选项(Run Options)“选项卡下,单击“增加表格(Add Table)”按钮,增加自定义表格,并设置如下:


c31cdb12a189e40eb6f57ea74525565d.png

   设置完成后,重新执行模型即可在结果中看到新增的自定义表格“Table01”


7c44b67d9cfdb0151ffd1544d1159234.png

   将“Table01”表格发送至“散点图(XY plot)”对象,进行一些设置后,绘制散点图,结果如下:


f75801013a2abb9e4486c857533d7c56.png


参考资料:

   《临床药代动力学理论与实践——创伤治疗药物》,郭涛

   《Phoenix Modeling Language Reference Guide》

   《Pharmacokinetic and Pharmacodynamic Data Analysis - Concepts and Applications》5th edition,Johan Gabrielsson