pomp version 5.6 has been released to CRAN and is making its way to a mirror near you.
This release contains changes to the C API and some documentation corrections.
set_pomp_userdata
and unset_pomp_userdata
are no longer exported.bspline_eval
is no longer exported.
B-splines are available in C snippets via the functions bspline_basis_eval
, bspline_basis_eval_deriv
, periodic_bspline_basis_eval
, and periodic_bspline_basis_eval_deriv
.
See the documentation of the pomp C API for details.pomp version 5.5 has been released to CRAN and is making its way to a mirror near you.
This release contains a few feature enhancements and some changes to the internals.
covar=covariate_table(...)
, but this functionality may occasionally be useful.bspline_eval
is now deprecated as part of the pomp C API.objfun
) now behave as if they are objects of class pomp
.
This makes it easier to work with them in plotting results, extracting information from the fitted model object, etc.set_pomp_userdata
and unset_pomp_userdata
have been deprecated and will be removed in a future release.
Using the latter now generates a warning that can be safely ignored.pomp version 5.4 has been released to CRAN and is making its way to a mirror near you.
This release contains just one feature enhancement, but it eliminates an annoying warning message on some platforms that inadvertently slipped into the last round of revisions.
The archiving function stew
now saves timing information by default.
A bug resulting in a spurious warning about conversion of NULL
elements that appears on some platforms has been fixed.
pomp version 5.3 has been released to CRAN and is making its way to a mirror near you.
This release contains a number of feature enhancements and a few bug fixes.
This version adds the new basic component dinit
for evaluating the probability density function of the initial-state distribution. There is a corresponding workhorse function, dinit()
.
The constructor pomp
now takes the optional argument nstatevars
, which can be used to increase the dimension of the latent state-vectors created by rinit
. By default, nstatevars = length(statenames)
, and nstatevars
can only be used to increase, not to decrease, the dimension of the latent state process. Moreover, nstatevars
has no effect if the rinit
basic component is furnished as an R function.
The data frames returned by cond_logLik
and eff_sample_size
when format="data.frame"
have been improved. In particular, they contain (as variable time
) the times (rather than the index of the time vector as before).
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.
This release includes some cosmetic changes to the report generated by spy
.
The manual pages have been reorganized, with improved cross-linking.
reulermultinom
now returns NA
rather than NaN
, in keeping with the behavior of rbinom
. Thanks to John Drake for calling attention to this issue.
Internally, the userdata
are made available via calls to pompLoad
rather than within each call to a pomp
workhorse.
Name checking on internally-created vectors and arrays is less strict than previously. In particular, it is possible to have variables without names (i.e., ""
).
filter_traj
etc. arising when not all state variables have names was fixed.pomp version 5.2 has been released to CRAN and is making its way to a mirror near you. This release contains one bug fix and some internal improvements. There should be no user-visible changes in pomp’s behavior.
Significant changes include:
stew
resulting in namespace conflicts has been repaired.pomp version 5.1 is now on CRAN and coming soon to a mirror near you. This release contains one change that may break existing code. See below for details.
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.bake
and stew
now create the archive directory if it does not already exist.
A warning is generated when this happens.Registration for SISMID short courses has now opened!
This year, Ed Ionides and Aaron King will teach a module on Simulation-Based Inference for Epidemiological Dynamics from 24 to 26 July 2023 in Seattle. Many other excellent modules are also available.
Go to the SISMID website for information and registration. Registration closes on 17 July 2023.
Version 4.7 of pomp is now on CRAN; download it from a mirror near you. In this release, some deprecated functions have become defunct.
As of version 4.6, all pomp functions with names.that.contain.dots were deprecated in favor of functions in snake_case.
That is, every function that had a dot (.
) in its name was replaced by a function where every dot is replaced by an underscore (_
).
These functions have now become defunct: using them will result in an error message that tells you what the replacement function is.
To help you adapt your code to the new naming convention, you can download and run the to_snake_case.R script. Its usage is straightforward:
to_snake_case()
function with the path to your new directory as its sole argumentplot
function now works when the data contain missing (NA
) values.Version 4.6 of pomp is now on CRAN and coming soon to a mirror near you. This release contains some changes to the user interface.
The biggest change from the user standpoint is that all pomp functions with names.that.contain.dots have been deprecated in favor of functions in snake_case.
That is, every function that had a dot (.
) in its name has been replaced by a function where every dot is replaced by an underscore (_
).
This is unfortunately necessary to avoid problems with CRAN checks, which (falsely) assume that certain functions with dotted names are S3 methods. The old function names will continue to work, with a warning. In a future release, the deprecated functions will be removed.
To help you adapt your code to the new naming convention, you can download and run the to_snake_case.R script. Its usage is straightforward:
to_snake_case()
function with the path to your new directory as its sole argumentThe extractor functions cond_logLik
, eff_sample_size
, filter_mean
, filter_traj
, forecast
, pred_mean
, pred_var
, and saved_states
now allow you to retrieve their output in a handy data-frame format, and not just in the (somewhat unwieldy) list or array formats as before.
This is accomplished via the new format
argument in each of these functions.
The logmeanexp
function now computes the effective sample size when the option ess=TRUE
is selected.
The effective sample size can be useful in determining the reliability of the logmeanexp
estimate.
Additionally, logmeanexp
now returns a fully-named vector when either se=TRUE
or ess=TRUE
.
pomp no longer depends on the superseded package reshape2.
Accordingly, the melt
function—useful for converting arrays and nested lists into data frames—is no longer re-exported from reshape2.
pomp now contains a somewhat stricter and more limited version of this useful function.
The magrittr pipe, %>%
, is no longer re-exported by pomp:
use the native R pipe, |>
, instead.
The package now requires R version 4.1 at least.
dimnames
attributes for the arrays computed in pfilter
and pmcmc
computations have changed.
In particular, whereas in previous versions, the time
dimension was given names that were character strings composed of decimal representations of the time (difficult to work with and prone to roundoff error), the time
dimension now is not given names.
That is, the time
dimension in these arrays can be accessed by position, not by name.
If you want to match these result to the observation time, use the format=data.frame
option in the corresponding extractor function.gompertz
example differing on Windows systems has been fixed.Version 4.5 of pomp is now on CRAN and coming soon to a mirror near you. This release contains a bug fix and a few changes to the user interface. Highlights include:
pfilter
computation.
Before, one could always extract unweighted particles (i.e., particles post resampling).
The impetus for this comes from Discussion #181.saved.states
accessor can retrieve the output in a handy data-frame format, and not just in the (somewhat unwieldy) list format as before.wquant
function for estimating quantiles given weighted samples has been changed.
It now uses the Harrell-Davis estimator, which does not seem to be readily available elsewhere, but which should behave well in the primary pomp use case—computing quantiles of state distributions from weighted particle ensembles.In addition, with this release come some small improvements to the manual.
Release 4.4.3.0 fixes a bug in trajectory computation for deterministic, discrete-time maps. Thanks to Felicia Magpantay for finding the bug and reporting it!
In addition, this release includes
pfilter
computation andwquant
function for estimating quantiles given weighted samples.As ever, the release can be installed by executing
install.packages(“pomp”,repos=”https://kingaa.github.io”)
in an R session.
Version 4.4 of pomp is now on CRAN and coming soon to a mirror near you. This release contains a few changes to the user interface. Highlights include:
wquant
computes weighted quantiles.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 to pfilter
and forestalls an associated class of errors.
As 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.bspline_eval
function.
See the pomp C API documentation for details.bspline.basis
function now takes the optional argument rg
which allows one to specify the range over which the basis will be constructed.
By default, this is range(x)
, which agrees with the behavior in earlier versions.In addition, there are some small improvements to the manual.
Version 4.3 of pomp is now on CRAN and coming soon to a mirror near you. This release contains a few changes to the user interface.
bake
and stew
now use a slightly less exacting comparison of the expression, expr
, they are furnished.
NB: Running bake
or stew
with archives created by earlier versions may result in recomputation.bake
and stew
now take the argument dir
, which is the directory holding the archive files.
By default, this is the current working directory or the value of the global option pomp.archive.dir
.partrans
have new default arguments.time
method has been extended to pompList
and related objects.
NB: The behavior of this function may be streamlined in the near future.In addition, there are some small improvements to the manual.
The Journal of Statistical Software paper that announced pomp has been thoroughly revised to bring it up to date with the changes in syntax and in algorithms that have happened since that paper first appeared. The paper introduces the rationale for, and structure of, the package. It gives pseudocode for several of pomp’s estimation algorithms and uses examples to demonstrate and compare these methods. View and download the revised paper here.
Version 4.2 of pomp is now on CRAN and coming soon to a mirror near you. This release contains only changes that should be invisible to the user.
Version 4.1 of pomp is now on CRAN and coming soon to a mirror near you. This release contains quite a number of changes, including new features, some user-interface improvements, and some changes to the examples provided with the package. As the increment to the major version number suggests, a few of these changes are not backwardly compatible with versions 3.X.
mcap
function.The behavior of trajectory
now fully conforms to the behavior of other pomp elementary algorithms.
In particular, one can now add, remove, or modify basic model components in a call to trajectory
just as one can with simulate
, pfilter
, probe
, etc.
Before version 4, additional arguments to trajectory
(i.e., those passed via ...
) were passed on to the deSolve ODE integrator in the case of continuous-time deterministic skeletons (i.e., vectorfields) and ignored in the case of discrete-time skeletons (i.e., maps).
As of version 4, in order to adjust ODE integrator settings it is necessary to use the ode_control
argument of trajectory
.
This behavior matches that of traj_objfun
.
It is now possible to create a ‘pomp’ object from scratch using trajectory
, by specifying the rinit and skeleton components.
Prior to version 4, in order to do so, it was necessary to first create a dummy data set, make a call to pomp
, and pass the resulting object to trajectory
.
This can now be achieved in one call, just as in the other elementary algorithms.
In a call to trajectory
, the user now has the option to have the results returned as one or ‘pomp’ objects.
This is controlled by the format
argument as in simulate
.
The default return-value format for trajectory
now matches that of simulate
.
The ensemble adjusted Kalman filter (eakf
) has been refactored.
It now makes use of the new emeasure and vmeasure basic components to compute an approximation of the linear relationship between the latent state and the observed variables.
kalmanFilter
.It is now possible to plot lists of ‘pomp’ and ‘pomp’-derived objects using a single call to plot
.
The rbetabinom
and dbetabinom
functions, long present as part of the C API, are now available as R functions.
parmat
can now take a data frame of parameters and convert it into a matrix suitable for furnishing to the params
argument of any pomp function.
Also, parmat
now takes an optional argument, names
, which allows the user to name the parameter sets.
It is now possible to adjust the parameters in an objfun
(objective function) object using coef(object)<-value
as with ‘pomp’ objects.
The forecast
method now works for ‘pfilterd_pomp’ objects (i.e., results of pfilter
, pmcmc
, or mif2
computations).
Independent realizations of the stochastic processes modeled in pomp are now distinguished by different values of the variable .id
.
This behavior is now uniform throughout the package.
bake
and stew
now send messages instead of warnings when they recompute an archive due to a change in code or dependencies.
The names of the variables returned by as.data.frame
, as applied to a pfilterd.pomp
object, have changed.
sir()
and sir2()
now use a negative binomial measurement model, in keeping with practices we have been recommending in our short course.Version 4.0.0.0 of pomp is now available on the the package github repo.
This release contains a few backwardly incompatible changes, which are explained here.
All of these have to do with the elementary function trajectory
, which computes trajectories of the deterministic dynamical skeleton.
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 to trajectory
just as one can with simulate
, pfilter
, probe
, etc.
Before version 4, additional arguments to trajectory
(i.e., those passed via ...
) were passed on to the ODE integrator in the case of continuous-time deterministic skeletons (i.e., vectorfields) and ignored in the case of discrete-time skeletons (i.e., maps).
As of version 4, in order to adjust ODE integrator settings it is necessary to use the ode_control
argument of trajectory
.
This behavior matches that of traj_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 somewhat awkwardly first create a dummy data set, then call pomp
, and then pass the resulting pomp
object to trajectory
.
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 of simulate
.
pomp version 3.6 has been released to CRAN and will be available soon at a mirror near you. This release features improvements in the package manual, a few bug fixes, and some feature upgrades.
Highlights include:
simulate
is called with format="data.frame"
and include.data=TRUE
, the interpolated covariates are now included in the data frame that is returned.traj_objfun
, nlf_objfun
, probe_objfun
, and spect_objfun
now have default arguments.
In particular, the default is argument is a zero-length 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 (empty est
).traj_objfun
has been refactored so that it is independent of trajectory
.
This change is invisible to the user, but lays the groundwork for future changes in trajectory
.flow
now has default arguments.states
and obs
methods now work for lists of pomp
objects (listies
).rprior
arising with integer-valued return vectors has been fixed.pomp version 3.5 has been released to CRAN and will be available soon at a mirror near you.
The main feature upgrade concerns the reproducibility functions bake
and stew
, which cache calculation results.
In previous versions, if the calculation was modified, or if any of its dependencies changed, it was necessary to manually delete the cache file to force recomputation.
In the new release, these functions now now silently cache information about the calculation and its dependencies.
If these are modified, recomputation is triggered.
In addition, the user now has more control over the information that is returned.
See the package manual for more details.
This release also fixes a bug in bsmc2
and upgrades the partrans
function to make it easier to use with objective functions.
See the package NEWS for full details.
The latest development version (3.4.5.0) is available for download on the pomp website.
This release includes a major overhaul of the two reproducibility functions, bake
and stew
.
These functions are used for caching the results of expensive calculations.
In the past, if the cached calculation was modified, or if any of its dependencies changed, it was necessary to manually delete the cache file.
As of version 3.4.5.0, pomp now silently caches information about the calculation and its dependencies.
If these are modified, recomputation is triggered.
See the package manual for more details.
To install from the package repository, do
install.packages("pomp",repos="https://kingaa.github.io/")
or
devtools::install_github("kingaa/pomp@3.4.5.0")
pomp version 3.4 has been released to CRAN and will be available soon at a mirror near you. This release contains a bug fix and some documentation improvements. In addition, some deprecated functions have been removed. See the package NEWS for details.
The pomp website now hosts discussions. There are already several interesting discussions there. Feel free to start a new topic, or to join in an ongoing discussion!
Release 3.3.0.4 has just been rolled out. To install it, do:
install.packages("pomp",repos="https://kingaa.github.io/")
This is a bug-fix release:
a bug in rgammawn
could cause R to hang under some circumstances.
There are no user-visible changes in this release.
pomp version 3.3 has been released to CRAN and will be available soon at a mirror near you. This release contains changes to help other packages link to the pomp library. All of these changes will be invisible to the pomp user.
pomp version 3.2 has been released to CRAN and will be available soon at a mirror near you. This release contains relatively minor improvements, primarily to the documentation.
The only significant user-visible changes concern the functions profileDesign
, sliceDesign
, runifDesign
, and sobolDesign
, which have been deprecated and will be removed in a future release.
They are replaced by profile_design
, slice_design
, runif_design
, and sobol_design
, respectively.
In addition, the behavior of profile_design
has changed.
Previously, the same random (type="runif"
) or sub-random (type="sobol"
) sequence was used for all non-profile parameters.
The new behavior is that, for each profile slice, a distinct set of points is generated.
pomp development version 3.1.1.7 has just been released on the package github site. It contains a number of improvements to the package help pages. These are also available online (as the package manual).
pomp development version 3.1.1.1 has just been released on the package github site.
This release introduces the profile_design
function, which is intended to replace profileDesign
.
The so-called profile design consists of a series of slices through a parameter space perpendicular to one or more coordinate axes.
The old behavior was to generate a single set of points in one of these slices (randomly according to a uniform distribution when type="runif"
and according to a sub-random (Sobol’) sequence when type="sobol"
) and then copy these points across all slices.
Thus, in a projection perpendicular to the slices, all nprof
generated points would lie atop one another.
The new behavior is to generate the points in each slice independently.
Thus, a projection perpendicular to the slices will display n*nprof
points, where n
is the number of slices.
For stylistic reasons, the other design functions, sliceDesign
, runifDesign
, and sobolDesign
have been replaced by slice_design
, runif_design
, and sobol_design
, respectively.
The older functions remain in place, but are deprecated and will be removed in a future release.
I’m looking for a volunteer who can maintain the pomp installation instructions for Mac users. Personally, I work pretty much exclusively on linux machines. I think I’m more or less able to keep up with the Windows installation instructions, but with respect to the Mac, I’m not keeping up. It seems I turned around and several things changed at once.
If there’s a Mac user out there, a veteran installer of pomp, who can edit/augment the Mac installation instructions on an ongoing basis, to keep up with advice from the R core team, probably including revising or replacing the gfortran installation instructions, it would a great service to the pomp community!
Please contact me if you’re interested.
pomp version 3.1 has just been released to CRAN and is on its way to a mirror near you. From this version pomp now requires at least version 4 of R.
In mif2
, the specification of particle numbers, Np
, has changed. When Np
is supplied as a function, Np(0)
is the requested number of particles at the beginning of the time series, i.e., time t0
. The previous behavior was that Np(1)
specified the requested number of particles at time t0
. This behavior now matches that of the other particle filtering algorithms, pfilter
, wpfilter
, bsmc2
, and pmcmc
.
bsmc2
can now accept a variable number of particles, as do the other particle-filter based algorithms pfilter
, wpfilter
, pmcmc
, and mif2
.
As promised from version 2.4.1, the tol
and max.fail
arguments have been removed completely from all particle-filtering algorithms, including pfilter
, pmcmc
, bsmc2
, and mif2
. See the the earlier blog post for more information.
All instances of cond.loglik
have been changed to cond.logLik
, to remove a common source of typographical error.
For the time being, the cond.loglik
method will continue to be available, though deprecated.
The long-deprecated functions onestep.dens
, onestep.sim
, discrete.time.sim
, euler.sim
, gillespie.sim
, gillespie.hl.sim
, conv.rec
, and values
have been removed. These have been replaced as follows:
Old function | Replacement | |
---|---|---|
onestep.dens |
direct specification of dprocess component | |
onestep.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 or as(x,"data.frame") |
A new sequential importance sampling algorithm has been implemented as wpfilter
. This is a generalization of the algorithm in pfilter
in that it tracks the weights of the particles and allows the user to customize the resampling scheme. This should be considered to be in alpha stage: changes to the interface and the underlying algorithm may come without warning. Please give it a whirl and let me know what you think via the pomp issues page.
A new saved.states
method allows one to extract the saved states from a particle filter computation.
systematic_resample
function now allows the user to specify the number of samples desired. Previously, these always had to be equal to the number of weights supplied.pomp version 3.0.1.0 has been released: source code and binaries are available. This is a development release, anticipatory to the next CRAN version, which will be 3.1.
From this version, pomp requires at least version 4.0 of R.
A new sequential importance sampling algorithm has been implemented as wpfilter
.
This is a generalization of the algorithm in pfilter
in that it tracks the weights of the particles and allows the user to customize the resampling scheme.
In particular, one can determine when resampling happens using the trigger
option.
One sets trigger
to a positive number:
when the effective sampling size is less than trigger * Np
, resampling is triggered.
Thus setting trigger = 0
forbids resampling, while setting trigger
to any number ≥0 forces resampling at every observation a la pfilter
.
One can also determine the weight distribution of the resampled particles using the target
option.
One sets target
to a number in [0,1].
If target =
α, say, and the weight of the i-th particle is wi, then it is resampled with weight wi1-α and, after resampling, carries weight wiα.
Thus, setting trigger = 1
and target = 0
reproduces the behavior of pfilter
.
The new function wpfilter
should be considered an alpha release:
both the interface and the underlying algorithms may change at any time without notice.
Please explore the function and give feedback via the pomp issues page.
For more information, see the help pages in the package manual.
pomp version 3.0.0.0 has been released: source code and binaries are available. This is a development release, anticipatory to the next CRAN version, which will be 3.1.
In mif2
, the specification of particle numbers, Np
, has changed.
When Np
is supplied as a function, Np(0)
is the requested number of particles at the beginning of the time series.
The previous behavior was that Np(1)
specified the requested number of particles.
This behavior now matches that of the other particle filtering algorithms, pfilter
, bsmc2
, and pmcmc
.
As promised from version 2.4.1, the tol
and max.fail
arguments have been removed completely from all particle-filtering algorithms, including pfilter
, pmcmc
, bsmc2
, and mif2
.
See the older post for more information.
bsmc2
can now accept a variable number of particles, as do the other particle-filter based algorithms pfilter
, pmcmc
, and mif2
.
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.
The long-deprecated functions onestep.dens
, onestep.sim
, discrete.time.sim
, euler.sim
, gillespie.sim
, gillespie.hl.sim
, conv.rec
, and values
have been removed.
These have been replaced as follows.
onestep.dens |
direct specification of dprocess component |
onestep.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 or as(x,"data.frame") |
pomp version 2.8 has been released to CRAN and is on its way to a mirror near you.
As promised with version 2.4.1.3, the default value of tol
in the particle-filtering algorithms pfilter
, pmcmc
, mif2
, and bsmc2
has been changed to zero.
A warning continues to be issued if tol
is set to anything other than 0.
In a future release, the option to choose a nonzero tolerance will be removed entirely.
This change is not backward compatible.
If precise reproduction of old results is needed, set the tol
parameter to the appropriate nonzero value.
In traces and diagnostic plotting methods, the nfail
variable (tracking numbers of filtering failures) has been dropped.
sir
is now adjustable by means of the argument delta
.Version 2.7.2.1 is now available on the pomp github repo.
This release contains several minor revisions.
Install it by doing, e.g.,
install.packages("pomp",repos="https://kingaa.github.io")
Version 2.7.1.0 makes the first set of changes to the behavior of particle-filter-based algorithms promised in version 2.4.1.0.
In particular, the default value of the tol
parameter is now set to zero.
This affects the pfilter
, mif2
, pmcmc
, and bsmc2
functions.
See the earlier blog post for more information.
If you haven’t changed your workflow to use tol=0
, as prompted by the warnings from versions 2.4.1 on, this change may break some of your existing code.
To recover previous behavior, set tol
to a positive value (the old default was 10-17).
It is a good idea at this stage, however, to modify your workflows by setting tol=0
or, better still, leaving tol
at the default value, since the tol
argument will go away soon.
In a forthcoming release, the option to set a nonzero tolerance will be removed entirely.
HTML versions of the pomp help pages are now available online at the pomp website.
pomp version 2.7 has been released to CRAN and is on its way to a mirror near you. This is an extremely minor revision over 2.6, which was in turn also very minor. The only changes are fixes to the PDF documentation necessitated by changes in R.
pomp version 2.6 has been released to CRAN. This is an extremely minor revision over 2.5: the only change is a fix to the PDF manual.
pomp version 2.5 has been released to CRAN and is on its way to a mirror near you.
This release anticipates an important change in the behavior of key pomp algorithms.
In particular, all algorithms based on the particle filter—including pfilter
, mif2
, pmcmc
, and bsmc2
—are affected.
In previous versions, each of these algorithms has an adjustable tolerance, tol
, which sets the minimum likelihood distinguishable from zero for the purposes of these methods.
Though this tolerance has been present since the earliest days of pomp, the rationale for it has always been practical rather than theoretical and there is little evidence for its usefulness.
Worse, as pomp users continue to tackle larger and more complicated problems, they are increasingly encountering situations where the default value of tol
turns out to be inappropriately high.
For these reasons, we have decided to dispense with it entirely.
Since this change would break some existing code, we will accomplish this in stages.
In this release, the behavior of all the above algorithms remains as before, but a warning is generated whenever tol
is nonzero.
This means that using the default value will generate a warning.
This warning is meant to pester you into setting tol = 0
whenever you use one of the affected algorithms (pfilter
, mif2
, pmcmc
, bsmc2
).
By doing so, you will be prepared when, in a forthcoming version, the default value of tol
changes to zero and when, ultimately, the tol
parameter is removed entirely.
To reiterate: the default behavior of these algorithms continues unchanged as of this version, but warnings of forthcoming changes are generated.
These warnings give you time to set tol = 0
in your codes before this setting becomes, first, the default and, ultimately, mandatory.
?accumvars
to see it.?pompExamples
to view it.The new development release, version 2.4.1.3, sets in motion an important change in the behavior of key pomp algorithms.
All algorithms based on the particle filter—including pfilter
, mif2
, pmcmc
, and bsmc2
—are affected.
Each of these algorithms has a tolerance, tol
, which sets the minimum likelihood distinguishable from zero for the purposes of these methods.
This parameter, the rationale for which has always been practical rather than theoretical, has been present since the earliest days of pomp, and there is little evidence for its usefulness.
Worse, as we continue to tackle larger and more complicated problems with pomp, we are increasingly encountering situations where the default value of tol
turns out to be inappropriately high.
For these reasons, we have decided to dispense with it entirely.
Since this change will break some existing code, we will accomplish this in stages.
In a forthcoming release, the new default is set to become zero and ultimately we anticipate a version that entirely removes the option to set a nonzero tolerance.
Accordingly, as of 2.4.1.3, a warning is generated whenever tol
is nonzero—including for the default value.
To make this annoying warning go away, simply set tol = 0
in any of the affected algorithms: pfilter
, mif2
, pmcmc
, or bsmc2
.
To reiterate: the default behavior of these algorithms continues unchanged as of this version, but warnings of forthcoming changes are generated.
These are intended to give users time to adjust their pomp usage to tol = 0
before it becomes, first, the default and, ultimately, mandatory.
pomp version 2.4 has been released to CRAN and is on its way to a mirror near you.
In this release, the source codes underlying specification of basic model components via R functions has been reworked to remove reliance on deep PROTECT
stacks.
No changes will be visible to the user.
Thanks to Thomas Kalibera for showing the way!
Additionally, a bug in the documentation for filter.traj
, pointed out by Pierre Jacob, has been fixed.
pomp version 2.3 has been released to CRAN and is on its way to a mirror near you. This release, makes changes to the documentation of the C API. It is now described and explained in the new C API vignette.
In addition, the new global option pomp_cdir
allows one to select the directory in which all C snippet files produced during a session will be written.
pomp provides C entry points to a number of facilities for model specification. The new C API document describes these.
In particular, pomp provides C-level access to several different probability distributions of use in modeling, facilities for working with splines, and parameter transformations.
The final section of the document describes the prototypes for the basic model components. Users wishing to write libraries to hold basic model components must furnish functions of these prototypes that perform the basic model component computations.
pomp version 2.2 has been released to CRAN and is on its way to a mirror near you.
This release adds one new feature: it is now possible to create diagnostic plots by calling plot
directly on the objective functions created by probe_objfun
and spect_objfun
.
In addition, a small but annoying bug in profileDesign
, when the new option type="runif"
is used, has been fixed.
I have just released pomp version 2.1 to CRAN. For the last six months, this has been available on the pomp website as the package pomp2.
Because it is not fully backward-compatible, pomp version 2 is being made available temporarily as the pomp2 package. Hopefully, most of you will have been using pomp2 for some time now, but if you find yourself needing to update old codes and workflows for the new version, have a look at the upgrade guide, which summarizes all the changes in version 2.
If you have pomp2 on your system, you should now remove it entirely, and replace all references to pomp2 in your codes with references to pomp.
As always, please don’t hesitate to bring questions, conundrums, puzzles, paradoxes, bugs, and feature requests, to my attention via by raising an Issue.
The pomp Version 2 Upgrade Guide has been revised. It now includes before-and-after examples of codes rewritten for pomp version 2. This is meant to help you revise pomp version <2 codes to take advantage of the new features.
As a reminder, an alpha-release preview of pomp version 2 is available as pomp2 on the pomp website. Do
install.packages("pomp2",repos="https://kingaa.github.io")
to install it. It is possible to have both pomp (version <2) and pomp2 installed simultaneously during workflow migration.
Around the middle of 2019, pomp2 will be renamed pomp and uploaded to CRAN as version 2.1. From that point forward, there will be no support for older versions of pomp.
The “Getting Started with pomp” vignette has been completely rewritten for pomp version 2. If you are new to pomp, or want to get up to speed on the changes coming in pomp version 2, have a look! The vignette is available here.
Version 2 of pomp, with major improvements, is on its way! Because it is not fully backward-compatible, pomp version 2 is being made available temporarily as the pomp2 package. pomp2 is not available on CRAN but source and binaries can be downloaded from the pomp website. See the installation page for instructions.
pomp2 will be phased out, replaced by version 2 of pomp, around the middle of 2019. At that point, pomp versions <2 will no longer be supported.
It is recommended that users begin making the transition to version 2 now. An upgrade guide is available to help you transition your codes to the new version. In the interim period, you can have both pomp and pomp2 installed on your system simultaneously.
pomp version 1.19 is now available on CRAN. Source and binaries will soon be visible on a CRAN mirror near you.
Version 2 of pomp, with major improvements, is on its way. Because it is not fully backward-compatible, pomp version 2 is being made available temporarily as the pomp2 package. pomp2 is not available on CRAN but source and binaries can be downloaded from the pomp website. See the installation page for instructions.
pomp2 will be phased out, replaced by version 2 of pomp, around the middle of 2019. At that point, pomp versions <2 will no longer be supported.
It is recommended that users begin making the transition to version 2 now. An upgrade guide is available to help you transition your codes to the new version. In the interim period, you can have both pomp and pomp2 installed on your system simultaneously.
pomp version 1.19 includes bug fixes and some feature enhancements.
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
.verbose
option in trajectory
gives diagnostic information from deSolve
integration routines.
Of course, this is pertinent only if the model skeleton is a vectorfield.coef(object) <- NULL
, where object
is of class pomp
, erases any parameters stored in object
.obs
and states
arguments of simulate
are deprecated and will be removed in a forthcoming release.forward
and inverse
options for the dir
argument of partrans
have been dispensed with.
The much more descriptive options toEstimationScale
and fromEstimationScale
remain.euler.sir
, gillespie.sir
, blowflies
, ricker
, bbs
, dacca
, and rw2
examples are all now implemented using C snippets.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.pfilter
(and hence pmcmc
) when filter.traj=TRUE
was discovered and fixed.
In the buggy version, the filter trajectory was sampled with incorrect weights.istate
when deSolve::ode
errors has been fixed.sannbox
being passed a candidate.dist
that is not a function.apply_probe_sims
has changed:
the new argument rho
must be the "package:pomp"
environment.solibs<-
method allows developers of packages extending pomp
to incorporate C snippets into object that contain pomp
objects.hitch
function facilitates construction of pomp.fun
objects from R functions, C snippets, and links to external libraries.pomp.fun
objects in C are now registered for use by other packages.pomp_defines.h
header is provided for developers of packages that depend on pomp
.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
.See the package NEWS for more details.
pomp version 1.18 is now available on CRAN and will soon be visible on a CRAN mirror near you. This release includes bug fixes and some feature enhancements.
User-visible changes include:
start
or params
arguments.spy
method displays the C snippet file(s) associated with a pomp object.See the package NEWS for more details.
pomp version 1.17 is now available on CRAN and is coming soon to a mirror near you. This release includes bug fixes and some feature enhancements.
Highlights include:
verbose=TRUE
forces display of these messages.spect.match
has been refactored, with small changes to the interface.coef<-
can now take a list of parameters:
it applies unlist
to turn the list into a numeric vector.See the package NEWS for more details.
pomp version 1.16 is now available on CRAN and is coming soon to a mirror near you. This release includes new features and bug fixes.
Highlights include:
traj.match
, reported in issue #57 has been fixed.
Thanks to Yue Wu for identifying and helping fix the bug!See the package NEWS for more details.
pomp version 1.15 is now available on CRAN and is coming soon to a mirror near you. This release fixes errors that would have arisen in R version 3.5 due to new changes in the underpinnings of R.
Additionally, there has been one augmentation of the pomp C API: a new dmultinom
function for multinomial likelihoods.
See the package NEWS for more details.
pomp version 1.14 is now available on CRAN and is coming soon to a mirror near you.
This release fixes a bug in gillespie.sim
and removes the kleap.sim
plug-in.
A new feature: 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 because its accuracy on test problems is low 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.
See the package NEWS for more details.
pomp version 1.13 is now available on CRAN and will make its way soon to a mirror near you. This is strictly a bug-fix release. See the package NEWS for more details.
pomp version 1.12 is now available on CRAN and will make its way soon to a mirror near you. This is strictly a bug-fix release. See the package NEWS for more details.
pomp version 1.11 is now available on CRAN. This release introduces one new feature, fixes some bugs, and improves the documentation.
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.
mvn.rw.adaptive
), courtesy of Sebastian Funk.verbose=TRUE
, especially during Csnippet building.pomp
times
argument, avoiding some potentially buggy behavior..Call
are now registered.pomp version 1.10 is now available on CRAN. This release removes some deprecated facilities and provides one new feature.
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.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
).logLik
method defined for pmcmcList
objects.See the package NEWS for more details.
pomp version 1.9 is now available on CRAN. This release fixes several bugs.
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.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 is now available on CRAN. This release introduces one new feature and fixes several bugs.
shlib.args
option to pomp
, allows one to specify arbitrary options to be passed to the compiler when C snippets are used.sobolDesign
, profileDesign
), we now use the suggestion of Joe & Kuo (2003) to choose a better sequence start point.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.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.rw.sd
facility for specifying random-walk perturbations in mif2
has been refactored for greater stability.plot
on pomp
objects with more than 10 variables to plot has been fixed.gillespie.sim
and kleap.sim
due to accumulation of round-off error has been repaired.Please see the package NEWS for more details.
pomp version 1.7 is now available on CRAN. This is a bug-fix 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 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.
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.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.bootstrap
argument to nlf
has been removed.mif2
, it is now required that Nmif>0
.rprocess
called kleap.sim
, which implements the so-called “K-leap method” of Cai & Xu (2007).
This is another way of accelerating the, usually painfully slow, exact Gillespie method for certain classes of continuous-time Markov processes.
The underlying FORTRAN code is a contribution of Helen Wearing’s.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 backward-compatible.
I would very much appreciate hearing of your experience with them, along with any suggestions for improvements.pomp version 1.5 is now available on CRAN.
pomp
function, specify 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 skelmap.delta.t
are deprecated and will be removed in a future release, at which point the new interface will be mandatory.method="mif2"
option to mif
has been removed.
Use mif2
instead.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.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.pfilter
help page has been improved.
Specifically, the discussion of filtering failures is more explicit and easier to find.rw.sd
argument to mif2
on Windows platforms has been fixed.pfilter
now uses less memory when it is asked to run at a single point in parameter space.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.
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.
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.
Ed Ionides and Aaron King will be teaching their short course on Simulation-based 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.
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.
In version 1.3.1.1, several features that had long been deprecated have been removed. These include:
seed
argument to pfilter
.
Use freeze
to obtain similar functionality.pars
argument to mif
has been removed.parameter.transform
and parameter.inv.transform
arguments to pomp
.
In version 0.65-1, these were superseded by the fromEstimationScale
and toEstimationScale
arguments.Please see the package NEWS for more details.
Version 1.2.1.1 has been released and is coming soon to a CRAN mirror near you. This is a bug-fix and documentation improvement release. Please see the package NEWS for details.
Version 1.1.1.1 has been released and is coming soon to a CRAN mirror near you. Since version 0.65-1, there have been many changes to pomp, including new features, some bug fixes, and algorithmic improvements. Some of the highlights include:
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
mif2
computations,pmcmc
, including the use of an adaptive proposal distribution (mvn.rw.adaptive
) and the estimation of smoothed state trajectories (using filter.traj
).As of version 0.78-1, 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 random-walk 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.
A number of minor changes to pomp have been made since the last blog post.
A bug in logmeanexp
has been fixed.
Previously, when se = TRUE
, this function used a delta-method estimate of the variance in log(mean(exp(x)))
which was accurate when exp(x)
had small variance but had two problems:
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:
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.
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.75-1 now make it so that one can store and re-use pomp
objects across R sessions.
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.
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.
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!
pomp
object’s initializer can now be specified as a Csnippet
.A full-featured 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.65-1 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 [https://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 up-to-date 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 random-walk proposal with diagonal variance-covariance matrix; this duplicates the old behavior of both abc
and pmcmc
. The second, mvn.rw
, corresponds to a multivariate normal random-walk proposal with arbitrary variance-covariance matrix. Using these as a template, the user can easily construct alternatives.
pomp version 0.53-1 is now available on CRAN and coming soon to a mirror near you.
This is a major new feature release. Some highlights are:
pomp version 0.49-1 is now available on CRAN and coming soon to a mirror near you.