pomp news blog
pomp version 1.12 released
19 April 2017
pomp version 1.12 is now available on CRAN and will make its way soon to a mirror near you.
This is strictly a bugfix release.
See the package NEWS for more details.
pomp version 1.11 released
01 March 2017
pomp version 1.11 is now available on CRAN.
This release introduces one new feature, fixes some bugs, and improves the documentation.
New feature
The functions bake , stew , and freeze now preserve information about the system time used in computation as an attribute of the returned object.
Another attribute stores information about the RNG settings used.
Other changes
 Some documentation improvements, including better documentation of the adaptive MCMC proposal (
mvn.rw.adaptive ), courtesy of Sebastian Funk.
 More verbosity is provided with
verbose=TRUE , especially during Csnippet building.
 Better handling of the
pomp times argument, avoiding some potentially buggy behavior.
 Internally, routines called by
.Call are now registered.
pomp version 1.10 released
23 November 2016
pomp version 1.10 is now available on CRAN.
This release removes some deprecated facilities and provides one new feature.
Deprecated facilities removed
 The deprecated options to supply a matrix or numeric vector as the
data argument to pomp have been removed and an error is now generated.
data must now be provided either as a data frame or as an object of class pomp .
See ?pomp for details.
 The deprecated
skeleton.type and skelmap.delta.t arguments to pomp have been removed.
Using these arguments will now generate an error message.
To specifying the deterministic skeleton, one now must use the skeleton=map() or skeleton=vectorfield() syntax.
This is explained in more detail in the help pages (?pomp ).
New feature
 There is now a
logLik method defined for pmcmcList objects.
See the package NEWS for more details.
pomp version 1.9
02 October 2016
pomp version 1.9 is now available on CRAN.
This release fixes several bugs.
Bug fixes
 During particle filtering, when nonfinite
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.
 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.
Please see the package NEWS for more details.
pomp version 1.8
31 August 2016
pomp version 1.8 is now available on CRAN.
This release introduces one new feature and fixes several bugs.
New feature
 The new
shlib.args option to pomp , allows one to specify arbitrary options to be passed to the compiler when C snippets are used.
Uservisible changes
 In Sobol’ sequence generation (i.e.,
sobolDesign , profileDesign ), we now use the suggestion of Joe & Kuo (2003) to choose a better sequence start point.
 The demos have been revised to show off current best practices.
Under the hood
 The generation of Sobol’ sequences (
sobolDesign , profileDesign ) is now performed using the routines written in C (from the NLopt library) 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 Kleap methods (
gillespie.sim , kleap.sim ) have been refactored in C.
In addition, errors due to accumulation of roundoff error have been repaired.
The result will be more accurate, but somewhat slower when there are a very large number of reactions.
 The
rw.sd facility for specifying randomwalk perturbations in mif2 has been refactored for greater stability.
 There have been many improvements to the test suite.
The code coverage is now 100%.
Bug fixes
 A bug in
plot on pomp objects with more than 10 variables to plot has been fixed.
 A bug in
gillespie.sim and kleap.sim due to accumulation of roundoff error has been repaired.
Please see the package NEWS for more details.
pomp version 1.7 is released
01 August 2016
pomp version 1.7 is now available on CRAN.
This is a bugfix and documentation upgrade.
Since version 1.6, I have continued to improve the handling of error messages and warnings.
Please continue to send examples of error messages that are uninformative or misinformative, along with the code that produced them, so I can trap those errors and improve the messages!
Please see the package NEWS for more details.
pomp version 1.6!
01 July 2016
pomp version 1.6 is now available on CRAN.
Lots of changes to report: big improvements in the documentation and in the error messages, lots of bug fixes, and some new features, too.
Improvements to the error handling system: War on useless error messages!
 I’ve given the whole errorhandling system a major overhaul.
Error messages “should” all now say where they come from.
This has been made possible by a massive improvement in the testing suite, which now has 99% code coverage.
However, in view of the wide range of uses to which pomp is put, I am certain that there are many error scenarios I have not foreseen.
 I hereby declare war on useless error messages!
