From a5c3f6c785db405cd116931ba9b03dea27c87fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul-Christian=20B=C3=BCrkner?= Date: Fri, 5 Jul 2024 10:45:08 +0200 Subject: [PATCH] update website --- _pkgdown.yml | 11 +- docs/404.html | 2 +- docs/CONTRIBUTING.html | 162 ++++++ docs/LICENSE-text.html | 2 +- docs/LICENSE.html | 2 +- docs/articles/index.html | 9 +- docs/articles/pareto_diagnostics.html | 471 ++++++++++++++++++ docs/articles/posterior.html | 113 ++--- docs/articles/rvar.html | 56 ++- .../figure-html/data_frame_plot-1.png | Bin 39369 -> 39882 bytes .../rvar_files/figure-html/mixture-1.png | Bin 32373 -> 32325 bytes docs/authors.html | 14 +- docs/index.html | 12 +- docs/news/index.html | 19 +- docs/pkgdown.yml | 5 +- docs/pull_request_template.html | 2 +- docs/reference/as_rvar.html | 2 +- docs/reference/as_rvar_factor.html | 2 +- docs/reference/autocorrelation.html | 2 +- docs/reference/autocovariance.html | 2 +- docs/reference/bind_draws.html | 4 +- docs/reference/chol.rvar.html | 2 +- docs/reference/diag-rvar-method.html | 2 +- docs/reference/diagnostics.html | 4 +- docs/reference/dissent.html | 2 +- docs/reference/draws-index.html | 46 +- docs/reference/draws.html | 2 +- docs/reference/draws_array.html | 6 +- docs/reference/draws_df.html | 6 +- docs/reference/draws_list.html | 6 +- docs/reference/draws_matrix.html | 6 +- docs/reference/draws_of.html | 2 +- docs/reference/draws_rvars.html | 6 +- docs/reference/draws_summary.html | 2 +- docs/reference/drop-rvar-method.html | 2 +- docs/reference/entropy.html | 2 +- docs/reference/ess_basic.html | 6 +- docs/reference/ess_bulk.html | 6 +- docs/reference/ess_mean.html | 2 +- docs/reference/ess_quantile.html | 6 +- docs/reference/ess_sd.html | 6 +- docs/reference/ess_tail.html | 6 +- docs/reference/example_draws.html | 2 +- docs/reference/extract_variable.html | 20 +- docs/reference/extract_variable_array.html | 207 ++++++++ docs/reference/extract_variable_matrix.html | 18 +- docs/reference/for_each_draw.html | 5 +- docs/reference/index.html | 58 ++- docs/reference/is_rvar.html | 2 +- docs/reference/is_rvar_factor.html | 2 +- docs/reference/match.html | 2 +- docs/reference/mcse_mean.html | 6 +- docs/reference/mcse_quantile.html | 6 +- docs/reference/mcse_sd.html | 6 +- docs/reference/merge_chains.html | 2 +- docs/reference/modal_category.html | 2 +- docs/reference/mutate_variables.html | 4 +- docs/reference/order_draws.html | 2 +- docs/reference/pareto_diags.html | 74 ++- docs/reference/pareto_khat.html | 65 ++- docs/reference/pareto_smooth.html | 89 ++-- docs/reference/posterior-package.html | 22 +- docs/reference/print.draws_array.html | 2 +- docs/reference/print.draws_df.html | 2 +- docs/reference/print.draws_list.html | 2 +- docs/reference/print.draws_matrix.html | 2 +- docs/reference/print.draws_rvars.html | 2 +- docs/reference/print.draws_summary.html | 2 +- docs/reference/print.rvar.html | 2 +- docs/reference/ps_convergence_rate.html | 173 +++++++ docs/reference/ps_khat_threshold.html | 171 +++++++ docs/reference/ps_min_ss.html | 169 +++++++ docs/reference/ps_tail_length.html | 169 +++++++ docs/reference/quantile2.html | 2 +- docs/reference/r_scale.html | 2 +- docs/reference/rdo.html | 4 +- docs/reference/reexports.html | 2 +- docs/reference/rename_variables.html | 12 +- docs/reference/repair_draws.html | 2 +- docs/reference/resample_draws.html | 2 +- docs/reference/reserved_variables.html | 3 +- docs/reference/rfun.html | 2 +- docs/reference/rhat.html | 4 +- docs/reference/rhat_basic.html | 6 +- docs/reference/rhat_nested.html | 6 +- docs/reference/rstar.html | 9 +- docs/reference/rvar-dist.html | 2 +- docs/reference/rvar-matmult.html | 12 +- docs/reference/rvar-slice.html | 2 +- docs/reference/rvar-summaries-over-draws.html | 2 +- .../rvar-summaries-within-draws.html | 2 +- docs/reference/rvar.html | 2 +- docs/reference/rvar_apply.html | 2 +- docs/reference/rvar_factor.html | 2 +- docs/reference/rvar_ifelse.html | 2 +- docs/reference/rvar_is_finite.html | 2 +- docs/reference/rvar_rng.html | 2 +- docs/reference/split_chains.html | 2 +- docs/reference/sub-.draws_array.html | 2 +- docs/reference/sub-.draws_matrix.html | 2 +- docs/reference/subset_draws.html | 50 +- docs/reference/thin_draws.html | 31 +- docs/reference/u_scale.html | 2 +- docs/reference/variables-set.html | 215 ++++++++ docs/reference/variables.html | 209 ++++++++ docs/reference/weight_draws.html | 41 +- docs/reference/weights.draws.html | 24 +- docs/reference/z_scale.html | 2 +- docs/sitemap.xml | 27 + 109 files changed, 2633 insertions(+), 372 deletions(-) create mode 100644 docs/CONTRIBUTING.html create mode 100644 docs/articles/pareto_diagnostics.html create mode 100644 docs/reference/extract_variable_array.html create mode 100644 docs/reference/ps_convergence_rate.html create mode 100644 docs/reference/ps_khat_threshold.html create mode 100644 docs/reference/ps_min_ss.html create mode 100644 docs/reference/ps_tail_length.html create mode 100644 docs/reference/variables-set.html create mode 100644 docs/reference/variables.html diff --git a/_pkgdown.yml b/_pkgdown.yml index d69e963..5de22c8 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -65,6 +65,11 @@ articles: An overview of a new datatype introduced by posterior contents: - rvar + - title: "Pareto-khat diagnostics" + desc: > + An overview of diagnostics related to Pareto-smoothed importance sampling + contents: + - pareto_diagnostics reference: - title: "Overview" @@ -93,6 +98,7 @@ reference: - order_draws - split_chains - subset_draws + - draws-index - rename_variables - repair_draws - resample_draws @@ -108,14 +114,13 @@ reference: - starts_with("ess") - starts_with("rhat") - starts_with("mcse") + - starts_with("pareto") + - starts_with("ps") - quantile2 - rstar - entropy - dissent - modal_category - - pareto_diags - - pareto_khat - - pareto_smooth - title: "Functionality specific to the rvar datatype" desc: > The `draws_rvar` format (a structured list of `rvar` objects) has the same diff --git a/docs/404.html b/docs/404.html index ce26ebe..2ef5e33 100644 --- a/docs/404.html +++ b/docs/404.html @@ -39,7 +39,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/CONTRIBUTING.html b/docs/CONTRIBUTING.html new file mode 100644 index 0000000..7aa0bbb --- /dev/null +++ b/docs/CONTRIBUTING.html @@ -0,0 +1,162 @@ + +Contributing to posterior • posterior + + +
+
+ + + +
+
+ + +
+ +

This outlines how to propose a change to posterior and is based on similar instructions for tidyverse packages, including the contributing guidelines generated by usethis::use_tidy_contributing().

+
+

Fixing typos

+

You can fix typos, spelling mistakes, or grammatical errors in the documentation directly using the GitHub web interface, as long as the changes are made in the source file. This generally means you’ll need to edit roxygen2 comments in an .R, not a .Rd file. You can find the .R file that generates the .Rd by reading the comment in the first line.

+
+
+

Bigger changes

+

If you want to make a bigger change, it’s a good idea to first file an issue and make sure someone from the team agrees that it’s needed. If you’ve found a bug, please file an issue that illustrates the bug with a minimal reproducible example (see e.g. the tidyverse reprex instructions). The tidyverse guide on how to create a great issue has more advice.

+
+

Pull request process

+

If you are new to creating pull requests here are some tips. Using the functions from the usethis package is not required but can be helpful if this process is new to you.

+
  • Fork the package and clone onto your computer. If you haven’t done this before, we recommend using usethis::create_from_github("stan-dev/posterior", fork = TRUE).

  • +
  • Install all development dependencies with devtools::install_dev_deps(), and then make sure the package passes R CMD check by running devtools::check(). If R CMD check doesn’t pass cleanly, it’s a good idea to ask for help before continuing.

  • +
  • Create a Git branch for your pull request (PR). We recommend using usethis::pr_init("brief-description-of-change").

  • +
  • Make your changes, commit to git, and then create a PR by running usethis::pr_push(), and following the prompts in your browser. The title of your PR should briefly describe the change. The body of your PR should contain Fixes #issue-number.

  • +
  • For user-facing changes, add a bullet to the top of NEWS.md (i.e. just below the first header). Follow the style already used in NEWS.md.

  • +
+
+

Code style

+
  • New code should attempt to follow the style used in the package. When in doubt follow the tidyverse style guide.

  • +
  • We use roxygen2, with Markdown syntax, for documentation.

  • +
  • We use testthat for unit tests. Contributions with test cases included are easier to accept.

  • +
+
+
+

Code of Conduct

+

Please note that the posterior project follows the Stan project’s Code of Conduct. By contributing to this project you agree to abide by its terms.

+
+
+ +
+ + + +
+ + + +
+ +
+

Site built with pkgdown 2.0.7.

+
+ +
+ + + + + + + + diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index e083d1f..48fcc6c 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 7c805c8..51c126c 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/articles/index.html b/docs/articles/index.html index 755597a..6a0de3d 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -115,6 +115,13 @@

rvar: The Random Variable Datatype

rvar: The Random Variable Datatype
+
+

Pareto-khat diagnostics

+

An overview of diagnostics related to Pareto-smoothed importance sampling

+ +
Pareto-khat diagnostics
+
+
diff --git a/docs/articles/pareto_diagnostics.html b/docs/articles/pareto_diagnostics.html new file mode 100644 index 0000000..2ca44cd --- /dev/null +++ b/docs/articles/pareto_diagnostics.html @@ -0,0 +1,471 @@ + + + + + + + +Pareto-khat diagnostics • posterior + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ + + + +
+

Introduction +

+

The paper

+
    +
  • Aki Vehtari, Daniel Simpson, Andrew Gelman, Yuling Yao, and Jonah +Gabry (2024). Pareto smoothed importance sampling. Journal of +Machine Learning Research, 25(72):1-58.
  • +
+

presents Pareto smoothed importance sampling, but also Pareto-\(\hat{k}\) diagnostic that can be used when +estimating any expectation based on finite sample. This vignette +illustrates the use of these diagnostics. The individual diagnostic +functions are pareto_khat(), pareto_min_ss(), +pareto_convergence_rate() and +pareto_khat_threshold(). The function +pareto_diags() will return all of these.

+

Additionally, the pareto_smooth() function can be used +to transform draws by smoothing the tail(s). ## Example

+ +
## This is posterior version 1.6.0
+
## 
+## Attaching package: 'posterior'
+
## The following objects are masked from 'package:stats':
+## 
+##     mad, sd, var
+
## The following objects are masked from 'package:base':
+## 
+##     %in%, match
+ +
## 
+## Attaching package: 'dplyr'
+
## The following objects are masked from 'package:stats':
+## 
+##     filter, lag
+
## The following objects are masked from 'package:base':
+## 
+##     intersect, setdiff, setequal, union
+
+options(pillar.neg = FALSE, pillar.subtle=FALSE, pillar.sigfig=2)
+
+

Simulated data +

+

Generate xn a simulated MCMC sample with 4 chains each +with 1000 iterations using AR process with marginal normal(0,1)

+
+N <- 1000
+phi <- 0.3
+set.seed(6534)
+dr <- array(data=replicate(4,as.numeric(arima.sim(n = N,
+                                                list(ar = c(phi)),
+                                                sd = sqrt((1-phi^2))))),
+         dim=c(N,4,1)) %>%
+  as_draws_df() %>%
+  set_variables('xn')
+

Transform xn via cdf-inverse-cdf so that we have +variables that have marginally distributions \(t_3\), \(t_{2.5}\), \(t_2\), \(t_{1.5}\), and \(t_1\). These all have thick tails. In +addition \(t_2\), \(t_{1.5}\), and \(t_1\) have infinite variance, and \(t_1\) (aka Cauchy) has infinite mean.

+
+drt <- dr %>%
+  mutate_variables(xt3=qt(pnorm(xn), df=3),
+                   xt2_5=qt(pnorm(xn), df=2.5),
+                   xt2=qt(pnorm(xn), df=2),
+                   xt1_5=qt(pnorm(xn), df=1.5),
+                   xt1=qt(pnorm(xn), df=1))
+
+
+

MCMC convergence diagnostics +

+

We examine the draws with the default +summarise_draws().

+ +
## # A tibble: 6 × 10
+##   variable  mean  median    sd   mad    q5   q95  rhat ess_bulk ess_tail
+##   <chr>    <dbl>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
+## 1 xn       0.010 0.00094  0.99  0.99  -1.6   1.6   1.0    2284.    3189.
+## 2 xt3      0.025 0.0010   1.6   1.1   -2.3   2.3   1.0    2284.    3189.
+## 3 xt2_5    0.031 0.0010   2.0   1.1   -2.5   2.5   1.0    2284.    3189.
+## 4 xt2      0.046 0.0011   2.9   1.2   -2.8   2.9   1.0    2284.    3189.
+## 5 xt1_5    0.092 0.0011   7.6   1.3   -3.5   3.6   1.0    2284.    3189.
+## 6 xt1      0.33  0.0012  93.    1.5   -5.8   6.1   1.0    2284.    3189.
+

