tableone

代碼來自cloudy

數(shù)據(jù)要轉(zhuǎn)換成數(shù)字 缺失數(shù)據(jù)用NA表示

rm(list = ls())

#繪制table1

#加載數(shù)據(jù)集和包

setwd("/Users/zhongyue/Desktop/R代碼/統(tǒng)計")

rt=read.table("測試tableone.txt",header=T,sep="\t",check.names=F,row.names

= 1)

library(tableone)

# 加載包

library(survival)? #加載包,需要使用survival包的colon數(shù)據(jù)

?#加載數(shù)據(jù)集

View(rt)

tab1=CreateTableOne(data= rt);tab1? #匯總整個數(shù)據(jù)集特征


要將分類變量轉(zhuǎn)化為因子


3. 分類變量處理

在數(shù)據(jù)處理中,大多數(shù)分類變量是采用數(shù)字編碼,二分類變量常表示為0和1,多分類變量表示為0纱皆、1和2等。


有兩種方法可以將分類變量轉(zhuǎn)化為因子:一是先在數(shù)據(jù)集中將分類變量轉(zhuǎn)化為因子,然后再使用tableone包進行匯總歇父,二是在tableone包中直接指定哪些變量屬于因子(使用factorVars參數(shù)進行轉(zhuǎn)換),然后在進行匯總再愈。

dput(names(rt))

# 輸出rt數(shù)據(jù)集變量名稱

#指定基線表中需要比較的變量

myVars <-

c("MAL2", "Age", "futime", "fustat",

"T", "N", "M", "Stage", "ER",

"PR", "HER2")

#指定基線表中哪些變量是分類變量

catVars <-

c("MAL2", "Age", "T", "N",

"M", "Stage", "ER", "PR",

"HER2","fustat")

```

4. 優(yōu)化單組匯總


tab2 <-CreateTableOne(vars = myVars,?

?????????????????????? data = rt,

?????????????????????? factorVars =catVars);tab2

# 通過vars參數(shù)指定哪些變量是基線表中需要匯總的變量

# 通過factorVars參數(shù)指定哪些變量是分類變量

# data參數(shù)指定變量的數(shù)據(jù)來源

```

從上圖可以看出榜苫,在指定基線表的匯總變量、分類變量,排除掉無關(guān)變量后炕淮,基線表的結(jié)果顯示比前面好很多跨嘉。


二分類變量顯示為第2水平的計數(shù)(百分比),比如分類變量為0和1驹饺,則顯示1的結(jié)果;如果為多分類變量缴渊,則顯示出所有水平數(shù)據(jù)赏壹。


如果在表中要顯示所有水平的數(shù)據(jù),則輸入:

print(tab2,

showAllLevels = TRUE)

```

注意:分類變量的百分比數(shù)據(jù)是在排除缺失值后計算的衔沼。


5. 顯示基線表所有數(shù)據(jù)信息

如果需要顯示所有數(shù)據(jù)信息蝌借,包括分類變量和連續(xù)變量的缺失值信息,對結(jié)果對象使用summary()函數(shù)指蚁,先輸出連續(xù)變量數(shù)據(jù)信息骨望,在輸出分類變量數(shù)據(jù)信息。



summary(tab2)



6. 指定非正態(tài)分布變量

從前面的表中可以看到欣舵,連續(xù)變量都表示為均數(shù)±標(biāo)準(zhǔn)差擎鸠,這是認(rèn)為連續(xù)變量都呈正態(tài)分布。但是實際上有些數(shù)據(jù)呈非正態(tài)分布缘圈,需要用中位數(shù)(四分位數(shù))表示劣光。

假設(shè)數(shù)據(jù)集中"time"和"nodes"兩個連續(xù)變量呈非正態(tài)分布。

```{r 非正態(tài)分布}

nonvar

<- c("futime") # 指定哪些變量是非正態(tài)分布變量

