以前、対象者背景表(通称: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に貼り付けるまでを含めて日本語で解説してくださっています。