But I can’t win without you: please send examples of error messages that are uninformative or misinformative, along with the code that produced them, so I can trap those errors and improve the messages!
Documentation improvements
 I’ve made major revisions to the package help pages and manual.
Of special note, the separate documentation on C snippets and processmodel plugins has been merged into the
pomp constructor help page, which now has comprehensive instructions on model implementation.
I’ve moved the C snippet instructions to the forefront, where they belong, and removed all the overly technical discussion of the very sophisticated options that are not encountered by most users.
Uservisible changes
 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.
 The redundant
bootstrap argument to nlf has been removed.
 In
mif2 , it is now required that Nmif>0 .
New features
 There is a new plugin for
rprocess called kleap.sim , which implements the socalled “Kleap method” of Cai & Xu (2007).
This is another way of accelerating the, usually painfully slow, exact Gillespie method for certain classes of continuoustime Markov processes.
The underlying FORTRAN code is a contribution of Helen Wearing’s.
 There are new methods for the Ensemble Kalman Filter (
enkf ) and Ensemble Adjustment Kalman Filter (eakf ) methods.
These methods use rprocess but, since they assume normal measurement errors, make no use of rmeasure or dmeasure .
They should be considered experimental for the time being and subject to change that is not backwardcompatible.
I would very much appreciate hearing of your experience with them, along with any suggestions for improvements.
Bug fixes
The many changes to the testing suite turned up a number of bugs, which have been fixed.
These include:
 Bugs that arose in rare circumstances in
simulate and eulermultinom functions.
 A bug in
pompExample that caused the example code to be executed even when not desired.
 A bug in specification of the skeleton portion of some pomp examples.
 A bug restricting access in C code to
userdata .
Under the hood
 I’ve made many improvements to the test suite to obtain very high code coverage.
Although this helps, there is still room for improvement, and your help is requested to continue to improve the package.
pomp is no longer an S4 method.
It’s gone back to being a lowly R function, but its new status abbreviates and consolidates the code and simplifies the documentation, so it’s happy.
Please see the package NEWS for more details.
pomp version 1.5 released
31 May 2016
pomp version 1.5 is now available on CRAN.
Uservisible changes
 A better interface for specifying a model’s deterministic skeleton is provided.
In the
pomp function, specify skeleton=map(f,delta.t) for a discretetime skeleton (a map) and skeleton=vectorfield(f) for a continuoustime skeleton (a vectorfield).
The old arguments skeleton.type and skelmap.delta.t are deprecated and will be removed in a future release, at which point the new interface will be mandatory.
 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.
mif2 no longer computes filter means of parameters or state variables.
 The minimum version of \R supported is now 3.1.2.
New features
 The new argument
show of pompExamples allows one to display the example code instead of executing it.
init.state now has the optional argument nsim .
Using this, one can request multiple initial state vectors per parameter vector.
Documentation improvements
 The
pfilter help page has been improved.
Specifically, the discussion of filtering failures is more explicit and easier to find.
Bug fixes
 A bug associated with the
rw.sd argument to mif2 on Windows platforms has been fixed.
Under the hood
pfilter now uses less memory when it is asked to run at a single point in parameter space.
 The particle filtering algorithms underlying
