药物吸收速率常数的预测模型、设备和存储介质
文献发布时间:2023-06-19 16:11:11
技术领域
本发明涉及药物信息技术领域,具体涉及一种药物吸收速率常数的预测模型、设备和存储介质。
背景技术
药物吸收是指药物自给药部位摄取进入血液循环的过程。药物的吸收速率,是药代动力学和生物利用度研究的一个重要参数。吸收速率对血药浓度影响很大,它受给药途径和许多其他因素的影响。给药途径不同,吸收速率自然不同;剂型不同,吸收速率亦各异。如固体剂型的口服吸收,就取决于制剂的崩解、活性药物的溶出、在吸收部位的药物浓度和血液循环,以及吸收面的位置和面积。若药物不吸收,当然不能起全身作用;如果吸收差,则必须加大剂量;要是吸收慢,可能作用会延迟;吸收过快,可发生副作用;吸收不规则,又可能无法预测临床效应。因此,了解药物吸收速率,是临床前和临床研究的一个主要组成部分。
药物吸收速率常数K
基于此,有必要提供一种无需静脉血药浓度数据的前提下,满足不同类型药物的药物吸收速率常数k
发明内容
针对现有技术的不足,本发明的目的在于提供一种药物吸收速率常数的预测模型、设备和存储介质,通过构建不依赖于房室模型的吸收动力学模型解析得到估算k
为实现上述目的,本发明所采用的技术方案具体如下:
一方面,本发明提供一种药物吸收速率常数的预测模型,所述模型包括:
获取模块,用于获取药物制剂的实测血药浓度、时间采样点,进而绘制实测药时曲线,获得药物体内吸收特性的药动学参数(如C
拟合模块,根据实测药时曲线、T
真实模块,根据血药浓度特征选择房室模型预输入函数、实测血药浓度、时间采样点、固定参数,得到真实k
比对模块,对比估算k
进一步地,还包括修正模块,利用估算k
进一步地,所述不依赖于房室模型的吸收动力学模型的建立过程如下:
基于实测药时曲线,以T
其中,k
本发明构建的公式1为不依赖于房室模型、仅与药时曲线特征有关的体内吸收动力学模型的C-t关系式。
进一步地,所述估算k
步骤1:基于药物制剂的实测血药浓度,血药浓度C经对数化后,取达峰后的连续若干数值,拟合线性回归,线性方程为LnC = -kt + LnA(公式2),其中截距为LnA,获得A值;
步骤2:基于公式1和步骤1获得的A值,运用Python迭代法程序将k值与k
步骤3:运用公式3计算步骤2获得的药时曲线中药物制剂的预估血药浓度与实测血药浓度的残差绝对值之和最小,进而输出最佳k
其中,C
进一步地,所述最佳k
进一步地,所述真实k
方式1:
基于单室模型血管外给药的血药浓度计算公式5,
将X
方式2:
基于双室模型血管外给药的血药浓度计算公式6~公式8,将X
将所获得的k
公式6中,α表示分布相混合一级速率常数,β表示消除相混合一级速率常数,分别由公式7、公式8计算;
获得真实k
进一步地,方式1中,对单室模型来说,当k = 0.10 h
结果表明,估算k
进一步地,所述满足双室模型药物为醋酸阿比特龙片、阿昔洛韦混悬剂、阿奇霉素片、苯那普利胶囊、安非他酮片、坎地沙坦酯片、卡托普利片、塞来昔布胶囊、环丙沙星片、氯吡格雷片、达卡他韦片、多潘立酮片、屈他维林片、格列本脲片、氢氯噻嗪片、伊拉地平胶囊、伊曲康唑片、拉西地平片、盐酸乐卡地平片、左炔诺孕酮片、氯雷他定片、二甲双胍片、吗替麦考酚片、萘普生片、奥美沙坦酯片、磷酸奥司他韦胶囊、喹那普利片、瑞格列奈片、利匹韦林片、瑞舒伐他汀片、西洛多辛胶囊、辛伐他汀片、替米沙坦片、富马酸替诺福韦酯片、特比萘芬片、替格瑞洛片。
进一步地,方式2中,对双室模型来说,基于满足双室模型药物的k
结果证明了不依赖于房室模型的吸收动力学模型的参数(k
进一步地,所述药物制剂为卡马西平片或环孢素软胶囊。
一方面,本发明提供一种药物吸收速率常数准确性的验证方法,通过对药物制剂的血药浓度分析绘制实测药时曲线;基于实测药时曲线建立不依赖于房室模型的吸收动力学模型,计算相应模型的吸收速率常数k
进一步地,所述验证方法,包括以下步骤:
S1.采集患者给予药物制剂后的血浆样本,经HPLC方法测定药物制剂的血药浓度;基于血药浓度和采样时间点,获得药物动力学参数(例如C
S2.基于实测药时曲线,以T
其中,k
S3.基于采用迭代法解析不依赖于房室模型的吸收动力学模型的估算k
S4.根据血药浓度特征选择房室模型并设定得k
S5.对比估算k
进一步地,还包括S6.将药动学参数(C
进一步地,通过运用估算k
进一步地,基于S1步骤属于常规方法,不是本申请的保护重点,此处不再一一赘述了。
另一方面,本发明提供一种药物吸收速率常数的获取方法,包括以下步骤:
1).采集患者给予药物制剂后的血浆样本,经HPLC方法测定药物制剂的血药浓度;基于血药浓度和采样时间点,获得药物动力学参数(例如C
2).基于实测药时曲线,以T
其中,k
3).基于采用迭代法解析不依赖于房室模型的吸收动力学模型的估算k
一方面,本发明提供一种运用本发明建立的不依赖于房室模型的吸收动力学模型预测药物制剂的C
运用本发明所述的验证方法获得估算k
若拟合的药时曲线吸收相和预测C
另一方面,本发明提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序是实现本发明所述验证方法的步骤。
另一方面,本发明提供一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行实现本发明所述验证方法的步骤。
与现有技术相比较,本发明的有益技术效果如下:
1:本发明综合考虑了药物的血药浓度、采样时间点、单剂量、总药量、C
2:本发明方法构建的不依赖与房室模型的吸收动力学模型解决传统的方法估算k
3:本发明提供的药物制剂药时曲线预测模型解析的k
4:本发明方法成功应用于卡马西平片和环孢素软胶囊两个模型药物的k
附图说明
图1:不依赖于房室模型的吸收动力学模型与Wagner-Nelson法估算单室模型药物k
图2:双室模型参数设置组的药时曲线(共39组数据)。
图3:卡马西平片和环孢素软胶囊口服给药后的人体内药时曲线。(A)卡马西平片参比制剂与受试制剂(平均值±标准差,n = 60);(B)环孢素软胶囊参比制剂与受试制剂(平均值±标准差,空腹n = 46,餐后n = 90)
图4药物制剂实测与预测的平均药时曲线。卡马西平片的(A)空腹-参比制剂,(B)空腹-受试制剂,(C)餐后-参比制剂,(D)餐后-受试制剂;环孢素软胶囊的(E)空腹-参比制剂,(F)空腹-受试制剂,(G)餐后-参比制剂,(H)餐后-受试制剂。
具体实施方式
下面对本发明的技术方案进行举例说明,本发明请求保护的范围包括但不限于以下实施例。
实施例
1 药物制剂体内吸收动力学不依赖于房室模型的吸收动力学模型的建立
药物以单剂量X
对于单室模型而言,血药浓度升高过程为一级速率吸收导致,而浓度下降过程为一级速率消除导致;对于双室模型而言,血药浓度升高为一级速率吸收导致,而血药浓度下降为一级速率处置过程(分布和消除速率均为一级速率过程)导致。当不考虑房室模型,药时曲线可以简化为血药浓度随时间的线性动力学上升过程和线性动力学下降过程两个部分。此时,血药浓度C与时间t的关系表达式应为:
2 药物制剂体内吸收速率常数的解析方法建立
采用迭代法(代码写入Python 3.6.7软件)解析不依赖于房室模型的吸收动力学模型的k
其中,C
3 不依赖于房室模型的吸收动力学模型及其解析方法的验证
3.1仪器与材料
3.1.1 仪器:6470型三重四极杆液质联用仪、TDL5型台式低温冷冻离心机、DW-86L828J型超低温冰箱
3.1.2 试剂:异丙醇、醋酸、醋酸铵、乙腈,以上试剂均为色谱级。
3.1.3 试药:卡马西平片-参比制剂(Tegretol
3.2 实验方法
通过房室模型药动学参数设定和临床试验数据验证不依赖于房室模型的吸收动力学模型及其解析方法的准确性。具体地,随机设定单室模型参数与双室模型参数,获取相应的特征药时曲线。其中,满足单室模型的血药浓度数据采用Wagner-Nelson法和体内不依赖于房室模型的吸收动力学模型计算k
3.2.1 房室模型药动学参数的设定
3.2.1.1 单室模型参数的设定
基于单室模型血管外给药的血药浓度计算公式5,
将X
3.2.1.2 双室模型参数的设定
基于双室模型血管外给药的血药浓度计算公式6~公式8,将X
将所获得的36个药物的k
公式6中,α表示分布相混合一级速率常数,β表示消除相混合一级速率常数,分别由公式7、公式8计算;
获得真实k
3.2.2 卡马西平片和环孢素软胶囊的临床数据获取
以卡马西平片和环孢素软胶囊为模型药物进行人体药动学试验,该研究获得了中南大学湘雅药学院医学伦理委员会批准。
(1) 卡马西平片空腹与餐后BE试验设计及血药浓度检测方法
本研究采用单中心、随机、开放、两序列、四周期自身交叉试验设计,进行空腹和餐后BE研究。空腹和餐后临床试验均入组30例健康受试者,并签署书面知情同意书。每周期空腹/餐后(高脂餐含142 kcal蛋白质、256 kcal碳水化合物、569 kcal脂肪,总热量约967kcal)单次口服1片卡马西平片受试制剂(规格:100mg)或1片卡马西平片参比制剂(Tegretol
取40 μL血浆样品,加入10 μL卡马西平-d
(2) 环孢素软胶囊空腹与餐后BE试验设计及血药浓度检测方法
本研究采用单中心、随机、开放、两序列、四周期自身交叉试验设计,进行空腹和餐后BE研究。空腹临床试验入组23例健康受试者,餐后临床试验入组45例健康受试者,并签署书面知情同意书。每周期空腹/餐后(高脂餐含149 kcal蛋白质、288 kcal碳水化合物、521kcal脂肪,总热量约958 kcal)单次口服1粒环孢素软胶囊受试制剂(规格:50 mg)或1粒参比制剂(Sandimmun Neoral
取全血样品100 μL,加入40 μL环孢素-d
将获得的卡马西平片和环孢素软胶囊血药浓度数据采用WinNonlin 8.2传统药动学模式计算AIC值,以判断卡马西平和环孢素的房室模型;再以NCA模式分别计算两模型药物的C
3.2.3 k
3.2.3.1 体内不依赖于房室模型的吸收动力学模型
分别将单室模型和双室模型设定参数值后所得的血药浓度数据、卡马西平片和环孢素软胶囊的临床药动学数据,输入至Python迭代法程序中(附录A),k
3.2.3.2 Wagner-Nelson法
Wagner-Nelson法用于单室模型参数设定组及满足单室模型的临床药动学数据(卡马西平片)的k
其中,F
3.2.3.3 Loo-Riegelman法
Loo-Riegelman法用于双室模型参数设定组及满足双室模型的临床药动学数据(环孢素软胶囊)的k
其中,(X
3.2.3.4 统计矩法
本研究将统计矩法应用于双室模型参数设定组的k
其中,C
3.2.4 k
对于单室模型和双室模型的参数设定组,k
对于临床试验数据,由于无法获取客观准确的各模型药物k
3.2.5 统计学方法
所有数据均表示为平均值±标准差。采用SPSS 25.0软件中的两独立样本t检验对数据进行统计学分析,p < 0.05表示两组具有显著性差异。
3.3 结果与讨论
3.3.1 房室模型设定参数验证不依赖于房室模型的吸收动力学模型及其解析方法的准确性
3.3.1.1 单室模型参数变化
k
结果如图1所示,当k = 0.10 h
结果表明,与Wagner-Nelson法相比,体内吸收动力学不依赖于房室模型的吸收动力学模型估算k
3.3.1.2 双室模型参数变化
从文献中获取了36个不同药物制剂的人体内血药浓度数据,采用WinNonlin软件计算各药物的AIC值。结果如表1所示,所有药物的AIC
表1 文献中获取36个药物制剂的人体内血药浓度数据及解析药动学参数
(
为了考察不依赖于房室模型的吸收动力学模型解析双室模型药物k
结果如表2所示,采用不依赖于房室模型的吸收动力学模型估算的k
表2 采用不同方法估算的双室模型参数设置组ka值的准确性
附注:
将表2中三种方法估算k
3.3.2 临床试验数据验证不依赖于房室模型的吸收动力学模型及其解析方法的准确性
3.3.2.1 卡马西平片和环孢素软胶囊的k
卡马西平与环孢素均为窄治疗窗药物,所以临床BE试验为两序列、四周期自身交叉试验设计。在空腹和餐后状态下,卡马西平片和环孢素软胶囊口服给药后的人体内药时曲线见图3,药动学参数汇总于表3。
表3 卡马西平片和环孢素软胶囊的人体内药动学参数
(平均值±标准差,卡马西平空腹和餐后n = 60,环孢素空腹n = 46,环孢素餐后n = 90,
卡马西平片空腹状态下参比制剂平均药时曲线的AIC
环孢素软胶囊空腹状态下参比制剂平均药时曲线的AIC
由于卡马西平片的药时曲线符合单室模型,分别采用不依赖于房室模型的吸收动力学模型的方法和Wagner-Nelson法估算卡马西平参比制剂与受试制剂在空腹和餐后状态下的k
表4 不依赖于房室模型的吸收动力学模型方法和Wagner-Nelson法计算卡马西平片的k
(平均值±标准差,n = 60)。
表5不依赖于房室模型的吸收动力学模型方法和Loo-Riegelman法计算环孢素软胶囊的k
(平均值±标准差,空腹n = 46,餐后n = 90,
由于环孢素软胶囊的药时曲线符合双室模型,分别采用不依赖于房室模型的吸收动力学模型的方法和Loo-Riegelman法计算环孢素软胶囊参比制剂与受试制剂在空腹和餐后状态下的k
3.3.2.2 k
已有报道显示,药物的体内吸收速率越快,导致血药浓度的C
对于环孢素软胶囊,不依赖于房室模型的吸收动力学模型计算的k
3.3.2.3 卡马西平片和环孢素软胶囊的C
在不依赖于房室模型的吸收动力学模型(Python程序)的运行过程中,通过k
结果显示,采用不依赖于房室模型的吸收动力学模型的方法所得的卡马西平片两制剂在不同状态下的药时曲线拟合度均较好,基本与实测药时曲线重合(图4A~图4D),且C
表6 不依赖于房室模型的吸收动力学模型的方法预测卡马西平片和环孢素软胶囊C
注:a
4 结论
本发明分别通过单、双房室模型参数设值和临床实测数据验证不依赖于房室模型的吸收动力学模型及其解析方法的准确性。房室模型参数验证结果显示,不依赖于房室模型的吸收动力学模型解析k
关于体内吸收速率常数的解析方法(Python迭代法程序)。
行号 代码
1 import math
2 import matplotlib.pyplot as plt
3 import numpy as np
4 from tqdm import tqdm
5 def Least_squares(x,y):
6 x=np.array(x)
7 y = np.array(y)
8 x_ = x.mean()
9 y_ = y.mean()
10 m = np.zeros(1)
11 n = np.zeros(1)
12 k = np.zeros(1)
13 p = np.zeros(1)
14 for i in np.arange(len(x)):
15 k = (x[i]-x_)* (y[i]-y_)
16 m += k
17 p = np.square( x[i]-x_ )
18 n = n + p
19 a = m/n
20 b = y_ - a* x_
21 return a,b
22 list1=[[C
23 forward_point_num=0
24 backward_point_num=3
25 point_list=list1
26 print("input point_list",len(point_list))
27 best_line=[]
28 dis_thres=0.1
29 ln_point=[[_[0],math.log(_[1],math.e)] for _ in point_list[1:]]
30 line_mink=999
31 print(np.argmax([_[1] for _ in ln_point]))
32 arg_max=int(np.argmax([_[1] for _ in ln_point]))
33 end_line=0
34 print("ln_point",len(ln_point))
35 for m in tqdm(range(arg_max,len(ln_point)-1)):
36 point_A=ln_point[m]
37 point_B=ln_point[m+1]
38 k = (point_B[1] - point_A[1]) / (point_B[0] - point_A[0])
39 b = point_B[1] - k * point_B[0]
40 print("the",m,"itera k is: ",k)
41 if line_mink>k:
42 line_mink=k
43 end_line=m+1
44 print("the index of max k is: ",end_line)
45 best_line=[]
46 '''
47 if end_line-2>arg_max:
48 for m in range(end_line-arg_max,end_line+1):
49 point_A=ln_point[m]
50 point_B = ln_point[m+1]
51 print("point_A",point_A)
52 print("point_B", point_B)
53 k=(point_B[1]-point_A[1])/(point_B[0]-point_A[0])
54 b=point_B[1]-k*point_B[0]
55 A=-k
56 B=1
57 C=-b
58 sing_line=[]
59 for l in range(end_line-0,end_line+2):
60 point_C=ln_point[l]
61 if abs(A*point_C[0]+B*point_C[1]+C)/math.sqrt((math.
pow (A,2))+(math.pow (B,2))) 62 sing_line.append(point_C) 63 if len(sing_line)>=len(best_line): 64 best_line=sing_line 65 print("best_line: ",best_line) 66 else: 67 for m in range(arg_max,end_line+1): 68 point_A=ln_point[m] 69 point_B = ln_point[m+1] 70 k=(point_B[1]-point_A[1])/(point_B[0]-point_A[0]) 71 b=point_B[1]-k*point_B[0] 72 A=-k 73 B=1 74 C=-b 75 sing_line=[] 76 for l in range(arg_max,end_line+2): 77 point_C=ln_point[l] 78 if abs(A*point_C[0]+B*point_C[1]+C)/math.sqrt((math. pow (A,2))+(math.pow (B,2))) 79 sing_line.append(point_C) 80 if len(sing_line)>len(best_line): 81 best_line=sing_line 82 print("best_line: ",best_line) 83 ''' 84 point_num=0 85 for m in range(arg_max+forward_point_num,arg_max+1+backward_point_ num): 86 87 best_line.append(point_A) 88 print("best_line: ",best_line) 89 result_list_x=[_[0] for _ in best_line] 90 result_list_y=[_[1] for _ in best_line] 91 result_k,result_b=Least_squares(result_list_x,result_list_y) 92 print("result_k:",result_k," result_b",result_b,"A:",math.exp(result_b)) 93 result_A=math.exp(result_b) 94 over_x=np.arange(0,result_list_x[0]+0.2,0.2) 95 over_y=np.array([_*result_k+result_b for _ in over_x]) 96 print(over_x) 97 def func_C(t,A,k,ka): 98 return A*(math.exp(-k*t)-math.exp(-ka*t)) 99 min_error_C=99999 100 best_k=0 101 best_ka=0 102 for k in tqdm(np.arange(0.01,5.0,0.01)): 103 for ka in np.arange(0.01,10.0,0.01): 104 error_C=0 105 for _ in range(len(point_list)): 106 Pred_C=func_C(point_list[_][0],result_A,k,ka) 107 error_C+=abs(Pred_C-point_list[_][1]) 108 if error_C 109 min_error_C=error_C 110 best_k=k 111 best_ka=ka 112 print("ka: ",best_ka," k:",best_k) 113 print("C_error: ",min_error_C) 114 test_x=[_[0] for _ in point_list] 115 test_y=[func_C(_,result_A,best_k,best_ka) for _ in test_x] 116 init_x=[_[0] for _ in point_list] 117 init_y=[_[1] for _ in point_list] 118 ln_x=[_[0] for _ in ln_point] 119 ln_y=[_[1] for _ in ln_point] 120 ax1 = plt.subplot(121) 121 plt.plot(ln_x,ln_y,"palegreen") 122 for a, b in zip(ln_x, ln_y): 123 plt.text(a, b, (round(a,2),round(b,2)),ha='center', va='bottom', fontsize=5) 124 plt.scatter(result_list_x,result_list_y,color="red") 125 plt.plot(over_x,over_y,"b",linestyle='-.') 126 plt.title("Ln_C-t") 127 ax2 = plt.subplot(122) 128 plt.plot(init_x,init_y,"g") 129 plt.plot(test_x,test_y,"b") 130 plt.title("C-C_Pred-t") 131 plt.show()。
- 药物吸收速率常数的预测模型、设备和存储介质
- 一种口服药物吸收速率常数计算尺