是什么?
血药浓度-时间曲线,简称药时图。是以时间为横坐标、以血药浓度为纵坐标,得到的血药浓度关于时间变化的曲线,可在一定程度上反映药物在体内的动态变化规律。在生物等效性(BE)试验或者早期药代动力学试验中通常需要画药时曲线。
有什么用?
根据药时曲线可以观察药物在人体内的吸收速度和吸收程度,可以计算得到相应的PK参数。BE试验是比较受试制剂(T)与参比制剂(R)的吸收速度和吸收程度差异是否在可接受范围内的研究,若差异较小,可视为生物等效,则可认为有同样的疗效。
国家药品监督管理局年
月发布了《生物等效性研究的统计学指导原则》。对BE试验的设计、数据处理、统计分析等做了相应的要求。指导原则规定了生物等效性标准:
,
和
几何均值比的
在
之间。另外,当
与药物的临床疗效密切相关时,通常还需采用配对非参数方法对
进行差异性检验。
重要的PK参数含义
: 给药后出现的血药浓度最高值
: 给药后达到达峰浓度所需的时间
: 0时刻至最后一个可测时刻的药时曲线下面积
: 0时刻至无穷大时刻的药时曲线下面积
注意事项&BLQ的处理
一般来说,要求,如果该比值小于
,推算出的
就不可靠,需要延长采样时间点,满足AUC的预测。统计分析时,对于这样的受试者,需要剔除相应的
、
等指标。
BLQ的处理
① 给药前或者达到Cmax之前的BLQ可按0计算;
② 在两个可定量浓度之间出现BLQ。一般来说,浓度不会出现反跳的情况,出现这种情况会认为数据不合理,需要提交质疑,若还有样本可进行复测,若无法获得合理准确的浓度,则该点视为缺失,统计分析或者绘图时不纳入;
③ 在最后一次可测量浓度后出现BLQ。可以设置为0或者LLOQ/2,具体情况,可与统计师、药理同事等沟通确认。
药时图绘制
一般,药时图需要绘制个体图和平均图。个体血药-时间曲线(线性图、半对数图):每个受试者画一张图,X轴用实际采样时间。平均(±标准差)血药-时间曲线(线性图、半对数图):每组受试者每个计划时间点的平均血药浓度绘图,X轴采用计划采血时间。
药时图代码示例
/****************************************************************************************************************
Program Name : pc_series_plot.sas
Platform/SAS Version : SAS 9.4
Author : Sophia
Description : Generation pc series plot
Note :
-----------------------------------------------------------------------------------------------------------------
Modification History:
Rev# Author Date Description
---- ---------------- -------------- -------------------------------------------------------------------------
*****************************************************************************************************************/
**== 用来画图的PC数据集 ==**;
data pc;
input STUDYID$ SUBJID$ RANDNUM$ TRTA$ TRTAN VISIT$ PCTPTNUM ARELTM PRELTM AVAL;
aval_ = ifn(aval>0,aval,.);
label aval_ = 'Drug A (ug/mL)';
datalines;
XY-123 001 A01 A 1 D1 0 0 0 0
XY-123 001 A01 A 1 D1 2 0.0875 0.083333333 50
XY-123 001 A01 A 1 D1 12 0.5 0.5 113
XY-123 001 A01 A 1 D2 . 1 1 200
XY-123 001 A01 A 1 D3 . 2 2 299
XY-123 001 A01 A 1 D8 . 6.979166667 7 266
XY-123 001 A01 A 1 D15 . 14 14 112
XY-123 001 A01 A 1 D22 . 21.04166667 21 65
XY-123 001 A01 A 1 D29 . 28 28 27
XY-123 002 A02 B 2 D1 0 0 0 0
XY-123 002 A02 B 2 D1 2 0.083333333 0.083333333 57
XY-123 002 A02 B 2 D1 12 0.5 0.5 147
XY-123 002 A02 B 2 D2 . 1 1 199
XY-123 002 A02 B 2 D3 . 1.991666667 2 289
XY-123 002 A02 B 2 D8 . 7 7 200
XY-123 002 A02 B 2 D15 . 14.00833333 14 168
XY-123 002 A02 B 2 D22 . 21.08333333 21 78
XY-123 002 A02 B 2 D29 . 28.04166667 28 29
XY-123 003 A03 A 1 D1 0 0 0 0
XY-123 003 A03 A 1 D1 2 0.083333333 0.083333333 58
XY-123 003 A03 A 1 D1 12 0.5 0.5 147
XY-123 003 A03 A 1 D2 . 1.008333333 1 180
XY-123 003 A03 A 1 D3 . 2 2 302
XY-123 003 A03 A 1 D8 . 7 7 234
XY-123 003 A03 A 1 D15 . 14.01666667 14 89
XY-123 003 A03 A 1 D22 . 21 21 49
XY-123 003 A03 A 1 D29 . 28 28 18
XY-123 004 A04 B 2 D1 0 0 0 0
XY-123 004 A04 B 2 D1 2 0.083333333 0.083333333 64
XY-123 004 A04 B 2 D1 12 0.5 0.5 175
XY-123 004 A04 B 2 D2 . 1 1 220
XY-123 004 A04 B 2 D3 . 2 2 302
XY-123 004 A04 B 2 D8 . 6.979166667 7 244
XY-123 004 A04 B 2 D15 . 13.95833333 14 134
XY-123 004 A04 B 2 D22 . 20.98333333 21 99
XY-123 004 A04 B 2 D29 . 28.03333333 28 40
;
run;
**== 定义个体图Template ==**;
proc template;
define statgraph pcindiv;
begingraph / designwidth=9in designheight=4.5in;
entrytitle "Plot of Individual of Drug xx Plasma Concentration";
layout lattice / columns=2 rowdatarange=data;
cell;
cellheader;
entry "Linear Scale";
endcellheader;
layout overlay _id='overlay1' / walldisplay=all
xaxisopts = (display=(line ticks tickvalues label)
tickvalueattrs=(size=10pt) label="Actual Time (Day)" labelattrs=(size=10pt)
linearopts=(viewmin=0 viewmax=29 tickvaluelist=(0 1 2 7 14 21 28) tickvaluefitpolicy=none))
yaxisopts = (type=linear display=(line ticks tickvalues label)
tickvalueattrs=(size=10pt) label="Concentration (ng/mL)" labelattrs=(size=10)
linearopts=(viewmin=0 viewmax=350 tickvaluesequence=(start=0 end=350 increment=50)));
seriesplot x=areltm y=aval / display=all markerattrs=(size=5pt) name="series";
endlayout;
endcell;
cell;
cellheader;
entry "Semi-Logarithmic Scale";
endcellheader;
layout overlay _id='overlay2' / walldisplay=all
xaxisopts = (display=(line ticks tickvalues label)
tickvalueattrs=(size=10pt family="Times New Roman")
label="Actual Time (Day)" labelattrs=(size=10pt)
linearopts=(viewmin=0 viewmax=29 tickvaluelist=(0 1 2 7 14 21 28) tickvaluefitpolicy=none)
)
yaxisopts = (type=log display=(line ticks tickvalues label)
tickvalueattrs=(size= 10pt) label="Concentration (ng/mL)" labelattrs=(size=10pt)
logopts=(base=10 viewmin=1 viewmax=350 tickvaluelist=(1 10 100 350)));
seriesplot x=areltm y=aval_ / display=all markerattrs=(size=5pt) name="series";
endlayout;
endcell;
endlayout;
endgraph;
end;
quit;
options nonumber nodate;
ods listing close;
ods graphics / reset noborder imagefmt=jpg noscale;
title;
ods rtf file = "pc_single.rtf" bodytitle gtitle;
proc sgrender data = pc template = pcindiv;
where subjid = '001';
quit;
ods rtf close;
ods listing;
**== 平均图数据处理:计算各组均值、标准差 ==**;
proc sql;
create table pcavg as
select trta, trtan, preltm, avg(aval) as mean, std(aval) as std,
calculated mean - calculated std as low,
calculated mean + calculated std as up,
case when calculated mean>0 then calculated mean end as mean_,
case when calculated low>0 then calculated low end as low_,
case when calculated up >0 then calculated up end as up_
from pc group by trtan, trta, preltm;
quit;
**== 定义平均图Template ==**;
proc template;
define statgraph pcavg;
begingraph / designwidth=9in designheight=4.5in;
entrytitle "Plot of Mean (±SD) of Drug xx Plasma Concentration";
layout lattice / columns=2 rowdatarange=data;
cell;
cellheader;
entry "Linear Scale";
endcellheader;
layout overlay _id='overlay1' / walldisplay=all
xaxisopts = (display=(line ticks tickvalues label)
tickvalueattrs=(size=10pt) label="Actual Time (Day)" labelattrs=(size=10pt)
linearopts=(viewmin=0 viewmax=29 tickvaluelist=(0 1 2 7 14 21 28) tickvaluefitpolicy=none))
yaxisopts = (type=linear display=(line ticks tickvalues label)
tickvalueattrs=(size=10pt) label="Concentration (ng/mL)" labelattrs=(size=10)
linearopts=(viewmin=0 viewmax=350 tickvaluesequence=(start=0 end=350 increment=50)));
seriesplot x=preltm y=mean / display=all group=trta yerrorupper=up yerrorlower=low markerattrs=(size=5pt) name="series";
endlayout;
endcell;
cell;
cellheader;
entry "Semi-Logarithmic Scale";
endcellheader;
layout overlay _id='overlay2' / walldisplay=all
xaxisopts = (display=(line ticks tickvalues label)
tickvalueattrs=(size=10pt family="Times New Roman")
label="Actual Time (Day)" labelattrs=(size=10pt)
linearopts=(viewmin=0 viewmax=29 tickvaluelist=(0 1 2 7 14 21 28) tickvaluefitpolicy=none)
)
yaxisopts = (type=log display=(line ticks tickvalues label)
tickvalueattrs=(size= 10pt) label="Concentration (ng/mL)" labelattrs=(size=10pt)
logopts=(base=10 viewmin=1 viewmax=350 tickvaluelist=(1 10 100 350)));
seriesplot x=preltm y=mean_ / display=all group=trta yerrorupper=up_ yerrorlower=low_ markerattrs=(size=5pt) name="series";
endlayout;
endcell;
endlayout;
layout globallegend;
discretelegend 'series' ;
endlayout;
endgraph;
end;
quit;
ods listing close;
ods graphics / reset noborder imagefmt=jpg noscale;
title;
ods rtf file = "pc_avg.rtf" bodytitle;
proc sgrender data = pcavg template = pcavg;
quit;
ods rtf close;
ods listing;
SAS学习画图最开始还是通过学习参考程序了解各个选项、画图procedure的用法以及定义template相关的语句等等。遇到不了解的statement,查SAS help慢慢积累。讲解程序步骤的每个statement、option的话太冗长无味了,而且SAS help例子、解释都写得非常清晰,照搬SAS help就没有必要了。后续画图程序的分享主要还是根据实际工作中遇到的问题、或者一些不常见的需求来展开,分享技巧、或者一些好用的options。今天就分享到这里啦!
参考文献
《生物等效性研究的统计学指导原则》.