From 9cf76cbc101ef353eca77b563bf73e08e367b78d Mon Sep 17 00:00:00 2001 From: Stan Jenkins Date: Mon, 8 Apr 2024 16:18:49 +0000 Subject: [PATCH] Documentation generated from Jenkins for docs-2-34 --- docs/2_34/404.html | 172 ++- docs/2_34/cmdstan-guide-2_34.pdf | Bin 558861 -> 550389 bytes docs/2_34/cmdstan-guide/bib.html | 172 ++- .../cmdstan-guide/command_line_options.html | 224 +++- .../compiling_stan_programs.html | 224 +++- docs/2_34/cmdstan-guide/diagnose_config.html | 224 +++- docs/2_34/cmdstan-guide/diagnose_utility.html | 216 +++- .../2_34/cmdstan-guide/err_handling_apdx.html | 645 ---------- .../cmdstan-guide/example_model_data.html | 218 +++- docs/2_34/cmdstan-guide/external_code.html | 216 +++- .../generate_quantities_config.html | 352 ++++-- .../generate_quantities_intro.html | 979 --------------- docs/2_34/cmdstan-guide/index.html | 218 +++- docs/2_34/cmdstan-guide/installation.html | 224 +++- docs/2_34/cmdstan-guide/json_apdx.html | 216 +++- .../cmdstan-guide/laplace_sample_config.html | 224 +++- docs/2_34/cmdstan-guide/log_prob_config.html | 218 +++- docs/2_34/cmdstan-guide/mcmc_config.html | 431 +++++-- .../cmdstan-guide/mcmc_sampling_intro.html | 1094 ---------------- .../cmdstan-guide/optimization_intro.html | 961 -------------- docs/2_34/cmdstan-guide/optimize_config.html | 293 +++-- docs/2_34/cmdstan-guide/parallelization.html | 232 +++- .../2_34/cmdstan-guide/pathfinder_config.html | 339 +++-- docs/2_34/cmdstan-guide/pathfinder_intro.html | 965 -------------- docs/2_34/cmdstan-guide/print.html | 216 +++- docs/2_34/cmdstan-guide/rdump_apdx.html | 216 +++- docs/2_34/cmdstan-guide/stan_csv_apdx.html | 218 +++- docs/2_34/cmdstan-guide/stanc.html | 222 +++- docs/2_34/cmdstan-guide/stansummary.html | 216 +++- .../cmdstan-guide/variational_config.html | 329 +++-- .../2_34/cmdstan-guide/variational_intro.html | 1027 --------------- docs/2_34/functions-reference-2_34.pdf | Bin 904075 -> 904346 bytes .../functions-reference/array_operations.html | 172 ++- .../binary_distributions.html | 172 ++- .../bounded_continuous_distributions.html | 172 ++- .../bounded_discrete_distributions.html | 172 ++- .../circular_distributions.html | 172 ++- .../complex-valued_basic_functions.html | 172 ++- .../complex_matrix_operations.html | 172 ++- .../compound_arithmetic_and_assignment.html | 172 ++- .../continuous_distributions_on_0_1.html | 172 ++- ...conventions_for_probability_functions.html | 172 ++- .../correlation_matrix_distributions.html | 172 ++- .../covariance_matrix_distributions.html | 172 ++- .../deprecated_functions.html | 174 ++- .../distributions_over_unbounded_vectors.html | 172 ++- .../functions-reference/functions_index.html | 172 ++- .../hidden_markov_models.html | 172 ++- .../higher-order_functions.html | 172 ++- docs/2_34/functions-reference/index.html | 174 ++- .../integer-valued_basic_functions.html | 174 ++- .../mathematical_functions.html | 172 ++- .../matrix_operations.html | 172 ++- .../functions-reference/mixed_operations.html | 172 ++- .../multivariate_discrete_distributions.html | 172 ++- .../positive_continuous_distributions.html | 172 ++- .../positive_lower-bounded_distributions.html | 172 ++- .../real-valued_basic_functions.html | 172 ++- docs/2_34/functions-reference/references.html | 172 ++- .../removed_functions.html | 172 ++- .../simplex_distributions.html | 172 ++- .../sparse_matrix_operations.html | 172 ++- .../unbounded_continuous_distributions.html | 172 ++- .../unbounded_discrete_distributions.html | 172 ++- .../functions-reference/void_functions.html | 172 ++- docs/2_34/index.html | 174 ++- docs/2_34/reference-manual-2_34.pdf | Bin 798928 -> 800192 bytes docs/2_34/reference-manual/analysis.html | 172 ++- docs/2_34/reference-manual/blocks.html | 176 ++- docs/2_34/reference-manual/comments.html | 172 ++- docs/2_34/reference-manual/deprecations.html | 174 ++- docs/2_34/reference-manual/diagnostics.html | 174 ++- docs/2_34/reference-manual/encoding.html | 172 ++- docs/2_34/reference-manual/execution.html | 174 ++- docs/2_34/reference-manual/expressions.html | 179 ++- docs/2_34/reference-manual/includes.html | 186 ++- docs/2_34/reference-manual/index.html | 174 ++- docs/2_34/reference-manual/laplace.html | 172 ++- docs/2_34/reference-manual/licenses.html | 181 ++- docs/2_34/reference-manual/mcmc.html | 172 ++- docs/2_34/reference-manual/optimization.html | 172 ++- docs/2_34/reference-manual/pathfinder.html | 172 ++- docs/2_34/reference-manual/references.html | 172 ++- docs/2_34/reference-manual/removals.html | 172 ++- .../reference-manual/reproducibility.html | 172 ++- docs/2_34/reference-manual/statements.html | 349 ++++-- docs/2_34/reference-manual/syntax.html | 174 ++- docs/2_34/reference-manual/transforms.html | 172 ++- docs/2_34/reference-manual/types.html | 180 ++- .../2_34/reference-manual/user-functions.html | 173 ++- docs/2_34/reference-manual/variational.html | 172 ++- docs/2_34/reference-manual/whitespace.html | 172 ++- docs/2_34/search.json | 829 ++++++------- .../bootstrap/bootstrap-dark.min.css | 12 + .../site_libs/bootstrap/bootstrap.min.css | 6 +- .../quarto-syntax-highlighting-dark.css | 185 +++ docs/2_34/stan-users-guide-2_34.pdf | Bin 3083643 -> 3083836 bytes .../stan-users-guide/algebraic-equations.html | 172 ++- docs/2_34/stan-users-guide/bootstrap.html | 172 ++- docs/2_34/stan-users-guide/clustering.html | 172 ++- .../stan-users-guide/complex-numbers.html | 172 ++- .../stan-users-guide/cross-validation.html | 172 ++- .../stan-users-guide/custom-probability.html | 172 ++- docs/2_34/stan-users-guide/dae.html | 172 ++- .../stan-users-guide/decision-analysis.html | 172 ++- .../stan-users-guide/efficiency-tuning.html | 172 ++- .../stan-users-guide/finite-mixtures.html | 172 ++- .../2_34/stan-users-guide/floating-point.html | 172 ++- .../2_34/stan-users-guide/for-bugs-users.html | 172 ++- .../stan-users-guide/gaussian-processes.html | 172 ++- .../hyperspherical-models.html | 172 ++- docs/2_34/stan-users-guide/index.html | 174 ++- .../stan-users-guide/latent-discrete.html | 174 ++- .../stan-users-guide/matrices-arrays.html | 172 ++- .../stan-users-guide/measurement-error.html | 172 ++- docs/2_34/stan-users-guide/missing-data.html | 172 ++- .../2_34/stan-users-guide/multi-indexing.html | 172 ++- docs/2_34/stan-users-guide/odes.html | 172 ++- .../one-dimensional-integrals.html | 172 ++- .../stan-users-guide/parallelization.html | 172 ++- .../posterior-prediction.html | 172 ++- .../posterior-predictive-checks.html | 188 ++- .../stan-users-guide/poststratification.html | 172 ++- .../problematic-posteriors.html | 172 ++- .../proportionality-constants.html | 172 ++- docs/2_34/stan-users-guide/references.html | 172 ++- docs/2_34/stan-users-guide/regression.html | 172 ++- .../stan-users-guide/reparameterization.html | 172 ++- .../simulation-based-calibration.html | 172 ++- docs/2_34/stan-users-guide/sparse-ragged.html | 172 ++- docs/2_34/stan-users-guide/style-guide.html | 172 ++- docs/2_34/stan-users-guide/survival.html | 172 ++- docs/2_34/stan-users-guide/time-series.html | 172 ++- .../truncation-censoring.html | 172 ++- .../2_34/stan-users-guide/user-functions.html | 172 ++- docs/2_34/stan-users-guide/using-stanc.html | 176 ++- docs/2_34/{ => theming}/quarto_styles.css | 80 +- docs/404.html | 172 ++- docs/cmdstan-guide/bib.html | 172 ++- docs/cmdstan-guide/command_line_options.html | 224 +++- .../compiling_stan_programs.html | 224 +++- docs/cmdstan-guide/diagnose_config.html | 224 +++- docs/cmdstan-guide/diagnose_utility.html | 216 +++- docs/cmdstan-guide/err_handling_apdx.html | 645 ---------- docs/cmdstan-guide/example_model_data.html | 218 +++- docs/cmdstan-guide/external_code.html | 216 +++- docs/cmdstan-guide/gc-intro.html | 8 +- .../generate_quantities_config.html | 352 ++++-- .../generate_quantities_intro.html | 988 +-------------- docs/cmdstan-guide/index.html | 218 +++- docs/cmdstan-guide/installation.html | 224 +++- docs/cmdstan-guide/json_apdx.html | 216 +++- docs/cmdstan-guide/laplace_sample_config.html | 224 +++- docs/cmdstan-guide/log_prob_config.html | 218 +++- docs/cmdstan-guide/mcmc-intro.html | 8 +- docs/cmdstan-guide/mcmc_config.html | 431 +++++-- docs/cmdstan-guide/mcmc_sampling_intro.html | 1103 +---------------- docs/cmdstan-guide/optimization_intro.html | 970 +-------------- docs/cmdstan-guide/optimize_config.html | 293 +++-- docs/cmdstan-guide/parallelization.html | 232 +++- docs/cmdstan-guide/pathfinder-intro.html | 8 +- docs/cmdstan-guide/pathfinder_config.html | 339 +++-- docs/cmdstan-guide/pathfinder_intro.html | 974 +-------------- docs/cmdstan-guide/print.html | 216 +++- docs/cmdstan-guide/rdump_apdx.html | 216 +++- docs/cmdstan-guide/stan_csv_apdx.html | 218 +++- docs/cmdstan-guide/stanc.html | 222 +++- docs/cmdstan-guide/stansummary.html | 216 +++- .../variational-inference-using-advi.html | 8 +- docs/cmdstan-guide/variational_config.html | 329 +++-- docs/cmdstan-guide/variational_intro.html | 1036 +--------------- .../functions-reference/array_operations.html | 172 ++- .../binary_distributions.html | 172 ++- .../bounded_continuous_distributions.html | 172 ++- .../bounded_discrete_distributions.html | 172 ++- .../circular_distributions.html | 172 ++- .../complex-valued_basic_functions.html | 172 ++- .../complex_matrix_operations.html | 172 ++- .../compound_arithmetic_and_assignment.html | 172 ++- .../continuous_distributions_on_0_1.html | 172 ++- ...conventions_for_probability_functions.html | 172 ++- .../correlation_matrix_distributions.html | 172 ++- .../covariance_matrix_distributions.html | 172 ++- .../deprecated_functions.html | 174 ++- .../distributions_over_unbounded_vectors.html | 172 ++- docs/functions-reference/functions_index.html | 172 ++- .../hidden_markov_models.html | 172 ++- .../higher-order_functions.html | 172 ++- docs/functions-reference/index.html | 174 ++- .../integer-valued_basic_functions.html | 174 ++- .../mathematical_functions.html | 172 ++- .../matrix_operations.html | 172 ++- .../functions-reference/mixed_operations.html | 172 ++- .../multivariate_discrete_distributions.html | 172 ++- .../positive_continuous_distributions.html | 172 ++- .../positive_lower-bounded_distributions.html | 172 ++- .../real-valued_basic_functions.html | 172 ++- docs/functions-reference/references.html | 172 ++- .../removed_functions.html | 172 ++- .../simplex_distributions.html | 172 ++- .../sparse_matrix_operations.html | 172 ++- .../unbounded_continuous_distributions.html | 172 ++- .../unbounded_discrete_distributions.html | 172 ++- docs/functions-reference/void_functions.html | 172 ++- docs/index.html | 174 ++- docs/reference-manual/analysis.html | 172 ++- docs/reference-manual/blocks.html | 176 ++- docs/reference-manual/comments.html | 172 ++- docs/reference-manual/deprecations.html | 174 ++- docs/reference-manual/diagnostics.html | 174 ++- docs/reference-manual/encoding.html | 172 ++- docs/reference-manual/execution.html | 174 ++- docs/reference-manual/expressions.html | 179 ++- docs/reference-manual/includes.html | 186 ++- docs/reference-manual/index.html | 174 ++- docs/reference-manual/laplace.html | 172 ++- docs/reference-manual/licenses.html | 181 ++- docs/reference-manual/mcmc.html | 172 ++- docs/reference-manual/optimization.html | 172 ++- docs/reference-manual/pathfinder.html | 172 ++- docs/reference-manual/references.html | 172 ++- docs/reference-manual/removals.html | 172 ++- docs/reference-manual/reproducibility.html | 172 ++- docs/reference-manual/statements.html | 349 ++++-- docs/reference-manual/syntax.html | 174 ++- docs/reference-manual/transforms.html | 172 ++- docs/reference-manual/types.html | 180 ++- docs/reference-manual/user-functions.html | 173 ++- docs/reference-manual/variational.html | 172 ++- docs/reference-manual/whitespace.html | 172 ++- docs/search.json | 829 ++++++------- .../bootstrap/bootstrap-dark.min.css | 12 + docs/site_libs/bootstrap/bootstrap.min.css | 6 +- .../quarto-syntax-highlighting-dark.css | 185 +++ .../stan-users-guide/algebraic-equations.html | 172 ++- docs/stan-users-guide/bootstrap.html | 172 ++- docs/stan-users-guide/clustering.html | 172 ++- docs/stan-users-guide/complex-numbers.html | 172 ++- docs/stan-users-guide/cross-validation.html | 172 ++- docs/stan-users-guide/custom-probability.html | 172 ++- docs/stan-users-guide/dae.html | 172 ++- docs/stan-users-guide/decision-analysis.html | 172 ++- docs/stan-users-guide/efficiency-tuning.html | 172 ++- docs/stan-users-guide/finite-mixtures.html | 172 ++- docs/stan-users-guide/floating-point.html | 172 ++- docs/stan-users-guide/for-bugs-users.html | 172 ++- docs/stan-users-guide/gaussian-processes.html | 172 ++- .../hyperspherical-models.html | 172 ++- docs/stan-users-guide/index.html | 174 ++- docs/stan-users-guide/latent-discrete.html | 174 ++- docs/stan-users-guide/matrices-arrays.html | 172 ++- docs/stan-users-guide/measurement-error.html | 172 ++- docs/stan-users-guide/missing-data.html | 172 ++- docs/stan-users-guide/multi-indexing.html | 172 ++- docs/stan-users-guide/odes.html | 172 ++- .../one-dimensional-integrals.html | 172 ++- docs/stan-users-guide/parallelization.html | 172 ++- .../posterior-prediction.html | 172 ++- .../posterior-predictive-checks.html | 188 ++- docs/stan-users-guide/poststratification.html | 172 ++- .../problematic-posteriors.html | 172 ++- .../proportionality-constants.html | 172 ++- docs/stan-users-guide/references.html | 172 ++- docs/stan-users-guide/regression.html | 172 ++- docs/stan-users-guide/reparameterization.html | 172 ++- .../simulation-based-calibration.html | 172 ++- docs/stan-users-guide/sparse-ragged.html | 172 ++- docs/stan-users-guide/style-guide.html | 172 ++- docs/stan-users-guide/survival.html | 172 ++- docs/stan-users-guide/time-series.html | 172 ++- .../truncation-censoring.html | 172 ++- docs/stan-users-guide/user-functions.html | 172 ++- docs/stan-users-guide/using-stanc.html | 176 ++- docs/theming/quarto_styles.css | 406 ++++++ 274 files changed, 40099 insertions(+), 19766 deletions(-) delete mode 100644 docs/2_34/cmdstan-guide/err_handling_apdx.html delete mode 100644 docs/2_34/cmdstan-guide/generate_quantities_intro.html delete mode 100644 docs/2_34/cmdstan-guide/mcmc_sampling_intro.html delete mode 100644 docs/2_34/cmdstan-guide/optimization_intro.html delete mode 100644 docs/2_34/cmdstan-guide/pathfinder_intro.html delete mode 100644 docs/2_34/cmdstan-guide/variational_intro.html create mode 100644 docs/2_34/site_libs/bootstrap/bootstrap-dark.min.css create mode 100644 docs/2_34/site_libs/quarto-html/quarto-syntax-highlighting-dark.css rename docs/2_34/{ => theming}/quarto_styles.css (79%) delete mode 100644 docs/cmdstan-guide/err_handling_apdx.html create mode 100644 docs/site_libs/bootstrap/bootstrap-dark.min.css create mode 100644 docs/site_libs/quarto-html/quarto-syntax-highlighting-dark.css create mode 100644 docs/theming/quarto_styles.css diff --git a/docs/2_34/404.html b/docs/2_34/404.html index b4c201dfd..1401c7548 100644 --- a/docs/2_34/404.html +++ b/docs/2_34/404.html @@ -70,10 +70,12 @@ - + + - + + - + @@ -217,6 +219,7 @@
+
@@ -266,25 +269,6 @@

Page Not Found

Back to top - - + + - + + - + @@ -183,6 +185,7 @@
+
@@ -218,25 +221,6 @@

Re Back to top - - + - + + - + + - + @@ -214,6 +216,7 @@ - - @@ -563,25 +536,6 @@

Error mess Back to top -

@@ -440,46 +451,101 @@

On this page

-
-

Standalone Generate Quantities

-

The generate_quantities method allows you to generate additional quantities of interest from a fitted model without re-running the sampler. For an overview of the uses of this feature, see the QuickStart Guide section and the Stan User’s Guide section on Stand-alone generated quantities and ongoing prediction.

-

This method requires sub-argument fitted_params which takes as its value an existing Stan CSV file that contains a sample from an equivalent model, i.e., a model with the same parameters, transformed parameters, and model blocks, conditioned on the same data.

+
+

Generating Quantities of Interest from a Fitted Model

+

The generate_quantities method allows you to generate additional quantities of interest from a fitted model without re-running the sampler. Instead, you write a modified version of the original Stan program and add a generated quantities block or modify the existing one which specifies how to compute the new quantities of interest. Running the generate_quantities method on the new program together with sampler outputs (i.e., a set of draws) from the fitted model runs the generated quantities block of the new program using the the existing sample by plugging in the per-draw parameter estimates for the computations in the generated quantities block.

+

This method requires sub-argument fitted_params which takes as its value an existing Stan CSV file that contains a parameter values from an equivalent model, i.e., a model with the same parameters block, conditioned on the same data.

+

The generated quantities block computes quantities of interest (QOIs) based on the data, transformed data, parameters, and transformed parameters. It can be used to:

+
    +
  • generate simulated data for model testing by forward sampling
  • +
  • generate predictions for new data
  • +
  • calculate posterior event probabilities, including multiple comparisons, sign tests, etc.
  • +
  • calculate posterior expectations
  • +
  • transform parameters for reporting
  • +
  • apply full Bayesian decision theory
  • +
  • calculate log likelihoods, deviances, etc. for model comparison
  • +
+

For an overview of the uses of this feature, see the Stan User’s Guide section on Stand-alone generated quantities and ongoing prediction.

+
+

Example

+

To illustrate how this works we use the generate_quantities method to do posterior predictive checks using the estimate of theta given the example bernoulli model and data, following the posterior predictive simulation procedure in the Stan User’s Guide.

+

We write a program bernoulli_ppc.stan which contains the following generated quantities block, with comments to explain the procedure:

+
generated quantities {
+  array[N] int y_sim;
+  // use current estimate of theta to generate new sample
+  for (n in 1:N) {
+    y_sim[n] = bernoulli_rng(theta);
+  }
+  // estimate theta_rep from new sample
+  real<lower=0, upper=1> theta_rep = sum(y_sim) * 1.0 / N;
+}
+

The rest of the program is the same as in bernoulli.stan.

+

The generate_method requires the sub-argument fitted_params which takes as its value the name of a Stan CSV file. The per-draw parameter values from the fitted_params file will be used to run the generated quantities block.

If we run the bernoulli.stan program for a single chain to generate a sample in file bernoulli_fit.csv:

> ./bernoulli sample data file=bernoulli.data.json output file=bernoulli_fit.csv

Then we can run the bernoulli_ppc.stan to carry out the posterior predictive checks:

> ./bernoulli_ppc generate_quantities fitted_params=bernoulli_fit.csv \
                   data file=bernoulli.data.json \
                   output file=bernoulli_ppc.csv
-

The fitted_params file must be a Stan CSV file; attempts to use a regular CSV file will result an error message of the form:

+

The output file bernoulli_ppc.csv contains only the values for the variables declared in the generated quantities block, i.e., theta_rep and the elements of y_sim:

