mif
causes the iterated filtering algorithm to run for a specified number of iterations.
At each iteration, the particle filter is performed on a perturbed version of the model.
Specifically, parameters to be estimated are subjected to random perturbations at each observation.
This extra variability effectively smooths the likelihood surface and combats particle depletion by introducing diversity into the population of particles.
At the iterations progress, the magnitude of the perturbations is diminished according to a user-specified cooling schedule.
For most purposes, mif
has been superseded by mif2
.## S3 method for class 'pomp':
mif(object, Nmif = 1, start, ivps = character(0),
particles, rw.sd, Np, ic.lag, var.factor = 1,
cooling.type, cooling.fraction.50,
method = c("mif","unweighted","fp","mif2"),
tol = 1e-17, max.fail = Inf,
verbose = getOption("verbose"), transform = FALSE, ...)
## S3 method for class 'pfilterd.pomp':
mif(object, Nmif = 1, Np, tol, \dots)
## S3 method for class 'mif':
mif(object, Nmif, start, ivps,
particles, rw.sd, Np, ic.lag, var.factor,
cooling.type, cooling.fraction.50,
method, tol, transform, \dots)
## S3 method for class 'mif':
continue(object, Nmif = 1, \dots)
## S3 method for class 'mif':
conv.rec(object, pars, transform = FALSE, \dots)
## S3 method for class 'mifList':
conv.rec(object, \dots)
pomp
.ivps
must have a positive random-walk standard deviation specified in rw.sd
.
If there are no regular parameterparticles(Np,center,sd,...)
which sets up the starting particle matrix by drawing a sample of size Np
from the starting particle distribution centered at center
and of width sd
.
names(rw.sd)
must be a subset of names(start)
,
The random walk is not dynamically added to the initial-value parameters (named in mif
update for initial-value parameters consists of replacing them by their filtering mean at time times[ic.lag]
, where time
rw.sd
.
In particular, the width of the distribution of particles at the start of the first mif
iteration will bcooling.type
specifies the nature of the cooling schedule. When co
method
sets the update rule used in the algorithm.
method="mif"
uses the iterated filtering update rule (Ionides 2006, 2011);
method="unweighted"
updates the parameter to the unweighted average of the filteripfilter
.TRUE
, optimization is performed on the transformed scale, as defined by the user-supplied parameter transformations (see pomp
).mif
returns an object of class mif
.
The latter inherits from the pfilterd.pomp
and pomp
classes.mif2
.mif
, while regular parameters are perturbed at the initial time and after every observation, IVPs are perturbed only at the initial time.mif
iterations, one can use the mif
method on a mif
object.
By default, the same parameters used for the original mif
run are re-used (except for tol
, max.fail
, and verbose
, the defaults of which are shown above).
If one does specify additional arguments, these will override the defaults.mif
iterations from where one left off using the continue
method.
A call to mif
to perform Nmif=m
iterations followed by a call to continue
to perform Nmif=n
iterations will produce precisely the same effect as a single call to mif
to perform Nmif=m+n
iterations.
By default, all the algorithmic parameters are the same as used in the original call to mif
.
Additional arguments will override the defaults.mif
's fixed-lag smoothing to estimate only initial value parameters (IVPs).
In this case, the IVPs to be estimated are named in ivps
and no positive entries in rw.sd
correspond to any parameters not named in ivps
.
If theta
is the current parameter vector, then at each mif
iteration, Np
particles are drawn from a distribution centered at theta
and with width proportional to var.factor*rw.sd
, a particle filtering operation is performed, and theta
is replaced by the filtering mean at time(object)[ic.lag]
.
Note the implication that, when mif
is used in this way on a time series any longer than ic.lag
, unnecessary work is done.
If the time series in object
is longer than ic.lag
, consider replacing object
with window(object,end=ic.lag)
.particles
is not specified, the default behavior is to draw the particles from a multivariate normal distribution.
It is the user's responsibility to ensure that, if the optional particles
argument is given, that the particles
function satisfies the following conditions: particles
has at least the following arguments:
Np
, center
, sd
, and ...
.
Np
may be assumed to be a positive integer;
center
and sd
will be named vectors of the same length.
Additional arguments may be specified;
these will be filled with the elements of the userdata
slot of the underlying pomp
object (see pomp
).
particles
returns a length(center)
x Np
matrix with rownames matching the names of center
and sd
.
Each column represents a distinct particle.
The center of the particle distribution returned by particles
should be center
.
The width of the particle distribution should vary monotonically with sd
.
In particular, when sd=0
, the particles
should return matrices with Np
identical columns, each given by the parameters specified in center
.
E. L. Ionides, A. Bhadra, Y. Atchad{\'e}, & A. A. King, Iterated filtering, Annals of Statistics, 39:1776--1802, 2011.
E. L. Ionides, D. Nguyen, Y. Atchad{\'e}, S. Stoev, and A. A. King. Inference for dynamic and latent variable models via iterated, perturbed Bayes maps. Proc. Natl. Acad. Sci. U.S.A., 112:719--724, 2015.
A. A. King, E. L. Ionides, M. Pascual, and M. J. Bouma, Inapparent infections and cholera dynamics, Nature, 454:877--880, 2008.
pomp
, pfilter
, mif2