NEWS  R Documentation 
News for package ‘pomp’
Changes in pomp version 5.10
The rprocess plugin
onestep
now always takes exactly one step to get from one observation time to the next, even when the interval between them is zero. That is, ifP
is a ‘pomp’ object with an rprocess built usingrprocess=onestep(f)
,t0=timezero(P)
, andt=time(P)
, thenf
will be called exactly once for the interval (t0
,t[1]
) and once for each of the intervals (t[i1]
,t[i]
),i=2,...,length(t)
.
Changes in pomp version 5.9
To add additional elements for use by the basic model components (i.e., “userdata”), the
userdata
argument should now be used. The old behavior will still work, but will generate a warning. In a future release, this will become an error.Internally, pomp codes no longer include ‘Rinternal.h’.
A bug in covariatetable extrapolation for the case
order="constant"
has been fixed.A new experimental function
repair_lookup_table
is provided to help eliminate unnecessary warnings about extrapolation.Functions with names that include dots (
.
), which have been defunct since version 4.7, have been expunged.
Changes in pomp version 5.8
The
err()
andwarn()
Clevel macros have been redefined to forestall problems that would arise when these macros are included in C++ code under forthcoming versions of R.More changes in C codes to forestall issues detected by rchk.
Minor corrections to documentation.
Changes in pomp version 5.7
Minor corrections to documentation.
Changes in some C codes to avoid issues detected by rchk.
Fixed bug in
wquant
introduced by changes inpbeta
with R version 4.3.3.
Changes in pomp version 5.6
Minor corrections to documentation.
Clevel functions
set_pomp_userdata
andunset_pomp_userdata
are no longer exported.
bspline_eval
is no longer exported.
Changes in pomp version 5.5
There is now access to ordinary Bspline basis functions (and their derivatives) at the C snippet level. It will still almost always be preferable to construct a spline basis once and pass it to pomp functions as part of a
covariate_table
, but this functionality may occasionally be useful.
bspline_eval
is now deprecated as part of the pomp C API. The formatting of some printed messages has been modified to forestall warnings in the latest Rdevel.
Stateful objective functions (class ‘objfun’) now behave as if they are ‘pomp’ objects.
Clevel functions
set_pomp_userdata
andunset_pomp_userdata
are deprecated. The latter now generates a warning.
Changes in pomp version 5.4

stew
now returns timing information by default. The spurious warnings associated with NULL
userdata
have been eliminated.
Changes in pomp version 5.3
The new option
on_load
allows one to specify a C snippet that will be executed at the time the C snippet library is loaded.Internally, the
userdata
are made available via calls topompLoad
rather than within each call to a pomp workhorse.The data frames returned by
cond_logLik
andeff_sample_size
whenformat="data.frame"
have been improved. In particular, they contain (as variabletime
) the times (rather than the index of the time vector as before).Changes to the report generated by
spy
.Some documentation improvements.
The manual pages have been reorganized, with improved crosslinking.
A bug in
filter_traj
etc. arising when not all state variables have names was fixed.This version adds the new basic component
dinit
for evaluating the probability density function of the initialstate distribution. There is a corresponding workhorse function,dinit()
.The constructor
pomp
now takes the optional argumentnstatevars
, which can be used to increase the dimension of the latent statevectors created byrinit
. By default,nstatevars = length(statenames)
, andnstatevars
can only be used to increase, not to decrease, the dimension of the latent state process. Moreover,nstatevars
has no effect if therinit
basic component is furnished as an R function.Name checking on internallycreated vectors and arrays is less strict than previously. In particular, it is possible to have variables without names (i.e.,
""
).
reulermultinom
now returnsNA
rather thanNaN
, in keeping with the behavior ofrbinom
. Thanks to John Drake for calling attention to this issue.
Changes in pomp version 5.2
A bug in
stew
resulting in namespace conflicts has been repaired.We no longer import directly from tidyverse functions. This reduces the list of packages upon which pomp depends from 20 to 5. This does introduce a dependency on the data.table package.
Changes in pomp version 5.1
When the archive directory does not exist,
bake
andstew
now create it.We no longer import from plyr.
The
dimnames
attributes of various arrays that appear in pomp, including arrays of observables, state variables, parameters, covariates, and so on, have been made uniform. In particular, when a dimension of an array corresponds to variables with different names, this dimension is itself named “name”. Previously, its name was sometimes “variable” and sometimes “parameter”. This change is meant to streamline interaction with the tidyverse.Some minor bugfixes.
Changes in pomp version 4.7
Functions with names.that.contain.dots that have been deprecated since version 4.5.1 are now defunct. Attempts to use such functions will generate an error with a message indicating the replacement function.

