Statistical Inference for Partially Observed Markov Processes

Tools for data analysis with partially observed Markov process (POMP) models (also known as stochastic dynamical systems, hidden Markov models, and nonlinear, non-Gaussian, state-space models). The package provides facilities for implementing POMP models, simulating them, and fitting them to time series data by a variety of frequentist and Bayesian methods. It is also a versatile platform for implementation of inference methods for general POMP models.


_N_e_w_s _f_o_r _p_a_c_k_a_g_e '_p_o_m_p'

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_9:

    • The ‘obs’ and ‘states’ arguments of ‘simulate’ are deprecated
      and will be removed in a forthcoming release.

    • The C-level interface for ‘apply_probe_sims’ has changed: the
      new argument ‘rho’ must be the “package:pomp” environment.

    • A bug in ‘pfilter’ (and hence ‘pmcmc’) when
      ‘filter.traj=TRUE’ was discovered and fixed.  In the buggy
      version, the filter trajectory was sampled with incorrect

    • Timo Voipio contributed a pull request that traps the error
      resulting from ‘sannbox’ being passed a ‘candidate.dist’ that
      is not a function.

    • ‘show’ and ‘print’ methods have been made very terse: they
      simply report on the class of the object in question.  To see
      more detailed information about a ‘pomp’ object, use ‘spy’.

    • New (unexported) ‘solibs<-’ method allows developers of
      packages extending ‘pomp’ to incorporate C snippets into
      object that contain ‘pomp’ objects.

    • New ‘verbose’ option in ‘trajectory’ gives diagnostic
      information from ‘deSolve’ integration routines.  Of course,
      this is pertinent only if the model skeleton is a

    • Bug in the display of ‘istate’ when ‘deSolve::ode’ errors has
      been fixed.

    • New ‘hitch’ function facilitates construction of ‘’
      objects from R functions, C snippets, and links to external

    • Native routines needed to access ‘’ objects in C are
      now registered for use by other packages.

    • ‘coef(object) <- NULL’, where ‘object’ is of class ‘pomp’,
      erases any parameters stored in ‘object’.

    • The ‘euler.sir’, ‘gillespie.sir’, ‘blowflies’, ‘ricker’,
      ‘bbs’, ‘dacca’, and ‘rw2’ examples are all now implemented
      using C snippets.

    • A new ‘pomp_defines.h’ header is provided for developers of
      packages that depend on ‘pomp’.

    • Internally, ‘rprocess’ is no longer stored as an R function.
      The use of plugins is now required for the implementation of
      the ‘rprocess’ component.  Currently, there are five plugins
      available: ‘onestep.sim’, ‘discrete.time.sim’, ‘euler.sim’,
      ‘gillespie.sim’, and ‘gillespie.hl.sim’.

    • The new ‘hitch’ function automates the building and linking
      of C snippets and R functions into ‘’s.

    • The handling of ‘dprocess’ has changed.  The ‘onestep.dens’
      plugin is now deprecated and will soon be removed.
      ‘dprocess’ is now specified directly using either a C snippet
      or an R function, in much the same way that, for example,
      ‘dmeasure’ is specified.

    • The old ‘forward’ and ‘inverse’ options for the ‘dir’
      argument of ‘partrans’ have been dispensed with.  The much
      more descriptive options ‘toEstimationScale’ and
      ‘fromEstimationScale’ remain.

    • The C snippet compiling facilities have been thoroughly

    • ‘onestep.dens’ can now take a ‘Csnippet’ specification of the
      process-model transition density.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_8:

    • All inference functions can now take a list in the ‘start’ or
      ‘params’ arguments.

    • When altering parameters in a call to ‘probe’ on a
      ‘probed.pomp’ object, the new parameters were ignored.  This
      bug has been fixed.

    • New ‘spy’ method displays the C snippet file(s) associated
      with a ‘pomp’ object.

    • The long-deprecated ‘seed’ argument to ‘bsmc’ and ‘bsmc2’ has
      been removed.

    • More work to obviate warnings generated by T. Kalibera's
      latest ‘rchk’ checks.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_7:

    • Messages from the compiler resulting from attempts to compile
      C snippets are now suppressed on all platforms except in case
      of failure.  Setting ‘verbose=TRUE’ forces display of these

    • Source codes have been revisited to obviate warnings
      generated by T. Kalibera's latest ‘rchk’ checks.

    • Fix a minor bugs in ‘spect’.

    • Improve test coverage.

    • ‘spect.match’ has been refactored, with small changes to the

    • ‘pomp’ now handles specification of workhorse functions
      (i.e., ‘rprocess’, ‘dprocess’, ‘rmeasure’, ‘dmeasure’,
      ‘initializer’, ‘skeleton’, ‘rprior’, ‘dprior’,
      ‘fromEstimationScale’, ‘toEstimationScale’) as ‘NULL’ more

    • Fix bug in systematic resampler when ‘np != nw’.

    • Fix bug in ‘conv.rec’ when only one parameter is requested.

    • Correct and improve documentation for ‘conv.rec’.

    • ‘coef<-’ can now take a list of parameters: it simply applies
      ‘unlist’ to turn the list into a numeric vector.

    • Simplify ‘conv.rec’.

    • In ‘pfilter’, ‘Np’ is now a required argument unless ‘params’
      is specified as a matrix of particles.  Thanks to Carles
      Breto for catching the unintended behavior.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_6:

    • The bug reported in issue #57 has been fixed.

    • A bug arising when building pomp objects with Csnippets in
      certain Windows configurations has been fixed.

    • Issue #56, in which covariate names are discarded when
      coercing a pomp object to a data frame, has been fixed.
      Thanks to Eamon O'Dea for reporting this bug.

    • More informative error messages are given when ‘bake’ or
      ‘freeze’ return ‘NULL’.  In such a case, these functions now
      generate a warning and return a character-string message,
      with attributes.

    • Improve documentation of ‘traj.match’, in response to Issue

    • A new facility, ‘gillespie.hl.sim’, allows implementation of
      Gillespie's algorithm for exact stochastic simulation of
      continuous-time Markov processes via a streamlined C snippet

    • The old facility for Gillespie simulations, ‘gillespie.sim’,
      now accepts C snippets for faster calculation of event rates.

    • The old ‘skeleton.type’ and ‘’ arguments of
      the ‘pomp’ constructor, which have generated error messages
      since version 1.9.2, have been done away with completely.

    • Eamon O'Dea identified a bug (Issue #54) occurring when
      ‘pomp’ is called with a single-row data frame.  This has been
      fixed using his contributed patch.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_5:

    • A new ‘dmultinom’ function is provided in ‘pomp.h’.  This
      provides the probability distribution function for the
      multinomial distribution.

    • Improved tests.

    • Fixed bugs emerging in R-devel due to refactoring of
      underlying R source code.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_4:

    • Eamon O'Dea pointed out that the bug in ‘gillespie.sim’,
      addressed by version 1.12.3, was not completely fixed.  This
      problem has now been resolved.  In addition, covariates are
      now guaranteed to be evaluated at least once per observation

    • The new argument ‘hmax’ to ‘gillespie.sim’ allows the user to
      specify the maximum step size that will be taken before
      covariates are evaluated.

    • The K-leap method has been removed.  Its accuracy is low on
      test problems and it is difficult to make it compatible with
      the pomp paradigm.  In particular, it does not readily
      accomodate time-varying covariates in a sensible way, nor
      does it lend itself to simulations at pre-specified times.

    • ‘bspline.basis’ and ‘periodic.bspline.basis’ now take an
      optional non-negative integer argument ‘deriv’.  When ‘deriv
      > 0’, the order-‘deriv’ derivative of each basis function is

    • A new function, ‘periodic_bspline_basis_eval_deriv’, has been
      added to the C API.  This function gives access, at the C
      level, to evaluation of the derivatives of periodic

    • Upgrade license to GPL version 3.

    • Fix buffer-flow problem identified by ‘valgrind’.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_3:

    • Fix bug found by Eamon O'Dea in ‘gillespie.sim’.

    • Fix bug in ‘onestep.sim’.

    • The Ricker example has a new parameter, c, which scales the
      (unobserved) population size.  By default, c=1, so that the
      behavior is as before.

    • Improved error trapping.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_2:

    • Some changes have been made to the use of random numbers in
      some codes (the stochastic simulations in ‘gillespie.sim’ and
      the resampling in the particle-filtering codes).  These
      changes will mean that calculations performed before will not
      be reproducible in perfect detail, but will be statistically

    • Minor changes in C codes to obviate warnings generated by T.
      Kalibera's ‘rchk’ checks.

    • The rare and fascinating “Bug of St. Patrick” has been fixed.
      Thanks to Carles Breto for finding the bug and helping to
      isolate it.

    • More informative error messages are generated when ‘dmeasure’
      returns a non-finite likelihood in any of the particle
      filtering codes.

    • Some streamlining of codes.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_1:

    • Callable routines are now registered.

    • The functions ‘bake’, ‘stew’, and ‘freeze’ now preserve
      information about the system time used in computation as an
      attribute of the returned object.  In addition, these
      functions store information about the RNG settings.

    • Some documentation improvements, courtesy of Sebastian Funk.

    • Various documentation improvements.

    • More verbosity is provided with ‘verbose=TRUE’.

    • Better handling of ‘pomp’'s ‘times’ argument.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._1_0:

    • New ‘logLik’ method for ‘pmcmcList’ objects.

    • The deprecated option to supply a matrix or numeric vector as
      the ‘data’ argument to ‘pomp’ have been removed and an error
      is now generated.  ‘data’ must be provided as either a data
      frame or an object of class ‘pomp’.  See ‘?pomp’ for details.

    • The deprecated ‘skeleton.type’ and ‘’
      arguments to ‘pomp’ have been removed.  Using these arguments
      will now generate an error message.  The correct method of
      specifiying the deterministic skeleton is now explained in
      the help pages (‘?pomp’).

    • Source code fixes to eliminate warnings during compilation.

    • Improved test suite.

    • Minor documentation correction.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._9:

    • During particle filtering, when non-finite ‘dmeasure’ values
      are generated, an error is generated and the offending
      parameters, states, data, and time are reported.  In methods
      that use parameter transformations (‘transform=TRUE’), the
      reported parameters were on the transformed (estimation)
      scale, which can be confusing.  The error message now gives
      the parameters on the natural (model) scale.

    • Modified ‘src/ssa.c’ to fix UBSAN errors.

    • C codes have been modified to take advantage of changes to
      the R API (R SVN REVISION 71180).

    • A bug in ‘mif2’ arising when filtering fails in the final
      timestep has been fixed.  In this case, when all particles
      are deemed inconsistent with the data, we use an unweighted
      mean (with a warning) in place of the default weighted mean.

    • C codes have been modified to take advantage of changes to
      the ‘R’ API (R SVN REVISION 71180).

    • Modified ‘src/ssa.c’ to fix UBSAN errors.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._8:

    • There is a new option, ‘shlib.args’, to ‘pomp’.  This allows
      arbitrary options to be passed to the compiler when C
      snippets are used.  In particular, one can link a library of
      C snippets against a precompiled static library.

    • In Sobol' sequence generation (‘sobolDesign’,
      ‘profileDesign’), we now use the suggestion of Joe & Kuo
      (2003) to choose a better sequence start point.

    • The generation of Sobol' sequences (‘sobolDesign’,
      ‘profileDesign’) is now performed using the ‘NLopt’ routines
      written in C instead of the original TOMS 659 FORTRAN codes.
      The copyright notices are located in the source code.

    • The stochastic simulation algorithms underlying the Gillespie
      and K-leap methods (‘gillespie.sim’, ‘kleap.sim’) have been
      refactored in C.  In addition, errors due to accumulation of
      round-off error have been repaired.  The result will be more
      accurate, but somewhat slower when there are a very large
      number of reactions.

    • Fixed a bug in ‘plot’ on ‘pomp’ objects with more than 10
      variables to plot.

    • Refactored ‘’ for greater stability.

    • Modified the “dacca” example to use C snippets.

    • Made Sobol' codes more robust.

    • Modified the demos to use best practices.

    • Further improvements to the test suite.  Code coverage is now

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._7:

    • Improvement of the test suite and of error messages.

    • Improve the ‘show’ and ‘print’ methods for ‘pomp’ objects.

    • Some internal refactoring.

    • Improve error messages for missing basic components.

    • Fix typos in one of the help-page examples.

    • Several obscure bug-fixes.

    • Add some references.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._6:

    • Major revisions to the package help pages and manual.  The
      separate documentation on C snippets and process-model
      plugins has been merged into the main ‘pomp’ help page, which
      now has comprehensive instructions on building a ‘pomp’

    • Update to the package help page.

    • New methods for the Ensemble Kalman Filter (‘enkf’) and
      Ensemble Adjustment Kalman Filter (‘eakf’) have been added to
      the package.

    • There is a new plugin for ‘rprocess’ called ‘kleap.sim’.
      This implements the so-called “K-leap method” of Cai & Xu

    • Major overhaul of error handling system and to error and
      warning messages.  Many more errors are now trapped and
      reported with more informative messages.

    • The matrix and numeric vector options for the ‘data’ argument
      to ‘pomp’ are now deprecated and will be removed in a future
      release.  In calls to ‘pomp’, ‘data’ should be either a data
      frame or a ‘pomp’-class object.

    • In ‘mif2’, it is now required that ‘Nmif>0’.

    • Redundant ‘bootstrap’ argument to ‘nlf’ has been removed.

    • Many improvements to the test suite to obtain better code

    • Fixed bugs that might arise in rare circumstances in
      ‘simulate’ and ‘eulermultinom’ functions.

    • Fixed a bug in ‘pompExample’.

    • Fixed several small, rare bugs found as a result of improved

    • Fixed bug in specification of skeleton in pompExamples.

    • ‘pomp’ is no longer an S4 method.  Its new status as an
      ordinary function abbreviates and consolidates the code and
      simplifies the documentation.

    • A bug restricting access in C code to ‘userdata’ has been

    • Fixed bug in ‘pompExample(...,show=TRUE)’.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._5:

    • A better interface for specifying a model's deterministic
      skeleton is provided.  One specifies
      ‘skeleton=map(f,delta.t)’ for a discrete-time skeleton (a
      map) and ‘skeleton=vectorfield(f)’ for a continuous-time
      skeleton (a vectorfield).  The old arguments ‘skeleton.type’
      and ‘’ are deprecated and will be removed in a
      future release.

    • The ‘pfilter’ help page has been improved.  Specifically, the
      discussion of filtering failures is better.

    • Miscellaneous improvements to the help pages.

    • ‘mif2’ no longer computes filter means.

    • The new argument ‘show’ of ‘pompExamples’ allows one to
      display the example code instead of executing it.

    • The minimum version of R supported is now 3.1.2.

    • ‘init.state’ now has the optional argument ‘nsim’.  Using
      this, one can request multiple initial state vectors per
      parameter vector.

    • ‘pfilter’ now uses less memory when it is asked to run at a
      single point in parameter space.

    • A bug associated with the ‘’ argument to ‘mif2’ on
      Windows platforms has been fixed.

    • The ‘method="mif2"’ option to ‘mif’ has been removed.  Use
      ‘mif2’ instead.

    • The ‘particles’ method (rarely if ever used), has been
      removed to streamline the ‘mif’ codes.

    • The ‘method="mif2"’ option to ‘mif’ is now deprecated.  It
      will be removed in a future release.  Use ‘mif2’ instead.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._4:

    • Following the publication of the Journal of Statistical
      Software announcement paper, the ‘CITATION’ has been modified
      to include the appropriate citation.  Please use
      ‘citation("pomp")’ to learn about how to cite ‘pomp’

    • ‘conv.rec’ on the results of a ‘mif2’ computation now play
      nicely with ‘reshape2::melt’.

    • It is now possible to direct ‘pomp’ to place ‘Csnippet’ codes
      in a specified location.  This is accomplished via the new
      ‘cdir’ and ‘cfile’ arguments to ‘pomp’.

    • When several concurrent R processes attempt to simultaneously
      compile ‘Csnipet’ code from copies of a ‘pomp’ object on the
      same machine, a race condition exists.  This release fixes
      this by ensuring that ‘Csnippet’ codes are written and
      compiled in a process-specific directory.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._3:

 This release removes several long-deprecated features.

    • The ‘seed’ argument to ‘pfilter’ has been removed.  Use
      ‘freeze’ to obtain similar functionality.

    • The redundant ‘pars’ argument to ‘mif’ has been removed.
      Names of parameters to be estimated are taken from the
      nonzero entries of ‘’.  Initial-value parameters are
      designated using the ‘ivps’ argument.

    • The old ‘parameter.transform’ and ‘parameter.inv.transform’
      arguments to ‘pomp’ have been removed.  They were superseded
      by the arguments ‘fromEstimationScale’ and
      ‘toEstimationScale’ in version 0.65-1.

    • Some internal changes to ‘mif2’ by C. Breto, in support of
      panel methods under development.