+
# model = bernoulli_ppc_model
+# method = generate_quantities
+#   generate_quantities
+#     fitted_params = bernoulli_fit.csv
+# id = 1 (Default)
+# data
+#   file = bernoulli.data.json
+# init = 2 (Default)
+# random
+#   seed = 2983956445 (Default)
+# output
+#   file = output.csv (Default)
+y_sim.1,y_sim.2,y_sim.3,y_sim.4,y_sim.5,y_sim.6,y_sim.7,y_sim.8,y_sim.9,y_sim.10,theta_rep
+1,1,1,0,0,0,1,1,0,1,0.6
+1,1,0,1,0,0,1,0,1,0,0.5
+1,0,1,1,1,1,1,1,0,1,0.8
+0,1,0,1,0,1,0,1,0,0,0.4
+1,0,0,0,0,0,0,0,0,0,0.1
+0,0,0,0,0,1,1,1,0,0,0.3
+0,0,1,0,1,0,0,0,0,0,0.2
+1,0,1,0,1,1,0,1,1,0,0.6
+...
+

Given the current implementation, to see the fitted parameter values for each draw, create a copy variable in the generated quantities block, e.g.:

+
generated quantities {
+  array[N] int y_sim;
+  // use current estimate of theta to generate new sample
+  for (n in 1:N) {
+    y_sim[n] = bernoulli_rng(theta);
+  }
+  real<lower=0, upper=1> theta_cp = theta;
+  // estimate theta_rep from new sample
+  real<lower=0, upper=1> theta_rep = sum(y_sim) * 1.0 / N;
+}
+

Now the output is slightly more interpretable: theta_cp is the same as the theta used to generate the values y_sim[1] through y_sim[1]. Comparing columns theta_cp and theta_rep allows us to see how the uncertainty in our estimate of theta is carried forward into our predictions:

+
y_sim.1,y_sim.2,y_sim.3,y_sim.4,y_sim.5,y_sim.6,y_sim.7,y_sim.8,y_sim.9,y_sim.10,theta_cp,theta_rep
+0,1,1,0,1,0,0,1,1,0,0.545679,0.5
+1,1,1,1,1,1,0,1,1,0,0.527164,0.8
+1,1,1,1,0,1,1,1,1,0,0.529116,0.8
+1,0,1,1,1,1,0,0,1,0,0.478844,0.6
+0,1,0,0,0,0,1,0,1,0,0.238793,0.3
+0,0,0,0,0,1,1,0,0,0,0.258294,0.2
+1,1,1,0,0,0,0,0,0,0,0.258465,0.3
+
+
+

Errors

+

The fitted_params file must be a Stan CSV file; attempts to use a regular CSV file will result an error message of the form:

Error reading fitted param names from sample csv file <filename.csv>

The fitted_params file must contain columns corresponding to legal values for all parameters defined in the model. If any parameters are missing, the program will exit with an error message of the form:

Error reading fitted param names from sample csv file <filename.csv>
-

The parameter values of the fitted_params are on the constrained scale and must obey all constraints. For example, if we modify the contencts of the first reported draw in bernoulli_fit.csv so that the value of theta is outside the declared bounds real<lower=0, upper=1>, the program will return the following error message:

-
Exception: lub_free: Bounded variable is 1.21397, but must be in the interval [0, 1] (in 'bernoulli_ppc.stan', line 5, column 2 to column 30)
+

The parameter values of the fitted_params are on the constrained scale and must obey all constraints. For example, if we modify the contents of the first reported draw in bernoulli_fit.csv so that the value of theta is outside the declared bounds real<lower=0, upper=1>, the program will return the following error message:

+
Exception: lub_free: Bounded variable is 1.21397, but must be in the interval [0, 1] \
+(in 'bernoulli_ppc.stan', line 5, column 2 to column 30)
+
Back to top -
Back to top - - + + - + + - + @@ -214,6 +216,7 @@
+ @@ -252,7 +255,7 @@ - - - - @@ -311,7 +290,7 @@
- - @@ -496,7 +469,7 @@

CmdStan Installation

Installation via conda

-

With conda, you can install CmdStan from the conda-forge channel. This will install a pre-built version of CmdStan along with the required dependencies (i.e. a C++ compiler, a version of Make, and required libraries) detailed below under [Source installation]. The conda installation is designed so one can use the R or Python bindings to CmdStan seamlessly. Additionally, it provides the command cmdstan_model to activate the CmdStan makefile from anywhere.

+

With conda, you can install CmdStan from the conda-forge channel. This will install a pre-built version of CmdStan along with the required dependencies (i.e. a C++ compiler, a version of Make, and required libraries). The conda installation is designed so one can use the R or Python bindings to CmdStan seamlessly. Additionally, it provides the command cmdstan_model to activate the CmdStan makefile from anywhere.

Note: This requires that conda has been installed already on your machine. You can either install miniconda, a free, minimal installer for conda or you can get the full Anaconda system which provides graphical installer wizards for MacOS and Windows users.

We recommend installing CmdStan in a new conda environment:

 conda create -n stan -c conda-forge cmdstan
@@ -570,7 +543,7 @@

Checking the St > make examples/bernoulli/bernoulli # fit to provided data (results of 10 trials, 2 out of 10 successes) -> ./examples/bernoulli/bernoulli sample\ +> ./examples/bernoulli/bernoulli sample\ data file=examples/bernoulli/bernoulli.data.json # default output written to file `output.csv`, @@ -741,7 +714,7 @@

Using GNU Make

4. Build the diagnose utility bin/diagnose 5. Build all libraries and object files compile and link an executable Stan program - Note: to build using multiple cores, use the -j option to make, e.g., + Note: to build using multiple cores, use the -j option to make, e.g., for 4 cores: > make build -j4 @@ -798,25 +771,6 @@

