modelsummary
creates tables and plots to present
descriptive statistics and to summarize statistical
models in R
.
modelsummary is a package to summarize data and statistical models in R. It supports over one hundred types of models out-of-the-box, and allows users to report the results of those models side-by-side in a table, or in coefficient plots. It makes it easy to execute common tasks such as computing robust standard errors, adding significance stars, and manipulating coefficient and model labels. Beyond model summaries, the package also includes a suite of tools to produce highly flexible data summary tables, such as dataset overviews, correlation matrices, (multi-level) cross-tabulations, and balance tables (also known as “Table 1”). The appearance of the tables produced by modelsummary can be customized using external packages such as kableExtra, gt, flextable, or huxtable; the plots can be customized using ggplot2. Tables can be exported to many output formats, including HTML, LaTeX, Text/Markdown, Microsoft Word, Powerpoint, Excel, RTF, PDF, and image files. Tables and plots can be embedded seamlessly in rmarkdown, knitr, or Sweave dynamic documents. The modelsummary package is designed to be simple, robust, modular, and extensible (Arel-Bundock, 2022).
modelsummary
includes two families of functions:
modelsummary
: Regression tables with side-by-side
models.modelplot
: Coefficient plots.datasummary
: Powerful tool to create (multi-level)
cross-tabs and data summaries.datasummary_crosstab
: Cross-tabulations.datasummary_balance
: Balance tables with subgroup
statistics and difference in means (aka “Table 1”).datasummary_correlation
: Correlation tables.datasummary_skim
: Quick overview (“skim”) of a
dataset.datasummary_df
: Turn dataframes into nice tables with
titles, notes, etc.With these functions, you can create tables and plots like these:
![]() |
![]() |
![]() |
![]() ![]() |
![]() |
![]() |
The modelsummary
website hosts a ton of
examples. Make sure you click on the links at the top of this page:
https://vincentarelbundock.github.io/modelsummary
modelsummary
:
Model summariesmodelplot
:
Model plotsdatasummary
:
Data summariesCustomizing the look of your tables
modelsummary
?Here are a few benefits of modelsummary
over some alternative packages:
modelsummary
is very easy to use. This simple call often
suffices:
library(modelsummary)
<- lm(y ~ x, dat)
mod modelsummary(mod)
The command above will automatically display a summary table in the
Rstudio
Viewer or in a web browser. All you need is one
word to change the output format. For example, a text-only version of
the table can be printed to the Console by typing:
modelsummary(mod, output = "markdown")
Tables in Microsoft Word and LaTeX formats can be saved to file by typing:
modelsummary(mod, output = "table.docx")
modelsummary(mod, output = "table.tex")
Information: The package offers many intuitive and powerful utilities to customize the information reported in a summary table. You can rename, reorder, subset or omit parameter estimates; choose the set of goodness-of-fit statistics to include; display various “robust” standard errors or confidence intervals; add titles, footnotes, or source notes; insert stars or custom characters to indicate levels of statistical significance; or add rows with supplemental information about your models.
Appearance: Thanks to the gt
, kableExtra
,
huxtable
,
flextable
,
and DT
packages, the appearance of modelsummary
tables is
endlessly customizable. The appearance
customization page shows tables with colored cells, weird text,
spanning column labels, row groups, titles, source notes, footnotes,
significance stars, and more. This only scratches the surface of
possibilities.
Supported models: Thanks to the broom
and parameters
,
modelsummary
supports hundreds of statistical
models out-of-the-box. Installing other packages can extend the
capabilities further (e.g., broom.mixed
).
It is also very easy to add
or customize your own models.
Output formats: modelsummary
tables can be
saved to HTML, LaTeX, Text/Markdown, Microsoft Word, Powerpoint, RTF,
JPG, or PNG formats. They can also be inserted seamlessly in Rmarkdown
documents to produce automated
documents and reports in PDF, HTML, RTF, or Microsoft Word
formats.
modelsummary
is dangerous! It allows users to do stupid
stuff like replacing
their intercepts by squirrels.
modelsummary
is reliably dangerous! The package
is developed using a suite
of unit tests with about 95% coverage, so it (probably) won’t
break.
modelsummary
does not try to do everything. Instead, it
leverages the incredible work of the R
community. By
building on top of the broom
and parameters
packages, modelsummary
already supports hundreds of model
types out-of-the-box. modelsummary
also supports five of
the most popular table-building and customization packages:
gt
, kableExtra
, huxtable
,
flextable
, and DT
packages. By using those
packages, modelsummary
allows users to produce beautiful,
endlessly customizable tables in a wide variety of formats, including
HTML, PDF, LaTeX, Markdown, and MS Word.
One benefit of this community-focused approach is that when external
packages improve, modelsummary
improves as well. Another
benefit is that leveraging external packages allows
modelsummary
to have a massively simplified codebase
(relative to other similar packages). This should improve long term code
maintainability, and allow contributors to participate through
GitHub.
You can install modelsummary
from CRAN:
install.packages('modelsummary')
You can install the development version of modelsummary
(and its dependency insight
) from R-Universe:
install.packages(
c("modelsummary", "insight", "performance", "parameters"),
repos = c(
"https://vincentarelbundock.r-universe.dev",
"https://easystats.r-universe.dev"))
Restart R
completely before moving
on.
There are a million ways to customize the tables and plots produced
by modelsummary
. In this Getting Started section we will
only scratch the surface. For details, see the vignettes:
modelsummary
:
https://vincentarelbundock.github.io/modelsummary/articles/modelsummary.htmlmodelplot
:
https://vincentarelbundock.github.io/modelsummary/articles/modelplot.htmldatasummary
:
https://vincentarelbundock.github.io/modelsummary/articles/datasummary.htmlTo begin, load the modelsummary
package and download
data from the Rdatasets
archive:
library(modelsummary)
<- 'https://vincentarelbundock.github.io/Rdatasets/csv/HistData/Guerry.csv'
url <- read.csv(url)
dat $Small <- dat$Pop1831 > median(dat$Pop1831) dat
Quick overview of the data:
datasummary_skim(dat)
Balance table (aka “Table 1”) with differences in means by subgroups:
datasummary_balance(~Small, dat)
Correlation table:
datasummary_correlation(dat)
Two variables and two statistics, nested in subgroups:
datasummary(Literacy + Commerce ~ Small * (mean + sd), dat)
Estimate a linear model and display the results:
<- lm(Donations ~ Crime_prop, data = dat)
mod
modelsummary(mod)
Estimate five regression models, display the results side-by-side, and save them to a Microsoft Word document:
<- list(
models "OLS 1" = lm(Donations ~ Literacy + Clergy, data = dat),
"Poisson 1" = glm(Donations ~ Literacy + Commerce, family = poisson, data = dat),
"OLS 2" = lm(Crime_pers ~ Literacy + Clergy, data = dat),
"Poisson 2" = glm(Crime_pers ~ Literacy + Commerce, family = poisson, data = dat),
"OLS 3" = lm(Crime_prop ~ Literacy + Clergy, data = dat)
)
modelsummary(models, output = "table.docx")
There are several excellent alternatives to draw model summary tables
in R
: