開発中のtableoneパッケージの最新版を試す。

ホームページ

コード

## どうしてもRで論文に直にコピペできるTable 1が書きたい、、
## ということで開発中のパッケージです。
## 主にDeducer::frequency()とdescriptive.table()をベースにしています。

## こちらの関数を使ってgithubにある最新版をテスト可能です。
## R内からのダウンロードの自動化のためcURLを必要とします。Macは入っています。
## Winは下記などからダウンロードしてください。
## http://curl.haxx.se/dlwiz/?type=bin&os=Win64&flav=-&ver=*&cpu=x86_64
LoadTableOneFromGithub <- function() {
    ## Define variables
    urlBase <- "https://raw.github.com/kaz-yos/tableone/master/R/"
    fileNames <- c("CreateCatTable.R","CreateContTable.R","print.CatTable.R","print.ContTable.R","summary.CatTable.R","summary.ContTable.R")

    ## Download and load all files
    for (fileName in fileNames) {
        download.file(url = paste0(urlBase, fileName), destfile = fileName, method = "curl")
        source(fileName)
    }    
}
## ダウンロードと読み込み実行
LoadTableOneFromGithub()

## 使い方例
## survivalのpbcデータセットを利用します。
library(survival)
data(pbc)


### カテゴリカル変数

## edemaのなし、ちょっと、たくさんでわけてカテゴリ変数をまとめます。
## strataを指定しなければ全体がでます。
CatTable <- CreateCatTable(vars = c("status","sex","ascites","hepato","spiders"),
                           strata = "edema", data = pbc)

## そのままタイプするとカウント (%)の書式で表示します。
## print.CatTable()という関数が自動的に呼ばれて表示を担当します。
## 二値変数は二番目のレベルを表示します。
## 三値以上変数はすべてのレベルを表示します。
## P valueはchisq.test()を使っています。
CatTable
##                  Stratified by edema
##                   0           0.5        1          p     
##   n               354         44         20               
##   status (%)                                        <0.001
##      0            216 (61.0)  15 (34.1)   1 ( 5.0)        
##      1             22 ( 6.2)   3 ( 6.8)   0 ( 0.0)        
##      2            116 (32.8)  26 (59.1)  19 (95.0)        
##   sex = f (%)     318 (89.8)  39 (88.6)  17 (85.0)   0.777
##   ascites = 1 (%)   6 ( 2.3)   4 (13.8)  14 (70.0)  <0.001
##   hepato = 1 (%)  125 (47.5)  20 (69.0)  15 (75.0)   0.008
##   spiders = 1 (%)  63 (24.0)  13 (44.8)  14 (70.0)  <0.001

## 詳細な結果が見たい時はsummary methodを使ってください。
## summary.CatTable()という関数が自動的に呼ばれて表示を行います。
summary(CatTable)
## edema: 0
##      var   n miss level freq percent cum.percent
##   status 354    0     0  216    61.0        61.0
##                       1   22     6.2        67.2
##                       2  116    32.8       100.0
##                                                 
##      sex 354    0     m   36    10.2        10.2
##                       f  318    89.8       100.0
##                                                 
##  ascites 354   91     0  257    97.7        97.7
##                       1    6     2.3       100.0
##                                                 
##   hepato 354   91     0  138    52.5        52.5
##                       1  125    47.5       100.0
##                                                 
##  spiders 354   91     0  200    76.0        76.0
##                       1   63    24.0       100.0
##                                                 
## --------------------------------------------------------------------------------------- 
## edema: 0.5
##      var  n miss level freq percent cum.percent
##   status 44    0     0   15    34.1        34.1
##                      1    3     6.8        40.9
##                      2   26    59.1       100.0
##                                                
##      sex 44    0     m    5    11.4        11.4
##                      f   39    88.6       100.0
##                                                
##  ascites 44   15     0   25    86.2        86.2
##                      1    4    13.8       100.0
##                                                
##   hepato 44   15     0    9    31.0        31.0
##                      1   20    69.0       100.0
##                                                
##  spiders 44   15     0   16    55.2        55.2
##                      1   13    44.8       100.0
##                                                
## --------------------------------------------------------------------------------------- 
## edema: 1
##      var  n miss level freq percent cum.percent
##   status 20    0     0    1     5.0         5.0
##                      1    0     0.0         5.0
##                      2   19    95.0       100.0
##                                                
##      sex 20    0     m    3    15.0        15.0
##                      f   17    85.0       100.0
##                                                
##  ascites 20    0     0    6    30.0        30.0
##                      1   14    70.0       100.0
##                                                
##   hepato 20    0     0    5    25.0        25.0
##                      1   15    75.0       100.0
##                                                
##  spiders 20    0     0    6    30.0        30.0
##                      1   14    70.0       100.0
##                                                
## 
## p-values
##           pApprox    pExact
## status  3.438e-08 1.955e-08
## sex     7.766e-01 6.515e-01
## ascites 3.716e-27 5.135e-15
## hepato  8.163e-03 7.653e-03
## spiders 9.268e-06 1.563e-05

