From ad578aab96724cb303dc55f5fa989b7a4c557678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul-Christian=20B=C3=BCrkner?= Date: Fri, 10 Nov 2023 10:58:02 +0100 Subject: [PATCH] update website --- _pkgdown.yml | 4 + docs/404.html | 2 +- docs/LICENSE-text.html | 2 +- docs/LICENSE.html | 2 +- docs/articles/index.html | 2 +- docs/articles/posterior.html | 110 +++--- docs/articles/rvar.html | 144 ++++++- .../figure-html/data_frame_plot-1.png | Bin 0 -> 39369 bytes .../rvar_files/figure-html/mixture-1.png | Bin 0 -> 32373 bytes docs/authors.html | 6 +- docs/index.html | 124 ++++-- docs/news/index.html | 33 +- docs/pkgdown.yml | 4 +- docs/pull_request_template.html | 2 +- docs/reference/as_rvar.html | 15 +- docs/reference/as_rvar_factor.html | 2 +- docs/reference/autocorrelation.html | 2 +- docs/reference/autocovariance.html | 2 +- docs/reference/bind_draws.html | 2 +- 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 | 4 +- docs/reference/draws.html | 2 +- docs/reference/draws_array.html | 2 +- docs/reference/draws_df.html | 2 +- docs/reference/draws_list.html | 2 +- docs/reference/draws_matrix.html | 2 +- docs/reference/draws_of.html | 2 +- docs/reference/draws_rvars.html | 2 +- docs/reference/draws_summary.html | 45 ++- docs/reference/drop-rvar-method.html | 2 +- docs/reference/entropy.html | 2 +- docs/reference/ess_basic.html | 3 +- docs/reference/ess_bulk.html | 3 +- docs/reference/ess_mean.html | 2 +- docs/reference/ess_quantile.html | 3 +- docs/reference/ess_sd.html | 3 +- docs/reference/ess_tail.html | 3 +- docs/reference/example_draws.html | 6 +- docs/reference/extract_variable.html | 2 +- docs/reference/extract_variable_matrix.html | 2 +- docs/reference/for_each_draw.html | 2 +- docs/reference/index.html | 36 +- docs/reference/is_rvar.html | 2 +- docs/reference/is_rvar_factor.html | 2 +- docs/reference/match.html | 2 +- docs/reference/mcse_mean.html | 3 +- docs/reference/mcse_quantile.html | 3 +- docs/reference/mcse_sd.html | 3 +- docs/reference/merge_chains.html | 2 +- docs/reference/modal_category.html | 2 +- docs/reference/mutate_variables.html | 2 +- docs/reference/order_draws.html | 2 +- docs/reference/pareto_diags.html | 278 ++++++++++++++ docs/reference/pareto_khat.html | 226 +++++++++++ docs/reference/pareto_smooth.html | 362 ++++++++++++++++++ docs/reference/posterior-package.html | 5 +- 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 | 216 +++++++++++ docs/reference/print.rvar.html | 2 +- docs/reference/quantile2.html | 2 +- docs/reference/r_scale.html | 2 +- docs/reference/rdo.html | 2 +- docs/reference/reexports.html | 2 +- docs/reference/rename_variables.html | 2 +- docs/reference/repair_draws.html | 2 +- docs/reference/resample_draws.html | 6 +- docs/reference/reserved_variables.html | 2 +- docs/reference/rfun.html | 12 +- docs/reference/rhat.html | 3 +- docs/reference/rhat_basic.html | 3 +- docs/reference/rhat_nested.html | 237 ++++++++++++ docs/reference/rstar.html | 3 +- docs/reference/rvar-dist.html | 2 +- docs/reference/rvar-matmult.html | 2 +- docs/reference/rvar-slice.html | 310 +++++++++++++++ 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 | 185 +++++++++ docs/reference/rvar_is_finite.html | 2 +- docs/reference/rvar_rng.html | 2 +- docs/reference/set_variables.html | 182 +++++++++ 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 | 2 +- docs/reference/thin_draws.html | 2 +- docs/reference/u_scale.html | 2 +- docs/reference/weight_draws.html | 20 +- docs/reference/weights.draws.html | 20 +- docs/reference/z_scale.html | 2 +- docs/sitemap.xml | 24 ++ 101 files changed, 2519 insertions(+), 254 deletions(-) create mode 100644 docs/articles/rvar_files/figure-html/data_frame_plot-1.png create mode 100644 docs/articles/rvar_files/figure-html/mixture-1.png create mode 100644 docs/reference/pareto_diags.html create mode 100644 docs/reference/pareto_khat.html create mode 100644 docs/reference/pareto_smooth.html create mode 100644 docs/reference/print.draws_summary.html create mode 100644 docs/reference/rhat_nested.html create mode 100644 docs/reference/rvar-slice.html create mode 100644 docs/reference/rvar_ifelse.html create mode 100644 docs/reference/set_variables.html diff --git a/_pkgdown.yml b/_pkgdown.yml index a99e8ffe..d69e9638 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -89,6 +89,7 @@ reference: - starts_with("extract") - merge_chains - mutate_variables + - set_variables - order_draws - split_chains - subset_draws @@ -112,6 +113,9 @@ reference: - 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 89ebd48e..ce26ebe5 100644 --- a/docs/404.html +++ b/docs/404.html @@ -39,7 +39,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index 743c3c98..e083d1f9 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 9d068810..7c805c8b 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/articles/index.html b/docs/articles/index.html index 59a2c790..755597ae 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/articles/posterior.html b/docs/articles/posterior.html index 05c2540e..98f7283a 100644 --- a/docs/articles/posterior.html +++ b/docs/articles/posterior.html @@ -40,7 +40,7 @@ posterior - 1.4.0 + 1.5.0 @@ -175,7 +175,7 @@

Example -
## This is posterior version 1.4.0
+
## This is posterior version 1.5.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.541 -0.659 -0.31 -0.508  1.52
-##   2   0.758  1.904  0.28 -1.410  1.71
-##   3  -0.045  0.677 -0.23 -0.490 -0.35
-##   4   0.598  1.071 -0.52  0.681 -1.12
-##   5   1.567  0.721  1.01 -1.125 -0.92
-##   6   0.414 -0.278  1.42  1.474 -0.54
-##   7  -0.178  0.247  1.20  0.039 -0.67
-##   8   0.432 -0.079 -0.59 -0.404  0.33
-##   9   0.023 -1.280  0.63 -0.225  0.23
-##   10 -0.364  0.284 -0.17 -1.013 -2.53
+## 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

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.541 -1.306
-##   2  -1.602 -0.394
-##   3  -0.871 -0.267
-##   4  -0.085  0.049
-##   5  -0.992 -0.374
-##   6   1.153  1.683
-##   7   1.007 -0.236
-##   8  -1.393 -0.988
-##   9  -1.826  2.444
-##   10  1.026  0.419
+## 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
 ## # ... with 40 more draws

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

@@ -525,11 +525,11 @@

Binding## # A draws_matrix: 5 iterations, 1 chains, and 3 variables ## variable ## draw alpha beta theta -## 1 1.02 -0.24 0.53 -## 2 0.56 1.07 0.70 -## 3 0.74 0.43 2.59 -## 4 -0.31 -0.42 0.20 -## 5 -0.46 0.63 1.49 +## 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

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:

@@ -539,16 +539,16 @@

Binding## # A draws_matrix: 10 iterations, 1 chains, and 2 variables ## variable ## draw alpha beta -## 1 1.02 -0.24 -## 2 0.56 1.07 -## 3 0.74 0.43 -## 4 -0.31 -0.42 -## 5 -0.46 0.63 -## 6 -0.85 -0.63 -## 7 0.38 -2.06 -## 8 -0.87 0.41 -## 9 0.50 0.53 -## 10 -0.77 1.99 +## 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

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 @@ -576,7 +576,7 @@