All the usual convergence diagnostics \(\widehat{R}\), Bulk-ESS, and Tail-ESS look +good, which is fine as they have been designed to work also with +infinite variance (Vehtari et al., 2020).

+

If these variables would present variables of interest for which we +would like to estimate means, we would be also interested in Monte Carlo +standard error (MCSE, see case study How +many iterations to run and how many digits to report).

+
+drt %>%
+  summarise_draws(mean, sd, mcse_mean, ess_bulk, ess_basic)
+
## # A tibble: 6 × 6
+##   variable  mean    sd mcse_mean ess_bulk ess_basic
+##   <chr>    <dbl> <dbl>     <dbl>    <dbl>     <dbl>
+## 1 xn       0.010  0.99     0.021    2284.     2280.
+## 2 xt3      0.025  1.6      0.033    2284.     2452.
+## 3 xt2_5    0.031  2.0      0.039    2284.     2584.
+## 4 xt2      0.046  2.9      0.054    2284.     2903.
+## 5 xt1_5    0.092  7.6      0.13     2284.     3553.
+## 6 xt1      0.33  93.       1.5      2284.     3976.
+

Here MCSE for mean is based on standard deviation and Basic-ESS, but +these assume finite variance. We did sample also from distributions with +infinite variance, but given a finite sample size, the empirical +variance estimates are always finite, and thus we get overoptimistic +MCSE.

+
+
+
+

Pareto-\(\hat{k}\) +

+

To diagnose whether our variables of interest may have infinite +variance and even infinite mean, we can use Pareto-\(\hat{k}\) diagnostic.

+
+drt %>%
+  summarise_draws(mean, sd, mcse_mean, ess_basic, pareto_khat)
+
## # A tibble: 6 × 6
+##   variable  mean    sd mcse_mean ess_basic pareto_khat
+##   <chr>    <dbl> <dbl>     <dbl>     <dbl>       <dbl>
+## 1 xn       0.010  0.99     0.021     2280.      -0.072
+## 2 xt3      0.025  1.6      0.033     2452.       0.33 
+## 3 xt2_5    0.031  2.0      0.039     2584.       0.41 
+## 4 xt2      0.046  2.9      0.054     2903.       0.52 
+## 5 xt1_5    0.092  7.6      0.13      3553.       0.69 
+## 6 xt1      0.33  93.       1.5       3976.       1.0
+

\(\hat{k} \leq 0\) indicates that +all moments exist, and the inverse of positive \(\hat{k}\) tells estimate for the number of +finite (fractional) moments. Thus, \(\hat{k}\geq 1/2\) indicates infinite +variance, and \(\hat{k}\geq 1\) +indicates infinite mean. Sometimes very thick distribution tails may +affect also sampling, but assuming sampling did go well, and we would be +interested only in quantiles, infinite variance and mean are not a +problem. But if we are interested in mean, then we need to care about +the number of (fractional) moments. Here we see \(\hat{k} \geq 1/2\) for \(t_2\), \(t_{1.5}\), and \(t_{1}\), and we should not trust their +mcse_mean values. Without trustworthy MCSE estimate we +don’t have good estimate of how accurate the mean estimate is. +Furthermore, as \(\hat{k} \geq 1\) for +\(t_{1}\), the mean is not finite and +the mean estimate is not valid.

+
+
+

Pareto smoothing +

+

If we really do need those mean estimates, we can improve +trustworthiness by Pareto smoothing, which replaces extreme tail draws +with expected ordered statistics of Pareto distribution fitted to the +tails of the distribution. Pareto smoothed mean estimate (computed using +Pareto smoothed draws) has finite variance with a cost of some bias +which we know when it is negligible. As a thumb rule when \(\hat{k}<0.7\), the bias is +negligible.

+

We do Pareto smoothing for all the variables.

+
+drts <- drt %>% 
+  mutate_variables(xt3_s=pareto_smooth(xt3),
+                   xt2_5_s=pareto_smooth(xt2_5),
+                   xt2_s=pareto_smooth(xt2),
+                   xt1_5_s=pareto_smooth(xt1_5),
+                   xt1_s=pareto_smooth(xt1)) %>%
+  subset_draws(variable="_s", regex=TRUE)
+
## Pareto k-hat = 0.32.
+
## Pareto k-hat = 0.4.
+
## Pareto k-hat = 0.51.
+
## Pareto k-hat = 0.68.
+
## Pareto k-hat = 1.02. Mean does not exist, making empirical mean estimate of the draws not applicable.
+

Now the mcse_mean values are more trustworthy when \(\hat{k} < 0.7\). When \(\hat{k}>0.7\) both bias and variance +grow so fast that Pareto smoothing rarely helps (see more details in the +paper).

+
+drts %>%
+  summarise_draws(mean, mcse_mean, ess_basic, pareto_khat)
+
## # A tibble: 5 × 5
+##   variable  mean mcse_mean ess_basic pareto_khat
+##   <chr>    <dbl>     <dbl>     <dbl>       <dbl>
+## 1 xt3_s    0.026     0.033     2438.        0.33
+## 2 xt2_5_s  0.033     0.038     2536.        0.40
+## 3 xt2_s    0.052     0.051     2763.        0.50
+## 4 xt1_5_s  0.12      0.10      3293.        0.67
+## 5 xt1_s    0.97      0.80      3903.        0.98
+
+
+

Minimum sample size required +

+

The bias and variance depend on the sample size, and we can use +additional diagnostic min_ss which tells the minimum sample +size needed so that mcse_mean can be trusted.

+
+drt %>%
+  summarise_draws(mean, mcse_mean, ess_basic,
+                  pareto_khat, min_ss=pareto_min_ss)
+
## # A tibble: 6 × 6
+##   variable  mean mcse_mean ess_basic pareto_khat min_ss
+##   <chr>    <dbl>     <dbl>     <dbl>       <dbl>  <dbl>
+## 1 xn       0.010     0.021     2280.      -0.072    10 
+## 2 xt3      0.025     0.033     2452.       0.33     31.
+## 3 xt2_5    0.031     0.039     2584.       0.41     48.
+## 4 xt2      0.046     0.054     2903.       0.52    116.
+## 5 xt1_5    0.092     0.13      3553.       0.69   1735.
+## 6 xt1      0.33      1.5       3976.       1.0     Inf
+

Here required min_ss is smaller than +ess_basic for all except \(t_1\), for which there is no hope.

+
+
+

Convergence rate +

+

Given finite variance, the central limit theorem states that to halve +MCSE we need four times bigger sample size. With Pareto smoothing, we +can go further, but the convergence rate decreases when \(\hat{k}\) increases.

+
+drt %>%
+  summarise_draws(mean, mcse_mean, ess_basic,
+                  pareto_khat, min_ss=pareto_min_ss,
+                  conv_rate=pareto_convergence_rate)
+
## # A tibble: 6 × 7
+##   variable  mean mcse_mean ess_basic pareto_khat min_ss conv_rate
+##   <chr>    <dbl>     <dbl>     <dbl>       <dbl>  <dbl>     <dbl>
+## 1 xn       0.010     0.021     2280.      -0.072    10       1   
+## 2 xt3      0.025     0.033     2452.       0.33     31.      0.98
+## 3 xt2_5    0.031     0.039     2584.       0.41     48.      0.95
+## 4 xt2      0.046     0.054     2903.       0.52    116.      0.86
+## 5 xt1_5    0.092     0.13      3553.       0.69   1735.      0.60
+## 6 xt1      0.33      1.5       3976.       1.0     Inf       0
+

We see that with \(t_2\), \(t_{1.5}\), and \(t_1\) we need \(4^{1/0.86}\approx 5\), \(4^{1/0.60}\approx 10\), and \(4^{1/0}\approx \infty\) times bigger sample +sizes to halve MCSE for mean.

+
+
+

Pareto-\(\hat{k}\)-threshold +

+

The final Pareto diagnostic, \(\hat{k}\)-threshold, is useful for smaller +sample sizes. Here we select only 100 iterations per chain to get total +of 400 draws.

+
+drt %>%
+  subset_draws(iteration=1:100) %>%
+  summarise_draws(mean, mcse_mean, ess_basic,
+                  pareto_khat, min_ss=pareto_min_ss,
+                  khat_thres=pareto_khat_threshold,
+                  conv_rate=pareto_convergence_rate)
+
## # A tibble: 6 × 8
+##   variable   mean mcse_mean ess_basic pareto_khat min_ss khat_thres conv_rate
+##   <chr>     <dbl>     <dbl>     <dbl>       <dbl>  <dbl>      <dbl>     <dbl>
+## 1 xn        0.038     0.066      244.      -0.012 1  e 1       0.62      1   
+## 2 xt3       0.054     0.11       237.       0.32  3.0e 1       0.62      0.96
+## 3 xt2_5     0.057     0.13       237.       0.38  4.2e 1       0.62      0.93
+## 4 xt2       0.063     0.17       243.       0.48  8.3e 1       0.62      0.86
+## 5 xt1_5     0.061     0.31       271.       0.64  5.6e 2       0.62      0.66
+## 6 xt1      -0.26      1.6        344.       0.95  2.2e18       0.62      0.11
+

With only 400 draws, we can trust the Pareto smoothed result only +when \(\hat{k}<0.62\). For \(t_{1.5}\) \(\hat{k}\approx 0.64\), and +min_ss reveals we would probably need more than 560 draws +to be on the safe side.

+
+
+

Pareto diagnostics +

+

We can get all these diagnostics with pareto_diags(), +and it’s easy to use it also for derived quantities.

+
+drt %>%
+  mutate_variables(xt2_5_sq=xt2_5^2) %>%
+  subset_draws(variable="xt2_5_sq") %>%
+  summarise_draws(mean, mcse_mean,
+                  pareto_diags)
+
## # A tibble: 1 × 7
+##   variable  mean mcse_mean  khat min_ss khat_threshold convergence_rate
+##   <chr>    <dbl>     <dbl> <dbl>  <dbl>          <dbl>            <dbl>
+## 1 xt2_5_sq   3.9      0.56  0.67  1124.           0.72             0.63
+
+
+

Discussion +

+

All these diagnostics are presented in Section 3 and summarized in +Table 1 in PSIS paper (Vehtari et al., 2024).

+

If you don’t need to estimate means of thick tailed distributions, +and there are no sampling issues due to thick tails, then you don’t need +to check existence of finite variance, and thus there is no need to +check Pareto-\(\hat{k}\) for all the +parameters and derived quantities.

+

It is possible that the distribution has finite variance, but +pre-asymptotically given a finite sample size the behavior can be +similar to infinite variance. Thus the diagnostic is useful even in +cases where theory guarantees finite variance.

+
+
+

Reference +

+

Vehtari, A., Simpson, D., Gelman, A., Yao, Y., & Gabry, J. +(2024). Pareto smoothed importance sampling. Journal of Machine +Learning Research, 25(72):1-58.

+

Vehtari A., Gelman A., Simpson D., Carpenter B., & Bürkner P. C. +(2020). Rank-normalization, folding, and localization: An improved Rhat +for assessing convergence of MCMC. Bayesian Analysis, +16(2):667-718.

+
+
+ + + +
+ + + +
+ +
+

+

Site built with pkgdown 2.0.7.

+
+ +
+
+ + + + + + + + diff --git a/docs/articles/posterior.html b/docs/articles/posterior.html index 98f7283..d1c0163 100644 --- a/docs/articles/posterior.html +++ b/docs/articles/posterior.html @@ -40,7 +40,7 @@ posterior - 1.5.0 + 1.6.0 @@ -175,7 +175,7 @@

Example -
## This is posterior version 1.5.0
+
## This is posterior version 1.6.0
## 
 ## Attaching package: 'posterior'
## The following objects are masked from 'package:stats':
@@ -339,17 +339,17 @@ 

Example: create draws_matrix print(x)

## # A draws_matrix: 10 iterations, 1 chains, and 5 variables
 ##     variable
-## draw     V1    V2    V3    V4     V5
-##   1   0.123 -0.27 -0.59  0.60 -1.789
-##   2   0.353  0.24 -0.12  0.92  0.013
-##   3  -0.316 -0.60 -0.21  0.81 -1.121
-##   4   0.755 -1.38 -0.63 -0.17 -1.363
-##   5   0.042  0.88  0.66  0.28 -0.469
-##   6  -0.210  0.31  0.93 -0.80 -1.809
-##   7   0.135  0.63  0.81 -0.55 -2.086
-##   8  -0.615  0.18 -0.10 -0.34  0.790
-##   9  -0.372  0.13 -2.56 -1.22  1.520
-##   10 -0.354  0.33  0.60  0.79  0.153
+## draw V1 V2 V3 V4 V5 +## 1 -1.14 -1.386 0.54 -0.83 0.700 +## 2 -1.52 2.124 -0.35 0.64 1.078 +## 3 -2.01 -1.062 0.40 0.94 -0.071 +## 4 0.31 -0.032 1.69 0.55 -0.071 +## 5 -0.63 -1.580 0.83 0.69 -0.870 +## 6 0.12 0.687 1.76 -0.25 -0.448 +## 7 -0.25 0.278 0.79 0.68 2.251 +## 8 0.98 0.932 -1.02 0.45 2.170 +## 9 -0.30 -0.384 -0.12 1.34 0.434 +## 10 -0.38 -0.872 -2.81 -0.36 -0.379

Because the matrix was converted to a draws_matrix, all of the methods for working with draws objects described in subsequent sections of this vignette will now be available.

@@ -369,17 +369,17 @@

Example: create draws print(x)
## # A draws_matrix: 50 iterations, 1 chains, and 2 variables
 ##     variable
-## draw   alpha  beta
-##   1  -0.7025 -0.72
-##   2   0.0350  0.44
-##   3  -0.5237 -2.36
-##   4   0.0415 -0.23
-##   5  -0.0051  1.01
-##   6  -0.2882 -1.28
-##   7  -1.5631 -0.11
-##   8  -0.4261  0.37
-##   9  -1.5636  1.00
-##   10 -0.2385 -1.28
+## draw  alpha   beta
+##   1  -0.044 -0.885
+##   2  -1.048  1.247
+##   3   0.983  0.725
+##   4   1.390  1.201
+##   5  -1.002 -0.693
+##   6   0.247 -1.470
+##   7   1.265 -0.074
+##   8   0.113 -0.132
+##   9  -0.094  0.310
+##   10 -0.794 -0.014
 ## # ... with 40 more draws