mif and mif2 have now been completely separated from those underlying pfilter , a considerable simplification of the codes.
Please see the package NEWS for more details.
panelPomp package alpha release
24 May 2016
This alpha release provides tools for working with panel data using partially observed Markov processes.
In particular, this package allows one to model multiple, independent units (or individuals) for each of which one has (potentially multivariate) time series data.
The basic idea driving panelPomp is to apply to a collection of units some of the pomp package facilities for implementing POMP models, simulating them, and fitting them to time series data.
Regarding fitting, as of this release, only the iterated filtering (mif2 ) algorithm has currently been extended to the panelPomp panel setting.
The package is authored and maintained by Carles Breto.
See the panelPomp github site for information, source code, and downloads.
Journal of Statistical Software paper on pomp released!
29 March 2016
A Journal of Statistical Software paper describing pomp, its rationale, structure, and the inference algorithms it contains, has just been released.
The paper gives the inference algorithms in detail (including pseudocode), and demonstrates them on a few examples.
Its aim is to give an introduction pomp both as a scientific tool and as a platform for development of inference methods for POMPs.
Please cite this paper (do citation("pomp") in an R session to see how) when you use the package.
Coinciding with the paper’s release is a new version of pomp which is on CRAN now.
See the package NEWS for details on the new release.
Short course on pomp at SISMID, Seattle
15 March 2016
Ed Ionides and Aaron King will be teaching their short course on Simulationbased Inference for Epidemiological Dynamics for the second time this July at the 8th Summer Institute in Statistics and Modeling in Infectious Diseases (SISMID).
The course introduces statistical inference techniques and computational methods for dynamic models of epidemiological systems.
It will explore deterministic and stochastic formulations of epidemiological dynamics and develop inference methods appropriate for a range of models.
Special emphasis will be on exact and approximate likelihood as the key elements in parameter estimation, hypothesis testing, and model selection.
Specifically, the course will cover sequential Monte Carlo and synthetic likelihood techniques.
Students will learn to implement these in R to carry out maximum likelihood and Bayesian inference.
Knowledge of the material in Module 1 (Probability and Statistical Inference) is assumed.
Students new to R should complete a tutorial before the module.
The course is listed as Module 9 and will run from 1820 July 2016 at the University of Washington in Seattle.
Can I write a pomp for multivariate data?
01 March 2016
This is no problem.
The data you supply to pomp can contain multiple variables.
You simply refer to these variables by name in writing the rmeasure and dmeasure Csnippets .
See FAQ 3.2 for an example.
pomp version 1.3.1.1 released
29 February 2016
In version 1.3.1.1, several features that had long been deprecated have been removed.
These include:
 the
seed argument to pfilter .
Use freeze to obtain similar functionality.
 the redundant
pars argument to mif has been removed.
 the old
parameter.transform and parameter.inv.transform arguments to pomp .
In version 0.651, these were superseded by the fromEstimationScale and toEstimationScale arguments.
Please see the package NEWS for more details.
pomp version 1.2.1.1 released
24 September 2015
Version 1.2.1.1 has been released and is coming soon to a CRAN mirror near you.
This is a bugfix and documentation improvement release.
Please see the package NEWS for details.
pomp version 1.1.1.1 released
20 August 2015
Version 1.1.1.1 has been released and is coming soon to a CRAN mirror near you.
Since version 0.651, there have been many changes to pomp, including new features, some bug fixes, and algorithmic improvements.
Some of the highlights include:
New features

A fullfeatured version of IF2, an improved iterated filtering algorithm, is now available as mif2 .
This allows a more general structure for the random perturbations applied to parameters and is generally much more efficient and stable than IF1.
mif2 should be preferred to mif in almost all circumstances.

There is a new, adaptive MCMC proposal function, mvn.rw.adaptive that can be used in pmcmc and abc .
This can greatly increase the efficiency of these samplers.

By default, when Csnippet s are used, the source code is now stored internally to the pomp object.
When a pomp object is used, a test is first performed to see if the needed sharedobject file exists.
If it does not, the source code is written to a file in the session’s temporary directory, which is then compiled and loaded.
This feature allows pomp objects to be stored and reused across R sessions, including parallel sessions on a cluster.

A pomp object’s initializer can now be specified as a Csnippet .

pmcmc and pfilter now have the capability of saving filtered trajectories.
These can be extracted using the new method filter.traj .
The principal use will be in conjunction with pmcmc , where, upon convergence to the posterior, samples from the filtered trajectories are draws from the posterior Prob[x[1:T]  y[1:T]] .
Thanks to Sebastian Funk for initiating this development.

partrans and parmat have been jiggered to make them play better with reshape2::melt .

Measles data from England and Wales, kindly provided by Ben Bolker, are now included as ewmeas and ewcitmeas .

The new functions bake and stew faciliate storing expensive calculations for later retrieval in a transparent fashion.
These functions have arguments that allow the control of the RNG:
one can now set the state (and kind) of the RNG in a selfcontained fashion.

The new function freeze allows control of the RNG similarly.

There is now a coef method for mifList and mif2List objects.

