酶动力学的PML模型

群体的加权残差与观测浓度的分布 前面我们用Excel和Matlab实现了酶动力学的参数估算方法,今天我们介绍使用药动建模工具phoenix来进行酶动力学分析。正如我们前面提到的,phoenix不支持隐式方程的求参,所以需要对数据进行一下变通,通过观察IMM方程,我们发现,虽然C0和C1之间不能用显示方程表示,但是C1和t之间的关系却可以写成显示方程,一系列的C1和对应的反应时间t我们都知道,C0可以类比于PK中的给药剂量。这种处理方式类似群体PK,每个个体在t时间采一个点,存在大量个体,每个个体的给药剂量不同,这种稀疏的数据只能用群体的模型去估计。为了实现群体PK,这就需要用到PML,即Phoenix Model Language。PML是借鉴了C++,S-Plus中的一些规范的用于Phoenix平台的建模语言,可进行非线性混合效应(NLME)分析。NLME背后的原理理解起来有点困难,但我们作为药学人士,没必要搞懂其具体的原理,只要我们会用这门语言编写满足我们要求的模型代码即可。我的原则是,够用即可,多了不学。PML支持微分方程和显示方程,C1与t的关系用微分方程表示更简单,其实就是最常见的米曼方程: dC/dt=-Vm*C/(Km+C) EnzymeKinetics(){ //米曼方程 deriv(C = - Vm*C/(Km + C)) //dose的位置,即初始浓度是加在C这个变量上 dosepoint(C) //误差模型,一般是additive,看看残差分布是否随机,如果不随机,可以用multiplictive等其他误差模型 error(CEps = 1) observe(CObs = C + CEps) //CObs是观测值,这个不能变,其等于C加误差 /*结构参数,这个主要是用来考虑个体之间的波动,其认为存在一个群体的值,即tvVm和tvKm,而对于每个个体来说,它们又有自己特定的值*/ stparm(Vm = (tvVm) *…

酶动力学数据分析工具:EnzySolver 1.0

EnzySolver 1.0界面 前段时间进行体内外相关性建模,遇到需用体外酶动力学参数预测体内的消除程度,在与做试验的同学讨论的时候,发现大家应用米曼方程并不注意前提条件,比如需控制反应时间或起始浓度,使反应结束时,底物的消除不要超过10%,否则计算的反应速率就与真正的起始速率有很大偏差,用这样获得的有偏差的起始速率与起始浓度求算Km和Vmax,必定难以获得真实的酶动力学参数。 从纯数学的角度讲,这种使用最多的用起始速率和起始浓度来求Km和Vman的方法,无论反应时间多少都存在偏差,只是反应时间短的时候偏差小而已,我们把这种方法本身引起的误差成为系统误差。那是不是存在一种没有系统误差的方法呢?关于酶动力学参数的计算方法在上世纪70-90年代,研究最多,但那时计算技术并不发达,所以研究者们设计了多种米曼方程的变体,还有很多作图的方法来求Km和Vmax。我认为现在的计算技术已经足够发达,肯定能实现没有系统偏差的计算方法。还有一种酶动力学研究方法,就是测定随着反应时间的延长,底物浓度的变化,再通过拟合积分以后的米曼方程进行求参。但随着反应时间的增长,酶的活性会发生变化,所以这样测定的浓度,越到后面越不能反应酶的活性。从实验的角度考虑,还是测定系列起始浓度,反应固定时间以后,测定剩余浓度(或代谢物浓度)的方法更靠谱。 假定起始浓度为C0,反应t时间以后的浓度变为C1,改变起始浓度C0,我们就可以得到系列的C1。根据积分以后的米曼方程,可以得到C0与C1的关系如下: Integrated Michaelis-Menten Equation (IMM) 这个方程为隐式方程,不能表示为显示方程,也就是y=f(x)这种形式。现有的建模工具,就我所知,都不支持隐式方程的求参,也许存在这样的工具,但我不知道。我直觉上感觉用Excel可以实现,所以在一个月前开始用Excel的Solver和单变量求解工具设计能够对这样的隐式方程求参的算法,大约用了1周多时间,就写好了一个算法。模拟的结果显示,当数据中不含噪音时,可以无偏的求到正确的参数,而一但增加噪音,求参结果就显得非常不可靠,我一度认为这正式IMM的缺点。此外,我还设计另一种与现有的算法(TM)偏差相反的算法PM,希望通过两种算法的平均,达到偏差消除,从而求出正确的解。就在昨天,我还设计了Robustness参数,APDD, APF等参数,通过比较它们之间的大小,自动判断哪种算法获得的结果更可靠。本打算今天下午的Seminar向老板汇报工作,但老板有事外出,Seminar被取消。早知Seminar被取消的话,我这两天就不用那么辛苦赶工了,心里有种极放松的感觉。暂时没有其他的事情,我就在EnzySolver上模拟不同的数据,看看结果如何,可能存在什么规律。突然,我发现前面设计的求解算法有问题,当C1这一列没有噪音的时候,只要一个循环就可以得到正确的解,而当它有噪音时,整个算法Solver仅相当于只迭代一次,怪不得误差会比较大呢。在晚上回家前,终于完成了那个迭代算法,模拟结果显示,即便存在很大噪音,其求的参数总是在各种算法中最接近真实值的,竟然比我用群体的方法(理论上考虑了误差模型)还精确,不可思议。我本来打算用Phoenix的NLME方法作为压轴的终极解决方案呢。我暂不知道我设计这种隐式方程的求参方法是否别人已经发表过,也不知道它是否可以用于其他隐式方程,是否具有通用性,这些都需要后面的工具进一步验证。 –EOF– 文章来自,微信号:MS4Fun,不定期发布自己在质谱应用和建模&模拟方面遇到的一些有趣的事情,欢迎分享与推荐。

Phoenix实现“男生追女生的数学模型”

由于当前男女比例失调,男生能否追到女生具有重要现实意义。此模型有助于男生理性把握时机。 Phoenix是Pharsigh开发的药动建模平台,是制药界的“Gold Standard”。Phoenix不仅可以研究药动学问题,对于“男追女”的问题研究也是神器一枚。且看我们如何用它来实现获得了2013年菠萝科学奖的论文(“男生追女生的数学模型”)中的微分模型。 首先建立一个新Project “Boys after girls”,然后在Workflow中新建一个"WNL5 Classic Modeling-->WNL5 ASCII Format"。这是与旧版本兼容的建模语言,Phoenix还有自己更强大的PML建模语言,这个我们后面再讨论。此外,在Data项下,建立一个包含“Function, Time, Value”3列的表,function有2个,分别对应论文中的学业成绩函数y(t)和疏远度函数x(t),Time是1到500等间隔的数值,步长为1,步长越小,模拟的结果越精细,Value空着即可,是我们要通过微分方程模拟的值。 在窗口右侧的Setup中,写入下面的ASCII模型,其实绝大部分是套话,只有DZ(1)和DZ(2)两行代码最重要,对应论文中的方程组(5),我用Vw代替了“V1+lw”。 在Initial Estimate中设定f1,a1,k1,k2,m,n,Vw的初值(f1=0.03, a1=0.07, k1=0.954, k2=1, m=0.4, n=0.48, Vw=0.48, 在论文中有),最后勾选Engine Setting中的“Simulate”。 至此,男追女的数学模型建立完毕,运行后就可生成论文中图1-图4的数据。下面是图1的结果: 从图中可以看出,只要自己的能力和时间把握的比较好,就可以实现学习和爱情的双丰收(两个相互促进,共同提高)。祝看到此文的单身男士都找到自己心仪的女生! --EOF-- 文章来自,微信号:MS4Fun,不定期发布自己在质谱应用和建模&模拟方面遇到的一些有趣的事情,欢迎分享与推荐。