print(tab2,

nonnormal = nonvar) # 輸出基線表數(shù)據(jù)信息

```

可以看出"time"和"nodes"這兩個連續(xù)變量都用中位數(shù)(四分位數(shù))表示了糟把。


如果在print()函數(shù)中輸入的是nonnormal = TRUE绢涡,則所有連續(xù)變量都按非正態(tài)分布進行分析。

7. 多組匯總數(shù)據(jù)

在前面遣疯,我們對數(shù)據(jù)集信息進行了單組匯總雄可。但是通常,我們需要比較兩組患者之間的基線特征,如比較AKI組和非AKI組数苫。


在本數(shù)據(jù)集中聪舒,我們需要對"status"生存狀態(tài)(1為死亡,0為刪失)進行分組匯總虐急。

```{r 分組匯總}

tab3 <-

CreateTableOne(vars = myVars,

?????????????????????? strata ="MAL2",

?????????????????????? data = rt,

?????????????????????? factorVars = catVars);tab3

#

strata參數(shù)表示分層箱残,指定需要分層的變量,這里我們指定status變量

# 通過vars參數(shù)指定哪些變量是基線表中需要匯總的變量止吁。

# 通過factorVars參數(shù)指定哪些變量是分類變量

# data參數(shù)指定變量的數(shù)據(jù)來源

```


從圖上我們可以看出被辑,我們已經(jīng)分組總結(jié)好了,并且在表右邊已經(jīng)自動進行了統(tǒng)計檢驗敬惦,輸出了檢驗p值盼理。


但是呈非正態(tài)分布的連續(xù)變量并沒有輸出中位數(shù)和四分位數(shù),檢驗方法也需要調(diào)整俄删。


8. 統(tǒng)計檢驗

如上表所示宏怔,當(dāng)進行兩組或多組分層匯總時,兩組或多組間比較的p值會自動隨著基線表一起輸出抗蠢,如果p值很小举哟,則顯示為<0.001思劳。


tableone默認(rèn)的檢驗方法為:分類變量使用卡方檢驗(chisq.test()迅矛,連續(xù)性校正);連續(xù)變量使用方差分析(oneway.test()潜叛,假設(shè)等方差)秽褒,兩組間方差分析相當(dāng)于t檢驗。


但是在基線表中威兜,有些連續(xù)變量是非正態(tài)分布變量销斟,有些分類變量中單元格期望值較小,這些變量的統(tǒng)計方法不能使用默認(rèn)的統(tǒng)計方法椒舵。


kruskal.test()函數(shù)可以用于呈非正態(tài)分布的連續(xù)變量蚂踊,fisher.test()可以指定分類變量進行fisher精確檢驗。

在兩組間比較時笔宿,kruskal.test()和wilcox.test()等效犁钟。


基線表的test列會顯示哪些變量是使用非默認(rèn)檢驗方法來計算p值。

假設(shè)"extent"變量需要使用fisher精確檢驗泼橘。


```{r 調(diào)整統(tǒng)計學(xué)方法}

#其他照著修改即可

exactvars <-

c("T", "N")# 指定哪些變量需要使用fisher精確檢驗,

print(tab3, # 前面的tab3對象

????? nonnormal = nonvar, #指定哪些連續(xù)變量是非正態(tài)分布變量

????? exact =exactvars)? #指定哪些變量需要使用fisher精確檢驗涝动,若單獨一個可以 exact = “T”

```

9. 添加overall列

如最前面的舉例所示,基線表中可以添加overall列炬灭,表示所有患者的特征醋粟。

在CreateTableOne()函數(shù)中使用addOverall =

TRUE就可以添加overall列了。

```{r 添加overall列}

tab4 <-

CreateTableOne(vars = myVars,

?????????????????????? strata ="MAL2",

?????????????????????? data = rt,

?????????????????????? factorVars = catVars,

?????????????????????? addOverall = TRUE) #增加overall列

