読者です 読者をやめる 読者になる 読者になる

疫学と医療統計学と遺伝学と時々、大学院生活

疫学を専門とする大学院生の研究に関する備忘録的ページ。

R package'tableone'のCreateTableOne関数で表1を書く

今回は疫学などヒトを対象とした研究で対象者の特性として、主な変数の要約することが多くありますが、その表1(table1)を描き、csvとして出力できる便利な関数の紹介です。
その便利な関数はCreateTableOne()関数です。(パッケージはtableoneと言うものです)

早速、インストールします
install.packages("tableone")
library(tableone)
今回の模擬データ(Indian Liver Patients Dataset(https://archive.ics.uci.edu/ml/datasets/ILPD+(Indian+Liver+Patient+Dataset))から入手可能)を読み込みます。
ilpd <- read.csv("ILPD.csv", header=T)
head(ilpd)
##   age    sex Tbil Dbil ALP ALT AST  TP alb   AG liver
## 1  65 Female  0.7  0.1 187  16  18 6.8 3.3 0.90     1
## 2  62   Male 10.9  5.5 699  64 100 7.5 3.2 0.74     1
## 3  62   Male  7.3  4.1 490  60  68 7.0 3.3 0.89     1
## 4  58   Male  1.0  0.4 182  14  20 6.8 3.4 1.00     1
## 5  72   Male  3.9  2.0 195  27  59 7.3 2.4 0.40     1
## 6  46   Male  1.8  0.7 208  19  14 7.6 4.4 1.30     1
前準備として、表示したい変数(listvar)と表示したい変数の中でカテゴリ変数となるもの(listcat)を選びます。
ilpd$liver <- factor(ilpd$liver)
listvar <- c("age", "Tbil", "Dbil", "ALP", "ALT", "AST", "TP", "alb", "liver")
listcat <- c("liver")
今回は性別で層別しますので、strataに"sex" を指定しています。
table1 <- CreateTableOne(vars = listvar, strata = "sex", data = ilpd, factorVars = listcat)
table1
##                   Stratified by sex
##                    Female          Male            p      test
##   n                   142             441                     
##   age (mean (sd))   43.13 (15.90)   45.27 (16.27)   0.173     
##   Tbil (mean (sd))   2.32 (4.86)     3.61 (6.56)    0.031     
##   Dbil (mean (sd))   0.99 (2.40)     1.65 (2.91)    0.015     
##   ALP (mean (sd))  302.34 (300.33) 286.79 (221.59)  0.508     
##   ALT (mean (sd))   54.24 (94.02)   89.24 (202.44)  0.047     
##   AST (mean (sd))   69.04 (127.77) 123.07 (323.22)  0.053     
##   TP (mean (sd))     6.65 (1.13)     6.43 (1.06)    0.031     
##   alb (mean (sd))    3.27 (0.83)     3.10 (0.78)    0.024     
##   liver = 2 (%)        50 (35.2)      117 (26.5)    0.060     
さらに詳しい結果はカテゴリ変数は$CatTableに、連続変数は$ContTableに格納されている情報をsummary()関数で表示することができる。
summary(table1$CatTable)

## sex: Female
##   var   n miss p.miss level freq percent cum.percent
##  liver 142    0    0.0     1   92    64.8        64.8
##                            2   50    35.2       100.0
##                                                      
## ----------------------------------------------------------- 
## sex: Male
##    var   n miss p.miss level freq percent cum.percent
##  liver 441    0    0.0     1  324    73.5        73.5
##                            2  117    26.5       100.0
##                                                      
## 
## p-values
##          pApprox     pExact
## liver 0.05966585 0.05460083
## 
## Standardize mean differences
##          1 vs 2
## liver 0.1887438
summary(table1$ContTable)

## sex: Female
##        n miss p.miss   mean     sd median   p25   p75  min    max  skew  kurt
## age  142    0      0  43.13  15.90   45.0  31.0  53.0  7.0   85.0  0.14 -0.15
## Tbil 142    0      0   2.32   4.86    0.8   0.7   1.1  0.5   27.7  3.99 15.74
## Dbil 142    0      0   0.99   2.40    0.2   0.2   0.4  0.1   12.8  3.83 14.37
## ALP  142    0      0 302.34 300.33  194.5 165.0 293.0 63.0 1896.0  3.34 11.75
## ALT  142    0      0  54.24  94.02   26.0  20.0  46.8 10.0  790.0  5.14 31.85
## AST  142    0      0  69.04 127.77   30.0  21.0  57.0 10.0 1050.0  4.91 29.18
## TP   142    0      0   6.65   1.13    6.8   5.9   7.5  3.6    9.2 -0.32 -0.35
## alb  142    0      0   3.27   0.83    3.3   2.8   3.9  1.0    5.5 -0.16 -0.19
## ----------------------------------------------------------- 
## sex: Male
##        n miss p.miss  mean     sd median   p25   p75  min    max   skew   kurt
## age  441    0      0  45.3  16.27   45.0  33.0  60.0  4.0   90.0 -0.083  -0.65
## Tbil 441    0      0   3.6   6.56    1.2   0.8   2.9  0.4   75.0  4.935  37.37
## Dbil 441    0      0   1.6   2.91    0.4   0.2   1.5  0.1   19.7  3.081  10.69
## ALP  441    0      0 286.8 221.59  215.0 179.0 298.0 75.0 2110.0  3.891  20.92
## ALT  441    0      0  89.2 202.44   38.0  25.0  65.0 10.0 2000.0  6.104  42.61
## AST  441    0      0 123.1 323.22   46.0  28.0  92.0 11.0 4929.0  9.775 125.59
## TP   441    0      0   6.4   1.06    6.5   5.7   7.1  2.7    9.6 -0.301   0.49
## alb  441    0      0   3.1   0.78    3.0   2.6   3.7  0.9    5.5 -0.022  -0.44
## 
## p-values
##         pNormal   pNonNormal
## age  0.17262095 1.324473e-01
## Tbil 0.03111161 1.317742e-06
## Dbil 0.01526587 4.485112e-07
## ALP  0.50758269 5.626061e-02
## ALT  0.04691661 1.224501e-06
## AST  0.05253525 4.360095e-07
## TP   0.03143463 2.830417e-02
## alb  0.02351545 2.130897e-02
## 
## Standardize mean differences
##          1 vs 2
## age  0.13252583
## Tbil 0.22353835
## Dbil 0.24609267
## ALP  0.05891688
## ALT  0.22174688
## AST  0.21984219
## TP   0.20468565
## alb  0.21578393
正規分布していない変数についてはnon-normalであることを指定して、カテゴリ変数で全ての階級を表示したい場合には、cramVarsで表示することができる。
print(table1, nonnormal = c("Tbili","Dbil","ALP","ALT","AST"), cramVars = "liver")

##                     Stratified by sex
##                       Female                  Male                     p     
##   n                      142                      441                        
##   age (mean (sd))      43.13 (15.90)            45.27 (16.27)           0.173
##   Tbil (mean (sd))      2.32 (4.86)              3.61 (6.56)            0.031
##   Dbil (median [IQR])   0.20 [0.20, 0.40]        0.40 [0.20, 1.50]     <0.001
##   ALP (median [IQR])  194.50 [165.00, 293.00]  215.00 [179.00, 298.00]  0.056
##  ALT (median [IQR])   26.00 [20.00, 46.75]     38.00 [25.00, 65.00]   <0.001
##   AST (median [IQR])   30.00 [21.00, 57.00]     46.00 [28.00, 92.00]   <0.001
##   TP (mean (sd))        6.65 (1.13)              6.43 (1.06)            0.031
##   alb (mean (sd))       3.27 (0.83)              3.10 (0.78)            0.024
##   liver = 1/2 (%)      92/50 (64.8/35.2)      324/117 (73.5/26.5)       0.060
書き出しには、quote=Tとして、excelに貼り付ける。(Rpubs「tableone: 医学研究で必要な"表1"を作成するRパッケージ」(URL: https://rpubs.com/kaz_yos/tableone-demo-j)をご参照ください)
参考ページ
  1. Rpubs「tableone: 医学研究で必要な"表1"を作成するRパッケージ」(URL: https://rpubs.com/kaz_yos/tableone-demo-j
  2. R bloggers 「Table 1 and the Characteristics of Study Population」(URL: http://www.r-bloggers.com/table-1-and-the-characteristics-of-study-population/