plot
now removesNA
. Better handling of ‘listie’s (lists of ‘pomp’ objects).
New
concat
function to turn lists of ‘pomp’ objects into ‘listies’.Bug fix in
filter_traj
applied to ‘pfilterList’ and ‘pmcmcList’ objects.The
states
andobs
methods take a new optional argument,format
. Settingformat="data.frame"
causes the method to return the states or data in a convenient dataframe format.When
melt
is applied to a list, the identifier variable is now “.Lx
”, wherex
denotes the level. This applies whenas.data.frame
is used to coerce a list of ‘pomp’ objects, and whensaved_states
is used to extract the particles from a list of ‘pfilterd_pomp’ objects.
Changes in pomp version 4.6

logmeanexp
can now compute the effective sample size, which can be useful in determining the reliability of its estimate. To do so, setess=TRUE
in a call tologmeanexp
. 
logmeanexp
now returns a fullynamed vector when eitherse=TRUE
oress=TRUE
. A new
format
argument has been added to the extractor functionscond_logLik
,eff_sample_size
,filter_mean
,filter_traj
,forecast
,pred_mean
,pred_var
, andsaved_states
. This allows the user to extract the relevant elements in dataframe format if desired.
pomp no longer depends on the superseded package reshape2. The
melt
function for converting arrays and nested lists into data frames is accordingly no longer reexported from reshape2. It has been replaced by a stricter version ofmelt
. The magrittr pipe
%>%
is no longer reexported by pomp: use the native R pipe>
instead.The package now requires R version 4.1 at least.
All pomp functions with names.that.contain.dots have been deprecated in favor of functions in ‘snake_case’. This is to avoid anticipated problems with CRAN checks, which (falsely) assume that certain functions with dotted.names are S3 methods. From this point, no exported pomp function has such a name.
The
dimnames
attributes for some of the arrays computed inpfilter
andpmcmc
computations have changed. In particular, whereas in previous versions, thetime
dimension was given names that were character strings composed of decimal representations of the time (difficult to work with and prone to roundoff error), thetime
dimension now is not given names.A bug that resulted in
gompertz
giving different simulations on Windows machines has been fixed.
Changes in pomp version 4.5
A bug in trajectory computation for maps (discretetime dynamical systems) has been fixed. Thanks to Felicia Magpantay for noticing it and tracking it down.
Minor documentation improvements.
The weighted quantile function
wquant
now uses the HarrellDavis estimator instead of the type7 estimator used previously. This eliminates bugs associated with noninteger weights.It is now possible to retrieve the weighted particles computed in the course of a
pfilter
computation. To accomplish this, setsave.states="weighted"
in the call topfilter
and retrieve the particles and their weights usingsaved.states
. Previously, one could obtain only the unweighted particles.Some documentation improvements.
Changes in pomp version 4.4
The new function
wquant
computes weighted quantiles.The precise order in which the
pmcmc
function computes prior and likelihood of furnished and proposed parameters has changed slightly. This prevents proposals that are incompatible with the prior from being passed topfilter
and forestalls an associated class of errors. A consequence of this change,pmcmc
computations using the new version will differ very slightly from previous computations, even with the RNG seed fixed at its previous values.There is now a C interface to the
bspline_eval
function. See the pomp C API documentation for details.The
bspline.basis
function now takes the optional argumentrg
which allows one to specify the range over which the basis will be constructed. By default, this isrange(x)
, which agrees with the behavior in earlier versions.Documentation improvements.
Changes in pomp version 4.3
The archiving functions
bake
andstew
now use a slightly less exacting comparison of the expression,expr
, they are furnished. NB: Runningbake
orstew
with archives created by earlier versions may result in recomputation.The
time
method has been extended topompList
and related objects.All workhorse functions except
partrans
have new default arguments.Some documentation improvements.
The archiving functions
bake
andstew
now take the argumentdir
, which is the directory holding the archive files. By default, this is the current working directory or the value of the global optionpomp.archive.dir
.A new global option,
pomp_archive_dir
, can be used to specify the locations of archive files used bybake
andstew
.Documentation repair of issue flagged by Kurt Hornik (9 June 2022).
Changes in pomp version 4.2
Minor changes, invisible to the user.
Minor changes to the C codes to keep up with Rdevel.
Minor changes in the implementation of
bake
andstew
.
Changes in pomp version 4.1
Change in the names of the variables returned by
as.data.frame
applied to a ‘pfilterd.pomp’ object.Fixed bug found by Jesse Wheeler and Ed Ionides, to do with 'simulate()' with 'include.data=TRUE'.
It is now possible to plot lists of ‘pomp’ and ‘pomp’derived objects using a single call to
plot
.The
rbetabinom
anddbetabinom
functions, long present as part of the C API, are now available as R functions.The SIR examples
sir()
andsir2()
now use a negative binomial measurement model.
parmat
can now take a data frame of parameters and convert it into a matrix suitable for furnishing to theparams
argument of any pomp function. It is now possible to change the parameters in an ‘objfun’ (objective function) object using
coef(object)<value
.
parmat
now takes an optional argument,names
, which allows the user to name the parameter sets. Independent realizations of the stochastic processes modeled in pomp are now distinguished by different values of
.id
. This behavior is now uniform throughout.
bake
andstew
now send messages instead of warnings when they recompute an archive due to a change in code or dependencies. It is now possible to change the parameters in an ‘objfun’ (objective function) object using
coef(object)<value
.The ensemble adjusted Kalman filter (
eakf
) has been refactored. It now makes use of theemeasure
andvmeasure
basic components to compute an approximation of the linear relationship between the latent state and the observed variables.The
forecast
method now works forpfiterd_pomp
objects (i.e., results ofpfilter
,pmcmc
, ormif2
computations).Two new basic model components have been introduced. These are:
 emeasure,
