Learn R Programming

bayestestR (version 0.2.0)

bayesfactor_savagedickey: Savage-Dickey density ratio Bayes Factor (BF)

Description

This method computes the ratio between the density of a single value (typically the null) of two distributions. When the compared distributions are the posterior and the prior distributions, this results in an approximation of a Bayes factor against the (point) null model.

Usage

bayesfactor_savagedickey(posterior, prior = NULL,
  direction = "two-sided", hypothesis = 0, verbose = TRUE, ...)

# S3 method for numeric bayesfactor_savagedickey(posterior, prior = NULL, direction = "two-sided", hypothesis = 0, verbose = TRUE, ...)

# S3 method for stanreg bayesfactor_savagedickey(posterior, prior = NULL, direction = "two-sided", hypothesis = 0, verbose = TRUE, effects = c("fixed", "random", "all"), ...)

# S3 method for brmsfit bayesfactor_savagedickey(posterior, prior = NULL, direction = "two-sided", hypothesis = 0, verbose = TRUE, effects = c("fixed", "random", "all"), ...)

# S3 method for data.frame bayesfactor_savagedickey(posterior, prior = NULL, direction = "two-sided", hypothesis = 0, verbose = TRUE, ...)

Arguments

posterior

Vector representing a posterior distribution, or a stanreg / brmsfit object (see Details).

prior

Vector representing a prior distribution (if posterior is a vector), or a data frame with column names matching posterior's (if posterior is a data frame). Otherwise ignored.

direction

Test type. One of 0, "two-sided" (default, two tailed), -1, "left" (left tailed) or 1, "right" (right tailed).

hypothesis

Value to be tested against (usually 0 in the context of null hypothesis testing).

verbose

Toggle off warnings.

...

Currently not used.

effects

Should results for fixed effects, random effects or both be returned? Only applies to mixed models. May be abbreviated.

Value

A data frame containing the Bayes factor representing evidence against the (point) null effect model.

Details

This method is used to compute Bayes factors based on prior and posterior distributions. When posterior is a model (stanreg, brmsfit), posterior and prior samples are extracted for each parameter, and Savage-Dickey Bayes factors are computed for each parameter.

NOTE: For brmsfit models, the model must have been fitted with custom (non-default) priors. See example below.

A Bayes factor greater than 1 can be interpereted as evidence against the null, at which one convention is that a Bayes factor greater than 3 can be considered as "substantial" evidence against the null (and vice versa, a Bayes factor smaller than 1/3 indicates substantial evidence in favor of the null-hypothesis) (Wetzels et al. 2011).

References

  • Wagenmakers, E. J., Lodewyckx, T., Kuriyal, H., and Grasman, R. (2010). Bayesian hypothesis testing for psychologists: A tutorial on the Savage-Dickey method. Cognitive psychology, 60(3), 158-189.

  • Wetzels, R., Matzke, D., Lee, M. D., Rouder, J. N., Iverson, G. J., and Wagenmakers, E.-J. (2011). Statistical Evidence in Experimental Psychology: An Empirical Comparison Using 855 t Tests. Perspectives on Psychological Science, 6(3), 291<U+2013>298. 10.1177/1745691611406923

  • Heck, D. W. (2019). A caveat on the Savage<U+2013>Dickey density ratio: The case of computing Bayes factors for regression parameters. British Journal of Mathematical and Statistical Psychology, 72(2), 316-333.

Examples

Run this code
# NOT RUN {
library(bayestestR)

prior <- distribution_normal(1000, mean = 0, sd = 1)
posterior <- distribution_normal(1000, mean = .5, sd = .3)

bayesfactor_savagedickey(posterior, prior)

# }
# NOT RUN {
# rstanarm models
# ---------------
library(rstanarm)
stan_model <- stan_lmer(extra ~ group + (1 | ID), data = sleep)
bayesfactor_savagedickey(stan_model)

# brms models
# -----------
library(brms)
my_custom_priors <-
  set_prior("student_t(3, 0, 1)", class = "b") +
  set_prior("student_t(3, 0, 1)", class = "sd", group = "ID")

brms_model <- brm(extra ~ group + (1 | ID),
  data = sleep,
  prior = my_custom_priors
)
bayesfactor_savagedickey(brms_model)
# }
# NOT RUN {
# }

Run the code above in your browser using DataLab