From a5c3f6c785db405cd116931ba9b03dea27c87fd5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Paul-Christian=20B=C3=BCrkner?= This outlines how to propose a change to posterior and is based on similar instructions for tidyverse packages, including the contributing guidelines generated by 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 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. If you are new to creating pull requests here are some tips. Using the functions from the Fork the package and clone onto your computer. If you haven’t done this before, we recommend using Install all development dependencies with Create a Git branch for your pull request (PR). We recommend using Make your changes, commit to git, and then create a PR by running For user-facing changes, add a bullet to the top of 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. 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. An overview of diagnostics related to Pareto-smoothed importance sampling The paper 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 Additionally, the Generate Transform We examine the draws with the default
+ 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). 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. To diagnose whether our variables of interest may have infinite
+variance and even infinite mean, we can use Pareto-\(\hat{k}\) diagnostic. \(\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
+ 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. Now the The bias and variance depend on the sample size, and we can use
+additional diagnostic Here required 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. 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. 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. 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
+ We can get all these diagnostics with 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. 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. Because the matrix was converted to a Analogous functions exist for the other draws formats and are used
similarly. In the call to Contributing to posterior
+ usethis::use_tidy_contributing()
.Fixing typos
+.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
+Pull request process
+usethis
package is not required but can be helpful if this process is new to you.usethis::create_from_github("stan-dev/posterior", fork = TRUE)
.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.usethis::pr_init("brief-description-of-change")
.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
.NEWS.md
(i.e. just below the first header). Follow the style already used in NEWS.md
.Code style
+Code of Conduct
+rvar: The Random Variable Datatype
+ Pareto-khat diagnostics
+ Pareto-khat diagnostics
+ Aki
+Vehtari
+
+
+ Source: vignettes/pareto_diagnostics.Rmd
+ pareto_diagnostics.Rmd
Introduction
+
+
+
+pareto_khat()
, pareto_min_ss()
,
+pareto_convergence_rate()
and
+pareto_khat_threshold()
. The function
+pareto_diags()
will return all of these.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
+
+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')
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.MCMC convergence diagnostics
+
+summarise_draws()
.
+
drt %>%
+ 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.
+
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.
Pareto-\(\hat{k}\)
+
+
+
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
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
+
+
+
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.
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
+
+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
min_ss
is smaller than
+ess_basic
for all except \(t_1\), for which there is no hope.Convergence rate
+
+
+
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
Pareto-\(\hat{k}\)-threshold
+
+
+
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
min_ss
reveals we would probably need more than 560 draws
+to be on the safe side.Pareto diagnostics
+
+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
+
+Reference
+
+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)
+## 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
## # 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
draws_matrix
, all
of the methods for working with draws
objects described in
subsequent sections of this vignette will now be available.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
Renaming
+variables(x)
# mu is a scalar, theta is a vector
x <- rename_variables(eight_schools_df, mean = mu, alpha = theta)
-variables(x)
## [1] "mean" "tau" "alpha[1]" "alpha[2]" "alpha[3]" "alpha[4]"
## [7] "alpha[5]" "alpha[6]" "alpha[7]" "alpha[8]"
rename_variables()
above, mu
@@ -501,7 +501,7 @@ Renamingalpha:
x <- rename_variables(x, a1 = `alpha[1]`)
-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 @@ ## # 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:
## # 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 @@
## # 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
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.
vignettes/rvar.Rmd
rvar.Rmd
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 @@ draws_rvars
datatypemu and
Sigma
:
-variables(post)
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))
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 @@ rvar
s## 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:
%*%
) 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 rvar
s.
+A trivial example:
## rvar<100,4>[3,3] mean ± sd:
@@ -420,7 +423,8 @@ Math with rvar
s
Matrix multiplication
-%**%
+
+%**%
, %*%
(R ≥ 4.3 only)
Basic functions
@@ -935,9 +939,10 @@ Subsetting rvar
s by
## [1] 4 ± 2
The resulting mixture looks like this:
+library(ggplot2)
+## Warning: package 'ggplot2' was built under R version 4.2.3
+

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):
-
+
## [,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 rvar
s, 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 rvar
s in data frames and in ggplot2
rvar
s 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 rvar
s 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
zcmc$`d00++8wR>UY>{b4BxMt#lqjXytWqK*X;31S(wt^&L@GkjoK%v^RA~+k6h(ug
zQAwIh^L*~-ZGUIDuJiA?PS^W=Vz2dEzu_6~=f0oyURPJ!%gMpR!7vP`(!O1X7>3<}
zVWyw_YbO3hXIiN){+MZ?vUeB$#Lw`~G&lS)`}{sFYlc~IjsC~x)6`?cFe@3QUE2>k
z1hv;_n*|SsR7@sxR9^28Zx%oIJt$!9+0s`|b2vQ~{&jZ7Z=YLN=e(|;_K$#oz=D0}
z#da8be(}4Xvh*L$3Xj`+s^>2Md~?Q$^K52f+*{&0c!P7c<$E6}Jmd6DS3a((Uv|>d
zTQ$wT^q2l<^1KB9S6ni7>2)<$yrYfzSzbzYbR_%bh)U&dbklNmp!HdfZ_7U;NrJE*m#){PO*Kt4reb#N=eRHtV+)C+l4}
zg@lAM6;D<0$~lT}xTkzqIkIehcZOP!)WU^&ZocWSU*CT{GqWyy=e1Rd!iAYPU%Ky67uDkw?B%i~I
zFSI?3di30M)-SdN*>nE?{|AY+#l7!e2>+2i5Il`3d+owHRvsNcqvuIUOWNAn=#S;g
zmp_00d|{K-wt^k%IxFXhm!Z)0!2*EF`xo(WsF%z=$z?6SXlq`i2tC^j~>&e6=wEWM}dQ?Klka+AZc
z<&~9{9*1K3R1!){N)};jEr+^)NLl^d$17teJdanZd+X#jMlpC(_cVq{zp5NbV^r%AH%T?Zda;+SCjIlbIrn}y)<_k{~65LF)
zYaH(uHkDmSIAv=qv1iX7gHxvjzE@Q>{`_#Kr`D+}_qk#I!^p@rwtUR9opfl5rB4oT
zsFObQBT%zxYYAr&OofZ%iXa!qbGOL}DVGtOAbA(*)YQ~N(QJ&x2RdExSHgvv61A?q
zEy|I;(iX+%%*=8=e^#H%$w`AZe0;FQ^3P8t&HibM!JBDSoF`4+*GPLNEh);2v+eEe
z6;n{)4-O8t9BBVGRDXH?Lzuno5~iDnHJh54qp{D^(|J`?RI0MD+k5pCVibJnaz8Xvd9EDr>;GwIW&i^BeTk7{a0924I2{MgOh+}x`&tCNr7OqcTV-u&_7
z$58jX`Hf@4y)f$A(sP(0KH9OcU)Zkvu`%b5pFZWjeY*pv_DIcSL%E5>)oa%bZEVDg
zLgbb=7X@$Wo2KZ+TE~Z`3w)lQo?}p!Me{z~S%OX(1s#C1jdGjmq`HSj#U!FBTN^P2Z6f1n$sfIL*Nk}Z-xpQYx`8h>v
zYwItirGK9(3c60iX1ZkN%y7^6rKiU*`uSMm-+%utCMETI>D8J3%@=OoyqWX!=cyAZ
zR%>898D&b$=fiYP+1>#G0XNPRhvc@lnzV8asHdFpb{g!=9U5|Q9%+gGQeJ*fdNvbq
ziM6tYxdvi<3a)gfF&g`fG4sr^KZUOydJKYO>_v`iYty=Rveso`WN5fLME1g>J9qBH
zXgpqcAte9hnPLMgtIhJG?JuQleyg_%FviE|0PDSeUf?q{H0){r_Oi0NdVlavPT203
ziVE)L;!qzS`H}bK>CCe^tl63h-Ba$Ve{=cRi4*&ScX$={%3i&C)xgnFI$kI3mx(S@
zd6G5aJuF{TH{IjSn>Pp_w)1RH85yk^85wDa@R7eUhg)P9RzT1HYwGH!adElhql2)!
zD7A1k+*=%~;FFS)^4hNBxQ(41oj__cBY>&STFh}}s5Lg>W?H+4!SkhZa&qP$XE8F_
zi)kxW&Y7F%y}LG_)3W{br%#_=+jr@bO-6^hw$3zTy05ZUV1Ha!*BjPwOj}zec*k@h
z_~)xvTzbwuyAg|`i`d*#8?_%{Fwtcmr3kMiHlnhd1oDut*TfWvl0WeThuW&qzzw
zd1w>Il^v~I0s9k=d*R4-!(|HnMP**FF}kO5)%_&TQ{q*Qik|*xXm#*d;d(}0gEsN=uDtyG#$TTTi>e|;kTX-3tz^bn@k9KgY;oh4h`nSZtdmcF
z-rwI(_X`UPKT>0J56}k?aG$9ebGTukqe@I#IzXD;ZWkO>JJ~#C`%30t+Bu%@m{DJU
ze{Oa4iB_)4gIa#MHEH&S2*9=+j6kBOEi&UXnP0ztHFVabJx@t_fH6Kb=KCNzhA0LH{)1eULE`9jFjgytdDows3z@5l)
zl|yEu=SZ-gvnBG-dPgTGLvwQxTaL1Hs}x>L+9NU&u!VUhMCYfz7xRxuND%${_3NQ%
z#Tuk+%f>vfW5yLuI)=oG#XCcDzm(1_7M1Z-DXfn!QP5p(#4jD4q+FPq)IkY>xS+Kk6X
zV=YJeTFSOD-CtR=iJ;w_7$5aM<-WqN`NG_}b8~+EIvphEwAFSVlfIbsocpjVM0{ML
zGceTCNHd0IV@2J0tTA?CtEM38aluHW9uRbLF_&%s$!_QFwW
z8qiVBpiGN1IDPu`p=c&63_(UuPw&6e=08Q3$RW>BV0ixGg|9Tb!*zs{-)(K4NX)eG
z3|i5%Ysj*VaHXQ5f2Gx79C=>L<6q4Riy}CsKmU~0lIhc@_W-jHG@jReNAiklIBbt#hJA0O8uJ{9HMV_F)4xT{MMnWoEpDptJzlewY2`di>+CtY{!@*!C
z-hnaO?;z435O5=@Shkd`k<^>MayDzW?&Lx)qjtzIk!oxMmEGOvg+)d4x%HeEc64;a
zSTn|(S9Fk
zspgQcSdgy(s!>iLtUSHUL%6V^r!oIaT^&C~?Rku9_A;DScL1O)nd#J_OPC;Y!af^%
zixqrU@AZCE#1?ijg))rpyO9w`M8IYC7x`ahX7Z5-BO9lc@Vo0Yav+*G?55R@4s;0m
zBaFLC--h4Jo0o@xNs*jj<~p{|`X}CCb_x2xPVstK=GE-A?;9Enocqf)5qMjXuI=v9
z5?!-DQMoFrce!z#+2W9|symTh0-j_K)PHHw!hm}aZMnC!c1y)X})Jk
z|M*|*`g^4=W1LLZqz4D{OG*%q!q|?)mOJ$QKDb{^jhqbij*RUh#b?G$(txB|8kwd1tt~$F=$V(iYs6TM+(xn~MzzyNvghN;&o!
z13R>O2*C_iPSkz!nK^Uj%{0YDl8>uK06>o!q+d#<96ww4wp(A?{PuWP`yQ>fAXU)BuLDFM4px=tnFO0kzOUsB-!
z$msk?G9m&uiDNrK6upsrvawT1yDUAs_mS=-e2rb5o#TaE9&KHP*av)qf-+Mxu4LR5Ura{?h(AMv;dh$&_e}A}e*`xCEataH)3a+y9
z!$0r*Zf#W#o{>F|uznN`SKgvB>hr+bfmH#RAOdznsNqF=6p=
z2;gRb{G}`>SJe6NLRdH5VIgpYh)yb3SJq@^?*+D2iX-l+Vq3QSeIQic3o!|nU>gUl
zlAW!1)5j;D=KDE(C+6$0ljdtu3kRY({AzB-9K`Pe=^_izhP}3FIb>sF^GI!4y#z)0
z$6BVQrW7ad2LbB2lDswyKqrqf&>qvNnb@qBN2^9!qf4{y(k8)nSi%b
zCU$DH@+#0%GzMKv@%QmEEQg9W04~I$IV0PiqR6fNenw(jw=TJS`SMjAcb>ZlTl44dg|kx$
zb&cP3DS6~eW@skO*h!?gmny>W@Ng9W`+}!u&qw0#`TZq={*}OXD0kRZnlc56-53Q|
zPQ|QjQ_O`zn3U_7!--7iZS(kK?@P}PYoT4Mv_(h(en!OPv18-OM%3)<>&uzN@4SFp
zRQIO0w>LITwGfNTj{nf>>{O{k#lrOLdEceY&%lF=LKXN?(RwB&C6#G0s)Vbvy{mW#
z2vIgfxKDcwbEKeUW+p76o4ynn)Nb`wcR5Py`uV80P?o`Nj4RoVHv%dd
zY9X=@Fi{pJbT9?bC@VWmp&gJId%K91g=Z7-aU#`by*KYRUtAqd%W^Qhs>A3;9TUz2
z)?o1zJ^B3kZ!XV5I1(424Nds;Y)*D;z=H?ZA3S*A(3LUR(CDM!T~t(r^>XIYGK8w6
z4egDM-{U${^4pl07~&Qh-d>qwS)YB8u6sk*%}0rWXkma$Kb7Lim?!ciS@VM}XXt8H
zg)=8Co;9%;+2RN|Cdds+#mI8ou?4GFuO>^NK!lyz3xcRs*gchYsNNq=O*{=wBZs0f
zFT-=#&j^6ebLol|UU2ig6zk@>8B7B4DA`Gfu@Mmw$Z0$PGL&o|V)yYd6x~Z5*>vxa
z{}G(Iefu_zYLXa$?65XbqHo^(`K|7vW{WLOuSP
zO|r7Qm~_vNYy5e@qK(-Xr^8fDd@+332P_C=h8QkEkxoeQFvtSThze_>i|7WNGTlHB
zF-(afCMJU@Hf6C)f^c!~{rmSlu3x_{Mbwmnn>?tg0O>hlYstiUP9QyDSMLK^f!ajz
zqWvH^*z4Q3Z&b|_0Z{8QSOdCEHJJStF(F}W_X?Y6z@DC-V_I5D!P6NTbD%7ON~ke>
zkbhVvzhcD-%!-9}!nPx%QGyT?TZq+|2h3E|Ali-i2}F({Y1<8yHIbOrg4v&)p)6o)
zjL(N%6rpfN#3;g&b<-y&
zMth26x*n-buM|TVb?3R)d_h=5BoE-6LL%`i0?cD=xLcK>g{Gz^twt?a+NhnqHH5b7
zD%K88hvGERQX>Auro7YA(eXl5S<1t6WBROlIcZ&)%hw$Uxe2tk3oB@qb*~^azt8O4
zxs9jKoH3-x*W3*D6Q1%}{A)!81yPEQb(t=d!YLdPVF?0QqnT}NC6<@Xhs7*evgE(0
zX#lDOxpTon;160f>Zyebk;M<7ClK>=u0CZDqp@3uuaHgB4@y}kXbSFZ%(X9NV({nv0muoHoTIdkUF
zA9yk>!aezw#LyCsD;^%krly`dugyEBP{7};|3$TTP7r@Q@7PT)jw8y;(T^5j2c
z0m7IPpdYG9k1JQMbkv!G0k*Hbu#Rp9=UYDzk&z*Ha{cG`WIhQohhlcYuu;<-J8{D1
z=QQToMwn0W!pxY62t%j#j@H&2ot>S(J3H;-MW^b;IzwygElA~tuw|5U^as_kXV@6q
zC}cQdB8!XN+6D(Zs9Mx~5_lKJya)E_~}
zA+$gE+lI{Fw70Bi$?RQ-lr_Xx$@}>1?1+vtPTt$wJ
z7r-9(Y^qI`DERVX{9fFKcpeQXYogzsJJR)wOomu{|JSug@NEEQez5O0#EH041(!
zn5u7uhton;U=meAY6r0&KUfY!$I?)oE`6qOk@_?jk
zqh#%n=^}T{^6%eM<%Z0?G7(GaTqh6=A)N$B-%%+2_H7yHdCZjn{y*t2G@@LC6|vIpD^V)vukk
z82(lrDea!1p!a>`Y^48L3yaCG^=T4JS6!CdXbY0C+|!x0yGmhBiY_Px3!456sHgQK
zZdJOb5??$cpxSMscyc%~zh)y2t|u*PG_6M)Lz{=q5I7QZ_~D_LoIij5sOX)6lV*vJ
zxmq)|S#DXq?*E9vJ)fO{u7P098qe7}y{58qQ|&Z~1mv^HvCzrhxZ1q;@Ar+3H7odJ
z^+-6V+9@1PD+65$)(bo@F*sbL+k1n1|!JKmw
zqQhs_;xQB2V-sDI69c`39%s3A&$1jJ>6dbwa8BLCJpLP23O_b8H#eVruM4xWN*Plr
zwvZzzXlCqyc+>+8pln(DGm}If;JBDA0kzl%H+kD>;$FgqNfyqdE)YtR^K0XTE+>c7
zI4Lqn
zev68pEB?PSIpO4lXha?&7XokWpjhi36&26Hikuh1Rj#bL9*;Yk%wOm1+Lqsz9*O(N{bjR1KcnP_3=p%Wa*e`7k56Msq)N;d2UTtE#mGZlE*VJt
zfU9+UE?L7i+S=N$l9MeIz^){Zo6_GB6U)n_(rwFMBs>qOs7hDZ`qAl=+nCR!*s4_%
zO<809J^m9Vdfz9;foJlw#*-(vPW(_9yQVO-6wzS@|>Ca;#FV40rY
z&`AiLiaJzsUA%Y^XWY-9&kBjyY
zHCC+>(aRhwx%^tss9p}(W^5#3azsTh)1odDP|2-VeTa|ni*R9WtIXDC+|d3OES&7x
z!yyxcz__=L&usi~PM~i2!34l39>No?b9LWIX005F7j?$@I`eU){R9+aRmqoiK0{4h
zrxxTvsWmU}YN+eOsB=2I+v`RxOrs_hYJdH@#3|NouG3@NUisWVQ_bFfaDHa+V6Bs=
z>qu#6W?vI>Zi21tvUKl(fq{z5OA8NG@*vXnPAGqp!Q6N4D$Pik__1AGq3I#TW1Lhn~>VYL!D*-ntINfIQCVP2QHBI}P()}J{41N-;q
z+*x;EQ8{?Ps%_T4_P5T+{84&9!E3TdVPY?E-k?_<{9*4{QP-FnP_Aq9+kt(+B&ch1
zz?*~OTgmg&r)47f{!)F?z6~@nw)nIJ<=kpljwVc-M7Q1p3hGtE!bRA80
zlOaKkRBkFu6h`(=3cB`6x@}2KO9Q}zX!}!i>`K;x$x*oeP@&tfXjVyE=r-%MNY|mc
z3ggj}HvWZ-`{@$j<_jUx4|M@us5swZtPVTzLSX}lV$0#2fWmv%u3d@8Z3p-yxT<*qUSuE?MN-*HAj_^bOX4zU61Fl2yj`3sSZ1EFt9f%V@
zVQN$t;-{6xK+->?eBgne@L0GIV?(S4p$Yu7a3QkT!k&K44CJwhxVUqpgE%S?Vo53u
zQN)8SBJmK|{-&2#F4PeE8!F|gK7^{vow0;n;hDdG|Mmc4k~&|n$SZYzC7@kIY^)Ft
zi3a7KjAfX8RM(<#2N(eTLh1~(U?hcOC;()O?fcxIf9!$O2RaR5;LMpb>AgiVmgwt{
zavnO5ily@R97esFFzvI;1iXQU0qP&38YdO{(K&6+*#{0B*qc+aSB~l%icJ)D5c*_V
zAs`h|jaR=B6TcrA=n2;8erV`qt&p)PL}!3&aPw5rA|K^Lziy<>MLaS-XM5l@<9_@M
zN)Y#oSGJ4WQS3m1TA^V6&pj9qh$s+34DaEIv`6?WKx+8#GgyWe8ym{^$}EIUSg==vQ=n?AO=vS0)@G1~6}FN9%lzv|uNDz|Npny}Hfy
zrcT8~Pyn=6P(=B^e;bn`MAQp$_b*{fRCv2bLHXRTs+tS-fwZ@6w(AOC5H(8naAgiR
zO{wTNJFJClCZGssf&W5O5pl%Pog^8TMjxO)1tcBbXtiKafvDVQF5*`ZZlI!3`9@-z
z+Ro#8dOpMugW4xf_DfAoFx2_5A7sqN#$e5`+n|qFCms~F2^AR>YD=hML%$<@c&lI<
zo~(f%p=bhQfi4Bq%4OSBF=r|;KYaM`+Ogk+>O)k3iaUvr{0v3G2W$a_fjaXq&03!kNi*hC2E4`&?&B+X=NQ-KoY8`#>Pf!;UL1>y7J_^
zckif%4RxEiz$@#piAJs=lT*I~08SHt2>|Ft6`kaUZU64*puP`Qr${pb2TLZDFhUtl
z3@k=Q0BPkN*azAOBtH3+X+=DBA%O&NPbC#PZ0*yhPjg7YGB9}itSSfPdt;$!)=gZO
ziv!l6QDuoWQ;NfNa6SkbJa*ST5`3Cp+qNAgeuk($6i;Ao852LUMgiK_^XES=PD?MN
zkr4z)8$)@xAM}g*9XkE?80{`_XEN>ThVsLDp$Nn8p9_oPdSE0*1zVi&=~pS`~fI+ap)o7XX9$4Vgy&5qHUrS^Z6AiRoU9$&xzGJe|{55Q9J+sF8v}Lfp1-?^P;%8ctbWO
z;2Q0+=G_1b&4B2YjG
zgdiV}HP$Cm;}T?C3f0K5(bO~IG-ys?2KM?ByZaxnY6Rj56zz1$gApPyL^J+x&xkF=
zgVNq6qu*m_J5mt>c|=xL-D?#cATes^-iq1X7I7EUz5!791WFd
zZPV2@swV}X$003V4=pD6RJyQ$6V&Kep1m~iO#p3NUk?CGc!RPK@4Qb
zb-hl(P7x^#pf}obh@%)~bpuQtr{Wz7!r~q%b6;QRJ&g>D{sk^lo6*e%pMs9WsD303
z+BP284b>v=2j=>J8%UjI=9x2@_HDF#E3|=lCMI0ZT-;%BWyi_UU#3%Hx%=9NszTgP
zqBZ(UywcQHlZe~bHzYHgX07>7l`igWC8Y0QWo;|w-uQOI8yJKlk
zoSgq_z9?d=Jp|JWl(djmSk6>hQiH%_F%)5z;9OaVXIgvMRFe}dbt#V5RsyIsXyoDlRw*(ESpz+;#no%XV>ukk(-A1C_Osd&+wLt6E
z*49F=fb7eZNonHf+kFudXx6B6aB8jU*lK9=)E?{n=fgVC41NGqkGIpouzG<25s`T*
z{mpu84PS=EQG>%get9VTI2hK2Ki8UMn-fl_zBrOTsd4e^(dZ5~MvvU0osm2^-A)^Q
zE!c?rP`?NYpyC7+2%AYsthR)#4YD)BGCCJ#Q!^L9Itgt5SC_z)o^D}`#!A@uPm#gw
z5D@p&k4fp_+nLbaC<-v-%7t)+?B&!q0OWxr4q;aOIjC@!jts(yAaZH|HxqCRc3dw(
zSqT2ff|wkNyLSCYL?c(FurAV0n8u_(M0VG6>Az>m{aA?(tI1!FXvd!@8fP(;tLYSn
z*Z@G$##aASC+yd`;7>9TSwdX~w5YEU-LZBLs9_>Azq^xH@^2xe89y?o#*VSmr&P`2)#gSh$-y;QH~i2n;1f&Lll
zGosuDdsy*{vVsL|LidlI3MF&J?*dFuNop*pGu6(JJ&zDxPK83j7)ViEjbLZ@2~`~>
zM{1O%Zh|Sno2ez>XzWOB9)q1VQ-N`Snrf-Z6QXouUrQ-HI+?&-z;}{O=gyV#Ut}ze
zeL;^1wFaOUln2~20GqpH{aRB-QKR66Fty17R>3_~&rOBc2B>vK{OBN|{RnFT`%A!J
zs)OS3Y$SV#Vbs<_!$Fo&LCKK5itJm}2)Y3)I5Kr7p}?5erY{3M?!#(GVI0`$oC2s6
zLUFx|ni3h4?>RZUsE$VCA}_yl_jVARkoOr~DxSpC5ou8GO{MuTb1IzRJo~}05GLwM
z?^T1r)yqf$Js2B<*M#D|u~8&@`GzH)U#hB>`|v9e6%C}4ElQD>(-dG6%WS&rI
z_ON(pKO||AIiZ4r&|1HoaD(_Gg7Qn3o=;o`)f)=na!KM`3g4yAffqw{)`x>sAE+tqS%2R{{LHl
zK|a+1qyiEGusuUf%%h`*B+zj%brFX*i)EL)h9<|DOf>}24u|^0g$KOvj1n3!BlVK<84T%tX#;-71@02mw2+&0|=YW
zV?FuAh|sv)H0~$JF@%Yr60piKX3>A-hQnZueIsUU2?~*}W{Eed@M*D4o9g$NFuQUp
z&OAeCTJFeJKMN7s{ZUf<_Z6s_Sjsngt1_7GaeBgLYKfP3Udp1$7zuOJ-*OlJoI3IP
z{6DM|F`F@=*7-_nga9By9@K^KxyR6Vw~(EZq)NFJuUnvBPVo@3iGDF)H;ML06=*g=
zKzVEkDv)H+Yx7o6^Lh>(l9h>!{ZS|LASV=aRM@laof@d^f82#Z_9yC*66aTJ>l)TWZyuDhrkH&u6s+pVb7v
z-DKqcqe#RkY`T%Me~q8k{mvxenxvQQk)N%W^9XV+Dd{|~suZLWs1hu7y^H&sU!14W
zhg9B{pgMk?Hh*z{Y44_p!d|h6=fW-T6ZY$9yS7-@hCX<(ELh5NN4Wa?PC>?f^Hv#|
zSh&rT=;*xwd3aaqPHD?4nI#OvzL#1DIab}?_c%FO6P?R;d)b)73*K!itE!3xIE*`<
zsEj-QIA+-8Ph-OL1(92_A1VthYVGQ(7#eylT=+s}9uv0XK~&6_F9*H6y`Q9{Xwf6g
z%}=X|GGXoN@F@4)ID`m{cC>vOb3+Yv0X{A+8K4hefwCws>u%n}gvoXeMcre8K6LcKP7qF6~~m5TBG2
zB5_(T_n3Ztdb_G4iS}mdj-vJcg=Y;6c7VsZu_uD=2wS=N!A%5+^18YNI40eN9;Gwj
z&cc2lq~(?#^NZXk@DO#s>i+#`-2Ap;Hsii#OY-`_(v~vR|A|=i>3*zl3H3m}_slf_
zfkV4l((?dF#pXM$gSGe#_l>jwkvL{v4!D0`
zee;7?GK&~yH(V5-7C5-c*|T4s9EmL}DS7+XEXKWqj_vWLsIwauT^C$B*Tl-o_g*T)
z1kEZHUp#jvK20{#i3YhGaVJs^sj8|zdGh3i3?CCVjaH-1=KJB4YluEN^rA!<#xr}<
zT(6rqjj@M7_s5?bTsivmSa?*_+O!BZX2V~!AS1!RPxK%zj`h6rgl_Mvq~*WxQ;U`m
z7k?BU{tuvGOk&~@5GqgG*%>Zg);$<@cf>(_uDm<>>ElNPlr%#&M*a4on8TUvw$j1J
zGo4dFO=Cq5!2+i>vM~j7>BcpAFN8l86`@!;j--SWx{=>VrplbrUwU=gMR$C7=Up3f
z&7zyDtA%~?4eeza#bsd#vtb@uevzj(#{iIzb=EvTw*Q;i*G|*{^|BA59)w;KRWeW3
zF7(@|VQu}=Z=?3w=+d*+I~c|F59!u@ORt9SS``jI%Wdo#+q)I-QiRE_xuXOZFtM>Y
z?EACdu?aS4_HDC-gv5s?t8YOI7=XK(x
z(Cj_<9Urh{z5+h^5lD*|Am;h=gM2>MI6*B&htuO3m>`I(18D+_W>l)?1!tNf?)Qk-e-_GZ=Zt_c8|IzCGdZESslahN^EgXzbs0GJ=Y;3)zGgh;{$mLNE`?Jc1p4XW@UKWp|qtEF2NY33^EZch%aL%?u
z$A06`6$ST#+l5VBUV9dM?KzNA(_&N5)?d)r^HUT>?vvP9!(373?k2<_#cwZ#h4d=d
z-cee!=(_XuK;=k5OE%#LW?N(3hW*_h*rzzX09(}dWiNlZj(yGUh12!7&wZyZuxML{
zu<*5a;h-Lzf3(@9_3}d-9eyyK+3k&dfleKp~aKBE-d~|4i+UjZU0xb{DgdBt-
zdC8|P*&;N=sdHP#c!z~v&S7Rl@Yw)Z{25+u%_B$d={0HV=_Menj^(GON^|Hlg42w&
zx@TVAey%Q42ZT2Gw34fw%lm#wW@$;*Iz*V56#NOD%NU`)S#~uXc7V^}4UvGKSt0w^
z-cyU#x-utd_sRw8(!ohGGX-E?zfu2W)He^KPv)t&_q_72UqyCoINA7eZ_P^
z!NM1J_X*&m_O1Gy+L0qi;Jqm)@T#s{M}t+$PaEm=m)OD-3(W5%78R+Q=!J&BKD5EKLQHk+Olh`hi%b3<#KkCk
zo((|hxLH*LzyiM%oZ5_tgI|VKwg!H3lO49Q3J?5r`ohb(45H_!3_e-CdDm9!4P=fq
zRyX~uS~2e$%;(-dfy0`b(E$NGh+E2sCVJ*wySzA;DcGYGS3jO7nHdhVv5Dg)jd2rxfdr_v{}Gb=E0a<|8*eq{(lcR9tNHK*)4sVS(P>rs2wb`MiRb
z&A0cj9iCh&cq^shugH!+YhGZ%tj5Bi|>9M>yEJyJkaA11V7N79_ZjVE1@D5DK^b8
z%;RJ5m84^8BF+aUhFaUKV{hoWWITD&Dk17yG&CG!t&%{R{7j`d-Za)jNFm)9K!q;qC?!gPoahxLkv+(c8nFdpz}C$-I4d
zzv@{3j#^Gp+q&T*d#=A`VAJkK+Gn)se1CQJPK}sfb@kbnCM%xj6>Uvj>6@E+9R4J*
z8$3VuAxP(1!C`G}ikZa`9KY<+xSh=~ZR?i_z8`*G3VqjMXWIMg)0qqf-g#U27qf4%
zmsY4V6kH6RXZ(1c{9sD)w-qN34w8!E2cd@mGusiJF8#TVQo
zDq*!i!vN(-oBS2_kI~okH1H{O+`ECQfm_AuGWP9?I0$%Ya4@9pPob!PMVrpu=C^M*
zYA1c{{0rOLq|uEcBsL>M2W*wJ)lZKkvu{=f<5`pAU631WIua|s-(7&WXItd@KJT>K
zn>{I}szKohud|5!z7U_*DUEnFepl5BW2vVUm=yLA+vocz!KK5rwWZ}l=pWbmY&N-p
zN<-gAf##_niac=PWA%C0c24#kn6%k0^aKIbc5-}BqZ2@2WrEq!ZsiiZ#@8QjpP`~K
z`mMM~N~Zf|=(w5dUHbllXJzr3BPJA!=G4CL)~*{ly4$=JUt{3@QYiM4rmy_ikNIuI
z6Ya&Xpqs6bcRmJGVBy@jyuWrZQxi?KcKH}Y@yclTHHD`r+gv7kLp9glc~BvSY~k4V
zWv?xQ#}X-eNlsby+v4;RA)yN(-AwEeBbfS|ov$0`ovTVxoiE$%j&rjt%CEJnIydsi
zKkKP2ihNZmTy^*E3t<2U#@)akj80ojbjTsRr|LR6TGvJiy0Q{PUeM9_6ETuVYN^A&
z0uh!^+aJcATw(;30V=q4Y;MEe3&wt#qOoi1I_!($ddo_h73=5OCNA)QtRMA<9J<|C
zcl;waG1Qpa5)}w24F_N2Ul>`DHPJtkvray|ImF4lHf2Y5VqlvT%L5;P!v_gtc=$svmC>bz85LiZ0~l{-GyN
zHpu;XzuNZ^R>!>x7<_8%;7eTTz;M2=teOfg@V^AyS1Li>{|{c7WBp+1``$Rg50rgN
zTKdv`KAe8(`$$DJ;}z>s1viYe5Xz&@g0o6%q#K?oZQrWpg!4`yP$ro*>_xfZ!itv`
zb@ECj9m#dN9{X_F?&251fS?42fh<3q0(Mq@uzwFe0AK!vAH+YEddEF^atJBV#Kh#V
zhDHQIg~<4LHJJ1iw$VT+=bV(Lhh9-PTCD%!+R3GcGvH0E%r9_ycz#-?aE#bmngcY5vvYfdAsK!u?@$@9>|jx>dJH=>K%x{pAz_OrQ5yUpGP1*4B28bka&8
zhb<3oCRxGc`8emo=0t+E7dIY;R
z342BgEgJeHt0{;bx%&i&|Gd;wRH(+{8{Td5lf8^GEWa^2BOFYYP-t;9(E6~mJU-ik
zi`Ep+!aen4T&LI*3Y(7iDIB|TGKp8n;o!cf^}A#A*+rGF*9bXmEIcI6b7a%fGVH1E
zhesQ?EdkPe47iUv42Og=S*~#f$G?ly1=sxVw%HiNhDcs!!?(V^S5yPzboQ?`v=3re
z5m*Fw;g~VaS0K9dg7Oc%MJ{+PVx`jn9G(+BQfFOKkmM@506E+6vGJbhl_#!TGDV9x7~ngqL%=#TOSqV+Hm9cAr&Y=
zpl0yFOV>)i0O=HtvWA@Hj}Fr#*>k|qq4M|c5MgxRM1A`kH_UHTb3X0F#s!GD1p^*24%-z2E?BtHJAhQ=LK
zgZQ8jTJMZCxnJ0@?@gOk%BiJ!m%N*N)*|N!qk|d+K4yF>Agac);3!O(#aj3Zz*3CA
zy)Z(7eGq-AU{cPhQOe^IJ&IbHNxyM&X=__sX?OP~3;C**fuBNNysc>NrE*v3=u>rY
z9-mrpwR^*%TbBl_>L!w`QmU7Ay%bjYW_A=6-*>blhoCP4ueT(=di6W4ZruDI3YQ;&
zJBbj;&StjQdG3RVi_d`rKEw{h9gjQ`d-TH;JAhE3gY%N
zH;!JLXAYk}9S{9^jggig-g~oc$eA5kdN!@Gp7&QlEjrJPL2n*Uvx`Hqd)gj-Jxuo2
zBp>6)adG9EnST~5mEgUT=sFaDsXcki8pZrF`^*xM(Af$Z?U)To3i574Hy-d^Q|EFWIi@VD!%
zj`{K9tAac}-0m
z(N%g`x?pfl?uH#O1-f6j(&5Iws76?iD>$<1_Gi3SfyxfkofaVEh&Q=xKCJP7jE3J%
zilB;bxK!Va>P`0R`92a#NH6(?FQW*nz8@8H@giIQ;Gp%0D?47sDTg#&US0hZ5&JNo
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
Xh4s|JeLn=tx|LS8lTJ)@-T2=CMm){7
literal 39369
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