Working with results#

The SMC runner returns an SMCResult. It contains the state after each completed iteration in result.states, the starting population in result.initial_state, and step outputs in result.outputs. result.final_state is the final population; result[i] accesses an earlier population. See Particle state and results for the particle-state interface.

Posterior samples and summaries#

For standard and persistent Bayesian SMC runs that have reached the posterior target, use the final population to compute weighted summaries:

mean = result.weighted_mean()
covariance = result.weighted_covariance()
samples, weights = result.posterior_samples()

The default method="weights" returns the final particles and their normalized weights. To draw an equally weighted sample with replacement:

samples, weights = result.posterior_samples(
    n_samples=1_000,
    method="multinomial",
    rng=42,
)

Respect the weights when analysing the particles directly. Intermediate tempered populations do not yet represent the full posterior, and resampling does not make particles independent.

Run diagnostics#

Inspect the run summary and histories to understand how the population evolved:

summary = result.summary()
ess = result.effective_sample_sizes()
beta = result.metadata_history("beta")
log_evidence = result.log_evidence()
log_evidence_history = result.log_evidence_history()

The beta history is relevant to tempered runs. ESS describes weight concentration; it does not measure the number of independent posterior draws. Step-specific diagnostics are available in result.outputs. See Evidence and uncertainty for interpreting evidence uncertainty.

Nested-sampling results#

For nested-sampling SMC, use the shell-weighted result interface:

nested = result.as_nested_sampling_result()
complete = nested.complete
log_evidence = nested.log_evidence
# Once complete, with store_shell_particles=True:
samples, weights = nested.posterior_samples()

The final state represents the constrained prior. Bayesian evidence and posterior weights come from the accumulated shells, so use this interface for posterior analysis. A run suspended by num_steps must be resumed to completion before extracting posterior samples.