Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/n-kall/priorsense
priorsense: an R package for prior diagnostics and sensitivity
https://github.com/n-kall/priorsense
bayes bayesian bayesian-data-analysis bayesian-methods prior-distribution r r-package sensitivity-analysis stan
Last synced: 6 days ago
JSON representation
priorsense: an R package for prior diagnostics and sensitivity
- Host: GitHub
- URL: https://github.com/n-kall/priorsense
- Owner: n-kall
- License: gpl-3.0
- Created: 2021-07-07T12:25:06.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-11-01T13:17:14.000Z (about 2 months ago)
- Last Synced: 2024-12-04T11:37:42.963Z (18 days ago)
- Topics: bayes, bayesian, bayesian-data-analysis, bayesian-methods, prior-distribution, r, r-package, sensitivity-analysis, stan
- Language: R
- Homepage: https://n-kall.github.io/priorsense/
- Size: 7.58 MB
- Stars: 56
- Watchers: 6
- Forks: 6
- Open Issues: 7
-
Metadata Files:
- Readme: README.Rmd
- Changelog: NEWS.md
- License: LICENSE.md
Awesome Lists containing this project
README
---
output: github_document
---```{r, include = FALSE}
ggplot2::theme_set(bayesplot::theme_default(base_family = "sans"))
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```# priorsense
[![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-green.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable)
[![CRAN status](https://www.r-pkg.org/badges/version/priorsense)](https://CRAN.R-project.org/package=priorsense)
[![R-CMD-check](https://github.com/n-kall/priorsense/workflows/R-CMD-check/badge.svg)](https://github.com/n-kall/priorsense/actions)## Overview
priorsense provides tools for prior diagnostics and sensitivity
analysis.It currently includes functions for performing power-scaling
sensitivity analysis on Stan models. This is a way to check how
sensitive a posterior is to perturbations of the prior and likelihood
and diagnose the cause of sensitivity. For efficient computation,
power-scaling sensitivity analysis relies on Pareto smoothed
importance sampling (Vehtari et al., 2024) and importance weighted
moment matching (Paananen et al., 2021).Power-scaling sensitivity analysis and priorsense are described in
Kallioinen et al. (2023).## Installation
Download the stable version from CRAN with:
```{r, eval = F}
install.packages("priorsense")
```Download the development version from [GitHub](https://github.com/) with:
```{r, eval = F}
# install.packages("remotes")
remotes::install_github("n-kall/priorsense", ref = "development")
```## Usage
priorsense works with models created with rstan, cmdstanr or brms, or
with draws objects from the posterior package.### Example
Consider a simple univariate model with unknown mu and sigma fit to
some data y (available
via`example_powerscale_model("univariate_normal")`):```stan
data {
int N;
array[N] real y;
}
parameters {
real mu;
real sigma;
}
model {
// priors
target += normal_lpdf(mu | 0, 1);
target += normal_lpdf(sigma | 0, 2.5);
// likelihood
target += normal_lpdf(y | mu, sigma);
}
generated quantities {
vector[N] log_lik;
real lprior;
// log likelihood
for (n in 1:N) log_lik[n] = normal_lpdf(y[n] | mu, sigma);
// joint log prior
lprior = normal_lpdf(mu | 0, 1) +
normal_lpdf(sigma | 0, 2.5);
```We first fit the model using Stan:
```{r, eval = T, results = F, message = F, warning = F}
library(priorsense)normal_model <- example_powerscale_model("univariate_normal")
fit <- rstan::stan(
model_code = normal_model$model_code,
data = normal_model$data,
refresh = FALSE,
seed = 123
)
```Once fit, sensitivity can be checked as follows:
```{r, eval = T}
powerscale_sensitivity(fit)
```To visually inspect changes to the posterior, use one of the
diagnostic plot functions. Estimates with high Pareto-k values may be
inaccurate and are indicated.```{r dens_plot, eval = T, out.width = '70%'}
powerscale_plot_dens(fit)
``````{r ecdf_plot, eval = T, out.width = '70%'}
powerscale_plot_ecdf(fit)
``````{r quants_plot, eval = T, out.width = '70%'}
powerscale_plot_quantities(fit)
```In some cases, setting `moment_match = TRUE` will improve the
unreliable estimates at the cost of some further computation. This
requires the [`iwmm` package](https://github.com/topipa/iwmm).## References
Noa Kallioinen, Topi Paananen, Paul-Christian Bürkner, Aki Vehtari
(2023). Detecting and diagnosing prior and likelihood sensitivity
with power-scaling. Statistics and Computing. 34, 57.
https://doi.org/10.1007/s11222-023-10366-5Topi Paananen, Juho Piironen, Paul-Christian Bürkner, Aki Vehtari (2021).
Implicitly adaptive importance sampling. Statistics and Computing
31, 16. https://doi.org/10.1007/s11222-020-09982-2Aki Vehtari, Daniel Simpson, Andrew Gelman, Yuling Yao, Jonah Gabry (2024).
Pareto smoothed importance sampling. Journal of
Machine Learning Research. 25, 72. https://jmlr.org/papers/v25/19-556.html