🧮
Rで論文を書く実践的なテクニック集 (テーブル編)
kableExtra
kableExtraを使えばよいです.
例えば以下のようなデータフレームを持っているとします.
tab
# A tibble: 6 × 9
# Groups: weather [6]
weather n_Men_2019 n_Men_2…¹ n_Men…² n_Men…³ n_Wom…⁴ n_Wom…⁵ n_Wom…⁶ n_Wom…⁷
<fct> <int> <int> <int> <int> <int> <int> <int> <int>
1 sunny 24399 14969 19208 19420 11971 6958 9417 9298
2 cloud 1159 1190 1325 1633 555 554 630 774
3 soft rain 2126 1198 1281 1408 1068 542 605 716
4 hard rain 386 202 386 352 222 96 210 179
5 snow 2 2 124 5 NA NA 38 1
6 hail 11 5 6 4 3 3 1 2
# … with abbreviated variable names ¹n_Men_2020, ²n_Men_2021, ³n_Men_2022,
# ⁴n_Women_2019, ⁵n_Women_2020, ⁶n_Women_2021, ⁷n_Women_2022
kableExtra なら簡単に.texファイルにできます.
library(kableExtra)
options(knitr.kable.NA = '')
ktb <- tab |>
kbl(format = "latex", booktabs = TRUE,
col.names = c(" ", 2019:2022, 2019:2022)) |>
add_header_above(c(" ", "Men" = 4, "Women" = 4)) |>
pack_rows(index = c("Good" = 2, "Bad" = 4))
ktb |>
save_kable(here("output/tex/kableextra/tb_accident_bike.tex"))

ポイントとしては
-
booktabs = TRUEはbooktabsパッケージを使うので見た目がよくなります - 列名は
col.names項で指定します - 行と列は
pack_rows()とadd_header_above()でまとめることができます -
kbl(format = "latex")を指定するとsave_kable()でtexファイルに出力できます - タイトルは論文用の本文用のtexファイルであとづけしています.
より複雑な表については Zhu (2021) を読むことをおすすめします.
ここまで複雑な
modelsummary
回帰分析の表はmodelsummary を使います. 以下のような回帰結果をリストでもっているとします.
library(fixest) # for faster regression with fixed effect
models <- list(
"(1)" = feglm(is_hospitalized ~ type_person + positive_alcohol + positive_drug | age_c + gender,
family = binomial(logit), data = data),
"(2)" = feglm(is_hospitalized ~ type_person + positive_alcohol + positive_drug | age_c + gender + type_vehicle,
family = binomial(logit), data = data),
"(3)" = feglm(is_hospitalized ~ type_person + positive_alcohol + positive_drug | age_c + gender + type_vehicle + weather,
family = binomial(logit), data = data),
"(4)" = feglm(is_died ~ type_person + positive_alcohol + positive_drug | age_c + gender,
family = binomial(logit), data = data),
"(5)" = feglm(is_died ~ type_person + positive_alcohol + positive_drug | age_c + gender + type_vehicle,
family = binomial(logit), data = data),
"(6)" = feglm(is_died ~ type_person + positive_alcohol + positive_drug | age_c + gender + type_vehicle + weather,
family = binomial(logit), data = data)
)
計算を早くするためにfixest::feglm() を使っていますが通常のlm() や glm() で問題ありません.
modelsummary()のデフォルトの設定で以下のようなテーブルを作ることができます.
library(modelsummary)
modelsummary(models)

論文に使える形にするために以下のように調整します.
cm <- c(
"type_personPassenger" = "Passenger",
"type_personPedestrian" = "Pedestrian",
"positive_alcoholTRUE" = "Positive Alcohol"
)
gm <- tibble(
raw = c("nobs", "FE: age_c", "FE: gender",
"FE: type_vehicle", "FE: weather"),
clean = c("Observations", "FE: Age Group", "FE: Gender",
"FE: Type of Vehicle", "FE: Weather"),
fmt = c(0, 0, 0, 0, 0)
)
modelsummary(models,
output = "latex_tabular",
stars = c("+" = .1, "*" = .05, "**" = .01),
coef_map = cm,
gof_map = gm) |>
add_header_above(
c(" ", "Hospitalization" = 3, "Died within 24 hours" = 3)) |>
row_spec(7, hline_after = T) |>
save_kable(here("output/tex/modelsummary/reg_accident_bike.tex"))

調整した項目は以下です
-
coef_map = cmで係数のラベルを変更 -
gof_map = gmで統計量を選択&ラベル付け - 出力が
kableExtra形式なのでadd_header_above()やrow_spec()で見た目を調整 - タイトルとノートは本文用texファイルで記述
-
output = "latex_tabular"を使うことでtableタグなしのtexファイルが出力できる
テーブル編まとめ
kableExtra & modelsummary
-
kableExtraでtibble (データフレーム) から簡単にtexのテーブルを作成できる -
modelsummaryで回帰結果からkableExtraのテーブルを出力できる - 出力されたtexファイルとそれをコンパイルする本文のtexファイルはレポジトリ内の
output/tex/とcode/thesis/から確認できます
より詳しく
- 公式ドキュメントmodelsummary と Zhu (2021)
-
gtは
kableExtraに替わりうる強力なテーブル作成パッケージです (が数式に対応していないので, 論文用には使っていません. スライドではよく使います.)
解説は以上です. 皆様の研究生活がもっと楽になりますように!
Discussion