which computes the expectation of the observable variables conditional on the latent state;
 vmeasure,
which computes the covariance matrix of the observables given the latent state.
These are used by the newly refactored ensemble Kalman filter,
enkf
.The basic (linear, Gaussian) Kalman filter is now available as
kalmanFilter
.Computation of Monte Carloadjusted profile likelihood is now facilitated by the new
mcap
function.The default returnvalue format for
trajectory
now matches that ofsimulate
.
Changes in pomp version 4.0
Version 4 contains a few changes that are not backward compatible.
These are all to do with the elementary function trajectory
, which computes trajectories of the deterministic dynamical skeleton.
See below for details.
The behavior of
trajectory
now fully conforms to the behavior of other pomp elementary functions. In particular, one can now add, remove, or modify basic model components in a call totrajectory
just as one can withsimulate
,pfilter
,probe
, etc. Before version 4, additional arguments totrajectory
(i.e., those passed via...
) were passed on to the ODE integrator in the case of continuoustime deterministic skeletons (i.e., vectorfields) and ignored in the case of discretetime skeletons (i.e., maps). As of version 4, in order to adjust ODE integrator settings it is necessary to use theode_control
argument oftrajectory
. This behavior matches that oftraj_objfun
.It is now possible to create a ‘pomp’ object from scratch using
trajectory
, together with a specification of the rinit and skeleton components. Prior to version 4, in order to do so, it was necessary to first create a dummy data set, then callpomp
, and then pass the resulting ‘pomp’ object totrajectory
. This can now be achieved in one call.The user now has the option, in a call to
trajectory
, to have the results returned as one or ‘pomp’ objects. In this regard, its behavior matches that ofsimulate
.
Changes in pomp version 3.6
The
states
andobs
methods now work for lists of ‘pomp’ objects (‘listies’).The workhorse function
flow
now has default arguments.The stateful objective function created by
traj_objfun
has been refactored so that it is independent oftrajectory
. This change is invisible to the user, but lays the groundwork for future changes intrajectory
.Stateful objective functions created by
traj_objfun
,nlf_objfun
,probe_objfun
, andspect_objfun
now have default arguments. In particular, the default is argument is a zerolength numeric vector. Calling such a function with no arguments is valid if and only if the objective function was created with no variables to estimate (emptyest
).Fixed bug in
rprior
arising with integervalued return vectors.Major improvements to the package manual, including richer crosslinking and better organization.
When
simulate
is called withformat="data.frame"
andinclude.data=TRUE
, the interpolated covariates are now included in the data frame that is returned.
Changes in pomp version 3.5

