羅艷虹,胡良平
(1.山西醫(yī)科大學公共衛(wèi)生學院衛(wèi)生統(tǒng)計學教研室,山西 太原 030001;2.世界中醫(yī)藥聯合會臨床科研統(tǒng)計學專業(yè)委員會,北京 100029;3.軍事醫(yī)學科學院生物醫(yī)學統(tǒng)計學咨詢中心,北京 100850*通信作者:胡良平,E-mail:lphu812@sina.com )
?
基于SAS軟件實現隨機分組及應用
羅艷虹1,2,胡良平2,3*
(1.山西醫(yī)科大學公共衛(wèi)生學院衛(wèi)生統(tǒng)計學教研室,山西 太原 030001;2.世界中醫(yī)藥聯合會臨床科研統(tǒng)計學專業(yè)委員會,北京 100029;3.軍事醫(yī)學科學院生物醫(yī)學統(tǒng)計學咨詢中心,北京 100850*通信作者:胡良平,E-mail:lphu812@sina.com )
本文的目的是使讀者能方便快捷地運用SAS軟件中的PLAN過程實現隨機分組。首先,對PLAN過程進行了簡單介紹。接著,結合單因素設計、隨機區(qū)組設計、具有重復試驗的隨機區(qū)組設計和拉丁方設計,介紹了隨機分組的SAS實現方法。讀者只需要修改本文中所呈現的SAS程序中的少量參數,就可很方便地用SAS軟件實現自己的隨機分組任務。事實說明,盡管SAS軟件非常難學難用,但借助現成的SAS程序,可以輕松自如地解決很多具體問題。
SAS軟件;隨機分組;分層因素;單因素設計;隨機區(qū)組設計;拉丁方設計
SAS/STAT模塊中的PLAN過程,可用于生成各種設計方案(主要包括設計類型的架構、其內的受試對象的隨機化分配),同時可以對析因設計,尤其是嵌套設計、交叉設計和隨機區(qū)組設計進行隨機化(此處強調的是在各種設計類型下,如何實現受試對象的隨機分組)。PLAN過程也可以生成一系列排列數和組合數,可生成以下多種試驗設計類型并完成相應的受試對象的隨機化操作。
析因設計,包括隨機化和非隨機化析因設計;平衡和部分平衡不完全區(qū)組設計;廣義循環(huán)不完全區(qū)組設計;拉丁方設計。
對于其他類型的試驗設計,尤其是分式析因設計、響應面和正交陣列設計,可以參考SAS/QC軟件的FACTEX 和OPTEX過程及ADX(注:它是利用菜單驅動法實現試驗設計的SAS模塊)界面。
PROC PLAN生成設計方案的過程:首先選擇第一個因素的各個水平;接著,對于第二個因素,PROC PLAN在第一個因素的每個水平下選擇第二個因素的水平??傊?,對于一個給定的因素,PLAN過程基于此因素之前的所有因素的水平組合來選擇該因素的水平。
有五種不同的方法進行各因素水平的選擇:隨機選擇,隨機選擇因素的各水平;順序選擇,每次以一個標準的順序選擇因素的各水平;循環(huán)選擇,通過循環(huán)地排列先前的各水平生成當前各水平;排列選擇,因素各水平是整數1~n的一個排列;組合選擇,每次從整數1~n中選取m個數進行組合用以選擇因素的m個水平。
隨機選擇方法可用于生成隨機化設計方案。同時通過恰當使用循環(huán)選擇,可以生成任何一種廣義循環(huán)區(qū)組設計。因素的嵌套長度及隨機設計方案的生成數目不受限制??梢酝瑫r選擇若干因素,并設定最內層(也就是嵌套在最內層)因素。各因素的水平可以看作各個處理,應用于設計方案的各格子。出于該原因,列出的因素稱為處理。運行PROC PLAN可以生成及隨機化各種設計方案。
文獻[2]詳細地介紹了有關隨機原則、概念和常用方法,下面將結合幾種試驗設計類型并運用SAS軟件中的PLAN過程具體實現隨機分組。
2.1 單因素兩水平設計及其隨機分組
【例1】為試驗“736”對肉瘤的抑制作用,將16只長出肉瘤的小鼠隨機分為兩組,試驗組注射“736”,對照組注射同量生理鹽水,10天后解剖稱瘤重,觀察兩組瘤重之間的差異是否具有統(tǒng)計學意義[3-4]。請給出包含隨機分組的具體設計方案。
【分析與解答】先將全部小鼠編成1~16號,并設所需要的SAS程序名為SASDESIGN1.SAS,程序語句如下:
odshtml; procplanseed=20150731; factorsxiaoshu=16; treatmentstreatment=16cyclic(1111111122222222); run; odshtmlclose;
【程序說明】第一句與最后一句分別是打開與關閉輸出傳輸系統(tǒng)ODS,并采用網頁格式輸出結果,下同;“proc plan”調用SAS軟件中的PLAN過程,選項“seed=20150731”的作用是設置產生隨機數的初始種子數為20150731(通常為編寫此程序的時間,種子數相同的程序,將永遠產生出相同的隨機結果,即隨機結果具有重現性);“factors xiaoshu=16”是該過程中一個重要語句,將生成代表受試對象“編號”的變量名“xiaoshu”及其取值(1~16);“treatments treatment=16 cyclic (1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2)”中的“treatments”是該過程中一個語句,“treatment=16”代表“試驗因素treatment有16個水平”,其實是假定16個受試對象中的每一個接受一種特定的“處理”,“cyclic (1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2)”進一步把前面的“16種處理”設置成“1”與“2”兩種處理,即試驗因素“treatments”實際為具有“1”與“2”兩個水平的單因素,其中,“1”與“2”水平分別出現8次。
【主要輸出結果及解釋】
PlotFactorsFactorSelectLevelsOrderxiaoshu1616Random
TreatmentFactorsFactorSelectLevelsOrderInitialBlock/Incrementtreatment1616Cyclic(1111111122222222)/1
xiaoshutreatment161338127915614111241051111111122222222
16只小鼠的編號為1~16,從運行結果的第三部分可知:設計方案中編號(xiaoshu)為16、13、3、8、12、7、9、15的小鼠接受第一種處理;設計方案中編號(xiaoshu)為6、14、11、1、2、4、10、5的小鼠接受第二種處理。
【思考題】借助例1,如何修改上面的SAS程序,將32只小鼠隨機均分為4組,即用SAS實現單因素4水平設計及其受試對象的隨機分組。
2.2 隨機區(qū)組設計及其隨機分組
【例2】對未成年大白鼠注射3種不同劑量雌激素,一定時間后觀測其子宮重量,做試驗時,取4窩不同種系的大白鼠,每窩3只,隨機分配到3個劑量組內進行試驗[3-4]。請給出包含隨機分組的具體設計方案。
【分析與解答】先將全部大白鼠按窩別編成1~4個區(qū)組,再將每個區(qū)組(即每窩)中的3只大白鼠編成1~3號,并設所需要的SAS程序名為SASDESIGN2.SAS,程序語句如下:
odshtml;procplanseed=20150731;factorsblock=4ordereddose=3;run;odshtmlclose;
【程序說明】在上述的過程中,有一個關鍵語句“factors”。該語句產生兩個變量(即因素),分別為“block”與“dose”,它們分別有4個水平與3個水平,它們的水平數乘積為12,意味著總共有12個受試對象;“ordered”聲明要求將“block”的4個水平按其自然順序排列,而“dose”后面沒有“ordered”,表明要求將“dose”的3個水平(代表三種不同的劑量)隨機化,而且,“dose”的3個水平必須在“block”的每一個水平條件下被隨機化。
【主要分析結果及解釋】
FactorSelectLevelsOrderblock44Ordereddose33Random
blockdose1312213231324321
上述結果表明,第1個區(qū)組中的3只大鼠注射的劑量大小分別為3、1、2;第2個區(qū)組中的3只大鼠注射的劑量大小分別為1、3、2;第3個區(qū)組中的3只大鼠注射的劑量大小分別為1、3、2;第4個區(qū)組中的3只大鼠注射的劑量大小分別為3、2、1。
【說明】本例的隨機區(qū)組設計也可以理解成對12只大鼠進行“分層隨機”分組,相當于將12只大鼠按“窩別”作為“分層因素”,先將它們按“窩別”形成4個“區(qū)組”,再在每個“區(qū)組”內采用完全隨機方法,將每個區(qū)組內的3只大鼠隨機分入3個試驗組,這就是用“分層隨機”實現單因素三水平設計的隨機分組。
隨機區(qū)組設計與用“分層隨機”實現單因素三水平設計的區(qū)別在哪里?從用SAS軟件實現隨機化的做法來看,二者沒有區(qū)別;從設計類型的名稱和對定量資料統(tǒng)計分析角度看,二者之間是有區(qū)別的。區(qū)別在于:隨機區(qū)組設計中包含兩個因素,一個是試驗因素(即研究者關心的因素)、另一個是重要非試驗因素(即研究者原本不想關心,但它確實會對試驗結果造成不可忽視的影響),當需要對所收集的定量資料進行差異性分析時,首先應按兩個因素來構建方差分析或秩和檢驗的“統(tǒng)計模型”,僅當“區(qū)組因素”對定量結果的影響無統(tǒng)計學意義時,可將其忽略,再采用單因素分析模型處理;而用“分層隨機”實現單因素三水平設計的場合下,“區(qū)組因素”是出于“質量控制”的考慮,它是研究者基于基本常識和專業(yè)知識,從眾多的非試驗因素中找出來的唯一重要的非試驗因素(注意:若有多個重要非試驗因素,應將它們形成復合型的區(qū)組因素),只是在對受試對象進行隨機分組時發(fā)揮“區(qū)組因素”的“控制作用”,確保分入對比組中的受試對象在“區(qū)組因素”上是高度可比的。在對收集的定量資料進行差異性分析時,通常,可以直接將其視為來自“單因素多水平設計定量資料”,采取相應的統(tǒng)計模型進行處理。當然,若按“隨機區(qū)組設計”的統(tǒng)計模型進行數據處理,則更為合適。
【思考題】借助例2,如何修改上面的SAS程序,將8窩(每窩4只)大白鼠隨機均分入4個劑量組中去,即用SAS實現隨機區(qū)組設計及其受試對象的隨機分組。
2.3 具有重復試驗的隨機區(qū)組設計及其隨機分組
【例3】在4家醫(yī)院開展某項臨床試驗,試以醫(yī)院為分層因素,按照具有重復試驗的隨機區(qū)組設計將64例某病患者隨機均分入4家醫(yī)院,再將每家醫(yī)院接收的16例受試者隨機分入試驗藥物的4個不同劑量組,4組患者例數相等[5]。
【分析與解答】本例屬于具有重復試驗的隨機區(qū)組設計,醫(yī)院為“區(qū)組因素”、藥物劑量為“試驗因素”,每家醫(yī)院的每個劑量組中均有4例受試者(即4次獨立重復試驗)。先將全部受試者編成1~64號,每相鄰8位被視為“一個區(qū)組”,將每個區(qū)組中的8位受試者隨機均分入4個劑量組。設所需要的SAS程序名為SASDESIGN3.SAS,程序語句如下:
%macro reptblock(seed=,hospital=,block=,length=,p_1=,p_2=,p_3=);
proc plan seed=&seed;
factors hospital=&hospital block=&block length=&length;
output out=a;run;
data b;set a;no=_n_;
if length<=&length*&p_1 then group=' 第一組';
else if &length*&p_1 else if &length*(&p_1+&p_2) else group=' 第四組';run; data c1(rename=(hospital=h1 no=n1 group=g1) drop=block length) c2(rename=(hospital=h2 no=n2 group=g2) drop=block length) c3(rename=(hospital=h3 no=n3 group=g3) drop=block length) c4(rename=(hospital=h4 no=n4 group=g4) drop=block length); set b; if hospital=1 then output c1; else if hospital=2 then output c2; else if hospital=3 then output c3; else output c4; run; data c; merge c1 c2 c3 c4; run; proc print data=c;ods html;run; %mend; %reptblock(seed=20161004,hospital=4,block=2,length=8,p_1=1/4,p_2=1/4,p_3=1/4); 【程序說明】此程序比較復雜,因篇幅所限,詳細說明可參閱文獻[4]。 【主要分析結果及解釋】 Obsh1n1g1h2n2g2h3n3g3h4n4g4111第二組249第一組333第二組417第四組212第一組250第四組334第一組418第三組313第一組251第三組335第四組419第四組414第三組252第二組336第三組420第二組515第二組253第三組337第一組421第一組616第四組254第二組338第二組422第一組717第三組255第四組339第四組423第二組818第四組256第一組340第三組424第三組919第三組257第一組341第四組425第二組10110第一組258第二組342第二組426第四組11111第一組259第一組343第一組427第四組12112第四組260第四組344第四組428第二組13113第四組261第三組345第三組429第三組14114第三組262第四組346第三組430第一組15115第二組263第三組347第一組431第一組16116第二組264第二組348第二組432第三組 上述結果表明:h1、n1、g1代表第1家醫(yī)院的編號、受試者編號、劑量組編號;……;h4、n4、g4代表第4家醫(yī)院的編號、受試者編號、劑量組編號。也就是說,1~16號受試者被分入第1家醫(yī)院,17~32號受試者被分入第4家醫(yī)院,33~48號受試者被分入第3家醫(yī)院,49~64號受試者被分入第2家醫(yī)院。分入每家醫(yī)院的16例受試者再被隨機分入4個劑量組,每個劑量組有4例受試者。 2.4 拉丁方設計及其隨機分組 【例4】有4種降壓藥(設為A1,A2,A3,A4)對4只猴進行試驗,每只猴用藥4次,每次7天,間隔1個月,每次以用藥前后舒張壓下降值作為試驗效應,已知因素之間交互作用可忽略不計,假定此藥物的效應是短暫的且不會在本質上影響血壓的取值[3-4]。請給出包含隨機分組的具體設計方案。 【分析與解答】這是一個需要最少樣本含量且可考察三個因素(一個試驗因素、兩個區(qū)組因素)的試驗設計類型,但必須滿足兩個重要的前提條件:其一,三因素之間的交互作用可忽略不計;其二,試驗因素對評價指標的影響是短暫的且不會在本質上對其有影響。例子中的試驗因素為“降壓藥”,一般是不符合前述第二條假定的。采用拉丁方設計的試驗因素最合適的類似如“體溫計種類”或“天平種類”,次合適的類似如“血壓計種類”,最不合適的類似如“藥物種類”或“計量大小”。本例的主要目的是介紹在拉丁方設計中如何實現對受試對象的隨機分組方法,而僅假定其試驗因素“藥物種類”符合此設計類型的要求。 先將4只猴(houzi)編成1-4號,將試驗次序(cishu)編成1~4號,再將試驗藥物(yaowu)編成1~4號,并設所需要的SAS程序名為SASDESIGN4.SAS,程序語句如下: odshtml;procplanseed=20150731;factorshouzi=4orderedcishu=4ordered;treatmentsyaowu=4cyclic;outputout=ayaowucvals=('yaowu1''yaowu2''yaowu3''yaowu4')ran-dom;run;procprintdata=a;run;odshtmlclose; 【程序說明】 第1個過程步調用PLAN過程構造拉丁方設計的架構(橫行安排4只猴、縱列安排4個次序)(它們都按順序排列,不是隨機的)并將試驗因素(yaowu)的4個水平進行循環(huán)排列,排成4行4列,即每行上都是1~4種藥物的隨機排列,共排出4行;“output out=a”是利用“output”語句,產生一個名為“a”的輸出數據集,該數據集中存放著拉丁方設計的結果(包括架構和其內的隨機排列);位于“output out=a”之后的一行,目的是對試驗因素“yaowu”的4個水平由原先的“循環(huán)排列”再行隨機化排列。第2個過程步調用PRINT過程輸出拉丁方設計的結果。 【主要分析結果及解釋】 houzicishuyaowu112341234212342341312343412412344123 這個輸出結果不太容易看懂,改成下面的形式就一目了然了,見表1。 表1 四種降壓藥用于4只猴的降壓效果 注:假定表體內小括號內的數據為血壓降低值 由表1可看出:猴號與用藥次序號都是按順序排列的,而表體內的降壓藥代號1~4是按循環(huán)規(guī)律排列的。以上屬于常規(guī)拉丁方設計,但最好將表體內各行上的“降壓藥代號1~4”隨機化排列,這就是下面的輸出結果。 Obshouzicishuyaowu111yaowu2212yaowu1313yaowu3414yaowu4521yaowu1 622yaowu3723yaowu4824yaowu2931yaowu31032yaowu41133yaowu21234yaowu11341yaowu41442yaowu21543yaowu11644yaowu3 上面這個輸出結果仍然不太容易看懂,改成下面的形式就一目了然了,見表2。 表2 四種降壓藥用于4只猴的降壓效果 注:假定表體內小括號內的數據為血壓降低值 表2的表體內4行上的“1~4”號的順序與上面第二部分輸出結果最后一列相對應,第1行:yaowu2、yaowu1、yaowu3、yaowu4;…;第4行:yaowu4、yaowu2、yaowu1、yaowu3。 [1] SAS Institute Inc.SAS/STAT 9.3 user’s Guide[M]. Cary, NC: SAS Institnte Inc, 2011: 3252-3347. [2] 楊孟淵, 胡良平. 精神衛(wèi)生科研如何嚴格遵守試驗設計四原則之隨機原則[J]. 四川精神衛(wèi)生, 2016, 29(4): 289-294. [3] 胡良平. 統(tǒng)計學三型理論在實驗設計中的應用[M]. 北京: 人民軍醫(yī)出版社, 2006:44-106. [4] 胡良平. 科研設計與統(tǒng)計分析[M]. 北京:軍事醫(yī)學科學出版社, 2012: 265-276. [5] 胡良平. 課題設計與數據分析—關鍵技術與標準模板[M]. 北京: 軍事醫(yī)學科學出版社, 2014: 93-103. (本文編輯:吳俊林) Random grouping based on SAS software and its application LUOYan-hong1,2,HULiang-ping2,3* (1.DepartmentofHealthStatistics,AcaelemyofPublicHealth,ShanxiMedicalUniversity,Taiyuan030001,China;2.SpecialtyCommitteeofClinicalScientificResearchStatisticsofWorldFederationofChineseMedicineSocieties,Beijing100029,China;3.ConsultingCenterofBiomedicalStatistics,AcademyofMilitaryMedicalSciences,Beijing100850,China*Correspondingauthor:HULiang-ping,E-mail:lphu812@sina.com) The purpose of this paper is to enable readers to realize random grouping using PLAN procedure in SAS software quickly and easily. Firstly, the PLAN procedure was briefly introduced. Then, implementation of randomization by using SAS was introduced in this paper for a single factor design, a randomized block design, a randomized block design with repeated experiment and a Latin square design. Readers can easily use SAS software to achieve random grouping by modifying a few parameters of SAS programs presented in this paper. In fact, the readers can easily solve a lot of specific problems with the existing SAS programs, although SAS software is very difficult to learn and use. SAS software; Random grouping; Stratification factor; Single factor design; Randomized block design; Latin square design R195.1 A doi:10.11886/j.issn.1007-3256.2016.05.003 2016-10-11)
——平衡不完全區(qū)組設計定量資料一元方差分析