_C_h_a_n_g_e_s _i_n '_p_o_m_p' _v_e_r_s_i_o_n _1._2:

    • Bug fix: for POMPs with a scalar state variable, the
      ‘filter.mean’, ‘pred.mean’, and ‘pred.var’ methods dropped
      the singleton dimension of the respective arrays, in conflict
      with the assumptions of certain ‘plot’ methods.  This
      resolves issue #3.

    • Documentation improvements.  Specifically, the details of how
      step-sizes are chosen in the ‘euler.sim’,
      ‘discrete.time.sim’, and ‘onestep.sim’ plugins has been
      spelled out explicitly.  Also, incompleteness in the
      ‘sannbox’ documentation has been corrected.

    • Provide ‘filter.traj’ method for ‘pmcmcList’ objects.

    • Fixed a bug in ‘mif’ and ‘mif2’ when
      ‘cooling.type="hyperbolic"’ and ‘cooling.fraction.50=1’.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


3.6 by Aaron A. King, 2 months ago

Report a bug at

Browse source code at

Authors: Aaron A. King [aut, cre] , Edward L. Ionides [aut] , Carles Breto [aut] , Stephen P. Ellner [ctb] , Matthew J. Ferrari [ctb] , Sebastian Funk [ctb] , Steven G. Johnson [ctb] , Bruce E. Kendall [ctb] , Michael Lavine [ctb] , Dao Nguyen [ctb] , Eamon B. O'Dea [ctb] , Daniel C. Reuman [ctb] , Helen Wearing [ctb] , Simon N. Wood [ctb]

Documentation:   PDF Manual  

Task views: Differential Equations, Time Series Analysis

GPL-3 license

Imports stats, graphics, digest, mvtnorm, deSolve, coda, reshape2, magrittr, plyr

Depends on methods

Suggests ggplot2, knitr, tidyr, dplyr, subplex, nloptr

System requirements: For Windows users, Rtools (see

Imported by DTAT.

Depended on by spatPomp.

Suggested by CollocInfer, epimdr, spaero.

See at CRAN