tableone 패키지 소개

효율적으로 의학 연구 논문에 들어갈 table1을 만들 수 있는 tableone 패키지에 대해 소개합니다.
R
Rpackage
Author
Published

February 7, 2022

시작하기 전에

본 자료는 데이터셋의 변수를 하나의 테이블로 요약하는 방법에 대해 알아볼 것이다. tableone 패키지를 이용하면 효율적으로 논문에 들어갈 table1을 만들 수 있다.

What is tableone?

tableone은 의학 연구 논문에서 볼 수 있는 table1을 구성하는 데 사용되는 패키지로, 한 테이블 내에 혼합된 범주형 변수와 연속형 변수를 모두 요약할 수 있고 사용법이 매우 간단하다는 장점이 있다.

Creating a tableone

CreateTableOne() 함수를 사용하여 테이블을 만들 수 있다. fread를 통해 데이터를 불러와 간단한 테이블을 만들어보자. 데이터는 09-15년 공단 건강검진 데이터에서 실습용으로 32 명을 뽑은 자료이며, 자세한 내용은 “data/2교시 테이블 세부 레이아웃 소개(최신자료).pdf” 를 참고하자.

## Setup

# install.packages("data.table")
# install.packages("curl")
# install.packages("tableone")

library(data.table)
library(curl)
Using libcurl 8.6.0 with LibreSSL/3.3.6
# Load file
url <- "https://raw.githubusercontent.com/jinseob2kim/lecture-snuhlab/master/data/example_g1e.csv"
dt <- fread(url,header=T)

CreateTableOne() 함수를 사용해 간단한 테이블을 만들어 보자.

# create table1
CreateTableOne(data=dt)
Overall
n 1644
EXMD_BZ_YYYY (mean (SD)) 2012.08 (1.99)
RN_INDI (mean (SD)) 490782.25 (290056.68)
HME_YYYYMM (mean (SD)) 201216.18 (199.11)
Q_PHX_DX_STK (mean (SD)) 0.01 (0.11)
Q_PHX_DX_HTDZ (mean (SD)) 0.02 (0.15)
Q_PHX_DX_HTN (mean (SD)) 0.25 (0.43)
Q_PHX_DX_DM (mean (SD)) 0.07 (0.25)
Q_PHX_DX_DLD (mean (SD)) 0.04 (0.20)
Q_PHX_DX_PTB (mean (SD)) 0.03 (0.16)
Q_HBV_AG (mean (SD)) 2.24 (0.52)
Q_SMK_YN (mean (SD)) 1.63 (0.84)
Q_DRK_FRQ_V09N (mean (SD)) 1.03 (1.39)
HGHT (mean (SD)) 164.55 (9.19)
WGHT (mean (SD)) 65.10 (12.53)
WSTC (mean (SD)) 80.69 (9.55)
BMI (mean (SD)) 23.92 (3.38)
VA_LT (mean (SD)) 0.98 (0.56)
VA_RT (mean (SD)) 0.98 (0.56)
BP_SYS (mean (SD)) 122.26 (14.63)
BP_DIA (mean (SD)) 76.60 (10.06)
URN_PROT (mean (SD)) 1.08 (0.40)
HGB (mean (SD)) 14.11 (1.69)
FBS (mean (SD)) 97.23 (20.13)
TOT_CHOL (mean (SD)) 194.93 (36.57)
TG (mean (SD)) 134.90 (104.75)
HDL (mean (SD)) 55.90 (19.47)
LDL (mean (SD)) 118.69 (201.99)
CRTN (mean (SD)) 0.99 (1.02)
SGOT (mean (SD)) 25.60 (16.18)
SGPT (mean (SD)) 25.98 (27.18)
GGT (mean (SD)) 36.34 (36.43)
GFR (mean (SD)) 89.74 (21.71)
  • 범주형 변수는 개수(백분율)로 요약된다.
  • 연속형 변수는 normal인 경우 mean(sd)로 나타나고, nonnormal인 경우 median(IQR)로 요약된다.

Argument customize

CreateTableOne() 함수에는 다양한 옵션이 존재한다. 세부적인 옵션 설정을 통해 원하는 table1을 만들 수 있다. 주요 옵션은 다음과 같다.

  • CreateTableOne
    • vars : 테이블에 들어갈 변수들
    • factorVars : 범주형 변수들
    • data : 데이터
    • strata : 그룹 변수 지정
    • includeNA : 범주형 변수에서 NA를 하나의 범주로 포함할지 여부

옵션에 대한 자세한 설명은 예시를 통해 다루도록 하겠다.

Categorical variable conversion

factorVars 인자를 사용하여 범주형 변수를 지정할 수 있다. 이때 vars 인자를 통해 전체 데이터 셋 중 테이블에 들어갈 변수를 설정할 수 있고, 지정하지 않을 시 데이터 셋의 모든 변수가 포함된다.

