代碼來自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值僅在分組匯總中使用冯乘。
```