Using GNU Make

  • To open a Windows command shell, first open the Start Menu, (usually in the lower left of the screen), select option All Programs, then option Accessories, then program Command Prompt. Alternatively, enter [Windows+r] (both keys together on the keyboard), and enter cmd into the text field that pops up in the Run window, then press [Return] on the keyboard to run.↩︎

  • - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -286,7 +289,7 @@ - - - - @@ -345,7 +324,7 @@
    - - @@ -687,25 +660,6 @@

    Empty arrays in JSON< Back to top - - + + - + + - + @@ -185,6 +187,7 @@
    + @@ -223,7 +226,7 @@ - - - - @@ -282,7 +261,7 @@
    - - @@ -447,7 +420,7 @@

    On this page

    Laplace sampling

    -

    The laplace method produces a sample from a normal approximation centered at the mode of a distribution in the unconstrained space. If the mode is a maximum a posteriori (MAP) estimate, the samples provide an estimate of the mean and standard deviation of the posterior distribution. If the mode is a maximum likelihood estimate (MLE), the sample provides an estimate of the standard error of the likelihood. In general, the posterior mode in the unconstrained space doesn’t correspond to the mean (nor mode) in the constrained space, and thus the sample is needed to infer the mean as well as the standard deviation. (See this case study for a visual illustration.)

    +

    The laplace method produces a sample from a normal approximation centered at the mode of a distribution in the unconstrained space. If the mode is a maximum a posteriori (MAP) estimate, the samples provide an estimate of the mean and standard deviation of the posterior distribution. If the mode is a maximum likelihood estimate (MLE), the sample provides an estimate of the standard error of the likelihood. In general, the posterior mode in the unconstrained space doesn’t correspond to the mean (nor mode) in the constrained space, and thus the sample is needed to infer the mean as well as the standard deviation. (See this case study for a visual illustration.)

    This is computationally inexpensive compared to exact Bayesian inference with MCMC. The goodness of this estimate depends on both the estimate of the mode and how much the true posterior in the unconstrained space resembles a Gaussian.

    Configuration

    @@ -518,25 +491,6 @@

    Example

    Back to top -
    Back to top - - + + - + + - + @@ -234,6 +236,7 @@ - - @@ -481,6 +454,8 @@

    On this page

    • MCMC Sampling using Hamiltonian Monte Carlo
        +
      • Running the sampler
      • +
      • Stan CSV output file
      • Iterations
      • Adaptation
      • Sampler diagnostic file
      • -
      • Multiple chains in one executable
      • -
      • Examples - older parallelism +
      • Running multiple chains +
      • +
      • Summarizing sampler output(s) with stansummary
      • +
      • Examples - older parallelism
        • Running multiple chains with a specified RNG seed
        • Changing the default warmup and sampling iterations
        • @@ -520,8 +499,78 @@

          On this page

          MCMC Sampling using Hamiltonian Monte Carlo

          The sample method provides Bayesian inference over the model conditioned on data using Hamiltonian Monte Carlo (HMC) sampling. By default, the inference engine used is the No-U-Turn sampler (NUTS), an adaptive form of Hamiltonian Monte Carlo sampling. For details on HMC and NUTS, see the Stan Reference Manual chapter on MCMC Sampling.

          -

          The full set of configuration options available for the sample method is reported at the beginning of the sampler output file as CSV comments. When the example model bernoulli.stan is run via the command line with all default arguments, the resulting Stan CSV file header comments show the complete set of default sample method configuration options:

          -
          # method = sample (Default)
          +
          +

          Running the sampler

          +

          To generate a sample from the posterior distribution of the model conditioned on the data, we run the executable program with the argument sample or method=sample together with the input data. The executable can be run from any directory.

          +

          The full set of configuration options available for the sample method is available by using the sample help-all subcommand. The arguments with their requested values or defaults are also reported at the beginning of the sampler console output and in the output CSV file’s comments.

          +

          Here, we run it in the directory which contains the Stan program and input data, <cmdstan-home>/examples/bernoulli:

          +
          > cd examples/bernoulli
          +> ls
          +  bernoulli  bernoulli.data.json  bernoulli.data.R  bernoulli.stan
          +

          To execute sampling of the model under Linux or Mac, use:

          +
          > ./bernoulli sample data file=bernoulli.data.json
          +

          In Windows, the ./ prefix is not needed:

          +
          > bernoulli.exe sample data file=bernoulli.data.json
          +

          The output is the same across all supported platforms. First, the configuration of the program is echoed to the standard output:

          +
          method = sample (Default)
          +  sample
          +    num_samples = 1000 (Default)
          +    num_warmup = 1000 (Default)
          +    save_warmup = 0 (Default)
          +    thin = 1 (Default)
          +    adapt
          +      engaged = 1 (Default)
          +      gamma = 0.050000000000000003 (Default)
          +      delta = 0.80000000000000004 (Default)
          +      kappa = 0.75 (Default)
          +      t0 = 10 (Default)
          +      init_buffer = 75 (Default)
          +      term_buffer = 50 (Default)
          +      window = 25 (Default)
          +      save_metric = 0 (Default)
          +    algorithm = hmc (Default)
          +      hmc
          +        engine = nuts (Default)
          +          nuts
          +            max_depth = 10 (Default)
          +        metric = diag_e (Default)
          +        metric_file =  (Default)
          +        stepsize = 1 (Default)
          +        stepsize_jitter = 0 (Default)
          +    num_chains = 1 (Default)
          +id = 0 (Default)
          +data
          +  file = bernoulli.data.json
          +init = 2 (Default)
          +random
          +  seed = 3252652196 (Default)
          +output
          +  file = output.csv (Default)
          +  diagnostic_file =  (Default)
          +  refresh = 100 (Default)
          +

          After the configuration has been displayed, a short timing message is given.

          +
          Gradient evaluation took 1.2e-05 seconds
          +1000 transitions using 10 leapfrog steps per transition would take 0.12 seconds.
          +Adjust your expectations accordingly!
          +

          Next, the sampler reports the iteration number, reporting the percentage complete.

          +
          Iteration:    1 / 2000 [  0%]  (Warmup)
          +...
          +Iteration: 2000 / 2000 [100%]  (Sampling)
          +

          Finally, the sampler reports timing information:

          +
           Elapsed Time: 0.007 seconds (Warm-up)
          +               0.017 seconds (Sampling)
          +               0.024 seconds (Total)
          +
          +
          +

          Stan CSV output file

          +

          Each execution of the model results in draws from a single Markov chain being written to a file in comma-separated value (CSV) format. The default name of the output file is output.csv.

          +

          The first part of the output file records the version of the underlying Stan library and the configuration as comments (i.e., lines beginning with the pound sign (#)).

          +

          When the example model bernoulli.stan is run via the command line with all default arguments, the following configuration is displayed:

          +
          # stan_version_major = 2
          +# stan_version_minor = 23
          +# stan_version_patch = 0
          +# model = bernoulli_model
          +# method = sample (Default)
           #   sample
           #     num_samples = 1000 (Default)
           #     num_warmup = 1000 (Default)
          @@ -546,7 +595,44 @@ 

          MCMC Sampling using Hamiltonian Monte Carlo

          # metric_file = (Default) # stepsize = 1.000000 (Default) # stepsize_jitter = 0.000000 (Default) -# num_chains = 1 (Default)
          +# num_chains = 1 (Default) +# output +# file = output.csv (Default) +# diagnostic_file = (Default) +# refresh = 100 (Default)
          +

          This is followed by a CSV header indicating the names of the values sampled.

          +
          lp__,accept_stat__,stepsize__,treedepth__,n_leapfrog__,divergent__,energy__,theta
          +

          The first output columns report the HMC sampler information:

          +
            +
          • lp__ - the total log probability density (up to an additive constant) at each sample
          • +
          • accept_stat__ - the average Metropolis acceptance probability over each simulated Hamiltonian trajectory
          • +
          • stepsize__ - integrator step size
          • +
          • treedepth__ - depth of tree used by NUTS (NUTS sampler)
          • +
          • n_leapfrog__ - number of leapfrog calculations (NUTS sampler)
          • +
          • divergent__ - has value 1 if trajectory diverged, otherwise 0. (NUTS sampler)
          • +
          • energy__ - value of the Hamiltonian
          • +
          • int_time__ - total integration time (static HMC sampler)
          • +
          +

          Because the above header is from the NUTS sampler, it has columns treedepth__, n_leapfrog__, and divergent__ and doesn’t have column int_time__. The remaining columns correspond to model parameters. For the Bernoulli model, it is just the final column, theta.

          +

          The header line is written to the output file before warmup begins. If option save_warmup is set to 1, the warmup draws are output directly after the header. The total number of warmup draws saved is num_warmup divided by thin, rounded up (i.e., ceiling).

          +

          Following the warmup draws (if any), are comments which record the results of adaptation: the stepsize, and inverse mass metric used during sampling:

          +
          # Adaptation terminated
          +# Step size = 0.884484
          +# Diagonal elements of inverse mass matrix:
          +# 0.535006
          +

          The default sampler is NUTS with an adapted step size and a diagonal inverse mass matrix. For this example, the step size is 0.884484, and the inverse mass contains the single entry 0.535006 corresponding to the parameter theta.

          +

          Draws from the posterior distribution are printed out next, each line containing a single draw with the columns corresponding to the header.

          +
          -6.84097,0.974135,0.884484,1,3,0,6.89299,0.198853
          +-6.91767,0.985167,0.884484,1,1,0,6.92236,0.182295
          +-7.04879,0.976609,0.884484,1,1,0,7.05641,0.162299
          +-6.88712,1,0.884484,1,1,0,7.02101,0.188229
          +-7.22917,0.899446,0.884484,1,3,0,7.73663,0.383596
          +...
          +

          The output ends with timing details:

          +
          #  Elapsed Time: 0.007 seconds (Warm-up)
          +#                0.017 seconds (Sampling)
          +#                0.024 seconds (Total)
          +

          Iterations

          At every sampler iteration, the sampler returns a set of estimates for all parameters and quantities of interest in the model. During warmup, the NUTS algorithm adjusts the HMC algorithm parameters metric and stepsize in order to efficiently sample from typical set, the neighborhood substantial posterior probability mass through which the Markov chain will travel in equilibrium. After warmup, the fixed metric and stepsize are used to produce a set of draws.

          @@ -652,32 +738,86 @@

          Integration time

          Sampler diagnostic file

          The output keyword sub-argument diagnostic_file=<filepath> specifies the location of the auxiliary output file which contains sampler information for each draw, and the gradients on the unconstrained scale and log probabilities for all parameters in the model. By default, no auxiliary output file is produced.

          -
          -

          Multiple chains in one executable

          -

          As described in the quickstart section on parallelism, the preferred way to run multiple chains is to use the num_chains argument.

          -

          This will run multiple chains of MCMC from the same executable, which can save on memory usage due to only needing one copy of the model and data. As noted in the quickstart guide, this will be done in parallel if the model was compiled with STAN_THREADS=true.

          +
          +

          Running multiple chains

          +

          A Markov chain generates samples from the target distribution only after it has converged to equilibrium. In theory, convergence is only guaranteed asymptotically as the number of draws grows without bound. In practice, diagnostics must be applied to monitor convergence for the finite number of draws actually available. One way to monitor whether a chain has approximately converged to the equilibrium distribution is to compare its behavior to other randomly initialized chains. For robust diagnostics, we recommend running 4 chains.

          +

          The preferred way of using multiple chains is to run them all from the same executable using the num_chains argument. There is also the option to use the Unix or DOS shell to run multiple executables.

          +
          +

          Using the num_chains argument to run multiple chains

          +

          The num_chains argument can be used for all of Stan’s samplers with the exception of the static HMC engine. This will run multiple chains of MCMC from the same executable, which can save on memory usage due to only needing one copy of the model and data. Depending on whether the model was compiled with STAN_THREADS=true, these will either run in parallel or one after the other.

          The num_chains argument changes the meanings of several other arguments when it is greater than 1 (the default). Many arguments are now interpreted as a “template” which is used for each chain.

          For example, when num_chains=2, the argument output file=foo.csv no longer produces a file foo.csv, but instead produces two files, foo_1.csv and foo_2.csv. If you also supply id=5, the files produced will be foo_5.csv and foo_6.csvid=5 gives the id of the first chain, and the remaining chains are sequential from there.

          This also applies to input files, like those used for initialization. For example, if num_chains=3 and init=bar.json will first look for bar_1.json. If it exists, it will use bar_1.json for the first chain, bar_2.json for the second, and so on. If bar_1.json does not exist, it falls back to looking for bar.json, and if it exists, uses the same initial values for each chain. The numbers in these filenames are also based on the id argument, which defaults to 1.

          +

          For example, this will run 4 chains:

          +
          ./bernoulli sample num_chains=4 data file=bernoulli.data.json output file=output.csv
          +

          This will produce samples in output_1.csv, output_2.csv, output_3.csv, output_4.csv. A suffix with the chain id is appended to the provided output filename (output.csv in the above command).

          +

          If the model was not compiled with STAN_THREADS=true, the above command will run 4 chains sequentially.

          +

          If the model was compiled with STAN_THREADS=true, the chains can run in parallel, with the num_threads argument defining the maximum number of threads used to run the chains. If the model uses no within-chain parallelization (map_rect or reduce_sum calls), the below command will run 4 chains in parallel, provided there are cores available:

          +
          ./bernoulli sample num_chains=4 data file=bernoulli.data.json output file=output.csv num_threads=4
          +

          If the model uses within-chain parallelization (map_rect or reduce_sum calls), the threads are automatically scheduled to run the parallel parts of a single chain or run the sequential parts of another chains. The below call starts 4 chains that can use 16 threads. At a given moment a single chain may use all 16 threads, 1 thread, anything in between, or can wait for a thread to be available. The scheduling is left to the Threading Building Blocks scheduler.

          +
          ./bernoulli_par sample num_chains=4 data file=bernoulli.data.json output file=output.csv num_threads=16
          -
          -

          Examples - older parallelism

          +
          +
          +

          Summarizing sampler output(s) with stansummary

          +

          The stansummary utility processes one or more output files from a run or set of runs of Stan’s HMC sampler given a model and data. For all columns in the Stan CSV output file stansummary reports a set of statistics including mean, standard deviation, percentiles, effective number of samples, and \(\hat{R}\) values.

          +

          To run stansummary on the output files generated by the for loop above, by the above run of the bernoulli model on Mac or Linux:

          +
          <cmdstan-home>/bin/stansummary output_*.csv
          +

          On Windows, use backslashes to call the stansummary.exe.

          +
          <cmdstan-home>\bin\stansummary.exe output_*.csv
          +

          The stansummary output consists of one row of statistics per column in the Stan CSV output file. Therefore, the first rows in the stansummary report statistics over the sampler state. The final row of output summarizes the estimates of the model variable theta:

          +
          Inference for Stan model: bernoulli_model
          +4 chains: each with iter=(1000,1000,1000,1000); warmup=(0,0,0,0); thin=(1,1,1,1); 4000 iterations saved.
          +
          +Warmup took (0.0070, 0.0070, 0.0070, 0.0070) seconds, 0.028 seconds total
          +Sampling took (0.020, 0.017, 0.021, 0.019) seconds, 0.077 seconds total
          +
          +                Mean     MCSE  StdDev     5%   50%   95%    N_Eff  N_Eff/s    R_hat
          +lp__            -7.3  1.8e-02    0.75   -8.8  -7.0  -6.8  1.8e+03  2.4e+04  1.0e+00
          +accept_stat__   0.89  2.7e-03    0.17   0.52  0.96   1.0  3.9e+03  5.1e+04  1.0e+00
          +stepsize__       1.1  7.5e-02    0.11   0.93   1.2   1.2  2.0e+00  2.6e+01  2.5e+13
          +treedepth__      1.4  8.1e-03    0.49    1.0   1.0   2.0  3.6e+03  4.7e+04  1.0e+00
          +n_leapfrog__     2.3  1.7e-02    0.98    1.0   3.0   3.0  3.3e+03  4.3e+04  1.0e+00
          +divergent__     0.00      nan    0.00   0.00  0.00  0.00      nan      nan      nan
          +energy__         7.8  2.6e-02     1.0    6.8   7.5   9.9  1.7e+03  2.2e+04  1.0e+00
          +theta           0.25  2.9e-03    0.12  0.079  0.23  0.46  1.7e+03  2.1e+04  1.0e+00
          +
          +Samples were drawn using hmc with nuts.
          +For each parameter, N_Eff is a crude measure of effective sample size,
          +and R_hat is the potential scale reduction factor on split chains (at
          +convergence, R_hat=1).
          +

          In this example, we conditioned the model on data consisting of the outcomes of 10 bernoulli trials, where only 2 trials reported success. The 5%, 50%, and 95% percentile values for theta reflect the uncertainty in our estimate, due to the small amount of data, given the prior of beta(1, 1)

          +
          +
          +

          Examples - older parallelism

          Note: Many of these examples can be simplified by using the num_chains argument.

          -

          The Quickstart Guide MCMC Sampling chapter section on multiple chains also showed how to run multiple chains given a model and data, using the minimal required command line options: the method, the name of the data file, and a chain-specific name for the output file.

          -

          This creates multiple copies of the model process which will all load the data.

          -

          To run 4 chains in parallel on Mac OS and Linux, the syntax in both bash and zsh is the same:

          +

          When the num_chains argument is not available or is undesirable for whatever reason, built-in tools in the system shell can be used.

          +

          To run multiple chains given a model and data, either sequentially or in parallel, we can also use the Unix or DOS shell for loop to set up index variables needed to identify each chain and its outputs.

          +

          On MacOS or Linux, the for-loop syntax for both the bash and zsh interpreters is:

          +
          for NAME [in LIST]; do COMMANDS; done
          +

          The list can be a simple sequence of numbers, or you can use the shell expansion syntax {1..N} which expands to the sequence from \(1\) to \(N\), e.g. {1..4} expands to 1 2 3 4. Note that the expression {1..N} cannot contain spaces.

          +

          To run 4 chains for the example bernoulli model on MacOS or Linux:

          +
          > for i in {1..4}
          +    do
          +      ./bernoulli sample data file=bernoulli.data.json \
          +      output file=output_${i}.csv
          +    done
          +

          The backslash (\) indicates a line continuation in Unix. The expression ${i} substitutes in the value of loop index variable i. To run chains in parallel, put an ampersand (&) at the end of the nested sampler command:

          > for i in {1..4}
               do
          -      ./bernoulli sample data file=my_model.data.json \
          -                  output file=output_${i}.csv &
          +      ./bernoulli sample data file=bernoulli.data.json \
          +      output file=output_${i}.csv &
               done
          -

          The backslash (\) indicates a line continuation in Unix. The expression ${i} substitutes in the value of loop index variable i. The ampersand (&) pushes each process into the background which allows the loop to continue without waiting for the current chain to finish.

          -

          On Windows the corresponding loop is:

          +

          This pushes each process into the background which allows the loop to continue without waiting for the current chain to finish.

          +

          On Windows, the DOS for-loop syntax is one of:

          +
          for %i in (SET) do COMMAND COMMAND-ARGUMENTS
          +for /l %i in (START, STEP, END) do COMMAND COMMAND-ARGUMENTS
          +

          To run 4 chains in parallel on Windows:

          >for /l %i in (1, 1, 4) do start /b bernoulli.exe sample ^
          -                                    data file=my_model.data.json my_data ^
          +                                    data file=bernoulli.data.json my_data ^
                                               output file=output_%i.csv

          The caret (^) indicates a line continuation in DOS. The expression %i is the loop index.

          -

          In the following examples, we focus on just the nested sampler command for Unix.

          +

          In the following extended examples, we focus on just the nested sampler command for Unix.

          Running multiple chains with a specified RNG seed

          For reproducibility, we specify the same RNG seed across all chains and use the chain id argument to specify the RNG offset.

          @@ -835,25 +975,6 @@

          Everything example

          Betancourt, Michael. 2017. “A Conceptual Introduction to Hamiltonian Monte Carlo.” arXiv 1701.02434. https://arxiv.org/abs/1701.02434.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - -
    - -
    - - -
    - - - -
    - - - - -
    -

    MCMC Sampling

    -
    -

    Running the sampler

    -

    To generate a sample from the posterior distribution of the model conditioned on the data, we run the executable program with the argument sample or method=sample together with the input data. The executable can be run from any directory. Here, we run it in the directory which contains the Stan program and input data, <cmdstan-home>/examples/bernoulli:

    -
    > cd examples/bernoulli
    -

    To execute sampling of the model under Linux or Mac, use:

    -
    > ./bernoulli sample data file=bernoulli.data.json
    -

    In Windows, the ./ prefix is not needed:

    -
    > bernoulli.exe sample data file=bernoulli.data.json
    -

    The output is the same across all supported platforms. First, the configuration of the program is echoed to the standard output:

    -
    method = sample (Default)
    -  sample
    -    num_samples = 1000 (Default)
    -    num_warmup = 1000 (Default)
    -    save_warmup = 0 (Default)
    -    thin = 1 (Default)
    -    adapt
    -      engaged = 1 (Default)
    -      gamma = 0.050000000000000003 (Default)
    -      delta = 0.80000000000000004 (Default)
    -      kappa = 0.75 (Default)
    -      t0 = 10 (Default)
    -      init_buffer = 75 (Default)
    -      term_buffer = 50 (Default)
    -      window = 25 (Default)
    -      save_metric = 0 (Default)
    -    algorithm = hmc (Default)
    -      hmc
    -        engine = nuts (Default)
    -          nuts
    -            max_depth = 10 (Default)
    -        metric = diag_e (Default)
    -        metric_file =  (Default)
    -        stepsize = 1 (Default)
    -        stepsize_jitter = 0 (Default)
    -    num_chains = 1 (Default)
    -id = 0 (Default)
    -data
    -  file = bernoulli.data.json
    -init = 2 (Default)
    -random
    -  seed = 3252652196 (Default)
    -output
    -  file = output.csv (Default)
    -  diagnostic_file =  (Default)
    -  refresh = 100 (Default)
    -

    After the configuration has been displayed, a short timing message is given.

    -
    Gradient evaluation took 1.2e-05 seconds
    -1000 transitions using 10 leapfrog steps per transition would take 0.12 seconds.
    -Adjust your expectations accordingly!
    -

    Next, the sampler reports the iteration number, reporting the percentage complete.

    -
    Iteration:    1 / 2000 [  0%]  (Warmup)
    -....
    -Iteration: 2000 / 2000 [100%]  (Sampling)
    -

    Finally, the sampler reports timing information:

    -
     Elapsed Time: 0.007 seconds (Warm-up)
    -               0.017 seconds (Sampling)
    -               0.024 seconds (Total)
    -
    -
    -

    Running multiple chains

    -

    A Markov chain generates samples from the target distribution only after it has converged to equilibrium. In theory, convergence is only guaranteed asymptotically as the number of draws grows without bound. In practice, diagnostics must be applied to monitor convergence for the finite number of draws actually available. One way to monitor whether a chain has converged to the equilibrium distribution is to compare its behavior to other randomly initialized chains. For robust diagnostics, we recommend running 4 chains.

    -

    There are two different ways of running multiple chains, with the num_chains argument using a single executable and by using the Unix and DOS shell to run multiple executables.

    -
    -

    Using the num_chains argument to run multiple chains

    -

    The num_chains argument can be used for all of Stan’s samplers with the exception of the static HMC engine.

    -

    Example that will run 4 chains:

    -
    ./bernoulli sample num_chains=4 data file=bernoulli.data.json output file=output.csv
    -

    If the model was not compiled with STAN_THREADS=true, the above command will run 4 chains sequentially and will produce the sample in output_1.csv, output_2.csv, output_3.csv, output_4.csv. A suffix with the chain id is appended to the provided output filename (output.csv in the above command).

    -

    If the model was compiled with STAN_THREADS=true, the chains can run in parallel, with the num_threads argument defining the maximum number of threads used to run the chains. If the model uses no within-chain parallelization (map_rect or reduce_sum calls), the below command will run 4 chains in parallel, provided there are cores available:

    -
    ./bernoulli sample num_chains=4 data file=bernoulli.data.json output file=output.csv num_threads=4
    -

    If the model uses within-chain parallelization (map_rect or reduce_sum calls), the threads are automatically scheduled to run the parallel parts of a single chain or run the sequential parts of another chains. The below call starts 4 chains that can use 16 threads. At a given moment a single chain may use all 16 threads, 1 thread, anything in between, or can wait for a thread to be available. The scheduling is left to the Threading Building Blocks scheduler.

    -
    ./bernoulli_par sample num_chains=4 data file=bernoulli.data.json output file=output.csv num_threads=16
    -
    -
    -

    Using shell for running multiple chains

    -

    To run multiple chains given a model and data, either sequentially or in parallel, we can also use the Unix or DOS shell for loop to set up index variables needed to identify each chain and its outputs.

    -

    On MacOS or Linux, the for-loop syntax for both the bash and zsh interpreters is:

    -
    for NAME [in LIST]; do COMMANDS; done
    -

    The list can be a simple sequence of numbers, or you can use the shell expansion syntax {1..N} which expands to the sequence from \(1\) to \(N\), e.g. {1..4} expands to 1 2 3 4. Note that the expression {1..N} cannot contain spaces.

    -

    To run 4 chains for the example bernoulli model on MacOS or Linux:

    -
    > for i in {1..4}
    -    do
    -      ./bernoulli sample data file=bernoulli.data.json \
    -      output file=output_${i}.csv
    -    done
    -

    The backslash (\) indicates a line continuation in Unix. The expression ${i} substitutes in the value of loop index variable i. To run chains in parallel, put an ampersand (&) at the end of the nested sampler command:

    -
    > for i in {1..4}
    -    do
    -      ./bernoulli sample data file=bernoulli.data.json \
    -      output file=output_${i}.csv &
    -    done
    -

    This pushes each process into the background which allows the loop to continue without waiting for the current chain to finish.

    -

    On Windows, the DOS for-loop syntax is one of:

    -
    for %i in (SET) do COMMAND COMMAND-ARGUMENTS
    -for /l %i in (START, STEP, END) do COMMAND COMMAND-ARGUMENTS
    -

    To run 4 chains in parallel on Windows:

    -
    >for /l %i in (1, 1, 4) do start /b bernoulli.exe sample ^
    -                                    data file=bernoulli.data.json my_data ^
    -                                    output file=output_%i.csv
    -

    The caret (^) indicates a line continuation in DOS.

    -
    -
    -
    -

    Stan CSV output file

    -

    Each execution of the model results in draws from a single Markov chain being written to a file in comma-separated value (CSV) format. The default name of the output file is output.csv.

    -

    The first part of the output file records the version of the underlying Stan library and the configuration as comments (i.e., lines beginning with the pound sign (#)).

    -
    # stan_version_major = 2
    -# stan_version_minor = 23
    -# stan_version_patch = 0
    -# model = bernoulli_model
    -# method = sample (Default)
    -#   sample
    -#     num_samples = 1000 (Default)
    -#     num_warmup = 1000 (Default)
    -...
    -# output
    -#   file = output.csv (Default)
    -#   diagnostic_file =  (Default)
    -#   refresh = 100 (Default)
    -

    This is followed by a CSV header indicating the names of the values sampled.

    -
    lp__,accept_stat__,stepsize__,treedepth__,n_leapfrog__,divergent__,energy__,theta
    -

    The first output columns report the HMC sampler information:

    -
      -
    • lp__ - the total log probability density (up to an additive constant) at each sample
    • -
    • accept_stat__ - the average Metropolis acceptance probability over each simulated Hamiltonian trajectory
    • -
    • stepsize__ - integrator step size
    • -
    • treedepth__ - depth of tree used by NUTS (NUTS sampler)
    • -
    • n_leapfrog__ - number of leapfrog calculations (NUTS sampler)
    • -
    • divergent__ - has value 1 if trajectory diverged, otherwise 0. (NUTS sampler)
    • -
    • energy__ - value of the Hamiltonian
    • -
    • int_time__ - total integration time (static HMC sampler)
    • -
    -

    Because the above header is from the NUTS sampler, it has columns treedepth__, n_leapfrog__, and divergent__ and doesn’t have column int_time__. The remaining columns correspond to model parameters. For the Bernoulli model, it is just the final column, theta.

    -

    The header line is written to the output file before warmup begins. If option save_warmup is set to 1, the warmup draws are output directly after the header. The total number of warmup draws saved is num_warmup divided by thin, rounded up (i.e., ceiling).

    -

    Following the warmup draws (if any), are comments which record the results of adaptation: the stepsize, and inverse mass metric used during sampling:

    -
    # Adaptation terminated
    -# Step size = 0.884484
    -# Diagonal elements of inverse mass matrix:
    -# 0.535006
    -

    The default sampler is NUTS with an adapted step size and a diagonal inverse mass matrix. For this example, the step size is 0.884484, and the inverse mass contains the single entry 0.535006 corresponding to the parameter theta.

    -

    Draws from the posterior distribution are printed out next, each line containing a single draw with the columns corresponding to the header.

    -
    -6.84097,0.974135,0.884484,1,3,0,6.89299,0.198853
    --6.91767,0.985167,0.884484,1,1,0,6.92236,0.182295
    --7.04879,0.976609,0.884484,1,1,0,7.05641,0.162299
    --6.88712,1,0.884484,1,1,0,7.02101,0.188229
    --7.22917,0.899446,0.884484,1,3,0,7.73663,0.383596
    -...
    -

    The output ends with timing details:

    -
    #  Elapsed Time: 0.007 seconds (Warm-up)
    -#                0.017 seconds (Sampling)
    -#                0.024 seconds (Total)
    -
    -
    -

    Summarizing sampler output(s) with stansummary

    -

    The stansummary utility processes one or more output files from a run or set of runs of Stan’s HMC sampler given a model and data. For all columns in the Stan CSV output file stansummary reports a set of statistics including mean, standard deviation, percentiles, effective number of samples, and \(\hat{R}\) values.

    -

    To run stansummary on the output files generated by the for loop above, by the above run of the bernoulli model on Mac or Linux:

    -
    <cmdstan-home>/bin/stansummary output_*.csv
    -

    On Windows, use backslashes to call the stansummary.exe.

    -
    <cmdstan-home>\bin\stansummary.exe output_*.csv
    -

    The stansummary output consists of one row of statistics per column in the Stan CSV output file. Therefore, the first rows in the stansummary report statistics over the sampler state. The final row of output summarizes the estimates of the model variable theta:

    -
    Inference for Stan model: bernoulli_model
    -4 chains: each with iter=(1000,1000,1000,1000); warmup=(0,0,0,0); thin=(1,1,1,1); 4000 iterations saved.
    -
    -Warmup took (0.0070, 0.0070, 0.0070, 0.0070) seconds, 0.028 seconds total
    -Sampling took (0.020, 0.017, 0.021, 0.019) seconds, 0.077 seconds total
    -
    -                Mean     MCSE  StdDev     5%   50%   95%    N_Eff  N_Eff/s    R_hat
    -lp__            -7.3  1.8e-02    0.75   -8.8  -7.0  -6.8  1.8e+03  2.4e+04  1.0e+00
    -accept_stat__   0.89  2.7e-03    0.17   0.52  0.96   1.0  3.9e+03  5.1e+04  1.0e+00
    -stepsize__       1.1  7.5e-02    0.11   0.93   1.2   1.2  2.0e+00  2.6e+01  2.5e+13
    -treedepth__      1.4  8.1e-03    0.49    1.0   1.0   2.0  3.6e+03  4.7e+04  1.0e+00
    -n_leapfrog__     2.3  1.7e-02    0.98    1.0   3.0   3.0  3.3e+03  4.3e+04  1.0e+00
    -divergent__     0.00      nan    0.00   0.00  0.00  0.00      nan      nan      nan
    -energy__         7.8  2.6e-02     1.0    6.8   7.5   9.9  1.7e+03  2.2e+04  1.0e+00
    -theta           0.25  2.9e-03    0.12  0.079  0.23  0.46  1.7e+03  2.1e+04  1.0e+00
    -
    -Samples were drawn using hmc with nuts.
    -For each parameter, N_Eff is a crude measure of effective sample size,
    -and R_hat is the potential scale reduction factor on split chains (at
    -convergence, R_hat=1).
    -

    In this example, we conditioned the model on a dataset consisting of the outcomes of 10 bernoulli trials, where only 2 trials reported success. The 5%, 50%, and 95% percentile values for theta reflect the uncertainty in our estimate, due to the small amount of data, given the prior of beta(1, 1)

    - - -
    -
    - - Back to top
    - - - -
    - - - - - \ No newline at end of file diff --git a/docs/2_34/cmdstan-guide/optimization_intro.html b/docs/2_34/cmdstan-guide/optimization_intro.html deleted file mode 100644 index e74210b71..000000000 --- a/docs/2_34/cmdstan-guide/optimization_intro.html +++ /dev/null @@ -1,961 +0,0 @@ - - - - - - - - - -Optimization - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - -
    - -
    - - -
    - - - -
    - - - - -
    -

    Optimization

    -

    The CmdStan executable can run Stan’s optimization algorithms which provide a deterministic method to find the posterior mode. If the posterior is not convex, there is no guarantee Stan will be able to find the global mode as opposed to a local optimum of log probability.

    -

    The executable does not need to be recompiled in order to switch from sampling to optimization, and the data input format is the same. The following is a minimal call to Stan’s optimizer using defaults for everything but the location of the data file.

    -
    > ./bernoulli optimize data file=bernoulli.data.json
    -

    Executing this command prints both output to the console and to a csv file.

    -

    The first part of the console output reports on the configuration used. The above command uses all default configurations, therefore the optimizer used is the L-BFGS optimizer and its default initial stepsize and tolerances for monitoring convergence:

    -
     ./bernoulli optimize data file=bernoulli.data.json
    -method = optimize
    -  optimize
    -    algorithm = lbfgs (Default)
    -      lbfgs
    -        init_alpha = 0.001 (Default)
    -        tol_obj = 1e-12 (Default)
    -        tol_rel_obj = 10000 (Default)
    -        tol_grad = 1e-08 (Default)
    -        tol_rel_grad = 10000000 (Default)
    -        tol_param = 1e-08 (Default)
    -        history_size = 5 (Default)
    -    iter = 2000 (Default)
    -    save_iterations = 0 (Default)
    -id = 0 (Default)
    -data
    -  file = bernoulli.data.json
    -init = 2 (Default)
    -random
    -  seed = 87122538 (Default)
    -output
    -  file = output.csv (Default)
    -  diagnostic_file =  (Default)
    -  refresh = 100 (Default)
    -

    The second part of the output indicates how well the algorithm fared, here converging and terminating normally. The numbers reported indicate that it took 5 iterations and 8 gradient evaluations. This is, not surprisingly, far fewer iterations than required for sampling; even fewer iterations would be used with less stringent user-specified convergence tolerances. The alpha value is for step size used. In the final state the change in parameters was roughly \(0.002\) and the length of the gradient roughly 3e-05 (\(0.00003\)).

    -
    Initial log joint probability = -6.85653
    -    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
    -       5      -5.00402    0.00184936   3.35074e-05           1           1        8   
    -Optimization terminated normally: 
    -  Convergence detected: relative gradient magnitude is below tolerance
    -

    The output from optimization is written into the file output.csv by default. The output follows the same pattern as the output for sampling, first dumping the entire set of parameters used as comment lines:

    -
    # stan_version_major = 2
    -# stan_version_minor = 23
    -# stan_version_patch = 0
    -# model = bernoulli_model
    -# method = optimize
    -#   optimize
    -#     algorithm = lbfgs (Default)
    -...
    -

    Following the config information, are two lines of output: the CSV headers and the recorded values:

    -
    lp__,theta
    --5.00402,0.200003
    -

    Note that everything is a comment other than a line for the header, and a line for the values. Here, the header indicates the unnormalized log probability with lp__ and the model parameter theta. The maximum log probability is -5.0 and the posterior mode for theta is 0.20. The mode exactly matches what we would expect from the data. Because the prior was uniform, the result 0.20 represents the maximum likelihood estimate (MLE) for the very simple Bernoulli model. Note that no uncertainty is reported.

    -

    All of the optimizers stream per-iteration intermediate approximations to the command line console. The sub-argument save_iterations specifies whether or not to save the intermediate iterations to the output file. Allowed values are \(0\) or \(1\), corresponding to False and True respectively. The default value is \(0\), i.e., intermediate iterations are not saved to the output file. Running the optimizer with save_iterations=1 writes both the initial log joint probability and values for all iterations to the output CSV file.

    -

    Running the example model with option save_iterations=1, i.e., the command

    -
    > ./bernoulli optimize save_iterations=1 data file=bernoulli.data.json
    -

    produces CSV file output rows:

    -
    lp__,theta
    --6.85653,0.493689
    --6.10128,0.420936
    --5.02953,0.22956
    --5.00517,0.206107
    --5.00403,0.200299
    --5.00402,0.200003
    - - -
    - - Back to top
    - - - -
    - - - - - \ No newline at end of file diff --git a/docs/2_34/cmdstan-guide/optimize_config.html b/docs/2_34/cmdstan-guide/optimize_config.html index 1f5b56d7b..2a3ab13e5 100644 --- a/docs/2_34/cmdstan-guide/optimize_config.html +++ b/docs/2_34/cmdstan-guide/optimize_config.html @@ -7,7 +7,7 @@ -Optimization Configuration +Optimization +/* CSS for citations */ +div.csl-bib-body { } +div.csl-entry { + clear: both; + margin-bottom: 0em; +} +.hanging-indent div.csl-entry { + margin-left:2em; + text-indent:-2em; +} +div.csl-left-margin { + min-width:2em; + float:left; +} +div.csl-right-inline { + margin-left:2em; + padding-left:1em; +} +div.csl-indent { + margin-left: 2em; +} @@ -38,10 +58,12 @@ - + + - + + - + @@ -214,6 +236,7 @@ - - @@ -477,9 +470,14 @@

    On this page

    Pathfinder Method for Approximate Bayesian Inference

    -

    The Pathfinder algorithm is described in section Pathfinder overview.

    +

    The CmdStan method pathfinder uses the Pathfinder algorithm of Zhang et al. (2022), which is further described in the Stan Reference Manual.

    +

    A single run of the Pathfinder algorithm generates a set of approximate draws. Inference is improved by running multiple Pathfinder instances and using Pareto-smoothed importance resampling (PSIS) of the resulting sets of draws. This better matches non-normal target densities and also eliminates minor modes.

    The pathfinder method runs multi-path Pathfinder by default, which returns a PSIS sample over the draws from several individual (“single-path”) Pathfinder runs. Argument num_paths specifies the number of single-path Pathfinders, the default is \(4\). If num_paths is set to 1, then only one individual Pathfinder is run without the PSIS reweighting of the sample.

    -

    The full set of configuration options available for the pathfinder method is reported at the beginning of the pathfinder output file as CSV comments. When the example model bernoulli.stan is run with method=pathfinder via the command line with all default arguments, the resulting Stan CSV file header comments show the complete set of default configuration options:

    +

    The full set of configuration options available for the pathfinder method is available by using the pathfinder help-all subcommand. The arguments with their requested values or defaults are also reported at the beginning of the algorithm’s console output and in the output CSV file’s comments.

    +

    The following is a minimal call the Pathfinder algorithm using defaults for everything but the location of the data file.

    +
    > ./bernoulli pathfinder data file=bernoulli.data.R
    +

    Executing this command prints both output to the console and csv files.

    +

    The first part of the console output reports on the configuration used.

    method = pathfinder
       pathfinder
         init_alpha = 0.001 (Default)
    @@ -496,7 +494,39 @@ 

    Pathfinder Method for Approximate Bayesian Inference

    save_single_paths = 0 (Default) max_lbfgs_iters = 1000 (Default) num_draws = 1000 (Default) - num_elbo_draws = 25 (Default)
    + num_elbo_draws = 25 (Default) +id = 1 (Default) +data + file = examples/bernoulli/bernoulli.data.json +init = 2 (Default) +random + seed = 1995513073 (Default) +output + file = output.csv (Default) + diagnostic_file = (Default) + refresh = 100 (Default) + sig_figs = -1 (Default) + profile_file = profile.csv (Default) +num_threads = 1 (Default) +

    The rest of the output describes the progression of the algorithm.

    +

    By default, the Pathfinder algorithm runs 4 single-path Pathfinders in parallel, then uses importance resampling on the set of returned draws to produce the specified number of draws.

    +
    Path [1] :Initial log joint density = -11.543343
    +Path [1] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    +              5      -6.748e+00      1.070e-03   1.707e-05    1.000e+00  1.000e+00       126 -6.220e+00 -6.220e+00
    +Path [1] :Best Iter: [5] ELBO (-6.219833) evaluations: (126)
    +Path [2] :Initial log joint density = -7.443345
    +Path [2] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    +              5      -6.748e+00      9.936e-05   3.738e-07    1.000e+00  1.000e+00       126 -6.164e+00 -6.164e+00
    +Path [2] :Best Iter: [5] ELBO (-6.164015) evaluations: (126)
    +Path [3] :Initial log joint density = -18.986308
    +Path [3] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    +              5      -6.748e+00      2.996e-04   4.018e-06    1.000e+00  1.000e+00       126 -6.201e+00 -6.201e+00
    +Path [3] :Best Iter: [5] ELBO (-6.200559) evaluations: (126)
    +Path [4] :Initial log joint density = -8.304453
    +Path [4] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    +              5      -6.748e+00      2.814e-04   2.034e-06    1.000e+00  1.000e+00       126 -6.221e+00 -6.221e+00
    +Path [4] :Best Iter: [3] ELBO (-6.161276) evaluations: (126)
    +Total log probability function evaluations:8404

    Pathfinder Configuration

      @@ -512,18 +542,43 @@

      Pathfinder Config

    L-BFGS Configuration

    -

    Arguments init_alpha through history_size are the full set of arguments to the L-BFGS optimizer and have the same defaults for optimization.

    +

    Arguments init_alpha through history_size are the full set of arguments to the L-BFGS optimizer and have the same defaults for optimization.

    Multi-path Pathfinder CSV files

    By default, the pathfinder method uses 4 independent Pathfinder runs, each of which produces 1000 approximate draws, which are then importance resampled down to 1000 final draws. The importance resampled draws are output as a StanCSV file.

    The CSV files have the following structure:

    -
      -
    • The full set of configuration options available for the pathfinder method is reported at the beginning of the sampler output file as CSV comments.

    • -
    • The CSV header row consists of columns lp_approx__, lp__, and the Stan model parameters, transformed parameters, and generated quantities in the order in which they are declared in the Stan program.

    • -
    • The data rows contain the draws from the single- or multi-path run.

    • -
    • Final comments containing timing information.

    • -
    +

    The initial CSV comment rows contain the complete set of CmdStan configuration options.

    +
    ...
    +# method = pathfinder
    +#   pathfinder
    +#     init_alpha = 0.001 (Default)
    +#     tol_obj = 9.9999999999999998e-13 (Default)
    +#     tol_rel_obj = 10000 (Default)
    +#     tol_grad = 1e-08 (Default)
    +#     tol_rel_grad = 10000000 (Default)
    +#     tol_param = 1e-08 (Default)
    +#     history_size = 5 (Default)
    +#     num_psis_draws = 1000 (Default)
    +#     num_paths = 4 (Default)
    +#     psis_resample = 1 (Default)
    +#     calculate_lp = 1 (Default)
    +#     save_single_paths = 0 (Default)
    +#     max_lbfgs_iters = 1000 (Default)
    +#     num_draws = 1000 (Default)
    +#     num_elbo_draws = 25 (Default)
    +...
    +

    Next is the column header line, followed the set of approximate draws. The Pathfinder algorithm first outputs lp_approx__, the log density in the approximating distribution, and lp__, the log density in the target distribution, followed by estimates of the model parameters, transformed parameters, and generated quantities.

    +
    lp_approx__,lp__,theta
    +-2.4973, -8.2951, 0.0811852
    +-0.87445, -7.06526, 0.160207
    +-0.812285, -7.07124, 0.35819
    +...
    +

    The final lines are comment lines which give timing information.

    +
    # Elapsed Time: 0.016000 seconds (Pathfinders)
    +#               0.003000 seconds (PSIS)
    +#               0.019000 seconds (Total)
    +

    Pathfinder provides option save_single_paths which will save output from the single-path Pathfinder runs.

    Single-path Pathfinder Outputs.

    @@ -591,29 +646,15 @@

    Single-pat

    Option num_paths=1 runs one single-path Pathfinder and output CSV file contains the draws from that run without PSIS reweighting. The combination of arguments num_paths=1 save_single_paths=1 creates just two output files, the CSV sample and the set of ELBO iterations. In this case, the default output file name is “output.csv” and the default diagnostic file name is “output.json”.

    +

    - Back to top - + Back to top

    References

    +
    +Zhang, Lu, Bob Carpenter, Andrew Gelman, and Aki Vehtari. 2022. “Pathfinder: Parallel Quasi-Newton Variational Inference.” Journal of Machine Learning Research 23 (306): 1–49. http://jmlr.org/papers/v23/21-0889.html. +
    +
    diff --git a/docs/2_34/cmdstan-guide/pathfinder_intro.html b/docs/2_34/cmdstan-guide/pathfinder_intro.html deleted file mode 100644 index 92918fd7a..000000000 --- a/docs/2_34/cmdstan-guide/pathfinder_intro.html +++ /dev/null @@ -1,965 +0,0 @@ - - - - - - - - - -Pathfinder for Variational Inference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - -
    - -
    - - -
    - - - -
    - - - - -
    -

    Variational Inference using Pathfinder

    -

    The CmdStan method pathfinder uses the Pathfinder algorithm of Zhang et al. (2022). Pathfinder is a variational method for approximately sampling from differentiable log densities. Starting from a random initialization, Pathfinder locates normal approximations to the target density along a quasi-Newton optimization path, with local covariance estimated using the negative inverse Hessian estimates produced by the L-BFGS optimizer. Pathfinder returns draws from the Gaussian approximation with the lowest estimated Kullback-Leibler (KL) divergence to the true posterior.

    -

    Pathfinder differs from the ADVI method in that it uses quasi-Newton optimization on the log posterior instead of stochastic gradient descent (SGD) on the Monte Carlo computation of the evidence lower bound (ELBO). Pathfinder’s approach is both faster and more stable than that of ADVI. Compared to ADVI and short dynamic HMC runs, Pathfinder requires one to two orders of magnitude fewer log density and gradient evaluations, with greater reductions for more challenging posteriors.

    -

    A single run of the Pathfinder algorithm generates a set of approximate draws. Inference is improved by running multiple Pathfinder instances and using Pareto-smoothed importance resampling (PSIS) of the resulting sets of draws. This better matches non-normal target densities and also eliminates minor modes. By default, the pathfinder method uses 4 independent Pathfinder runs, each of which produces 1000 approximate draws, which are then importance resampled down to 1000 final draws.

    -

    The following is a minimal call the Pathfinder algorithm using defaults for everything but the location of the data file.

    -
    > ./bernoulli pathfinder data file=bernoulli.data.R
    -

    Executing this command prints both output to the console and csv files.

    -

    The first part of the console output reports on the configuration used.

    -
    method = pathfinder
    -  pathfinder
    -    init_alpha = 0.001 (Default)
    -    tol_obj = 9.9999999999999998e-13 (Default)
    -    tol_rel_obj = 10000 (Default)
    -    tol_grad = 1e-08 (Default)
    -    tol_rel_grad = 10000000 (Default)
    -    tol_param = 1e-08 (Default)
    -    history_size = 5 (Default)
    -    num_psis_draws = 1000 (Default)
    -    num_paths = 4 (Default)
    -    psis_resample = 1 (Default)
    -    calculate_lp = 1 (Default)
    -    save_single_paths = 0 (Default)
    -    max_lbfgs_iters = 1000 (Default)
    -    num_draws = 1000 (Default)
    -    num_elbo_draws = 25 (Default)
    -id = 1 (Default)
    -data
    -  file = examples/bernoulli/bernoulli.data.json
    -init = 2 (Default)
    -random
    -  seed = 1995513073 (Default)
    -output
    -  file = output.csv (Default)
    -  diagnostic_file =  (Default)
    -  refresh = 100 (Default)
    -  sig_figs = -1 (Default)
    -  profile_file = profile.csv (Default)
    -num_threads = 1 (Default)
    -

    The rest of the output describes the progression of the algorithm.

    -

    By default, the Pathfinder algorithm runs 4 single-path Pathfinders in parallel, the uses importance resampling on the set of returned draws to produce the specified number of draws.

    -
    Path [1] :Initial log joint density = -11.543343
    -Path [1] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    -              5      -6.748e+00      1.070e-03   1.707e-05    1.000e+00  1.000e+00       126 -6.220e+00 -6.220e+00
    -Path [1] :Best Iter: [5] ELBO (-6.219833) evaluations: (126)
    -Path [2] :Initial log joint density = -7.443345
    -Path [2] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    -              5      -6.748e+00      9.936e-05   3.738e-07    1.000e+00  1.000e+00       126 -6.164e+00 -6.164e+00
    -Path [2] :Best Iter: [5] ELBO (-6.164015) evaluations: (126)
    -Path [3] :Initial log joint density = -18.986308
    -Path [3] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    -              5      -6.748e+00      2.996e-04   4.018e-06    1.000e+00  1.000e+00       126 -6.201e+00 -6.201e+00
    -Path [3] :Best Iter: [5] ELBO (-6.200559) evaluations: (126)
    -Path [4] :Initial log joint density = -8.304453
    -Path [4] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    -              5      -6.748e+00      2.814e-04   2.034e-06    1.000e+00  1.000e+00       126 -6.221e+00 -6.221e+00
    -Path [4] :Best Iter: [3] ELBO (-6.161276) evaluations: (126)
    -Total log probability function evaluations:8404
    -

    Pathfinder outputs a StanCSV file file which contains the importance resampled draws from multi-path Pathfinder. The initial CSV comment rows contain the complete set of CmdStan configuration options. Next is the column header line, followed the set of approximate draws. The Pathfinder algorithm first outputs lp_approx__, the log density in the approximating distribution, and lp__, the log density in the target distribution, followed by estimates of the model parameters, transformed parameters, and generated quantities.

    -
    lp_approx__,lp__,theta
    --2.4973, -8.2951, 0.0811852
    --0.87445, -7.06526, 0.160207
    --0.812285, -7.07124, 0.35819
    -...
    -

    The final lines are comment lines which give timing information.

    -
    # Elapsed Time: 0.016000 seconds (Pathfinders)
    -#               0.003000 seconds (PSIS)
    -#               0.019000 seconds (Total)
    -

    Pathfinder provides option save_single_paths which will save output from the single-path Pathfinder runs. See section Pathfinder Method for details.

    - - - -
    - - Back to top

    References

    -
    -Zhang, Lu, Bob Carpenter, Andrew Gelman, and Aki Vehtari. 2022. “Pathfinder: Parallel Quasi-Newton Variational Inference.” Journal of Machine Learning Research 23 (306): 1–49. http://jmlr.org/papers/v23/21-0889.html. -
    -
    - - - -
    - - - - - \ No newline at end of file diff --git a/docs/2_34/cmdstan-guide/print.html b/docs/2_34/cmdstan-guide/print.html index 59a934c48..f8b75a86c 100644 --- a/docs/2_34/cmdstan-guide/print.html +++ b/docs/2_34/cmdstan-guide/print.html @@ -38,10 +38,12 @@ - + + - + + - + @@ -185,6 +187,7 @@
    +
    @@ -223,7 +226,7 @@ - - - - @@ -282,7 +261,7 @@
    - - @@ -448,25 +421,6 @@

    print (deprecated): MCMC Output Analysis

    Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -252,7 +255,7 @@ - - - - @@ -311,7 +290,7 @@
    - - @@ -704,25 +677,6 @@

    BNF grammar for Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -252,7 +255,7 @@ - - - - @@ -311,7 +290,7 @@
    - - @@ -570,7 +543,7 @@

    Sampler Stan # refresh = 100 (Default)

    Note that when running multi-threaded programs which use reduce_sum for high-level parallelization, the number of threads used will also be included in this initial comment header.

    Column headers

    -

    The CSV header row lists all sampler parameters, model parameters, transformed parameters, and quantities of interest. The sampler parameters are described in detail in the output file section of the Quickstart Guide chapter on MCMC Sampling. The example model bernoulli.stan only contains one parameter theta, therefore the CSV file data table consists of 7 sampler parameter columns and one column for the model parameter:

    +

    The CSV header row lists all sampler parameters, model parameters, transformed parameters, and quantities of interest. The sampler parameters are described in detail in the output file section of the chapter on MCMC Sampling. The example model bernoulli.stan only contains one parameter theta, therefore the CSV file data table consists of 7 sampler parameter columns and one column for the model parameter:

    lp__,accept_stat__,stepsize__,treedepth__,n_leapfrog__,divergent__,energy__,theta

    As a second example, we show the output of the eight_schools.stan model on run on example dataset. This model has 3 parameters: mu, theta a vector whose length is dependent on the input data, here N = 8, and tau. The initial columns are for the 7 sampler parameters, as before. The column headers for the model parameters are:

    mu,theta.1,theta.2,theta.3,theta.4,theta.5,theta.6,theta.7,theta.8,tau
    @@ -693,25 +666,6 @@

    Diagnose method ou Back to top - - + - + + - + + - + @@ -185,6 +187,7 @@
    +
    @@ -223,7 +226,7 @@ - - - - @@ -282,7 +261,7 @@
    - - @@ -478,25 +451,6 @@

    The Stan compile Back to top -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - -
    - -
    - - -
    - - - -
    - - - - -
    -

    Variational Inference using ADVI

    -

    The CmdStan method variational uses the Automatic Differentiation Variational Inference (ADVI) algorithm of Kucukelbir et al. (2017) to provide an approximate posterior distribution of the model conditioned on the data. The approximating distribution it uses is a Gaussian in the unconstrained variable space, either a fully factorized Gaussian approximation, specified by argument algorithm=meanfield option, or a Gaussian approximation using a full-rank covariance matrix, specified by argument algorithm=fullrank. By default, ADVI uses option algorithm=meanfield.

    -

    The following is a minimal call to Stan’s variational inference algorithm using defaults for everything but the location of the data file.

    -
    > ./bernoulli variational data file=bernoulli.data.R
    -

    Executing this command prints both output to the console and to a csv file.

    -

    The first part of the console output reports on the configuration used: the default option algorithm=meanfield and the default tolerances for monitoring the algorithm’s convergence.

    -
    method = variational
    -  variational
    -    algorithm = meanfield (Default)
    -      meanfield
    -    iter = 10000 (Default)
    -    grad_samples = 1 (Default)
    -    elbo_samples = 100 (Default)
    -    eta = 1 (Default)
    -    adapt
    -      engaged = 1 (Default)
    -      iter = 50 (Default)
    -    tol_rel_obj = 0.01 (Default)
    -    eval_elbo = 100 (Default)
    -    output_samples = 1000 (Default)
    -id = 0 (Default)
    -data
    -  file = bernoulli.data.json
    -init = 2 (Default)
    -random
    -  seed = 3323783840 (Default)
    -output
    -  file = output.csv (Default)
    -  diagnostic_file =  (Default)
    -  refresh = 100 (Default)
    -

    After the configuration has been displayed, informational and timing messages are output:

    -
    ------------------------------------------------------------
    -EXPERIMENTAL ALGORITHM:
    -  This procedure has not been thoroughly tested and may be unstable
    -  or buggy. The interface is subject to change.
    -------------------------------------------------------------
    -
    -Gradient evaluation took 2.1e-05 seconds
    -1000 transitions using 10 leapfrog steps per transition would take 0.21 seconds.
    -Adjust your expectations accordingly!
    -

    The rest of the output describes the progression of the algorithm. An adaptation phase finds a good value for the step size scaling parameter eta. The evidence lower bound (ELBO) is the variational objective function and is evaluated based on a Monte Carlo estimate. The variational inference algorithm in Stan is stochastic, which makes it challenging to assess convergence. That is, while the algorithm appears to have converged in \(\sim\) 250 iterations, the algorithm runs for another few thousand iterations until mean change in ELBO drops below the default tolerance of 0.01.

    -
    Begin eta adaptation.
    -Iteration:   1 / 250 [  0%]  (Adaptation)
    -Iteration:  50 / 250 [ 20%]  (Adaptation)
    -Iteration: 100 / 250 [ 40%]  (Adaptation)
    -Iteration: 150 / 250 [ 60%]  (Adaptation)
    -Iteration: 200 / 250 [ 80%]  (Adaptation)
    -Success! Found best value [eta = 1] earlier than expected.
    -
    -Begin stochastic gradient ascent.
    -  iter             ELBO   delta_ELBO_mean   delta_ELBO_med   notes 
    -   100           -6.131             1.000            1.000
    -   200           -6.458             0.525            1.000
    -   300           -6.300             0.359            0.051
    -   400           -6.137             0.276            0.051
    -   500           -6.243             0.224            0.027
    -   600           -6.305             0.188            0.027
    -   700           -6.289             0.162            0.025
    -   800           -6.402             0.144            0.025
    -   900           -6.103             0.133            0.025
    -  1000           -6.314             0.123            0.027
    -  1100           -6.348             0.024            0.025
    -  1200           -6.244             0.020            0.018
    -  1300           -6.293             0.019            0.017
    -  1400           -6.250             0.017            0.017
    -  1500           -6.241             0.015            0.010   MEDIAN ELBO CONVERGED
    -
    -Drawing a sample of size 1000 from the approximate posterior... 
    -COMPLETED.
    -

    The output from variational is written into the file output.csv by default. The output follows the same pattern as the output for sampling, first dumping the entire set of parameters used as CSV comments:

    -
    # stan_version_major = 2
    -# stan_version_minor = 23
    -# stan_version_patch = 0
    -# model = bernoulli_model
    -# method = variational
    -#   variational
    -#     algorithm = meanfield (Default)
    -#       meanfield
    -#     iter = 10000 (Default)
    -#     grad_samples = 1 (Default)
    -#     elbo_samples = 100 (Default)
    -#     eta = 1 (Default)
    -#     adapt
    -#       engaged = 1 (Default)
    -#       iter = 50 (Default)
    -#     tol_rel_obj = 0.01 (Default)
    -#     eval_elbo = 100 (Default)
    -#     output_samples = 1000 (Default)
    -...
    -

    Next is the column header line, followed more CSV comments reporting the adapted value for the stepsize, followed by the values. The first line is special: it is the mean of the variational approximation. The rest of the output contains output_samples number of samples drawn from the variational approximation.

    -
    lp__,log_p__,log_g__,theta
    -# Stepsize adaptation complete.
    -# eta = 1
    -0,0,0,0.236261
    -0,-6.82318,-0.0929121,0.300415
    -0,-6.89701,-0.158687,0.321982
    -0,-6.99391,-0.23916,0.343643
    -0,-7.35801,-0.51787,0.401554
    -0,-7.4668,-0.539473,0.123081
    -...
    -

    The header indicates the unnormalized log probability with lp__. This is a legacy feature that we do not use for variational inference. The ELBO is not stored unless a diagnostic option is given.

    - - - -
    - - Back to top

    References

    -
    -Kucukelbir, Alp, Dustin Tran, Rajesh Ranganath, Andrew Gelman, and David M Blei. 2017. “Automatic Differentiation Variational Inference.” Journal of Machine Learning Research. -
    -
    - - - -
    - - - - - \ No newline at end of file diff --git a/docs/2_34/functions-reference-2_34.pdf b/docs/2_34/functions-reference-2_34.pdf index cdc45896ff0e43410c4cc6e9bf42c2a642320661..c896b41982de31b39ae473bb646635938044544e 100644 GIT binary patch delta 104745 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Π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%0Dez3;)AaPsw*YAiEF67 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 ItG^o;0NZEL!2kdN delta 104486 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 M6E0O%SARDy0G5fdUH||9 diff --git a/docs/2_34/functions-reference/array_operations.html b/docs/2_34/functions-reference/array_operations.html index 95ce8ae37..a822c158b 100644 --- a/docs/2_34/functions-reference/array_operations.html +++ b/docs/2_34/functions-reference/array_operations.html @@ -72,10 +72,12 @@ - + + - + + - + @@ -248,6 +250,7 @@
    + - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -703,25 +706,6 @@

    Stan Functions

    Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -569,25 +572,6 @@

    Stan functions

    Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -1140,25 +1143,6 @@

    Stan functions

    Back to top - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -620,25 +623,6 @@

    Numerical stability Back to top - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -916,25 +919,6 @@

    Complex hyperbolic trigonom Back to top - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -1479,25 +1482,6 @@

    Rev Back to top - - + + - + + - + @@ -185,6 +187,7 @@
    +
    @@ -549,25 +552,6 @@

    Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -620,25 +623,6 @@

    Stan functions

    Back to top - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -751,25 +754,6 @@

    Return type

    Back to top - - + + - + + - + @@ -268,6 +270,7 @@
    + - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -684,25 +687,6 @@

    Stan functions

    Back to top - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -562,7 +565,7 @@

    On this page

    Deprecated Functions

    This appendix lists currently deprecated functionality along with how to replace it.

    -

    Starting in Stan 2.29, deprecated functions with drop in replacements (such as the renaming of get_lp or multiply_log) will be removed 3 versions later e.g., functions deprecated in Stan 2.20 will be removed in Stan 2.23 and placed in [Removed Functions]. The Stan compiler can automatically update these on the behalf of the user for the entire deprecation window and at least one version following the removal.

    +

    Starting in Stan 2.29, deprecated functions with drop in replacements (such as the renaming of get_lp or multiply_log) will be removed 3 versions later e.g., functions deprecated in Stan 2.20 will be removed in Stan 2.23 and placed in Removed Functions. The Stan compiler can automatically update these on the behalf of the user for the entire deprecation window and at least one version following the removal.

    Integer division with operator/

    Deprecated: Using / with two integer arguments is interpreted as integer floor division, such that

    @@ -729,25 +732,6 @@

    Sizes and para

    Back to top - - + + - + + - + @@ -234,6 +236,7 @@
    - - + + - + + - + @@ -184,6 +186,7 @@
    +
    @@ -3773,25 +3776,6 @@

    Z

    Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -550,25 +553,6 @@

    Stan functions

    Back to top - - + + - + + - + @@ -268,6 +270,7 @@
    - - + + - + + - + @@ -184,6 +186,7 @@
    +
    @@ -491,7 +494,7 @@

    Stan Functions Reference

    -

    This is the reference for the functions defined in the Stan math library and available in the Stan programming language.

    +

    This is the reference for the functions defined in the Stan math library and available in the Stan programming language.

    For more information the Stan language and inference engines and how to use Stan for Bayesian inference, see

    • the Stan User’s Guide. The Stan user’s guide provides example models and programming techniques for coding statistical models in Stan. It also serves as an example-driven introduction to Bayesian modeling and inference:

    • @@ -517,25 +520,6 @@

      Licensing

      Back to top - - + + - + + - + @@ -214,6 +216,7 @@
      +
      @@ -633,7 +636,7 @@

      Casting functions

      int to_int(data real x)

      Return the value x truncated to an integer. This will throw an error if the value of x is too big to represent as a 32-bit signed integer.

      -

      This is similar to trunc (see [Rounding functions]) but the return type is of type int. For example, to_int(3.9) is 3, and to_int(-3.9) is -3.

      +

      This is similar to trunc (see Rounding functions) but the return type is of type int. For example, to_int(3.9) is 3, and to_int(-3.9) is -3.

      Available since 2.31

      @@ -646,25 +649,6 @@

      Casting functions

      Back to top - - + + - + + - + @@ -214,6 +216,7 @@
      +
      @@ -550,25 +553,6 @@

      Digamma

      Back to top - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -214,6 +216,7 @@
      +
      @@ -750,25 +753,6 @@

      Mixed Operations

      Back to top - - + + - + + - + @@ -214,6 +216,7 @@
      +
      @@ -645,25 +648,6 @@

      Stan functions

      Back to top - - + + - + + - + @@ -214,6 +216,7 @@
      +
      @@ -1070,25 +1073,6 @@

      Stan functions

      Back to top - - + + - + + - + @@ -234,6 +236,7 @@
      - - + + - + + - + @@ -268,6 +270,7 @@
      - - + + - + + - + @@ -183,6 +185,7 @@
      +
      @@ -218,25 +221,6 @@

      Re Back to top - - + + - + + - + @@ -214,6 +216,7 @@
      +
      @@ -581,25 +584,6 @@

      Back to top - - + + - + + - + @@ -248,6 +250,7 @@
      +
      @@ -628,25 +631,6 @@

      Stan functions

      Back to top - - + + - + + - + @@ -214,6 +216,7 @@
      +
      @@ -589,25 +592,6 @@

      Sparse matrix Back to top - - + + - + + - + @@ -234,6 +236,7 @@

      - - + + - + + - + @@ -234,6 +236,7 @@
      - - + + - + + - + @@ -185,6 +187,7 @@
      +
      @@ -511,25 +514,6 @@

      Reject statement

      Back to top - - + + - + + - + @@ -184,6 +186,7 @@
      +
      @@ -230,7 +233,7 @@

      Stan Documentation

      -

      This is the official documentation for Stan.

      +

      This is the official documentation for Stan.

      • The Stan User’s Guide (pdf) provides example models and programming techniques for coding statistical models in Stan.

      • The Stan Reference Manual (pdf) specifies the Stan programming language and inference algorithms.

      • @@ -256,25 +259,6 @@

        Licensing

        Back to top - - + + - + + - + @@ -234,6 +236,7 @@
        + - - + + - + + - + @@ -268,6 +270,7 @@
        + -

        In this example, y[N] is a modeled data vector. Although it is specified in the data block, and thus must have a known value before the program may be run, it is modeled as if it were generated randomly as described by the model.

        +

        In this example, y is an array of modeled data. Although it is specified in the data block, and thus must have a known value before the program may be run, it is modeled as if it were generated randomly as described by the model.

        The variable N is a typical example of unmodeled data. It is used to indicate a size that is not part of the model itself.

        The other variables declared in the data and transformed data block are examples of unmodeled parameters, also known as hyperparameters. Unmodeled parameters are parameters to probability densities that are not themselves modeled probabilistically. In Stan, unmodeled parameters that appear in the data block may be specified on a per-model execution basis as part of the data read. In the above model, mu_mu and sigma_mu are configurable unmodeled parameters.

        Unmodeled parameters that are hard coded in the model must be declared in the transformed data block. For example, the unmodeled parameters alpha and beta are both hard coded to the value 0.1. To allow such variables to be configurable based on data supplied to the program at run time, they must be declared in the data block, like the variables mu_mu and sigma_mu.

        @@ -934,25 +937,6 @@

        Program
      • With multiple threads, or even running chains sequentially in a single thread, data could be read only once per set of chains. Stan was designed to be thread safe and future versions will provide a multithreading option for Markov chains.↩︎

      • - - + + - + + - + @@ -219,6 +221,7 @@
        +
        @@ -469,25 +472,6 @@

        Bracketed comments

        Back to top - - + + - + + - + @@ -219,6 +221,7 @@
        +
        @@ -452,7 +455,7 @@

        On this page

        Deprecated Features

        This appendix lists currently deprecated functionality along with how to replace it.

        -

        Starting with Stan 2.29, minor (syntax-level) deprecations can be removed 3 versions after release; e.g., syntax deprecated in Stan 2.20 will be removed in Stan 2.23 and placed in [Removed Features]. The Stan compiler can automatically update many of these on the behalf of the user for at least one version after they are removed.

        +

        Starting with Stan 2.29, minor (syntax-level) deprecations can be removed 3 versions after release; e.g., syntax deprecated in Stan 2.20 will be removed in Stan 2.23 and placed in Removed Features. The Stan compiler can automatically update many of these on the behalf of the user for at least one version after they are removed.

        Any feature which changes semantic meaning (such as the upgraded ODE solver interface) will not be removed until a major version change (e.g., Stan 3.0).

        lkj_cov distribution

        @@ -482,25 +485,6 @@

        Deprecated Functions<

        Back to top - - + + - + + - + @@ -214,6 +216,7 @@

        Includes Jacobian

        -

        The log density includes the Jacobian adjustment implied by the constraints declared on variables. The Jacobian adjustment for constrained parameter transforms will be turned off if optimization is used in practice, but there is as of yet no way to turn it off in diagnostic mode.

        +

        The log density includes the Jacobian adjustment implied by the constraints declared on variables. The Jacobian adjustment for constrained parameter transforms may be turned off for optimization, but there is as of yet no way to turn it off in diagnostic mode.

        @@ -510,25 +513,6 @@

        Speed warn

        Back to top - - + + - + + - + @@ -185,6 +187,7 @@
        +
        @@ -444,25 +447,6 @@

        String literals

        Back to top - - + + - + + - + @@ -268,6 +270,7 @@
        + - - + + - + + - + @@ -268,6 +270,7 @@
        + - - + + - + + - + @@ -219,6 +221,7 @@
        +
        @@ -501,11 +504,21 @@

        Comment

        Recursive includes

        -

        Recursive includes will be ignored. For example, suppose a.stan contains

        +

        Recursive includes will lead to a compiler error. For example, suppose a.stan contains

        #include b.stan

        and b.stan contains

        #include a.stan
        -

        The result of processing this file will be empty, because a.stan will include b.stan, from which the include of a.stan is ignored and a warning printed.

        +

        This will result in an error explaining the circular dependency:

        +
        Syntax error in './b.stan', line 1, column 0, included from
        +'./a.stan', line 1, column 0, included from
        +'./b.stan', line 1, column 0, included from
        +'a.stan', line 1, column 0, include error:
        +   -------------------------------------------------
        +     1:  #include a.stan
        +         ^
        +   -------------------------------------------------
        +
        +File a.stan recursively included itself.

        Include paths

        @@ -520,25 +533,6 @@

        Slashe

        Back to top - - + + - + + - + @@ -184,6 +186,7 @@
        +
        @@ -421,7 +424,7 @@

        Stan Reference Manual

        -

        This is the official reference manual for Stan’s programming language for coding probability models, inference algorithms for fitting models and making predictions, and posterior analysis tools for evaluating the results. This manual applies to all Stan interfaces.

        +

        This is the official reference manual for Stan’s programming language for coding probability models, inference algorithms for fitting models and making predictions, and posterior analysis tools for evaluating the results. This manual applies to all Stan interfaces.

        The first part of the reference manual provides a full specification of the Stan programming language. The language is responsible for defining a log density function conditioned on data. Typically, this is a Bayesian posterior, but it may also be a penalized likelihood function. The second part of the manual specifies the inference algorithms and posterior inference tools. The third part provides auxiliary information about the use of Stan.

        Download the pdf version of this manual.

        Back to top - - + + - + + - + @@ -214,6 +216,7 @@
        +
        @@ -456,25 +459,6 @@

        Laplace Approximation

        Back to top - - + + - + + - + @@ -184,6 +186,7 @@

    @@ -454,6 +458,14 @@

    SUNDIALS license

    The copyright of SUNDIALS is owned by Lawrence Livermore National Security Lab.

    +
    +

    Threaded Building Blocks (TBB) License

    +

    Stan uses the Threaded Building Blocks (TBB) library for parallel computations. TBB is distributed under the

    + +

    The copyright of TBB is owned by Intel Corporation.

    +

    Google test license

    Stan uses Google Test for unit testing; it is not required to compile or execute models. Google Test is distributed under the

    @@ -473,25 +485,6 @@

    Google test license

    Universities or companies often own the copyright of computer programs developed by their employees.↩︎

    - - + + - + + - + @@ -268,6 +270,7 @@
    + - - + + - + + - + @@ -268,6 +270,7 @@
    +
    @@ -591,25 +594,6 @@

    - -// replace cmd keyboard shortcut w/ control on non-Mac platforms -const kPlatformMac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false; -if (!kPlatformMac) { - var kbds = document.querySelectorAll("kbd") - kbds.forEach(function(kbd) { - kbd.innerHTML = kbd.innerHTML.replace(/⌘/g, '⌃'); - }); -} - -// tweak headings in pymd -document.querySelectorAll(".pymd span.co").forEach(el => { - if (!el.innerText.startsWith("#|")) { - el.style.fontWeight = 1000; - } -}); - - - + + - + + - + @@ -205,6 +207,7 @@

    - - + + - + + - + @@ -183,6 +185,7 @@
    +
    @@ -218,25 +221,6 @@

    Re Back to top - - + + - + + - + @@ -219,6 +221,7 @@
    +
    @@ -581,25 +584,6 @@

    Real values in Back to top - - + + - + + - + @@ -205,6 +207,7 @@

    - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -562,10 +565,11 @@

    Promotion

    Lvalue summary

    -

    The expressions that are legal left-hand sides of assignment statements are known as “lvalues.” In Stan, there are only two kinds of legal lvalues,

    +

    The expressions that are legal left-hand sides of assignment statements are known as “lvalues.” In Stan, there are three kinds of legal lvalues,

    • a variable, or
    • -
    • a variable with one or more indices.
    • +
    • a variable with one or more indices, or
    • +
    • a comma separated list of lvalues surrounded by ( and )

    To be used as an lvalue, an indexed variable must have at least as many dimensions as the number of indices provided. An array of real or integer types has as many dimensions as it is declared for. A matrix has two dimensions and a vector or row vector one dimension; this also holds for the constrained types, covariance and correlation matrices and their Cholesky factors and ordered, positive ordered, and simplex vectors. An array of matrices has two more dimensions than the array and an array of vectors or row vectors has one more dimension than the array. Note that the number of indices can be less than the number of dimensions of the variable, meaning that the right hand side must itself be multidimensional to match the remaining dimensions.

    @@ -1061,21 +1065,20 @@

    Loc

    No constraints on local variables

    -

    Local variables may not have constraints on their declaration. The only types that may be used are

    -
    int, real, vector[K], row_vector[K], matrix[M, N].
    +

    Local variables may not have constraints on their declaration. The only types that may be used are listed in the types table under “local”.

    Blocks within blocks

    A block is itself a statement, so anywhere a sequence of statements is allowed, one or more of the statements may be a block. For instance, in a for loop, it is legal to have the following

    -
    for (m in 1:M) {
    -  {
    -     int n = 2 * m;
    -     sum += n;
    -  }
    -  for (n in 1:N) {
    -    sum += x[m, n];
    -  }
    -}
    +
    for (m in 1:M) {
    +  {
    +     int n = 2 * m;
    +     sum += n;
    +  }
    +  for (n in 1:N) {
    +    sum += x[m, n];
    +  }
    +}

    The variable declaration int n; is the first element of an embedded block and so has scope within that block. The for loop defines its own local block implicitly over the statement following it in which the loop variable is defined. As far as Stan is concerned, these two uses of n are unrelated.

    @@ -1086,56 +1089,56 @@

    Break and contin

    Break statements

    When a break statement is executed, the most deeply nested loop currently being executed is ended and execution picks up with the next statement after the loop. For example, consider the following program:

    -
    while (1) {
    -  if (n < 0) {
    -    break;
    -  }
    -  foo(n);
    -  n = n - 1;
    -}
    +
    while (1) {
    +  if (n < 0) {
    +    break;
    +  }
    +  foo(n);
    +  n = n - 1;
    +}

    The while~(1) loop is a “forever” loop, because 1 is the true value, so the test always succeeds. Within the loop, if the value of n is less than 0, the loop terminates, otherwise it executes foo(n) and then decrements n. The statement above does exactly the same thing as

    -
    while (n >= 0) {
    -  foo(n);
    -  n = n - 1;
    -}
    +
    while (n >= 0) {
    +  foo(n);
    +  n = n - 1;
    +}

    This case is simply illustrative of the behavior; it is not a case where a break simplifies the loop.

    Continue statements

    The continue statement ends the current operation of the loop and returns to the condition at the top of the loop. Such loops are typically used to exclude some values from calculations. For example, we could use the following loop to sum the positive values in the array x,

    +
    real sum;
    +sum = 0;
    +for (n in 1:size(x)) {
    +  if (x[n] <= 0) {
    +    continue;
    +  }
    +  sum += x[n];
    +}
    +

    When the continue statement is executed, control jumps back to the conditional part of the loop. With while and for loops, this causes control to return to the conditional of the loop. With for loops, this advances the loop variable, so the the above program will not go into an infinite loop when faced with an x[n] less than zero. Thus the above program could be rewritten with deeper nesting by reversing the conditional,

    real sum;
     sum = 0;
     for (n in 1:size(x)) {
    -  if (x[n] <= 0) {
    -    continue;
    +  if (x[n] > 0) {
    +    sum += x[n];
       }
    -  sum += x[n];
    -}
    -

    When the continue statement is executed, control jumps back to the conditional part of the loop. With while and for loops, this causes control to return to the conditional of the loop. With for loops, this advances the loop variable, so the the above program will not go into an infinite loop when faced with an x[n] less than zero. Thus the above program could be rewritten with deeper nesting by reversing the conditional,

    -
    real sum;
    -sum = 0;
    -for (n in 1:size(x)) {
    -  if (x[n] > 0) {
    -    sum += x[n];
    -  }
    -}
    +}

    While the latter form may seem more readable in this simple case, the former has the main line of execution nested one level less deep. Instead, the conditional at the top finds cases to exclude and doesn’t require the same level of nesting for code that’s not excluded. When there are several such exclusion conditions, the break or continue versions tend to be much easier to read.

    Breaking and continuing nested loops

    If there is a loop nested within a loop, a break or continue statement only breaks out of the inner loop. So

    -
    while (cond1) {
    -  // ...
    -  while (cond2) {
    -    // ...
    -    if (cond3) {
    -      break;
    -    }
    -    // ...
    -  }
    -  // execution continues here after break
    -  // ...
    -}
    +
    while (cond1) {
    +  // ...
    +  while (cond2) {
    +    // ...
    +    if (cond3) {
    +      break;
    +    }
    +    // ...
    +  }
    +  // execution continues here after break
    +  // ...
    +}

    If the break is triggered by cond3 being true, execution will continue after the nested loop.

    As with break statements, continue statements go back to the top of the most deeply nested loop in which the continue appears.

    Although break and continue must appear within loops, they may appear in nested statements within loops, such as within the conditionals shown above or within nested statements. The break and continue statements jump past any control structure other than while-loops and for-loops.

    @@ -1144,32 +1147,32 @@

    Print statements

    Stan provides print statements that can print literal strings and the values of expressions. Print statements accept any number of arguments. Consider the following for-each statement with a print statement in its body.

    -
    for (n in 1:N) { print("loop iteration: ", n); ... }
    +
    for (n in 1:N) { print("loop iteration: ", n); ... }

    The print statement will execute every time the body of the loop does. Each time the loop body is executed, it will print the string “loop iteration:” (with the trailing space), followed by the value of the expression n, followed by a new line.

    Non-void input

    @@ -1188,12 +1191,13 @@

    String literals

    Debug by print

    Because Stan is an imperative language, print statements can be very useful for debugging. They can be used to display the values of variables or expressions at various points in the execution of a program. They are particularly useful for spotting problematic not-a-number of infinite values, both of which will be printed.

    It is particularly useful to print the value of the target log density accumulator (through the target() function), as in the following example.

    -
    vector[2] y;
    -y[1] = 1;
    -print("log density before =", target());
    -y ~ normal(0,1);  // bug!  y[2] not defined
    -print("log density after =", target());
    +
    vector[2] y;
    +y[1] = 1;
    +print("log density before =", target());
    +y ~ normal(0,1);  // bug!  y[2] not defined
    +print("log density after =", target());

    The example has a bug in that y[2] is not defined before the vector y is used in the sampling statement. By printing the value of the log probability accumulator before and after each sampling statement, it’s possible to isolate where the log probability becomes ill-defined (i.e., becomes not-a-number).

    +

    Note that print statements may not always be displayed immediately, but rather at the end of an operation (e.g., leapfrog step). As such, some issues such as infinite loops are difficult to debug effectively with this technique.

    @@ -1201,9 +1205,9 @@

    Reject statement

    The Stan reject statement provides a mechanism to report errors or problematic values encountered during program execution and either halt processing or reject iterations.

    Like the print statement, the reject statement accepts any number of quoted string literals or Stan expressions as arguments.

    Reject statements are typically embedded in a conditional statement in order to detect variables in illegal states. For example, the following code handles the case where a variable x’s value is negative.

    -
    if (x < 0) {
    -  reject("x must not be negative; found x=", x);
    -}
    +
    if (x < 0) {
    +  reject("x must not be negative; found x=", x);
    +}

    Behavior of reject statements

    Reject statements have the same behavior as exceptions thrown by built-in Stan functions. For example, the normal_lpdf function raises an exception if the input scale is not positive and finite. The effect of a reject statement depends on the program block in which the rejection occurs.

    @@ -1226,26 +1230,26 @@

    Rejection is not for constraints

    Rejection should be used for error handling, not defining arbitrary constraints. Consider the following errorful Stan program.

    -
    parameters {
    -  real a;
    -  real<lower=a> b;
    -  real<lower=a, upper=b> theta;
    -  // ...
    -}
    -model {
    -  // **wrong** needs explicit truncation
    -  theta ~ normal(0, 1);
    -  // ...
    -}
    +
    parameters {
    +  real a;
    +  real<lower=a> b;
    +  real<lower=a, upper=b> theta;
    +  // ...
    +}
    +model {
    +  // **wrong** needs explicit truncation
    +  theta ~ normal(0, 1);
    +  // ...
    +}

    This program is wrong because its truncation bounds on theta depend on parameters, and thus need to be accounted for using an explicit truncation on the distribution. This is the right way to do it.

    -
      theta ~ normal(0, 1) T[a, b];
    +
      theta ~ normal(0, 1) T[a, b];

    The conceptual issue is that the prior does not integrate to one over the admissible parameter space; it integrates to one over all real numbers and integrates to something less than one over \([a ,b]\); in these simple univariate cases, we can overcome that with the T[ , ] notation, which essentially divides by whatever the prior integrates to over \([a, b]\).

    This problem is exactly the same problem as you would get using reject statements to enforce complicated inequalities on multivariate functions. In this case, it is wrong to try to deal with truncation through constraints.

    -
      if (theta < a || theta > b) {
    -    reject("theta not in (a, b)");
    -  }
    -  // still **wrong**, needs T[a,b]
    -  theta ~ normal(0, 1);
    +
      if (theta < a || theta > b) {
    +    reject("theta not in (a, b)");
    +  }
    +  // still **wrong**, needs T[a,b]
    +  theta ~ normal(0, 1);

    In this case, the prior integrates to something less than one over the region of the parameter space where the complicated inequalities are satisfied. But we don’t generally know what value the prior integrates to, so we can’t increment the log probability function to compensate.

    Even if this adjustment to a proper probability model may seem minor in particular models where the amount of truncated posterior density is negligible or constant, we can’t sample from that truncated posterior efficiently. Programs need to use one-to-one mappings that guarantee the constraints are satisfied and only use reject statements to raise errors or help with debugging.

    @@ -1265,25 +1269,6 @@

    The adjoint component is always zero during execution for the algorithmic differentiation variables used to implement parameters, transformed parameters, and local variables in the model.↩︎

    - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -842,7 +845,7 @@

    Pro

    Indexes

    Standalone expressions used as indexes must denote either an integer (int) or an integer array (array[] int). Expressions participating in range indexes (e.g., a and b in a : b) must denote integers (int).

    -

    A second condition is that there not be more indexes provided than dimensions of the underlying expression (in general) or variable (on the left side of assignments) being indexed. A vector or row vector adds 1 to the array dimension and a matrix adds 2. That is, the type matrix[ , , ], a three-dimensional array of matrices, has five index positions: three for the array, one for the row of the matrix and one for the column.

    +

    A second condition is that there not be more indexes provided than dimensions of the underlying expression (in general) or variable (on the left side of assignments) being indexed. A vector or row vector adds 1 to the array dimension and a matrix adds 2. That is, the type array[ , , ] matrix, a three-dimensional array of matrices, has five index positions: three for the array, one for the row of the matrix and one for the column.

    @@ -850,25 +853,6 @@

    Indexes

    Back to top - - + + - + + - + @@ -234,6 +236,7 @@
    + - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -600,7 +603,7 @@

    Array types

    array[6, 7] matrix[3, 3] m; array[12, 8, 15] complex z;

    declares x to be a one-dimensional array of size 10 containing real values, declares m to be a two-dimensional array of size \(6 \times 7\) containing values that are \(3 \times 3\) matrices, and declares z to be a \(12 \times 8 \times 15\) array of complex numbers.

    -

    Prior to 2.26 Stan models used a different syntax which has since been removed. See the [Removed Features] chapter for more details.

    +

    Prior to 2.26 Stan models used a different syntax which has since been removed. See the Removed Features chapter for more details.

    Tuple types

    @@ -630,8 +633,8 @@

    Primitive numerical d

    Integers

    Stan uses 32-bit (4-byte) integers for all of its integer representations. The maximum value that can be represented as an integer is \(2^{31}-1\); the minimum value is \(-(2^{31})\).

    -

    When integers overflow, their values wrap. Thus it is up to the Stan programmer to make sure the integer values in their programs stay in range. In particular, every intermediate expression must have an integer value that is in range.

    -

    Integer arithmetic works in the expected way for addition, subtraction, and multiplication, but rounds the result of division (see the Stan Functions Reference integer-valued arithmetic operators section for more information).

    +

    When integers overflow, their value is determined by the underlying architecture. On most, their values wrap, but this cannot be guaranteed. Thus it is up to the Stan programmer to make sure the integer values in their programs stay in range. In particular, every intermediate expression must have an integer value that is in range.

    +

    Integer arithmetic works in the expected way for addition, subtraction, and multiplication, but truncates the result of division (see the Stan Functions Reference integer-valued arithmetic operators section for more information).

    Reals

    @@ -721,7 +724,7 @@

    Constrained re
    real<lower=-1, upper=1> rho;

    Infinite constraints

    -

    Lower bounds that are negative infinity or upper bounds that are positive infinity are ignored. Stan provides constants positive_infinity() and negative_infinity() which may be used for this purpose, or they may be read as data in the dump format.

    +

    Lower bounds that are negative infinity or upper bounds that are positive infinity are ignored. Stan provides constants positive_infinity() and negative_infinity() which may be used for this purpose, or they may be supplied as data.

    @@ -1621,25 +1624,6 @@

    C
  • Stan compiles integers to int and reals to double types in C++. Precise details of rounding will depend on the compiler and hardware architecture on which the code is run.↩︎

  • - - + + - + + - + @@ -219,6 +221,7 @@
    +
    @@ -657,6 +660,7 @@

    Retur
  • a for loop or while loop qualifies if its body qualifies, and
  • a conditional statement qualifies if it has a default else clause and all of its body statements qualify.
  • +

    An exception is made for “obviously infinite” loops like while (1), which contain a return statement and no break statements. The only way to exit such a loop is to return, so they are considered as returning statements.

    These rules disqualify

    real foo(real x) {
       if (x > 2) {
    @@ -727,25 +731,6 @@ 

    Declarations<
  • Despite being declared constant and appearing to have a pass-by-value syntax in Stan, the implementation of the language passes function arguments by constant reference in C++.↩︎

  • - - + + - + + - + @@ -234,6 +236,7 @@

    - - + + - + + - + @@ -185,6 +187,7 @@
    +
    @@ -437,25 +440,6 @@

    Whitespace location Back to top - - + + - + + - + @@ -268,6 +270,7 @@

    - - + + - + + - + @@ -268,6 +270,7 @@
    - - + + - + + - + @@ -268,6 +270,7 @@
    + - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -716,25 +719,6 @@

    Depende Back to top - - + + - + + - + @@ -268,6 +270,7 @@
    + - - + + - + + - + @@ -248,6 +250,7 @@
    + - - + + - + + - + @@ -268,6 +270,7 @@
    - - + + - + + - + @@ -268,6 +270,7 @@
    - - + + - + + - + @@ -268,6 +270,7 @@
    + - - + + - + + - + @@ -268,6 +270,7 @@
    + - - + + - + + - + @@ -214,6 +216,7 @@
    + - - + + - + + - + @@ -267,6 +269,7 @@
    + - - + + - + + - + @@ -268,6 +270,7 @@
    + - - + + - + + - + @@ -268,6 +270,7 @@
    - - + + - + + - + @@ -184,6 +186,7 @@
    +
    @@ -516,7 +519,7 @@

    Stan User’s Guide

    -

    This is the official user’s guide for Stan. It provides example models and programming techniques for coding statistical models in Stan.

    +

    This is the official user’s guide for Stan. It provides example models and programming techniques for coding statistical models in Stan.

    • Part 1 gives Stan code and discussions for several important classes of models.

    • Part 2 discusses various general Stan programming techniques that are not tied to any particular model.

    • @@ -544,25 +547,6 @@

      Licensing

      Back to top - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -248,6 +250,7 @@
      +
      @@ -802,25 +805,6 @@

      Aliasing in St Back to top - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -248,6 +250,7 @@
      +
      @@ -826,25 +829,6 @@

      Mat Back to top - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -268,6 +270,7 @@
      - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -248,6 +250,7 @@
      +
      @@ -842,25 +845,6 @@

      Back to top - - + + - + + @@ -156,7 +158,7 @@ }; - + @@ -271,6 +273,7 @@
      +
      @@ -586,7 +589,7 @@

      On this page

      • Simulating from the posterior predictive distribution
      • Plotting multiples
      • -
      • Posterior ``p-values’’ +
      • Posterior ‘’p-values’’
      • @@ -679,7 +682,7 @@

        Plotting multiples

        Now consider generating data \(y \sim \textrm{Poisson}(5)\). The resulting small multiples plot shows the original data plotted in the upper left and eight different posterior replications plotted in the remaining boxes.

        -

        Posterior predictive checks for Poisson data generating process and Poisson model.

        +

        Posterior predictive checks for Poisson data generating process and Poisson model.

        Posterior predictive checks for Poisson data generating process and Poisson model.
        @@ -687,14 +690,14 @@

        Plotting multiples

        Now consider generating over-dispersed data \(y \sim \textrm{negative-binomial2}(5, 1).\) This has the same mean as \(\textrm{Poisson}(5)\), namely \(5\), but a standard deviation of \(\sqrt{5 + 5^2 /1} \approx 5.5.\) There is no way to fit this data with the Poisson model, because a variable distributed as \(\textrm{Poisson}(\lambda)\) has mean \(\lambda\) and standard deviation \(\sqrt{\lambda},\) which is \(\sqrt{5}\) for \(\textrm{Poisson}(5).\) Here’s the resulting small multiples plot, again with original data in the upper left.

        -

        Posterior predictive checks for negative binomial data generating process and Poisson model.

        +

        Posterior predictive checks for negative binomial data generating process and Poisson model.

        Posterior predictive checks for negative binomial data generating process and Poisson model.

        This time, the original data stands out in stark contrast to the replicated data sets, all of which are clearly more symmetric and lower variance than the original data. That is, the model’s not appropriately capturing the variance of the data.

        -

        Posterior ``p-values’’

        +

        Posterior ‘’p-values’’

        If a model captures the data well, summary statistics such as sample mean and standard deviation, should have similar values in the original and replicated data sets. This can be tested by means of a p-value-like statistic, which here is just the probability the test statistic \(s(\cdot)\) in a replicated data set exceeds that in the original data, \[ \Pr\!\left[ s(y^{\textrm{rep}}) \geq s(y) \mid y \right] = @@ -702,7 +705,7 @@

        Posterior ``p-values’ \textrm{I}\left( s(y^{\textrm{rep}}) \geq s(y) \mid y \right) \cdot p\left( y^{\textrm{rep}} \mid y \right) \, \textrm{d}{y^{\textrm{rep}}}. -\] It is important to note that``p-values’’ is in quotes because these statistics are not classically calibrated, and thus will not in general have a uniform distribution even when the model is well specified (Bayarri and Berger 2000).

        +\] It is important to note that ‘’p-values’’ is in quotes because these statistics are not classically calibrated, and thus will not in general have a uniform distribution even when the model is well specified (Bayarri and Berger 2000).

        Nevertheless, values of this statistic very close to zero or one are cause for concern that the model is not fitting the data well. Unlike a visual test, this p-value-like test is easily automated for bulk model fitting.

        To calculate event probabilities in Stan, it suffices to define indicator variables that take on value 1 if the event occurs and 0 if it does not. The posterior mean is then the event probability. For efficiency, indicator variables are defined in the generated quantities block.

        generated quantities {
        @@ -718,7 +721,7 @@ 

        Posterior ``p-values’

        For the example in the previous section, where over-dispersed data generated by a negative binomial distribution was fit with a simple Poisson model, the following plot illustrates the posterior p-value calculation for the mean statistic.

        -

        Histogram of means of replicated data sets; vertical red line at mean of original data.

        +

        Histogram of means of replicated data sets; vertical red line at mean of original data.

        Histogram of means of replicated data sets; vertical red line at mean of original data.
        @@ -726,7 +729,7 @@

        Posterior ``p-values’

        The standard deviation statistic tells a different story.

        -

        Scatterplot of standard deviations of replicated data sets; the vertical red line is at standard deviation of original data.

        +

        Scatterplot of standard deviations of replicated data sets; the vertical red line is at standard deviation of original data.

        Scatterplot of standard deviations of replicated data sets; the vertical red line is at standard deviation of original data.
        @@ -933,25 +936,6 @@

        - -// replace cmd keyboard shortcut w/ control on non-Mac platforms -const kPlatformMac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false; -if (!kPlatformMac) { - var kbds = document.querySelectorAll("kbd") - kbds.forEach(function(kbd) { - kbd.innerHTML = kbd.innerHTML.replace(/⌘/g, '⌃'); - }); -} - -// tweak headings in pymd -document.querySelectorAll(".pymd span.co").forEach(el => { - if (!el.innerText.startsWith("#|")) { - el.style.fontWeight = 1000; - } -}); - - - + + - + + - + @@ -268,6 +270,7 @@

      - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -248,6 +250,7 @@
      +
      @@ -665,25 +668,6 @@

      Back to top - - + + - + + - + @@ -183,6 +185,7 @@
      +
      @@ -218,25 +221,6 @@

      Re Back to top - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -268,6 +270,7 @@
      - - + + - + + - + @@ -268,6 +270,7 @@
      - - + + - + + - + @@ -248,6 +250,7 @@
      + - - + + - + + - + @@ -268,6 +270,7 @@
      +
      @@ -1030,25 +1033,6 @@

      - -// replace cmd keyboard shortcut w/ control on non-Mac platforms -const kPlatformMac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false; -if (!kPlatformMac) { - var kbds = document.querySelectorAll("kbd") - kbds.forEach(function(kbd) { - kbd.innerHTML = kbd.innerHTML.replace(/⌘/g, '⌃'); - }); -} - -// tweak headings in pymd -document.querySelectorAll(".pymd span.co").forEach(el => { - if (!el.innerText.startsWith("#|")) { - el.style.fontWeight = 1000; - } -}); - - - + + - + + - + @@ -268,6 +270,7 @@
      + - - + + - + + - + @@ -248,6 +250,7 @@
      +
      @@ -720,25 +723,6 @@

      Back to top - - + + - + + - + @@ -248,6 +250,7 @@
      + - - + + - + + - + @@ -219,6 +221,7 @@
      +
      @@ -943,7 +946,7 @@

      Nonlinear transformations

      -

      When a parameter is transformed in a non-linear fashion, an adjustment must be applied to account for distortion caused by the transform. This is discussed in depth in the [Changes of variables] section.

      +

      When a parameter is transformed in a non-linear fashion, an adjustment must be applied to account for distortion caused by the transform. This is discussed in depth in the Changes of variables section.

      This portion of pedantic mode tries to detect instances where such an adjustment would be necessary and remind the user.

      For example, consider the following program.

      parameters {
      @@ -979,7 +982,7 @@ 

      Automatic updating a

      These flags work for both .stan model files and .stanfunctions function files. They can be combined with --o to redirect the formatted output to a new file.

      Automatic formatting

      -

      Invoking stanc --auto-format <model_file> will print a version of your model which has been re-formatted. The goal is to have this automatic formatting stay as close as possible to the [Stan Program Style Guide]. This means spacing, indentation, and line length are all regularized. Some deprecated features, like the use of # for line comments, are replaced, but the goal is mainly to preserve the program while formatting it.

      +

      Invoking stanc --auto-format <model_file> will print a version of your model which has been re-formatted. The goal is to have this automatic formatting stay as close as possible to the Stan Program Style Guide. This means spacing, indentation, and line length are all regularized. Some deprecated features, like the use of # for line comments, are replaced, but the goal is mainly to preserve the program while formatting it.

      By default, this will try to split lines at or before column 78. This number can be changed using --max-line-length.

      @@ -1386,25 +1389,6 @@

      Static lo

      Back to top - - + + - + + - + @@ -217,6 +219,7 @@
      +
      @@ -266,25 +269,6 @@

      Page Not Found

      Back to top - - + + - + + - + @@ -183,6 +185,7 @@
      +
      @@ -218,25 +221,6 @@

      Re Back to top - - + - + + - + + - + @@ -214,6 +216,7 @@

    @@ -311,7 +290,7 @@
    - - @@ -563,25 +536,6 @@

    Error mess Back to top -

    @@ -440,46 +451,101 @@

    On this page

    -
    -

    Standalone Generate Quantities

    -

    The generate_quantities method allows you to generate additional quantities of interest from a fitted model without re-running the sampler. For an overview of the uses of this feature, see the QuickStart Guide section and the Stan User’s Guide section on Stand-alone generated quantities and ongoing prediction.

    -

    This method requires sub-argument fitted_params which takes as its value an existing Stan CSV file that contains a sample from an equivalent model, i.e., a model with the same parameters, transformed parameters, and model blocks, conditioned on the same data.

    +
    +

    Generating Quantities of Interest from a Fitted Model

    +

    The generate_quantities method allows you to generate additional quantities of interest from a fitted model without re-running the sampler. Instead, you write a modified version of the original Stan program and add a generated quantities block or modify the existing one which specifies how to compute the new quantities of interest. Running the generate_quantities method on the new program together with sampler outputs (i.e., a set of draws) from the fitted model runs the generated quantities block of the new program using the the existing sample by plugging in the per-draw parameter estimates for the computations in the generated quantities block.

    +

    This method requires sub-argument fitted_params which takes as its value an existing Stan CSV file that contains a parameter values from an equivalent model, i.e., a model with the same parameters block, conditioned on the same data.

    +

    The generated quantities block computes quantities of interest (QOIs) based on the data, transformed data, parameters, and transformed parameters. It can be used to:

    +
      +
    • generate simulated data for model testing by forward sampling
    • +
    • generate predictions for new data
    • +
    • calculate posterior event probabilities, including multiple comparisons, sign tests, etc.
    • +
    • calculate posterior expectations
    • +
    • transform parameters for reporting
    • +
    • apply full Bayesian decision theory
    • +
    • calculate log likelihoods, deviances, etc. for model comparison
    • +
    +

    For an overview of the uses of this feature, see the Stan User’s Guide section on Stand-alone generated quantities and ongoing prediction.

    +
    +

    Example

    +

    To illustrate how this works we use the generate_quantities method to do posterior predictive checks using the estimate of theta given the example bernoulli model and data, following the posterior predictive simulation procedure in the Stan User’s Guide.

    +

    We write a program bernoulli_ppc.stan which contains the following generated quantities block, with comments to explain the procedure:

    +
    generated quantities {
    +  array[N] int y_sim;
    +  // use current estimate of theta to generate new sample
    +  for (n in 1:N) {
    +    y_sim[n] = bernoulli_rng(theta);
    +  }
    +  // estimate theta_rep from new sample
    +  real<lower=0, upper=1> theta_rep = sum(y_sim) * 1.0 / N;
    +}
    +

    The rest of the program is the same as in bernoulli.stan.

    +

    The generate_method requires the sub-argument fitted_params which takes as its value the name of a Stan CSV file. The per-draw parameter values from the fitted_params file will be used to run the generated quantities block.

    If we run the bernoulli.stan program for a single chain to generate a sample in file bernoulli_fit.csv:

    > ./bernoulli sample data file=bernoulli.data.json output file=bernoulli_fit.csv

    Then we can run the bernoulli_ppc.stan to carry out the posterior predictive checks:

    > ./bernoulli_ppc generate_quantities fitted_params=bernoulli_fit.csv \
                       data file=bernoulli.data.json \
                       output file=bernoulli_ppc.csv
    -

    The fitted_params file must be a Stan CSV file; attempts to use a regular CSV file will result an error message of the form:

    +

    The output file bernoulli_ppc.csv contains only the values for the variables declared in the generated quantities block, i.e., theta_rep and the elements of y_sim:

    +
    # model = bernoulli_ppc_model
    +# method = generate_quantities
    +#   generate_quantities
    +#     fitted_params = bernoulli_fit.csv
    +# id = 1 (Default)
    +# data
    +#   file = bernoulli.data.json
    +# init = 2 (Default)
    +# random
    +#   seed = 2983956445 (Default)
    +# output
    +#   file = output.csv (Default)
    +y_sim.1,y_sim.2,y_sim.3,y_sim.4,y_sim.5,y_sim.6,y_sim.7,y_sim.8,y_sim.9,y_sim.10,theta_rep
    +1,1,1,0,0,0,1,1,0,1,0.6
    +1,1,0,1,0,0,1,0,1,0,0.5
    +1,0,1,1,1,1,1,1,0,1,0.8
    +0,1,0,1,0,1,0,1,0,0,0.4
    +1,0,0,0,0,0,0,0,0,0,0.1
    +0,0,0,0,0,1,1,1,0,0,0.3
    +0,0,1,0,1,0,0,0,0,0,0.2
    +1,0,1,0,1,1,0,1,1,0,0.6
    +...
    +

    Given the current implementation, to see the fitted parameter values for each draw, create a copy variable in the generated quantities block, e.g.:

    +
    generated quantities {
    +  array[N] int y_sim;
    +  // use current estimate of theta to generate new sample
    +  for (n in 1:N) {
    +    y_sim[n] = bernoulli_rng(theta);
    +  }
    +  real<lower=0, upper=1> theta_cp = theta;
    +  // estimate theta_rep from new sample
    +  real<lower=0, upper=1> theta_rep = sum(y_sim) * 1.0 / N;
    +}
    +

    Now the output is slightly more interpretable: theta_cp is the same as the theta used to generate the values y_sim[1] through y_sim[1]. Comparing columns theta_cp and theta_rep allows us to see how the uncertainty in our estimate of theta is carried forward into our predictions:

    +
    y_sim.1,y_sim.2,y_sim.3,y_sim.4,y_sim.5,y_sim.6,y_sim.7,y_sim.8,y_sim.9,y_sim.10,theta_cp,theta_rep
    +0,1,1,0,1,0,0,1,1,0,0.545679,0.5
    +1,1,1,1,1,1,0,1,1,0,0.527164,0.8
    +1,1,1,1,0,1,1,1,1,0,0.529116,0.8
    +1,0,1,1,1,1,0,0,1,0,0.478844,0.6
    +0,1,0,0,0,0,1,0,1,0,0.238793,0.3
    +0,0,0,0,0,1,1,0,0,0,0.258294,0.2
    +1,1,1,0,0,0,0,0,0,0,0.258465,0.3
    +
    +
    +

    Errors

    +

    The fitted_params file must be a Stan CSV file; attempts to use a regular CSV file will result an error message of the form:

    Error reading fitted param names from sample csv file <filename.csv>

    The fitted_params file must contain columns corresponding to legal values for all parameters defined in the model. If any parameters are missing, the program will exit with an error message of the form:

    Error reading fitted param names from sample csv file <filename.csv>
    -

    The parameter values of the fitted_params are on the constrained scale and must obey all constraints. For example, if we modify the contencts of the first reported draw in bernoulli_fit.csv so that the value of theta is outside the declared bounds real<lower=0, upper=1>, the program will return the following error message:

    -
    Exception: lub_free: Bounded variable is 1.21397, but must be in the interval [0, 1] (in 'bernoulli_ppc.stan', line 5, column 2 to column 30)
    +

    The parameter values of the fitted_params are on the constrained scale and must obey all constraints. For example, if we modify the contents of the first reported draw in bernoulli_fit.csv so that the value of theta is outside the declared bounds real<lower=0, upper=1>, the program will return the following error message:

    +
    Exception: lub_free: Bounded variable is 1.21397, but must be in the interval [0, 1] \
    +(in 'bernoulli_ppc.stan', line 5, column 2 to column 30)
    +
    Back to top -
    Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    + @@ -252,7 +255,7 @@ - - - - @@ -311,7 +290,7 @@
    - - @@ -496,7 +469,7 @@

    CmdStan Installation

    Installation via conda

    -

    With conda, you can install CmdStan from the conda-forge channel. This will install a pre-built version of CmdStan along with the required dependencies (i.e. a C++ compiler, a version of Make, and required libraries) detailed below under [Source installation]. The conda installation is designed so one can use the R or Python bindings to CmdStan seamlessly. Additionally, it provides the command cmdstan_model to activate the CmdStan makefile from anywhere.

    +

    With conda, you can install CmdStan from the conda-forge channel. This will install a pre-built version of CmdStan along with the required dependencies (i.e. a C++ compiler, a version of Make, and required libraries). The conda installation is designed so one can use the R or Python bindings to CmdStan seamlessly. Additionally, it provides the command cmdstan_model to activate the CmdStan makefile from anywhere.

    Note: This requires that conda has been installed already on your machine. You can either install miniconda, a free, minimal installer for conda or you can get the full Anaconda system which provides graphical installer wizards for MacOS and Windows users.

    We recommend installing CmdStan in a new conda environment:

     conda create -n stan -c conda-forge cmdstan
    @@ -570,7 +543,7 @@

    Checking the St > make examples/bernoulli/bernoulli # fit to provided data (results of 10 trials, 2 out of 10 successes) -> ./examples/bernoulli/bernoulli sample\ +> ./examples/bernoulli/bernoulli sample\ data file=examples/bernoulli/bernoulli.data.json # default output written to file `output.csv`, @@ -741,7 +714,7 @@

    Using GNU Make

    4. Build the diagnose utility bin/diagnose 5. Build all libraries and object files compile and link an executable Stan program - Note: to build using multiple cores, use the -j option to make, e.g., + Note: to build using multiple cores, use the -j option to make, e.g., for 4 cores: > make build -j4 @@ -798,25 +771,6 @@

    Using GNU Make

  • To open a Windows command shell, first open the Start Menu, (usually in the lower left of the screen), select option All Programs, then option Accessories, then program Command Prompt. Alternatively, enter [Windows+r] (both keys together on the keyboard), and enter cmd into the text field that pops up in the Run window, then press [Return] on the keyboard to run.↩︎

  • - - + + - + + - + @@ -248,6 +250,7 @@
    +
    @@ -286,7 +289,7 @@ - - - - @@ -345,7 +324,7 @@
    - - @@ -687,25 +660,6 @@

    Empty arrays in JSON< Back to top - - + + - + + - + @@ -185,6 +187,7 @@
    + @@ -223,7 +226,7 @@ - - - - @@ -282,7 +261,7 @@
    - - @@ -447,7 +420,7 @@

    On this page

    Laplace sampling

    -

    The laplace method produces a sample from a normal approximation centered at the mode of a distribution in the unconstrained space. If the mode is a maximum a posteriori (MAP) estimate, the samples provide an estimate of the mean and standard deviation of the posterior distribution. If the mode is a maximum likelihood estimate (MLE), the sample provides an estimate of the standard error of the likelihood. In general, the posterior mode in the unconstrained space doesn’t correspond to the mean (nor mode) in the constrained space, and thus the sample is needed to infer the mean as well as the standard deviation. (See this case study for a visual illustration.)

    +

    The laplace method produces a sample from a normal approximation centered at the mode of a distribution in the unconstrained space. If the mode is a maximum a posteriori (MAP) estimate, the samples provide an estimate of the mean and standard deviation of the posterior distribution. If the mode is a maximum likelihood estimate (MLE), the sample provides an estimate of the standard error of the likelihood. In general, the posterior mode in the unconstrained space doesn’t correspond to the mean (nor mode) in the constrained space, and thus the sample is needed to infer the mean as well as the standard deviation. (See this case study for a visual illustration.)

    This is computationally inexpensive compared to exact Bayesian inference with MCMC. The goodness of this estimate depends on both the estimate of the mode and how much the true posterior in the unconstrained space resembles a Gaussian.

    Configuration

    @@ -518,25 +491,6 @@

    Example

    Back to top -
    Back to top - - + + +

    Redirecting…

    - Click here if you are not redirected. + Click here if you are not redirected. diff --git a/docs/cmdstan-guide/mcmc_config.html b/docs/cmdstan-guide/mcmc_config.html index 114955e9b..18ceb1d81 100644 --- a/docs/cmdstan-guide/mcmc_config.html +++ b/docs/cmdstan-guide/mcmc_config.html @@ -7,7 +7,7 @@ -MCMC Sampling Configuration +MCMC Sampling - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - -
    - -
    - - -
    - - - -
    - - - - -
    -

    MCMC Sampling

    -
    -

    Running the sampler

    -

    To generate a sample from the posterior distribution of the model conditioned on the data, we run the executable program with the argument sample or method=sample together with the input data. The executable can be run from any directory. Here, we run it in the directory which contains the Stan program and input data, <cmdstan-home>/examples/bernoulli:

    -
    > cd examples/bernoulli
    -

    To execute sampling of the model under Linux or Mac, use:

    -
    > ./bernoulli sample data file=bernoulli.data.json
    -

    In Windows, the ./ prefix is not needed:

    -
    > bernoulli.exe sample data file=bernoulli.data.json
    -

    The output is the same across all supported platforms. First, the configuration of the program is echoed to the standard output:

    -
    method = sample (Default)
    -  sample
    -    num_samples = 1000 (Default)
    -    num_warmup = 1000 (Default)
    -    save_warmup = 0 (Default)
    -    thin = 1 (Default)
    -    adapt
    -      engaged = 1 (Default)
    -      gamma = 0.050000000000000003 (Default)
    -      delta = 0.80000000000000004 (Default)
    -      kappa = 0.75 (Default)
    -      t0 = 10 (Default)
    -      init_buffer = 75 (Default)
    -      term_buffer = 50 (Default)
    -      window = 25 (Default)
    -      save_metric = 0 (Default)
    -    algorithm = hmc (Default)
    -      hmc
    -        engine = nuts (Default)
    -          nuts
    -            max_depth = 10 (Default)
    -        metric = diag_e (Default)
    -        metric_file =  (Default)
    -        stepsize = 1 (Default)
    -        stepsize_jitter = 0 (Default)
    -    num_chains = 1 (Default)
    -id = 0 (Default)
    -data
    -  file = bernoulli.data.json
    -init = 2 (Default)
    -random
    -  seed = 3252652196 (Default)
    -output
    -  file = output.csv (Default)
    -  diagnostic_file =  (Default)
    -  refresh = 100 (Default)
    -

    After the configuration has been displayed, a short timing message is given.

    -
    Gradient evaluation took 1.2e-05 seconds
    -1000 transitions using 10 leapfrog steps per transition would take 0.12 seconds.
    -Adjust your expectations accordingly!
    -

    Next, the sampler reports the iteration number, reporting the percentage complete.

    -
    Iteration:    1 / 2000 [  0%]  (Warmup)
    -....
    -Iteration: 2000 / 2000 [100%]  (Sampling)
    -

    Finally, the sampler reports timing information:

    -
     Elapsed Time: 0.007 seconds (Warm-up)
    -               0.017 seconds (Sampling)
    -               0.024 seconds (Total)
    -
    -
    -

    Running multiple chains

    -

    A Markov chain generates samples from the target distribution only after it has converged to equilibrium. In theory, convergence is only guaranteed asymptotically as the number of draws grows without bound. In practice, diagnostics must be applied to monitor convergence for the finite number of draws actually available. One way to monitor whether a chain has converged to the equilibrium distribution is to compare its behavior to other randomly initialized chains. For robust diagnostics, we recommend running 4 chains.

    -

    There are two different ways of running multiple chains, with the num_chains argument using a single executable and by using the Unix and DOS shell to run multiple executables.

    -
    -

    Using the num_chains argument to run multiple chains

    -

    The num_chains argument can be used for all of Stan’s samplers with the exception of the static HMC engine.

    -

    Example that will run 4 chains:

    -
    ./bernoulli sample num_chains=4 data file=bernoulli.data.json output file=output.csv
    -

    If the model was not compiled with STAN_THREADS=true, the above command will run 4 chains sequentially and will produce the sample in output_1.csv, output_2.csv, output_3.csv, output_4.csv. A suffix with the chain id is appended to the provided output filename (output.csv in the above command).

    -

    If the model was compiled with STAN_THREADS=true, the chains can run in parallel, with the num_threads argument defining the maximum number of threads used to run the chains. If the model uses no within-chain parallelization (map_rect or reduce_sum calls), the below command will run 4 chains in parallel, provided there are cores available:

    -
    ./bernoulli sample num_chains=4 data file=bernoulli.data.json output file=output.csv num_threads=4
    -

    If the model uses within-chain parallelization (map_rect or reduce_sum calls), the threads are automatically scheduled to run the parallel parts of a single chain or run the sequential parts of another chains. The below call starts 4 chains that can use 16 threads. At a given moment a single chain may use all 16 threads, 1 thread, anything in between, or can wait for a thread to be available. The scheduling is left to the Threading Building Blocks scheduler.

    -
    ./bernoulli_par sample num_chains=4 data file=bernoulli.data.json output file=output.csv num_threads=16
    -
    -
    -

    Using shell for running multiple chains

    -

    To run multiple chains given a model and data, either sequentially or in parallel, we can also use the Unix or DOS shell for loop to set up index variables needed to identify each chain and its outputs.

    -

    On MacOS or Linux, the for-loop syntax for both the bash and zsh interpreters is:

    -
    for NAME [in LIST]; do COMMANDS; done
    -

    The list can be a simple sequence of numbers, or you can use the shell expansion syntax {1..N} which expands to the sequence from \(1\) to \(N\), e.g. {1..4} expands to 1 2 3 4. Note that the expression {1..N} cannot contain spaces.

    -

    To run 4 chains for the example bernoulli model on MacOS or Linux:

    -
    > for i in {1..4}
    -    do
    -      ./bernoulli sample data file=bernoulli.data.json \
    -      output file=output_${i}.csv
    -    done
    -

    The backslash (\) indicates a line continuation in Unix. The expression ${i} substitutes in the value of loop index variable i. To run chains in parallel, put an ampersand (&) at the end of the nested sampler command:

    -
    > for i in {1..4}
    -    do
    -      ./bernoulli sample data file=bernoulli.data.json \
    -      output file=output_${i}.csv &
    -    done
    -

    This pushes each process into the background which allows the loop to continue without waiting for the current chain to finish.

    -

    On Windows, the DOS for-loop syntax is one of:

    -
    for %i in (SET) do COMMAND COMMAND-ARGUMENTS
    -for /l %i in (START, STEP, END) do COMMAND COMMAND-ARGUMENTS
    -

    To run 4 chains in parallel on Windows:

    -
    >for /l %i in (1, 1, 4) do start /b bernoulli.exe sample ^
    -                                    data file=bernoulli.data.json my_data ^
    -                                    output file=output_%i.csv
    -

    The caret (^) indicates a line continuation in DOS.

    -
    -
    -
    -

    Stan CSV output file

    -

    Each execution of the model results in draws from a single Markov chain being written to a file in comma-separated value (CSV) format. The default name of the output file is output.csv.

    -

    The first part of the output file records the version of the underlying Stan library and the configuration as comments (i.e., lines beginning with the pound sign (#)).

    -
    # stan_version_major = 2
    -# stan_version_minor = 23
    -# stan_version_patch = 0
    -# model = bernoulli_model
    -# method = sample (Default)
    -#   sample
    -#     num_samples = 1000 (Default)
    -#     num_warmup = 1000 (Default)
    -...
    -# output
    -#   file = output.csv (Default)
    -#   diagnostic_file =  (Default)
    -#   refresh = 100 (Default)
    -

    This is followed by a CSV header indicating the names of the values sampled.

    -
    lp__,accept_stat__,stepsize__,treedepth__,n_leapfrog__,divergent__,energy__,theta
    -

    The first output columns report the HMC sampler information:

    -
      -
    • lp__ - the total log probability density (up to an additive constant) at each sample
    • -
    • accept_stat__ - the average Metropolis acceptance probability over each simulated Hamiltonian trajectory
    • -
    • stepsize__ - integrator step size
    • -
    • treedepth__ - depth of tree used by NUTS (NUTS sampler)
    • -
    • n_leapfrog__ - number of leapfrog calculations (NUTS sampler)
    • -
    • divergent__ - has value 1 if trajectory diverged, otherwise 0. (NUTS sampler)
    • -
    • energy__ - value of the Hamiltonian
    • -
    • int_time__ - total integration time (static HMC sampler)
    • -
    -

    Because the above header is from the NUTS sampler, it has columns treedepth__, n_leapfrog__, and divergent__ and doesn’t have column int_time__. The remaining columns correspond to model parameters. For the Bernoulli model, it is just the final column, theta.

    -

    The header line is written to the output file before warmup begins. If option save_warmup is set to 1, the warmup draws are output directly after the header. The total number of warmup draws saved is num_warmup divided by thin, rounded up (i.e., ceiling).

    -

    Following the warmup draws (if any), are comments which record the results of adaptation: the stepsize, and inverse mass metric used during sampling:

    -
    # Adaptation terminated
    -# Step size = 0.884484
    -# Diagonal elements of inverse mass matrix:
    -# 0.535006
    -

    The default sampler is NUTS with an adapted step size and a diagonal inverse mass matrix. For this example, the step size is 0.884484, and the inverse mass contains the single entry 0.535006 corresponding to the parameter theta.

    -

    Draws from the posterior distribution are printed out next, each line containing a single draw with the columns corresponding to the header.

    -
    -6.84097,0.974135,0.884484,1,3,0,6.89299,0.198853
    --6.91767,0.985167,0.884484,1,1,0,6.92236,0.182295
    --7.04879,0.976609,0.884484,1,1,0,7.05641,0.162299
    --6.88712,1,0.884484,1,1,0,7.02101,0.188229
    --7.22917,0.899446,0.884484,1,3,0,7.73663,0.383596
    -...
    -

    The output ends with timing details:

    -
    #  Elapsed Time: 0.007 seconds (Warm-up)
    -#                0.017 seconds (Sampling)
    -#                0.024 seconds (Total)
    -
    -
    -

    Summarizing sampler output(s) with stansummary

    -

    The stansummary utility processes one or more output files from a run or set of runs of Stan’s HMC sampler given a model and data. For all columns in the Stan CSV output file stansummary reports a set of statistics including mean, standard deviation, percentiles, effective number of samples, and \(\hat{R}\) values.

    -

    To run stansummary on the output files generated by the for loop above, by the above run of the bernoulli model on Mac or Linux:

    -
    <cmdstan-home>/bin/stansummary output_*.csv
    -

    On Windows, use backslashes to call the stansummary.exe.

    -
    <cmdstan-home>\bin\stansummary.exe output_*.csv
    -

    The stansummary output consists of one row of statistics per column in the Stan CSV output file. Therefore, the first rows in the stansummary report statistics over the sampler state. The final row of output summarizes the estimates of the model variable theta:

    -
    Inference for Stan model: bernoulli_model
    -4 chains: each with iter=(1000,1000,1000,1000); warmup=(0,0,0,0); thin=(1,1,1,1); 4000 iterations saved.
    -
    -Warmup took (0.0070, 0.0070, 0.0070, 0.0070) seconds, 0.028 seconds total
    -Sampling took (0.020, 0.017, 0.021, 0.019) seconds, 0.077 seconds total
    -
    -                Mean     MCSE  StdDev     5%   50%   95%    N_Eff  N_Eff/s    R_hat
    -lp__            -7.3  1.8e-02    0.75   -8.8  -7.0  -6.8  1.8e+03  2.4e+04  1.0e+00
    -accept_stat__   0.89  2.7e-03    0.17   0.52  0.96   1.0  3.9e+03  5.1e+04  1.0e+00
    -stepsize__       1.1  7.5e-02    0.11   0.93   1.2   1.2  2.0e+00  2.6e+01  2.5e+13
    -treedepth__      1.4  8.1e-03    0.49    1.0   1.0   2.0  3.6e+03  4.7e+04  1.0e+00
    -n_leapfrog__     2.3  1.7e-02    0.98    1.0   3.0   3.0  3.3e+03  4.3e+04  1.0e+00
    -divergent__     0.00      nan    0.00   0.00  0.00  0.00      nan      nan      nan
    -energy__         7.8  2.6e-02     1.0    6.8   7.5   9.9  1.7e+03  2.2e+04  1.0e+00
    -theta           0.25  2.9e-03    0.12  0.079  0.23  0.46  1.7e+03  2.1e+04  1.0e+00
    -
    -Samples were drawn using hmc with nuts.
    -For each parameter, N_Eff is a crude measure of effective sample size,
    -and R_hat is the potential scale reduction factor on split chains (at
    -convergence, R_hat=1).
    -

    In this example, we conditioned the model on a dataset consisting of the outcomes of 10 bernoulli trials, where only 2 trials reported success. The 5%, 50%, and 95% percentile values for theta reflect the uncertainty in our estimate, due to the small amount of data, given the prior of beta(1, 1)

    - - -
    -
    - - Back to top
    - - - -
    - - - - - \ No newline at end of file + + + Redirecting… + + + + +

    Redirecting…

    + Click here if you are not redirected. + diff --git a/docs/cmdstan-guide/optimization_intro.html b/docs/cmdstan-guide/optimization_intro.html index e74210b71..521625b1e 100644 --- a/docs/cmdstan-guide/optimization_intro.html +++ b/docs/cmdstan-guide/optimization_intro.html @@ -1,961 +1,11 @@ - - - - - - - - -Optimization - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - -
    - -
    - - -
    - - - -
    - - - - -
    -

    Optimization

    -

    The CmdStan executable can run Stan’s optimization algorithms which provide a deterministic method to find the posterior mode. If the posterior is not convex, there is no guarantee Stan will be able to find the global mode as opposed to a local optimum of log probability.

    -

    The executable does not need to be recompiled in order to switch from sampling to optimization, and the data input format is the same. The following is a minimal call to Stan’s optimizer using defaults for everything but the location of the data file.

    -
    > ./bernoulli optimize data file=bernoulli.data.json
    -

    Executing this command prints both output to the console and to a csv file.

    -

    The first part of the console output reports on the configuration used. The above command uses all default configurations, therefore the optimizer used is the L-BFGS optimizer and its default initial stepsize and tolerances for monitoring convergence:

    -
     ./bernoulli optimize data file=bernoulli.data.json
    -method = optimize
    -  optimize
    -    algorithm = lbfgs (Default)
    -      lbfgs
    -        init_alpha = 0.001 (Default)
    -        tol_obj = 1e-12 (Default)
    -        tol_rel_obj = 10000 (Default)
    -        tol_grad = 1e-08 (Default)
    -        tol_rel_grad = 10000000 (Default)
    -        tol_param = 1e-08 (Default)
    -        history_size = 5 (Default)
    -    iter = 2000 (Default)
    -    save_iterations = 0 (Default)
    -id = 0 (Default)
    -data
    -  file = bernoulli.data.json
    -init = 2 (Default)
    -random
    -  seed = 87122538 (Default)
    -output
    -  file = output.csv (Default)
    -  diagnostic_file =  (Default)
    -  refresh = 100 (Default)
    -

    The second part of the output indicates how well the algorithm fared, here converging and terminating normally. The numbers reported indicate that it took 5 iterations and 8 gradient evaluations. This is, not surprisingly, far fewer iterations than required for sampling; even fewer iterations would be used with less stringent user-specified convergence tolerances. The alpha value is for step size used. In the final state the change in parameters was roughly \(0.002\) and the length of the gradient roughly 3e-05 (\(0.00003\)).

    -
    Initial log joint probability = -6.85653
    -    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
    -       5      -5.00402    0.00184936   3.35074e-05           1           1        8   
    -Optimization terminated normally: 
    -  Convergence detected: relative gradient magnitude is below tolerance
    -

    The output from optimization is written into the file output.csv by default. The output follows the same pattern as the output for sampling, first dumping the entire set of parameters used as comment lines:

    -
    # stan_version_major = 2
    -# stan_version_minor = 23
    -# stan_version_patch = 0
    -# model = bernoulli_model
    -# method = optimize
    -#   optimize
    -#     algorithm = lbfgs (Default)
    -...
    -

    Following the config information, are two lines of output: the CSV headers and the recorded values:

    -
    lp__,theta
    --5.00402,0.200003
    -

    Note that everything is a comment other than a line for the header, and a line for the values. Here, the header indicates the unnormalized log probability with lp__ and the model parameter theta. The maximum log probability is -5.0 and the posterior mode for theta is 0.20. The mode exactly matches what we would expect from the data. Because the prior was uniform, the result 0.20 represents the maximum likelihood estimate (MLE) for the very simple Bernoulli model. Note that no uncertainty is reported.

    -

    All of the optimizers stream per-iteration intermediate approximations to the command line console. The sub-argument save_iterations specifies whether or not to save the intermediate iterations to the output file. Allowed values are \(0\) or \(1\), corresponding to False and True respectively. The default value is \(0\), i.e., intermediate iterations are not saved to the output file. Running the optimizer with save_iterations=1 writes both the initial log joint probability and values for all iterations to the output CSV file.

    -

    Running the example model with option save_iterations=1, i.e., the command

    -
    > ./bernoulli optimize save_iterations=1 data file=bernoulli.data.json
    -

    produces CSV file output rows:

    -
    lp__,theta
    --6.85653,0.493689
    --6.10128,0.420936
    --5.02953,0.22956
    --5.00517,0.206107
    --5.00403,0.200299
    --5.00402,0.200003
    - - -
    - - Back to top
    - - - -
    - - - - - \ No newline at end of file + + + Redirecting… + + + + +

    Redirecting…

    + Click here if you are not redirected. + diff --git a/docs/cmdstan-guide/optimize_config.html b/docs/cmdstan-guide/optimize_config.html index 1f5b56d7b..2a3ab13e5 100644 --- a/docs/cmdstan-guide/optimize_config.html +++ b/docs/cmdstan-guide/optimize_config.html @@ -7,7 +7,7 @@ -Optimization Configuration +Optimization +/* CSS for citations */ +div.csl-bib-body { } +div.csl-entry { + clear: both; + margin-bottom: 0em; +} +.hanging-indent div.csl-entry { + margin-left:2em; + text-indent:-2em; +} +div.csl-left-margin { + min-width:2em; + float:left; +} +div.csl-right-inline { + margin-left:2em; + padding-left:1em; +} +div.csl-indent { + margin-left: 2em; +} @@ -38,10 +58,12 @@ - + + - + + - + @@ -214,6 +236,7 @@ - - @@ -477,9 +470,14 @@

    On this page

    Pathfinder Method for Approximate Bayesian Inference

    -

    The Pathfinder algorithm is described in section Pathfinder overview.

    +

    The CmdStan method pathfinder uses the Pathfinder algorithm of Zhang et al. (2022), which is further described in the Stan Reference Manual.

    +

    A single run of the Pathfinder algorithm generates a set of approximate draws. Inference is improved by running multiple Pathfinder instances and using Pareto-smoothed importance resampling (PSIS) of the resulting sets of draws. This better matches non-normal target densities and also eliminates minor modes.

    The pathfinder method runs multi-path Pathfinder by default, which returns a PSIS sample over the draws from several individual (“single-path”) Pathfinder runs. Argument num_paths specifies the number of single-path Pathfinders, the default is \(4\). If num_paths is set to 1, then only one individual Pathfinder is run without the PSIS reweighting of the sample.

    -

    The full set of configuration options available for the pathfinder method is reported at the beginning of the pathfinder output file as CSV comments. When the example model bernoulli.stan is run with method=pathfinder via the command line with all default arguments, the resulting Stan CSV file header comments show the complete set of default configuration options:

    +

    The full set of configuration options available for the pathfinder method is available by using the pathfinder help-all subcommand. The arguments with their requested values or defaults are also reported at the beginning of the algorithm’s console output and in the output CSV file’s comments.

    +

    The following is a minimal call the Pathfinder algorithm using defaults for everything but the location of the data file.

    +
    > ./bernoulli pathfinder data file=bernoulli.data.R
    +

    Executing this command prints both output to the console and csv files.

    +

    The first part of the console output reports on the configuration used.

    method = pathfinder
       pathfinder
         init_alpha = 0.001 (Default)
    @@ -496,7 +494,39 @@ 

    Pathfinder Method for Approximate Bayesian Inference

    save_single_paths = 0 (Default) max_lbfgs_iters = 1000 (Default) num_draws = 1000 (Default) - num_elbo_draws = 25 (Default)
    + num_elbo_draws = 25 (Default) +id = 1 (Default) +data + file = examples/bernoulli/bernoulli.data.json +init = 2 (Default) +random + seed = 1995513073 (Default) +output + file = output.csv (Default) + diagnostic_file = (Default) + refresh = 100 (Default) + sig_figs = -1 (Default) + profile_file = profile.csv (Default) +num_threads = 1 (Default)
    +

    The rest of the output describes the progression of the algorithm.

    +

    By default, the Pathfinder algorithm runs 4 single-path Pathfinders in parallel, then uses importance resampling on the set of returned draws to produce the specified number of draws.

    +
    Path [1] :Initial log joint density = -11.543343
    +Path [1] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    +              5      -6.748e+00      1.070e-03   1.707e-05    1.000e+00  1.000e+00       126 -6.220e+00 -6.220e+00
    +Path [1] :Best Iter: [5] ELBO (-6.219833) evaluations: (126)
    +Path [2] :Initial log joint density = -7.443345
    +Path [2] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    +              5      -6.748e+00      9.936e-05   3.738e-07    1.000e+00  1.000e+00       126 -6.164e+00 -6.164e+00
    +Path [2] :Best Iter: [5] ELBO (-6.164015) evaluations: (126)
    +Path [3] :Initial log joint density = -18.986308
    +Path [3] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    +              5      -6.748e+00      2.996e-04   4.018e-06    1.000e+00  1.000e+00       126 -6.201e+00 -6.201e+00
    +Path [3] :Best Iter: [5] ELBO (-6.200559) evaluations: (126)
    +Path [4] :Initial log joint density = -8.304453
    +Path [4] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    +              5      -6.748e+00      2.814e-04   2.034e-06    1.000e+00  1.000e+00       126 -6.221e+00 -6.221e+00
    +Path [4] :Best Iter: [3] ELBO (-6.161276) evaluations: (126)
    +Total log probability function evaluations:8404

    Pathfinder Configuration

      @@ -512,18 +542,43 @@

      Pathfinder Config

    L-BFGS Configuration

    -

    Arguments init_alpha through history_size are the full set of arguments to the L-BFGS optimizer and have the same defaults for optimization.

    +

    Arguments init_alpha through history_size are the full set of arguments to the L-BFGS optimizer and have the same defaults for optimization.

    Multi-path Pathfinder CSV files

    By default, the pathfinder method uses 4 independent Pathfinder runs, each of which produces 1000 approximate draws, which are then importance resampled down to 1000 final draws. The importance resampled draws are output as a StanCSV file.

    The CSV files have the following structure:

    -
      -
    • The full set of configuration options available for the pathfinder method is reported at the beginning of the sampler output file as CSV comments.

    • -
    • The CSV header row consists of columns lp_approx__, lp__, and the Stan model parameters, transformed parameters, and generated quantities in the order in which they are declared in the Stan program.

    • -
    • The data rows contain the draws from the single- or multi-path run.

    • -
    • Final comments containing timing information.

    • -
    +

    The initial CSV comment rows contain the complete set of CmdStan configuration options.

    +
    ...
    +# method = pathfinder
    +#   pathfinder
    +#     init_alpha = 0.001 (Default)
    +#     tol_obj = 9.9999999999999998e-13 (Default)
    +#     tol_rel_obj = 10000 (Default)
    +#     tol_grad = 1e-08 (Default)
    +#     tol_rel_grad = 10000000 (Default)
    +#     tol_param = 1e-08 (Default)
    +#     history_size = 5 (Default)
    +#     num_psis_draws = 1000 (Default)
    +#     num_paths = 4 (Default)
    +#     psis_resample = 1 (Default)
    +#     calculate_lp = 1 (Default)
    +#     save_single_paths = 0 (Default)
    +#     max_lbfgs_iters = 1000 (Default)
    +#     num_draws = 1000 (Default)
    +#     num_elbo_draws = 25 (Default)
    +...
    +

    Next is the column header line, followed the set of approximate draws. The Pathfinder algorithm first outputs lp_approx__, the log density in the approximating distribution, and lp__, the log density in the target distribution, followed by estimates of the model parameters, transformed parameters, and generated quantities.

    +
    lp_approx__,lp__,theta
    +-2.4973, -8.2951, 0.0811852
    +-0.87445, -7.06526, 0.160207
    +-0.812285, -7.07124, 0.35819
    +...
    +

    The final lines are comment lines which give timing information.

    +
    # Elapsed Time: 0.016000 seconds (Pathfinders)
    +#               0.003000 seconds (PSIS)
    +#               0.019000 seconds (Total)
    +

    Pathfinder provides option save_single_paths which will save output from the single-path Pathfinder runs.

    Single-path Pathfinder Outputs.

    @@ -591,29 +646,15 @@

    Single-pat

    Option num_paths=1 runs one single-path Pathfinder and output CSV file contains the draws from that run without PSIS reweighting. The combination of arguments num_paths=1 save_single_paths=1 creates just two output files, the CSV sample and the set of ELBO iterations. In this case, the default output file name is “output.csv” and the default diagnostic file name is “output.json”.

    +

    - Back to top - + Back to top

    References

    +
    +Zhang, Lu, Bob Carpenter, Andrew Gelman, and Aki Vehtari. 2022. “Pathfinder: Parallel Quasi-Newton Variational Inference.” Journal of Machine Learning Research 23 (306): 1–49. http://jmlr.org/papers/v23/21-0889.html. +
    +
    diff --git a/docs/cmdstan-guide/pathfinder_intro.html b/docs/cmdstan-guide/pathfinder_intro.html index 92918fd7a..4f3244d4a 100644 --- a/docs/cmdstan-guide/pathfinder_intro.html +++ b/docs/cmdstan-guide/pathfinder_intro.html @@ -1,965 +1,11 @@ - - - - - - - - -Pathfinder for Variational Inference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - -
    - -
    - - -
    - - - -
    - - - - -
    -

    Variational Inference using Pathfinder

    -

    The CmdStan method pathfinder uses the Pathfinder algorithm of Zhang et al. (2022). Pathfinder is a variational method for approximately sampling from differentiable log densities. Starting from a random initialization, Pathfinder locates normal approximations to the target density along a quasi-Newton optimization path, with local covariance estimated using the negative inverse Hessian estimates produced by the L-BFGS optimizer. Pathfinder returns draws from the Gaussian approximation with the lowest estimated Kullback-Leibler (KL) divergence to the true posterior.

    -

    Pathfinder differs from the ADVI method in that it uses quasi-Newton optimization on the log posterior instead of stochastic gradient descent (SGD) on the Monte Carlo computation of the evidence lower bound (ELBO). Pathfinder’s approach is both faster and more stable than that of ADVI. Compared to ADVI and short dynamic HMC runs, Pathfinder requires one to two orders of magnitude fewer log density and gradient evaluations, with greater reductions for more challenging posteriors.

    -

    A single run of the Pathfinder algorithm generates a set of approximate draws. Inference is improved by running multiple Pathfinder instances and using Pareto-smoothed importance resampling (PSIS) of the resulting sets of draws. This better matches non-normal target densities and also eliminates minor modes. By default, the pathfinder method uses 4 independent Pathfinder runs, each of which produces 1000 approximate draws, which are then importance resampled down to 1000 final draws.

    -

    The following is a minimal call the Pathfinder algorithm using defaults for everything but the location of the data file.

    -
    > ./bernoulli pathfinder data file=bernoulli.data.R
    -

    Executing this command prints both output to the console and csv files.

    -

    The first part of the console output reports on the configuration used.

    -
    method = pathfinder
    -  pathfinder
    -    init_alpha = 0.001 (Default)
    -    tol_obj = 9.9999999999999998e-13 (Default)
    -    tol_rel_obj = 10000 (Default)
    -    tol_grad = 1e-08 (Default)
    -    tol_rel_grad = 10000000 (Default)
    -    tol_param = 1e-08 (Default)
    -    history_size = 5 (Default)
    -    num_psis_draws = 1000 (Default)
    -    num_paths = 4 (Default)
    -    psis_resample = 1 (Default)
    -    calculate_lp = 1 (Default)
    -    save_single_paths = 0 (Default)
    -    max_lbfgs_iters = 1000 (Default)
    -    num_draws = 1000 (Default)
    -    num_elbo_draws = 25 (Default)
    -id = 1 (Default)
    -data
    -  file = examples/bernoulli/bernoulli.data.json
    -init = 2 (Default)
    -random
    -  seed = 1995513073 (Default)
    -output
    -  file = output.csv (Default)
    -  diagnostic_file =  (Default)
    -  refresh = 100 (Default)
    -  sig_figs = -1 (Default)
    -  profile_file = profile.csv (Default)
    -num_threads = 1 (Default)
    -

    The rest of the output describes the progression of the algorithm.

    -

    By default, the Pathfinder algorithm runs 4 single-path Pathfinders in parallel, the uses importance resampling on the set of returned draws to produce the specified number of draws.

    -
    Path [1] :Initial log joint density = -11.543343
    -Path [1] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    -              5      -6.748e+00      1.070e-03   1.707e-05    1.000e+00  1.000e+00       126 -6.220e+00 -6.220e+00
    -Path [1] :Best Iter: [5] ELBO (-6.219833) evaluations: (126)
    -Path [2] :Initial log joint density = -7.443345
    -Path [2] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    -              5      -6.748e+00      9.936e-05   3.738e-07    1.000e+00  1.000e+00       126 -6.164e+00 -6.164e+00
    -Path [2] :Best Iter: [5] ELBO (-6.164015) evaluations: (126)
    -Path [3] :Initial log joint density = -18.986308
    -Path [3] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    -              5      -6.748e+00      2.996e-04   4.018e-06    1.000e+00  1.000e+00       126 -6.201e+00 -6.201e+00
    -Path [3] :Best Iter: [5] ELBO (-6.200559) evaluations: (126)
    -Path [4] :Initial log joint density = -8.304453
    -Path [4] : Iter      log prob        ||dx||      ||grad||     alpha      alpha0      # evals       ELBO    Best ELBO        Notes
    -              5      -6.748e+00      2.814e-04   2.034e-06    1.000e+00  1.000e+00       126 -6.221e+00 -6.221e+00
    -Path [4] :Best Iter: [3] ELBO (-6.161276) evaluations: (126)
    -Total log probability function evaluations:8404
    -

    Pathfinder outputs a StanCSV file file which contains the importance resampled draws from multi-path Pathfinder. The initial CSV comment rows contain the complete set of CmdStan configuration options. Next is the column header line, followed the set of approximate draws. The Pathfinder algorithm first outputs lp_approx__, the log density in the approximating distribution, and lp__, the log density in the target distribution, followed by estimates of the model parameters, transformed parameters, and generated quantities.

    -
    lp_approx__,lp__,theta
    --2.4973, -8.2951, 0.0811852
    --0.87445, -7.06526, 0.160207
    --0.812285, -7.07124, 0.35819
    -...
    -

    The final lines are comment lines which give timing information.

    -
    # Elapsed Time: 0.016000 seconds (Pathfinders)
    -#               0.003000 seconds (PSIS)
    -#               0.019000 seconds (Total)
    -

    Pathfinder provides option save_single_paths which will save output from the single-path Pathfinder runs. See section Pathfinder Method for details.

    - - - -
    - - Back to top

    References

    -
    -Zhang, Lu, Bob Carpenter, Andrew Gelman, and Aki Vehtari. 2022. “Pathfinder: Parallel Quasi-Newton Variational Inference.” Journal of Machine Learning Research 23 (306): 1–49. http://jmlr.org/papers/v23/21-0889.html. -
    -
    - - - -
    - - - - - \ No newline at end of file + + + Redirecting… + + + + +

    Redirecting…

    + Click here if you are not redirected. + diff --git a/docs/cmdstan-guide/print.html b/docs/cmdstan-guide/print.html index 59a934c48..f8b75a86c 100644 --- a/docs/cmdstan-guide/print.html +++ b/docs/cmdstan-guide/print.html @@ -38,10 +38,12 @@ - + + - + + - + @@ -185,6 +187,7 @@
    +
    @@ -223,7 +226,7 @@ - - - - @@ -282,7 +261,7 @@
    - - @@ -448,25 +421,6 @@

    print (deprecated): MCMC Output Analysis

    Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -252,7 +255,7 @@ - - - - @@ -311,7 +290,7 @@
    - - @@ -704,25 +677,6 @@

    BNF grammar for Back to top - - + + - + + - + @@ -214,6 +216,7 @@
    +
    @@ -252,7 +255,7 @@ - - - - @@ -311,7 +290,7 @@
    - - @@ -570,7 +543,7 @@

    Sampler Stan # refresh = 100 (Default)

    Note that when running multi-threaded programs which use reduce_sum for high-level parallelization, the number of threads used will also be included in this initial comment header.

    Column headers

    -

    The CSV header row lists all sampler parameters, model parameters, transformed parameters, and quantities of interest. The sampler parameters are described in detail in the output file section of the Quickstart Guide chapter on MCMC Sampling. The example model bernoulli.stan only contains one parameter theta, therefore the CSV file data table consists of 7 sampler parameter columns and one column for the model parameter:

    +

    The CSV header row lists all sampler parameters, model parameters, transformed parameters, and quantities of interest. The sampler parameters are described in detail in the output file section of the chapter on MCMC Sampling. The example model bernoulli.stan only contains one parameter theta, therefore the CSV file data table consists of 7 sampler parameter columns and one column for the model parameter:

    lp__,accept_stat__,stepsize__,treedepth__,n_leapfrog__,divergent__,energy__,theta

    As a second example, we show the output of the eight_schools.stan model on run on example dataset. This model has 3 parameters: mu, theta a vector whose length is dependent on the input data, here N = 8, and tau. The initial columns are for the 7 sampler parameters, as before. The column headers for the model parameters are:

    mu,theta.1,theta.2,theta.3,theta.4,theta.5,theta.6,theta.7,theta.8,tau
    @@ -693,25 +666,6 @@

    Diagnose method ou Back to top - - + - + + - + + - + @@ -185,6 +187,7 @@
    +
    @@ -223,7 +226,7 @@ - - - - @@ -282,7 +261,7 @@
    - - @@ -478,25 +451,6 @@

    The Stan compile Back to top -