bake
takes a new option,timing
, that controls whether information on the timing is returned or merely stored. By default, this is set toTRUE
, though this default behavior may change in future. When they encounter an archive produced by an older version,
bake
andstew
now update the archive in the new format. Recomputation should never be triggered in this case: If recomputation is desired, delete the archive file.
bake
andstew
now archive a digest of the code inexpr
and on subsequent calls check to see if the archived version matches the current version. Thus, changes to the code automatically trigger recomputation. 
bake
andstew
take the new argumentdependson
. Using this argument, the user can specify objects upon which the computation depends. These should be passed as unquoted variables; if there are multiple dependencies, they can be passed usingc
orlist
. Digests of these objects will be archived and checked against current values on subsequent calls. Thus, changing any dependency will automatically trigger recomputation. 
bake
now archives the information pertinent to thebake
call; this information is no longer returned along with the result of the computation (unlessinfo=TRUE
). Similarly,stew
stores a list, “.ingredients”, in the file it creates. In thestew
case, unlike all the other objects that are created byexpr
, this list is not by default loaded into the calling environment (e.g., the user's workspace). It will be loaded if theinfo
flag is set toTRUE
. 
freeze
no longer stores the details of the RNG seed and kind as an attribute of the returned object. Fix bug in
bsmc2
arising when some particles have zero likelihood. This is Issue #152. Thanks to HolaKwame Adrakey for reporting it.It is now possible to call
partrans
directly on an objective function, such as those created bytraj_objfun
,nlf_objfun
,probe_objfun
, orspect_objfun
.
Changes in pomp version 3.4
The package manual and help pages has been streamlined.
The
mif2
diagnostic plots have been made more flexible.Some deprecated functions have been removed. These include
cond.loglik
,sliceDesign
,runifDesign
,sobolDesign
, andprofileDesign
, which have been replaced bycode.logLik
,slice_design
,runif_design
,sobol_design
, andprofile_design
, respectively.A bug in
rgammawn
has been fixed.
Changes in pomp version 3.3
The pomp C API has been expanded a bit, to facilitate other packages' linking to the pomp library.
Changes in pomp version 3.2
The help pages have been improved, with an description of the overall package structure and pages on basic model components, elementary algorithms, and estimation algorithms.
A note to Windows users on avoiding certain C snippet compilation errors has been added to the help pages.
The behavior of
profile_design
has changed. Previously, the same random (or subrandom) sequence was used for all nonprofile parameters. Now, for each profile slice, a distinct set of points is generated.
profileDesign
,sliceDesign
,runifDesign
, andsobolDesign
have been deprecated and will be removed in a future release. They are replaced byprofile_design
,slice_design
,runif_design
, andsobol_design
, respectively.
Changes in pomp version 3.1
A new
saved.states
method allows one to extract the saved states from a particle filter computation.All instances of
cond.loglik
have been changed tocond.logLik
, to remove a common source of typographical error.A new sequential importance sampling algorithm has been implemented as
wpfilter
. This is a generalization of the algorithm inpfilter
in that it tracks the weights of the particles and allows the user to customize the resampling scheme.In
mif2
, the specification of particle numbers,Np
, has changed. WhenNp
is supplied as a function,Np(0)
is the requested number of particles at the beginning of the time series. The previous behavior was thatNp(1)
specified the requested number of particles. This behavior now matches that of the other particle filtering algorithms,pfilter
,bsmc2
, andpmcmc
.
bsmc2
can now accept a variable number of particles, as do the other particlefilter based algorithmspfilter
,pmcmc
, andmif2
. The internal
systematic_resample
function now allows the user to specify the number of samples desired. Previously, these were always equal to the number of weights supplied.As promised from version 2.4.1, the
tol
andmax.fail
arguments have been removed completely from all particlefiltering algorithms, includingpfilter
,pmcmc
,bsmc2
, andmif2
. See the pomp news blog (https://kingaa.github.io/pomp/blog.html) for more information.The longdeprecated functions
onestep.dens
,onestep.sim
,discrete.time.sim
,euler.sim
,gillespie.sim
,gillespie.hl.sim
,conv.rec
, andvalues
have been removed. These have been replaced as followsonestep.dens
direct specification of dprocess
componentonestep.sim
onestep
discrete.time.sim
discrete_time
euler.sim
euler
gillespie.sim
gillespie
gillespie.hl.sim
gillespie_hl
conv.rec
traces
values
as.data.frame
oras(x,"data.frame")
Trap error from nonfinite likelihoods in
pmcmc
.New test of
pmcmc
codes in ‘tests/issue109.R’.Trap error from missing accumulator variables in
trajectory
.
Changes in pomp version 2.8
As promised, the default value of
tol
in the particlefiltering algorithmspfilter
,pmcmc
,mif2
, andbsmc2
has been changed to zero. A warning continues to be issued iftol
is set to anything other than 0. In a future release, the option to choose a nonzero tolerance will be removed entirely.The Euler step size in
sir
is now adjustable.In traces and diagnostic plotting methods, the
nfail
variable (tracking numbers of filtering failures) has been dropped.
Changes in pomp version 2.7
Another documentation bug was fixed.
Changes in pomp version 2.6
A documentation bug, identified by K. Hornik, was fixed.
Changes in pomp version 2.5
In anticipation of forthcoming algorithmic changes, the
tol
andmax.fail
arguments ofpfilter
,bsmc2
,pmcmc
, andmif2
are now deprecated. A warning is issued iftol
is set to anything other than 0. In a future release, these options will be removed entirely: the behavior will be similar to that obtained in the present release by settingtol=0
.A new example illustrating the
accumvars
argument has been provided.Internal computations now use increased precision for means, variances, and certain calculations with likelihoods.
A new help page,
pomp_examples
, lists the various example datasets and pomp objects provided with the package.
Changes in pomp version 2.4
The source codes underlying specification of basic model components via R functions has been reworked to remove reliance on deep
PROTECT
stacks. Thanks to Thomas Kalibera for showing the way!A bug in the documentation for
filter.traj
, pointed out by Pierre Jacob, has been fixed.
Changes in pomp version 2.3
The C API for pomp is no longer explained only in comments in the “pomp.h” header file. It is now described and explained in the new C API vignette.
The new
pomp_cdir
global option allows one to set the directory holding C snippet files globally.A bug caused by reuse of the
cfile
argument has been fixed. Reuse now triggers an error, with an informative message.Some documentation improvements.
Changes in pomp version 2.2
A bug in
runifDesign
(and thereforeprofileDesign
whentype="runif"
) has been fixed.There are now
plot
methods for objects of classes ‘probe_match_objfun’ and ‘spect_match_objfun’.
Changes in pomp version 2.1
The
melt
function can now be applied to arbitrary ‘pomp’ objects.A new function,
runifDesign
allows construction of design matrices using samples from multivariate uniform distributions.The
profileDesign
function takes a new argument,type
, with two options:"sobol"
, the default, constructs the design usingsobolDesign
, as before."runif"
uses the newrunifDesign
function.A new example, comprising models and data for the 2014–2016 west African Ebola virus disease outbreak, is included. See
?ebola
for details.It is now possible to adjust the observation times and zerotime in the
sir
andsir2
examples. One can also change the default RNG seed used in generating the simulated data.The codes underlying the
rprocess
workhorse have been streamlined to obviate an unnecessary copy operation. As a result, the interface to therprocess
workhorse has been changed.The interface to the new
flow
workhorse has been changed to match.The new
flow
workhorse allows integration/iteration of the deterministic skeleton at arbitrary times from an arbitrary initial condition.When
coef
is applied to a ‘listie’, the result can be more usefullymelt
ed.The probenames returned by
probe.acf
andprobe.ccf
have changed.A bug, whereby the ‘coef’ method from other packages was masked, has been fixed.
Errors in the documentation have been corrected.
There is a new
as.data.frame
method for ‘listie’s.Some problems with the exposure of internal objects for package developers have been corrected.
The magrittr pipe operator,
%>%
, is now reexported.More examples have been included.
Minor changes to error messages.
The names of the ‘objfun’ methods have been changed to
probe_objfun
,spect_objfun
,traj_objfun
, andnlf_objfun
.The package directory structure has been modified to include a new ‘examples’ directory, which holds the examples used in the documentation.
The names of the ‘objfun’ methods have been shortened.
It is now permissible that the sequence of observation times (and sequences of covariate times) be merely nondecreasing sequences. Previously, pomp insisted on strictly increasing time sequences.
The default cooling schedule (
cooling.type
) inmif2
is now “geometric”, in contrast to “hyperbolic”, as before.
pomp now requires at least R version 3.5.
The
zeronames
argument has been renamedaccumvars
.In the course of ordinary work, one should never need to interact with the lowlevel
pomp
constructor function now.The
pompExample
function has been dropped. The various examples are now included as regular functions that construct ‘pomp’ objects.The
bbs
example has been dropped.One can now modify basic model components at (almost) any stage in a pipeline of pomp computations. All the toplevel inference functions, plus
probe
,pfilter
, andsimulate
now allow modification of basic model components.The
rprocess
pluginsonestep.sim
,discrete.time.sim
,euler.sim
,gillespie.sim
, andgillespie.hl.sim
have been renamedonestep
,discrete_time
,euler
,gillespie
, andgillespie_hl
, respectively. The old usage is available but deprecated.One can now call
simulate
on a model without reference to any data.The covariate table facility (
covariate_table
) now supports piecewise constant interpolation.The syntax with which one includes covariates via
covariate_table
has become more flexible. Specifically, the arguments tocovariate_table
are now evaluated sequentially, so that later ones can depend on earlier ones. Once evaluated, the covariates are bound columnwise into a single data frame.The manner in which one writes R functions to specify basic model components has been totally changed. Before, one wrote functions that took specific arguments such as 'x', 'params', and 'covars'. Now, one writes such functions with any or all state variables, observables, covariates, and/or time as arguments.

simulate
now returns more informative results when simulations from multiple parameter sets are simultaneously computed. Specifically, ifparams
has column names, these are used to identify the resulting simulations. Thus whenformat = "pomps"
(the default), the names of the resulting list will be constructed from the column names ofparams
. Likewise, whenformat = "arrays"
, the resulting arrays will have informative column names; Whenformat = "data.frame"
, the identifier variable will make use of the column names. The basic particle filter,
pfilter
, has a simpler mode of operation:params
should be a single parameter set only. That is, it is no longer possible to pass a matrix of parameters topfilter
.The LiuWest algorithm,
bsmc2
, has a simpler mode of operation:params
should be a single parameter set only: the SMC particles are drawn fromrprior
.The
as.data.frame
,states
, andobs
options forsimulate
have been done away with. One now chooses the format of the returned simulations via theformat
argument. When one simulates at multiple parameter sets, list names, arraydimnames
, or identifying variables in the output data frame help to correlate simulations with parameter sets.The
as.data.frame
argument totrajectory
has been removed in favor of a newformat
argument that allows one to choose between receiving the results in the form of an"array"
or a"data.frame"
.All the basic model components now have defaults.
The default
rinit
behavior remains as it was: it assumes the initial state distribution is concentrated at a point mass determined by parameters with “.0
” or “_0
” suffices.The default process model is “missing”: calls to
dprocess
andrprocess
will result in missing values (NA
).The default measurement model is “missing” as well.
The default prior is flat and improper: all calls to the default
dprior
result in1
(0
iflog = TRUE
, and all calls torprior
result inNA
.The default skeleton is missing.
The default parameter transformations remain the identity.
The
transform
argument present in many pomp algorithms has been removed. Parameter transformations are now automatically performed when appropriate. The default parameter transformation remains the identity.The old
probe.match
andtraj.match
functions have been removed. The new approach to parameter estimation based on numerical optimization involves constructing stateful objective functions. There are now three of these:traj.match.objfun
,probe.match.objfun
, andspect.match.objfun
.The documentation system has been thoroughly overhauled.
In
skeleton
, thet
argument has been replaced bytimes
, to make this uniform with the other workhorse functions.Covariates are now included using the
covariate_table
construction, passed via thecovar
argument topomp
. Thetcovar
argument is no longer used.Instead of providing separate
fromEstimationScale
andtoEstimationScale
arguments topomp
, one now provides a singlepartrans
argument constructed by means of the new functionparameter_trans
. In addition, references to “fromEstimationScale” and “toEstimationScale” have been abbreviated to “fromEst” and “toEst”, respectively, throughout the package.When writing C snippets for parameter transformations, the notation
T_p
refers to the value ofp
on the estimation scale. Thus, if parameteralpha
is to be logtransformed for estimation, thetoEst
snippet would contain the lineT_alpha = log(alpha);
and thefromEst
snippet would includealpha = exp(T_alpha);
.The
parameter_trans
function now takes optional argumentslog
,logit
, andbarycentric
, with names of parameters to be log, logit, and logbarycentric transformed, respectively.The
measurement.model
argument topomp
has been removed. It is now necessary to specify the measurement model directly usingrmeasure
and/ordmeasure
.The
initializer
is no longer referred to by that name. It is nowrinit
, since it draws from the distribution of the latent state at the initial time. The lowlevel functioninit.state
has been replaced byrinit
.The
conv.rec
method has been deprecated, replaced by the newtraces
method.The
euler.sir
example has been renamedsir
.The
gillespie.sir
example has been renamedsir2
.The
covmat
method can now be applied to aprobed.pomp
object. It returns the estimated covariance matrix of the probes.When
trajectory
calls on deSolve routines to numerically integrate a model vectorfield, more informative error messages are generated, and diagnostics are printed whenverbose = TRUE
.The
show
method applied to pomp objects is now quite terse. To obtain detailed information, thespy
method is available.The
spy
method now returns the information formerly displayed in a call toshow
, in addition to the C files associated with any C snippets.The use of
$
methods to access the slots of pomp S4 objects has now been removed. These classes are no longer exported (for the most part).The
transform
argument to theprobe.quantile
function has been removed (as it is entirely redundant!).The old and deprecated
mif
andbsmc
methods have been removed.
Changes in pomp version 1.19
The
obs
andstates
arguments ofsimulate
are deprecated and will be removed in a forthcoming release.The Clevel interface for
apply_probe_sims
has changed: the new argumentrho
must be the “package:pomp” environment.A bug in
pfilter
(and hencepmcmc
) whenfilter.traj=TRUE
was discovered and fixed. In the buggy version, the filter trajectory was sampled with incorrect weights.Timo Voipio contributed a pull request that traps the error resulting from
sannbox
being passed acandidate.dist
that is not a function.
show
andprint
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, usespy
. New (unexported)
solibs<
method allows developers of packages extending pomp to incorporate C snippets into object that contain ‘pomp’ objects.New
verbose
option intrajectory
gives diagnostic information from deSolve integration routines. Of course, this is pertinent only if the model skeleton is a vectorfield.Bug in the display of
istate
whendeSolve::ode
errors has been fixed.New
hitch
function facilitates construction ofpomp.fun
objects from R functions, C snippets, and links to external libraries.Native routines needed to access
pomp.fun
objects in C are now registered for use by other packages.
coef(object) < NULL
, whereobject
is of class ‘pomp’, erases any parameters stored inobject
. The
euler.sir
,gillespie.sir
,blowflies
,ricker
,bbs
,dacca
, andrw2
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 therprocess
component. Currently, there are five plugins available:onestep.sim
,discrete.time.sim
,euler.sim
,gillespie.sim
, andgillespie.hl.sim
.The new
hitch
function automates the building and linking of C snippets and R functions intopomp.fun
s.The handling of
dprocess
has changed. Theonestep.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 ofpartrans
have been dispensed with. The much more descriptive options ‘toEstimationScale’ and ‘fromEstimationScale’ remain.The C snippet compiling facilities have been thoroughly reworked.

onestep.dens
can now take aCsnippet
specification of the processmodel transition density.
Changes in pomp version 1.18
All inference functions can now take a list in the
start
orparams
arguments.When altering parameters in a call to
probe
on aprobed.pomp
object, the new parameters were ignored. This bug has been fixed.
mif2
,pfilter
,probe
,probe.match
, andprobe.match.objfun
can now gracefully handle a list in thestart
orparams
arguments. New
spy
method displays the C snippet file(s) associated with apomp
object.The longdeprecated
seed
argument tobsmc
andbsmc2
has been removed.More work to obviate warnings generated by T. Kalibera's latest
rchk
checks.
Changes in pomp version 1.17
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 messages.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 interface. 
pomp
now handles specification of workhorse functions (i.e.,rprocess
,dprocess
,rmeasure
,dmeasure
,initializer
,skeleton
,rprior
,dprior
,fromEstimationScale
,toEstimationScale
) asNULL
more consistently. 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 appliesunlist
to turn the list into a numeric vector. Simplify
conv.rec
.In
pfilter
,Np
is now a required argument unlessparams
is specified as a matrix of particles. Thanks to Carles Breto for catching the unintended behavior.
Changes in pomp version 1.16
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
orfreeze
returnNULL
. In such a case, these functions now generate a warning and return a characterstring message, with attributes.Improve documentation of
traj.match
, in response to Issue #57.A new facility,
gillespie.hl.sim
, allows implementation of Gillespie's algorithm for exact stochastic simulation of continuoustime Markov processes via a streamlined C snippet interface.The old facility for Gillespie simulations,
gillespie.sim
, now accepts C snippets for faster calculation of event rates.The old
skeleton.type
andskelmap.delta.t
arguments of thepomp
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 singlerow data frame. This has been fixed using his contributed patch.
Changes in pomp version 1.15
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 Rdevel due to refactoring of underlying R source code.
Changes in pomp version 1.14
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 interval.The new argument
hmax
togillespie.sim
allows the user to specify the maximum step size that will be taken before covariates are evaluated.The Kleap 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 timevarying covariates in a sensible way, nor does it lend itself to simulations at prespecified times.

bspline.basis
andperiodic.bspline.basis
now take an optional nonnegative integer argumentderiv
. Whenderiv > 0
, the orderderiv
derivative of each basis function is returned. 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 Bsplines.Upgrade license to GPL version 3.
Fix bufferflow problem identified by
valgrind
.
Changes in pomp version 1.13
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.
Changes in pomp version 1.12
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 particlefiltering codes). These changes will mean that calculations performed before will not be reproducible in perfect detail, but will be statistically equivalent.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 nonfinite likelihood in any of the particle filtering codes.Some streamlining of codes.
Changes in pomp version 1.11
Callable routines are now registered.
The functions
bake
,stew
, andfreeze
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
'stimes
argument.
Changes in pomp version 1.10
New
logLik
method forpmcmcList
objects.The deprecated option to supply a matrix or numeric vector as the
data
argument topomp
have been removed and an error is now generated.data
must be provided as either a data frame or an object of classpomp
. See?pomp
for details.The deprecated
skeleton.type
andskelmap.delta.t
arguments topomp
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.
Changes in pomp version 1.9
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.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.
Changes in pomp version 1.8
There is a new option,
shlib.args
, topomp
. 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 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.Fixed a bug in
plot
onpomp
objects with more than 10 variables to plot.Added the
shlib.args
option topomp
, allowing arbitrary options to be passed to the compiler when C snippets are used.Modified the “dacca” example to use C snippets.
Refactored
rw.sd
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 100%.
Changes in pomp version 1.7
Improvement of the test suite and of error messages.
Improve the
show
andprint
methods forpomp
objects.Some internal refactoring.
Improve error messages for missing basic components.
Fix typos in one of the helppage examples.
Several obscure bugfixes.
Add some references.
Changes in pomp version 1.6
Major revisions to the package help pages and manual. The separate documentation on C snippets and processmodel plugins has been merged into the main
pomp
help page, which now has comprehensive instructions on building apomp
object.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
calledkleap.sim
. This implements the socalled “Kleap method” of Cai & Xu (2007).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 topomp
are now deprecated and will be removed in a future release. In calls topomp
,data
should be either a data frame or apomp
class object.In
mif2
, it is now required thatNmif>0
.Redundant
bootstrap
argument tonlf
has been removed.Many improvements to the test suite to obtain better code coverage.
Fixed bugs that might arise in rare circumstances in
simulate
andeulermultinom
functions.Fixed a bug in
pompExample
.Fixed several small, rare bugs found as a result of improved testing.
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. Some minor improvements to error messages.
A bug restricting access in C code to
userdata
has been fixed.Fixed bug in
pompExample(...,show=TRUE)
.
Changes in pomp version 1.5
A better interface for specifying a model's deterministic skeleton is provided. One specifies
skeleton=map(f,delta.t)
for a discretetime skeleton (a map) andskeleton=vectorfield(f)
for a continuoustime skeleton (a vectorfield). The old argumentsskeleton.type
andskelmap.delta.t
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
ofpompExamples
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 argumentnsim
. 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
rw.sd
argument tomif2
on Windows platforms has been fixed.The
method="mif2"
option tomif
has been removed. Usemif2
instead.The
particles
method (rarely if ever used), has been removed to streamline themif
codes.The
method="mif2"
option tomif
is now deprecated. It will be removed in a future release. Usemif2
instead.
Changes in pomp version 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 correctly.
conv.rec
on the results of amif2
computation now play nicely withreshape2::melt
. It is now possible to direct
pomp
to placeCsnippet
codes in a specified location. This is accomplished via the newcdir
andcfile
arguments topomp
.When several concurrent R processes attempt to simultaneously compile
Csnipet
code from copies of apomp
object on the same machine, a race condition exists. This release fixes this by ensuring thatCsnippet
codes are written and compiled in a processspecific directory.
Changes in pomp version 1.3
This release removes several longdeprecated features.
The
seed
argument topfilter
has been removed. Usefreeze
to obtain similar functionality.The redundant
pars
argument tomif
has been removed. Names of parameters to be estimated are taken from the nonzero entries ofrw.sd
. Initialvalue parameters are designated using theivps
argument.The old
parameter.transform
andparameter.inv.transform
arguments topomp
have been removed. They were superseded by the argumentsfromEstimationScale
andtoEstimationScale
in version 0.651.Some internal changes to
mif2
by C. Breto, in support of panel methods under development.
Changes in pomp version 1.2
Bug fix: for POMPs with a scalar state variable, the
filter.mean
,pred.mean
, andpred.var
methods dropped the singleton dimension of the respective arrays, in conflict with the assumptions of certainplot
methods. This resolves issue #3.Documentation improvements. Specifically, the details of how stepsizes are chosen in the
euler.sim
,discrete.time.sim
, andonestep.sim
plugins has been spelled out explicitly. Also, incompleteness in thesannbox
documentation has been corrected.Provide
filter.traj
method forpmcmcList
objects.Fixed a bug in
mif
andmif2
whencooling.type="hyperbolic"
andcooling.fraction.50=1
.