# Variables
myVars <- c("HGHT", "WGHT", "BMI", "HDL", "LDL", "TG", "SGPT", 
            "Q_PHX_DX_STK", "Q_PHX_DX_HTDZ", "Q_HBV_AG", "Q_SMK_YN")
# Categorical variables
catVars <- c("Q_PHX_DX_STK", "Q_PHX_DX_HTDZ", "Q_HBV_AG", "Q_SMK_YN")
t1 <- CreateTableOne(vars = myVars, factorVars = catVars, data = dt)
t1
Overall
n 1644
HGHT (mean (SD)) 164.55 (9.19)
WGHT (mean (SD)) 65.10 (12.53)
BMI (mean (SD)) 23.92 (3.38)
HDL (mean (SD)) 55.90 (19.47)
LDL (mean (SD)) 118.69 (201.99)
TG (mean (SD)) 134.90 (104.75)
SGPT (mean (SD)) 25.98 (27.18)
Q_PHX_DX_STK = 1 (%) 12 ( 1.1)
Q_PHX_DX_HTDZ = 1 (%) 26 ( 2.4)
Q_HBV_AG (%)
1 77 ( 4.7)
2 1102 (67.1)
3 463 (28.2)
Q_SMK_YN (%)
1 995 (60.6)
2 256 (15.6)
3 391 (23.8)
  • 범주형 변수로 설정한 컬럼의 요약값이 mean(sd)에서 n(percentage)로 바뀐 것을 볼 수 있다.

  • 두 개의 범주가 있는 범주형 변수의 경우, 두 번째 범주의 요약값만 출력된다. 예를 들어 0과 1의 범주가 있을 때, 범주1의 개수와 백분율이 출력된다. 이는 옵션 설정을 통해 전체 범주의 요약값을 출력하도록 변경할 수 있다.

  • 3개 이상의 범주가 있을 때에는 모든 범주의 값이 요약되며, 백분율은 누락된 값을 제외한 후 계산된다.

Multiple group summary

strata 인자를 설정하여 그룹별 연산을 할 수 있다. strata는 dplyr 패키지의 group_by() 함수와 유사하며, 그룹 연산을 할 변수를 지정하여 사용할 수 있다.

t2 <- CreateTableOne(data = dt,
                     vars = myVars,
                     strata = "Q_SMK_YN",
                     factorVars = catVars,
                     includeNA = F)
t2
1 2 3 p test
n 995 256 391
HGHT (mean (SD)) 160.67 (8.34) 168.83 (6.45) 171.61 (7.09) <0.001
WGHT (mean (SD)) 61.17 (11.08) 70.09 (10.72) 71.76 (13.07) <0.001
BMI (mean (SD)) 23.63 (3.39) 24.52 (2.93) 24.27 (3.54) <0.001
HDL (mean (SD)) 57.83 (14.08) 53.91 (36.73) 52.37 (13.54) <0.001
LDL (mean (SD)) 112.26 (32.81) 147.52 (505.27) 116.34 (56.89) 0.046
TG (mean (SD)) 114.05 (76.97) 162.89 (126.51) 169.24 (133.28) <0.001
SGPT (mean (SD)) 23.33 (28.42) 28.61 (20.62) 31.00 (26.96) <0.001
Q_PHX_DX_STK = 1 (%) 11 ( 1.8) 1 ( 0.5) 0 ( 0.0) 0.051
Q_PHX_DX_HTDZ = 1 (%) 18 ( 2.9) 5 ( 2.6) 3 ( 1.1) 0.287
Q_HBV_AG (%) 0.193
1 40 ( 4.0) 19 ( 7.5) 17 ( 4.3)
2 679 ( 68.3) 164 ( 64.3) 259 ( 66.2)
3 275 ( 27.7) 72 ( 28.2) 115 ( 29.4)
Q_SMK_YN (%) <0.001
1 995 (100.0) 0 ( 0.0) 0 ( 0.0)
2 0 ( 0.0) 256 (100.0) 0 ( 0.0)
3 0 ( 0.0) 0 ( 0.0) 391 (100.0)
  • 연속형 변수의 경우, 기본적으로 one-way ANOVA test가 적용되며 nonnormal일 경우 옵션 설정을 통해 Kruskal–Wallis one-way ANOVA test를 적용할 수 있다.

  • 범주형 변수의 경우, 기본적으로 chisq-test가 적용되며 print 함수의 exact 옵션 설정을 통해 fisher-test를 적용할 수 있다.

Detailed information : summary()

summary 함수를 쓰면 누락값을 포함한 table1의 자세한 정보를 알 수 있다. 연속형 변수의 값들이 먼저 출력되며 그 다음으로 범주형 변수의 요약값이 출력된다.


     ### Summary of continuous variables ###

strata: Overall
        n miss p.miss mean  sd median p25 p75 min  max skew   kurt
