在做研究的過程中,最重要的就是如何透過表格以及圖形呈現重要的研究結果發現,在醫學研究的論文中,一般而言,表一(Table 1)都會先呈現研究族群的基本資料,因為大多數的研究幾乎都會需要表一,但如果是人工把分析的數字貼到word上再加以整理,難免會有貼錯的狀況,如果表格內容較多的時候可能一眼也不容易檢查出來,這樣會造成一些不必要的錯誤。

所幸有厲害的開發者Kazuki YoshidaR上面開發了一個package “tableone”,讓使用者可以快速的製作表一而不出錯,tableone可以應付常見的表一分析,筆者這次先示範產生不分組描述性統計的結果,之後會再針對分組比較的分析做進一步的說明跟示範。

*匯入需要的package
install.packages("tableone") #安裝tableone
library(tableone) #載入package
library(survival) #載入package
data(cancer)
head(cancer)

*資料欄位說明:
1.    inst: 醫療院所代碼(Institution code)
2.    time: 存活天數(Survival time in days)
3.    status: 存活狀態1=censored(存活或失去追蹤), 2=dead(死亡)
4.    age: 年齡Age in years
5.    sex: 性別Male=1 Female=2
6.    ph.ecog: 醫生評估的ECOG體能狀況評估分數
0= asymptomatic
1= symptomatic but completely ambulatory
2= in bed <50% of the day
3= in bed > 50% of the day but not bedbound
4= bedbound
7.    ph.karno: Karnofsky performance score as rated by physician (bad=0~good=100)
8.    pat.karno: Karnofsky performance score as rated by patient
9.    meal.cal: 卡路里攝取Calories consumed at meals
10.    wt.loss: 體重損失Weight loss in last six months

*產生Table
tab1 <- CreateTableOne(data = cancer) #針對cancer這個資料的所有變項跑描述性統計
print(tab1)
結果:
                      Overall        
  n                        228         
  inst (mean (SD))       11.09 (8.30)  
  time (mean (SD))      305.23 (210.65)
  status (mean (SD))      1.72 (0.45)  
  age (mean (SD))        62.45 (9.07)  
  sex (mean (SD))         1.39 (0.49)  
  ph.ecog (mean (SD))     0.95 (0.72)  
  ph.karno (mean (SD))   81.94 (12.33) 
  pat.karno (mean (SD))  79.96 (14.62) 
  meal.cal (mean (SD))  928.78 (402.17)
  wt.loss (mean (SD))     9.83 (13.14)

 

              從上面的結果會發現所有的分析都是呈現平均數(標準差),但不太合理,因為部份變項是類別變項,應該要列人數(百分比),所以我們必須要在R裡面宣告這些變項是類別變項(factor),這樣之後描統才會有人數(百分比),此外資料當中有一些不需要分析的變項,例如: inst (醫療院所代碼)

 

*列出要分析的變項,以及把部分變項宣告成類別變項(factor)
## 取得變項名稱
dput(names(cancer))
## 列出要跑描述性統計的變項
myVars <- c("time", "status", "age", "sex", "ph.ecog", "ph.karno", 
            "pat.karno", "meal.cal", "wt.loss")
##列出要宣告的類別變項
catVars <- c("status", "sex", "ph.ecog")


*經過上面設定後,再重新跑一次Table 
## Create a TableOne object
tab2 <- CreateTableOne(vars = myVars, data = pbc, factorVars = catVars)
print(tab2, showAllLevels = TRUE) # showAllLevels = TRUE,把類別變項的選項都列出來,如果showAllLevels = FALSE,如果是分兩類的變項只會列出coding 數字大的
結果:
                        level Overall        
  n                              228         
  time (mean (SD))            305.23 (210.65)
  status (%)            1         63 (27.6)  
                        2        165 (72.4)  
  age (mean (SD))              62.45 (9.07)  
  sex (%)               1        138 (60.5)  
                        2         90 (39.5)  
  ph.ecog (%)           0         63 (27.8)  
                        1        113 (49.8)  
                        2         50 (22.0)  
                        3          1 ( 0.4)  
  ph.karno (mean (SD))         81.94 (12.33) 
  pat.karno (mean (SD))        79.96 (14.62) 
  meal.cal (mean (SD))        928.78 (402.17)
  wt.loss (mean (SD))           9.83 (13.14)


*資料沒有錯誤,那代表這兩個變項的離散程度可能較大,不太適合用平均數(標準差)描述資料,需要改列中位數[四分位數]。
#假設"meal.cal", "wt.loss"非常態分佈
biomarkers <- c("meal.cal", "wt.loss") #列出不符合常態分佈的變項
print(tab2, nonnormal = biomarkers) #nonnormal = biomarkers,不符合常態分佈的變項會改列中位數[四分位數]
結果:
                         Overall                 
  n                           228                  
  time (mean (SD))         305.23 (210.65)         
  status = 2 (%)              165 (72.4)           
  age (mean (SD))           62.45 (9.07)           
  sex = 2 (%)                  90 (39.5)           
  ph.ecog (%)                                      
     0                         63 (27.8)           
     1                        113 (49.8)           
     2                         50 (22.0)           
     3                          1 ( 0.4)           
  ph.karno (mean (SD))      81.94 (12.33)          
  pat.karno (median [IQR])  80.00 [70.00, 90.00]   
  meal.cal (median [IQR])  975.00 [635.00, 1150.00]
  wt.loss (median [IQR])     7.00 [0.00, 15.75]    

*將結果輸出成csv檔
##將tab2輸出成csv檔案
write.csv(tab2, file = "D:/myTable.csv")

 

參考資料:

https://cran.r-project.org/web/packages/tableone/vignettes/introduction.html


 

 

 

arrow
arrow
    全站熱搜

    晨晰部落格新站 發表在 痞客邦 留言(0) 人氣()