Generate a correlation table for all numeric variables in your dataset.
Generate a correlation table for all numeric variables in your dataset.
The names of the variables displayed in the correlation table are the names of the columns in the data. You can rename those columns (with or without spaces) to produce a table of human-readable variables. See the Details and Examples sections below, and the vignettes on the modelsummary website:
Supported object types: "default", "html", "markdown", "latex", "latex_tabular", "typst", "data.frame", "tinytable", "gt", "kableExtra", "huxtable", "flextable", "DT", "jupyter". The "modelsummary_list" value produces a lightweight object which can be saved and fed back to the modelsummary function.
The "default" output format can be set to "tinytable", "kableExtra", "gt", "flextable", "huxtable", "DT", or "markdown"
If the user does not choose a default value, the packages listed above are tried in sequence.
Warning: Users should not supply a file name to the output argument if they intend to customize the table with external packages. See the 'Details' section.
LaTeX compilation requires the booktabs and siunitx packages, but siunitx can be disabled or replaced with global options. See the 'Details' section.
method: character or function
character: "pearson", "kendall", "spearman", or "pearspear" (Pearson correlations above and Spearman correlations below the diagonal)
function: takes a data.frame with numeric columns and returns a square matrix or data.frame with unique row.names and colnames corresponding to variable names. Note that the datasummary_correlation_format can often be useful for formatting the output of custom correlation functions.
fmt: how to format numeric values: integer, user-supplied function, or modelsummary function.
Integer: Number of decimal digits
User-supplied functions:
Any function which accepts a numeric vector and returns a character vector of the same length.
modelsummary functions:
fmt = fmt_significant(2): Two significant digits (at the term-level)
fmt = fmt_sprintf("%.3f"): See ?sprintf
fmt = fmt_identity(): unformatted raw values
align: A string with a number of characters equal to the number of columns in the table (e.g., align = "lcc"). Valid characters: l, c, r, d.
"l": left-aligned column
"c": centered column
"r": right-aligned column
"d": dot-aligned column. For LaTeX/PDF output, this option requires at least version 3.0.25 of the siunitx LaTeX package. See the LaTeX preamble help section below for commands to insert in your LaTeX preamble.
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.
add_columns: a data.frame (or tibble) with the same number of rows as your main table.
title: string. Cross-reference labels should be added with Quarto or Rmarkdown chunk options when applicable. When saving standalone LaTeX files, users can add a label such as \\label{tab:mytable} directly to the title string, while also specifying escape=FALSE.
notes: list or vector of notes to append to the bottom of the table.
escape: boolean TRUE escapes or substitutes LaTeX/HTML characters which could prevent the file from compiling/displaying. TRUE escapes all cells, captions, and notes. Users can have more fine-grained control by setting escape=FALSE and using an external command such as: modelsummary(model, "latex") |> tinytable::format_tt(tab, j=1:5,escape=TRUE)
The behavior of modelsummary can be modified by setting global options. In particular, most of the arguments for most of the package's functions cna be set using global options. For example:
modelsummary supports 6 table-making packages: tinytable, kableExtra, gt, flextable, huxtable, and DT. Some of these packages have overlapping functionalities. To change the default backend used for a specific file format, you can use ' the options function:
modelsummary can use two sets of packages to extract information from statistical models: the easystats family (performance and parameters) and broom. By default, it uses easystats first and then falls back on broom in case of failure. You can change the order of priorities or include goodness-of-fit extracted by both packages by setting:
options(modelsummary_get = "easystats")
options(modelsummary_get = "broom")
options(modelsummary_get = "all")
Formatting numeric entries
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:
When creating LaTeX via the tinytable backend (default in version 2.0.0 and later), it is useful to include the following commands in the LaTeX preamble of your documents. These commands are automatically added to the preamble when compiling Rmarkdown or Quarto documents, except when the modelsummary() calls are cached.
library(modelsummary)
# clean variable names (base R)
dat <- mtcars[, c("mpg", "hp")]
colnames(dat) <- c("Miles / Gallon", "Horse Power")
datasummary_correlation(dat)
# clean variable names (tidyverse)
library(tidyverse)
dat <- mtcars %>%
select(`Miles / Gallon` = mpg,
`Horse Power` = hp)
datasummary_correlation(dat)
# `correlation` package objects
if (requireNamespace("correlation", quietly = TRUE)) {
co <- correlation::correlation(mtcars[, 1:4])
datasummary_correlation(co)
# add stars to easycorrelation objects
datasummary_correlation(co, stars = TRUE)
}
# alternative methods
datasummary_correlation(dat, method = "pearspear")
# custom function
cor_fun <- function(x) cor(x, method = "kendall")
datasummary_correlation(dat, method = cor_fun)
# rename columns alphabetically and include a footnote for reference
note <- sprintf("(%s) %s", letters[1:ncol(dat)], colnames(dat))
note <- paste(note, collapse = "; ")
colnames(dat) <- sprintf("(%s)", letters[1:ncol(dat)])
datasummary_correlation(dat, notes = note)
# `datasummary_correlation_format`: custom function with formatting
dat <- mtcars[, c("mpg", "hp", "disp")]
cor_fun <- function(x) {
out <- cor(x, method = "kendall")
datasummary_correlation_format(
out,
fmt = 2,
upper_triangle = "x",
diagonal = ".")
}
datasummary_correlation(dat, method = cor_fun)
# use kableExtra and psych to color significant cells
library(psych)
library(kableExtra)
dat <- mtcars[, c("vs", "hp", "gear")]
cor_fun <- function(dat) {
# compute correlations and format them
correlations <- data.frame(cor(dat))
correlations <- datasummary_correlation_format(correlations, fmt = 2)
# calculate pvalues using the `psych` package
pvalues <- psych::corr.test(dat)$p
# use `kableExtra::cell_spec` to color significant cells
for (i in 1:nrow(correlations)) {
for (j in 1:ncol(correlations)) {
if (pvalues[i, j] < 0.05 && i != j) {
correlations[i, j] <- cell_spec(correlations[i, j], background = "pink")
}
}
}
return(correlations)
}
# The `escape=FALSE` is important here!
datasummary_correlation(dat, method = cor_fun, escape = FALSE)
References
Arel-Bundock V (2022). “modelsummary: Data and Model Summaries in R.” Journal of Statistical Software, 103(1), 1-23. tools:::Rd_expr_doi("10.18637/jss.v103.i01") .'