Analogous functions exist for the other draws formats and are used similarly.

@@ -491,7 +491,7 @@

Renaming
 # mu is a scalar, theta is a vector
 x <- rename_variables(eight_schools_df, mean = mu, alpha = theta)
-variables(x)
+variables(x)
##  [1] "mean"     "tau"      "alpha[1]" "alpha[2]" "alpha[3]" "alpha[4]"
 ##  [7] "alpha[5]" "alpha[6]" "alpha[7]" "alpha[8]"

In the call to rename_variables() above, mu @@ -501,7 +501,7 @@

Renamingalpha:

 x <- rename_variables(x, a1 = `alpha[1]`)
-variables(x)
+variables(x)
##  [1] "mean"     "tau"      "a1"       "alpha[2]" "alpha[3]" "alpha[4]"
 ##  [7] "alpha[5]" "alpha[6]" "alpha[7]" "alpha[8]"
@@ -524,12 +524,12 @@

Bindingprint(x4)
## # A draws_matrix: 5 iterations, 1 chains, and 3 variables
 ##     variable
-## draw alpha  beta theta
-##    1 -0.83 -2.78 0.073
-##    2 -0.37  3.17 0.053
-##    3  0.21 -0.48 0.110
-##    4  0.31 -0.65 0.534
-##    5 -0.24 -1.51 0.694
+## draw alpha beta theta +## 1 0.793 -0.073 0.22 +## 2 0.483 0.267 0.19 +## 3 0.331 0.238 6.60 +## 4 -0.837 1.301 0.47 +## 5 0.066 0.722 1.33

Because x1 and x2 have the same variables, we can bind them along the 'draw' dimension to create a single draws_matrix with more draws:

@@ -538,17 +538,17 @@

Bindingprint(x5)
## # A draws_matrix: 10 iterations, 1 chains, and 2 variables
 ##     variable
-## draw alpha  beta
-##   1  -0.83 -2.78
-##   2  -0.37  3.17
-##   3   0.21 -0.48
-##   4   0.31 -0.65
-##   5  -0.24 -1.51
-##   6  -0.92  0.29
-##   7   1.09  0.51
-##   8  -0.15 -1.99
-##   9  -2.01 -0.63
-##   10  1.80  0.27
+## draw alpha beta +## 1 0.793 -0.073 +## 2 0.483 0.267 +## 3 0.331 0.238 +## 4 -0.837 1.301 +## 5 0.066 0.722 +## 6 1.374 1.284 +## 7 -0.061 -0.212 +## 8 -0.386 -0.052 +## 9 -1.356 0.061 +## 10 0.627 -0.815

As with all posterior methods, bind_draws() can be used with all draws formats and depending on the format different dimensions are available to bind on. For example, we can bind @@ -661,16 +661,16 @@

Using custom functions## # A tibble: 10 × 2 ## variable weighted_mean ## <chr> <dbl> -## 1 mu 4.00 -## 2 tau 4.09 -## 3 theta[1] 6.56 -## 4 theta[2] 4.95 -## 5 theta[3] 2.98 -## 6 theta[4] 4.72 -## 7 theta[5] 3.15 -## 8 theta[6] 3.59 -## 9 theta[7] 6.06 -## 10 theta[8] 4.45 +## 1 mu 4.13 +## 2 tau 4.07 +## 3 theta[1] 6.93 +## 4 theta[2] 5.54 +## 5 theta[3] 3.35 +## 6 theta[4] 5.03 +## 7 theta[5] 3.23 +## 8 theta[6] 3.52 +## 9 theta[7] 6.59 +## 10 theta[8] 4.58

Specifying functions using lambda-like syntax @@ -804,12 +804,13 @@

Other methods for working

References

-

Gelman A., Carlin J. B., Stern H. S., David B. Dunson D. B., Aki -Vehtari A., & Rubin D. B. (2013). Bayesian Data Analysis, Third +

Gelman A., Carlin J. B., Stern H. S., David B. Dunson D. B., Vehtari, +A., & Rubin D. B. (2013). Bayesian Data Analysis, Third Edition. Chapman and Hall/CRC.

Vehtari A., Gelman A., Simpson D., Carpenter B., & Bürkner P. C. (2020). Rank-normalization, folding, and localization: An improved Rhat -for assessing convergence of MCMC. Bayesian Analysis.

+for assessing convergence of MCMC. Bayesian Analysis, +16(2):667-718.

diff --git a/docs/articles/rvar.html b/docs/articles/rvar.html index 50b7d7a..483772a 100644 --- a/docs/articles/rvar.html +++ b/docs/articles/rvar.html @@ -40,7 +40,7 @@ posterior - 1.5.0 + 1.6.0 @@ -134,7 +134,7 @@

rvar: The Random Variable Datatype

Matthew Kay

-

2023-11-10

+

2024-07-05

Source: vignettes/rvar.Rmd @@ -156,7 +156,7 @@

Introductiondistributional package, to be able to be used inside data.frame()s and -tibble()s, and to be used with distribution visualizations +tibble()s, and to be used with distribution visualizations in the ggdist package.

@@ -342,12 +342,12 @@

The draws_rvars datatypemu and Sigma:

+variables(post)
## [1] "mu"    "Sigma"

But converted to a draws_list(), it contains one variable for each combination of the dimensions of its variables:

+variables(as_draws_list(post))
##  [1] "mu[1]"      "mu[2]"      "mu[3]"      "Sigma[1,1]" "Sigma[2,1]"
 ##  [6] "Sigma[3,1]" "Sigma[1,2]" "Sigma[2,2]" "Sigma[3,2]" "Sigma[1,3]"
 ## [11] "Sigma[2,3]" "Sigma[3,3]"
@@ -370,9 +370,12 @@

Math with rvars## rvar<100,4>[3] mean ± sd: ## [1] 1.1 ± 0.11 1.1 ± 0.20 1.2 ± 0.31

Matrix multiplication is also implemented (using a tensor product -under the hood). Because the normal matrix multiplication operator in R -(%*%) cannot be properly implemented for S3 datatypes, -rvar uses %**% instead. A trivial example:

+under the hood). In R < 4.3, the normal matrix multiplication +operator (%*%) cannot be properly implemented for S3 +datatypes, so rvar uses %**% instead. In R ≥ +4.3, which does support matrix multiplication for S3 datatypes, you can +use %*% to matrix-multiply rvars.

+

A trivial example:

## rvar<100,4>[3,3] mean ± sd:
@@ -420,7 +423,8 @@ 

Math with rvars Matrix multiplication -%**% + +%**%, %*% (R ≥ 4.3 only) Basic functions @@ -935,9 +939,10 @@

Subsetting rvars by ## [1] 4 ± 2

The resulting mixture looks like this:

-library(ggplot2)
-
-ggplot() + ggdist::stat_slab(aes(xdist = mixture))
+library(ggplot2) +
## Warning: package 'ggplot2' was built under R version 4.2.3
+
+ggplot() + ggdist::stat_slab(aes(xdist = mixture))

See vignette("slabinterval", package = "ggdist") for more examples of visualizing distribution-type objects, including @@ -953,7 +958,7 @@

Conditionals using rvar_ifelse()yes where test == TRUE and draws from no where test == FALSE.

Thus, we can create the mixture as follows:

-
+
 x = rvar_ifelse(i == 1, component[[1]], component[[2]])
 x
## rvar<4000>[1] mean ± sd:
@@ -972,7 +977,7 @@ 

Selecting diffe rvar whose values are either 1 or 2 within each draw, you can use it as an index directly on component to create the mixture:

-
+
 x = component[[i]]
 x
## rvar<4000>[1] mean ± sd:
@@ -993,7 +998,7 @@ 

Applying functions over rvar its first dimension, which may be necessary for compatibility with some functions (like purrr:map()).

For example, given this multidimensional rvar

-
+
 set.seed(3456)
 x <- rvar_rng(rnorm, 24, mean = 1:24)
 dim(x) <- c(2,3,4)
@@ -1024,7 +1029,7 @@ 

Applying functions over rvar ## [2,] 20 ± 1.00 22 ± 1.00 24 ± 1.00

… you can apply functions along the margins using apply() (here, a silly example):

-
+
 apply(x, c(1,2), length)
##      [,1] [,2] [,3]
 ## [1,]    4    4    4
@@ -1040,12 +1045,12 @@ 

Applying functions over rvar

For example, you can use rvar_apply() with rvar_mean() to compute the distributions of means along one margin of an array:

-
+
 rvar_apply(x, 1, rvar_mean)
## rvar<4000>[2] mean ± sd:
 ## [1] 12 ± 0.29  13 ± 0.29

Or along multiple dimensions:

-
+
 rvar_apply(x, c(2,3), rvar_mean)
## rvar<4000>[3,4] mean ± sd:
 ##      [,1]         [,2]         [,3]         [,4]        
@@ -1068,7 +1073,7 @@ 

Looping over draws and base-R plots of individual draws (for ggplot2-based plotting of rvars, see the next section and the ggdist package). For example, it can be used to construct a parallel coordinates plot:

-
+
 eight_schools <- as_draws_rvars(example_draws())
 
 plot(1, type = "n",
@@ -1097,8 +1102,8 @@ 

Looping over draws and

Using rvars in data frames and in ggplot2

rvars can be used as columns in -data.frame() or tibble() objects:

-
+data.frame() or tibble() objects:

+
 df <- data.frame(group = c("a","b","c","d"), mu)
 df
##   group       mu
@@ -1113,11 +1118,12 @@ 

Using rvars in d stat_... family of geometries in the ggdist package, such as stat_halfeye(), stat_lineribbon(), and stat_dotsinterval(). For example:

-
+
+
## Warning: package 'ggdist' was built under R version 4.2.3
+
+ggplot(df) +
   stat_halfeye(aes(y = group, xdist = mu))

See vignette("slabinterval", package = "ggdist") or diff --git a/docs/articles/rvar_files/figure-html/data_frame_plot-1.png b/docs/articles/rvar_files/figure-html/data_frame_plot-1.png index 4cf02c0b783212e617b8bd36e49c86ce66c06c7a..30e22dfe4973aeeb4049b999324150530da67226 100644 GIT binary patch literal 39882 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%0D?47sDTg#&US0hZ5&JNo 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 Xh4s|JeLn=tx|LS8lTJ)@-T2=CMm){7 literal 39369 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 z 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 literal 32373 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 Ies&1{H{Xq14FCWD diff --git a/docs/authors.html b/docs/authors.html index f3e2af9..acb26f5 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0

@@ -139,6 +139,10 @@

Authors

Jacob Socolar. Contributor.

+
  • +

    Noa Kallioinen. Contributor. +

    +
  • @@ -148,15 +152,15 @@

    Citation

    -

    Bürkner P, Gabry J, Kay M, Vehtari A (2023). +

    Bürkner P, Gabry J, Kay M, Vehtari A (2024). “posterior: Tools for Working with Posterior Distributions.” -R package version 1.5.0, https://mc-stan.org/posterior/. +R package version 1.6.0, https://mc-stan.org/posterior/.

    @Misc{,
       title = {posterior: Tools for Working with Posterior Distributions},
       author = {Paul-Christian Bürkner and Jonah Gabry and Matthew Kay and Aki Vehtari},
    -  year = {2023},
    -  note = {R package version 1.5.0},
    +  year = {2024},
    +  note = {R package version 1.6.0},
       url = {https://mc-stan.org/posterior/},
     }

    Vehtari A, Gelman A, Simpson D, Carpenter B, Bürkner P (2021). diff --git a/docs/index.html b/docs/index.html index c457eb2..714c5c8 100644 --- a/docs/index.html +++ b/docs/index.html @@ -50,7 +50,7 @@ posterior - 1.5.0 + 1.6.0

    @@ -328,7 +328,7 @@

    Mutating and renaming draws
     x <- rename_variables(eight_schools_df, mean = mu, alpha = theta)
    -variables(x)
    +variables(x)
     #>  [1] "mean"     "tau"      "alpha[1]" "alpha[2]" "alpha[3]" "alpha[4]" "alpha[5]"
     #>  [8] "alpha[6]" "alpha[7]" "alpha[8]"

    As with all posterior methods, mutate_variables and rename_variables can be used with all draws formats.

    @@ -409,7 +409,7 @@

    Converting from regu
     x <- array(data=rnorm(200), dim=c(10, 2, 5))
     x <- as_draws_matrix(x)
    -variables(x) <-  paste0("V", 1:5)
    +variables(x) <-  paste0("V", 1:5)
     print(x)
     #> # A draws_matrix: 10 iterations, 2 chains, and 5 variables
     #>     variable
    @@ -506,6 +506,12 @@ 

    License

    +
    +

    Community

    + +

    Citation

    diff --git a/docs/news/index.html b/docs/news/index.html index 9d738f3..d94aa8a 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -102,6 +102,23 @@

    Changelog

    Source: NEWS.md

    +
    + +
    +

    Enhancements

    +
    • Add exclude option to subset_draws(), which can be used to exclude the matched selection.
    • +
    • Add are_log_weights option to pareto_smooth(), which is necessary for correct Pareto smoothing computation if the input vector consists of log weights.
    • +
    • Add pareto_smooth option to weight_draws(), to Pareto smooth weights before adding to a draws object.
    • +
    • Add individual Pareto diagnostic functions (pareto_khat(), pareto_khat_threshold(), pareto_min_ss(), pareto_convergence_rate())
    • +
    • +thin_draws() now automatically thins draws based on ESS by default, and non-integer thinning is possible.
    • +
    • Matrix multiplication of rvars can now be done with the base matrix multiplication operator (%*%) instead of %**% in R >= 4.3.
    • +
    • +variables(), variables<-(), set_variables(), and nvariables() now support a with_indices argument, which determines whether variable names are retrieved/set with ("x[1]", "x[2]" …) or without ("x") indices (#208).
    • +
    • Add extract_variable_array() function to extract variables with indices into arrays of iterations x chains x any remaining dimensions (#340).
    • +
    • For types that support factor variables (draws_df, draws_list, and draws_rvars), extract_variable() and extract_variable_matrix() can now return factors.
    • +
    +
    diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 8ad1e3a..ef76ad7 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,10 +1,11 @@ -pandoc: 3.1.1 +pandoc: 3.1.11 pkgdown: 2.0.7 pkgdown_sha: ~ articles: + pareto_diagnostics: pareto_diagnostics.html posterior: posterior.html rvar: rvar.html -last_built: 2023-11-10T09:53Z +last_built: 2024-07-05T08:44Z urls: reference: https://mc-stan.org/posterior/reference article: https://mc-stan.org/posterior/articles diff --git a/docs/pull_request_template.html b/docs/pull_request_template.html index 4bc6c54..d7bc28b 100644 --- a/docs/pull_request_template.html +++ b/docs/pull_request_template.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/as_rvar.html b/docs/reference/as_rvar.html index e0cce8e..b5fe775 100644 --- a/docs/reference/as_rvar.html +++ b/docs/reference/as_rvar.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/as_rvar_factor.html b/docs/reference/as_rvar_factor.html index 3118748..417130e 100644 --- a/docs/reference/as_rvar_factor.html +++ b/docs/reference/as_rvar_factor.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0

    diff --git a/docs/reference/autocorrelation.html b/docs/reference/autocorrelation.html index 46947ec..dac6b79 100644 --- a/docs/reference/autocorrelation.html +++ b/docs/reference/autocorrelation.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/autocovariance.html b/docs/reference/autocovariance.html index 3faaf66..76e996e 100644 --- a/docs/reference/autocovariance.html +++ b/docs/reference/autocovariance.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0

    diff --git a/docs/reference/bind_draws.html b/docs/reference/bind_draws.html index 0d7a9cc..937411c 100644 --- a/docs/reference/bind_draws.html +++ b/docs/reference/bind_draws.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -165,7 +165,7 @@

    Examples

    x4 <- draws_matrix(theta = rexp(5)) x5 <- bind_draws(x1, x4, along = "variable") -variables(x5) +variables(x5) #> [1] "alpha" "beta" "theta"
    diff --git a/docs/reference/chol.rvar.html b/docs/reference/chol.rvar.html index 0ec7c5f..7c17b69 100644 --- a/docs/reference/chol.rvar.html +++ b/docs/reference/chol.rvar.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0

    diff --git a/docs/reference/diag-rvar-method.html b/docs/reference/diag-rvar-method.html index a7d4690..467cd5b 100644 --- a/docs/reference/diag-rvar-method.html +++ b/docs/reference/diag-rvar-method.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0

    diff --git a/docs/reference/diagnostics.html b/docs/reference/diagnostics.html index 186cec0..6c5404e 100644 --- a/docs/reference/diagnostics.html +++ b/docs/reference/diagnostics.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -117,7 +117,7 @@

    Value

    Details

    -
    FunctionDescription
    ess_basic()Basic version of effective sample size
    ess_bulk()Bulk effective sample size
    ess_tail()Tail effective sample size
    ess_quantile()Effective sample sizes for quantiles
    ess_sd()Effective sample sizes for standard deviations
    mcse_mean()Monte Carlo standard error for the mean
    mcse_quantile()Monte Carlo standard error for quantiles
    mcse_sd()Monte Carlo standard error for standard deviations
    rhat_basic()Basic version of Rhat
    rhat()Improved, rank-based version of Rhat
    rhat_nested()Rhat for use with many short chains
    rstar()R* diagnostic
    +
    FunctionDescription
    ess_basic()Basic version of effective sample size
    ess_bulk()Bulk effective sample size
    ess_tail()Tail effective sample size
    ess_quantile()Effective sample sizes for quantiles
    ess_sd()Effective sample sizes for standard deviations
    mcse_mean()Monte Carlo standard error for the mean
    mcse_quantile()Monte Carlo standard error for quantiles
    mcse_sd()Monte Carlo standard error for standard deviations
    pareto_khat()Pareto khat diagnostic for tail(s)
    pareto_diags()Additional diagnostics related to Pareto khat
    rhat_basic()Basic version of Rhat
    rhat()Improved, rank-based version of Rhat
    rhat_nested()Rhat for use with many short chains
    rstar()R* diagnostic
    diff --git a/docs/reference/draws-index.html b/docs/reference/draws-index.html index 004fadd..3658f41 100644 --- a/docs/reference/draws-index.html +++ b/docs/reference/draws-index.html @@ -1,5 +1,5 @@ -Index draws objects — draws-index • posteriorIndex draws objects — draws-index • posterior @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -104,22 +104,16 @@

    Index draws objects

    -

    Index variables, iterations, chains, and draws.

    +

    Index iterations, chains, and draws of draws objects.

    -
    variables(x, ...)
    -
    -variables(x) <- value
    -
    -iteration_ids(x)
    +    
    iteration_ids(x)
     
     chain_ids(x)
     
     draw_ids(x)
     
    -nvariables(x, ...)
    -
     niterations(x)
     
     nchains(x)
    @@ -133,23 +127,11 @@ 

    Arguments

    (draws) A draws object or another R object for which the method is defined.

    - -
    ...
    -

    Arguments passed to individual methods (if applicable).

    - - -
    value
    -

    (character vector) For variables(x) <- value, the new variable -names to use.

    -

    Value

    -

    For variables(), a character vector.

    - -

    For iteration_ids(), chain_ids(), and draw_ids(), an integer vector.

    @@ -157,27 +139,21 @@

    Value

    Details

    -

    The methods variables(), iteration_ids(), chain_ids(), and draw_ids() return -vectors of all variables, iterations, chains, and draws, respectively. In -contrast, the methods nvariables(), niterations(), nchains(), and +

    The methods iteration_ids(), chain_ids(), and draw_ids() return +vectors of all iterations, chains, and draws, respectively. In +contrast, the methods niterations(), nchains(), and ndraws() return the number of variables, iterations, chains, and draws, respectively.

    -

    variables(x) <- value allows you to modify the vector of variable names, -similar to how names(x) <- value works for vectors and lists. For renaming -specific variables, set_variables() works equivalently, but is more intuitive when using the pipe operator. rename_variables() may offer a more convenient approach.

    +
    +
    +

    See also

    +

    Examples

    x <- example_draws()
     
    -variables(x)
    -#>  [1] "mu"       "tau"      "theta[1]" "theta[2]" "theta[3]" "theta[4]"
    -#>  [7] "theta[5]" "theta[6]" "theta[7]" "theta[8]"
    -nvariables(x)
    -#> [1] 10
    -variables(x) <- letters[1:nvariables(x)]
    -
     iteration_ids(x)
     #>   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
     #>  [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
    diff --git a/docs/reference/draws.html b/docs/reference/draws.html
    index 74a4b3b..9bd04ab 100644
    --- a/docs/reference/draws.html
    +++ b/docs/reference/draws.html
    @@ -18,7 +18,7 @@
           
           
             posterior
    -        1.5.0
    +        1.6.0
           
         
    diff --git a/docs/reference/draws_array.html b/docs/reference/draws_array.html index 29dc038..44e66e6 100644 --- a/docs/reference/draws_array.html +++ b/docs/reference/draws_array.html @@ -21,7 +21,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -179,11 +179,11 @@

    Details

    See also

    Other formats: +draws, draws_df(), draws_list(), draws_matrix(), -draws_rvars(), -draws

    +draws_rvars()

    diff --git a/docs/reference/draws_df.html b/docs/reference/draws_df.html index 19f5274..cee18fa 100644 --- a/docs/reference/draws_df.html +++ b/docs/reference/draws_df.html @@ -21,7 +21,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -189,11 +189,11 @@

    Details

    See also

    Other formats: +draws, draws_array(), draws_list(), draws_matrix(), -draws_rvars(), -draws

    +draws_rvars()

    diff --git a/docs/reference/draws_list.html b/docs/reference/draws_list.html index 3e8c53b..b94afc4 100644 --- a/docs/reference/draws_list.html +++ b/docs/reference/draws_list.html @@ -21,7 +21,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -181,11 +181,11 @@

    Details

    See also

    Other formats: +draws, draws_array(), draws_df(), draws_matrix(), -draws_rvars(), -draws

    +draws_rvars()

    diff --git a/docs/reference/draws_matrix.html b/docs/reference/draws_matrix.html index 8b79b02..8ebdabf 100644 --- a/docs/reference/draws_matrix.html +++ b/docs/reference/draws_matrix.html @@ -21,7 +21,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -179,11 +179,11 @@

    Details

    See also

    Other formats: +draws, draws_array(), draws_df(), draws_list(), -draws_rvars(), -draws

    +draws_rvars()

    diff --git a/docs/reference/draws_of.html b/docs/reference/draws_of.html index bb59929..81420a4 100644 --- a/docs/reference/draws_of.html +++ b/docs/reference/draws_of.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/draws_rvars.html b/docs/reference/draws_rvars.html index bb8ede2..188a137 100644 --- a/docs/reference/draws_rvars.html +++ b/docs/reference/draws_rvars.html @@ -21,7 +21,7 @@ posterior - 1.5.0 + 1.6.0 @@ -182,11 +182,11 @@

    Details

    See also

    Other formats: +draws, draws_array(), draws_df(), draws_list(), -draws_matrix(), -draws

    +draws_matrix()

    diff --git a/docs/reference/draws_summary.html b/docs/reference/draws_summary.html index e2416de..9b1ffd2 100644 --- a/docs/reference/draws_summary.html +++ b/docs/reference/draws_summary.html @@ -22,7 +22,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/drop-rvar-method.html b/docs/reference/drop-rvar-method.html index 7370fa5..8cc9f12 100644 --- a/docs/reference/drop-rvar-method.html +++ b/docs/reference/drop-rvar-method.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/entropy.html b/docs/reference/entropy.html index 424579f..92d2abe 100644 --- a/docs/reference/entropy.html +++ b/docs/reference/entropy.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/ess_basic.html b/docs/reference/ess_basic.html index 52b65cd..7b11c10 100644 --- a/docs/reference/ess_basic.html +++ b/docs/reference/ess_basic.html @@ -22,7 +22,7 @@ posterior - 1.5.0 + 1.6.0 @@ -189,9 +189,11 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), rhat_nested(), -rhat(), rstar()

    diff --git a/docs/reference/ess_bulk.html b/docs/reference/ess_bulk.html index aad4785..b3ef7cd 100644 --- a/docs/reference/ess_bulk.html +++ b/docs/reference/ess_bulk.html @@ -22,7 +22,7 @@ posterior - 1.5.0 + 1.6.0 @@ -181,9 +181,11 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), rhat_nested(), -rhat(), rstar()

    diff --git a/docs/reference/ess_mean.html b/docs/reference/ess_mean.html index 93a7027..0b5ff9e 100644 --- a/docs/reference/ess_mean.html +++ b/docs/reference/ess_mean.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/ess_quantile.html b/docs/reference/ess_quantile.html index 98ca6c6..287678a 100644 --- a/docs/reference/ess_quantile.html +++ b/docs/reference/ess_quantile.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 @@ -190,9 +190,11 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), rhat_nested(), -rhat(), rstar()

    diff --git a/docs/reference/ess_sd.html b/docs/reference/ess_sd.html index 0ffc275..4b18682 100644 --- a/docs/reference/ess_sd.html +++ b/docs/reference/ess_sd.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 @@ -173,9 +173,11 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), rhat_nested(), -rhat(), rstar()

    diff --git a/docs/reference/ess_tail.html b/docs/reference/ess_tail.html index 4ee4333..c48cbfa 100644 --- a/docs/reference/ess_tail.html +++ b/docs/reference/ess_tail.html @@ -22,7 +22,7 @@ posterior - 1.5.0 + 1.6.0 @@ -181,9 +181,11 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), rhat_nested(), -rhat(), rstar()

    diff --git a/docs/reference/example_draws.html b/docs/reference/example_draws.html index 3188180..086226d 100644 --- a/docs/reference/example_draws.html +++ b/docs/reference/example_draws.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/extract_variable.html b/docs/reference/extract_variable.html index 6b278ec..9a75d9a 100644 --- a/docs/reference/extract_variable.html +++ b/docs/reference/extract_variable.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -116,6 +116,12 @@

    Extract draws of a single variable

    # S3 method for draws extract_variable(x, variable, ...) +# S3 method for draws_df +extract_variable(x, variable, ...) + +# S3 method for draws_list +extract_variable(x, variable, ...) + # S3 method for draws_rvars extract_variable(x, variable, ...)
    @@ -128,7 +134,9 @@

    Arguments

    variable
    -

    (string) The name of the variable to extract.

    +

    (string) The name of the variable to extract. Must include +indices for array variables (e.g. "x[1]", "y[1,2]"). To extract all +dimensions from variables with indices, use extract_variable_array().

    ...
    @@ -139,7 +147,13 @@

    Arguments

    Value

    -

    A numeric vector of length equal to the number of draws.

    +

    A vector of length equal to the number of draws.

    + +
    +

    See also

    +

    Other variable extraction methods: +extract_variable_array(), +extract_variable_matrix()

    diff --git a/docs/reference/extract_variable_array.html b/docs/reference/extract_variable_array.html new file mode 100644 index 0000000..a0b3bd7 --- /dev/null +++ b/docs/reference/extract_variable_array.html @@ -0,0 +1,207 @@ + +Extract array of a single (possibly indexed) variable — extract_variable_array • posterior + + +
    +
    + + + +
    +
    + + +
    +

    Extract an array of draws of a single variable, including any dimensions of +variables with indices.

    +
    + +
    +
    extract_variable_array(x, variable, ...)
    +
    +# S3 method for default
    +extract_variable_array(x, variable, ...)
    +
    +# S3 method for draws
    +extract_variable_array(x, variable, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    (draws) A draws object or another R object for which the method +is defined.

    + + +
    variable
    +

    (string) The name of the variable to extract. To extract all +dimensions from variables with indices (e.g. "x[1]"), provide the base +variable name (e.g. "x").

    + + +
    ...
    +

    Arguments passed to individual methods (if applicable).

    + +
    +
    +

    Value

    + + +

    An array with dimension niterations(x) x nchains(x) x any remaining +dimensions determined by the indices of the variable x.

    +
    +
    +

    See also

    +

    Other variable extraction methods: +extract_variable(), +extract_variable_matrix()

    +
    + +
    +

    Examples

    +
    x <- example_draws(example = "multi_normal")
    +
    +mu <- extract_variable_array(x, variable = "mu")
    +str(mu)
    +#>  num [1:100, 1:4, 1:3] 0.18119 -0.03419 -0.05875 -0.1536 0.00989 ...
    +#>  - attr(*, "dimnames")=List of 3
    +#>   ..$ : NULL
    +#>   ..$ : NULL
    +#>   ..$ : NULL
    +
    +mu1 <- extract_variable_array(x, variable = "mu[1]")
    +str(mu1)
    +#>  num [1:100, 1:4, 1] 0.18119 -0.03419 -0.05875 -0.1536 0.00989 ...
    +#>  - attr(*, "dimnames")=List of 3
    +#>   ..$ : NULL
    +#>   ..$ : NULL
    +#>   ..$ : NULL
    +
    +Sigma <- extract_variable_array(x, variable = "Sigma")
    +str(Sigma)
    +#>  num [1:100, 1:4, 1:3, 1:3] 1.2 1.14 1.12 1.14 1.19 ...
    +#>  - attr(*, "dimnames")=List of 4
    +#>   ..$ : NULL
    +#>   ..$ : NULL
    +#>   ..$ : NULL
    +#>   ..$ : NULL
    +
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.0.7.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/extract_variable_matrix.html b/docs/reference/extract_variable_matrix.html index 186d9b8..2be61fc 100644 --- a/docs/reference/extract_variable_matrix.html +++ b/docs/reference/extract_variable_matrix.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -118,6 +118,12 @@

    Extract matrix of a single variable

    # S3 method for draws extract_variable_matrix(x, variable, ...) +# S3 method for draws_df +extract_variable_matrix(x, variable, ...) + +# S3 method for draws_list +extract_variable_matrix(x, variable, ...) + # S3 method for draws_rvars extract_variable_matrix(x, variable, ...)
    @@ -130,7 +136,9 @@

    Arguments

    variable
    -

    (string) The name of the variable to extract.

    +

    (string) The name of the variable to extract. Must include +indices for array variables (e.g. "x[1]", "y[1,2]"). To extract all +dimensions from variables with indices, use extract_variable_array().

    ...
    @@ -143,6 +151,12 @@

    Value

    A matrix with dimension iterations x chains.

    +
    +

    See also

    +

    Other variable extraction methods: +extract_variable(), +extract_variable_array()

    +

    Examples

    diff --git a/docs/reference/for_each_draw.html b/docs/reference/for_each_draw.html index 9e3acfd..4d62ba8 100644 --- a/docs/reference/for_each_draw.html +++ b/docs/reference/for_each_draw.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -124,7 +124,8 @@

    Arguments

    (expression) A bare expression that can contain references to variables in x by name. This expression will be executed once per draw of x, where references to variables in x resolve to the value of that -variable in that draw. The expression supports quasiquotation.

    +variable in that draw. The expression supports +quasiquotation.

    diff --git a/docs/reference/index.html b/docs/reference/index.html index baab84a..f5dc581 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -166,9 +166,9 @@

    Draws objects and formats variables() `variables<-`() iteration_ids() chain_ids() draw_ids() nvariables() niterations() nchains() ndraws()

    +

    variables() nvariables()

    -

    Index draws objects

    +

    Get variable names from draws objects

    example_draws()

    @@ -189,6 +189,10 @@

    Working with draws objects extract_variable()

    Extract draws of a single variable

    + +

    extract_variable_array()

    + +

    Extract array of a single (possibly indexed) variable

    extract_variable_matrix()

    @@ -202,7 +206,7 @@

    Working with draws objects set_variables()

    +

    `variables<-`() set_variables()

    Set variable names in draws objects

    @@ -217,6 +221,10 @@

    Working with draws objects subset_draws() subset(<draws>)

    Subset draws objects

    + +

    iteration_ids() chain_ids() draw_ids() niterations() nchains() ndraws()

    + +

    Index draws objects

    rename_variables()

    @@ -301,6 +309,34 @@

    Summarizing and diagnosing dra

    mcse_sd()

    Monte Carlo standard error for the standard deviation

    + +

    pareto_diags() pareto_khat_threshold() pareto_min_ss() pareto_convergence_rate()

    + +

    Pareto smoothing diagnostics

    + +

    pareto_khat()

    + +

    Pareto khat diagnostic

    + +

    pareto_smooth()

    + +

    Pareto smoothing

    + +

    ps_convergence_rate()

    + +

    Pareto convergence rate

    + +

    ps_khat_threshold()

    + +

    Pareto k-hat threshold

    + +

    ps_min_ss()

    + +

    Pareto-smoothing minimum sample-size

    + +

    ps_tail_length()

    + +

    Pareto tail length

    quantile2()

    @@ -321,18 +357,6 @@

    Summarizing and diagnosing dra

    modal_category()

    Modal category

    - -

    pareto_diags()

    - -

    Pareto smoothing diagnostics

    - -

    pareto_khat()

    - -

    Pareto khat diagnostic

    - -

    pareto_smooth()

    - -

    Pareto smoothing

    Functionality specific to the rvar datatype

    The draws_rvar format (a structured list of rvar objects) has the same methods (e.g. bind_draws()) as the other draws formats. For individual rvar objects themselves, however, posterior provides additional functionality.

    @@ -346,7 +370,7 @@

    Functionality specific to t

    Density, CDF, and quantile functions of random variables

    -

    `%**%`

    +

    `%**%` matrixOps(<rvar>)

    Matrix multiplication of random variables

    diff --git a/docs/reference/is_rvar.html b/docs/reference/is_rvar.html index 4724eba..f19f07f 100644 --- a/docs/reference/is_rvar.html +++ b/docs/reference/is_rvar.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/is_rvar_factor.html b/docs/reference/is_rvar_factor.html index a771634..38de9e3 100644 --- a/docs/reference/is_rvar_factor.html +++ b/docs/reference/is_rvar_factor.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/match.html b/docs/reference/match.html index c18dd18..42adcb7 100644 --- a/docs/reference/match.html +++ b/docs/reference/match.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/mcse_mean.html b/docs/reference/mcse_mean.html index c51f426..d796543 100644 --- a/docs/reference/mcse_mean.html +++ b/docs/reference/mcse_mean.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 @@ -169,9 +169,11 @@

    See also

    ess_tail(), mcse_quantile(), mcse_sd(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), rhat_nested(), -rhat(), rstar()

    diff --git a/docs/reference/mcse_quantile.html b/docs/reference/mcse_quantile.html index 836681f..c6760ab 100644 --- a/docs/reference/mcse_quantile.html +++ b/docs/reference/mcse_quantile.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 @@ -187,9 +187,11 @@

    See also

    ess_tail(), mcse_mean(), mcse_sd(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), rhat_nested(), -rhat(), rstar()

    diff --git a/docs/reference/mcse_sd.html b/docs/reference/mcse_sd.html index 7907ad2..e1d0f97 100644 --- a/docs/reference/mcse_sd.html +++ b/docs/reference/mcse_sd.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 @@ -174,9 +174,11 @@

    See also

    ess_tail(), mcse_mean(), mcse_quantile(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), rhat_nested(), -rhat(), rstar()

    diff --git a/docs/reference/merge_chains.html b/docs/reference/merge_chains.html index 1d65b22..041c85e 100644 --- a/docs/reference/merge_chains.html +++ b/docs/reference/merge_chains.html @@ -21,7 +21,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/modal_category.html b/docs/reference/modal_category.html index 5e4a042..4ba38bb 100644 --- a/docs/reference/modal_category.html +++ b/docs/reference/modal_category.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/mutate_variables.html b/docs/reference/mutate_variables.html index 5a0abd2..7eeb05a 100644 --- a/docs/reference/mutate_variables.html +++ b/docs/reference/mutate_variables.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -160,7 +160,7 @@

    Details

    diff --git a/docs/reference/order_draws.html b/docs/reference/order_draws.html index 8b024d9..d02aee2 100644 --- a/docs/reference/order_draws.html +++ b/docs/reference/order_draws.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/pareto_diags.html b/docs/reference/pareto_diags.html index 7348b04..fb1240b 100644 --- a/docs/reference/pareto_diags.html +++ b/docs/reference/pareto_diags.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 @@ -121,11 +121,36 @@

    Pareto smoothing diagnostics

    r_eff = NULL, ndraws_tail = NULL, verbose = FALSE, + are_log_weights = FALSE, ... ) # S3 method for rvar -pareto_diags(x, ...) +pareto_diags(x, ...) + +pareto_khat_threshold(x, ...) + +# S3 method for default +pareto_khat_threshold(x, ...) + +# S3 method for rvar +pareto_khat_threshold(x, ...) + +pareto_min_ss(x, ...) + +# S3 method for default +pareto_min_ss(x, ...) + +# S3 method for rvar +pareto_min_ss(x, ...) + +pareto_convergence_rate(x, ...) + +# S3 method for default +pareto_convergence_rate(x, ...) + +# S3 method for rvar +pareto_convergence_rate(x, ...)
    @@ -150,15 +175,16 @@

    Arguments

    r_eff

    (numeric) relative effective sample size estimate. If -r_eff is omitted, it will be calculated assuming the draws are -from MCMC.

    +r_eff is NULL, it will be calculated assuming the draws are +from MCMC. Default is NULL.

    ndraws_tail

    (numeric) number of draws for the tail. If ndraws_tail is not specified, it will be calculated as ceiling(3 * sqrt(length(x) / r_eff)) if length(x) > 225 and -length(x) / 5 otherwise (see Appendix H in Vehtari et al. (2022)).

    +length(x) / 5 otherwise (see Appendix H in Vehtari et +al. (2024)).

    verbose
    @@ -166,6 +192,12 @@

    Arguments

    TRUE, messages related to Pareto diagnostics will be printed. Default is FALSE.

    + +
    are_log_weights
    +

    (logical) Are the draws log weights? Default is +FALSE. If TRUE computation will take into account that the +draws are log weights, and only right tail will be smoothed.

    +

    Value

    @@ -186,25 +218,47 @@

    Details

    Pareto smoothed estimates can be considered reliable. If the actual sample size is lower than min_ss, increasing the sample size might result in more reliable estimates. For further details, see -Section 3.2.3, Equation 11 in Vehtari et al. (2022).

    +Section 3.2.3, Equation 11 in Vehtari et al. (2024).

  • khat_threshold: Threshold below which k-hat values result in reliable Pareto smoothed estimates. The threshold is lower for smaller effective sample sizes. If k-hat is larger than the threshold, increasing the total sample size may improve reliability of estimates. For further details, see Section 3.2.4, Equation 13 -in Vehtari et al. (2022).

  • +in Vehtari et al. (2024).

  • convergence_rate: Relative convergence rate compared to the central limit theorem. Applicable only if the actual sample size is sufficiently large (greater than min_ss). The convergence rate tells the rate at which the variance of an estimate reduces when the sample size is increased, compared to the central limit -theorem convergence rate. See Appendix B in Vehtari et al. (2022).

  • +theorem convergence rate. See Appendix B in Vehtari et al. (2024).

    References

    Aki Vehtari, Daniel Simpson, Andrew Gelman, Yuling Yao and -Jonah Gabry (2022). Pareto Smoothed Importance Sampling. -arxiv:arXiv:1507.02646

    +Jonah Gabry (2024). Pareto Smoothed Importance Sampling. +Journal of Machine Learning Research, 25(72):1-58. +PDF

    +
    +
    +

    See also

    +

    pareto_khat, pareto_min_ss, +pareto_khat_threshold, and pareto_convergence_rate for +individual diagnostics; and pareto_smooth for Pareto smoothing +draws.

    +

    Other diagnostics: +ess_basic(), +ess_bulk(), +ess_quantile(), +ess_sd(), +ess_tail(), +mcse_mean(), +mcse_quantile(), +mcse_sd(), +pareto_khat(), +rhat(), +rhat_basic(), +rhat_nested(), +rstar()

    diff --git a/docs/reference/pareto_khat.html b/docs/reference/pareto_khat.html index 286f419..f40686c 100644 --- a/docs/reference/pareto_khat.html +++ b/docs/reference/pareto_khat.html @@ -2,7 +2,7 @@ Pareto khat diagnostic — pareto_khat • posterior @@ -20,7 +20,7 @@ posterior - 1.5.0 + 1.6.0
    @@ -110,7 +110,7 @@

    Pareto khat diagnostic

    Estimate Pareto k value by fitting a Generalized Pareto Distribution to one or two tails of x. This can be used to estimate the number of fractional moments that is useful for convergence -diagnostics. For further details see Vehtari et al. (2022).

    +diagnostics. For further details see Vehtari et al. (2024).

    @@ -123,6 +123,7 @@

    Pareto khat diagnostic

    r_eff = NULL, ndraws_tail = NULL, verbose = FALSE, + are_log_weights = FALSE, ... ) @@ -152,15 +153,16 @@

    Arguments

    r_eff

    (numeric) relative effective sample size estimate. If -r_eff is omitted, it will be calculated assuming the draws are -from MCMC.

    +r_eff is NULL, it will be calculated assuming the draws are +from MCMC. Default is NULL.

    ndraws_tail

    (numeric) number of draws for the tail. If ndraws_tail is not specified, it will be calculated as ceiling(3 * sqrt(length(x) / r_eff)) if length(x) > 225 and -length(x) / 5 otherwise (see Appendix H in Vehtari et al. (2022)).

    +length(x) / 5 otherwise (see Appendix H in Vehtari et +al. (2024)).

    verbose
    @@ -168,36 +170,73 @@

    Arguments

    TRUE, messages related to Pareto diagnostics will be printed. Default is FALSE.

    + +
    are_log_weights
    +

    (logical) Are the draws log weights? Default is +FALSE. If TRUE computation will take into account that the +draws are log weights, and only right tail will be smoothed.

    +

    Value

    -

    khat estimated Generalized Pareto Distribution shape parameter k

    +

    If the input is an array, returns a single numeric value. If any of the draws +is non-finite, that is, NA, NaN, Inf, or -Inf, the returned output +will be (numeric) NA. Also, if all draws within any of the chains of a +variable are the same (constant), the returned output will be (numeric) NA

    + + +

    as well. The reason for the latter is that, for constant draws, we cannot +distinguish between variables that are supposed to be constant (e.g., a +diagonal element of a correlation matrix is always 1) or variables that just +happened to be constant because of a failure of convergence or other problems +in the sampling process.

    + + +

    If the input is an rvar, returns an array of the same dimensions as the +rvar, where each element is equal to the value that would be returned by +passing the draws array for that element of the rvar to this function.

    References

    Aki Vehtari, Daniel Simpson, Andrew Gelman, Yuling Yao and -Jonah Gabry (2022). Pareto Smoothed Importance Sampling. -arxiv:arXiv:1507.02646

    +Jonah Gabry (2024). Pareto Smoothed Importance Sampling. +Journal of Machine Learning Research, 25(72):1-58. +PDF

    +
    +
    +

    See also

    +

    pareto_diags for additional related diagnostics, and +pareto_smooth for Pareto smoothed draws.

    +

    Other diagnostics: +ess_basic(), +ess_bulk(), +ess_quantile(), +ess_sd(), +ess_tail(), +mcse_mean(), +mcse_quantile(), +mcse_sd(), +pareto_diags(), +rhat(), +rhat_basic(), +rhat_nested(), +rstar()

    Examples

    mu <- extract_variable_matrix(example_draws(), "mu")
     pareto_khat(mu)
    -#> $khat
     #> [1] 0.1979001
    -#> 
     
     d <- as_draws_rvars(example_draws("multi_normal"))
     pareto_khat(d$Sigma)
    -#> $khat
     #>            [,1]       [,2]        [,3]
     #> [1,] 0.05601935 0.04156719  0.05091481
     #> [2,] 0.04156719 0.10157218  0.06191862
     #> [3,] 0.05091481 0.06191862 -0.08123058
    -#> 
     
    diff --git a/docs/reference/pareto_smooth.html b/docs/reference/pareto_smooth.html index cbf7c19..639bc4a 100644 --- a/docs/reference/pareto_smooth.html +++ b/docs/reference/pareto_smooth.html @@ -1,7 +1,7 @@ Pareto smoothing — pareto_smooth • posterior @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 @@ -108,14 +108,14 @@

    Pareto smoothing

    Smooth the tail draws of x by replacing tail draws by order statistics of a generalized Pareto distribution fit to the -tail(s). For further details see Vehtari et al. (2022).

    +tail(s). For further details see Vehtari et al. (2024).

    pareto_smooth(x, ...)
     
     # S3 method for rvar
    -pareto_smooth(x, return_k = TRUE, extra_diags = FALSE, ...)
    +pareto_smooth(x, return_k = FALSE, extra_diags = FALSE, ...)
     
     # S3 method for default
     pareto_smooth(
    @@ -123,9 +123,10 @@ 

    Pareto smoothing

    tail = c("both", "right", "left"), r_eff = NULL, ndraws_tail = NULL, - return_k = TRUE, + return_k = FALSE, extra_diags = FALSE, - verbose = FALSE, + verbose = TRUE, + are_log_weights = FALSE, ... )
    @@ -145,8 +146,9 @@

    Arguments

    return_k

    (logical) Should the Pareto khat be included in -output? If TRUE, output will be a list containing of smoothed -draws and diagnostics. Default is TRUE.

    +output? If TRUE, output will be a list containing smoothed +draws and diagnostics, otherwise it will be a numeric of the +smoothed draws. Default is FALSE.

    extra_diags
    @@ -165,15 +167,16 @@

    Arguments

    r_eff

    (numeric) relative effective sample size estimate. If -r_eff is omitted, it will be calculated assuming the draws are -from MCMC.

    +r_eff is NULL, it will be calculated assuming the draws are +from MCMC. Default is NULL.

    ndraws_tail

    (numeric) number of draws for the tail. If ndraws_tail is not specified, it will be calculated as ceiling(3 * sqrt(length(x) / r_eff)) if length(x) > 225 and -length(x) / 5 otherwise (see Appendix H in Vehtari et al. (2022)).

    +length(x) / 5 otherwise (see Appendix H in Vehtari et +al. (2024)).

    verbose
    @@ -181,33 +184,50 @@

    Arguments

    TRUE, messages related to Pareto diagnostics will be printed. Default is FALSE.

    + +
    are_log_weights
    +

    (logical) Are the draws log weights? Default is +FALSE. If TRUE computation will take into account that the +draws are log weights, and only right tail will be smoothed.

    +

    Value

    Either a vector x of smoothed values or a named list -containing the vector x and a named list diagnostics containing Pareto smoothing -diagnostics:

    • khat: estimated Pareto k shape parameter, and -optionally

    • -
    • min_ss: minimum sample size for reliable Pareto -smoothed estimate

    • -
    • khat_threshold: khat-threshold for reliable +containing the vector x and a named list diagnostics

      + + +

      containing numeric values:

      • khat: estimated Pareto k shape parameter, and optionally

      • +
      • min_ss: minimum sample size for reliable Pareto smoothed +estimate

      • +
      • khat_threshold: sample size specific khat threshold for +reliable Pareto smoothed estimates

      • +
      • convergence_rate: Relative convergence rate for Pareto smoothed estimates

      • -
      • convergence_rate: Relative convergence rate for Pareto smoothed estimates

      • -
    +

    If any of the draws is non-finite, that is, NA, NaN, Inf, or +-Inf, Pareto smoothing will not be performed, and the original +draws will be returned and and diagnostics will be NA (numeric).

    +

    References

    Aki Vehtari, Daniel Simpson, Andrew Gelman, Yuling Yao and -Jonah Gabry (2022). Pareto Smoothed Importance Sampling. -arxiv:arXiv:1507.02646

    +Jonah Gabry (2024). Pareto Smoothed Importance Sampling. +Journal of Machine Learning Research, 25(72):1-58. +PDF

    +
    +
    +

    See also

    +

    pareto_khat for only calculating khat, and +pareto_diags for additional diagnostics.

    Examples

    mu <- extract_variable_matrix(example_draws(), "mu")
     pareto_smooth(mu)
    -#> $x
    +#> Pareto k-hat = 0.2.
     #>          chain
     #> iteration          1            2           3           4
     #>       1    2.0058311   2.99038071  1.79436801  6.45897880
    @@ -310,30 +330,23 @@ 

    Examples

    #> 98 6.1728283 1.51990114 0.15400719 2.72636415 #> 99 1.5485347 8.53166943 3.17470254 0.61142881 #> 100 7.5338964 -1.44854601 3.57555760 7.04723309 -#> -#> $diagnostics -#> $diagnostics$khat -#> [1] 0.1979001 -#> -#> d <- as_draws_rvars(example_draws("multi_normal")) pareto_smooth(d$Sigma) -#> $x +#> Pareto k-hat = 0.06. +#> Pareto k-hat = 0.04. +#> Pareto k-hat = 0.05. +#> Pareto k-hat = 0.04. +#> Pareto k-hat = 0.1. +#> Pareto k-hat = 0.06. +#> Pareto k-hat = 0.05. +#> Pareto k-hat = 0.06. +#> Pareto k-hat = -0.08. #> rvar<100,4>[3,3] mean ± sd: #> [,1] [,2] [,3] #> [1,] 1.28 ± 0.17 0.53 ± 0.21 -0.40 ± 0.29 #> [2,] 0.53 ± 0.21 3.66 ± 0.45 -2.10 ± 0.49 #> [3,] -0.40 ± 0.29 -2.10 ± 0.49 8.12 ± 0.96 -#> -#> $diagnostics -#> $diagnostics$khat -#> [,1] [,2] [,3] -#> [1,] 0.05601935 0.04156719 0.05091481 -#> [2,] 0.04156719 0.10157218 0.06191862 -#> [3,] 0.05091481 0.06191862 -0.08123058 -#> -#>
    diff --git a/docs/reference/posterior-package.html b/docs/reference/posterior-package.html index bf38431..fda7fc4 100644 --- a/docs/reference/posterior-package.html +++ b/docs/reference/posterior-package.html @@ -31,7 +31,7 @@ posterior - 1.5.0 + 1.6.0 @@ -161,6 +161,26 @@

    Package options

    trigger an automatic merging of chains, for example, because chains do not match between two objects involved in a binary operation. Whether this causes a warning can be controlled by this option.

    + + +
    +

    Author

    +

    Maintainer: Paul-Christian Bürkner paul.buerkner@gmail.com

    +

    Authors:

    Other contributors:

    • Måns Magnusson [contributor]

    • +
    • Rok Češnovar [contributor]

    • +
    • Ben Lambert [contributor]

    • +
    • Ozan Adıgüzel [contributor]

    • +
    • Jacob Socolar [contributor]

    • +
    • Noa Kallioinen [contributor]

    diff --git a/docs/reference/print.draws_array.html b/docs/reference/print.draws_array.html index 1c65ef7..c26582a 100644 --- a/docs/reference/print.draws_array.html +++ b/docs/reference/print.draws_array.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/print.draws_df.html b/docs/reference/print.draws_df.html index 0472145..9b95be5 100644 --- a/docs/reference/print.draws_df.html +++ b/docs/reference/print.draws_df.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/print.draws_list.html b/docs/reference/print.draws_list.html index 81574f4..4ee47f8 100644 --- a/docs/reference/print.draws_list.html +++ b/docs/reference/print.draws_list.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/print.draws_matrix.html b/docs/reference/print.draws_matrix.html index 42bf622..85db03e 100644 --- a/docs/reference/print.draws_matrix.html +++ b/docs/reference/print.draws_matrix.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/print.draws_rvars.html b/docs/reference/print.draws_rvars.html index 2e2d42d..3620971 100644 --- a/docs/reference/print.draws_rvars.html +++ b/docs/reference/print.draws_rvars.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/print.draws_summary.html b/docs/reference/print.draws_summary.html index 9c83035..839f1c9 100644 --- a/docs/reference/print.draws_summary.html +++ b/docs/reference/print.draws_summary.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/print.rvar.html b/docs/reference/print.rvar.html index 67ece36..0f3029d 100644 --- a/docs/reference/print.rvar.html +++ b/docs/reference/print.rvar.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/ps_convergence_rate.html b/docs/reference/ps_convergence_rate.html new file mode 100644 index 0000000..d31c252 --- /dev/null +++ b/docs/reference/ps_convergence_rate.html @@ -0,0 +1,173 @@ + +Pareto convergence rate — ps_convergence_rate • posterior + + +
    +
    + + + +
    +
    + + +
    +

    Given number of draws and scalar or array of k's, compute the +relative convergence rate of PSIS estimate RMSE. See Appendix B of +Vehtari et al. (2024). This function is exported to be usable by +other packages. For user-facing diagnostic functions, see +pareto_convergence_rate and pareto_diags.

    +
    + +
    +
    ps_convergence_rate(k, ndraws, ...)
    +
    + +
    +

    Arguments

    +
    k
    +

    pareto-k values

    + + +
    ndraws
    +

    number of draws

    + + +
    ...
    +

    unused

    + +
    +
    +

    Value

    + + +

    convergence rate

    +
    +
    +

    See also

    +

    Other helper-functions: +ps_khat_threshold(), +ps_min_ss(), +ps_tail_length()

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.0.7.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/ps_khat_threshold.html b/docs/reference/ps_khat_threshold.html new file mode 100644 index 0000000..5e82436 --- /dev/null +++ b/docs/reference/ps_khat_threshold.html @@ -0,0 +1,171 @@ + +Pareto k-hat threshold — ps_khat_threshold • posterior + + +
    +
    + + + +
    +
    + + +
    +

    Given number of draws, computes khat threshold for reliable Pareto +smoothed estimate (to have small probability of large error). See +section 3.2.4, equation (13) of Vehtari et al. (2024). This +function is exported to be usable by other packages. For +user-facing diagnostic functions, see pareto_khat_threshold and +pareto_diags.

    +
    + +
    +
    ps_khat_threshold(ndraws, ...)
    +
    + +
    +

    Arguments

    +
    ndraws
    +

    number of draws

    + + +
    ...
    +

    unused

    + +
    +
    +

    Value

    + + +

    threshold

    +
    +
    +

    See also

    +

    Other helper-functions: +ps_convergence_rate(), +ps_min_ss(), +ps_tail_length()

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.0.7.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/ps_min_ss.html b/docs/reference/ps_min_ss.html new file mode 100644 index 0000000..bf028f3 --- /dev/null +++ b/docs/reference/ps_min_ss.html @@ -0,0 +1,169 @@ + +Pareto-smoothing minimum sample-size — ps_min_ss • posterior + + +
    +
    + + + +
    +
    + + +
    +

    Given Pareto-k computes the minimum sample size for reliable Pareto +smoothed estimate (to have small probability of large error). See +section 3.2.3 in Vehtari et al. (2024). This function is exported +to be usable by other packages. For user-facing diagnostic functions, see +pareto_min_ss and pareto_diags.

    +
    + +
    +
    ps_min_ss(k, ...)
    +
    + +
    +

    Arguments

    +
    k
    +

    pareto k value

    + + +
    ...
    +

    unused

    + +
    +
    +

    Value

    + + +

    minimum sample size

    +
    +
    +

    See also

    +

    Other helper-functions: +ps_convergence_rate(), +ps_khat_threshold(), +ps_tail_length()

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.0.7.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/ps_tail_length.html b/docs/reference/ps_tail_length.html new file mode 100644 index 0000000..514d8ad --- /dev/null +++ b/docs/reference/ps_tail_length.html @@ -0,0 +1,169 @@ + +Pareto tail length — ps_tail_length • posterior + + +
    +
    + + + +
    +
    + + +
    +

    Calculate the tail length from number of draws and relative efficiency +r_eff. See Appendix H in Vehtari et al. (2024). This function is +used internally and is exported to be available for other packages.

    +
    + +
    +
    ps_tail_length(ndraws, r_eff, ...)
    +
    + +
    +

    Arguments

    +
    ndraws
    +

    number of draws

    + + +
    r_eff
    +

    relative efficiency

    + + +
    ...
    +

    unused

    + +
    +
    +

    Value

    + + +

    tail length

    +
    +
    +

    See also

    +

    Other helper-functions: +ps_convergence_rate(), +ps_khat_threshold(), +ps_min_ss()

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.0.7.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/quantile2.html b/docs/reference/quantile2.html index 24a0721..e2ce306 100644 --- a/docs/reference/quantile2.html +++ b/docs/reference/quantile2.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/r_scale.html b/docs/reference/r_scale.html index 6aa2938..65b1e65 100644 --- a/docs/reference/r_scale.html +++ b/docs/reference/r_scale.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rdo.html b/docs/reference/rdo.html index 9185190..1ba8c75 100644 --- a/docs/reference/rdo.html +++ b/docs/reference/rdo.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 @@ -117,7 +117,7 @@

    Execute expressions of random variables

    Arguments

    expr

    (expression) A bare expression that can (optionally) contain -rvars. The expression supports quasiquotation.

    +rvars. The expression supports quasiquotation.

    dim
    diff --git a/docs/reference/reexports.html b/docs/reference/reexports.html index cd209a6..eb2e220 100644 --- a/docs/reference/reexports.html +++ b/docs/reference/reexports.html @@ -24,7 +24,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rename_variables.html b/docs/reference/rename_variables.html index 14fca7b..fef58b4 100644 --- a/docs/reference/rename_variables.html +++ b/docs/reference/rename_variables.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -137,29 +137,29 @@

    Value

    Examples

    x <- as_draws_df(example_draws())
    -variables(x)
    +variables(x)
     #>  [1] "mu"       "tau"      "theta[1]" "theta[2]" "theta[3]" "theta[4]"
     #>  [7] "theta[5]" "theta[6]" "theta[7]" "theta[8]"
     
     x <- rename_variables(x, mean = mu, sigma = tau)
    -variables(x)
    +variables(x)
     #>  [1] "mean"     "sigma"    "theta[1]" "theta[2]" "theta[3]" "theta[4]"
     #>  [7] "theta[5]" "theta[6]" "theta[7]" "theta[8]"
     
     x <- rename_variables(x, b = `theta[1]`) # or b  = "theta[1]"
    -variables(x)
    +variables(x)
     #>  [1] "mean"     "sigma"    "b"        "theta[2]" "theta[3]" "theta[4]"
     #>  [7] "theta[5]" "theta[6]" "theta[7]" "theta[8]"
     
     # rename all elements of 'theta' at once
     x <- rename_variables(x, alpha = theta)
    -variables(x)
    +variables(x)
     #>  [1] "mean"     "sigma"    "b"        "alpha[2]" "alpha[3]" "alpha[4]"
     #>  [7] "alpha[5]" "alpha[6]" "alpha[7]" "alpha[8]"
     
    diff --git a/docs/reference/repair_draws.html b/docs/reference/repair_draws.html
    index 1ee2335..2228cf9 100644
    --- a/docs/reference/repair_draws.html
    +++ b/docs/reference/repair_draws.html
    @@ -18,7 +18,7 @@
           
           
             posterior
    -        1.5.0
    +        1.6.0
           
         
    diff --git a/docs/reference/resample_draws.html b/docs/reference/resample_draws.html index 79bc645..c509774 100644 --- a/docs/reference/resample_draws.html +++ b/docs/reference/resample_draws.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/reserved_variables.html b/docs/reference/reserved_variables.html index f0fb854..5c5ec95 100644 --- a/docs/reference/reserved_variables.html +++ b/docs/reference/reserved_variables.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -168,7 +168,6 @@

    Examples

    # if we add weights, the `.log_weight` reserved variable is used x <- weight_draws(x, rexp(ndraws(x))) -#> Loading required namespace: testthat reserved_variables(x) #> [1] ".log_weight" diff --git a/docs/reference/rfun.html b/docs/reference/rfun.html index dbe4c55..5489821 100644 --- a/docs/reference/rfun.html +++ b/docs/reference/rfun.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rhat.html b/docs/reference/rhat.html index e2c377c..9ab5cd2 100644 --- a/docs/reference/rhat.html +++ b/docs/reference/rhat.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 @@ -174,6 +174,8 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), +pareto_diags(), +pareto_khat(), rhat_basic(), rhat_nested(), rstar()

    diff --git a/docs/reference/rhat_basic.html b/docs/reference/rhat_basic.html index 5b3e533..42f61c0 100644 --- a/docs/reference/rhat_basic.html +++ b/docs/reference/rhat_basic.html @@ -20,7 +20,7 @@ posterior - 1.5.0 + 1.6.0 @@ -184,8 +184,10 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), -rhat_nested(), +pareto_diags(), +pareto_khat(), rhat(), +rhat_nested(), rstar()

    diff --git a/docs/reference/rhat_nested.html b/docs/reference/rhat_nested.html index 6561f22..327c5ff 100644 --- a/docs/reference/rhat_nested.html +++ b/docs/reference/rhat_nested.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 @@ -191,8 +191,10 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), -rhat_basic(), +pareto_diags(), +pareto_khat(), rhat(), +rhat_basic(), rstar()

    diff --git a/docs/reference/rstar.html b/docs/reference/rstar.html index f64dab4..a6a1957 100644 --- a/docs/reference/rstar.html +++ b/docs/reference/rstar.html @@ -22,7 +22,7 @@ posterior - 1.5.0 + 1.6.0 @@ -226,9 +226,11 @@

    See also

    mcse_mean(), mcse_quantile(), mcse_sd(), +pareto_diags(), +pareto_khat(), +rhat(), rhat_basic(), -rhat_nested(), -rhat()

    +rhat_nested()

    @@ -249,6 +251,7 @@

    Examples

    # can use other classification methods in caret library print(rstar(x, method = "knn")) } +#> Warning: package ‘ggplot2’ was built under R version 4.2.3 #> randomForest 4.7-1.1 #> Type rfNews() to see new features/changes/bug fixes. #> diff --git a/docs/reference/rvar-dist.html b/docs/reference/rvar-dist.html index 041060e..bea313a 100644 --- a/docs/reference/rvar-dist.html +++ b/docs/reference/rvar-dist.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/rvar-matmult.html b/docs/reference/rvar-matmult.html index eaed0ee..f14f893 100644 --- a/docs/reference/rvar-matmult.html +++ b/docs/reference/rvar-matmult.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -108,7 +108,10 @@

    Matrix multiplication of random variables

    -
    x %**% y
    +
    x %**% y
    +
    +# S3 method for rvar
    +matrixOps(x, y)
    @@ -140,8 +143,9 @@

    Details

    by rvars and are broadcasted across all draws of the rvar argument. Tensor multiplication is used to efficiently multiply matrices across draws, so if either x or y is an rvar, x %**% y will be much faster than rdo(x %*% y).

    -

    Because rvar is an S3 class and S3 classes cannot properly override %*%, rvars use -%**% for matrix multiplication.

    +

    In R >= 4.3, you can also use %*% in place of %**% for matrix multiplication +of rvars. In R < 4.3, S3 classes cannot properly override %*%, so +you must use %**% for matrix multiplication of rvars.

    diff --git a/docs/reference/rvar-slice.html b/docs/reference/rvar-slice.html index c6d628f..54bd7b1 100644 --- a/docs/reference/rvar-slice.html +++ b/docs/reference/rvar-slice.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/rvar-summaries-over-draws.html b/docs/reference/rvar-summaries-over-draws.html index 9e6802a..da3cbca 100644 --- a/docs/reference/rvar-summaries-over-draws.html +++ b/docs/reference/rvar-summaries-over-draws.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rvar-summaries-within-draws.html b/docs/reference/rvar-summaries-within-draws.html index cbc0537..0fc61b1 100644 --- a/docs/reference/rvar-summaries-within-draws.html +++ b/docs/reference/rvar-summaries-within-draws.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rvar.html b/docs/reference/rvar.html index 4f35050..93f7714 100644 --- a/docs/reference/rvar.html +++ b/docs/reference/rvar.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rvar_apply.html b/docs/reference/rvar_apply.html index bebd22b..9e35dd0 100644 --- a/docs/reference/rvar_apply.html +++ b/docs/reference/rvar_apply.html @@ -19,7 +19,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rvar_factor.html b/docs/reference/rvar_factor.html index f022664..b76b662 100644 --- a/docs/reference/rvar_factor.html +++ b/docs/reference/rvar_factor.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rvar_ifelse.html b/docs/reference/rvar_ifelse.html index 90afcfa..5d833dd 100644 --- a/docs/reference/rvar_ifelse.html +++ b/docs/reference/rvar_ifelse.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rvar_is_finite.html b/docs/reference/rvar_is_finite.html index 69560d3..296c67e 100644 --- a/docs/reference/rvar_is_finite.html +++ b/docs/reference/rvar_is_finite.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/rvar_rng.html b/docs/reference/rvar_rng.html index 8b40e0f..044e9f0 100644 --- a/docs/reference/rvar_rng.html +++ b/docs/reference/rvar_rng.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/split_chains.html b/docs/reference/split_chains.html index 2b1a475..150f775 100644 --- a/docs/reference/split_chains.html +++ b/docs/reference/split_chains.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/sub-.draws_array.html b/docs/reference/sub-.draws_array.html index 197198f..c9f4c83 100644 --- a/docs/reference/sub-.draws_array.html +++ b/docs/reference/sub-.draws_array.html @@ -23,7 +23,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/sub-.draws_matrix.html b/docs/reference/sub-.draws_matrix.html index cd37d42..314d6b4 100644 --- a/docs/reference/sub-.draws_matrix.html +++ b/docs/reference/sub-.draws_matrix.html @@ -23,7 +23,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/reference/subset_draws.html b/docs/reference/subset_draws.html index 9c6594a..eb1fd8f 100644 --- a/docs/reference/subset_draws.html +++ b/docs/reference/subset_draws.html @@ -17,7 +17,7 @@ posterior - 1.5.0 + 1.6.0 @@ -119,6 +119,8 @@

    Subset draws objects

    draw = NULL, regex = FALSE, unique = TRUE, + exclude = FALSE, + scalar = FALSE, ... ) @@ -131,6 +133,8 @@

    Subset draws objects

    draw = NULL, regex = FALSE, unique = TRUE, + exclude = FALSE, + scalar = FALSE, ... ) @@ -143,6 +147,8 @@

    Subset draws objects

    draw = NULL, regex = FALSE, unique = TRUE, + exclude = FALSE, + scalar = FALSE, ... ) @@ -155,6 +161,8 @@

    Subset draws objects

    draw = NULL, regex = FALSE, unique = TRUE, + exclude = FALSE, + scalar = FALSE, ... ) @@ -167,6 +175,8 @@

    Subset draws objects

    draw = NULL, regex = FALSE, unique = TRUE, + exclude = FALSE, + scalar = FALSE, ... ) @@ -189,8 +199,8 @@

    Arguments

    variable
    -

    (character vector) The variables to select. All elements of -non-scalar variables can be selected at once.

    +

    (character vector) The variables to select. All +elements of non-scalar variables can be selected at once.

    iteration
    @@ -202,21 +212,36 @@

    Arguments

    draw
    -

    (integer vector) The draw indices to be select. Subsetting draw -indices will lead to an automatic merging of chains via merge_chains.

    +

    (integer vector) The draw indices to be +select. Subsetting draw indices will lead to an automatic merging +of chains via merge_chains.

    regex

    (logical) Should variable should be treated as a -(vector of) regular expressions? Any variable in x matching at least one -of the regular expressions will be selected. Defaults to FALSE.

    +(vector of) regular expressions? Any variable in x matching at +least one of the regular expressions will be selected. Defaults +to FALSE.

    unique
    -

    (logical) Should duplicated selection of chains, iterations, or -draws be allowed? If TRUE (the default) only unique chains, iterations, -and draws are selected regardless of how often they appear in the -respective selecting arguments.

    +

    (logical) Should duplicated selection of chains, +iterations, or draws be allowed? If TRUE (the default) only +unique chains, iterations, and draws are selected regardless of +how often they appear in the respective selecting arguments.

    + + +
    exclude
    +

    (logical) Should the selected subset be excluded? +If FALSE (the default) only the selected subset will be +returned. If TRUE everything but the selected subset will be +returned.

    + + +
    scalar
    +

    (logical) Should only scalar variables be selected? +If FALSE (the default), all variables with matching names and +arbitrary indices will be selected (see examples).

    @@ -435,6 +460,9 @@

    Examples

    #> #> # ... with 95 more iterations, and 4 more variables +# trying to extract only a scalar 'theta' will fail +# subset_draws(x, variable = "theta", scalar = TRUE) +
    diff --git a/docs/reference/thin_draws.html b/docs/reference/thin_draws.html index afbc469..16d871d 100644 --- a/docs/reference/thin_draws.html +++ b/docs/reference/thin_draws.html @@ -1,5 +1,6 @@ -Thin draws objects — thin_draws • posteriorThin draws objects — thin_draws • posterior @@ -17,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 @@ -104,17 +105,18 @@

    Thin draws objects

    -

    Thin draws objects to reduce their size and autocorrelation in the chains.

    +

    Thin draws objects to reduce their size and autocorrelation in +the chains.

    -
    thin_draws(x, thin, ...)
    +    
    thin_draws(x, thin = NULL, ...)
     
     # S3 method for draws
    -thin_draws(x, thin, ...)
    +thin_draws(x, thin = NULL, ...)
     
     # S3 method for rvar
    -thin_draws(x, thin, ...)
    +thin_draws(x, thin = NULL, ...)
    @@ -125,7 +127,15 @@

    Arguments

    thin
    -

    (positive integer) The period for selecting draws.

    +

    (positive numeric) The period for selecting draws. Must +be between 1 and the number of iterations. If the value is not an +integer, the draws will be selected such that the number of draws +returned is equal to round(ndraws(x) / thin). Intervals between +selected draws will be either ceiling(thin) or floor(thin), such +that the average interval will be close to the thin value. If +NULL, it will be automatically calculated based on bulk and +tail effective sample size as suggested by Säilynoja et +al. (2022).

    ...
    @@ -138,6 +148,13 @@

    Value

    A draws object of the same class as x.

    +
    +

    References

    +

    Teemu Säilynoja, Paul-Christian Bürkner, and Aki Vehtari (2022). +Graphical test for discrete uniformity and its applications in +goodness-of-fit evaluation and multiple sample comparison. +Statistics and Computing. 32, 32. doi:10.1007/s11222-022-10090-6

    +

    Examples

    diff --git a/docs/reference/u_scale.html b/docs/reference/u_scale.html index e01e2af..31194a5 100644 --- a/docs/reference/u_scale.html +++ b/docs/reference/u_scale.html @@ -20,7 +20,7 @@ posterior - 1.5.0 + 1.6.0
    diff --git a/docs/reference/variables-set.html b/docs/reference/variables-set.html new file mode 100644 index 0000000..d410a54 --- /dev/null +++ b/docs/reference/variables-set.html @@ -0,0 +1,215 @@ + +Set variable names in draws objects — variables<- • posterior + + +
    +
    + + + +
    +
    + + +
    +

    Set variable names for all variables in a draws object. The +set_variables() form is useful when using pipe operators.

    +
    + +
    +
    variables(x, ...) <- value
    +
    +# S3 method for draws_matrix
    +variables(x, with_indices = TRUE, ...) <- value
    +
    +# S3 method for draws_array
    +variables(x, with_indices = TRUE, ...) <- value
    +
    +# S3 method for draws_df
    +variables(x, with_indices = TRUE, ...) <- value
    +
    +# S3 method for draws_list
    +variables(x, with_indices = TRUE, ...) <- value
    +
    +# S3 method for draws_rvars
    +variables(x, with_indices = FALSE, ...) <- value
    +
    +set_variables(x, variables, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    (draws) A draws object or another R object for which the method +is defined.

    + + +
    ...
    +

    Arguments passed to individual methods (if applicable).

    + + +
    value, variables
    +

    (character vector) new variable names.

    + + +
    with_indices
    +

    (logical) Should indices be included in variable +names? For example, if the object includes variables named "x[1]" and +"x[2]", if TRUE, c("x[1]", "x[2]") is returned; if FALSE, only "x" +is returned. Defaults to TRUE for all formats except draws_rvars().

    + +
    +
    +

    Value

    + + +

    Returns a draws object of the same format as x, with +variables named as specified.

    +
    +
    +

    Details

    +

    variables(x) <- value allows you to modify the vector of variable names, +similar to how names(x) <- value works for vectors and lists. For renaming +specific variables, set_variables(x, value) works equivalently, but is more intuitive +when using the pipe operator.

    +

    For renaming specific variables, rename_variables() may offer a more +convenient approach.

    +
    + + +
    +

    Examples

    +
    x <- example_draws()
    +
    +variables(x)
    +#>  [1] "mu"       "tau"      "theta[1]" "theta[2]" "theta[3]" "theta[4]"
    +#>  [7] "theta[5]" "theta[6]" "theta[7]" "theta[8]"
    +nvariables(x)
    +#> [1] 10
    +variables(x) <- letters[1:nvariables(x)]
    +
    +# or equivalently...
    +x <- set_variables(x, letters[1:nvariables(x)])
    +
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.0.7.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/variables.html b/docs/reference/variables.html new file mode 100644 index 0000000..6705a7e --- /dev/null +++ b/docs/reference/variables.html @@ -0,0 +1,209 @@ + +Get variable names from draws objects — variables • posterior + + +
    +
    + + + +
    +
    + + +
    +

    Get variable names from draws objects.

    +
    + +
    +
    variables(x, ...)
    +
    +# S3 method for draws_matrix
    +variables(x, reserved = FALSE, with_indices = TRUE, ...)
    +
    +# S3 method for draws_array
    +variables(x, reserved = FALSE, with_indices = TRUE, ...)
    +
    +# S3 method for draws_df
    +variables(x, reserved = FALSE, with_indices = TRUE, ...)
    +
    +# S3 method for draws_list
    +variables(x, reserved = FALSE, with_indices = TRUE, ...)
    +
    +# S3 method for draws_rvars
    +variables(x, reserved = FALSE, with_indices = FALSE, ...)
    +
    +nvariables(x, ...)
    +
    + +
    +

    Arguments

    +
    x
    +

    (draws) A draws object or another R object for which the method +is defined.

    + + +
    ...
    +

    Arguments passed to individual methods (if applicable).

    + + +
    reserved
    +

    (logical) Should reserved variables be included in the +output? Defaults to FALSE. See reserved_variables for an overview of +currently reserved variable names.

    + + +
    with_indices
    +

    (logical) Should indices be included in variable +names? For example, if the object includes variables named "x[1]" and +"x[2]", if TRUE, c("x[1]", "x[2]") is returned; if FALSE, only "x" +is returned. Defaults to TRUE for all formats except draws_rvars().

    + +
    +
    +

    Value

    + + +

    For variables(), a character vector.

    + + +

    For nvariables(), a scalar integer.

    +
    +
    +

    Details

    +

    variables() returns a vector of all variable names, and nvariables() +returns the number of variables.

    +
    +
    +

    See also

    + +
    + +
    +

    Examples

    +
    x <- example_draws()
    +
    +variables(x)
    +#>  [1] "mu"       "tau"      "theta[1]" "theta[2]" "theta[3]" "theta[4]"
    +#>  [7] "theta[5]" "theta[6]" "theta[7]" "theta[8]"
    +nvariables(x)
    +#> [1] 10
    +variables(x) <- letters[1:nvariables(x)]
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.0.7.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/weight_draws.html b/docs/reference/weight_draws.html index eac63e8..6eb3931 100644 --- a/docs/reference/weight_draws.html +++ b/docs/reference/weight_draws.html @@ -21,7 +21,7 @@ posterior - 1.5.0 + 1.6.0 @@ -119,19 +119,19 @@

    Weight draws objects

    weight_draws(x, weights, ...)
     
     # S3 method for draws_matrix
    -weight_draws(x, weights, log = FALSE, ...)
    +weight_draws(x, weights, log = FALSE, pareto_smooth = FALSE, ...)
     
     # S3 method for draws_array
    -weight_draws(x, weights, log = FALSE, ...)
    +weight_draws(x, weights, log = FALSE, pareto_smooth = FALSE, ...)
     
     # S3 method for draws_df
    -weight_draws(x, weights, log = FALSE, ...)
    +weight_draws(x, weights, log = FALSE, pareto_smooth = FALSE, ...)
     
     # S3 method for draws_list
    -weight_draws(x, weights, log = FALSE, ...)
    +weight_draws(x, weights, log = FALSE, pareto_smooth = FALSE, ...)
     
     # S3 method for draws_rvars
    -weight_draws(x, weights, log = FALSE, ...)
    +weight_draws(x, weights, log = FALSE, pareto_smooth = FALSE, ...)
    @@ -153,10 +153,15 @@

    Arguments

    log
    -

    (logicla) Are the weights passed already on the log scale? The +

    (logical) Are the weights passed already on the log scale? The default is FALSE, that is, expecting weights to be on the standard (non-log) scale.

    + +
    pareto_smooth
    +

    (logical) Should the weights be Pareto-smoothed? +The default is FALSE.

    +

    Value

    @@ -176,32 +181,36 @@

    Examples

    # sample some random weights for illustration wts <- rexp(ndraws(x)) head(wts) -#> [1] 0.2644506 1.4629054 1.9719158 0.8050840 2.4207868 1.4064785 +#> [1] 0.07943442 1.20975078 0.09003050 0.22634413 0.47107425 0.22054226 # add weights x <- weight_draws(x, weights = wts) # extract weights head(weights(x)) # defaults to normalized weights -#> [1] 0.0007016715 0.0038815529 0.0052321195 0.0021361438 0.0064231168 -#> [6] 0.0037318345 +#> [1] 0.0002133569 0.0032493306 0.0002418175 0.0006079491 0.0012652821 +#> [6] 0.0005923656 head(weights(x, normalize=FALSE)) # recover original weights -#> [1] 0.2644506 1.4629054 1.9719158 0.8050840 2.4207868 1.4064785 +#> [1] 0.07943442 1.20975078 0.09003050 0.22634413 0.47107425 0.22054226 head(weights(x, log=TRUE)) # get normalized log-weights -#> [1] -7.262045 -5.551520 -5.252939 -6.148753 -5.047852 -5.590855 +#> [1] -8.452544 -5.729306 -8.327327 -7.405419 -6.672460 -7.431387 # add weights which are already on the log scale log_wts <- log(wts) head(log_wts) -#> [1] -1.3301008 0.3804244 0.6790056 -0.2168086 0.8840926 0.3410891 +#> [1] -2.5328235 0.1904144 -2.4076068 -1.4856988 -0.7527396 -1.5116659 x <- weight_draws(x, weights = log_wts, log = TRUE) # extract weights head(weights(x)) -#> [1] 0.0007016715 0.0038815529 0.0052321195 0.0021361438 0.0064231168 -#> [6] 0.0037318345 +#> [1] 0.0002133569 0.0032493306 0.0002418175 0.0006079491 0.0012652821 +#> [6] 0.0005923656 head(weights(x, log=TRUE, normalize = FALSE)) # recover original log_wts -#> [1] -1.3301008 0.3804244 0.6790056 -0.2168086 0.8840926 0.3410891 +#> [1] -2.5328235 0.1904144 -2.4076068 -1.4856988 -0.7527396 -1.5116659 + +# add weights on log scale and Pareto smooth them +x <- weight_draws(x, weights = log_wts, log = TRUE, pareto_smooth = TRUE) +#> Pareto k-hat = 0.04.
    diff --git a/docs/reference/weights.draws.html b/docs/reference/weights.draws.html index 51f94eb..6e4ced6 100644 --- a/docs/reference/weights.draws.html +++ b/docs/reference/weights.draws.html @@ -18,7 +18,7 @@ posterior - 1.5.0 + 1.6.0 @@ -152,32 +152,36 @@

    Examples

    # sample some random weights for illustration wts <- rexp(ndraws(x)) head(wts) -#> [1] 0.61086446 0.33461334 0.02989975 0.36790580 2.15576680 0.24003173 +#> [1] 0.44924386 0.01132425 0.79627288 0.06250828 0.26065786 0.04660613 # add weights x <- weight_draws(x, weights = wts) # extract weights head(weights(x)) # defaults to normalized weights -#> [1] 1.574879e-03 8.626719e-04 7.708502e-05 9.485037e-04 5.557816e-03 -#> [6] 6.188295e-04 +#> [1] 1.191764e-03 3.004123e-05 2.112371e-03 1.658234e-04 6.914792e-04 +#> [6] 1.236378e-04 head(weights(x, normalize=FALSE)) # recover original weights -#> [1] 0.61086446 0.33461334 0.02989975 0.36790580 2.15576680 0.24003173 +#> [1] 0.44924386 0.01132425 0.79627288 0.06250828 0.26065786 0.04660613 head(weights(x, log=TRUE)) # get normalized log-weights -#> [1] -6.453577 -7.055476 -9.470602 -6.960625 -5.192550 -7.387681 +#> [1] -6.732320 -10.412940 -6.159944 -8.704587 -7.276678 -8.998154 # add weights which are already on the log scale log_wts <- log(wts) head(log_wts) -#> [1] -0.4928802 -1.0947796 -3.5099051 -0.9999283 0.7681465 -1.4269842 +#> [1] -0.8001894 -4.4808090 -0.2278133 -2.7724563 -1.3445466 -3.0660231 x <- weight_draws(x, weights = log_wts, log = TRUE) # extract weights head(weights(x)) -#> [1] 1.574879e-03 8.626719e-04 7.708502e-05 9.485037e-04 5.557816e-03 -#> [6] 6.188295e-04 +#> [1] 1.191764e-03 3.004123e-05 2.112371e-03 1.658234e-04 6.914792e-04 +#> [6] 1.236378e-04 head(weights(x, log=TRUE, normalize = FALSE)) # recover original log_wts -#> [1] -0.4928802 -1.0947796 -3.5099051 -0.9999283 0.7681465 -1.4269842 +#> [1] -0.8001894 -4.4808090 -0.2278133 -2.7724563 -1.3445466 -3.0660231 + +# add weights on log scale and Pareto smooth them +x <- weight_draws(x, weights = log_wts, log = TRUE, pareto_smooth = TRUE) +#> Pareto k-hat = 0.08. diff --git a/docs/reference/z_scale.html b/docs/reference/z_scale.html index e2f83d8..bbb6b5e 100644 --- a/docs/reference/z_scale.html +++ b/docs/reference/z_scale.html @@ -20,7 +20,7 @@ posterior - 1.5.0 + 1.6.0 diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 6546f2e..7ff5a98 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -3,6 +3,9 @@ https://mc-stan.org/posterior/404.html + + https://mc-stan.org/posterior/CONTRIBUTING.html + https://mc-stan.org/posterior/LICENSE-text.html @@ -12,6 +15,9 @@ https://mc-stan.org/posterior/articles/index.html + + https://mc-stan.org/posterior/articles/pareto_diagnostics.html + https://mc-stan.org/posterior/articles/posterior.html @@ -120,6 +126,9 @@ https://mc-stan.org/posterior/reference/extract_variable.html + + https://mc-stan.org/posterior/reference/extract_variable_array.html + https://mc-stan.org/posterior/reference/extract_variable_matrix.html @@ -195,6 +204,18 @@ https://mc-stan.org/posterior/reference/print.rvar.html + + https://mc-stan.org/posterior/reference/ps_convergence_rate.html + + + https://mc-stan.org/posterior/reference/ps_khat_threshold.html + + + https://mc-stan.org/posterior/reference/ps_min_ss.html + + + https://mc-stan.org/posterior/reference/ps_tail_length.html + https://mc-stan.org/posterior/reference/quantile2.html @@ -300,6 +321,12 @@ https://mc-stan.org/posterior/reference/u_scale.html + + https://mc-stan.org/posterior/reference/variables-set.html + + + https://mc-stan.org/posterior/reference/variables.html + https://mc-stan.org/posterior/reference/vctrs-compat.html