## 変数によってFisher testしたいという場合はexactに変数を指定します。
print(CatTable, exact = c("sex"))
##                  Stratified by edema
##                   0           0.5        1          p      test 
##   n               354         44         20                     
##   status (%)                                        <0.001      
##      0            216 (61.0)  15 (34.1)   1 ( 5.0)              
##      1             22 ( 6.2)   3 ( 6.8)   0 ( 0.0)              
##      2            116 (32.8)  26 (59.1)  19 (95.0)              
##   sex = f (%)     318 (89.8)  39 (88.6)  17 (85.0)   0.651 exact
##   ascites = 1 (%)   6 ( 2.3)   4 (13.8)  14 (70.0)  <0.001      
##   hepato = 1 (%)  125 (47.5)  20 (69.0)  15 (75.0)   0.008      
##   spiders = 1 (%)  63 (24.0)  13 (44.8)  14 (70.0)  <0.001
## 全部Fisherにする。
print(CatTable, exact = TRUE)
##                  Stratified by edema
##                   0           0.5        1          p      test 
##   n               354         44         20                     
##   status (%)                                        <0.001 exact
##      0            216 (61.0)  15 (34.1)   1 ( 5.0)              
##      1             22 ( 6.2)   3 ( 6.8)   0 ( 0.0)              
##      2            116 (32.8)  26 (59.1)  19 (95.0)              
##   sex = f (%)     318 (89.8)  39 (88.6)  17 (85.0)   0.651 exact
##   ascites = 1 (%)   6 ( 2.3)   4 (13.8)  14 (70.0)  <0.001 exact
##   hepato = 1 (%)  125 (47.5)  20 (69.0)  15 (75.0)   0.008 exact
##   spiders = 1 (%)  63 (24.0)  13 (44.8)  14 (70.0)  <0.001 exact

## frequencyのみ表示
print(CatTable, exact = TRUE, format = "f")
##              Stratified by edema
##               0   0.5 1  p      test 
##   n           354 44  20             
##   status                 <0.001 exact
##      0        216 15   1             
##      1         22  3   0             
##      2        116 26  19             
##   sex = f     318 39  17  0.651 exact
##   ascites = 1   6  4  14 <0.001 exact
##   hepato = 1  125 20  15  0.008 exact
##   spiders = 1  63 13  14 <0.001 exact
## percentのみ表示
print(CatTable, exact = TRUE, format = "p")
##                  Stratified by edema
##                   0    0.5  1    p      test 
##   n               354  44   20               
##   status (%)                     <0.001 exact
##      0            61.0 34.1  5.0             
##      1             6.2  6.8  0.0             
##      2            32.8 59.1 95.0             
##   sex = f (%)     89.8 88.6 85.0  0.651 exact
##   ascites = 1 (%)  2.3 13.8 70.0 <0.001 exact
##   hepato = 1 (%)  47.5 69.0 75.0  0.008 exact
##   spiders = 1 (%) 24.0 44.8 70.0 <0.001 exact

## Excel/Wordなどにコピペしたい時はダブルクオートを出します。
print(CatTable, quote = TRUE)
##                    "Stratified by edema"
## ""                  "0"           "0.5"        "1"          "p"     
##   "n"               "354"         "44"         "20"         ""      
##   "status (%)"      ""            ""           ""           "<0.001"
##   "   0"            "216 (61.0) " "15 (34.1) " " 1 ( 5.0) " ""      
##   "   1"            " 22 ( 6.2) " " 3 ( 6.8) " " 0 ( 0.0) " ""      
##   "   2"            "116 (32.8) " "26 (59.1) " "19 (95.0) " ""      
##   "sex = f (%)"     "318 (89.8) " "39 (88.6) " "17 (85.0) " " 0.777"
##   "ascites = 1 (%)" "  6 ( 2.3) " " 4 (13.8) " "14 (70.0) " "<0.001"
##   "hepato = 1 (%)"  "125 (47.5) " "20 (69.0) " "15 (75.0) " " 0.008"
##   "spiders = 1 (%)" " 63 (24.0) " "13 (44.8) " "14 (70.0) " "<0.001"