In the pomp constructor, unrecognized arguments are stored internally for use with usersupplied model functions.
Now, an informative message is generated when this happens.
Previously, this silent behavior was a source of confusion for some users.
Bug fixes

logmeanexp had used a deltamethod estimate of the variance in log(mean(exp(x))) when se = TRUE .
This gave misleadingly small values when the variance in exp(x) was large.
The new logmeanexp uses a jackknife estimate of the variance.
This is still conservative, in that it is biased upwards, but is more robust.

The new covmat method, applied to abc , abcList , pmcmc , or pmcmcList objects, returns an inflated empirical covariance matrix suitable for use as input to the proposal generator mvn.rw .
Deprecated and defunct
 Some deprecated functionality has been removed:
 The deprecated
transform.params argument from nlf has been removed.
 The deprecated
pars and rw.sd arguments from abc and pmcmc have been removed.
 The deprecated
data.array method has been removed.

The seed argument of bsmc and bsmc2 has been removed.
Its use now generates a warning, stating that it has no effect.

The seed argument to pfilter is now deprecated and will be removed soon.
Equivalent functionality is provided via freeze , bake , or stew .
pompBuilder , which has not been actively maintained for some time due to the its being superseded by the Csnippet facility, is now no longer exported.
Improved "getting started" tutorial
09 August 2015
The Getting started with pomp tutorial has been substantially improved.
In particular, the tutorial now contains not only an example of the construction of a pomp object, but also
 the construction of a likelihood profile using parallelized
mif2 computations,
 the estimation of a posterior probability density using
pmcmc , including the use of an adaptive proposal distribution (mvn.rw.adaptive ) and the estimation of smoothed state trajectories (using filter.traj ).
Although the tutorial uses as its example a very simple data analysis (one in fact for which far simpler methods than the ones employed would be sufficient), the methods that it illustrates can be readily transposed for dealing with much more challenging problems.
Adaptive PMCMC proposals
07 August 2015
As of version 0.781, pomp includes facilities for adaptive proposals for particle MCMC (pmcmc ) and approximate Bayesian computation (abc ).
The new function mvn.rw.adaptive generates an multivariate normal randomwalk MCMC proposal function that adapts in scale and shape.
Thanks to Sebastian Funk for contributing a patch that spurred this development.
This functionality should be regarded as experimental and subject to change.
Please tell me about your experiences with it and contribute suggestions for improvement (or pull requests!) if you can.
Deprecated arguments removed
06 August 2015
A number of minor changes to pomp have been made since the last blog post.
Specifically, in pomp version 0.771:
 The deprecated
transform.params argument to nlf has been removed.
 The deprecated
pars and rw.sd arguments to abc and pmcmc have been removed.
 The deprecated
data.array method has been removed.
Use obs instead.
 The default value of
max.fail for pmcmc is now Inf .
That is, by default pmcmc will not halt (but will issue a warning) when filtering failure occurs (i.e., no particles are consistent with the data, as defined by the likelihood threshold tol ).
Bug fix for logmeanexp
29 July 2015
A bug in logmeanexp has been fixed.
Previously, when se = TRUE , this function used a deltamethod estimate of the variance in log(mean(exp(x))) which was accurate when exp(x) had small variance but had two problems:
 It was overly conservative, being an estimate of the standard error on each element of
x , as opposed to the standard error on log(mean(exp(x))) , as might have been expected
 It performed poorly when the variance in
exp(x) was large.
In particular, it returned misleadingly small estimates of the standard error in this case.
The new version uses a jackknife estimate of the variance in log(mean(exp(x))) .
Since the jackknife estimate is biased upward, it is still somewhat conservative, but is more robust when the variance of exp(x) is large.
Short course on "Simulationbased Inference for Epidemiological Dynamics"
28 July 2015
Ed Ionides and Aaron King taught a short course on this topic at the 7th Summer Institute for Statistics and Modeling for Infectious Disease at the University of Washington in Seattle this summer.
The materials include:
 an introduction to POMP models,
 essential of stochastic simulation with emphasis on the stochastic Euler algorithm,
 a tutorial on the theory and practice of the particle filter,
 an introduction to iterated filtering, and
 four cases studies illustrating pomp methods:
 understanding polio’s persistence, replicating some of the results in a recent PLoS Biology paper,
 revisiting measles dynamics in England and Wales to see what fullinformation methods reveal,
 a longitudinal study of sexual behavior changes that illustrates how pomp and
