pypomp.core.pomp.Pomp.mif

Pomp.mif(J: int, M: int, rw_sd: RWSigma, key: Array | None = None, theta: PompParameters | None = None, thresh: float = 0.0, n_monitors: int = 0, track_time: bool = True) None[source]

Estimates model parameters by maximizing the marginal likelihood via the Iterated Filtering (IF2) algorithm.

The Iterated Filtering algorithm estimates maximum likelihood parameters by introducing random perturbations to the parameters and sequentially filtering them alongside the state variables. Over successive iterations (cooling cycles), the perturbation variance is decayed, allowing the parameters to converge to their MLEs.

This implementation leverages JAX to efficiently vectorize the algorithm across multiple initial parameter sets simultaneously. Results are automatically stored in the model’s history and can be accessed using Pomp.results().

Parameters:
  • J (int) – The number of particles.

  • M (int) – Number of algorithm iterations.

  • rw_sd (RWSigma) – Random walk sigma object.

  • key (jax.Array, optional) – The random key for reproducibility. Defaults to self.fresh_key.

  • theta (PompParameters, optional) – Parameters involved in the POMP model. Defaults to self.theta. Providing a PompParameters object with multiple parameter sets enables faster, vectorized execution across all parameter sets.

  • thresh (float) – Resampling threshold. Defaults to 0.

  • n_monitors (int) – Number of particle filter runs to average for log-likelihood estimation. Defaults to 0 (uses estimate from perturbed filter).

  • track_time (bool) – Boolean flag controlling whether to track the execution time.

Returns:

None. Updates Pomp.results_history with a PompMIFResult containing the log-likelihoods, parameter traces, and diagnostic information from the Iterated Filtering (IF2) run.