The content of the tables can be altered with the function's arguments, or by
calling options
, as described in the Details section below. The look of
the tables can be customized by specifying the output
argument, and by
using functions from one of the supported table customization packages:
kableExtra
, gt
, flextable
, huxtable
.
The modelsummary_list
output type is a lightweight representation of the
model results. The modelsummary
function can export to this format by
setting the output
argument, and it can accept objects of this format
as input models to create a table. This can be useful to save raw
results, in order to print a table later, without having to save and
extract from the entire model object. Note that the confidence intervals
are only stored in a modelsummary_list
if explicitly requested:
modelsummary( models, output = "default", fmt = 3, estimate = "estimate", statistic = "std.error", vcov = NULL, conf_level = 0.95, stars = FALSE, coef_map = NULL, coef_omit = NULL, coef_rename = NULL, gof_map = NULL, gof_omit = NULL, group = term ~ model, group_map = NULL, add_rows = NULL, align = NULL, notes = NULL, title = NULL, escape = TRUE, ... )
models  a model or (optionally named) list of models 

output  filename or object type (character string)

fmt  determines how to format numeric values

estimate  string or

statistic  vector of strings or

vcov  robust standard errors and other manual statistics. The

conf_level  confidence level to use for confidence intervals 
stars  to indicate statistical significance

coef_map  character vector. Subset, rename, and reorder coefficients.
Coefficients omitted from this vector are omitted from the table. The order
of the vector determines the order of the table. 
coef_omit  string regular expression. Omits all matching coefficients
from the table using 
coef_rename  named character vector or function which returns a named vector. Values of the vector refer to the variable names that will appear in the table. Names refer to the original term names stored in the model object, e.g. c("hp:mpg"="hp X mpg") for an interaction term. 
gof_map  rename, reorder, and omit goodnessoffit statistics and other model information. This argument accepts 3 types of values:

