Bayesian R2
Compute R2 for Bayesian models. For mixed models (including a random part),
it additionally computes the R2 related to the fixed effects only (marginal R2).
While r2_bayes()
returns a single R2 value, r2_posterior()
returns
a posterior sample of Bayesian R2 values.
r2_bayes(model, robust = TRUE, ci = 0.89, verbose = TRUE, ...) r2_posterior(model, ...) ## S3 method for class 'brmsfit' r2_posterior(model, verbose = TRUE, ...) ## S3 method for class 'stanreg' r2_posterior(model, verbose = TRUE, ...) ## S3 method for class 'BFBayesFactor' r2_posterior(model, average = FALSE, prior_odds = NULL, verbose = TRUE, ...)
model |
A Bayesian regression model (from brms, rstanarm, BayesFactor, etc). |
robust |
Logical, if |
ci |
Value or vector of probability of the CI (between 0 and 1) to be estimated. |
verbose |
Toggle off warnings. |
... |
Arguments passed to |
average |
Compute model-averaged index? See |
prior_odds |
Optional vector of prior odds for the models compared to the first model (or the denominator, for |
r2_bayes()
returns an "unadjusted" R2 value. See r2_loo
to calculate a LOO-adjusted R2, which comes conceptually closer to an
adjusted R2 measure.
For mixed models, the conditional and marginal R2 are returned. The marginal
R2 considers only the variance of the fixed effects, while the conditional
R2 takes both the fixed and random effects into account.
r2_posterior()
is the actual workhorse for r2_bayes()
and
returns a posterior sample of Bayesian R2 values.
A list with the Bayesian R2 value. For mixed models, a list with the Bayesian R2 value and the marginal Bayesian R2 value. The standard errors and credible intervals for the R2 values are saved as attributes.
Gelman, A., Goodrich, B., Gabry, J., & Vehtari, A. (2018). R-squared for Bayesian regression models. The American Statistician, 1–6. doi: 10.1080/00031305.2018.1549100
library(performance) if (require("rstanarm") && require("rstantools")) { model <- stan_glm(mpg ~ wt + cyl, data = mtcars, chains = 1, iter = 500, refresh = 0) r2_bayes(model) model <- stan_lmer( Petal.Length ~ Petal.Width + (1 | Species), data = iris, chains = 1, iter = 500, refresh = 0 ) r2_bayes(model) } ## Not run: if (require("BayesFactor")) { data(mtcars) BFM <- generalTestBF(mpg ~ qsec + gear, data = mtcars, progress = FALSE) FM <- lm(mpg ~ qsec + gear, data = mtcars) r2_bayes(FM) r2_bayes(BFM[3]) r2_bayes(BFM, average = TRUE) # across all models # with random effects: mtcars$gear <- factor(mtcars$gear) model <- lmBF( mpg ~ hp + cyl + gear + gear:wt, mtcars, progress = FALSE, whichRandom = c("gear", "gear:wt") ) r2_bayes(model) } if (require("brms")) { model <- brms::brm(mpg ~ wt + cyl, data = mtcars) r2_bayes(model) model <- brms::brm(Petal.Length ~ Petal.Width + (1 | Species), data = iris) r2_bayes(model) } ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.