Simplifies regression modeling in R by integrating multiple modeling and summarization
tools into a cohesive, user-friendly interface. Designed to be accessible for researchers,
particularly those in Low- and Middle-Income Countries (LMIC). Built upon widely accepted
statistical methods, including logistic regression (Hosmer et al. 2013, ISBN:9781118548429),
log-binomial regression (Spiegelman and Hertzmark 2005
gtregression
Publication-ready regression and survival analysis tables, plots, and forest plots for real-world health data. Fit models, compare estimates, visualise results, and export manuscript-ready outputs without hand-formatting every coefficient.
gtregression helps you move from model to manuscript: fit regression
models, produce clean tables, visualise estimates, merge outputs, and
export results without hand-formatting every coefficient.
It supports logistic, log-binomial, Poisson, robust Poisson, negative binomial, linear, Cox, parametric survival, and causal mediation workflows, including adjusted and stratified models.
| Build | What you get |
|---|---|
| Descriptive tables | Grouped summaries with row or column percentages |
| Regression tables | Crude, adjusted, stratified, linear, Cox, and parametric survival outputs |
| Survival analysis | Kaplan-Meier curves, survival summaries, RMST, log-rank tests, Cox PH checks, and survival predictions |
| Mediation analysis | Direct, indirect, total, and proportion mediated effects with causal caveats |
| Visualisations | Regression plots, survival curves, fitted survival curves, and forest tables |
| Interpretation helpers | Confounding, interaction, mediation, convergence, collinearity, model selection, and survival diagnostics |
| Exports | HTML, PDF, PNG, and Word-ready outputs |
One connected workflow
Each step leaves an inspectable object behind, so beginners have a clear path and experienced analysts retain full control.
01
Prepare
Check variables, labels, levels, and missing data.
dissect(data) Analysis-ready
data
02
Describe
Build a clear baseline table before modelling.
descriptive_table(...) Table 1
03
Model
Fit crude, adjusted, stratified, or survival models.
uni_reg() + multi_reg() Effect
estimates
04
Interpret
Review assumptions, confounding, interaction, and fit.
check_*() + compare_models()
Defensible model
05
Publish
Merge, visualise, and export polished outputs.
forest_reg() + save_table()
Manuscript-ready output
Many students, researchers, and public health analysts need regression
outputs that are readable, reproducible, and report-ready.
gtregression keeps the R syntax approachable while preserving
transparent model objects underneath.
gtregression is intentionally a readable interface over established R
packages. The package uses widely trusted modelling, tidying, plotting,
and reporting tools so users can inspect fitted models and understand
the statistical engines behind each output.
| Area | Core packages used |
|---|---|
| Data handling and tidy workflows | dplyr, purrr, tibble, rlang |
| Model fitting | stats, MASS, survival, risks, logistf |
| Robust and diagnostic inference | sandwich, lmtest, broom, broom.helpers |
| Tables and Word-ready reporting | flextable, officer, gt |
| Figures and forest plots | ggplot2, patchwork, forestploter, scales |
| Optional development and checking tools | testthat, knitr, rmarkdown, pkgdown, car, forcats, ggtext |
The user-facing functions return objects with fitted models, table bodies, and display metadata that advanced users can audit, modify, or reuse.
# CRAN
install.packages("gtregression")
# Development version
remotes::install_github("ThinkDenominator/gtregression")
library(gtregression)
library(dplyr)
data("data_birthwt", package = "gtregression")
birthwt_data <- data_birthwt |>
mutate(
race = factor(race, levels = c(1, 2, 3),
labels = c("White", "Black", "Other")),
smoke = factor(smoke, levels = c(0, 1), labels = c("No", "Yes")),
ht = factor(ht, levels = c(0, 1), labels = c("No", "Yes")),
ui = factor(ui, levels = c(0, 1), labels = c("No", "Yes")),
low = factor(low, levels = c(0, 1), labels = c("Normal BW", "Low BW"))
)
exposures <- c("age", "lwt", "race", "smoke", "ht", "ui")
attr(birthwt_data$age, "label") <- "Maternal age"
attr(birthwt_data$lwt, "label") <- "Maternal weight"
attr(birthwt_data$smoke, "label") <- "Smoking during pregnancy"
desc <- descriptive_table(
birthwt_data,
exposures = exposures,
by = "low",
percent = "column",
show_overall = "last"
)
uni <- uni_reg(
birthwt_data,
outcome = "low",
exposures = exposures,
approach = "logit"
)
multi <- multi_reg(
birthwt_data,
outcome = "low",
exposures = c("smoke", "ht", "ui"),
adjust_for = c("age", "lwt", "race"),
approach = "logit"
)
plot_reg(multi, title = "Adjusted Regression for Low Birth Weight")
forest_reg = forest_reg(forest_df(uni, multi))
merge_tables(desc, uni, multi)
Variable labels set with attr(x, "label") or labelled::var_label()
are used automatically in display tables and plots, while original
column names remain available internally for merging, modification, and
testing.
Objects stay inspectable:
desc$table
uni$table
multi$table
multi$models
Optional model-fit statistics can be requested without changing the publication table:
uni_stats <- uni_reg(
data = birthwt_data,
outcome = "low",
exposures = exposures,
approach = "logit",
model_stats = TRUE
)
uni_stats$model_stats
| Task | Start here |
|---|---|
| First workflow | Start Here |
| Descriptive summaries | Descriptive Tables |
| Regression tables | Regression Tables |
| Survival analysis | Survival Analysis |
| Causal mediation | Causal Mediation |
| Visualise estimates | Visualise Results |
| Stratified models | Stratified Analysis |
| Diagnostics and selection | Diagnostics |
| Confounding and interaction | Confounding & Interaction |
| Merge and export | Customize and Export |
| Workflow | Functions |
|---|---|
| Describe | descriptive_table(), dissect() |
| Model | uni_reg(), multi_reg(), cox_reg(), surv_reg() |
| Survival | km_plot(), km_risk_table(), survival_summary(), survival_quantiles(), survival_prob(), rmst_table(), logrank_test(), check_ph(), surv_model_compare(), plot_surv_fit(), surv_predict() |
| Stratify | stratified_uni_reg(), stratified_multi_reg() |
| Visualise | plot_reg(), plot_reg_combine(), forest_df(), forest_reg() |
| Diagnose | check_convergence(), check_collinearity(), check_ph(), select_models() |
| Interpret | identify_confounder(), interaction_models(), mediation_analysis(), plot_mediation() |
| Polish and export | modify_table(), merge_tables(), save_table(), save_plot(), save_docx() |
If you use gtregression in your work, please cite it as:
Polani R, Eliyas SK, Sakthivel M, Kaviprawin M, Krishnamoorthy Y, Majella MG. gtregression: Tools for Creating Publication-Ready Regression Tables. Zenodo. https://doi.org/10.5281/zenodo.16905350
gtregression builds on the R ecosystem, especially stats,
survival, MASS, risks, logistf, broom, broom.helpers,
sandwich, lmtest, dplyr, purrr, tibble, rlang, flextable,
officer, gt, ggplot2, patchwork, forestploter, and scales.