### 連続変数

## edemaのなし、ちょっと、たくさんでわけて連続変数をまとめます。
ContTable <- CreateContTable(vars = c("age","bili","chol","albumin","copper","alk.phos","ast"),
                             strata = "edema", data = pbc)

## そのままタイプすると平均 (SD)の書式で表示します。
## print.ContTable()という関数が自動的に呼ばれて表示を担当します。
## P valueはoneway.test()を使っています。
ContTable
##                       Stratified by edema
##                        0                 0.5               1                 p     
##   n                    354               44                20                      
##   age (mean (sd))        49.86 (10.05)     55.12 (11.38)     56.80 (11.28)    0.002
##   bili (mean (sd))        2.69 (3.58)       4.73 (6.34)       9.26 (7.00)    <0.001
##   chol (mean (sd))      379.42 (241.83)   332.27 (135.08)   285.94 (186.20)   0.087
##   albumin (mean (sd))     3.55 (0.40)       3.37 (0.37)       2.89 (0.43)    <0.001
##   copper (mean (sd))     89.68 (76.00)    113.43 (78.73)    180.00 (150.58)   0.020
##   alk.phos (mean (sd)) 1957.36 (2152.96) 2145.05 (2146.63) 2079.86 (2054.50)  0.886
##   ast (mean (sd))       119.79 (55.16)    125.80 (52.41)    154.25 (73.73)    0.131

## 詳細な結果が見たい時はsummary methodを使ってください。
## summary.ContTable()という関数が自動的に呼ばれて表示を行います。
summary(ContTable)
## edema: 0
##            n miss   mean     sd median   p25    p75   min     max  skew  kurt
## age      354    0   49.9   10.1   50.2  42.0   56.7  26.3    78.4  0.03 -0.67
## bili     354    0    2.7    3.6    1.3   0.7    3.2   0.3    25.5  3.11 11.81
## chol     354  113  379.4  241.8  316.0 256.0  404.0 120.0  1775.0  3.39 13.62
## albumin  354    0    3.5    0.4    3.6   3.3    3.8   2.0     4.6 -0.42  0.73
## copper   354   92   89.7   76.0   68.5  40.0  108.0   4.0   464.0  2.10  5.60
## alk.phos 354   91 1957.4 2153.0 1243.0 857.5 1939.5 289.0 13862.4  3.09 10.22
## ast      354   91  119.8   55.2  113.2  79.0  146.5  26.4   457.2  1.56  5.48
## --------------------------------------------------------------------------------------- 
## edema: 0.5
##           n miss   mean      sd median    p25    p75   min     max   skew   kurt
## age      44    0   55.1   11.38   54.0   48.2   63.5  33.9    75.0  0.014 -0.833
## bili     44    0    4.7    6.34    2.0    1.1    5.3   0.4    28.0  2.193  4.512
## chol     44   18  332.3  135.08  292.0  244.0  410.5 175.0   674.0  1.251  1.078
## albumin  44    0    3.4    0.37    3.4    3.1    3.6   2.5     4.1 -0.319 -0.065
## copper   44   16  113.4   78.73   90.5   47.2  182.5  14.0   290.0  0.550 -0.946
## alk.phos 44   15 2145.0 2146.63 1588.0 1020.0 2132.0 516.0 11320.2  3.185 12.051
## ast      44   15  125.8   52.41  105.8   84.0  173.6  57.4   246.4  0.617 -0.763
## --------------------------------------------------------------------------------------- 
## edema: 1
##           n miss   mean      sd median   p25    p75   min    max   skew  kurt
## age      20    0   56.8   11.28   56.7  46.6   66.4  37.6   76.7 -0.023 -0.98
## bili     20    0    9.3    7.00    7.8   2.5   15.2   0.8   22.5  0.306 -1.33
## chol     20    3  285.9  186.20  222.0 188.0  299.0 151.0  932.0  2.910  9.69
## albumin  20    0    2.9    0.43    3.0   2.6    3.2   2.1    3.7 -0.059 -0.68
## copper   20    0  180.0  150.58  145.0  89.5  211.8  18.0  588.0  1.861  3.50
## alk.phos 20    0 2079.9 2054.50 1084.0 808.8 1868.5 559.0 6931.2  1.557  0.88
## ast      20    0  154.2   73.73  136.0 116.0  182.7  46.5  338.0  0.945  0.74
## 
## p-values
##               pNormal     pNonNormal
## age      0.0019797854 0.001317504722
## bili     0.0002487313 0.000001050942
## chol     0.0872231576 0.006179995938
## albumin  0.0000001024 0.000000006417
## copper   0.0197298403 0.001268127880
## alk.phos 0.8861915095 0.488200456720
## ast      0.1314430714 0.093677029501