print(tab4,

nonnormal = nonvar, exact = exactvars,showAllLevels = TRUE)

#

strata表示分層,指定需要分層的變量米愿,這里我們指定status變量

# 通過vars參數(shù)指定哪些變量是基線表中需要匯總的變量厦凤。

# 通過factorVars參數(shù)指定哪些變量是分類變量

# data參數(shù)指定變量的數(shù)據(jù)來源

```

10. 輸出基線特征表

到了這一步,R中基線特征表就基本繪制完成了吗货。接下來就要將表格導(dǎo)出到Excel中進行調(diào)整泳唠,然后導(dǎo)入到Word中繪制三線表。


簡單粗暴的方法:就是復(fù)制粘貼宙搬,使用quote = TRUE顯示引號笨腥,使用noSpaces = TRUE刪除用于在R控制臺中對齊文本的空格,然后直接復(fù)制基線表整個內(nèi)容并將其粘貼到Excel電子表格即可勇垛。

脖母。

簡單粗暴的方法:就是復(fù)制粘貼,使用quote = TRUE顯示引號闲孤,

使用noSpaces = TRUE刪除用于在R控制臺中對齊文本的空格谆级,然后直接復(fù)制基線表整個內(nèi)容并將其粘貼到Excel電子表格即可。

```{r 輸出}

print(tab4,

# 前面的tab4對象

????? nonnormal = nonvar, #指定非正態(tài)分布變量

????? exact = "extent", #指定哪些變量需要使用fisher精確檢驗

????? quote = TRUE,? #顯示引號

????? noSpaces = TRUE) #刪除用于在R控制臺中對齊文本的空格

```

另一種方式:

如果您不喜歡復(fù)制和粘貼讼积,則可以通過以下方式自動導(dǎo)出肥照。

```{r? 輸出}

tab4Mat <-

print(tab4, nonnormal = nonvar, exact = "extent",

???????????????? quote = FALSE, #不顯示引號

???????????????? noSpaces = TRUE, #刪除用于在R控制臺中對齊文本的空格

???????????????? printToggle =FALSE,showAllLevels = TRUE)


## 保存為CSV 格式文件,并命名為 myTable勤众。

write.csv(tab4Mat,

file = "myTable.csv")

```

注意:quote參數(shù)選FALSE舆绎,noSpaces參數(shù)可選TRUE。


11. 后續(xù)


```{r 僅輸出分類變量}

tab3$CatTable

```

```{r 僅輸出連續(xù)變量}

print(tab3$ContTable,

nonnormal = nonvar)

```

12.

CreateTableOne()函數(shù)

CreateTableOne()是創(chuàng)建基線特征表的函數(shù)们颜,可以匯總所有基線變量信息(包括連續(xù)變量和分類變量)吕朵,并可按一個變量或多個變量進行分層匯總,并進行統(tǒng)計檢驗窥突。


```{r 整體代碼}

CreateTableOne(vars,

strata, data, factorVars,

?????????????? includeNA = FALSE,

?????????????? test = TRUE,

?????????????? testApprox = chisq.test,

?????????????? argsApprox = list(correct =TRUE),

?????????????? testExact = fisher.test,

?????????????? argsExact = list(workspace = 2 *10^5),

?????????????? testNormal = oneway.test,

?????????????? argsNormal = list(var.equal =TRUE),

?????????????? testNonNormal = kruskal.test,

?????????????? argsNonNormal = list(NULL),

?????????????? smd = TRUE, addOverall = FALSE)


函數(shù)參數(shù)解釋說明

vars? #字符向量努溃;指定哪些變量是基線特征表需要匯總的變量

# 數(shù)據(jù)集中的因子視為分類變量,數(shù)字型變量視為連續(xù)變量

# vars參數(shù)為空阻问,則指定數(shù)據(jù)集中所有變量進行匯總


strata