summarise_draws() basic usagesummarise_draws(eight_schools_df)
## # A tibble: 10 × 10
 ##    variable  mean median    sd   mad      q5   q95  rhat ess_bulk ess_tail
-##    <chr>    <num>  <num> <num> <num>   <num> <num> <num>    <num>    <num>
+##    <chr>    <dbl>  <dbl> <dbl> <dbl>   <dbl> <dbl> <dbl>    <dbl>    <dbl>
 ##  1 mu        4.18   4.16  3.40  3.57  -0.854  9.39  1.02     558.     322.
 ##  2 tau       4.16   3.07  3.58  2.89   0.309 11.0   1.01     246.     202.
 ##  3 theta[1]  6.75   5.97  6.30  4.87  -1.23  18.9   1.01     400.     254.
@@ -605,7 +605,7 @@ 

summarise_draws() basic usageprint(s1)

## # A tibble: 10 × 3
 ##    variable  mean mcse_mean
-##    <chr>    <num>     <num>
+##    <chr>    <dbl>     <dbl>
 ##  1 mu        4.18     0.150
 ##  2 tau       4.16     0.213
 ##  3 theta[1]  6.75     0.319
@@ -629,7 +629,7 @@ 

Changing column namessummarise_draws(eight_schools_df, posterior_mean = mean, posterior_sd = sd)

## # A tibble: 10 × 3
 ##    variable posterior_mean posterior_sd
-##    <chr>             <num>        <num>
+##    <chr>             <dbl>        <dbl>
 ##  1 mu                 4.18         3.40
 ##  2 tau                4.16         3.58
 ##  3 theta[1]           6.75         6.30
@@ -660,17 +660,17 @@ 

Using custom functions)

## # A tibble: 10 × 2
 ##    variable weighted_mean
-##    <chr>            <num>
-##  1 mu                4.44
-##  2 tau               4.25
-##  3 theta[1]          6.91
-##  4 theta[2]          5.72
-##  5 theta[3]          2.90
-##  6 theta[4]          5.25
-##  7 theta[5]          3.19
-##  8 theta[6]          4.03
-##  9 theta[7]          6.99
-## 10 theta[8]          4.77
+## <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

Specifying functions using lambda-like syntax @@ -690,7 +690,7 @@

Specifying functions usin summarise_draws(eight_schools_df, function(x) quantile(x, probs = c(0.4, 0.6)))

## # A tibble: 10 × 3
 ##    variable `40%` `60%`
-##    <chr>    <num> <num>
+##    <chr>    <dbl> <dbl>
 ##  1 mu        3.41  5.35
 ##  2 tau       2.47  3.96
 ##  3 theta[1]  4.95  7.01
@@ -705,7 +705,7 @@ 

Specifying functions usin summarise_draws(eight_schools_df, ~quantile(.x, probs = c(0.4, 0.6)))

## # A tibble: 10 × 3
 ##    variable `40%` `60%`
-##    <chr>    <num> <num>
+##    <chr>    <dbl> <dbl>
 ##  1 mu        3.41  5.35
 ##  2 tau       2.47  3.96
 ##  3 theta[1]  4.95  7.01
diff --git a/docs/articles/rvar.html b/docs/articles/rvar.html
index 6a4f20e1..50b7d7a0 100644
--- a/docs/articles/rvar.html
+++ b/docs/articles/rvar.html
@@ -40,7 +40,7 @@
       
       
         posterior
-        1.4.0
+        1.5.0
       
     
 
@@ -134,7 +134,7 @@ 

rvar: The Random Variable Datatype

Matthew Kay

-

2023-02-21

+

2023-11-10

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

Numeric arrays with a "levels" attribute can also be passed to rvar_factor(). This (along with conversion of character values) means output from -rstanarm::posterior_predict() and +rstanarm::posterior_predict() and brms::posterior_predict() on categorical models can be passed directly to rvar_factor().