## 変数によって正規分布していないという場合はnonnormalに変数を指定します。
## median [IQR]の表示になり、kruskal.test()のp-valueにかわリます。
print(ContTable, nonnormal = c("bili","chol"))
##                       Stratified by edema
##                        0                        0.5                      1                        p     
##   n                    354                      44                       20                             
##   age (mean (sd))        49.86 (10.05)            55.12 (11.38)            56.80 (11.28)           0.002
##   bili (median [IQR])     1.30 [0.70, 3.20]        2.00 [1.08, 5.35]        7.80 [2.48, 15.18]    <0.001
##   chol (median [IQR])   316.00 [256.00, 404.00]  292.00 [244.00, 410.50]  222.00 [188.00, 299.00]  0.006
##   albumin (mean (sd))     3.55 (0.40)              3.37 (0.37)              2.89 (0.43)           <0.001
##   copper (mean (sd))     89.68 (76.00)           113.43 (78.73)           180.00 (150.58)          0.020
##   alk.phos (mean (sd)) 1957.36 (2152.96)        2145.05 (2146.63)        2079.86 (2054.50)         0.886
##   ast (mean (sd))       119.79 (55.16)           125.80 (52.41)           154.25 (73.73)           0.131
## 全部正規分布でないときにする。
print(ContTable, nonnormal = TRUE)
##                          Stratified by edema
##                           0                         0.5                        1                         p     
##   n                       354                       44                         20                              
##   age (median [IQR])        50.19 [42.00, 56.68]      54.01 [48.20, 63.50]       56.71 [46.57, 66.39]     0.001
##   bili (median [IQR])        1.30 [0.70, 3.20]         2.00 [1.08, 5.35]          7.80 [2.48, 15.18]     <0.001
##   chol (median [IQR])      316.00 [256.00, 404.00]   292.00 [244.00, 410.50]    222.00 [188.00, 299.00]   0.006
##   albumin (median [IQR])     3.57 [3.34, 3.80]         3.39 [3.15, 3.56]          2.96 [2.59, 3.16]      <0.001
##   copper (median [IQR])     68.50 [40.00, 108.00]     90.50 [47.25, 182.50]     145.00 [89.50, 211.75]    0.001
##   alk.phos (median [IQR]) 1243.00 [857.50, 1939.50] 1588.00 [1020.00, 2132.00] 1084.00 [808.75, 1868.50]  0.488
##   ast (median [IQR])       113.15 [79.05, 146.47]    105.78 [84.00, 173.60]     135.97 [116.01, 182.72]   0.094

## 変数の横の説明はexplain = FALSEで消せます。quoteは同様にコピペ用です。
print(ContTable, nonnormal = c("bili","chol"), quote = TRUE, explain = FALSE)
##             "Stratified by edema"
## ""           "0"                        "0.5"                      "1"                        "p"     
##   "n"        "354"                      "44"                       "20"                       ""      
##   "age"      "  49.86 (10.05)"          "  55.12 (11.38)"          "  56.80 (11.28)"          " 0.002"
##   "bili"     "   1.30 [0.70, 3.20]"     "   2.00 [1.08, 5.35]"     "   7.80 [2.48, 15.18]"    "<0.001"
##   "chol"     " 316.00 [256.00, 404.00]" " 292.00 [244.00, 410.50]" " 222.00 [188.00, 299.00]" " 0.006"
##   "albumin"  "   3.55 (0.40)"           "   3.37 (0.37)"           "   2.89 (0.43)"           "<0.001"
##   "copper"   "  89.68 (76.00)"          " 113.43 (78.73)"          " 180.00 (150.58)"         " 0.020"
##   "alk.phos" "1957.36 (2152.96)"        "2145.05 (2146.63)"        "2079.86 (2054.50)"        " 0.886"
##   "ast"      " 119.79 (55.16)"          " 125.80 (52.41)"          " 154.25 (73.73)"          " 0.131"