# 字符向量梧税;指定分組匯總的變量,為空則進行單組匯總(也就是Overall列)

data? #變量來源的數(shù)據(jù)集名稱称近,所有匯總變量都要在數(shù)據(jù)集里面

factorVars

# 字符向量第队;指定哪些變量為分類變量,指定的變量應(yīng)是vars參數(shù)中的變量

includeNA

= FALSE # 邏輯詞煌茬;為TRUE則將缺失值作為因子處理斥铺,僅對分類變量有效


test =

TRUE # 邏輯詞;默認(rèn)為TRUE坛善,當(dāng)有2個或多個組時晾蜘,自動進行組間比較

testApprox

= chisq.test # 默認(rèn)卡方檢驗邻眷;當(dāng)分類變量的單元格期望值較低(如<5)時,不建議使用

argsApprox

= list(correct = TRUE) # 進行chisq.test的連續(xù)校正剔交。


testExact

= fisher.test # 進行精確檢驗的函數(shù)肆饶,默認(rèn)為fisher.test。

argsExact

= list(workspace = 2*10^5) # 指定fisher.test分配的內(nèi)存空間


testNormal

= oneway.test # 連續(xù)變量為正態(tài)分布進行的檢驗

# 默認(rèn)為oneway.test岖常,兩組時相當(dāng)于t檢驗

argsNormal

= list(var.equal = TRUE) # 假設(shè)為等方差分析


testNonNormal

= kruskal.test # 連續(xù)變量為非正態(tài)分布變量進行的檢驗驯镊,非參數(shù)檢驗

# 默認(rèn)為Kruskal-Wallis秩和檢驗

# 當(dāng)只有兩個組時,與wilcox.test(Man-Whitney U檢驗)等效

argsNonNormal

= list(NULL) #傳遞給testNonNormal中指定的函數(shù)的參數(shù)的命名列表

# 默認(rèn)list(NULL)竭鞍,它只是一個占位符


smd =

TRUE # 默認(rèn)為TRUE板惑;當(dāng)有兩個以上的組時,則將自動計算組間比較的標(biāo)準(zhǔn)化均值差

addOverall

= FALSE # 僅在分組匯總中使用偎快,將overall列添加到基線表中

# smd和p值僅在分組匯總中使用冯乘。

```

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晒夹,隨后出現(xiàn)的幾起案子裆馒,更是在濱河造成了極大的恐慌,老刑警劉巖丐怯,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喷好,死亡現(xiàn)場離奇詭異,居然都是意外死亡读跷,警方通過查閱死者的電腦和手機梗搅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舔亭,“玉大人些膨,你說我怎么就攤上這事蟀俊∏掌蹋” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵肢预,是天一觀的道長矛洞。 經(jīng)常有香客問我,道長烫映,這世上最難降的妖魔是什么沼本? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮锭沟,結(jié)果婚禮上抽兆,老公的妹妹穿的比我還像新娘。我一直安慰自己族淮,他們只是感情好辫红,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布凭涂。 她就那樣靜靜地躺著,像睡著了一般贴妻。 火紅的嫁衣襯著肌膚如雪切油。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天名惩,我揣著相機與錄音澎胡,去河邊找鬼。 笑死娩鹉,一個胖子當(dāng)著我的面吹牛攻谁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弯予,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼巢株,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熙涤?” 一聲冷哼從身側(cè)響起阁苞,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祠挫,沒想到半個月后那槽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡等舔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年骚灸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慌植。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡甚牲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝶柿,到底是詐尸還是另有隱情丈钙,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布交汤,位于F島的核電站雏赦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芙扎。R本人自食惡果不足惜星岗,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戒洼。 院中可真熱鬧俏橘,春花似錦、人聲如沸圈浇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至曹仗,卻和暖如春榨汤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怎茫。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工收壕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轨蛤。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓蜜宪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祥山。 傳聞我的和親對象是個殘疾皇子圃验,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容