謝金亮 何韻婷 王筱金 何 豪 王炳順Δ
【提 要】 目的 非固定區(qū)組長(zhǎng)度可有效降低隨機(jī)對(duì)照臨床試驗(yàn)(RCT)中區(qū)組隨機(jī)化分組的可預(yù)測(cè)性,為此編制全自動(dòng)SAS宏程序?qū)崿F(xiàn)變化區(qū)組隨機(jī)化。方法 結(jié)合變化區(qū)組隨機(jī)化的原理編制SAS宏程序,通過(guò)模擬實(shí)例演示程序的使用。結(jié)果 輸入設(shè)定的宏變量參數(shù),運(yùn)行SAS宏程序即可生成變化區(qū)組隨機(jī)化的受試者分配方案。此外,該SAS宏能實(shí)現(xiàn)多臂不等比RCT的分配問(wèn)題,提供了受試者隨機(jī)分配序列重現(xiàn)的功能。結(jié)論 多區(qū)組長(zhǎng)度的設(shè)置和區(qū)組長(zhǎng)度的隨機(jī)選擇能夠降低分組可預(yù)測(cè)性,避免隨機(jī)分組階段選擇偏倚的產(chǎn)生。本文的SAS宏為隨機(jī)對(duì)照臨床試驗(yàn)實(shí)現(xiàn)變化區(qū)組隨機(jī)化提供了便利。
隨機(jī)化是隨機(jī)對(duì)照臨床試驗(yàn)(RCT)設(shè)計(jì)的基本原則之一。適宜的隨機(jī)化方法可以避免選擇偏倚的產(chǎn)生和平衡未知因素的影響[1]。RCT常用的經(jīng)典隨機(jī)化方法有簡(jiǎn)單隨機(jī)化、區(qū)組隨機(jī)化及分層隨機(jī)化等。區(qū)組隨機(jī)化能夠確保各組樣本量均衡,達(dá)到最大的試驗(yàn)效率[2-3],以及消除入組時(shí)間差異對(duì)處理效應(yīng)的影響。因此,區(qū)組隨機(jī)化常受到臨床試驗(yàn)研究者的青睞。
不可預(yù)測(cè)性是隨機(jī)化的要旨之一,是指試驗(yàn)相關(guān)人員在隨機(jī)分配實(shí)施前不能預(yù)先知曉治療分配的相關(guān)信息。不可預(yù)測(cè)性的破壞會(huì)導(dǎo)致RCT的分配隱藏(allocation concealment)措施受損,處理組治療效果甚至?xí)环糯蟾哌_(dá)40%[4-5]。傳統(tǒng)區(qū)組隨機(jī)化的運(yùn)用會(huì)增加隨機(jī)分配序列的可預(yù)測(cè)風(fēng)險(xiǎn)[6]?;趥鹘y(tǒng)區(qū)組隨機(jī)化的原理,以隨機(jī)選擇的區(qū)組長(zhǎng)度替代固定區(qū)組長(zhǎng)度的設(shè)置,能夠有效降低隨機(jī)分組的可預(yù)測(cè)性,該隨機(jī)分組方法稱(chēng)為變化區(qū)組(varying block sizes)隨機(jī)化[7],現(xiàn)已越來(lái)越多地運(yùn)用于臨床研究。
已有一些便利實(shí)現(xiàn)變化區(qū)組隨機(jī)化的SAS程序公開(kāi)發(fā)表。然而,此前報(bào)道的變化區(qū)組隨機(jī)化SAS程序存在諸多局限,主要有①不是基于宏的程序顯得冗長(zhǎng),參數(shù)需做較多修改;②適用范圍較局限,多用于最簡(jiǎn)單的1∶1平行組對(duì)照設(shè)計(jì);③無(wú)法實(shí)現(xiàn)自動(dòng)生成種子數(shù)并據(jù)此種子數(shù)重現(xiàn)分組的需求[7-9]。2021年9月8日國(guó)家藥監(jiān)局發(fā)布的《藥物臨床試驗(yàn)隨機(jī)分配指導(dǎo)原則(征求意見(jiàn)稿)》明確提出,可以在同一研究中設(shè)置多個(gè)區(qū)組長(zhǎng)度以盡可能減少分組的可預(yù)測(cè)性[10]。為此,本文旨在開(kāi)發(fā)簡(jiǎn)單易用的SAS宏,幫助臨床研究者更好理解變化區(qū)組隨機(jī)化以便更好地應(yīng)用。
1.變化區(qū)組隨機(jī)化
區(qū)組隨機(jī)化是指將具有相似屬性(如接受治療時(shí)間、體重、種族等)的受試者劃分成若干個(gè)大小相等的區(qū)組,區(qū)組內(nèi)的各組別受試者比例與總的各組別受試者比例相等。各區(qū)組內(nèi)的受試者按一定比例(通常為1∶1)隨機(jī)分配至各處理組,最后得到各組樣本量符合預(yù)期比例的隨機(jī)分配方案。區(qū)組隨機(jī)化與其他隨機(jī)化方法的顯著區(qū)別在于增加了區(qū)組的設(shè)置,通常以“區(qū)組長(zhǎng)度”或“區(qū)組大小”來(lái)描述各區(qū)組內(nèi)的受試者數(shù)量。
變化區(qū)組隨機(jī)化是相對(duì)于傳統(tǒng)區(qū)組隨機(jī)化而言的,其以隨機(jī)可變的區(qū)組長(zhǎng)度代替固定長(zhǎng)度的區(qū)組,即相鄰區(qū)組的樣本量不一定相等且研究者無(wú)法知曉各區(qū)組的區(qū)組長(zhǎng)度。研究者可以根據(jù)方案中設(shè)定的樣本量和設(shè)置的多個(gè)“區(qū)組長(zhǎng)度”,將受試者隨機(jī)劃分成若干個(gè)大小不等的區(qū)組?!皡^(qū)組長(zhǎng)度”通常設(shè)置為2類(lèi)或3類(lèi),區(qū)組長(zhǎng)度一般取比較組數(shù)的倍數(shù)。例如,當(dāng)試驗(yàn)為雙臂RCT時(shí),區(qū)組長(zhǎng)度可取4、6、8[11]。
2.SAS宏程序
(1)SAS宏的各類(lèi)變量說(shuō)明
本文通過(guò)結(jié)合循環(huán)語(yǔ)句、ranuni函數(shù)以及proc rank步驟實(shí)現(xiàn)變化區(qū)組隨機(jī)化,運(yùn)用SAS 9.4進(jìn)行SAS宏的開(kāi)發(fā)。在變化區(qū)組隨機(jī)化程序執(zhí)行過(guò)程涉及兩類(lèi)變量:宏變量和運(yùn)行過(guò)程中生成的新變量,變量的名稱(chēng)和含義如表1所示。
表1 SAS宏主體中變量的設(shè)置和含義
(2)SAS宏主體及解釋
%macro RdmVBsize(samplesize=, trtnames=,blksizes=, outrtf=, seed=);
/*1.檢查是否定義了所有必選宏參數(shù)*/
%if %length(&samplesize)=0 %then %do;%go to ENDIT1;%end;
%if %length(&trtnames)=0 %then %do;%go to ENDIT1;%end;
%if %length(&blksizes)=0 %then %do;%go to ENDIT1;%end;
/*2.自動(dòng)生成種子數(shù)*/
%if %length(&seed)=0 %then %do;
%let seed=%sysfunc(floor(%sysfunc(datetime())));
%end;
/*3.確定區(qū)組長(zhǎng)度的數(shù)量和各個(gè)區(qū)組長(zhǎng)度*/
%let Numblksize=%sysfunc(countw(&blksizes,%str()));
%do i=1 %to &Numblksize;
%let blksizes&i=%scan(&blksizes,&i,′ ′);
%end;
/*4.隨機(jī)分配區(qū)組長(zhǎng)度*/
data work.plan;
sum=0;blk_id=0;sub_id=0;
do while(sum<&samplesize);
r=mod(input(ranuni(&seed)*100000000000,3.0),&Numblksize.);
%do i=1 %to &Numblksize.;
if r=%eval(&i.-1)then do;
size=&&blksizes&i.;
blk_id=blk_id+1;
sum=sum+size;end;
%end;
if sum>&samplesize then do;
sum=sum-size;
size=&samplesize-sum;
sum=sum+size;end;
do j=1 to size;
rand=ranuni(&seed);
sub_id=sub_id+1;
output;end;
end;
run;
/*5.確定各區(qū)組內(nèi)序列*/
proc rank data=plan out=plan;
by blk_id;var rand;
ranks rank;
run;
/*6.將各區(qū)組受試者隨機(jī)分配入組*/
%let trtnum=%sysfunc(countw(″&trtnames″,%str()));
%do i=1 %to &trtnum.;
data treat&i;
set plan;
if(size/&trtnum)*(&i-1) treatment=scan(″&trtnames″,&i,″ ); output treat&i;end; run; %end; /*7.輸出分配方案*/ data allocation;set treat:;by sub_id;run; proc datasets lib=work noprint; delete plan Treat:; run;quit; ods rtf file=“&outrtf.”bodytitle; title1 “變化區(qū)組隨機(jī)化分配方案”; title2 “樣本量=&SampleSize.區(qū)組長(zhǎng)度=&blksizes種子數(shù)=&seed.”; proc report data=allocation nowd headline; column sub_id blk_id size rank treatment; define sub_id/“隨機(jī)入組例號(hào)” center; define blk_id/“區(qū)組ID” center; define size/“區(qū)組長(zhǎng)度” center; define rank/“區(qū)組內(nèi)序列” center; define treatment/“處理分組” center; run; ods rtf close; %goto ENDIT2; %ENDIT1: %PUT ERROR:MACRO STOPPED-MUST ENTER THE RIGHT PARAMETERS.; %ENDIT2: %mend RdmVBsize; 本研究通過(guò)模擬兩個(gè)RCT的隨機(jī)化情境,展示如何利用變化區(qū)組隨機(jī)化SAS宏程序,生成不同RCT情境下的受試者隨機(jī)分配序列。 示例1:一項(xiàng)單中心平行對(duì)照臨床試驗(yàn),計(jì)劃招募48名受試者,運(yùn)用變化區(qū)組隨機(jī)化方法,將受試者以1∶1的比例隨機(jī)分配至處理組和對(duì)照組。研究者設(shè)置兩個(gè)區(qū)組長(zhǎng)度(4、6),執(zhí)行SAS宏得到受試者隨機(jī)分配表,部分結(jié)果如表2所示。 表2 示例1變化區(qū)組隨機(jī)化的部分分配方案樣本量=48 區(qū)組長(zhǎng)度=4 6 種子數(shù)=1950126068 %RdmVBsize(samplesize=48, trtnames=intervention control, blksizes=4 6, outrtf=D:RdmVBsize1.doc; seed=); 假若有存檔或驗(yàn)證方面需求,將自動(dòng)生成的種子數(shù)填入對(duì)應(yīng)宏參數(shù)位置,即可重現(xiàn)上述隨機(jī)分配序列。如: %RdmVBsize(samplesize=48, trtnames=intervention control, blksizes=4 6, outrtf=D:RdmVBsize1Rep.doc; seed=1950126068); 示例2:一項(xiàng)三臂RCT,計(jì)劃納入200例患者,將患者以2:2:1的比例隨機(jī)分配至A藥組、B藥組及安慰劑組。研究者設(shè)置的三個(gè)區(qū)組長(zhǎng)度(5、10、15),運(yùn)行變化區(qū)組隨機(jī)化SAS宏,得到的部分分配結(jié)果如表3所示。SAS宏調(diào)用如下: 表3 示例2變化區(qū)組隨機(jī)化的部分分配方案樣本量=200 區(qū)組長(zhǎng)度=5 10 15 種子數(shù)=1950126168 %RdmVBsize(samplesize=200, trtnames=drugA drugA drugB drugB Placebo, blksizes=5 10 15, outrtf=D:RdmVBsize2.doc; seed=); 1.傳統(tǒng)區(qū)組隨機(jī)化存在的風(fēng)險(xiǎn)和改進(jìn) 區(qū)組的設(shè)置使得比較組間保持均衡,同時(shí)避免入組時(shí)間趨勢(shì)對(duì)受試者分配的影響,提高了試驗(yàn)效率。但區(qū)組長(zhǎng)度的設(shè)置固定且較小[12],使隨機(jī)分配序列的可預(yù)測(cè)風(fēng)險(xiǎn)增加并可能提前被揭秘,進(jìn)而產(chǎn)生選擇偏倚。若應(yīng)用于開(kāi)放性RCT,盲法的缺失會(huì)進(jìn)一步增加可預(yù)測(cè)風(fēng)險(xiǎn),產(chǎn)生更嚴(yán)重的選擇偏倚。Rosenberger和Lachin提出以隨機(jī)變化的區(qū)組長(zhǎng)度取代固定的區(qū)組大小,即使相關(guān)人員知曉區(qū)組長(zhǎng)度也無(wú)法預(yù)測(cè)分配序列[13]。既往研究表明,變化區(qū)組隨機(jī)化的區(qū)組長(zhǎng)度不小于相應(yīng)傳統(tǒng)區(qū)組隨機(jī)化時(shí),前者的不可預(yù)測(cè)性明顯優(yōu)于后者[7],在多數(shù)醫(yī)療器械或外科手術(shù)類(lèi)開(kāi)放性臨床試驗(yàn)中更加適用。 2.既往區(qū)組隨機(jī)化SAS編程思路及局限 臨床試驗(yàn)實(shí)際工作中,通常采用權(quán)威的SAS統(tǒng)計(jì)軟件編程生成隨機(jī)化序列。Lei Li結(jié)合隨機(jī)化過(guò)程proc plan和if函數(shù)實(shí)現(xiàn)變化區(qū)組隨機(jī)化[8],其編程思路主要是:①重復(fù)執(zhí)行proc plan語(yǔ)句產(chǎn)生不同區(qū)組長(zhǎng)度的區(qū)組的組內(nèi)序列,并整合分配序列數(shù)據(jù)集;②通過(guò)if函數(shù)指定各序列號(hào)的受試者入組。該編程思路存在一定局限:該SAS程序非宏程序,使用過(guò)程需要修改多處程序,智能化欠佳;使用者需要提前計(jì)算相關(guān)參數(shù),確保產(chǎn)生的序列數(shù)量與研究預(yù)設(shè)樣本量相等;區(qū)組長(zhǎng)度的分配非隨機(jī),即通過(guò)proc plan語(yǔ)句同時(shí)輸出區(qū)組長(zhǎng)度相同的區(qū)組的組內(nèi)序列,導(dǎo)致最終分配方案中,區(qū)組長(zhǎng)度相同的區(qū)組接連進(jìn)行分組。 Jimmy Efird的變化區(qū)組隨機(jī)化SAS宏較簡(jiǎn)潔[9],其編程思路如下:①區(qū)組長(zhǎng)度隨機(jī)分配:ranuni函數(shù)產(chǎn)生并分配給區(qū)組隨機(jī)數(shù),if函數(shù)根據(jù)隨機(jī)數(shù)大小從預(yù)設(shè)區(qū)組長(zhǎng)度中選取一個(gè),作為該區(qū)組的區(qū)組長(zhǎng)度;②區(qū)組內(nèi)序列確定:循環(huán)語(yǔ)句和ranuni函數(shù)聯(lián)用,逐一分配隨機(jī)數(shù),隨機(jī)數(shù)排序后得到區(qū)組內(nèi)序列;③分配入組:構(gòu)建序列與區(qū)組長(zhǎng)度一半比較的不等式,將受試者以1∶1分配至不同處理組;④循環(huán)輸出各中心的各區(qū)組序列。Jimmy Efird的SAS宏,使用較繁瑣,需要在宏程序內(nèi)部修改多處參數(shù);區(qū)組長(zhǎng)度的分配方法易出現(xiàn)序列數(shù)量與樣本量不一致的問(wèn)題。此外,只能預(yù)設(shè)三個(gè)區(qū)組長(zhǎng)度且并未整合所有區(qū)組的序列,不利于結(jié)果的重現(xiàn)。國(guó)內(nèi)學(xué)者的宏程序和Jimmy Efird的主要編程思路一致,程序語(yǔ)句和函數(shù)略有差異[7]。以u(píng)niform函數(shù)聯(lián)用產(chǎn)生隨機(jī)數(shù),接著proc rank語(yǔ)句進(jìn)行排序并輸出區(qū)組內(nèi)序列。該宏程序冗長(zhǎng)且可讀性欠佳;區(qū)組長(zhǎng)度選擇少,只能預(yù)設(shè)兩個(gè)區(qū)組長(zhǎng)度,其中一個(gè)已固定為2,區(qū)組長(zhǎng)度小,不可預(yù)測(cè)較差。 由上可見(jiàn),既往報(bào)道的變化區(qū)組SAS實(shí)現(xiàn)程序存在如下不足:無(wú)法滿足自動(dòng)生成種子數(shù)并據(jù)此種子數(shù)重現(xiàn)分組的需求,不能對(duì)生成的隨機(jī)序列進(jìn)行核驗(yàn);僅適用于平行組設(shè)計(jì)(1∶1)的RCT,適用范圍較窄;程序本身并非完全自動(dòng)化,參數(shù)需在宏程序內(nèi)部進(jìn)行修改和填寫(xiě)。 3.其他軟件變化區(qū)組隨機(jī)化的實(shí)現(xiàn) 除SAS外其他統(tǒng)計(jì)軟件也有實(shí)現(xiàn)變化區(qū)組隨機(jī)化的相關(guān)程序。R語(yǔ)言中的隨機(jī)化程序包randomizeR,內(nèi)含能夠?qū)崿F(xiàn)變化區(qū)組隨機(jī)化的程序rpbrPar[14]。程序中blockrand函數(shù)能夠通過(guò)設(shè)置不同的參數(shù)實(shí)現(xiàn)區(qū)組長(zhǎng)度隨機(jī)化分配,但它可能導(dǎo)致組間比例分布不均,以及產(chǎn)生的隨機(jī)化序列可能會(huì)超過(guò)預(yù)先指定的樣本大小,而且無(wú)法自動(dòng)生成種子數(shù)。另一個(gè)程序包randomizr也存在類(lèi)似問(wèn)題[15]。Stata中也有實(shí)現(xiàn)變化區(qū)組隨機(jī)化的類(lèi)似程序,但同樣可能會(huì)產(chǎn)生序列過(guò)多的問(wèn)題[16]。 4.本文SAS宏的優(yōu)勢(shì) 本文SAS宏具體編寫(xiě)過(guò)程前文已展示,其主要編程思路及相應(yīng)優(yōu)勢(shì)如下。①核驗(yàn)宏變量和生成程序參數(shù):檢驗(yàn)宏變量的輸入格式,確保程序正確運(yùn)行;根據(jù)系統(tǒng)時(shí)間自動(dòng)生成隨機(jī)化種子數(shù),提取預(yù)設(shè)的區(qū)組長(zhǎng)度。②區(qū)組長(zhǎng)度的隨機(jī)選擇:各區(qū)組通過(guò)循環(huán)語(yǔ)句和MOD函數(shù)從預(yù)設(shè)的區(qū)組長(zhǎng)度中隨機(jī)選取一個(gè),作為該區(qū)組的區(qū)組長(zhǎng)度;比較區(qū)組長(zhǎng)度的總和與樣本量的大小,判斷是否停止循環(huán),確保二者的一致性。③確定各區(qū)組內(nèi)序列:循環(huán)語(yǔ)句和ranuni函數(shù)聯(lián)用,逐一分配隨機(jī)數(shù),proc rank語(yǔ)句輸出區(qū)組內(nèi)序列。④分配入組:宏變量trtnames既能表示處理組數(shù),也能體現(xiàn)各處理組樣本量的比例。結(jié)合循環(huán)語(yǔ)句,使程序不再局限于雙臂(1∶1)RCT的受試者分配,能夠?qū)崿F(xiàn)多臂及各比較組不同比例RCT的受試者隨機(jī)化分配。⑤輸出分配方案:方案輸出過(guò)程,自動(dòng)生成的隨機(jī)化種子數(shù)將顯示于隨機(jī)分配表的副標(biāo)題。倘若有重現(xiàn)性需求,在宏變量seed處輸入此前自動(dòng)生成的種子數(shù),即可重現(xiàn)隨機(jī)序列。 目前,隨機(jī)對(duì)照臨床試驗(yàn)常常是多中心臨床試驗(yàn),且各中心樣本量一般不相等。為此,可以根據(jù)方案中各中心樣本量分別設(shè)置相關(guān)參數(shù)分別執(zhí)行本宏,可以生成相應(yīng)的分配方案。該SAS宏的使用可能隨機(jī)出現(xiàn)小區(qū)組的情況,即最后一個(gè)區(qū)組的區(qū)組長(zhǎng)度小于研究者預(yù)設(shè)的區(qū)組長(zhǎng)度。但試驗(yàn)相關(guān)人員無(wú)法知曉是否存在該區(qū)組,且該小區(qū)組的區(qū)組長(zhǎng)度仍為比較組倍數(shù),同樣能將受試者以既定比例均衡分配至各組,并不會(huì)破壞預(yù)期的隨機(jī)分配比例和均衡性。 總之,變化區(qū)組隨機(jī)化通過(guò)提高隨機(jī)分配序列的不可預(yù)測(cè)性,盡可能避免受試者隨機(jī)入組階段選擇偏倚的產(chǎn)生,盡可能確保隨機(jī)對(duì)照試驗(yàn)尤其是開(kāi)放性臨床試驗(yàn)研究結(jié)果的真實(shí)性。本文的SAS宏可以很方便地實(shí)現(xiàn)變化區(qū)組隨機(jī)化,可以滿足實(shí)際臨床研究中各組比例多樣化的需求,而且滿足隨機(jī)分配序列可重現(xiàn)性的要求,提升了程序的適用性和應(yīng)用的規(guī)范性。結(jié) 果
討 論
中國(guó)衛(wèi)生統(tǒng)計(jì)2022年4期