Como montar tabelas de modelos Bayesianos prontas para publicação
Ao invés de ser obrigado a passar horas a fio formatando tabelas em Excel softwares pagos, você pode usar pacotes gratuitos do R
para formatar automaticamente suas tabelas. Em especial, eu gosto bastante do pacote gtsummary
(Sjoberg et al., 2021) para preparar tabelas prontas para publicação. Inclusive eu fui um dos proponentes de incluir suporte do gtsummary
para modelos Bayesianos do rstanarm
e brms
(veja detalhes nessa issue do GitHub)1. Geralmente uso duas funções do gtsummary
no meu fluxo de trabalho:
tbl_summary()
tbl_regression()
Para os modelos Bayesianos mostrarei como o gtsummary
funciona para modelos brms
neste tutorial.
gtsummary
O gtsummary
tem diversos temas interessantes que podem ser definidos com as funções theme_gtsummary_*()
. Basta colocar no ínicio do seu markdown. Consulte a documentação dos temas do gtsummary
e veja alguns exemplos:
theme_gtsummary_journal()
:
"jama"
- The Journal of the American Medical Association"nejm"
- The New England Journal of Medicine"lancet"
- The Lancettheme_gtsummary_language()
:
"pt"
- PortuguêsVou demonstrar as tabelas do gtsummary
com o tema do idioma Português nesse tutoria:
theme_gtsummary_language("pt")
tbl_summary
A função tbl_summary()
do gtsummary
formata uma tabela de Estatística Descritiva de maneira bem conveniente. Geralmente uso duas opções para reportar os dados. Essas opção vão dentro do argumento statistics
to tbl_summary
:
Mediana com Q1 e Q3 (minha preferida):
all_continuous() ~ c("{N_nonmiss}",
"{median} ({p25}, {p75})",
"{min}, {max}")
Média com Desvio Padrão (caso algum editor/revisor/stakeholder prefira):
all_continuous() ~ c("{N_nonmiss}",
"{mean} ({sd})",
"{min}, {max}")
Como exemplo, usarei o dataset kidiq
(Gelman & Hill, 2007) da Aula 6 - Regressão Linear.
Vejam que aqui eu fiz diversas alterações que vocês podem ver na documentação da função tbl_summary()
do gtsummary
:
kidiq <- rstanarm::kidiq
tbl_summary(
kidiq %>% mutate(mom_hs = as.factor(mom_hs)),
by = mom_hs,
type = all_continuous() ~ "continuous2",
statistic = list(
all_continuous() ~ c("{N_nonmiss}",
"{median} ({p25}, {p75})",
"{min}, {max}"),
all_categorical() ~ "{n} ({p}%)"),
missing = "no",
digits = all_continuous() ~ 2) %>%
add_overall() %>%
# bold variable labels, italicize levels
bold_labels() %>%
italicize_levels() %>%
# change stuff
modify_header(label ~ "**Variable**") %>%
modify_spanning_header(c("stat_1", "stat_2") ~ "**Ensino Médio da Mãe**") %>%
add_n()
Variable | N | Total, N = 4341 | Ensino Médio da Mãe | |
---|---|---|---|---|
0, N = 93 | 1, N = 341 | |||
kid_score | 434.00 | |||
N | 434.00 | 93.00 | 341.00 | |
Mediana (IQR) | 90.00 (74.00, 102.00) | 80.00 (58.00, 95.00) | 92.00 (77.00, 103.00) | |
Intervalo | 20.00, 144.00 | 20.00, 136.00 | 38.00, 144.00 | |
mom_iq | 434.00 | |||
N | 434.00 | 93.00 | 341.00 | |
Mediana (IQR) | 97.92 (88.66, 110.27) | 88.66 (81.83, 99.16) | 100.24 (90.45, 113.17) | |
Intervalo | 71.04, 138.89 | 74.23, 127.54 | 71.04, 138.89 | |
mom_age | 434.00 | |||
N | 434.00 | 93.00 | 341.00 | |
Mediana (IQR) | 23.00 (21.00, 25.00) | 21.00 (20.00, 24.00) | 23.00 (21.00, 25.00) | |
Intervalo | 17.00, 29.00 | 17.00, 28.00 | 17.00, 29.00 | |
1
c("N", "Mediana (IQR)", "Intervalo")
|
tbl_regression
Vou usar o “Modelo 3” da Aula 6 - Regressão Linear que usa o dataset kidiq
(Gelman & Hill, 2007) como exemplo:
Por padrão tbl_regression()
somente mostrar os efeitos globais (fixed effects) do modelo brms
. Caso queira os efeitos de grupo (random effects) você deve especificar effects = "ran_pars"
. Além disso, também por padrão é mostrado a média e o desvio padrão dos coeficientes do modelo. Caso queira mediana e desvio absoluto médio use robust = TRUE
. Para controlar os percentis a serem reportados da posterior dos parâmetros use conf.level = X
. Para concluir, a constante (intercept) não é reportada por padrão, caso queira adicione intercept = TRUE
. Veja um exemplo:
tbl_regression(gaussian_brms, robust = TRUE, conf.level = 0.9, intercept = TRUE)
Características | Beta | 90% CI1 |
---|---|---|
(Intercept) | 26 | 17, 36 |
mom_hs | 6.0 | 2.5, 9.5 |
mom_iq | 0.56 | 0.46, 0.65 |
1
CI = Intervalo de confiança
|
R version 4.1.0 (2021-05-18)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 10.16
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] gtsummary_1.4.1 lm.beta_1.5-1 loo_2.4.1
[4] DescTools_0.99.41 gapminder_0.3.0 ggExtra_0.9
[7] dplyr_1.0.6 rstan_2.21.2 StanHeaders_2.21.0-7
[10] MASS_7.3-54 ggforce_0.3.3 gganimate_1.0.7
[13] plotly_4.9.3 carData_3.0-4 DiagrammeR_1.0.6.1
[16] brms_2.15.0 rstanarm_2.21.1 Rcpp_1.0.6
[19] skimr_2.1.3 readr_1.4.0 readxl_1.3.1
[22] tibble_3.1.2 ggplot2_3.3.3 patchwork_1.1.1
[25] cowplot_1.1.1
loaded via a namespace (and not attached):
[1] utf8_1.2.1 tidyselect_1.1.1 lme4_1.1-27
[4] htmlwidgets_1.5.3 grid_4.1.0 munsell_0.5.0
[7] codetools_0.2-18 ragg_1.1.2 distill_1.2
[10] DT_0.18 gifski_1.4.3-1 miniUI_0.1.1.1
[13] withr_2.4.2 Brobdingnag_1.2-6 colorspace_2.0-1
[16] highr_0.9 knitr_1.33 rstudioapi_0.13
[19] stats4_4.1.0 bayesplot_1.8.0 labeling_0.4.2
[22] repr_1.1.3 mnormt_2.0.2 polyclip_1.10-0
[25] farver_2.1.0 bridgesampling_1.1-2 rprojroot_2.0.2
[28] coda_0.19-4 vctrs_0.3.8 generics_0.1.0
[31] xfun_0.23 R6_2.5.0 markdown_1.1
[34] isoband_0.2.4 gamm4_0.2-6 projpred_2.0.2
[37] assertthat_0.2.1 promises_1.2.0.1 scales_1.1.1
[40] rootSolve_1.8.2.1 gtable_0.3.0 downlit_0.2.1
[43] processx_3.5.2 lmom_2.8 rlang_0.4.11
[46] systemfonts_1.0.2 splines_4.1.0 TMB_1.7.20
[49] lazyeval_0.2.2 broom_0.7.6 checkmate_2.0.0
[52] inline_0.3.19 yaml_2.2.1 reshape2_1.4.4
[55] abind_1.4-5 threejs_0.3.3 crosstalk_1.1.1
[58] backports_1.2.1 httpuv_1.6.1 rsconnect_0.8.18
[61] tools_4.1.0 bookdown_0.22 ellipsis_0.3.2
[64] jquerylib_0.1.4 RColorBrewer_1.1-2 proxy_0.4-25
[67] ggridges_0.5.3 plyr_1.8.6 base64enc_0.1-3
[70] visNetwork_2.0.9 progress_1.2.2 purrr_0.3.4
[73] ps_1.6.0 prettyunits_1.1.1 zoo_1.8-9
[76] haven_2.4.1 here_1.0.1 magrittr_2.0.1
[79] data.table_1.14.0 magick_2.7.2 colourpicker_1.1.0
[82] tmvnsim_1.0-2 mvtnorm_1.1-1 matrixStats_0.59.0
[85] hms_1.1.0 shinyjs_2.0.0 mime_0.10
[88] evaluate_0.14 xtable_1.8-4 shinystan_2.5.0
[91] broom.mixed_0.2.6 gridExtra_2.3 rstantools_2.1.1
[94] compiler_4.1.0 gt_0.3.0 V8_3.4.2
[97] crayon_1.4.1 minqa_1.2.4 htmltools_0.5.1.1
[100] mgcv_1.8-35 later_1.2.0 tidyr_1.1.3
[103] expm_0.999-6 Exact_2.1 RcppParallel_5.1.4
[106] lubridate_1.7.10 DBI_1.1.1 tweenr_1.0.2
[109] broom.helpers_1.3.0 boot_1.3-28 Matrix_1.3-3
[112] cli_2.5.0 parallel_4.1.0 igraph_1.2.6
[115] forcats_0.5.1 pkgconfig_2.0.3 xml2_1.3.2
[118] dygraphs_1.1.1.6 bslib_0.2.5.1 stringr_1.4.0
[121] callr_3.7.0 digest_0.6.27 rmarkdown_2.8
[124] cellranger_1.1.0 gld_2.6.2 curl_4.3.1
[127] commonmark_1.7 shiny_1.6.0 gtools_3.8.2
[130] nloptr_1.2.2.2 lifecycle_1.0.0 nlme_3.1-152
[133] jsonlite_1.7.2 viridisLite_0.4.0 fansi_0.5.0
[136] labelled_2.8.0 pillar_1.6.1 lattice_0.20-44
[139] fastmap_1.1.0 httr_1.4.2 pkgbuild_1.2.0
[142] survival_3.2-11 glue_1.4.2 xts_0.12.1
[145] png_0.1-7 shinythemes_1.2.0 class_7.3-19
[148] stringi_1.6.2 sass_0.4.0 textshaping_0.3.4
[151] e1071_1.7-7
se atentem que atualmente (Abril de 2021) suporte para modelos do rstanarm
e brms
só funcionam na versão de desenvolvimento do GitHub que pode ser instalada com remotes::install_github("ddsjoberg/gtsummary")
↩︎
If you see mistakes or want to suggest changes, please create an issue on the source repository.
Text and figures are licensed under Creative Commons Attribution CC BY-SA 4.0. Source code is available at https://github.com/storopoli/Estatistica-Bayesiana, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Storopoli (2021, Aug. 1). Estatística Bayesiana com R e Stan: Tabelas para Publicação. Retrieved from https://storopoli.github.io/Estatistica-Bayesiana/aux-Tabelas_para_Publicacao.html
BibTeX citation
@misc{storopoli2021tabelaspubR, author = {Storopoli, Jose}, title = {Estatística Bayesiana com R e Stan: Tabelas para Publicação}, url = {https://storopoli.github.io/Estatistica-Bayesiana/aux-Tabelas_para_Publicacao.html}, year = {2021} }