gof_omit  string regular expression. Omits all matching gof statistics from
the table. This argument uses perlcompatible regular expressions ( 
group  a twosided formula with two or three components which describes
how groups of parameters should be displayed. The formula must include both
a "term" and a "model" component. In addition, a component can be used to
identify groups of parameters (e.g., outcome levels of a multinomial logit
model). This group identifier must be the name of a column in the
data.frame produced by

group_map  named or unnamed character vector. Subset, rename, and
reorder coefficient groups specified in the 
add_rows  a data.frame (or tibble) with the same number of columns as your main table. By default, rows are appended to the bottom of the table. You can define a "position" attribute of integers to set the row positions. See Examples section below. 
align  A string with a number of characters equal to the number of columns in
the table (e.g.,

notes  list or vector of notes to append to the bottom of the table. 
title  string 
escape  boolean TRUE escapes or substitutes LaTeX/HTML characters which could prevent the file from compiling/displaying. This setting does not affect captions or notes. 
...  all other arguments are passed through to the extractor and
tablemaking functions. This allows users to pass arguments directly to

a regression table in a format determined by the output
argument.
backup < modelsummary(models, output = "modelsummary_list"
statistic = "conf.int")
modelsummary(backup)
When a file name with a valid extension is supplied to the output
argument,
the table is written immediately to file. If you want to customize your table
by postprocessing it with an external package, you need to choose a
different output format and saving mechanism. Unfortunately, the approach
differs from package to package:
gt
: set output="gt"
, postprocess your table, and use the gt::gtsave
function.
kableExtra
: set output
to your destination format (e.g., "latex", "html", "markdown"), postprocess your table, and use kableExtra::save_kable
function.
vcov
To use a string such as "robust" or "HC0", your model must be supported
by the sandwich
package. This includes objects such as: lm, glm,
survreg, coxph, mlogit, polr, hurdle, zeroinfl, and more.
NULL, "classical", "iid", and "constant" are aliases which do not modify uncertainty estimates and simply report the default standard errors stored in the model object.
Onesided formulas such as ~clusterid
are passed to the sandwich::vcovCL
function.
Matrices and functions producing variancecovariance matrices are first
passed to lmtest
. If this does not work, modelsummary
attempts to take
the square root of the diagonal to adjust "std.error", but the other
uncertainty estimates are not be adjusted.
Numeric vectors are formatted according to fmt
and placed in brackets.
Character vectors printed as given, without parentheses.
If your model type is supported by the lmtest
package, the
vcov
argument will try to use that package to adjust all the
uncertainty estimates, including "std.error", "statistic", "p.value", and
"conf.int". If your model is not supported by lmtest
, only the "std.error"
will be adjusted by, for example, taking the square root of the matrix's
diagonal.
The behavior of modelsummary
can be affected by setting global options:
modelsummary_factory_default
modelsummary_factory_latex
modelsummary_factory_html
modelsummary_factory_png
modelsummary_get
modelsummary_format_numeric_latex
modelsummary_format_numeric_html
modelsummary
supports 4 tablemaking packages: kableExtra
, gt
,
flextable
, and huxtable
. Some of these packages have overlapping
functionalities. For example, 3 of those packages can export to LaTeX. To
change the default backend used for a specific file format, you can use
the options
function:
options(modelsummary_factory_html = 'kableExtra')
options(modelsummary_factory_latex = 'gt')
options(modelsummary_factory_word = 'huxtable')
options(modelsummary_factory_png = 'gt')
modelsummary
can use two sets of packages to extract information from
statistical models: broom
and the easystats
family (performance
and
parameters
). By default, it uses broom
first and easystats
as a
fallback if broom
fails. You can change the order of priorities
or include goodnessoffit extracted by both packages by setting:
options(modelsummary_get = "broom")
options(modelsummary_get = "easystats")
options(modelsummary_get = "all")
By default, LaTeX tables enclose all numeric entries in the \num{}
command
from the siunitx package. To prevent this behavior, or to enclose numbers
in dollar signs (for LaTeX math mode), users can call:
options(modelsummary_format_numeric_latex = "plain")
options(modelsummary_format_numeric_latex = "mathmode")
A similar option can be used to display numerical entries using MathJax in HTML tables:
options(modelsummary_format_numeric_html = "mathjax")
if (FALSE) { # The `modelsummary` website includes \emph{many} examples and tutorials: # https://vincentarelbundock.github.io/modelsummary library(modelsummary) # load data and estimate models data(trees) models < list() models[['Bivariate']] < lm(Girth ~ Height, data = trees) models[['Multivariate']] < lm(Girth ~ Height + Volume, data = trees) # simple table modelsummary(models) # statistic modelsummary(models, statistic = NULL) modelsummary(models, statistic = 'p.value') modelsummary(models, statistic = 'statistic') modelsummary(models, statistic = 'conf.int', conf_level = 0.99) modelsummary(models, statistic = c("t = {statistic}", "se = {std.error}", "conf.int")) # estimate modelsummary(models, statistic = NULL, estimate = "{estimate} [{conf.low}, {conf.high}]") modelsummary(models, estimate = c("{estimate}{stars}", "{estimate} ({std.error})")) # vcov modelsummary(models, vcov = "robust") modelsummary(models, vcov = list("classical", "stata")) modelsummary(models, vcov = sandwich::vcovHC) modelsummary(models, vcov = list(stats::vcov, sandwich::vcovHC)) modelsummary(models, vcov = list(c("(Intercept)"="", "Height"="!"), c("(Intercept)"="", "Height"="!", "Volume"="!!"))) # vcov with custom names modelsummary( models, vcov = list("Stata Corp" = "stata", "Newey Lewis & the News" = "NeweyWest")) # coef_rename modelsummary(models, coef_map = c('Volume' = 'Large', 'Height' = 'Tall')) # coef_map modelsummary(models, coef_map = c('Volume' = 'Large', 'Height' = 'Tall')) modelsummary(models, coef_map = c('Volume', 'Height')) # title modelsummary(models, title = 'This is the title') # title with LaTeX label (for numbering and referencing) modelsummary(models, title = 'This is the title \\label{tab:description}') # add_rows rows < tibble::tribble(~term, ~Bivariate, ~Multivariate, 'Empty row', '', '', 'Another empty row', '?', '?') attr(rows, 'position') < c(1, 3) modelsummary(models, add_rows = rows) # notes modelsummary(models, notes = list('A first note', 'A second note')) # gof_map: data.frame gm < modelsummary::gof_map gof_custom$omit[gof_custom$raw == 'deviance'] < FALSE gof_custom$fmt[gof_custom$raw == 'r.squared'] < "%.5f" modelsummary(models, gof_map = gof_custom) # gof_map: list of lists f1 < function(x) format(round(x, 3), big.mark=",") f2 < function(x) format(round(x, 0), big.mark=",") gm < list( list("raw" = "nobs", "clean" = "N", "fmt" = f2), list("raw" = "AIC", "clean" = "aic", "fmt" = f1)) modelsummary(models, fmt = f1, gof_map = gm) }