이번 포스팅에서는 논문 친화적인 테이블을 만드는 패키지를 소개해드리겠습니다.
논문을 읽다보면 종종 아래와 같은 회귀분석 결과 테이블을 볼 수 있는데요.

위의 테이블은 단변량 (univariate) 회귀분석과 다변량 (multivariate) 회귀분석 결과를 함께 제시한 테이블입니다.
노가다 없이 univariate regression table과 multivariate regression table을 만드는 방법을 살펴보도록 합시다.
1. 단변량 회귀분석 univariate regression
이번 예제에서는 gtsummary 패키지에 내장되어 있는 trial 데이터셋을 사용하도록 하겠습니다.
trial 데이터셋의 변수들은 다음과 같습니다
변수명
|
설명
|
기타
|
trt
|
약물의 종류
|
Drug A, Drug B
|
age
|
나이
|
|
marker
|
marker의 레벨
|
단위: ng/mL
|
stage
|
T stage
|
|
grade
|
등급
|
|
death
|
사망여부
|
0 또는 1
|
ttdeath
|
사망 또는 관찰 종료까지의 시간
|
(단위: 월)
|
단변량 회귀분석 테이블을 만들 때, 모든 독립변수들을 바꿔가며 일일이 테이블을 만드는 것은 굉장히 비효율적인 일이다.
gtsummary 의 tbl_uvregression 과 함께라면 한번에 결과 출력이 가능하답니다!
tbl_uvregression 로 테이블을 만드는 코드는 다음과 같습니다!
library(gtsummary) # 패키지 불러오기
tbl_uvregression(
data = trial, method = glm, # glm, coxph (cox regression), lm ...
method.args = list(binomial()), # logistic regression => binomial()
exponentiate = T, # 로그값 거듭제곱하기
add_estimate_to_reference_rows = T, # factor 변수의 reference에 1 표시하기
hide_n = T, # n수 감추기
y = death, # y 변수 지정.
include = c(trt, age, marker, stage, grade, response), # 예측변수(x변수)에 포함시킬 변수들
)
tbl_uvregression 의 대표적인 파라미터들은 다음과 같습니다.
파라미터
|
설명
|
예시
|
method
|
회귀분석방법
|
glm, coxph 등
|
method.args
|
회귀모델에 넣어줄 추가 인자
|
list(binomial( ))
|
exponentiate
|
로그 거듭제곱하기
|
TRUE / FALSE
|
label
|
테이블의 변수명
|
|
conf.level
|
신뢰 수준 살정
|
0.95
|
hide_n
|
n 숨기기
|
TRUE / FALSE
|
y
|
반응 (종속) 변수
|
|
x
|
예측(독립) 변수
|
|
pvalue_fun
|
p value 형식 지정
|
~style_pvalue(., digits = 3)
|
include
|
테이블에 포함시킬 예측(독립)변수
|
|
add_estimate_to_reference_rows
|
reference 행을 - 에서 1로 표기하기
|
TRUE / FALSE
|
특정 반응 변수 또는 예측 변수 이외에 나머지 변수들을 모두 단변량 회귀분석하기 위해서는 파라미터로 y 또는 x값만 지정해주셔야 합니다.
위의 코드를 실행하면 아래의 테이블이 출력됩니다.
변수가 많아질수록 테이블이 출력되는 데 시간이 오래 걸립니다.
테이블 출력 결과는 아래와 같습니다.

만약 저 테이블에서 OR 열과 CI 열을 합쳐주고 싶다면 아래의 코드를 실행하면 됩니다.
uni_tbl <- tbl_uvregression(
trial,
method = glm, method.args = list(binomial()),
exponentiate = T,
label = list(age ~ 'Age',
trt ~ 'Chemotherapy Treatment',
stage ~ 'T stage', grade ~ 'Grade',
marker ~ 'Marker Level (ng/mL)',
response ~ 'Tumor response'),
conf.level = 0.95,
hide_n = T,
y = death,
pvalue_fun = ~style_pvalue(., digits = 3),
include = c(trt, age, marker, stage, grade, response)
) %>%
modify_cols_merge(pattern = "{estimate} [{ci}]", rows = !is.na(estimate)) %>%
modify_header(label = "**Variable**",
estimate = "**OR (95% CI)**", p.value = "**P value**")
uni_tbl
테이블의 열을 합쳐주는 기능을 담당하는 코드는 modify_cols_merge 입니다.
코드이름대로 열(cols)을 합쳐주는(merge) 기능을 하죠.
pattern 인자에는 위의 테이블에서 OR로 나타난 회귀식의 estimate 와 신뢰구간 (CI) 를 합쳐줄 방식을 써줍니다.
rows 인자에 들어가있는 값은 estimate의 값이 있는 행들만, 즉 테이블에서 reference 값들 ( ㅡ 로 표시된 행들) 을 제외하고 OR 값과 CI 값을 합쳐준다는 의미입니다.
테이블의 header 도 수정해줘야겠죠. modify_header 를 통해 estimate 열을 수정해줍니다.
'**'으로 씌우는 이유는 열 이름을 볼드체로 출력하기 위함입니다.