mif2 can be used to fit models to panel data, drawn from another recent paper, and
 a study showing illustrating model diagnostics and forecasting methods in the context of the recent Ebola outbreak in West Africa, again based on a recent paper.
These materials are available via the pomp website.
Pimp my pomp
27 July 2015
The new pimp my pomp page on the pomp wiki is for sharing advice and code.
The first entry contains some advice about maintaining a database of parameter points and likelihoods to facilitate exploration of complex likelihood surfaces.
Better caching
25 July 2015
When a pomp object is constructed using Csnippet s, the C source is compiled and dynamically loaded into the running R session.
Heretofore, this meant that one had to rebuild the pomp in each new R session.
Changes in version 0.751 now make it so that one can store and reuse pomp objects across R sessions.
This is achieved by storing the source code internally to the pomp object.
When a pomp object is used, a test is first performed to see if the needed sharedobject file exists.
If it does not, the source code is written to a file in the session’s temporary directory, which is then compiled and loaded.
This feature allows pomp objects to be stored and reused across R sessions.
To avoid collisions, the name of the file is constructed using a hash of its contents.
Reproducibility utilities
24 July 2015
On cooking shows, recipes requiring lengthy baking or stewing are prepared beforehand.
The bake and stew functions perform analogously, performing an R computation and storing the result in a named file.
If the function is called again and the file is present, the computation is not executed; rather, the results are loaded from the file in which they were previously stored.
Moreover, via their optional seed and kind arguments, bake and stew can control the pseudorandomnumber generator (RNG) for greater reproducibility.
After the computation is finished, these functions restore the preexisting RNG state to avoid side effects.
The freeze function doesn’t save results, but does set the RNG state to the specified value and restore it after the computation is complete.
Changes to the way certain functions manipulate the RNG seed
20 July 2015

The seed argument to pfilter is now deprecated and will be removed soon.
Using it generates a warning.
Equivalent functionality is provided via the new functions freeze , bake , or stew .

The seed argument of bsmc and bsmc2 has been removed.
Its use now generates a warning, stating that it has no effect.
Smoothed trajectories via PMCMC
10 July 2015
pmcmc and pfilter now have the capability of saving filtered trajectories. These can be extracted using the new method filter.traj .
The principal use will be in conjunction with pmcmc , where, upon convergence to the posterior, samples from the filtered trajectories will be draws from the posterior P[x[1:T]  y[1:T]], i.e., the smoothing distribution.
Thanks to Sebastian Funk for initiating this development!
Initializer can now be furnished as a Csnippet
11 June 2015
 A
pomp object’s initializer can now be specified as a Csnippet .
 In addition, the default initializer is now considerably faster.
Fullfeatured version of mif2 now implemented
05 June 2015
A fullfeatured version of IF2, an improved iterated filtering algorithm, is now available as mif2 .
This allows a more general structure for the random perturbations applied to parameters and is generally more efficient and stable than IF1.
mif2 should be preferable to mif in just about all circumstances.
pomp version 0.651 released to CRAN
01 June 2015
pomp version 0.651 is now available on CRAN and coming soon to a mirror near you.
This release contains many improvements.
Highlights include:

