以前、対象者背景表(通称:Table1)を書くには、CreateTableOneパッケージのtableone( )が便利だというノートを書きました。
tidyverseのコードに慣れている人は、ここで説明するgt系gtsummaryパッケージが使いやすいかも。
gtパッケージは"grammar of tables"の名前から分かるように、ggplot("grammar of graphics")の感覚でキレイな表を作成できるパッケージ。gtsummaryパッケージはデータや解析結果をキレイな表にしてくれる。
パッケージとデータセットの準備
パッケージに含まれるtrialというシミュレーションデータを使う。以下の3つの変数のみ使う。
trt
:化学療法age
:年齢stage
:Tステージ
library(gtsummary) library(tidyverse) d <- trial %>% select(trt, age, grade)
> head(d) # A tibble: 6 × 3 trt age grade <chr> <dbl> <fct> 1 Drug A 23 II 2 Drug B 9 I 3 Drug A 31 II 4 Drug A NA III 5 Drug A 51 III 6 Drug B 39 I
tbl_summary( )でキレイな背景表を作成する
データをtbl_summary( )に渡せば背景表を作成できる。主な引数は以下のとおり。
by
:群分けの変数を指定するstatistic
:集計に使う要約統計量を変更するdigits
:桁数を指定するmissing
:="no"
で欠測数を表示しないmissing_text
:欠測のカテゴリー名を変更するlabel
:ラベル名を変更するinclude
:表に含めたい変数を指定する
群別に要約する
例えば、治療別に要約したいときは下のようにby = trt
と指定する。指定しなければ全体まとめて要約。
d %>% tbl_summary(by = trt)
要約統計量を変更する
デフォルトは連続変数は "median (IQR)"、カテゴリー変数は "n(%)"で要約される。
要約統計量を変更したいときは、引数statistic
に「変数名 ~ "要約方法"」の要領で指定。変数名は個々に指定してもいいけど、連続変数、カテゴリー変数でまとめて指定する方が楽。複数の指定はlist( )で渡す。
要約値は{ }
で囲む。
桁数を指定したいときは引数digits
に小数点以下の桁数を指定(変化がわかるようにカテゴリー変数に対しても1桁にした)。
d %>% tbl_summary( statistic = list(all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} / {N} ({p}%)"), digits = list(all_continuous() ~ 1, all_categorical() ~ 1) )
欠測の表示方法を変更する
欠測数を表示しないときはmissing = "no"
と書く。
欠測のカテゴリー名を変更したいときはmissing_text = "(Missing)"
のように指定する(デフォルトはUnknown)。
変数の表示名を変更する
引数label
に変数名のリストを渡す。「変数名 ~ "表示名"」の要領で指定。複数を指定するときはlist( )でリストとして渡す。
d %>% tbl_summary( label = list(trt ~ "Treatment, n(%)", age ~ "Age, median(IQR)", grade ~ "Tumor Grade, n(%)") )
一部の変数の結果のみ表示する
表に含めたい変数は引数include
で指定できるが、tbl_summary( )に渡す前にselect( )で選んでしまっていてもよい。
表示する情報を追加する
add_***
で情報を追加できる。これらは引数ではなく、%>%
で繋ぐ。
add_p( )
:比較のP値を追加。検定の方法を指定したいときはall_continuous( ) ~ "wilcox.test"
の要領で指定する。add_overall( )
:群分け要約だけでなく、全集団の要約を追加add_n( )
:変数ごとの集計対象数を追加add_difference( )
:連続変数に対して群間差を追加する。add_q( )
:多重性を調整したP値を追加(add_p( )
でP値を追加していることが前提
d %>% tbl_summary(by = trt) %>% add_p(all_continuous() ~ "wilcox.test") %>% add_overall()
表の体裁を変更する
これもtbl_summary( )で作成したオブジェクトに対して%>%
で追加する。
太字・イタリック体にする
bold_labels( )
:変数名を太字にするbold_levels( )
:カテゴリー変数のカテゴリー名を太字にするbold_p( )
:P値を太字にするitalicize_labels( )
:変数名をイタリック体にするitalicize_levels( )
:カテゴリー変数のカテゴリー名をイタリック体にする
見出し名を変更する
modify_header( )で見出し名を変更できる。まずはshow_header_names( )で変更できる箇所を確認。
d %>% tbl_summary() %>% show_header_names()
ℹ As a usage guide, the code below re-creates the current column headers. modify_header( label = '**Characteristic**', stat_0 = '**N = 200**' ) Column Name Column Header ------------ ------------------- label **Characteristic** stat_0 **N = 200**
例えば、変数名の見出しをCharacteristicからVariablesに変更したいときは次のように書く。
d %>% tbl_summary() %>% modify_header(label = "**Variables**")
マークダウン方式で書けばいいので、** name **
は太字、* name *
はイタリック体になる。
題名を変更する
modify_caption( )を使う。サンプル数を追加するときは次のように{N}
を使う(まだよく理解できてないです)。
d %>% tbl_summary() %>% modify_caption("**Patient Characteristics** (N = {N})")
Word形式で出力する
※ 2022-07-19に追記しました。
as_flex_table( )でフォーマットを整えたものをWordでプレビューには以下のコードで。preview = "pptx"
とするとPowerpointでプレビューできる。
flextableパッケージが必要なので、インストールするか聞かれる。
d %>% tbl_summary(by = trt) %>% as_flex_table() %>% print(preview="docx")
おわりに
- 今のところ細部まで指定するならtableoneパッケージ、ざっと表にしてみるならgtsummaryパッケージという感じです(後者に慣れていないせいかもしれませんが)。
参考資料
- gtsummaryパッケージのチュートリアル。
- Officeに貼り付けるまでを含めて日本語で解説してくださっています。