药时曲线知多少?

是什么?

血药浓度-时间曲线,简称药时图。是以时间为横坐标、以血药浓度为纵坐标,得到的血药浓度关于时间变化的曲线,可在一定程度上反映药物在体内的动态变化规律。在生物等效性(BE)试验或者早期药代动力学试验中通常需要画药时曲线。

有什么用?

根据药时曲线可以观察药物在人体内的吸收速度和吸收程度,可以计算得到相应的PK参数。BE试验是比较受试制剂(T)与参比制剂(R)的吸收速度和吸收程度差异是否在可接受范围内的研究,若差异较小,可视为生物等效,则可认为有同样的疗效。

国家药品监督管理局201810月发布了《生物等效性研究的统计学指导原则》。对BE试验的设计、数据处理、统计分析等做了相应的要求。指导原则规定了生物等效性标准:C_{max}, AUC_{0-t}AUC_{0-∞}几何均值比的90\%CI80\%-125\%之间。另外,当{T}_{max}与药物的临床疗效密切相关时,通常还需采用配对非参数方法对{T}_{max}进行差异性检验。

重要的PK参数含义

C_{max} : 给药后出现的血药浓度最高值
T_{max} : 给药后达到达峰浓度所需的时间
AUC_{0-t}: 0时刻至最后一个可测时刻的药时曲线下面积
AUC_{0-∞}: 0时刻至无穷大时刻的药时曲线下面积

注意事项&BLQ的处理

一般来说,要求AUC_{0-t}/AUC_{0-∞}>=80\%,如果该比值小于80\%,推算出的AUC_{0-∞}就不可靠,需要延长采样时间点,满足AUC的预测。统计分析时,对于这样的受试者,需要剔除相应的AUC_{0-t}AUC_{0-∞}等指标。

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。今天就分享到这里啦!

参考文献

《生物等效性研究的统计学指导原则》.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容