Accept-reject sampler

In addition to sampling each model parameter independently, the epifx.select module provides support for sampling particles according to arbitrary target distributions, using an accept-reject sampler. Proposals will be drawn from the model prior distribution.

epifx.select.select(instance, target, seed, notify_fn=None)

Select particles according to a target distribution. Proposals will be drawn from the model prior distribution.

Parameters:
  • instance – The simulation instance.
  • target – The target distribution.
  • seed – The PRNG seed used for accepting particles.
  • notify_fn – An optional function that is notified of each acceptance loop, and should accept two arguments: the number of particles and the number of accepted particles.
Returns:

The initial state vector for each accepted particle.

Return type:

numpy.ndarray

Note

The instance should not be reused after calling this function. To prevent this from happening, the instance settings will be deleted.

# Save the accepted particles to disk.
vec = epifx.select.select(instance, target, seed)
sampled_values = vec[column_names]
header = ' '.join(column_names)
np.savetxt(out_file, sampled_values, header=header, comments='')

Any target distribution for which a probability density can be defined can be used with this sampler:

class epifx.select.Target

The base class for target particle distributions.

define_summary_components(instance)

Add summary monitors and tables so that required summary statistics are recorded for each proposed particle.

Parameters:instance – The simulation instance.
logpdf(ctx, output)

Return the log of the target probability density for each particle.

Parameters:
  • ctx – The simulation context.
  • output – The state object returned by pypfilt.pfilter.run; summary tables are located at output['summary'][table_name].

Two target distributions are provided by this module.

The TargetAny distribution accepts all particles with equal likelihood, for the case where the proposal distribution is identical to the desired target distribution:

class epifx.select.TargetAny

A distribution that accepts all proposals with equal likelihood.

define_summary_components(params)

Add summary monitors and tables so that required summary statistics are recorded for each proposed particle.

Parameters:instance – The simulation instance.
logpdf(ctx, output)

Return the log of the target probability density for each particle.

Parameters:
  • ctx – The simulation context.
  • output – The state object returned by pypfilt.pfilter.run; summary tables are located at output['summary'][table_name].

The TargetPeakMVN distribution is a multivariate normal distribution for the peak timing and size, as defined by previously-observed peaks:

class epifx.select.TargetPeakMVN(peak_sizes, peak_times)

A multivariate normal distribution for the peak timing and size.

Parameters:
  • peak_sizes – An array of previously-observed peak sizes.
  • peak_time – An array of previously-observed peak times.
define_summary_components(instance)

Add summary monitors and tables so that required summary statistics are recorded for each proposed particle.

Parameters:instance – The simulation instance.
logpdf(ctx, output)

Return the log of the target probability density for each particle.

Parameters:
  • ctx – The simulation context.
  • output – The state object returned by pypfilt.pfilter.run; summary tables are located at output['summary'][table_name].