show_header_names( ) 로 테이블의 다른 열의 이름들을 확인할 수 있습니다.
2. 다변량 회귀분석 multivariate regression
자, 다음은 다변량 회귀분석 ( 다중회귀분석) 결과 테이블을 만들어보겠습니다.
다변량 회귀분석 테이블을 만들기 위해서는 다변량 회귀분석 모델이 필요하겠죠?
우선 다변량 회귀분석 모델을 하나 만들어 줍시다.
fit <- glm(death ~ trt + age + stage + grade + response, # 반응 변수 ~ 예측변수들
data=trial,
family=binomial())
다음으로 만들어준 모델을 tbl_regression 안에 넣어줍시다.
다변량 회귀분석 결과 테이블을 만드는 코드는 아래와 같습니다.
multi_tbl <- tbl_regression(fit,
exponentiate = T,
label = list(age ~ 'Age',
trt ~ 'Chemotherapy Treatment',
marker ~ 'Marker Level (ng/mL)',
stage ~ 'T stage',
grade ~ 'Grade',
response ~ 'Tumor response'),
conf.level = 0.95,
pvalue_fun = ~style_pvalue(., digits=3)) %>%
modify_cols_merge(pattern = "{estimate} [{ci}]", row=!is.na(estimate)) %>%
modify_header(label = "**Variable**",
estimate = "**OR (95% CI)**",
p.value = "**P value**")
multi_tbl
보시는 것과 같이 tbl_regression 의 파라미터는 tbl_uvregression 과 유사합니다.
실행결과는 아래와 같습니다.

다중회귀분석 테이블
코드 실행 하나만으로 다중회귀분석 테이블이 만들어졌습니다.
테이블의 외형은 단변량 회귀분석 테이블이랑 동일해서 헷갈릴 수 있지만 수치는 분명히 다른 것을 확인할 수 있습니다.
3. Merge: 합치기
자, 마지막 단계입니다. 단변량 회귀분석 테이블과 다변량 회귀분석 테이블을 합치는 작업만 남았습니다.
위에서 봤던 테이블처럼 두 테이블을 하나의 테이블로 합쳐보도록 하겠습니다.
이번에는 tbl_merge 를 사용할 겁니다.
tbl_merge(list(uni_tbl, multi_tbl),
tab_spanner = c('**Univariate**','**Multivariate**')) %>%
as_gt() %>%
tab_options(table.font.names = 'Times New Roman')
앞서 만들었던 단변량 회귀분석 테이블 (uni_tbl) 과 다변량 회귀분석 테이블 (multi_tbl)을 리스트에 넣어줍니다.
tab_spanner 인자에는 테이블을 합쳤을 때 각각의 이름을 입력해줍니다.
마지막으로 폰트를 변경해주었습니다.
폰트 변경을 위해서는 as_gt( ) 를 통해 gt 형식의 테이블로 변경한 뒤,
tab_options 에서 table.font.names 인자에 폰트이름을 입력해주세요.

단변량, 다변량 회귀분석 테이블이 합쳐져 하나의 테이블로 완성되었습니다. 논문 제출에 손색이 없겠습니다.
'R > Tables' 카테고리의 다른 글
[r] gtsummary 다중회귀분석 테이블 만들기 (0) | 2022.04.28 |
---|---|
[r] gtsummary 로 기초통계 테이블 만들기 (0) | 2022.04.25 |
[R] tableone 으로 기초통계테이블 만들기 (0) | 2022.04.25 |
댓글