tableone: 医学研究で必要な"表1"を作成するRパッケージ

References

tableoneをインストール

CRANに登録されました。普通のパッケージとしてインストール可能です。

install.packages("tableone")

tableoneをロードする

インストール後は普通のパッケージですので通常通りです。

library(tableone)

デモンストレーション

生存分析のsurvivalパッケージにあるpbcデータセットを用いてデモをします。

## survivalを読み込み
library(survival)
## Mayo Clinic Primary Biliary Cirrhosis (PBC) Dataを読み込み。
data(pbc)
## どんな変数かチェック
head(pbc)
  id time status trt   age sex ascites hepato spiders edema bili chol albumin copper alk.phos    ast trig platelet
1  1  400      2   1 58.77   f       1      1       1   1.0 14.5  261    2.60    156     1718 137.95  172      190
2  2 4500      0   1 56.45   f       0      1       1   0.0  1.1  302    4.14     54     7395 113.52   88      221
3  3 1012      2   1 70.07   m       0      0       0   0.5  1.4  176    3.48    210      516  96.10   55      151
4  4 1925      2   1 54.74   f       0      1       1   0.5  1.8  244    2.54     64     6122  60.63   92      183
5  5 1504      1   2 38.11   f       0      1       1   0.0  3.4  279    3.53    143      671 113.15   72      136
6  6 2503      2   2 66.26   f       0      1       0   0.0  0.8  248    3.98     50      944  93.00   63       NA
  protime stage
1    12.2     4
2    10.6     3
3    12.0     4
4    10.3     4
5    10.9     3
6    11.0     3

変数は文字列ベクターとして与えますので作っておきます。

## 数値として入っているカテゴリカル変数をまとめておきます。
factorVars <- c("status","trt","ascites","hepato","spiders","edema","stage")
## 変数のvectorを作っておきます
vars <- c("time","status","age","sex","ascites","hepato",
          "spiders","edema","bili","chol","albumin",
          "copper","alk.phos","ast","trig","platelet",
          "protime","stage")

TableOneオブジェクトを作成して、データを見ます。

## TableOneオブジェクトを作成。strataを落とすと全体の集計になります
tableOne <- CreateTableOne(vars = vars, strata = "trt", data = pbc, factorVars = factorVars)
## オブジェクト名だけだとprintメソッドが呼ばれます。
## p値はoneway.test/t.test (連続変数), chisq.test (カテゴリカル変数)です
tableOne
                      Stratified by trt
                       1                 2                 p      test
  n                    158               154                          
  time (mean (sd))     2015.62 (1094.12) 1996.86 (1155.93)  0.883     
  status (%)                                                0.894     
     0                      83 (52.5)         85 (55.2)               
     1                      10 ( 6.3)          9 ( 5.8)               
     2                      65 (41.1)         60 (39.0)               
  age (mean (sd))        51.42 (11.01)     48.58 (9.96)     0.018     
  sex = f (%)              137 (86.7)        139 (90.3)     0.421     
  ascites = 1 (%)           14 (8.9)          10 (6.5)      0.567     
  hepato = 1 (%)            73 (46.2)         87 (56.5)     0.088     
  spiders = 1 (%)           45 (28.5)         45 (29.2)     0.985     
  edema (%)                                                 0.877     
     0                     132 (83.5)        131 (85.1)               
     0.5                    16 (10.1)         13 ( 8.4)               
     1                      10 ( 6.3)         10 ( 6.5)               
  bili (mean (sd))        2.87 (3.63)       3.65 (5.28)     0.131     
  chol (mean (sd))      365.01 (209.54)   373.88 (252.48)   0.748     
  albumin (mean (sd))     3.52 (0.44)       3.52 (0.40)     0.874     
  copper (mean (sd))     97.64 (90.59)     97.65 (80.49)    0.999     
  alk.phos (mean (sd)) 2021.30 (2183.44) 1943.01 (2101.69)  0.747     
  ast (mean (sd))       120.21 (54.52)    124.97 (58.93)    0.460     
  trig (mean (sd))      124.14 (71.54)    125.25 (58.52)    0.886     
  platelet (mean (sd))  258.75 (100.32)   265.20 (90.73)    0.555     
  protime (mean (sd))    10.65 (0.85)      10.80 (1.14)     0.197     
  stage (%)                                                 0.201     
     1                      12 ( 7.6)          4 ( 2.6)               
     2                      35 (22.2)         32 (20.8)               
     3                      56 (35.4)         64 (41.6)               
     4                      55 (34.8)         54 (35.1)               
