前言:本案例介绍如何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)”操作对象,
绘制如下的半对数尺度散点图。
通过对药时曲线观察,可以获取到一下信息:
◆ 药物的下降段曲线与双指数函数曲线较为相似,可能是所以推测药物的分布模型可能是二房室模型
◆ 药物在10小时左右开始出现第二个峰。
非房室模型分析(NCA)
在Phoenix中将数据发送至“NCA”操作对象,
对数据进行进行非房室模型分析:
描述模型结构:
按照如顺序逐步描述出模型结构:
抽象→内置模型→模型结构示意图图形编辑→模型代码文本编辑
抽象:
综合已有的信息,想象出模型的草图:
1.血管内给药的二房室线性消除模型
2.存在肝肠循环的重吸收现象
结合起来,我们想要的模型可能是这样一个模型:
内置模型搭“骨架”
Phoenix软件所提供的内置模型中不包括二房室肝肠循环模型,但提供的有血管内给药的二房室线性消除模型,我们可以先选择它作为“骨架”,之后切换到其他模式在该模型基础之上进行额外的修改。
操作:
在Phoenix软件中,将“浓度数据”发送至“最大似然模型(Maximum Likelihood Mode)”操作对象,并重命名为“内置模型”
通过下拉列表,设置为:“清除率(Clearance)”参数化的,“血管内(Intravenous)”给药的,“二房室”模型,采用“比例型(Multiplicative)”误差模型。
图形编辑修改模型
在Phoenix软件中复制“内置模型”操作对象,并粘贴,将新的操作对象重命名为“结构示意图编辑”,
单击“结构(Structure)”选项卡上的“以图形形式编辑(Edit as Graphical)”按钮,切换到模型结构示意图图形编辑模式。
切换到图形编辑模式后,
通过鼠标左键单击工具栏中的第二个按钮多次以增加两个“房室”,之后将两个“房室”分别重命名为“Abile”、“Agut”,并在选项卡中取消这两个“房室”的“浓度(Conc)”复选框(不使用浓度进行参数化),使用新增的两个房室表示胆囊和肠道。
分别添加“A1”→“Abile”、“Abile”→“Agut”、“Agut”→“A1”房室间的“PK流(PK flow)”,并加盖你“PK流”设置为单向形式,并分别重命名为“k1g”、“GBr”、“ka”,使用新增的三个PK流参数表示血液、胆囊、肠道间的物质流量。
文本编辑进一步修改模型
在Phoenix软件中复制“结构示意图编辑”操作对象,并粘贴,将新的操作对象重命名为“模型文本编辑”,
单击“结构(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以显示出所有的观测值。
初值估计:
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,来自于图
用户可根据需要拖拽参数值左侧的小滚轮调整某个参数的大小,在调整的时候,可在右侧同步的观察到曲线相应的变化。
当寻找到一组满意的初始值后,到代码中对应位置修改参数的初始值。
执行操作对象
部分结果如下
自定义报表
在“运行选项(Run Options)“选项卡下,单击“增加表格(Add Table)”按钮,增加自定义表格,并设置如下:
设置完成后,重新执行模型即可在结果中看到新增的自定义表格“Table01”
将“Table01”表格发送至“散点图(XY plot)”对象,进行一些设置后,绘制散点图,结果如下:
参考资料:
《临床药代动力学理论与实践——创伤治疗药物》,郭涛
《Phoenix Modeling Language Reference Guide》
《Pharmacokinetic and Pharmacodynamic Data Analysis - Concepts and Applications》5th edition,Johan Gabrielsson