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.95, verbose = TRUE, ...)
r2_posterior(model, ...)
# S3 method for brmsfit
r2_posterior(model, verbose = TRUE, ...)
# S3 method for stanreg
r2_posterior(model, verbose = TRUE, ...)
# S3 method for BFBayesFactor
r2_posterior(model, average = FALSE, prior_odds = NULL, verbose = TRUE, ...)
```

model | A Bayesian regression model (from |
---|---|

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 |

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.

`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.

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)
}
#> Loading required package: rstantools
#> This is rstantools version 2.1.1
#> Warning: Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
#> Running the chains for more iterations may help. See
#> http://mc-stan.org/misc/warnings.html#bulk-ess
#> Warning: Bulk Effective Samples Size (ESS) is too low, indicating posterior means and medians may be unreliable.
#> Running the chains for more iterations may help. See
#> http://mc-stan.org/misc/warnings.html#bulk-ess
#> Warning: Tail Effective Samples Size (ESS) is too low, indicating posterior variances and tail quantiles may be unreliable.
#> Running the chains for more iterations may help. See
#> http://mc-stan.org/misc/warnings.html#tail-ess
#> # Bayesian R2 with Compatibility Interval
#>
#> Conditional R2: 0.953 (95% CI [0.942, 0.964])
#> Marginal R2: 0.823 (95% CI [0.710, 0.885])
if (FALSE) {
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)
}
}
```