The default display shows the mode (as returned by @@ -543,7 +543,7 @@

Expectations and summary functionssummarise_draws(mu, mean)

## # A tibble: 3 × 2
 ##   variable   mean
-##   <chr>     <num>
+##   <chr>     <dbl>
 ## 1 mu[1]    0.0514
 ## 2 mu[2]    0.111 
 ## 3 mu[3]    0.186
@@ -884,6 +884,104 @@

Broadcasting## [4,] 7 ± 1.4 10 ± 1.4 13 ± 1.4
+

Slicing and conditionals +

+

The [[ and [ operators implement all of the +base array slicing operations, including numeric, character, and logical +indices, as well as slicing arrays using a matrix of indices with +[. The main difference between rvar slicing +and base array slicing is that rvars default to +drop = FALSE; i.e. they retain all dimensions of the +original rvar array. For a complete list of +rvar slicing types, see +help("rvar-slice").

+

In addition to the base slicing operations, rvar also +implements three slicing/conditioning methods that allow you to use +other rvars to define a slice.

+

To demonstrate these operations, consider an rvar vector +of two components:

+
+component = rvar_rng(rnorm, 2, mean = c(1, 5))
+component
+
## rvar<4000>[2] mean ± sd:
+## [1] 1 ± 0.98  5 ± 0.99
+

Perhaps we want to create a mixture of these two components, +mixture, with a mixing proportion of 0.75. We could create +an index, i, that is a random variable indicating which +component (1 or 2) determines the value of mixture on each +draw:

+
+i = rvar_rng(rbinom, 1, size = 1, p = 0.75) + 1L
+i
+
## rvar<4000>[1] mean ± sd:
+## [1] 1.7 ± 0.44
+

We can use several different approaches to create the mixture +distribution

+
+

Subsetting rvars by draw: +x[<logical rvar>] +

+

A slice x[i] where i is a scalar logical +rvar returns a new rvar with the same shape as +x, but containing only those draws where i is +TRUE. Thus, we can use i == 2 to select draws +from the second component and overwrite them in the first component, +creating the mixture distribution:

+
+mixture = component[[1]]
+mixture[i == 2] = component[[2]][i == 2]
+mixture
+
## rvar<4000>[1] mean ± sd:
+## [1] 4 ± 2
+

The resulting mixture looks like this:

+
+library(ggplot2)
+
+ggplot() + ggdist::stat_slab(aes(xdist = mixture))
+

+

See vignette("slabinterval", package = "ggdist") for +more examples of visualizing distribution-type objects, including +rvars.

+
+
+

Conditionals using rvar_ifelse() +

+

You could create the same mixture using +rvar_ifelse(test, yes, no), which broadcasts +test, yes, and no to the same +shape, then returns a new rvar containing draws from +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:
+## [1] 4 ± 2
+
+
+

Selecting different elements in each draw: +x[[<numeric rvar>]] +

+

The slice x[[i]], where i is a scalar +numeric rvar, generalizes indexing when i is a scalar +numeric. Within each draw of x, it selects the element of +x corresponding to the value of i within that +same draw.

+

Thus, since i in our example is a scalar numeric +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:
+## [1] 4 ± 2
+

This approach is also nice because it generalizes easily to more than +two components.

+
+
+

Applying functions over rvars

The rvar data type supplies an implementation of @@ -895,7 +993,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)
@@ -926,7 +1024,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
@@ -942,12 +1040,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]        
@@ -970,7 +1068,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",
@@ -1000,19 +1098,31 @@ 

Using rvars in d

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

-
-data.frame(x = c("a","b","c"), y)
-
##   x           y
-## 1 a 3.00 ± 1.00
-## 2 b 2.02 ± 0.99
-## 3 c 0.96 ± 0.99
+
+df <- data.frame(group = c("a","b","c","d"), mu)
+df
+
##   group       mu
+## 1     a 1 ± 1.02
+## 2     b 2 ± 1.02
+## 3     c 3 ± 0.99
+## 4     d 4 ± 1.01

This makes them convenient for adding predictions to a data frame alongside the data used to generate the predictions. rvars can then be visualized with ggplot2 by passing them to the xdist and ydist aesthetics of the stat_... family of geometries in the ggdist package, such as -stat_halfeye(), stat_lineribbon(), and -stat_dotsinterval().

+stat_halfeye(), stat_lineribbon(), and +stat_dotsinterval(). For example:

+
+library(ggplot2)
+library(ggdist)
+
+ggplot(df) +
+  stat_halfeye(aes(y = group, xdist = mu))
+

+

See vignette("slabinterval", package = "ggdist") or +vignette("tidy-posterior", package = "tidybayes") for more +examples.

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 new file mode 100644 index 0000000000000000000000000000000000000000..4cf02c0b783212e617b8bd36e49c86ce66c06c7a GIT binary patch literal 39369 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 Ies&1{H{Xq14FCWD literal 0 HcmV?d00001 diff --git a/docs/authors.html b/docs/authors.html index 95ccd491..f3e2af9b 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0

@@ -150,13 +150,13 @@

Citation

Bürkner P, Gabry J, Kay M, Vehtari A (2023). “posterior: Tools for Working with Posterior Distributions.” -R package version 1.4.0, https://mc-stan.org/posterior/. +R package version 1.5.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.4.0},
+  note = {R package version 1.5.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 034bec54..ae75cc26 100644 --- a/docs/index.html +++ b/docs/index.html @@ -50,7 +50,7 @@ posterior - 1.4.0 + 1.5.0

@@ -175,12 +175,15 @@

ExamplesHere we offer a few examples of using the package. For a more detailed overview see the vignette The posterior R package.

 library("posterior")
-#> This is posterior version 1.2.0
+#> This is posterior version 1.4.1.9001
 #> 
 #> Attaching package: 'posterior'
 #> The following objects are masked from 'package:stats':
 #> 
-#>     mad, sd, var
+#> mad, sd, var +#> The following objects are masked from 'package:base': +#> +#> %in%, match

To demonstrate how to work with the posterior package, we will use example posterior draws obtained from the eight schools hierarchical meta-analysis model described in Gelman et al. (2013). Essentially, we have an estimate per school (theta[1] through theta[8]) as well as an overall mean (mu) and standard deviation across schools (tau).

Draws formats @@ -344,29 +347,29 @@

Binding draws togetherprint(x4) #> # A draws_matrix: 5 iterations, 1 chains, and 3 variables #> variable -#> draw alpha beta theta -#> 1 0.39 1 2.27 -#> 2 -0.80 1 0.86 -#> 3 0.95 1 1.93 -#> 4 0.38 1 0.67 -#> 5 0.18 1 2.04

+#> draw alpha beta theta +#> 1 0.804 1 1.296 +#> 2 0.078 1 0.983 +#> 3 1.687 1 0.099 +#> 4 -1.906 1 0.094 +#> 5 -0.072 1 2.189

Or, we can bind x1 and x2 together along the 'draw' dimension:

 x5 <- bind_draws(x1, x2, along = "draw")
 print(x5)
 #> # A draws_matrix: 10 iterations, 1 chains, and 2 variables
 #>     variable
-#> draw alpha beta
-#>   1   0.39    1
-#>   2  -0.80    1
-#>   3   0.95    1
-#>   4   0.38    1
-#>   5   0.18    1
-#>   6   0.13    2
-#>   7   0.10    2
-#>   8  -0.61    2
-#>   9   0.12    2
-#>   10  1.48    2
+#> draw alpha beta +#> 1 0.804 1 +#> 2 0.078 1 +#> 3 1.687 1 +#> 4 -1.906 1 +#> 5 -0.072 1 +#> 6 0.654 2 +#> 7 0.675 2 +#> 8 0.104 2 +#> 9 -0.403 2 +#> 10 2.274 2

As with all posterior methods, bind_draws can be used with all draws formats.

@@ -380,28 +383,71 @@

Converting from regu print(x) #> # A draws_matrix: 10 iterations, 1 chains, and 5 variables #> variable -#> draw V1 V2 V3 V4 V5 -#> 1 -0.89 0.37 -0.25 -0.57 -2.85 -#> 2 1.84 0.19 0.39 -0.52 1.26 -#> 3 0.79 -0.74 -1.61 0.99 -0.11 -#> 4 -2.25 0.28 -0.19 -0.33 0.92 -#> 5 0.58 0.35 -0.92 0.56 0.82 -#> 6 -1.38 -0.12 -0.40 -1.23 -0.60 -#> 7 -0.18 1.18 -1.27 0.51 0.78 -#> 8 0.17 1.50 -2.12 -0.45 -0.73 -#> 9 -0.60 0.69 -0.43 -1.40 1.14 -#> 10 0.18 0.96 -1.37 -0.58 -0.63 +#> draw V1 V2 V3 V4 V5 +#> 1 -0.51 0.49 0.49 -0.39 -2.828 +#> 2 1.02 -0.41 -1.19 -0.54 0.711 +#> 3 -2.83 1.28 -1.04 0.30 1.032 +#> 4 -1.61 0.39 1.08 1.22 -1.564 +#> 5 0.47 -0.50 0.40 0.13 0.202 +#> 6 -1.51 0.37 0.79 -1.55 -0.346 +#> 7 1.83 -2.90 -0.28 0.49 1.206 +#> 8 -1.09 0.86 -1.52 -0.32 0.098 +#> 9 0.21 -1.79 0.25 0.16 -1.371 +#> 10 1.44 -0.92 -0.52 0.22 0.889 summarise_draws(x, "mean", "sd", "median", "mad") #> # A tibble: 5 × 5 -#> variable mean sd median mad -#> <chr> <dbl> <dbl> <dbl> <dbl> -#> 1 V1 -0.174 1.16 -0.00490 1.03 -#> 2 V2 0.467 0.651 0.358 0.596 -#> 3 V3 -0.817 0.770 -0.671 0.798 -#> 4 V4 -0.301 0.773 -0.486 0.672 -#> 5 V5 -0.000826 1.27 0.338 1.27

+#> variable mean sd median mad +#> <chr> <dbl> <dbl> <dbl> <dbl> +#> 1 V1 -0.257 1.51 -0.147 1.88 +#> 2 V2 -0.311 1.28 -0.0179 1.03 +#> 3 V3 -0.154 0.893 -0.0154 0.972 +#> 4 V4 -0.0296 0.733 0.144 0.598 +#> 5 V5 -0.197 1.33 0.150 1.20

Instead of as_draws_matrix() we also could have just used as_draws(), which attempts to find the closest available format to the input object. In this case this would result in a draws_matrix object either way.

+

The above matrix example contained only one chain. Multi-chain draws could be stored in base R 3-D array object, which can also be converted to a draws object:

+
+x <- array(data=rnorm(200), dim=c(10, 2, 5))
+x <- as_draws_matrix(x)
+variables(x) <-  paste0("V", 1:5)
+print(x)
+#> # A draws_matrix: 10 iterations, 2 chains, and 5 variables
+#>     variable
+#> draw    V1    V2     V3      V4    V5
+#>   1  -1.24  1.39  0.946  0.2391 -0.68
+#>   2   0.46 -0.14  0.852 -0.0092  0.67
+#>   3   0.20 -1.35 -0.388 -1.2112 -0.29
+#>   4  -0.77 -0.61 -0.649 -1.4109 -1.10
+#>   5  -0.45 -0.12 -1.095 -1.3789  1.28
+#>   6  -1.01  1.40 -0.072  0.6276 -0.57
+#>   7   0.28  0.58 -0.248  0.1293  0.39
+#>   8  -0.22 -0.83  2.084  0.0950  0.76
+#>   9  -0.39  1.99  0.914  0.9035 -0.65
+#>   10 -1.87  0.66 -0.505 -1.4585  0.42
+#> # ... with 10 more draws
+ +
+

Converting from mcmc objects to draws formats +

+

The coda and rjags packages use mcmc and mcmc.list objects which can also be converted to draws objects:

+
+data(line, package = "coda")
+line <- as_draws_df(line)
+print(line)
+#> # A draws_df: 200 iterations, 2 chains, and 3 variables
+#>    alpha  beta sigma
+#> 1    7.2 -1.57 11.23
+#> 2    3.0  1.50  4.89
+#> 3    3.7  0.63  1.40
+#> 4    3.3  1.18  0.66
+#> 5    3.7  0.49  1.36
+#> 6    3.6  0.21  1.04
+#> 7    2.7  0.88  1.29
+#> 8    3.0  1.09  0.46
+#> 9    3.5  1.07  0.63
+#> 10   2.1  1.48  0.91
+#> # ... with 390 more draws
+#> # ... hidden reserved variables {'.chain', '.iteration', '.draw'}
diff --git a/docs/news/index.html b/docs/news/index.html index 6ff53913..9d738f3f 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 @@ -103,7 +103,36 @@

Changelog

- + +
+

Enhancements

+
  • Added support for nested-Rhat via rhat_nested (#256)
  • +
  • Added support for indexing draws in rvars using rvars (#282): +
    • +x[i] or x[i] <- y where i is a scalar logical rvar slices (or updates) x by its draws. Thus, if y <- x[i], then y is the same shape as x but with sum(i) draws.
    • +
    • +x[[i]] or x[[i]] <- y where i is a scalar numeric rvar slices (or updates) x by selecting the ith element within each corresponding draw. Thus, if y <- x[[i]], then y is an rvar of length 1.
    • +
  • +
  • Added rvar_ifelse(), which is a variant of ifelse() that accepts (and returns) rvars (#282).
  • +
  • Array broadcasting for rvars has been made faster.
  • +
+
+

Bug Fixes

+
+
+
+ +
+

Bug Fixes

+
+
+
+

Enhancements

  • Added new rvar_factor() and rvar_ordered() subtypes of rvar() that work analogously to factor() and ordered() (#149). See the new section on rvar_factors in vignette("rvar").
  • diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 06df73ce..8ad1e3a7 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,10 +1,10 @@ -pandoc: 2.19.2 +pandoc: 3.1.1 pkgdown: 2.0.7 pkgdown_sha: ~ articles: posterior: posterior.html rvar: rvar.html -last_built: 2023-02-21T13:55Z +last_built: 2023-11-10T09:53Z 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 ed7ddc95..4bc6c54d 100644 --- a/docs/pull_request_template.html +++ b/docs/pull_request_template.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0
diff --git a/docs/reference/as_rvar.html b/docs/reference/as_rvar.html index f2726539..e0cce8e9 100644 --- a/docs/reference/as_rvar.html +++ b/docs/reference/as_rvar.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0
@@ -110,7 +110,11 @@

Coerce to a random variable

as_rvar(x, dim = NULL, dimnames = NULL, nchains = NULL)
 
-as_rvar_numeric(x, dim = NULL, dimnames = NULL, nchains = NULL)
+as_rvar_numeric(x, dim = NULL, dimnames = NULL, nchains = NULL) + +as_rvar_integer(x, dim = NULL, dimnames = NULL, nchains = NULL) + +as_rvar_logical(x, dim = NULL, dimnames = NULL, nchains = NULL)
@@ -156,9 +160,10 @@

Details

treats the first dimension of x as the draws dimension. As a result, as_rvar() is useful for creating constants.

While as_rvar() attempts to pick the most suitable subtype of rvar based on the -type of x (possibly returning a an rvar_factor or rvar_ordered), -as_rvar_numeric() always coerces the draws of the output rvar to be numeric, -and always returns a base rvar, never a subtype.

+type of x (possibly returning an rvar_factor or rvar_ordered), +as_rvar_numeric(), as_rvar_integer(), and as_rvar_logical() always coerce +the draws of the output rvar to be numeric, integer, or logical +(respectively), and always return a base rvar, never a subtype.

See also

diff --git a/docs/reference/as_rvar_factor.html b/docs/reference/as_rvar_factor.html index 9cf35a20..31187484 100644 --- a/docs/reference/as_rvar_factor.html +++ b/docs/reference/as_rvar_factor.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0
diff --git a/docs/reference/autocorrelation.html b/docs/reference/autocorrelation.html index 6d02842f..46947ec1 100644 --- a/docs/reference/autocorrelation.html +++ b/docs/reference/autocorrelation.html @@ -19,7 +19,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/autocovariance.html b/docs/reference/autocovariance.html index 12e4dc3a..3faaf667 100644 --- a/docs/reference/autocovariance.html +++ b/docs/reference/autocovariance.html @@ -19,7 +19,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/bind_draws.html b/docs/reference/bind_draws.html index 082d2d46..0d7a9cc1 100644 --- a/docs/reference/bind_draws.html +++ b/docs/reference/bind_draws.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/chol.rvar.html b/docs/reference/chol.rvar.html index dc05cc6c..0ec7c5fd 100644 --- a/docs/reference/chol.rvar.html +++ b/docs/reference/chol.rvar.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/diag-rvar-method.html b/docs/reference/diag-rvar-method.html index 7fc582db..a7d4690a 100644 --- a/docs/reference/diag-rvar-method.html +++ b/docs/reference/diag-rvar-method.html @@ -18,7 +18,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/diagnostics.html b/docs/reference/diagnostics.html index eb9a967c..186cec0c 100644 --- a/docs/reference/diagnostics.html +++ b/docs/reference/diagnostics.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.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
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
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 0e0de86c..004fadd1 100644 --- a/docs/reference/draws-index.html +++ b/docs/reference/draws-index.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 @@ -164,7 +164,7 @@

Details

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, rename_variables() may offer a more convenient approach.

+specific variables, set_variables() works equivalently, but is more intuitive when using the pipe operator. rename_variables() may offer a more convenient approach.

diff --git a/docs/reference/draws.html b/docs/reference/draws.html index 7575a4e0..74a4b3b7 100644 --- a/docs/reference/draws.html +++ b/docs/reference/draws.html @@ -18,7 +18,7 @@ posterior - 1.4.0 + 1.5.0
diff --git a/docs/reference/draws_array.html b/docs/reference/draws_array.html index aec414d8..29dc038a 100644 --- a/docs/reference/draws_array.html +++ b/docs/reference/draws_array.html @@ -21,7 +21,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/draws_df.html b/docs/reference/draws_df.html index f9a63d06..19f52749 100644 --- a/docs/reference/draws_df.html +++ b/docs/reference/draws_df.html @@ -21,7 +21,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/draws_list.html b/docs/reference/draws_list.html index 9304718d..3e8c53b4 100644 --- a/docs/reference/draws_list.html +++ b/docs/reference/draws_list.html @@ -21,7 +21,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/draws_matrix.html b/docs/reference/draws_matrix.html index 16dededa..8b79b02f 100644 --- a/docs/reference/draws_matrix.html +++ b/docs/reference/draws_matrix.html @@ -21,7 +21,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/draws_of.html b/docs/reference/draws_of.html index c9bbbd32..bb599298 100644 --- a/docs/reference/draws_of.html +++ b/docs/reference/draws_of.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/draws_rvars.html b/docs/reference/draws_rvars.html index 8e0cc412..bb8ede22 100644 --- a/docs/reference/draws_rvars.html +++ b/docs/reference/draws_rvars.html @@ -21,7 +21,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/draws_summary.html b/docs/reference/draws_summary.html index 4d104b43..e2416de6 100644 --- a/docs/reference/draws_summary.html +++ b/docs/reference/draws_summary.html @@ -22,7 +22,7 @@ posterior - 1.4.0 + 1.5.0 @@ -229,7 +229,7 @@

Examples

summarise_draws(x) #> # A tibble: 10 × 10 #> variable mean median sd mad q5 q95 rhat ess_bulk ess_tail -#> <chr> <num> <num> <num> <num> <num> <num> <num> <num> <num> +#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 mu 4.18 4.16 3.40 3.57 -0.854 9.39 1.02 558. 322. #> 2 tau 4.16 3.07 3.58 2.89 0.309 11.0 1.01 246. 202. #> 3 theta[1] 6.75 5.97 6.30 4.87 -1.23 18.9 1.01 400. 254. @@ -243,7 +243,7 @@

Examples

summarise_draws(x, "mean", "median") #> # A tibble: 10 × 3 #> variable mean median -#> <chr> <num> <num> +#> <chr> <dbl> <dbl> #> 1 mu 4.18 4.16 #> 2 tau 4.16 3.07 #> 3 theta[1] 6.75 5.97 @@ -257,7 +257,7 @@

Examples

summarise_draws(x, mean, mcse = mcse_mean) #> # A tibble: 10 × 3 #> variable mean mcse -#> <chr> <num> <num> +#> <chr> <dbl> <dbl> #> 1 mu 4.18 0.150 #> 2 tau 4.16 0.213 #> 3 theta[1] 6.75 0.319 @@ -271,7 +271,7 @@

Examples

summarise_draws(x, ~quantile(.x, probs = c(0.4, 0.6))) #> # A tibble: 10 × 3 #> variable `40%` `60%` -#> <chr> <num> <num> +#> <chr> <dbl> <dbl> #> 1 mu 3.41 5.35 #> 2 tau 2.47 3.96 #> 3 theta[1] 4.95 7.01 @@ -287,7 +287,7 @@

Examples

summarise_draws(x, default_summary_measures()) #> # A tibble: 10 × 7 #> variable mean median sd mad q5 q95 -#> <chr> <num> <num> <num> <num> <num> <num> +#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 mu 4.18 4.16 3.40 3.57 -0.854 9.39 #> 2 tau 4.16 3.07 3.58 2.89 0.309 11.0 #> 3 theta[1] 6.75 5.97 6.30 4.87 -1.23 18.9 @@ -301,7 +301,7 @@

Examples

summarise_draws(x, default_convergence_measures()) #> # A tibble: 10 × 4 #> variable rhat ess_bulk ess_tail -#> <chr> <num> <num> <num> +#> <chr> <dbl> <dbl> <dbl> #> 1 mu 1.02 558. 322. #> 2 tau 1.01 246. 202. #> 3 theta[1] 1.01 400. 254. @@ -315,7 +315,7 @@

Examples

summarise_draws(x, default_mcse_measures()) #> # A tibble: 10 × 6 #> variable mcse_mean mcse_median mcse_sd mcse_q5 mcse_q95 -#> <chr> <num> <num> <num> <num> <num> +#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 mu 0.150 0.319 0.249 0.551 0.415 #> 2 tau 0.213 0.250 0.236 0.114 0.964 #> 3 theta[1] 0.319 0.262 0.327 0.820 1.36 @@ -331,7 +331,7 @@

Examples

summarise_draws(x, var = distributional::variance) #> # A tibble: 10 × 2 #> variable var -#> <chr> <num> +#> <chr> <dbl> #> 1 mu 11.6 #> 2 tau 12.8 #> 3 theta[1] 39.7 @@ -348,7 +348,7 @@

Examples

summarise_draws(x, weighted.mean, .args = list(w = ws)) #> # A tibble: 10 × 2 #> variable weighted.mean -#> <chr> <num> +#> <chr> <dbl> #> 1 mu 4.33 #> 2 tau 4.07 #> 3 theta[1] 6.66 @@ -363,19 +363,18 @@

Examples

# adjust how numerical summaries are printed summarise_draws(x, .num_args = list(sigfig = 2, notation = "dec")) #> # A tibble: 10 × 10 -#> variable mean median sd mad q5 q95 rhat ess_b…¹ ess_t…² -#> <chr> <dec:2> <dec:2> <dec:2> <dec:2> <dec:2> <dec:> <dec> <dec:2> <dec:2> -#> 1 mu 4.2 4.2 3.4 3.6 -0.85 9.4 1.0 558. 322. -#> 2 tau 4.2 3.1 3.6 2.9 0.31 11. 1.0 246. 202. -#> 3 theta[1] 6.7 6.0 6.3 4.9 -1.2 19. 1.0 400. 254. -#> 4 theta[2] 5.3 5.1 4.6 4.3 -2.0 13. 1.0 564. 372. -#> 5 theta[3] 3.0 4.0 6.8 4.9 -10. 12. 1.0 312. 205. -#> 6 theta[4] 4.9 5.0 4.9 4.5 -3.6 12. 1.0 695. 252. -#> 7 theta[5] 3.2 3.7 5.1 4.4 -5.9 11. 1.0 523. 306. -#> 8 theta[6] 4.0 4.1 5.2 4.8 -4.3 12. 1.0 548. 205. -#> 9 theta[7] 6.5 5.9 5.3 4.5 -1.2 15. 1.0 434. 308. -#> 10 theta[8] 4.6 4.6 5.3 4.9 -3.8 12. 1.0 355. 146. -#> # … with abbreviated variable names ¹​ess_bulk, ²​ess_tail +#> variable mean median sd mad q5 q95 rhat ess_bulk ess_tail +#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> +#> 1 mu 4.2 4.2 3.4 3.6 -0.85 9.4 1.0 558. 322. +#> 2 tau 4.2 3.1 3.6 2.9 0.31 11. 1.0 246. 202. +#> 3 theta[1] 6.7 6.0 6.3 4.9 -1.2 19. 1.0 400. 254. +#> 4 theta[2] 5.3 5.1 4.6 4.3 -2.0 13. 1.0 564. 372. +#> 5 theta[3] 3.0 4.0 6.8 4.9 -10. 12. 1.0 312. 205. +#> 6 theta[4] 4.9 5.0 4.9 4.5 -3.6 12. 1.0 695. 252. +#> 7 theta[5] 3.2 3.7 5.1 4.4 -5.9 11. 1.0 523. 306. +#> 8 theta[6] 4.0 4.1 5.2 4.8 -4.3 12. 1.0 548. 205. +#> 9 theta[7] 6.5 5.9 5.3 4.5 -1.2 15. 1.0 434. 308. +#> 10 theta[8] 4.6 4.6 5.3 4.9 -3.8 12. 1.0 355. 146. diff --git a/docs/reference/drop-rvar-method.html b/docs/reference/drop-rvar-method.html index 83c250aa..7370fa52 100644 --- a/docs/reference/drop-rvar-method.html +++ b/docs/reference/drop-rvar-method.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/entropy.html b/docs/reference/entropy.html index e0a12ba4..424579ff 100644 --- a/docs/reference/entropy.html +++ b/docs/reference/entropy.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/ess_basic.html b/docs/reference/ess_basic.html index fcf5e70c..52b65cdf 100644 --- a/docs/reference/ess_basic.html +++ b/docs/reference/ess_basic.html @@ -22,7 +22,7 @@ posterior - 1.4.0 + 1.5.0 @@ -190,6 +190,7 @@

See also

mcse_quantile(), mcse_sd(), rhat_basic(), +rhat_nested(), rhat(), rstar()

diff --git a/docs/reference/ess_bulk.html b/docs/reference/ess_bulk.html index a3c9b623..aad47857 100644 --- a/docs/reference/ess_bulk.html +++ b/docs/reference/ess_bulk.html @@ -22,7 +22,7 @@ posterior - 1.4.0 + 1.5.0 @@ -182,6 +182,7 @@

See also

mcse_quantile(), mcse_sd(), rhat_basic(), +rhat_nested(), rhat(), rstar()

diff --git a/docs/reference/ess_mean.html b/docs/reference/ess_mean.html index 8362137f..93a70275 100644 --- a/docs/reference/ess_mean.html +++ b/docs/reference/ess_mean.html @@ -18,7 +18,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/ess_quantile.html b/docs/reference/ess_quantile.html index 4cb8811b..98ca6c63 100644 --- a/docs/reference/ess_quantile.html +++ b/docs/reference/ess_quantile.html @@ -18,7 +18,7 @@ posterior - 1.4.0 + 1.5.0 @@ -191,6 +191,7 @@

See also

mcse_quantile(), mcse_sd(), rhat_basic(), +rhat_nested(), rhat(), rstar()

diff --git a/docs/reference/ess_sd.html b/docs/reference/ess_sd.html index 2c70812a..0ffc275b 100644 --- a/docs/reference/ess_sd.html +++ b/docs/reference/ess_sd.html @@ -19,7 +19,7 @@ posterior - 1.4.0 + 1.5.0 @@ -174,6 +174,7 @@

See also

mcse_quantile(), mcse_sd(), rhat_basic(), +rhat_nested(), rhat(), rstar()

diff --git a/docs/reference/ess_tail.html b/docs/reference/ess_tail.html index 42c2d9c1..4ee43339 100644 --- a/docs/reference/ess_tail.html +++ b/docs/reference/ess_tail.html @@ -22,7 +22,7 @@ posterior - 1.4.0 + 1.5.0 @@ -182,6 +182,7 @@

See also

mcse_quantile(), mcse_sd(), rhat_basic(), +rhat_nested(), rhat(), rstar()

diff --git a/docs/reference/example_draws.html b/docs/reference/example_draws.html index f104aa03..31881809 100644 --- a/docs/reference/example_draws.html +++ b/docs/reference/example_draws.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 @@ -157,7 +157,7 @@

Examples

summarise_draws(draws_eight_schools) #> # A tibble: 10 × 10 #> variable mean median sd mad q5 q95 rhat ess_bulk ess_tail -#> <chr> <num> <num> <num> <num> <num> <num> <num> <num> <num> +#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 mu 4.18 4.16 3.40 3.57 -0.854 9.39 1.02 558. 322. #> 2 tau 4.16 3.07 3.58 2.89 0.309 11.0 1.01 246. 202. #> 3 theta[1] 6.75 5.97 6.30 4.87 -1.23 18.9 1.01 400. 254. @@ -173,7 +173,7 @@

Examples

summarise_draws(draws_multi_normal) #> # A tibble: 12 × 10 #> variable mean median sd mad q5 q95 rhat ess_bulk ess_tail -#> <chr> <num> <num> <num> <num> <num> <num> <num> <num> <num> +#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 mu[1] 0.0514 0.0575 0.112 0.131 -0.130 0.225 1.01 677. 356. #> 2 mu[2] 0.111 0.104 0.199 0.198 -0.208 0.449 1.00 566. 426. #> 3 mu[3] 0.186 0.184 0.314 0.315 -0.322 0.715 1.02 650. 334. diff --git a/docs/reference/extract_variable.html b/docs/reference/extract_variable.html index 9cacc964..6b278ec6 100644 --- a/docs/reference/extract_variable.html +++ b/docs/reference/extract_variable.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/extract_variable_matrix.html b/docs/reference/extract_variable_matrix.html index 5fe50fdc..186d9b8d 100644 --- a/docs/reference/extract_variable_matrix.html +++ b/docs/reference/extract_variable_matrix.html @@ -18,7 +18,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/for_each_draw.html b/docs/reference/for_each_draw.html index f5c1ad65..9e3acfdc 100644 --- a/docs/reference/for_each_draw.html +++ b/docs/reference/for_each_draw.html @@ -18,7 +18,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/index.html b/docs/reference/index.html index ad46c1be..baab84ab 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 @@ -157,6 +157,10 @@

Draws objects and formats print(<draws_rvars>)

Print draws_rvars objects

+ +

print(<draws_summary>)

+ +

Print summaries of draws objects

print(<rvar>) format(<rvar>) str(<rvar>)

@@ -197,6 +201,10 @@

Working with draws objects mutate_variables()

Mutate variables in draws objects

+ +

set_variables()

+ +

Set variable names in draws objects

order_draws()

@@ -277,6 +285,10 @@

Summarizing and diagnosing dra

rhat_basic()

Basic version of the Rhat convergence diagnostic

+ +

rhat_nested()

+ +

Nested Rhat convergence diagnostic

mcse_mean()

@@ -309,6 +321,18 @@

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.

@@ -325,6 +349,10 @@

Functionality specific to t

`%**%`

Matrix multiplication of random variables

+ +

`[[`(<rvar>) `[[<-`(<rvar>) `[`(<rvar>) `[<-`(<rvar>)

+ +

Random variable slicing

E() mean(<rvar>) Pr() median(<rvar>) min(<rvar>) max(<rvar>) sum(<rvar>) prod(<rvar>) all(<rvar>) any(<rvar>) Summary(<rvar>) variance(<rvar>) var() sd() mad() range(<rvar>) is.finite(<rvar>) is.infinite(<rvar>) is.nan(<rvar>) is.na(<rvar>)

@@ -345,6 +373,10 @@

Functionality specific to t

rvar_factor() rvar_ordered()

Factor random variables of arbitrary dimension

+ +

rvar_ifelse()

+ +

Random variable ifelse

rvar_is_finite() rvar_is_infinite() rvar_is_nan() rvar_is_na()

@@ -362,7 +394,7 @@

Functionality specific to t

Is x a factor random variable?

-

as_rvar() as_rvar_numeric()

+

as_rvar() as_rvar_numeric() as_rvar_integer() as_rvar_logical()

Coerce to a random variable

diff --git a/docs/reference/is_rvar.html b/docs/reference/is_rvar.html index c879b4d4..4724eba3 100644 --- a/docs/reference/is_rvar.html +++ b/docs/reference/is_rvar.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/is_rvar_factor.html b/docs/reference/is_rvar_factor.html index f541acd5..a771634d 100644 --- a/docs/reference/is_rvar_factor.html +++ b/docs/reference/is_rvar_factor.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/match.html b/docs/reference/match.html index 8365589c..c18dd181 100644 --- a/docs/reference/match.html +++ b/docs/reference/match.html @@ -19,7 +19,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/mcse_mean.html b/docs/reference/mcse_mean.html index 7ed98722..c51f4260 100644 --- a/docs/reference/mcse_mean.html +++ b/docs/reference/mcse_mean.html @@ -18,7 +18,7 @@ posterior - 1.4.0 + 1.5.0 @@ -170,6 +170,7 @@

See also

mcse_quantile(), mcse_sd(), rhat_basic(), +rhat_nested(), rhat(), rstar()

diff --git a/docs/reference/mcse_quantile.html b/docs/reference/mcse_quantile.html index eeeb416e..836681f7 100644 --- a/docs/reference/mcse_quantile.html +++ b/docs/reference/mcse_quantile.html @@ -18,7 +18,7 @@ posterior - 1.4.0 + 1.5.0 @@ -188,6 +188,7 @@

See also

mcse_mean(), mcse_sd(), rhat_basic(), +rhat_nested(), rhat(), rstar()

diff --git a/docs/reference/mcse_sd.html b/docs/reference/mcse_sd.html index 674f6a38..7907ad21 100644 --- a/docs/reference/mcse_sd.html +++ b/docs/reference/mcse_sd.html @@ -19,7 +19,7 @@ posterior - 1.4.0 + 1.5.0 @@ -175,6 +175,7 @@

See also

mcse_mean(), mcse_quantile(), rhat_basic(), +rhat_nested(), rhat(), rstar()

diff --git a/docs/reference/merge_chains.html b/docs/reference/merge_chains.html index e6d5b89f..1d65b227 100644 --- a/docs/reference/merge_chains.html +++ b/docs/reference/merge_chains.html @@ -21,7 +21,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/modal_category.html b/docs/reference/modal_category.html index bdbb2d91..5e4a0421 100644 --- a/docs/reference/modal_category.html +++ b/docs/reference/modal_category.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/mutate_variables.html b/docs/reference/mutate_variables.html index bb42363d..5a0abd21 100644 --- a/docs/reference/mutate_variables.html +++ b/docs/reference/mutate_variables.html @@ -17,7 +17,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/order_draws.html b/docs/reference/order_draws.html index 81940003..8b024d90 100644 --- a/docs/reference/order_draws.html +++ b/docs/reference/order_draws.html @@ -19,7 +19,7 @@ posterior - 1.4.0 + 1.5.0 diff --git a/docs/reference/pareto_diags.html b/docs/reference/pareto_diags.html new file mode 100644 index 00000000..7348b046 --- /dev/null +++ b/docs/reference/pareto_diags.html @@ -0,0 +1,278 @@ + +Pareto smoothing diagnostics — pareto_diags • posterior + + +
+
+ + + +
+
+ + +
+

Compute diagnostics for Pareto smoothing the tail draws of x by +replacing tail draws by order statistics of a generalized Pareto +distribution fit to the tail(s).

+
+ +
+
pareto_diags(x, ...)
+
+# S3 method for default
+pareto_diags(
+  x,
+  tail = c("both", "right", "left"),
+  r_eff = NULL,
+  ndraws_tail = NULL,
+  verbose = FALSE,
+  ...
+)
+
+# S3 method for rvar
+pareto_diags(x, ...)
+
+ +
+

Arguments

+
x
+

(multiple options) One of:

+ + +
...
+

Arguments passed to individual methods (if applicable).

+ + +
tail
+

(string) The tail to diagnose/smooth:

  • "right": diagnose/smooth only the right (upper) tail

  • +
  • "left": diagnose/smooth only the left (lower) tail

  • +
  • "both": diagnose/smooth both tails and return the maximum k-hat value

  • +

The default is "both".

+ + +
r_eff
+

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

+ + +
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)).

+ + +
verbose
+

(logical) Should diagnostic messages be printed? If +TRUE, messages related to Pareto diagnostics will be +printed. Default is FALSE.

+ +
+
+

Value

+ + +

List of Pareto smoothing diagnostics:

  • khat: estimated Pareto k shape parameter,

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

  • +
  • khat_threshold: khat-threshold for reliable Pareto smoothed estimate,

  • +
  • convergence_rate: Pareto smoothed estimate RMSE convergence rate.

  • +
+
+

Details

+

When the fitted Generalized Pareto Distribution is used to +smooth the tail values and these smoothed values are used to +compute expectations, the following diagnostics can give further +information about the reliability of these estimates.

  • min_ss: Minimum sample size for reliable Pareto smoothed +estimate. If the actual sample size is greater than min_ss, then +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).

  • +
  • 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).

  • +
  • 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).

  • +
+
+

References

+

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

+
+ +
+

Examples

+
mu <- extract_variable_matrix(example_draws(), "mu")
+pareto_diags(mu)
+#> $khat
+#> [1] 0.1979001
+#> 
+#> $min_ss
+#> [1] 17.6493
+#> 
+#> $khat_threshold
+#> [1] 0.6156891
+#> 
+#> $convergence_rate
+#> [1] 0.9858796
+#> 
+
+d <- as_draws_rvars(example_draws("multi_normal"))
+pareto_diags(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
+#> 
+#> $min_ss
+#>          [,1]     [,2]     [,3]
+#> [1,] 11.46420 11.05020 11.31478
+#> [2,] 11.05020 12.97345 11.64141
+#> [3,] 11.31478 11.64141 10.00000
+#> 
+#> $khat_threshold
+#>           [,1]      [,2]      [,3]
+#> [1,] 0.6156891 0.6156891 0.6156891
+#> [2,] 0.6156891 0.6156891 0.6156891
+#> [3,] 0.6156891 0.6156891 0.6156891
+#> 
+#> $convergence_rate
+#>           [,1]      [,2]      [,3]
+#> [1,] 0.9981412 0.9987187 0.9983542
+#> [2,] 0.9987187 0.9957205 0.9978820
+#> [3,] 0.9983542 0.9978820 1.0000000
+#> 
+
+
+
+ +
+ + +
+ +
+

Site built with pkgdown 2.0.7.

+
+ +
+ + + + + + + + diff --git a/docs/reference/pareto_khat.html b/docs/reference/pareto_khat.html new file mode 100644 index 00000000..286f4195 --- /dev/null +++ b/docs/reference/pareto_khat.html @@ -0,0 +1,226 @@ + +Pareto khat diagnostic — pareto_khat • posterior + + +
+
+ + + +
+
+ + +
+

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

+
+ +
+
pareto_khat(x, ...)
+
+# S3 method for default
+pareto_khat(
+  x,
+  tail = c("both", "right", "left"),
+  r_eff = NULL,
+  ndraws_tail = NULL,
+  verbose = FALSE,
+  ...
+)
+
+# S3 method for rvar
+pareto_khat(x, ...)
+
+ +
+

Arguments

+
x
+

(multiple options) One of:

+ + +
...
+

Arguments passed to individual methods (if applicable).

+ + +
tail
+

(string) The tail to diagnose/smooth:

  • "right": diagnose/smooth only the right (upper) tail

  • +
  • "left": diagnose/smooth only the left (lower) tail

  • +
  • "both": diagnose/smooth both tails and return the maximum k-hat value

  • +

The default is "both".

+ + +
r_eff
+

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

+ + +
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)).

+ + +
verbose
+

(logical) Should diagnostic messages be printed? If +TRUE, messages related to Pareto diagnostics will be +printed. Default is FALSE.

+ +
+
+

Value

+ + +

khat estimated Generalized Pareto Distribution shape parameter k

+
+
+

References

+

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

+
+ +
+

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
+#> 
+
+
+
+ +
+ + +
+ +
+

Site built with pkgdown 2.0.7.

+
+ +
+ + + + + + + + diff --git a/docs/reference/pareto_smooth.html b/docs/reference/pareto_smooth.html new file mode 100644 index 00000000..cbf7c19f --- /dev/null +++ b/docs/reference/pareto_smooth.html @@ -0,0 +1,362 @@ + +Pareto smoothing — pareto_smooth • posterior + + +
+
+ + + +
+
+ + +
+

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

+
+ +
+
pareto_smooth(x, ...)
+
+# S3 method for rvar
+pareto_smooth(x, return_k = TRUE, extra_diags = FALSE, ...)
+
+# S3 method for default
+pareto_smooth(
+  x,
+  tail = c("both", "right", "left"),
+  r_eff = NULL,
+  ndraws_tail = NULL,
+  return_k = TRUE,
+  extra_diags = FALSE,
+  verbose = FALSE,
+  ...
+)
+
+ +
+

Arguments

+
x
+

(multiple options) One of:

+ + +
...
+

Arguments passed to individual methods (if applicable).

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

+ + +
extra_diags
+

(logical) Should extra Pareto khat diagnostics +be included in output? If TRUE, min_ss, khat_threshold and +convergence_rate for the estimated k value will be +returned. Default is FALSE.

+ + +
tail
+

(string) The tail to diagnose/smooth:

  • "right": diagnose/smooth only the right (upper) tail

  • +
  • "left": diagnose/smooth only the left (lower) tail

  • +
  • "both": diagnose/smooth both tails and return the maximum k-hat value

  • +

The default is "both".

+ + +
r_eff
+

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

+ + +
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)).

+ + +
verbose
+

(logical) Should diagnostic messages be printed? If +TRUE, messages related to Pareto diagnostics will be +printed. Default is FALSE.

+ +
+
+

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 +Pareto smoothed estimates

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

  • +
+
+

References

+

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

+
+ +
+

Examples

+
mu <- extract_variable_matrix(example_draws(), "mu")
+pareto_smooth(mu)
+#> $x
+#>          chain
+#> iteration          1            2           3           4
+#>       1    2.0058311   2.99038071  1.79436801  6.45897880
+#>       2    1.4583161   8.07284940  5.98637117  9.27304630
+#>       3    5.8149473  -1.33971154  2.55720201  0.30130121
+#>       4    6.8495862  11.42146271  2.79442522  3.69252884
+#>       5    1.8051677  10.10811381  0.11457536  5.48027067
+#>       6    3.8412425 -10.90481295  1.06361700  2.37951413
+#>       7    5.4742729  -7.67893226  3.67385716 12.37474175
+#>       8    1.2030617   1.79105196  3.50583836  4.90456023
+#>       9    0.1923430   5.35025400  8.86764324  0.87963558
+#>       10   7.1729098   0.86185525  8.92963703  3.81374732
+#>       11   0.9910314  10.22878590  1.89644594  3.43243605
+#>       12  -1.5650982   7.17842051  4.26930915 -5.18091530
+#>       13   0.7175292   7.30390277  0.49592463 -4.51701690
+#>       14   5.4475057   0.22963730 -0.30118385  7.38133431
+#>       15   6.1805031   7.87716434  0.55494635  2.21244092
+#>       16   8.1143336  13.71124994  6.10796214  6.09010450
+#>       17   7.4109742  -4.01010957  6.13616693  8.63747217
+#>       18   5.0653065   9.34967709  0.93917231 10.81154206
+#>       19   6.5950099   7.33764114 -0.24854260  2.29580552
+#>       20  -6.1230828  -0.41253795  4.01895927  8.03219045
+#>       21  10.9923672   4.82695606  5.36039410  6.59446197
+#>       22   8.7492153  -0.35580209  0.63877913  4.77379635
+#>       23   8.4807964   0.83891018  2.18232401 -1.69043575
+#>       24   9.5127659   0.33576205 -0.47154715  8.38276275
+#>       25   1.3686009   8.43118203  2.37151659  1.96883059
+#>       26   6.3283157   9.59984473  1.99824582  5.52765102
+#>       27   7.8038181   0.26594097  3.00600558  6.10060909
+#>       28   5.5044978   3.52617924  2.61449547  5.13685962
+#>       29   7.1543373   6.63504133  4.05403279  6.26798609
+#>       30   7.1543373   4.87313661  4.72705540  6.21822025
+#>       31   4.4980414   5.74947888  2.07701271  2.24644098
+#>       32   3.9728593  -0.05536469  1.71709968  1.01563071
+#>       33   1.2466721   9.69110598  5.67656775  4.37682520
+#>       34   6.7154469   1.25631396  7.35210528 -0.14869286
+#>       35   2.5934765   4.60053327  3.34758639  6.85536829
+#>       36   4.1509232   2.62214416  3.46540535  0.79173490
+#>       37   5.5769881   7.08964546  7.56578659  7.31015271
+#>       38   6.4795882   3.27130941  1.07576229  0.69180892
+#>       39   6.7149149  10.49687754  0.87317333  3.45283097
+#>       40   3.0928339  -2.97728532  8.28927887  6.15700804
+#>       41   4.6676343   5.77760488  9.19934064  6.94590217
+#>       42   0.4341460   3.34594153  7.76809799  7.69845246
+#>       43   7.6644860   4.58004814  3.64745811  5.71361755
+#>       44   2.7710241   6.25215016  4.02172175  1.09474532
+#>       45  -2.5071234   3.03653496  5.59027281  4.14183957
+#>       46   3.6239761   6.37787278  3.77182163  4.65610892
+#>       47   4.1775368  -1.14178246  6.76726892  4.83530335
+#>       48   5.1891338  10.35792448  6.73120973  2.36025147
+#>       49   3.7007374   2.26215093 -2.13372165  5.18949994
+#>       50   7.9148389   1.94726080 -0.80750891  6.96445721
+#>       51   2.5890314   9.05983209 -3.26518724  0.76747482
+#>       52   2.4826160   6.45144266  8.99365227  4.92198428
+#>       53   0.9075757   4.76285987  9.99482330  4.12501340
+#>       54   0.3693646  -2.72735886  4.85299318  4.38195376
+#>       55   7.9532159   8.19992395  0.03218316  0.58349237
+#>       56   2.3329707   6.41479763  5.44475101  3.08923892
+#>       57   4.3324681   6.06940520  6.49611407  5.61329746
+#>       58   1.7299121   3.43035241  2.08284445  5.80087096
+#>       59   1.4196226   4.86096716  3.42615485  2.68913918
+#>       60   6.5778662   6.71519862  3.86646326  4.23484000
+#>       61  11.6837230   7.27580476  1.89767270  0.07398856
+#>       62  -2.3106878   6.42851118  6.78704544  6.75807164
+#>       63  -1.9729536   3.24236645  3.67681516  5.35730452
+#>       64  13.6001013   9.42948716  2.80134400  3.36597040
+#>       65  -3.6032069  -0.96573696  1.55813764  3.61442662
+#>       66  12.8720357   8.69255780  5.07969585  3.35760729
+#>       67   0.8886184   3.71978511  5.33168512  3.62716863
+#>       68   0.9028057   5.74734105  4.05880826  0.81554158
+#>       69   1.6773174   6.77865339  6.43319154  7.19935256
+#>       70   7.7329831   8.80754168  6.14945199 -0.19775088
+#>       71   9.7869937   0.46539458  6.75459412  1.54498835
+#>       72   5.9190529   9.88802789  5.75546387  8.58386979
+#>       73   2.7463754  -1.82585563  4.77007413  0.66556551
+#>       74   6.4792428  11.19379834  4.44370854  8.24410926
+#>       75   2.7683627   2.96836015  6.27212042  0.99399372
+#>       76   7.4410372   7.01374501  3.15152477  2.54345797
+#>       77   2.6677480   3.66672487  4.95460833  7.21851228
+#>       78   5.5287068   1.41078743  5.29437266  5.12487891
+#>       79  11.9938289   6.58536629  3.50990665  2.41520814
+#>       80  -0.8846060   3.45698706 -0.53300259  3.81524258
+#>       81  -0.1012630   3.94222115 -0.59709705  5.15624656
+#>       82   5.2762736   5.83074377 -0.66404619  3.74296853
+#>       83  -0.0109097   7.50248450 -0.73409233  0.52576589
+#>       84   1.7616762  -1.23770609  1.00657412  7.99232314
+#>       85  -1.0513068   7.00985107  3.14241272  7.84016569
+#>       86   5.3275047   1.24852261  6.64058798  6.18030063
+#>       87   6.3287644   1.86987051  4.78821655  5.81531118
+#>       88   2.4525260   5.82211954  2.89403878  3.15575203
+#>       89   3.7334839   3.37948604  9.12833565  3.22457344
+#>       90   2.7919003   5.58737855  0.40214725  5.44679063
+#>       91   6.1234455   5.89213877  6.38032817  1.06898827
+#>       92   3.6517885  10.64734978  7.47153612  6.69428679
+#>       93   5.4253306   3.95788604  8.33547985  5.16954115
+#>       94   4.8155242   2.66672890  6.31708788  0.97997759
+#>       95   3.5079380   7.59817058  1.33994762  5.68731206
+#>       96   6.7751655   0.74274524  7.63106467  3.28055582
+#>       97   1.8567982   8.15667906  3.92688491  5.03958552
+#>       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
+#> 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
+#> 
+#> 
+
+
+
+ +
+ + +
+ +
+

Site built with pkgdown 2.0.7.

+
+ +
+ + + + + + + + diff --git a/docs/reference/posterior-package.html b/docs/reference/posterior-package.html index 17884653..bf384314 100644 --- a/docs/reference/posterior-package.html +++ b/docs/reference/posterior-package.html @@ -31,7 +31,7 @@ posterior - 1.4.0 + 1.5.0 @@ -143,6 +143,9 @@

Package options

  • posterior.max_iterations: Maximum number of iterations to print.

  • posterior.max_chains: Maximum number of chains to print.

  • posterior.max_variables: Maximum number of variables to print.

  • +

    The following options are used for formatting the output of +summarize_draws:

    The following options are used to format and print rvar objects, as in print.rvar() and print.draws_rvars():