胡 完,胡良平,2*
(1.軍事醫(yī)學(xué)科學(xué)院生物醫(yī)學(xué)統(tǒng)計學(xué)咨詢中心,北京 100850; 2.世界中醫(yī)藥學(xué)會聯(lián)合會臨床科研統(tǒng)計學(xué)專業(yè)委員會,北京 100029
基于R軟件實現(xiàn)隨機分組及其應(yīng)用
胡 完1,胡良平1,2*
(1.軍事醫(yī)學(xué)科學(xué)院生物醫(yī)學(xué)統(tǒng)計學(xué)咨詢中心,北京 100850; 2.世界中醫(yī)藥學(xué)會聯(lián)合會臨床科研統(tǒng)計學(xué)專業(yè)委員會,北京 100029
本文目的是使讀者快速掌握用R軟件實現(xiàn)幾種隨機分組的方法。通過借助R軟件中實現(xiàn)隨機抽樣的sample()函數(shù),間接地實現(xiàn)簡單隨機分組和分層隨機分組的目的。事實表明:R軟件易于獲取、易學(xué)易用;R軟件功能強大、適用面寬,可以方便快捷地解決試驗設(shè)計中的隨機分組問題。
R軟件;簡單隨機分組;分層隨機分組;非試驗因素
從總體中抽取了規(guī)定數(shù)目的個體或樣品或受試對象,通常還需要將他們隨機分到若干個組里去。各組需要分配多少名個體呢?應(yīng)根據(jù)具體情況確定,各組的個體數(shù)目可以按一定比例來分配,但最好各組的個體數(shù)目相等(在結(jié)果上將產(chǎn)生的誤差最小化)。
如何將規(guī)定數(shù)目的個體按等比例或規(guī)定的某種比例隨機分配到兩組或多組中去的方法被稱為隨機分組。其具體方法有:完全或簡單隨機分組、分層或區(qū)組隨機分組(注:在本質(zhì)上,分層因素與區(qū)組因素都是指重要的非試驗因素)、分層區(qū)組隨機分組(事實上,就是同時考察兩個重要非試驗因素的隨機分組)。
值得一提的是,目前在R軟件中尚未找到直接用于隨機化分組的函數(shù),本文暫且借用隨機抽樣的sample( )函數(shù)來代替。不可避免的問題可能會出現(xiàn),即各組的樣本含量可能不相等。補救措施是改變隨機數(shù)的種子數(shù),直到所生成的隨機分組結(jié)果符合各組樣本含量相等的要求時,固定此隨機數(shù)種子數(shù),并保留程序。以后再運行此程序時,就能再現(xiàn)以前的符合要求的隨機化分組結(jié)果。
2.1 簡單隨機分組
2.1.1 將全部受試對象隨機均分成兩組
【例1】現(xiàn)有編號為1~24的24位受試對象,希望將他們隨機地均分到“試驗組”與“對照組”中去,并顯示出隨機分組的結(jié)果。
解答:在R中使用下面的語句就可實現(xiàn)前述的目的。
> a<- c(1:24)
> b<- rep(c("試驗組","對照組"),12)
> c<- sample(b,24,rep=F)
> d<- cbind(a,c);d
以上句的含義如下:
第一句:生成一個名為a的向量,其元素為1~24。
第二句:生成一個名為b的向量,其元素由“試驗組”和“對照組”交替組成,共重復(fù)12次,故元素個數(shù)為24。
第三句:生成一個向量c,其元素是從向量b中無放回隨機抽樣的結(jié)果,抽出24個元素,本質(zhì)上,相當(dāng)于對向量b中的24個元素進(jìn)行隨機化排列。
第四句:將向量a與c按列進(jìn)行合并,生成一個向量d,并將其輸出。
ac[1,]"1""對照組"[2,]"2""對照組"[3,]"3""對照組"[4,]"4""對照組"[5,]"5""對照組"[6,]"6""試驗組"[7,]"7""試驗組"[8,]"8""試驗組"[9,]"9""試驗組"[10,]"10""對照組"[11,]"11""試驗組"[12,]"12""對照組"[13,]"13""試驗組"[14,]"14""對照組"[15,]"15""試驗組"[16,]"16""試驗組"[17,]"17""對照組"[18,]"18""對照組"[19,]"19""試驗組"[20,]"20""對照組"[21,]"21""對照組"[22,]"22""試驗組"[23,]"23""試驗組"[24,]"24""試驗組"
以上是將編號為1~24(見a列)的受試對象隨機均分入試驗組與對照組(見c列)。
2.1.2 將全部受試對象隨機均分成三組
【例2】現(xiàn)有編號為1~24的24位受試對象,希望將他們隨機地均分為“試驗組”與“對照組1”和“對照組2”三組中去(即按1:2分配樣品),并顯示出隨機分組的結(jié)果。
解答:在R中使用下面的語句就可實現(xiàn)前述的目的。
>a<- c(1:24)
>b<- rep(c("試驗組","對照組1","對照組2"),8)
> c<- sample(b,24,rep=F)
> d<- cbind(a,c);d
第一句:生成一個名為a的向量,其元素為1~24。
第二句:生成一個名為b的向量,其元素由“試驗組”、“對照組1”和“對照組2”交替組成,共重復(fù)8次,故元素個數(shù)為24。
第三句:生成一個向量c,其元素是從向量b中無放回隨機抽樣的結(jié)果,抽出24個元素,本質(zhì)上相當(dāng)于對向量b中的24個元素進(jìn)行隨機化排列。
第四句:將向量a與c按列進(jìn)行合并,生成一個向量d,并將其輸出。
a c[1,]"1""對照組2"[2,]"2""對照組2"[3,]"3""試驗組"[4,]"4""對照組1"[5,]"5""對照組2"[6,]"6""試驗組"[7,]"7""試驗組"[8,]"8""試驗組"[9,]"9""對照組1"[10,]"10""對照組2"[11,]"11""對照組1"[12,]"12""對照組1"[13,]"13""試驗組"[14,]"14""對照組2"[15,]"15""對照組2"[16,]"16""對照組2"[17,]"17""對照組2"[18,]"18""試驗組"[19,]"19""對照組1"[20,]"20""對照組1"[21,]"21""對照組1"[22,]"22""試驗組"[23,]"23""對照組1"[24,]"24""試驗組"
以上是將編號從1~24的24個樣品(見a列)按1:2的比例隨機化分組的輸出結(jié)果,試驗組、對照組1、對照組2中各包含8個樣品。
如何使某次隨機化分組結(jié)果具有重現(xiàn)性呢?若想使前面剛出現(xiàn)過的隨機化分組結(jié)果再次出現(xiàn),就很困難了。只有事先設(shè)置好隨機化種子[使用set.seed(n),n為非0的正整數(shù)],然后生成隨機化分組結(jié)果;再使用相同的隨機化種子,第二次運行相同的生成隨機化分組的程序,才能得到相同的隨機化分組結(jié)果。若在未來的某個時間,還想生成相同的隨機化分組結(jié)果,事先還得運行與以前使用過的相同的隨機化種子。
> set.seed(2)
> a<- c(1:24)
> b<- rep(c("試驗組","對照組1","對照組2"),8)
> c<- sample(b,24,rep=F)
> d<- cbind(a,c);d
以上的第一句為設(shè)置隨機化種子,后面四句的內(nèi)容與前面程序相同,已解釋過了。
a c[1,]"1""對照組1"[2,]"2""對照組1"[3,]"3""試驗組"[4,]"4""試驗組"[5,]"5""試驗組"[6,]"6""對照組2"[7,]"7""對照組2"[8,]"8""對照組2"[9,]"9""對照組1"[10,]"10""對照組2"[11,]"11""試驗組"[12,]"12""對照組2"[13,]"13""試驗組"[14,]"14""對照組1"[15,]"15""對照組2"[16,]"16""對照組1"[17,]"17""對照組1"[18,]"18""對照組1"[19,]"19""對照組1"[20,]"20""試驗組"[21,]"21""對照組2"[22,]"22""試驗組"[23,]"23""試驗組"[24,]"24""對照組2"
> set.seed(2)
> a<- c(1:24)
> b<- rep(c("試驗組","對照組1","對照組2"),8)
> c<- sample(b,24,rep=F)
> d<- cbind(a,c);d
以上的第一句所設(shè)置的隨機化種子與前面相同,后面四句的內(nèi)容與前面程序也相同,已解釋過了。
a c[1,]"1""對照組1"[2,]"2""對照組1"[3,]"3""試驗組"[4,]"4""試驗組"[5,]"5""試驗組"[6,]"6""對照組2"[7,]"7""對照組2"[8,]"8""對照組2"[9,]"9""對照組1"[10,]"10""對照組2"[11,]"11""試驗組"[12,]"12""對照組2"[13,]"13""試驗組"[14,]"14""對照組1"[15,]"15""對照組2"[16,]"16""對照組1"[17,]"17""對照組1"[18,]"18""對照組1"[19,]"19""對照組1"[20,]"20""試驗組"[21,]"21""對照組2"[22,]"22""試驗組"[23,]"23""試驗組"[24,]"24""對照組2"
以上兩批生成的隨機化分組結(jié)果完全相同,這是由于兩批運行的隨機化種子數(shù)和程序都相同。
2.2 分層或區(qū)組隨機分組
【例3】現(xiàn)有編號為1~24的24位受試對象,男性和女性各12例。試將性別視為分層因素,將各層中的受試對象隨機地均分入試驗組與對照組中去。
解答:在R中使用下面的語句就可實現(xiàn)前述的目的。
> set.seed(20160407)
>a<- c(1:24)
>b1<- rep(c("男"),12)
>b2<- rep(c("女"),12)
> c<- c(b1,b2)
> d1<- rep(c("試驗組"),12)
> d2<- rep(c("對照組"),12)
> e<- c(d1,d2)
> f<- sample(e,24,rep=F)
> g<- cbind(a,c,f);g
以上有10行獨立的R語句,其中,最后一行有兩句,用“;”(即英文輸入狀態(tài)下分號)隔開。
第1行:固定隨機數(shù)的種子數(shù)為20160407。
第2行:生成受試對象的編號1~24號,作為向量a的24個元素。
第3、4兩行:生成兩個各有12個元素(或長度為12)的向量b1與b2,其內(nèi)容分別由12個“男”、12個“女”組成。
第5行:將b1與b2兩個向量左右拼接成一個長度為24的向量c。
第6、7兩行:生成兩個各有12個元素(或長度為12)的向量d1與d2,其內(nèi)容分別由12個“試驗組”、12個“對照組”組成。
第8行:將d1與d2兩個向量左右拼接成一個長度為24的向量e。
第9行:調(diào)用sample( )函數(shù),從長度為24的向量e(其元素中,前12個為“試驗組”、后12個為“對照組”)中無放回地隨機抽取24個元素(注意:不能保證各層一定能抽取相同數(shù)目的“試驗組”與“對照組”,如果要保證各層“試驗組”與“對照組”數(shù)目相同,可分別按層進(jìn)行隨機分組),生成向量f。
第10行:前一句是將向量a、c和f按列進(jìn)行合并生成一個數(shù)據(jù)框g;后一句要求輸出數(shù)據(jù)框g的內(nèi)容。
acf[1,]"1""男""試驗組"[2,]"2""男""試驗組"[3,]"3""男""對照組"[4,]"4""男""試驗組"[5,]"5""男""對照組"
[6,]"6""男""對照組"[7,]"7""男""對照組"[8,]"8""男""對照組"[9,]"9""男""試驗組"[10,]"10""男""對照組"[11,]"11""男""試驗組"[12,]"12""男""試驗組"[13,]"13""女""試驗組"[14,]"14""女""對照組"[15,]"15""女""試驗組"[16,]"16""女""試驗組"[17,]"17""女""對照組"[18,]"18""女""對照組"[19,]"19""女""試驗組"[20,]"20""女""對照組"[21,]"21""女""對照組"[22,]"22""女""試驗組"[23,]"23""女""試驗組"[24,]"24""女""對照組"
以上是輸出結(jié)果,第1列為R軟件自動生成的行號;第2列為受試對象的1~24個編號;第3列為受試對象的性別(注意:開始應(yīng)將12位男性受試對象作為第一層編號為1~12號、將12位女性受試對象作為第二層編號為13~24號);第4列相當(dāng)于[因為是借用隨機抽樣函數(shù)(即sample()函數(shù))而不是真正的隨機分組函數(shù)(此種函數(shù)在R中是否存在,筆者暫時尚不能確定)]將各層內(nèi)相同性別的受試對象隨機地均分入“試驗組”與“對照組”。
[1] 胡良平. 課題設(shè)計與數(shù)據(jù)分析—關(guān)鍵技術(shù)與標(biāo)準(zhǔn)模板[M]. 北京: 軍事醫(yī)學(xué)科學(xué)出版社, 2014: 93-103.
[2] 黃文, 王正林. 數(shù)據(jù)挖掘: R語言實戰(zhàn)[M]. 電子工業(yè)出版社, 2015: 34-39.
[3] 李詩羽, 張飛, 王正林. 數(shù)據(jù)分析: R語言實戰(zhàn)[M]. 電子工業(yè)出版社, 2015: 88-156.
[4] 方匡南, 朱建平, 姜葉飛. R數(shù)據(jù)分析: 方法與案例詳解[M]. 電子工業(yè)出版社, 2015: 54-168.
[5] Joseph Adler. R語言核心技術(shù)手冊[M]. 2版. 劉思喆, 李艦, 陳鋼, 等譯. 電子工業(yè)出版社, 2015: 417-421.
(本文編輯:唐雪莉)
The realization of the random grouping and its application based on R software
HuWan1,HuLiangping1,2*
(1.ConsultingCenterofBiomedicalStatistics,AcademyofMilitaryMedicalSciences,Beijing100850,China; 2.SpecialtyCommitteeofClinicalScientificResearchStatisticsofWorldFederationofChineseMedicineSocieties,Beijing100029,China
*Correspondingauthor:HuLiangping,E-mail:lphu812@sina.com)
The purpose of this paper is to help readers to implement random grouping by using R software. The simple random grouping and stratified random grouping are realized with the help of the function of sample(), that is used to implement random sampling. In fact, R software is very easy to obtain, learn and use; and R software is very powerful, wide application, can solve problems about random grouping in the experimental designs conveniently and quickly.
R software; Simple random grouping; Stratified random grouping; Non-experimental factor
*通信作者:胡良平,E-mail:lphu812@sina.com )
R195.1
A
10.11886/j.issn.1007-3256.2016.06.003
國家高技術(shù)研究發(fā)展計劃課題資助(02015AA020102)
2016-12-05)