## $CatTableにカテゴリカル変数が収納されています
tableOne$CatTable
                 Stratified by trt
                  1           2           p      test
  n               158         154                    
  status (%)                               0.894     
     0             83 (52.5)   85 (55.2)             
     1             10 ( 6.3)    9 ( 5.8)             
     2             65 (41.1)   60 (39.0)             
  sex = f (%)     137 (86.7)  139 (90.3)   0.421     
  ascites = 1 (%)  14 ( 8.9)   10 ( 6.5)   0.567     
  hepato = 1 (%)   73 (46.2)   87 (56.5)   0.088     
  spiders = 1 (%)  45 (28.5)   45 (29.2)   0.985     
  edema (%)                                0.877     
     0            132 (83.5)  131 (85.1)             
     0.5           16 (10.1)   13 ( 8.4)             
     1             10 ( 6.3)   10 ( 6.5)             
  stage (%)                                0.201     
     1             12 ( 7.6)    4 ( 2.6)             
     2             35 (22.2)   32 (20.8)             
     3             56 (35.4)   64 (41.6)             
     4             55 (34.8)   54 (35.1)             
## $ContTableに連続変数が収納されています
tableOne$ContTable
                      Stratified by trt
                       1                 2                 p      test
  n                    158               154                          
  time (mean (sd))     2015.62 (1094.12) 1996.86 (1155.93)  0.883     
  age (mean (sd))        51.42 (11.01)     48.58 (9.96)     0.018     
  bili (mean (sd))        2.87 (3.63)       3.65 (5.28)     0.131     
  chol (mean (sd))      365.01 (209.54)   373.88 (252.48)   0.748     
  albumin (mean (sd))     3.52 (0.44)       3.52 (0.40)     0.874     
  copper (mean (sd))     97.64 (90.59)     97.65 (80.49)    0.999     
  alk.phos (mean (sd)) 2021.30 (2183.44) 1943.01 (2101.69)  0.747     
  ast (mean (sd))       120.21 (54.52)    124.97 (58.93)    0.460     
  trig (mean (sd))      124.14 (71.54)    125.25 (58.52)    0.886     
  platelet (mean (sd))  258.75 (100.32)   265.20 (90.73)    0.555     
  protime (mean (sd))    10.65 (0.85)      10.80 (1.14)     0.197     
## summaryメソッドを使うとカテゴリカル変数のより詳しい集計が見れますn
summary(tableOne$CatTable)
trt: 1
     var   n miss p.miss level freq percent cum.percent
  status 158    0    0.0     0   83    52.5        52.5
                             1   10     6.3        58.9
                             2   65    41.1       100.0

     sex 158    0    0.0     m   21    13.3        13.3
                             f  137    86.7       100.0

 ascites 158    0    0.0     0  144    91.1        91.1
                             1   14     8.9       100.0

  hepato 158    0    0.0     0   85    53.8        53.8
                             1   73    46.2       100.0

 spiders 158    0    0.0     0  113    71.5        71.5
                             1   45    28.5       100.0

   edema 158    0    0.0     0  132    83.5        83.5
                           0.5   16    10.1        93.7
                             1   10     6.3       100.0

   stage 158    0    0.0     1   12     7.6         7.6
                             2   35    22.2        29.7
                             3   56    35.4        65.2
                             4   55    34.8       100.0

--------------------------------------------------------------------------------------- 
trt: 2
     var   n miss p.miss level freq percent cum.percent
  status 154    0    0.0     0   85    55.2        55.2
                             1    9     5.8        61.0
                             2   60    39.0       100.0

     sex 154    0    0.0     m   15     9.7         9.7
                             f  139    90.3       100.0

 ascites 154    0    0.0     0  144    93.5        93.5
                             1   10     6.5       100.0

  hepato 154    0    0.0     0   67    43.5        43.5
                             1   87    56.5       100.0

 spiders 154    0    0.0     0  109    70.8        70.8
                             1   45    29.2       100.0

   edema 154    0    0.0     0  131    85.1        85.1
                           0.5   13     8.4        93.5
                             1   10     6.5       100.0

   stage 154    0    0.0     1    4     2.6         2.6
                             2   32    20.8        23.4
                             3   64    41.6        64.9
                             4   54    35.1       100.0


p-values
        pApprox  pExact
status  0.89351 0.88422
sex     0.42123 0.37743
ascites 0.56729 0.52558
hepato  0.08821 0.07138
spiders 0.98466 0.90114
edema   0.87682 0.89370
stage   0.20130 0.20456
## 連続変数でも同様です
summary(tableOne$ContTable)
trt: 1
           n miss p.miss   mean      sd median    p25    p75   min     max   skew  kurt
