生存分析样本量计算之SAS simulation

问题

我们前面简单介绍过这篇临床试验生存分析的有效事件数模拟,在里面用R语言简单模拟了单臂试验的有效事件数估计。

就有朋友在星球里问了:

提问

实际上,我们可以在PASS中完全包含复杂情况的样本量计算,我也是这么回答这位同学的。

但是,非要在SAS里做可不可以呢?答案当然是可以的,我们接下来借助proc iml来完成生存分析的样本量和power估算。

SAS simulation

已知,在估算样本量的时候,稍微复杂一点的,我们需要考虑的参数有:试验组别、招募时间、随访时间、有效事件数的分布、脱落情况、是否发生crossover、hazard rate or event rate、hazard rate是否保持不变等[ ]( “Sample Size Calculation for Complex Clinical Trials with Survival Endpoints”)。

我们这里假设一点稍微简单的情况。

两组,每组100人,组1 event rate为0.1,组2 event rate为0.32,两组招募在3个月内完成招募,招募时间服从均匀分布,试验随访时间3年结束,组1、组2在随访1年后失访概率分别为0.20、0.25,要求模拟在当前样本量下的统计学功效。

那我们首先来在proc iml里定义这些参数,如下:

n1 = 100; 
n2 = 100; 
pe1 = 0.1; 
pe2 = 0.32;
pd1 = 0.20;
pd2 = 0.25;
studyduration = 3;

myran1=j(n1, 1, 0);
myran2=j(n2, 1, 0);

result = j(1,2,0);

我们模拟5000次,每次的模拟设置如下:

    enroll = 0.25*(uniform(myran1)) // 0.25*(uniform(myran2)); 

		event_ = (log(1-uniform(myran1))/log(1-pe1)) // (log(1-uniform(myran2))/log(1-pe2));
		event = enroll + event_; 

		loss_ = (log(1-uniform(myran1))/log(1-pd1)) // (log(1-uniform(myran2))/log(1-pd2));
		loss = enroll+loss_;

		censor = (loss<studyduration)#loss + studyduration*(loss>=studyduration);

		status = (event||censor)[,><]||(censor<event)||(myran1//(1+myran2));

		chisq = logrank(status);
		result = result//(chisq||i);

其中,enroll的时间我们设置服从 (0, 0.25) 的均匀分布,即招募时间在0-3个月之间,event_和loss_分别为终点事件和脱落发生的分布,从而设置censor和status变量,拿到模拟的数据之后,我们基于logrank检验计算统计量及p值。

chisq是根据status来计算logrank test的统计量,最后将每次模拟的统计量和i(i为模拟的次数)放在result里。

进而,我们统计模拟5000次中,有多少次统计量显著,即统计学功效。

data result;
	set result (where=(runid>0));
	prob = 1-probchi(chisq,1);
	if prob<0.05 then reject=1; else reject=0;
run;
proc freq data=result;
	tables reject;
	title "Percent of rejections of null hypothesis";
run;

我们来看下5000次模拟的结果:

result

可以看到,在当前样本量及event rate之下,power是足够的。至此,我们就完成了一个我们日常常用的生存分析的样本量计算。

拓展

上面例子中,我们没有考虑crossover的发生、hazard rate是否保持不变、复杂的失访等情况,如果我们想考虑这些情况,我们可以在模拟的时候加入这些参数来考虑,从原理上,基于proc iml的模拟,我们是可以完成任何复杂的生存分析的样本量及功效估计的情况。

另外,大家可能注意到了,我们这里是在估算power,如果是想要计算样本量呢?

我们可以首先利用logrank的公式来估算大致的样本量,并利用以上代码来估计对应的power,并不断地迭代,直到我们得到满意的power,该样本量即可成为我们最终的选择。

完整的SAS代码我已经放进了星球里,感兴趣的同学可以去看看。

Did you find this page helpful? Consider sharing it 🙌

Zhen Lu
Zhen Lu
Biostatistician, Clinical Epidemiologist

Walk with the master

Related