開発中の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"