The documentation has been thoroughly revised.
Most of the help pages have been rewritten.
Of special interest is the help on writing Csnippets, which are now the preferred method of writing pomp objects.
Additionally, there is a new “Getting Started with pomp” vignette, accessible on the package website [http://kingaa.github.io/pomp].

A forthcoming Journal of Statistical Software article explains the package’s motivation and structure, details many of the inference algorithms currently implemented, and presents several examples of their use.
An uptodate version of this paper is available as a vignette, accessible via the package website.

pmcmc and abc can now use arbitrary symmetric proposal distributions via the proposal argument. In future, the requirement that proposals be symmetric should be relaxed. Two new functions, mvn.diag.rw and mvn.rw , generate suitable proposal functions. The first generates a multivariate normal randomwalk proposal with diagonal variancecovariance matrix; this duplicates the old behavior of both abc and pmcmc . The second, mvn.rw , corresponds to a multivariate normal randomwalk proposal with arbitrary variancecovariance matrix. Using these as a template, the user can easily construct alternatives.

In pmcmc and abc , the arguments pars and rw.sd are now unneeded (see above) and have been deprecated. Use of rw.sd will generate a warning and result in behavior equivalent to choosing proposal=mvn.diag.rw(rw.sd) . Use of pars will be ignored, with a warning.

The unfortunately named pomp arguments parameter.transform and parameter.inv.transform have been deprecated in favor of the more mnemonic toEstimationScale and fromEstimationScale . Using the old arguments will result in the same behavior as previously, but a warning will be generated.

The mif option cooling.fraction has been replaced by the more descriptive cooling.fraction.50 . Recall that this parameter specifies the fraction of randomwalk remaining after 50 mif iterations.

The var.factor argument to mif now has the default value 1. Since var.factor has long been a required parameter, this change is backward compatible.

The mif argument pars , which is redundant, is now deprecated. In a future release, this argument will be removed.

The longdeprecated cooling.factor option to mif has now been removed.

In nlf , the transform.params argument is now deprecated; use instead the transform argument, as in the other inference methods.

Compiler messages are now suppressed by default when Csnippets are used in construction of a pomp object. These can be enabled by setting options(verbose=TRUE) .

simulate has a new argument, include.data , that when used in conjuncion with as.data.frame=TRUE will include the actual data in the resulting data frame along with the simulations.

The pompExample function has been revamped. A search path for example directories is now stored in global option pomp.examples .

The new values method extracts simulated probe values on probed.pomp object.

The pomp.h header file is now better documented through comments.

A modified version of the Liu and West (2001) algorithm is included as bsmc2 .
pomp version 0.531 released
30 June 2014
pomp version 0.531 is now available on CRAN and coming soon to a mirror near you.
This is a major new feature release.
Some highlights are:
 It is now much easier to accelerate code through the use of compiled code.
pomp can now take snippets of C code directly as definitions of the various basic functions. This is accomplished through the use of a new Csnippet function. See the “sir” demo for a demonstration.

Features that facilitate multiple PMCMC and ABC chains have been added.
There are c methods to combine abc and pmcmc objects.
Running conv.rec on an abc , pmcmc , abcList , or pmcmcList object now produces coda mcmc and mcmc.list objects, respectively.
Diagnostic plots are produced by running plot on such objects.
Package coda is now a dependency of pomp.
This package provides various generic MCMC diagnostics.

The transform argument for pmcmc and abc has been removed.

nlf now returns an S4 object of class nlfd.pomp with a logLik method for extracting the log quasi likelihood and a $ method for extracting arbitrary components.
It thus behaves like pomp's other inference methods.

The package manual and tutorials are no longer included with the package source.
Instead, links are provided to the pomp website.
The package help pages have been revisited for accuracy and completeness.
pomp version 0.491 on CRAN
23 March 2014
pomp version 0.491 is now available on CRAN and coming soon to a mirror near you.
This is a new feature release. Some highlights are:

A new method, probe.match.objfun , constructs objective functions suitable for use in optimizers.

Inference methods based on optimization can now use the nloptr package, which provides a suite of optimization algorithms.

The new abc method implements Approximate Bayesian Computation for pomp models.

New inline C functions to_log_barycentric and from_log_barycentric are provided in pomp.h to facilitate logbarycentric transformations.
These have proven very useful in dealing with parameters constrained to sum to one (e.g., initial conditions of compartmental models).

Pomp objects now contain dprior and rprior slots.
These are used by the Bayesian methods (abc , bsmc , and pmcmc ).
The old hyperparams argument to these methods has been removed;
hyperparameters are now treated just as any others.

By default, pompBuilder now creates all files in the temporary directory.
Use the save=TRUE option to get the old behavior.

The vignettes are no longer available via the vignette() command but can be reached via the HTML documentation, in the doc directory, and online at http://kingaa.github.io/pomp
Subscribe to this newsfeed
