- パッケージとデータセットの準備
- モデルの当てはめ
- tbl_regression( )で結果をキレイに表示する
- モデル当てはめに関する情報を追加する
- 表の体裁を変更する
- Word形式で出力する
- おわりに
- 参考資料
gtパッケージは"grammar of tables"の名前から分かるように、ggplot("grammar of graphics")の感覚でキレイな表を作成できるパッケージ。gtsummaryパッケージはデータや解析結果をキレイな表にしてくれる。
gtsummaryパッケージを使って、患者背景表(通称:Table 1)を簡単にキレイに作成する方法については以前まとめた。
パッケージとデータセットの準備
パッケージに含まれるtrialというシミュレーションデータを使う。
> library(gtsummary) > head(trial) # A tibble: 6 × 9 trt age marker stage grade response death death_cr ttdeath <chr> <dbl> <dbl> <fct> <fct> <int> <int> <fct> <dbl> 1 Drug A 23 0.16 T1 II 0 0 censor 24 2 Drug B 9 1.11 T2 I 1 0 censor 24 3 Drug A 31 0.277 T1 II 0 0 censor 24 4 Drug A NA 2.07 T3 III 1 1 death other causes 17.6 5 Drug A 51 2.77 T4 III 1 1 death other causes 16.4 6 Drug B 39 0.613 T4 I 0 1 death from cancer 15.6
trt
:化学療法age
:年齢marker
:腫瘍マーカーstage
:Tステージgrade
:グレードresponse
:腫瘍の反応性death
:死亡death_cr
:腫瘍関連死亡、腫瘍以外による死亡、打ち切りttdeath
:死亡または打ち切りまでの時間
モデルの当てはめ
例として、ロジスティック回帰モデルを当てはめておく。
fit <- glm(response ~ age + stage, data=trial, family = binomial(link="logit"))
tbl_regression( )で結果をキレイに表示する
当てはめた結果をtbl_regression( )に渡す。下のコードのように引数に当てはめ結果を入力してもいいし、%>%
を使ってもよい。
そのまま渡すとlog(OR)で表示されるので、exponentiate=TRUE
とする。
指定できる引数は次のとおり。
exponentiate
:説明したとおり。intercept
:=TRUE
とすると切片の結果も表示される。デフォルトはFALSE。conf.level
:信頼区間の水準。デフォルトは=0.95
になっている。
tbl_regression(fit, exponentiate = TRUE)
これだけでも十分キレイ。
変数の表示名を変更する
引数label
に変数名のリストを渡す。指定の方法は下のコードを参照のこと。以後、引数exponentiate
は省略。
fit %>% tbl_regression(label=list(age ~ "年齢", stage ~ "ステージ"))
一部の変数の結果のみ表示する
主たる要因や介入の結果のみ表示したいときは多い。ここでは年齢に関しての結果のみ表示した。
fit %>% tbl_regression(include = age)
係数やP値の桁数を変更する
係数の桁数はestimate_fun
で、P値の桁数はpvalue_fun
で指定する。
stype_***
についてはリンクを参照。
fit %>% tbl_regression(estimate_fun = ~style_number(.x, digits = 2), pvalue_fun = ~style_pvalue(.x, digits = 2))
Style numbers — style_number • gtsummary
Style p-values — style_pvalue • gtsummary
モデル当てはめに関する情報を追加する
add_***
で係数・P値以外の情報を追加できる。これらは引数ではなく、%>%
で繋ぐ(下のコード参照)。
add_global_p( )
:カテゴリー変数に対して、個々のダミー変数ごとのP値ではなく、変数全体のP値を表示add_glance_source_note( )
:寄与率、モデル全体のP値などを表示add_vif( )
:多重共線性の指標である分散拡大係数(variance inflation factor, VIF)を表示するadd_q( )
:多重性を調整したP値を表示add_nevent( )
:サンプル数を追加
fit %>% tbl_regression() %>% add_global_p()
それぞれの詳細は以下のリンクから。
- Add the global p-values — add_global_p • gtsummary
- Add Model Statistics — add_glance • gtsummary
- Add Variance Inflation Factor — add_vif • gtsummary
- Add a column of q-values to account for multiple comparisons — add_q • gtsummary
表の体裁を変更する
これもtbl_regression( )で作成したオブジェクトに対して%>%
で追加する。
太字・イタリック体にする
bold_labels( )
:変数名を太字にするbold_levels( )
:カテゴリー変数のカテゴリー名を太字にするbold_p( )
:P値を太字にするitalicize_labels( )
:変数名をイタリック体にするitalicize_levels( )
:カテゴリー変数のカテゴリー名をイタリック体にする
見出し名を変更する
modify_header( )
で見出し名を変更できる。まずは変更できる箇所を確認。
fit %>% tbl_regression() %>% show_header_names()
ℹ As a usage guide, the code below re-creates the current column headers. modify_header( label = '**Characteristic**', estimate = '**log(OR)**', ci = '**95% CI**', p.value = '**p-value**' ) Column Name Column Header ------------ ------------------- label **Characteristic** estimate **log(OR)** ci **95% CI** p.value **p-value**
例えば、変数名の見出しをCharacteristicからVariablesに変更したいときは次のように書く。
fit %>% tbl_regression() %>% modify_header(label = "**Variables**")
マークダウン方式で書けばいいので、** name **
は太字、* name *
はイタリック体になる。
題名を変更する
modify_caption( )
を使う。サンプル数を追加するときは次のように{N}
を使う(まだよく理解できてないです)。
fit %>% tbl_regression() %>% modify_caption("**Regression analysis** (N = {N})")
フッターを変更する
modify_footnote( )
を使う。ここもよく理解できてないので、例を2つだけ。
略語を変更したいとき。
fit %>% tbl_regression() %>% modify_footnote(ci = "CI = Credible Interval", abbreviation = TRUE)
略語を消したいとき。
fit %>% tbl_regression() %>% modify_footnote(update = everything() ~ NA, abbreviation = TRUE)
Word形式で出力する
as_flex_table( )でフォーマットを整えたものをWordでプレビューには以下のコードで。preview = "pptx"
とするとPowerpointでプレビューできる。
flextableパッケージが必要なので、インストールするか聞かれる。
d %>% tbl_summary(by = trt) %>% as_flex_table() %>% print(preview="docx")
おわりに
- gt_summaryに少し慣れてきましたが、まだまだ横にリファレンスは欠かせません...
- 後から来たオス猫(茶・1歳ちょっと)は、エサを食べるときに気を散らして、先住猫につまみ食いされてます。
参考資料
- gtsummaryパッケージのチュートリアル。
- Officeに貼り付けるまでを含めて日本語で解説してくださっています。