?

基于R軟件實現隨機分組及其應用

2016-02-24 10:09胡良平
四川精神衛生 2016年6期
關鍵詞:分組向量分層

胡 完,胡良平,2*

(1.軍事醫學科學院生物醫學統計學咨詢中心,北京 100850; 2.世界中醫藥學會聯合會臨床科研統計學專業委員會,北京 100029

基于R軟件實現隨機分組及其應用

胡 完1,胡良平1,2*

(1.軍事醫學科學院生物醫學統計學咨詢中心,北京 100850; 2.世界中醫藥學會聯合會臨床科研統計學專業委員會,北京 100029

本文目的是使讀者快速掌握用R軟件實現幾種隨機分組的方法。通過借助R軟件中實現隨機抽樣的sample()函數,間接地實現簡單隨機分組和分層隨機分組的目的。事實表明:R軟件易于獲取、易學易用;R軟件功能強大、適用面寬,可以方便快捷地解決試驗設計中的隨機分組問題。

R軟件;簡單隨機分組;分層隨機分組;非試驗因素

1 隨機分組的概述[1]

從總體中抽取了規定數目的個體或樣品或受試對象,通常還需要將他們隨機分到若干個組里去。各組需要分配多少名個體呢?應根據具體情況確定,各組的個體數目可以按一定比例來分配,但最好各組的個體數目相等(在結果上將產生的誤差最小化)。

如何將規定數目的個體按等比例或規定的某種比例隨機分配到兩組或多組中去的方法被稱為隨機分組。其具體方法有:完全或簡單隨機分組、分層或區組隨機分組(注:在本質上,分層因素與區組因素都是指重要的非試驗因素)、分層區組隨機分組(事實上,就是同時考察兩個重要非試驗因素的隨機分組)。

值得一提的是,目前在R軟件中尚未找到直接用于隨機化分組的函數,本文暫且借用隨機抽樣的sample( )函數來代替。不可避免的問題可能會出現,即各組的樣本含量可能不相等。補救措施是改變隨機數的種子數,直到所生成的隨機分組結果符合各組樣本含量相等的要求時,固定此隨機數種子數,并保留程序。以后再運行此程序時,就能再現以前的符合要求的隨機化分組結果。

2 幾種常見隨機分組方法的R實現[2-5]

2.1 簡單隨機分組

2.1.1 將全部受試對象隨機均分成兩組

【例1】現有編號為1~24的24位受試對象,希望將他們隨機地均分到“試驗組”與“對照組”中去,并顯示出隨機分組的結果。

解答:在R中使用下面的語句就可實現前述的目的。

> a<- c(1:24)

> b<- rep(c("試驗組","對照組"),12)

> c<- sample(b,24,rep=F)

> d<- cbind(a,c);d

以上句的含義如下:

第一句:生成一個名為a的向量,其元素為1~24。

第二句:生成一個名為b的向量,其元素由“試驗組”和“對照組”交替組成,共重復12次,故元素個數為24。

第三句:生成一個向量c,其元素是從向量b中無放回隨機抽樣的結果,抽出24個元素,本質上,相當于對向量b中的24個元素進行隨機化排列。

第四句:將向量a與c按列進行合并,生成一個向量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】現有編號為1~24的24位受試對象,希望將他們隨機地均分為“試驗組”與“對照組1”和“對照組2”三組中去(即按1:2分配樣品),并顯示出隨機分組的結果。

解答:在R中使用下面的語句就可實現前述的目的。

>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”交替組成,共重復8次,故元素個數為24。

第三句:生成一個向量c,其元素是從向量b中無放回隨機抽樣的結果,抽出24個元素,本質上相當于對向量b中的24個元素進行隨機化排列。

第四句:將向量a與c按列進行合并,生成一個向量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的比例隨機化分組的輸出結果,試驗組、對照組1、對照組2中各包含8個樣品。

如何使某次隨機化分組結果具有重現性呢?若想使前面剛出現過的隨機化分組結果再次出現,就很困難了。只有事先設置好隨機化種子[使用set.seed(n),n為非0的正整數],然后生成隨機化分組結果;再使用相同的隨機化種子,第二次運行相同的生成隨機化分組的程序,才能得到相同的隨機化分組結果。若在未來的某個時間,還想生成相同的隨機化分組結果,事先還得運行與以前使用過的相同的隨機化種子。

> set.seed(2)

> a<- c(1:24)

> b<- rep(c("試驗組","對照組1","對照組2"),8)

> c<- sample(b,24,rep=F)

> d<- cbind(a,c);d

以上的第一句為設置隨機化種子,后面四句的內容與前面程序相同,已解釋過了。

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

以上的第一句所設置的隨機化種子與前面相同,后面四句的內容與前面程序也相同,已解釋過了。

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"

以上兩批生成的隨機化分組結果完全相同,這是由于兩批運行的隨機化種子數和程序都相同。

2.2 分層或區組隨機分組

【例3】現有編號為1~24的24位受試對象,男性和女性各12例。試將性別視為分層因素,將各層中的受試對象隨機地均分入試驗組與對照組中去。

解答:在R中使用下面的語句就可實現前述的目的。

> 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語句,其中,最后一行有兩句,用“;”(即英文輸入狀態下分號)隔開。

第1行:固定隨機數的種子數為20160407。

第2行:生成受試對象的編號1~24號,作為向量a的24個元素。

第3、4兩行:生成兩個各有12個元素(或長度為12)的向量b1與b2,其內容分別由12個“男”、12個“女”組成。

第5行:將b1與b2兩個向量左右拼接成一個長度為24的向量c。

第6、7兩行:生成兩個各有12個元素(或長度為12)的向量d1與d2,其內容分別由12個“試驗組”、12個“對照組”組成。

第8行:將d1與d2兩個向量左右拼接成一個長度為24的向量e。

第9行:調用sample( )函數,從長度為24的向量e(其元素中,前12個為“試驗組”、后12個為“對照組”)中無放回地隨機抽取24個元素(注意:不能保證各層一定能抽取相同數目的“試驗組”與“對照組”,如果要保證各層“試驗組”與“對照組”數目相同,可分別按層進行隨機分組),生成向量f。

第10行:前一句是將向量a、c和f按列進行合并生成一個數據框g;后一句要求輸出數據框g的內容。

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""女""對照組"

以上是輸出結果,第1列為R軟件自動生成的行號;第2列為受試對象的1~24個編號;第3列為受試對象的性別(注意:開始應將12位男性受試對象作為第一層編號為1~12號、將12位女性受試對象作為第二層編號為13~24號);第4列相當于[因為是借用隨機抽樣函數(即sample()函數)而不是真正的隨機分組函數(此種函數在R中是否存在,筆者暫時尚不能確定)]將各層內相同性別的受試對象隨機地均分入“試驗組”與“對照組”。

[1] 胡良平. 課題設計與數據分析—關鍵技術與標準模板[M]. 北京: 軍事醫學科學出版社, 2014: 93-103.

[2] 黃文, 王正林. 數據挖掘: R語言實戰[M]. 電子工業出版社, 2015: 34-39.

[3] 李詩羽, 張飛, 王正林. 數據分析: R語言實戰[M]. 電子工業出版社, 2015: 88-156.

[4] 方匡南, 朱建平, 姜葉飛. R數據分析: 方法與案例詳解[M]. 電子工業出版社, 2015: 54-168.

[5] Joseph Adler. R語言核心技術手冊[M]. 2版. 劉思喆, 李艦, 陳鋼, 等譯. 電子工業出版社, 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

國家高技術研究發展計劃課題資助(02015AA020102)

2016-12-05)

猜你喜歡
分組向量分層
向量的分解
聚焦“向量與三角”創新題
一種沉降環可準確就位的分層沉降儀
分組搭配
雨林的分層
怎么分組
有趣的分層
分組
向量垂直在解析幾何中的應用
向量五種“變身” 玩轉圓錐曲線
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合