Bugs:
- Stars note in
kableExtra
escaped\num{}
in LaTeX.
- Bump minimum version requirement for
tinytable
,parameters
, andinsight
dependencies. coef_rename()
gets apoly=TRUE
argument to renamepoly(x, 2)
-style coefficients. Thanks to @mccarthy-m-g for code contribution #778.get_gof()
:logLik
column converted to numeric for consistent types. Issue 649 reported on themice
Github.kableExtra
update thesiunitx
commands ford
columns.kableExtra
escapes footnotes in HTML whenoutput="kableExtra")
. Thanks to @dmurdoch and @michaelherndon97 for report #793.- New
fmt_equivalence()
function to implement the rounding suggestion of Astier & Wolak (2024). Thanks to Nicolas Astier for code prototype. - Fix partial match warnings for some
datasummary_*()
tables. No change in behavior. Thanks to @fkohrt for report #804.
Bugs:
- Stars footnotes get properly escaped in some LaTeX configurations. Thanks to @etiennebacher for report #798.
datasummary_*()
functions can be called as arguments in anotherdatasummary_*()
arguments, likeadd_columns
. Thanks to @mronkko for report #799
- Documentation improvements
- Warning when users use
caption
instead oftitle
. Inconsistency with respect totinytable
. - Improved documentation for
title
argument. htest
workaround.
Bugs:
datasummary_correlation()
respects theescape
argument. Issue #772.datasummary_correlation()
supportsdata.table
objects. Issue #771.
New:
modelsummary()
gets agof_function
argument which accepts functions to extract custom information from models.flextable
: Support spanning column headersdatasummary_correlation()
gets astar
argument.datasummary_correlation()
accepts objects produced by thecorrelation
package.datasummary_balance()
:formula
can now include variables on the left-hand side to indicate the subset of columns to summarize:datasummary_balance(mpg + hp ~ am, data = mtcars)
Thanks to @etiennebacher for feature request #751.- Unnecessary text printed to screen on some F sta computations is now suppressed.
- Update to
tinytable
0.3.0
Bugs:
escape
argument not respected indatasummary_df()
. Thanks to @adamaltmejd for report #740datasummary_correlation()
supportsdata.table
. Thanks to volatilehead on Twitter for report #737.- Accepts named
estimate
argument when using shape and statistics are horizontal. Thanks to @iago-pssjd for report #745. - Labelled values but no label for variable broke
datasummary()
. Thanks to @marklhc for report #752. coef_map
does not work when there is agroup
. Thanks to @mccarthy-m-g for report #757.kableExtra
: fix spanning column headers when using theshape
argument.- Multiple footnotes and line breaks in footnotes are now allowed in
tinytable
output. Thanks to
MAJOR BREAKING CHANGE: The default output format is now tinytable
instead of kableExtra
. Learn more about tinytable
here:
https://vincentarelbundock.github.io/tinytable/
To revert to the previous behavior persistently, users can call:
library(modelsummary) config_modelsummary(factory_default = "kableExtra")
Other breaking changes:
- The
statistic_override
argument was replaced byvcov
over 1 year ago, with appropriate deprecation warnings. It is now fully removed. - The
group
argument was replaced byshape
several releases ago. It is now fully removed. datasummary_skim()
- histograms are only available with the
tinytable
backend. This allows a lot of code simplification and more customization. - The order of arguments
type
andoutput
is switched for consistency with other functions. histogram
argument is deprecated.
- histograms are only available with the
New features:
datasummary_skim()
:- New
type="all"
by default to display both numeric and categorical variables in a single table with distinct panels. This feature is only available with thetinytable
backend (default). by
argument allows summarizing numeric variables by group.fun_numeric
argument accepts a list of functions to control the summary columns.
- New
modelsummary()
:statistic
andestimate
can be specified as named vectors to control the names of statistics when displayed in different columns using theshape
argument. (Thanks to @mps9506 for bug report #722)modelsummary(panels, shape = "cbind")
automatically adds column-spanning labels whenpanels
is a named nested list of models.
config_modelsummary()
gets astartup_message
argument to silence the startup message persistently.- Improved documentation and vignettes, providing clearer instructions and examples.
- Updated tests and snapshots to ensure reliability and consistency across changes.
Bug fixes:
- Fixed Issue #399: datasummary_balance() siunitx formatting.
- Fixed Issue #782: Useless warning in some
modelplot()
calls. Thanks to @iago-pssjd for the report and @florence-laflamme for the fix. - Addressed various bugs and made optimizations for better performance and user experience.
tinytable
supports histograms indatasummary_skim()
config_modelsummary()
supportstinytable
factory.
- Support the
tinytable
package as an output format ("factory"): https://vincentarelbundock.github.io/tinytable/ - Quarto:
md
output format is recognized. options(modelsummary_factory_default)
is respected, even in qmd->md documents.
Bugs:
- Some omitted coefficients with
I()
operator in formulas. Issue #693.
Misc:
- Duplicate values in
shape
groups are removed automatically for cleaner labels. - "Title" line no longer indented in markdown tables. Thanks to Ryan Briggs for report #671.
Bugs:
- Small p values were not displayed properly in HTML output using
kableExtra
. Issue #669.
New:
- Minimal support for
Typst
output, with auto-detection in Quarto documents. strip
argument indvnames
.s.value
statistic is now available wheneverp.value
is available. See Greenland (2019).datasummary_skim()
now includes histograms ingt
tables.
Bugs:
- GOF term names get escaped in LaTeX. Thanks to @shreyasgm for reviving Issue #546.
- Conflict with
furrr
generated errors for some models. Thanks to @sammo3182 for Issue #647.
New:
fmt_sci()
can now be used in thefmt
argument for rounding with scientific notation.
Bugs:
- Group separators respect
add_rows
withshape="rbind"
. Thanks to @lrose1 for Report #626. - Bad column with horizontal models in
shape
and grouped estimates. Thanks to @iago-pssjd for Report #631. coef_rename=TRUE
bug with grouped estimates. Thanks to @iago-pssjd for Report #631.- Upstream issue #881 in
parameters
meant thatvcov
was no longer used for confidence intervals.
- Built-in support for markdown tables.
- Package no longer depends on
kableExtra
. Recommends an additional install for other formats. - Persistent configuration of default output format:
config_modelsummary(factory_default = "gt")
shape = "rcollapse"
andshape = "rbind"
glance_custom()
can drop GOF by assigningNA
: https://stackoverflow.com/questions/75215355/assigning-different-coefficient-names-and-goodness-of-fit-statistics-to-differen- When a
statistic
is not available,modelsummary
prints an empty cell instead of returning an error. - "\label{tab:something}" works in
title
even whenescape=TRUE
- Multiple
fixest_multi
objects supported. options(modelsummary_future = FALSE)
disablesfuture
parallelism.
Bug fixes:
statistic=NULL
is now respected whenshape="rbind"
. Thanks to Panos Mavros for report #620.get_estimates()
supportsvcov
string shortcuts and formulas. Thanks to @ethans-carl for report #605.- Quarto and Rmarkdown documents include
situnix
in header automatically for decimal alignement withalign="ddd"
escape
is now respected bymodelsummary
withshape="rbind"
. Thanks to @chickymonkeys for report #622.
Breaking change:
- The default column label style in
modelsummary()
has changed from "Model 1" to "(1)". The benefits are: labels are no longer in English by default; use less horizontal space; eliminate the "Model" redundancy. Unfortunately, this could break code in some edge cases where users rely on column names to manipulate tables. The old behavior can be restored by calling:options(modelsummary_model_labels="model")
New features:
shape="rbind"
to stack multiple regression tables and create "panels" with labelled groups of models.fmt
: new helper functions for different formatting stylesfmt = fmt_decimal(2)
: decimal digitsfmt = fmt_decimal(digits = 2, pdigits = 4)
: decimal digits with p value-specific settingfmt = fmt_sprintf("%.3f")
:sprintf()
decimalfmt = fmt_sprintf("%.3e")
:sprintf()
scientificfmt = fmt_significant(3)
: significant digitsfmt = fmt_statistic("estimate" = 2, "std.error" = 3)
: statistic-specific formattingfmt = fmt_term("(Intercept)" = 2, "hp" = 3)
: term-specific formattingfmt = fmt_identity()
: raw values
- New styles for default column labels in
modelsummary
, such as Roman Numerals or letters in parentheses.- Set the style with a global option:
options(modelsummary_model_labels = "roman")
- Supported styles: "model", "arabic", "letters", "roman", "(arabic)", "(letters)", "(roman)""
- Set the style with a global option:
modelplot(draw = FALSE)
now returns ap.value
column. This allows conditional aesthetics (see themodelplot
vignette).- Better integration with the
marginaleffects
package.
Bugs:
- Some
fixest
models returns useless "group.x" and "group.y" columns. Isse #591. Thanks to Adam Altmejd for the report.
Breaking change:
- With the
shape
andoutput="dataframe"
arguments, there always used to be agroup
column. Now, this column has the same name as the variable in theshape
formula ("response", "component", etc.).
New features:
shape
can include multiple groups.coef_rename
can be an unnamed vector of length equal to the number of terms in the final table, obtained aftercoef_map
andcoef_omit
are applied and models are merged.coef_omit
accepts numeric indices. Positive values: coefficients to omit. Negative values: coefficients to keep.datasummary_skim
: Increased maximum number of variables to 250.- Quarto notebooks compile to Word and Markdown automatically.
Bug fixes:
- Order of notes preserved in some output format (Issue #577)
Breaking change:
- Requires
siunitx
version 3.0.25 LaTeX package. - The
title
argument now respects theescape
argument for allkableExtra
output formats. This can break tables in which users manually escaped titles.
New features:
- "d" is accepted for decimal-alignment in the
align
argument for alloutput
formats.modelsummary(mod, align = "ld")
- New
update_modelsummary()
function makes it easy to install the dev versions ofmodelsummary
and its dependencies (mostly useful for Vincent and people who report bugs). - Rounding: display at least one significant digit by default.
- Automatic renaming of
haven
labels inmodelsummary()
,datasummary()
,datasummary_skim()
- Allow
output = "filename.csv"
- Allow
output = "filename.xlsx"
add_columns
argument supported inmodelsummary()
datasummary_balance
supports thestars
argument.- Allow stars and confidence intervals with
align = "d"
column.
Bug fixes:
- In some locales, the HTML minus sign created problems in the output. We only use it in "known" locales.
- Many minor bug fixes
- Minor release to fix CRAN failure
shape
argument accepts interactions with the colon ":" character. This combines two columns into one, which can be useful to display terms and group names in a single column.- Parallelization using
parallel::mclapply
. See?modelsummary
modelsummary
no longer computes confidence intervals when not necessary, which can save some time. Also see:conf_level=NULL
- Added log likelihood to GOF for lm and glm models.
- Removed extraneous warnings
- Bug fixes
This first major release accompanies the publication of an article in the Journal of Statistical Software:
Arel-Bundock, Vincent (2022). "modelsummary: Data and Model Summaries in R." Journal of Statistical Software, 103(1), 1-23. doi:10.18637/jss.v103.i01 https://doi.org/10.18637/jss.v103.i01.'
If you like modelsummary
, please cite the JSS article and tell your friends about it.
Minor changes:
gof_map="all"
includes all available statistics.gof_map="none"
excludes all statistics.- Bug fixes
- Better printout for term names in mixed-effects models
- {brms} and {stanreg} models now extracted with
diagnostic=NULL
andtest=NULL
by default for speed.
Breaking changes:
modelsummary_wide
is no longer available. Use theshape
argument ofmodelsummary
instead.modelsummary
now uses theeasystats
packages (performance
andparameters
) to extract estimates and goodness-of-fit statistics instead ofbroom
. This can be reverted by setting a global option:options(modelsummary_get="broom")
. This change aims to (1) increase consistency across models, (2) improve the developers' ability to push bug fixes upstream when necessary, and (3) improve support for mixed effects, bayesian, and GAM models. The two main drawbacks are: (a) The set of printed statistics may be slightly different from previous versions ofmodelsummary
(b) The group identifiers used in theshape
formula will also be different for certain models (e.g., innnet::multinom
,y.level
becomesresponse
).
New features:
- The
shape
argument accepts a formula and can reshape information in myriad ways. Deprecates thegroup
argument. Examples:~ statistic
: statistics are shown horizontally in distinct columns.model ~ term
: models in rows and terms in columns.term + y.level + statistic ~ model
: grouped coefficients for multivariate outcome innnet::multinom
y.level ~ model
: partial match is the same as the previous formula
- Format distinct statistics differently by passing a named list to
fmt
:modelsummary(mod, fmt = list(estimate = 2, std.error = 1, rmse = 4))
- Use
glue
to apply functions to numeric values by settingfmt = NULL
. Example:modelsummary(model, fmt = NULL, estimate = "{log(estimate)}")
- Update for breaking changes after fixest 0.10.4
Bug fixes:
group_map
rename issue- Residual standard error mistakenly labelled "RMSE" in
lm
models. datasummary_skim
output to jpg should now worksescape
fixes
- New
exponentiate
argument formodelsummary()
andmodelplot()
gof_map
accepts a vector such asc("rmse", "nobs", "r.squared")
- Drop
rlang
dependency - Bug fixes
datasummary_balance
:
- Accepts
~ 1
as a formula to summarize all data.
Misc:
- documentation improvements
- RMSE included by default in models of class
lm
modelsummary
:
vcov
strings likeHC1
andRobust
are now case-insensitivegof_map
now accepts a data.frame or tibble with afmt
list-column which includes functions (see Examples in docs)R2
is no longer computed by default for bayesian and mixed effects models. An informative one-time warning is printed about themetrics
argument.
datasummary_skim
:
- Histograms now work in Jupyter
- Bugfix: harmless error message is no longer printed
kableExtra
factory:
- The
col.names
argument can now be passed tokableExtra::kbl
through the ... ellipsis.
Misc:
- Many small improvements to the vignettes and docs
output = "github_document"
is now supported
- Bug fix: siunitx and rounding NA
modelsummary
:
- F statistic takes into account
vcov
argument - Support group = group ~ model + term
datasummary_balance
:
- Weighted means and standard deviations are now supported. Counts and percentages are not, but raise a warning.
Misc:
- Bugfix: rounding in LaTeX w/ siunitx and NaN entries.
- output='jupyter' no longer prints an extraneous TRUE to the notebook
modelsummary
:
- Improved
vcov
argument handling forfixest
models (#357 by @grantmcdermott) - Fix display of
fixest::i()
variables and interactions (#361 by @grantmcdermott) - Consistent display of clustered SEs (#356, #363 and #366 by @grantmcdermott)
datasummary_correlation
:
add_rows
andadd_columns
arguments are now available here.
Misc:
- Global options for output factories are renamed:
modelsummary_factory_default
,modelsummary_factory_html
, etc. - Hot fix for change in R-devel behavior or
intersect
Bug fixes:
datasummary_balance
: escape variable names whenescape=TRUE
- Blogdown LaTeX dependency bug when output is HTML
Breaking change:
- Support for
dcolumn
for dot-aligned columns is deprecated. Use "d" in thealign
argument instead.
Other changes:
- LaTeX output: Numeric entries are wrapped in the
\num{}
function from thesiunitx
package by default. This produces much nicer formatting. This can be disabled with a global option. See?modelsummary
- The
align
argument accepts a "d" column for dot-alignment using thesiunitx
LaTeX package:align="ldd"
. - HTML tables display proper minus signs.
- New
escape
argument in most table-building functions. - LaTeX output accepts the
threeparttable=TRUE
argument through...
- No more dependency on
tidyr
modelsummary
:
group
: The order of terms in the formula determines the order of rows/columns
modelsummary_wide
:
- Note: This function will eventually be deprecated
- Bugfix with statistic=NULL.
modelplot
:
- Preserves order of models in the user-supplied list
datasummary_crosstab
:
statistic=NULL
produces a very basic crosstab
datasummary_crosstab
:
- Default alignment "lrrrrr" consistent with other datasummary_* functions
modelsummary
:
- Disable stars footnote with
options("modelsummary_stars_note" = FALSE)
longtable=TRUE
works for LaTeX output- Interactions with ":" are no longer converted to "x" when
coef_map
orcoef_rename
are used. group = model ~ term + group
is now supported.
datasummary_skim
:
datasummary_skim("categorical")
keepsNA
by default. Users can convert variables to factors before callingdatasummary_skim
to excludeNA
.
Other:
- Improved warnings for bad calls:
modelsummary(model1, model2)
gt
titles use the newcaption
argument in thegt 0.3.0
function- Bug fix: Overaggressive tests for glue strings prevented functions inside {}
Breaking change:
- The default significance markers
stars=TRUE
have been updated to be consistent with the default output from base R (e.g., in summary.lm). The new significance thresholds are: "+" p < 0.1, "" p < 0.05, "" p < 0.01, "" p < 0.001
datasummary_crosstab
:
- New function to produce cross-tabulations
datasummary
:
N
is smart enough to return either the number of elements in a subset or the number of non-missing observations in a variable
datasummary_balance
:
- Keeps
NA
s in factor variables by default. Users can convert their variables with thefactor()
function to omitNA
s automatically.
modelsummary
:
- themes can be set using global options (experimental)
- new vcov options: "bootstrap", "HAC", "NeweyWest", "Andrews", "panel-corrected", "weave", "outer-product"
- A valid
get_gof
(glance
) is now optional. - ... is pushed through to
sandwich
, which allows things like:modelsummary(model, vcov = "bootstrap", R = 1000, cluster = "firm")
Other:
- Jupyter notebook support via
output="jupyter"
- Bug fixes
modelsummary
:
- new arguments for
modelsummary
:group
andgroup_map
for grouped parameters (e.g., outcome levels in multinomial logit or components of gamlss model). dvnames()
makes it easy to get dependent variable column titles (thanks to @NickCH-K)output="modelsummary_list"
to save a lightweight list-based representation of the table which can be saved and fed tomodelsummary
once more to get a full table.vcov
adds a row to note the type of standard errors.modelsummary
accepts a single model with multiplevcov
s.get_gof
forwards ... tomodel_performance
coef_map
accepts unnamed vectors for easy subsettingfixest::fixest_multi
supportoptions(modelsummary_get)
to set the order of extraction functions to use under the hood (broom vs. easystats vs. all)metrics
argument ofperformance::model_performance
is available viamodelsummary
's ... ellipsis to limit the GOF statistics in Bayesian models.- users can omit the stars legend note by using glue strings:
estimate="{estimate}{stars}"
- output="html" can use
gt
by settingoptions(modelsummary_factory_html="gt")
datasummary_correlation
:
- passes
...
forward - new function:
datasummary_correlation_format
datasummary_correlation
'smethod
argument accepts functions and "pearspear" (thanks to @joachim-gassen)
datasummary
:
datasummary
functions androunding
accept ..., big.mark, etc.
datasummary_skim
:
- now works with haven_labeled numeric
- faster tables with bayesian models.
Bug fixes and lints
- new output format: latex_tabular
tidy_custom
allows partial term matchesmodelsummary(coef_rename)
accepts functions- new function
coef_rename
for use inmodelsummary(coef_rename=coef_rename)
modelplot
acceptsadd_rows
to add reference categories- informative error message when estimate or statistic is not available
- bug fixes
statistic_override
becomesvcov
- vcov accepts shortcuts: "robust", "stata", "HC0", etc.
- vcov accepts formulas for clustered SEs: ~group
- modelsummary_wide has a new "stacking" argument
- html horizontal rule to separate estimates form gof
- gof_map accepts list of lists. only needs 3 columns.
- support officedown Rmd
- estimate accepts a vector for per model estimates
- options(modelsummary_default) can be markdown, html, latex
- bug: passing arguments through ...
- bug: stars and rounding
- glue format for
estimate
andstatistic
- easystats support for model info extraction
- deprecate statistic_vertical
- deprecate extract_models. Use modelsummary(output="dataframe") instead.
- modelplot pushes ... through to modelsummary(output="dataframe")
- datasummary_skim(type="dataset")
- gof_map omits by default
- datasummary_balance uses row percentages
- statistic_override does not require a list
- statistic_override accepts a single model
- N function for well formatted N in datasummary
- Bug fixes
- new function: modelsummary_wide
- coef_omit and gof_omit use grepl(perl=TRUE)
- fmt accepts integer, string or function and respects options(OutDec=",")
- align argument for modelsummary
- align is more liberal to accept dcolumn alignment
- glance_custom methods for lfe and fixest
- bug fixes
- new argument: coef_rename
- new function: datasummary_df
- preserve term order in modelsummary
- refactor datasummary_balance
- datasummary_skim uses svg histograms instead of unicode
- removed 5 dependencies
- pass ... to kableExtra::kbl for more customization
- test improvements
- internal code style
- bug fixes
- bug fixes
- default HTML output factory is now kableExtra
- interaction ":" gsubbed by "\u00d7"
- dependencies: removed 1 depends, 3 imports, and 3 suggests
- word_document knitr works out-of-the-box
- bug fixes
- glance_custom.fixest ships with modelsummary
- datasummary
- datasummary_skim
- datasummary_balance
- datasummary_correlation
- modelplot
- allow duplicate model names
- bug: can't use coef_map with multiple statistics (thanks @sbw78)
- bug: wrong number of stars w/ statistic='p.value' (thanks @torfason)
- output='data.frame'.
extract
is no longer documented.
- add_rows now accepts a data.frame with "position" and "section" columns
- add_rows_location is deprecated
- bug in sanity_output prevented overwriting files
- huxtable support
- flextable support
- estimate argument
- fixest tidiers
- website and vignette improvements
- gof_map additions
- glance_custom
- tidy_custom
- Out-of-the-box Rmarkdown compilation to HTML, PDF, RTF
- kableExtra output format for LaTeX and Markdown
- Support for
threeparttable
, colors, and many other LaTeX options - Deprecated arguments: filename, subtitle
- Deprecated functions: clean_latex, knit_latex
pkgdown
website and doc improvementsmitools
tidiers- New tests
- Convenience function to render markdown in row/column labels
- bug: breakage when all GOF were omitted
- Clean up manual with @keywords internal
- bug: tidyr import
- gt is now available on CRAN
- new latex_env argument for knit_latex and clean_latex
- bug when all gof omitted
- bug in statistic_override with functions
- bug caused by upstream changes in tab_style
- bug caused by upstream changes in filename='rtf'
- Allow multiple rows of uncertainty estimates per coefficient
- Preserve add_rows order
- Display uncertainty estimates next to the coefficient with statistic_vertical = FALSE
- Better clean_latex function
- Can display R2 and confidence intervals for mice-imputed lm-models
- Internal functions have @keywords internal to avoid inclusion in docs
- Statistic override accepts pre-formatted character vectors
- Initial release (gt still needs to be installed from github)