在肿瘤试验中,生存分析是最常用的一种统计分析方法,在SAS中是通过proc lifetest实现。
proc lifetest的语法
对于简单的生存分析:
proc lifetest和time语句是必需的。假设时间变量是T,删失变量是C,同时删失变量的值1代表删失,那么proc lifetest的写法是
proc lifetest;
time t*c(1);
run;
所以这里提醒我们经常用ADTTE写proc lifetest的时候,语法并不是只能用aval和cnsr,time后的这两个变量是根据实际数据集生成的。同时,有的地方可能是删失的值>=1就为事件,但是在ADTTE指导原则中,只有为0才是事件。
下面采用CDISC官网上的ADTTE数据集,来了解一下proc lifetest生成的结果。这个数据集总共有254个人,最大生存时间是198,也就是AVAL的最大值是198,发生删失的受试者人数是102,事件就是96人。
data adtte;
set adam.adtte;
/* proc sort;by aval;*/
run;
proc lifetest data=adtte;
time aval*cnsr(1);
run;
输出结果①
看第一部分输出结果:
第一列是观测到的时间,最小是0,最大就是198。
第二列的*表示有受试者在这个时间点发生了删失,那么没有*的就代表是发生事件了。
第三列提供了在对应时间点下,受试者的无条件生存概率,在这个数据集中,就是没有达到“ First Dermatologic Event”的概率(主要看你的至事件时间是什么,比如研究肿瘤复发,那就是没有复发的概率),我们可以来手算一下,我在之前的一篇文章里也写到过,但是那篇文章的红色计算方法描述有问题,刚好在这里澄清一下。
分母应该是在事件i发生之前的人数,而不是发生事件后剩下的人数,拿这个数据集来说,我们用那个公式算算。
当AVAL=1,即首次服药当天,共有5人发生事件,1人删失。
那么该时间点对应的生存概率为 1*(1-5/254)=0.9803,然后有一个受试者删失,但不影响生存概率;
到AVAL=2的时候,有9个人发生事件,0个人发生删失,这时候的生存概率是0.9803*(1-9/248)=0.9447,注意这里分母需要排除上个时间点发生删失的人数,也就是254-6=248,而不是254-5=249。跟SAS计算出来的值是一致的(我用计算器算的),注意这时候的分母要减掉前一个时间点发生事件的5个人和删失的1个人,因为删失的这个受试者不再在这个研究中了。
所以就按照这样的逻辑计算剩下的生存概率。
第四列就用1-左边的生存概率就得到了failure 概率。
第五列提供生存概率的生存概率标准误,
第六列Number failed 标明有多少受试者发生了时间
第七列Number Left 标明还有多少受试者在研究中
输出结果②
该部分输出的是四分位数估计表,列出了大约25%、50%和75%的患者发生事件时的估计天数。换句话说就是在22天的时候,有25%的受试者发生事件;在51天的时候,有50%的受试者发生事件;
然后在75%的时候,看到没有点估计,因为在177天的时候,发生事件的概率是69.23%,之后的受试者都是删失,所以概率不变,因此还没有达到75%,提供不了点估计。
然后还提供了平均生存时间---81.75,远远大于中位生存时间,所以我们出报告用中位生存时间更多。
输出结果③
可以看到删失的概率是40.16%,那么也说明有59.94%的受试者发生了事件。
这是一个简单的proc lifetest输出的结果。我们让proc lifetest画一个图,只需要加上ods graphics on;就可以了
这张图叫KM曲线图,同时我还没有区分不同组别,是对所有受试者画得一张KM plot,可以明显看出随着时间的增加,受试者的生存概率在减少,±号代表在该时间点有删失的观测。
网友评论