time     158    0   0.00 2015.6 1094.12 1895.0 1231.0 2632.5  41.0  4556.0  0.412 -0.44
age      158    0   0.00   51.4   11.01   51.9   43.0   58.9  26.3    78.4  0.056 -0.53
bili     158    0   0.00    2.9    3.63    1.4    0.8    3.2   0.3    20.0  2.675  7.61
chol     158   18  11.39  365.0  209.54  315.5  247.8  417.0 127.0  1712.0  3.831 20.21
albumin  158    0   0.00    3.5    0.44    3.6    3.2    3.8   2.1     4.6 -0.395  0.30
copper   158    1   0.63   97.6   90.59   73.0   40.0  121.0   9.0   588.0  2.503  8.21
alk.phos 158    0   0.00 2021.3 2183.44 1214.5  840.8 2028.0 369.0 11552.0  2.707  7.36
ast      158    0   0.00  120.2   54.52  111.6   76.7  151.5  26.4   338.0  1.095  1.60
trig     158   19  12.03  124.1   71.54  106.0   84.5  146.0  33.0   598.0  2.947 14.29
platelet 158    2   1.27  258.8  100.32  255.0  189.5  322.0  62.0   563.0  0.498  0.25
protime  158    0   0.00   10.7    0.85   10.6   10.0   11.0   9.0    14.1  1.103  1.62
--------------------------------------------------------------------------------------- 
trt: 2
           n miss p.miss   mean     sd median     p25    p75   min     max  skew  kurt
time     154    0   0.00 1996.9 1155.9 1811.0 1153.00 2771.2  51.0  4523.0  0.35 -0.72
age      154    0   0.00   48.6   10.0   48.1   41.43   55.8  30.6    74.5  0.24 -0.53
bili     154    0   0.00    3.6    5.3    1.3    0.72    3.6   0.3    28.0  2.67  7.27
chol     154   10   6.49  373.9  252.5  303.5  254.25  377.0 120.0  1775.0  3.12 11.14
albumin  154    0   0.00    3.5    0.4    3.5    3.34    3.8   2.0     4.4 -0.85  1.96
copper   154    1   0.65   97.7   80.5   73.0   43.00  139.0   4.0   558.0  2.01  6.65
alk.phos 154    0   0.00 1943.0 2101.7 1283.0  922.50 1949.8 289.0 13862.4  3.35 12.81
ast      154    0   0.00  125.0   58.9  117.4   83.78  151.9  28.4   457.2  1.73  6.31
trig     154   11   7.14  125.3   58.5  113.0   84.50  155.0  44.0   432.0  1.72  5.51
platelet 154    2   1.30  265.2   90.7  259.5  206.75  322.5  71.0   487.0  0.23 -0.35
protime  154    0   0.00   10.8    1.1   10.6   10.00   11.4   9.2    17.1  1.87  6.39

p-values
         pNormal pNonNormal
time     0.88305    0.82662
age      0.01767    0.01962
bili     0.13094    0.84168
chol     0.74799    0.54434
albumin  0.87388    0.95045
copper   0.99916    0.71745
alk.phos 0.74726    0.81198
ast      0.45970    0.45892
trig     0.88604    0.36980
platelet 0.55451    0.45483
protime  0.19714    0.58802

フォーマットと検定の選択

bili, chol, copper, alk.phos, trigは、生化学検査にありがちですが、右にはずれ値がおおいようです。正規分布ではないものとして扱います。median [IQR]で表示して、ノンパラメトリックのp値を出します。statusとstageはセルの数が少ないところが有るので(ちょっと適当ですが)exact testのp値を表示するようにします。性別は一行に両レベル表示したいのでcramVarsに指定します。

print(tableOne, nonnormal = c("bili","chol","copper","alk.phos","trig"),
      exact = c("status","stage"), cramVars = "sex")
                         Stratified by trt
                          1                         2                         p      test   
  n                       158                       154                                     
  time (mean (sd))        2015.62 (1094.12)         1996.86 (1155.93)          0.883        
  status (%)                                                                   0.884 exact  
     0                         83 (52.5)                 85 (55.2)                          
     1                         10 ( 6.3)                  9 ( 5.8)                          
     2                         65 (41.1)                 60 (39.0)                          
  age (mean (sd))           51.42 (11.01)             48.58 (9.96)             0.018        
  sex = m/f (%)            21/137 (13.3/86.7)        15/139 (9.7/90.3)         0.421        
  ascites = 1 (%)              14 (8.9)                  10 (6.5)              0.567        
  hepato = 1 (%)               73 (46.2)                 87 (56.5)             0.088        
  spiders = 1 (%)              45 (28.5)                 45 (29.2)             0.985        
  edema (%)                                                                    0.877        
     0                        132 (83.5)                131 (85.1)                          
     0.5                       16 (10.1)                 13 ( 8.4)                          
     1                         10 ( 6.3)                 10 ( 6.5)                          
  bili (median [IQR])        1.40 [0.80, 3.20]         1.30 [0.72, 3.60]       0.842 nonnorm
  chol (median [IQR])      315.50 [247.75, 417.00]   303.50 [254.25, 377.00]   0.544 nonnorm
  albumin (mean (sd))        3.52 (0.44)               3.52 (0.40)             0.874        
  copper (median [IQR])     73.00 [40.00, 121.00]     73.00 [43.00, 139.00]    0.717 nonnorm
  alk.phos (median [IQR]) 1214.50 [840.75, 2028.00] 1283.00 [922.50, 1949.75]  0.812 nonnorm
  ast (mean (sd))          120.21 (54.52)            124.97 (58.93)            0.460        
  trig (median [IQR])      106.00 [84.50, 146.00]    113.00 [84.50, 155.00]    0.370 nonnorm
  platelet (mean (sd))     258.75 (100.32)           265.20 (90.73)            0.555        
  protime (mean (sd))       10.65 (0.85)              10.80 (1.14)             0.197        
  stage (%)                                                                    0.205 exact  
     1                         12 ( 7.6)                  4 ( 2.6)                          
     2                         35 (22.2)                 32 (20.8)                          
     3                         56 (35.4)                 64 (41.6)                          
     4                         55 (34.8)                 54 (35.1)                          