HGHT 1644    0      0  165   9    165 158 171 134  188 -0.2   -0.3
WGHT 1644    0      0   65  13     64  56  73  31  118  0.7    1.0
BMI  1644    0      0   24   3     24  22  26  12   37  0.4    0.4
HDL  1644    0      0   56  19     54  46  64  23  593 13.1  352.2
LDL  1644   16      1  119 202    112  90 134  19 8100 38.0 1501.0
TG   1644    0      0  135 105    106  72 163  13 1210  3.4   20.2
SGPT 1644    0      0   26  27     20  15  30   3  779 15.0  374.4

=======================================================================================

     ### Summary of categorical variables ### 

strata: Overall
           var    n miss p.miss level freq percent cum.percent
  Q_PHX_DX_STK 1644  573   34.9     0 1059    98.9        98.9
                                    1   12     1.1       100.0
                                                              
 Q_PHX_DX_HTDZ 1644  566   34.4     0 1052    97.6        97.6
                                    1   26     2.4       100.0
                                                              
      Q_HBV_AG 1644    2    0.1     1   77     4.7         4.7
                                    2 1102    67.1        71.8
                                    3  463    28.2       100.0
                                                              
      Q_SMK_YN 1644    2    0.1     1  995    60.6        60.6
                                    2  256    15.6        76.2
                                    3  391    23.8       100.0
                                                              

Show categorical or continuous variable only

앞에서 만든 table1에서 연속형 변수와 범주형 변수를 구분하여 출력할 수 있다. “$”를 사용하여 연속형 변수는 ConTable, 범주형 변수는 CaTable을 설정하면 해당 변수를 따로 출력할 수 있다.

# Categorical variables
t2$CatTable
1 2 3 p test
n 995 256 391
Q_PHX_DX_STK = 1 (%) 11 ( 1.8) 1 ( 0.5) 0 ( 0.0) 0.051
Q_PHX_DX_HTDZ = 1 (%) 18 ( 2.9) 5 ( 2.6) 3 ( 1.1) 0.287
Q_HBV_AG (%) 0.193
1 40 ( 4.0) 19 ( 7.5) 17 ( 4.3)
2 679 ( 68.3) 164 ( 64.3) 259 ( 66.2)
3 275 ( 27.7) 72 ( 28.2) 115 ( 29.4)
Q_SMK_YN (%) <0.001
1 995 (100.0) 0 ( 0.0) 0 ( 0.0)
2 0 ( 0.0) 256 (100.0) 0 ( 0.0)
3 0 ( 0.0) 0 ( 0.0) 391 (100.0)
# Continuous variables
t2$ContTable
1 2 3 p test
n 995 256 391
HGHT (mean (SD)) 160.67 (8.34) 168.83 (6.45) 171.61 (7.09) <0.001
WGHT (mean (SD)) 61.17 (11.08) 70.09 (10.72) 71.76 (13.07) <0.001
BMI (mean (SD)) 23.63 (3.39) 24.52 (2.93) 24.27 (3.54) <0.001
HDL (mean (SD)) 57.83 (14.08) 53.91 (36.73) 52.37 (13.54) <0.001
LDL (mean (SD)) 112.26 (32.81) 147.52 (505.27) 116.34 (56.89) 0.046
TG (mean (SD)) 114.05 (76.97) 162.89 (126.51) 169.24 (133.28) <0.001
SGPT (mean (SD)) 23.33 (28.42) 28.61 (20.62) 31.00 (26.96) <0.001

Export tableone

write.csv 함수를 사용하여 table1을 csv파일로 저장할 수 있다. write.csv(x, file=“파일명”) 형식을 사용하여 csv파일로 저장한다.

# export table1
table1 <- print(t2)
write.csv(table1, file = "table1.csv")

마치며

이번 강의를 정리하자.

  1. tableone 패키지의 CreateTableone 함수를 사용하여 요약 통계량 테이블을 작성할 수 있다.

  2. CreateTableone 함수에는 다양한 옵션이 존재하며 strata 옵션을 통해 그룹별 통계량을 계산할 수 있다.

  3. CreateTableOne 함수를 사용하여 테이블을 만든 후, print 명령어로 세부 옵션을 지정할 수 있다.

  4. summary 함수를 쓰면 누락값을 포함한 table1의 자세한 정보를 알 수 있다.

  5. write.csv 함수를 사용하여 tableone 패키지로 만든 table을 csv파일로 저장할 수 있다.

Citation

BibTeX citation:
@online{lee2022,
  author = {Lee, Yujin},
  title = {Tableone {패키지} {소개}},
  date = {2022-02-07},
  url = {https://blog.zarathu.com/posts/2022-02-07-tableone/},
  langid = {en}
}
For attribution, please cite this work as:
Lee, Yujin. 2022. “Tableone 패키지 소개.” February 7, 2022. https://blog.zarathu.com/posts/2022-02-07-tableone/.