コピペ対応

私の投稿するようなジャーナルは当然のごとくLaTeXとか受けていないので、Wordから逃れられません。quoteを出して、Excelにコピペ(ウィザードで調節必要)、Wordに張り付けで行くと、ほぼそのまま表1が作れます。めでたしめでたし。

print(tableOne, nonnormal = c("bili","chol","copper","alk.phos","trig"),
      exact = c("status","stage"), cramVars = "sex", quote = TRUE)
                           "Stratified by trt"
 ""                         "1"                         "2"                         "p"      "test"   
  "n"                       "158"                       "154"                       ""       ""       
  "time (mean (sd))"        "2015.62 (1094.12)"         "1996.86 (1155.93)"         " 0.883" ""       
  "status (%)"              "     "                     "     "                     " 0.884" "exact"  
  "   0"                    "     83 (52.5) "           "     85 (55.2) "           ""       ""       
  "   1"                    "     10 ( 6.3) "           "      9 ( 5.8) "           ""       ""       
  "   2"                    "     65 (41.1) "           "     60 (39.0) "           ""       ""       
  "age (mean (sd))"         "  51.42 (11.01)"           "  48.58 (9.96)"            " 0.018" ""       
  "sex = m/f (%)"           " 21/137 (13.3/86.7) "      " 15/139 (9.7/90.3) "       " 0.421" ""       
  "ascites = 1 (%)"         "     14 (8.9) "            "     10 (6.5) "            " 0.567" ""       
  "hepato = 1 (%)"          "     73 (46.2) "           "     87 (56.5) "           " 0.088" ""       
  "spiders = 1 (%)"         "     45 (28.5) "           "     45 (29.2) "           " 0.985" ""       
  "edema (%)"               "    "                      "    "                      " 0.877" ""       
  "   0"                    "    132 (83.5) "           "    131 (85.1) "           ""       ""       
  "   0.5"                  "     16 (10.1) "           "     13 ( 8.4) "           ""       ""       
  "   1"                    "     10 ( 6.3) "           "     10 ( 6.5) "           ""       ""       
  "bili (median [IQR])"     "   1.40 [0.80, 3.20]"      "   1.30 [0.72, 3.60]"      " 0.842" "nonnorm"
  "chol (median [IQR])"     " 315.50 [247.75, 417.00]"  " 303.50 [254.25, 377.00]"  " 0.544" "nonnorm"
  "albumin (mean (sd))"     "   3.52 (0.44)"            "   3.52 (0.40)"            " 0.874" ""       
  "copper (median [IQR])"   "  73.00 [40.00, 121.00]"   "  73.00 [43.00, 139.00]"   " 0.717" "nonnorm"
  "alk.phos (median [IQR])" "1214.50 [840.75, 2028.00]" "1283.00 [922.50, 1949.75]" " 0.812" "nonnorm"
  "ast (mean (sd))"         " 120.21 (54.52)"           " 124.97 (58.93)"           " 0.460" ""       
  "trig (median [IQR])"     " 106.00 [84.50, 146.00]"   " 113.00 [84.50, 155.00]"   " 0.370" "nonnorm"
  "platelet (mean (sd))"    " 258.75 (100.32)"          " 265.20 (90.73)"           " 0.555" ""       
  "protime (mean (sd))"     "  10.65 (0.85)"            "  10.80 (1.14)"            " 0.197" ""       
  "stage (%)"               "     "                     "     "                     " 0.205" "exact"  
  "   1"                    "     12 ( 7.6) "           "      4 ( 2.6) "           ""       ""       
  "   2"                    "     35 (22.2) "           "     32 (20.8) "           ""       ""       
  "   3"                    "     56 (35.4) "           "     64 (41.6) "           ""       ""       
  "   4"                    "     55 (34.8) "           "     54 (35.1) "           ""       ""