mif2 {panelPomp} | R Documentation |
PIF: Panel iterated filtering
Description
Tools for applying iterated filtering algorithms to panel data. The panel iterated filtering of Bretó et al. (2020) extends to panel models the improved iterated filtering algorithm (Ionides et al., 2015) for estimating parameters of a partially observed Markov process. Iterated filtering algorithms rely on extending a partially observed Markov process model of interest by introducing random perturbations to the model parameters. The space where the original parameters live is then explored at each iteration by running a particle filter. Convergence to a maximum likelihood estimate has been established for appropriately constructed procedures that iterate this search over the parameter space while diminishing the intensity of perturbations (Ionides et al. 2006, 2011, 2015).
Usage
## S4 method for signature 'panelPomp'
mif2(
data,
Nmif = 1,
shared.start,
specific.start,
start,
Np,
rw.sd,
cooling.type = c("geometric", "hyperbolic"),
cooling.fraction.50,
block = FALSE,
verbose = getOption("verbose"),
...
)
## S4 method for signature 'mif2d.ppomp'
mif2(
data,
Nmif,
shared.start,
specific.start,
start,
Np,
rw.sd,
cooling.type,
cooling.fraction.50,
block,
...
)
## S4 method for signature 'mif2d.ppomp'
traces(object, pars, ...)
Arguments
data |
An object of class |
Nmif |
The number of filtering iterations to perform. |
shared.start |
named numerical vector; the starting guess of the shared parameters. |
specific.start |
matrix with row parameter names and column unit names; the starting guess of the specific parameters. |
start |
A named numeric vector of parameters at which to start the IF2 procedure. |
Np |
the number of particles to use.
This may be specified as a single positive integer, in which case the same number of particles will be used at each timestep.
Alternatively, if one wishes the number of particles to vary across timesteps, one may specify length(time(object,t0=TRUE)) or as a function taking a positive integer argument.
In the latter case, |
rw.sd |
An unevaluated expression of the form |
cooling.type , cooling.fraction.50 |
specifications for the cooling schedule,
i.e., the manner and rate with which the intensity of the parameter perturbations is reduced with successive filtering iterations.
|
block |
A logical variable determining whether to carry out block resampling of unit-specific parameters. |
verbose |
logical; if |
... |
.... |
object |
an object resulting from the application of IF2 (i.e., of
class |
pars |
names of parameters |
Value
mif2()
returns an object of class mif2d.ppomp
.
traces()
returns a matrix
with estimated parameter values at
different iterations of the IF2 algorithm in the natural scale. The default
is to return values for all parameters but a subset of parameters can be
passed via the optional argument pars
.
Author(s)
Carles Bretó
References
Bretó, C., Ionides, E. L. and King, A. A. (2020) Panel Data Analysis via Mechanistic Models. Journal of the American Statistical Association, 115(531), 1178–1188. doi:10.1080/01621459.2019.1604367
Ionides, E. L., Bretó, C. and King, A. A. (2006) Inference for nonlinear dynamical systems. Proceedings of the National Academy of Sciences, 103(49), 18438–18443. doi:10.1073/pnas.0603181103
Ionides, E. L., Bhadra, A., Atchadé, Y. and King, A. A. (2011) Iterated filtering. Annals of Statistics, 39(3), 1776–1802. doi:10.1214/11-AOS886
Ionides, E. L., Nguyen, D., Atchadé, Y., Stoev, S. and King, A. A. (2015) Inference via iterated, perturbed Bayes maps. Proceedings of the National Academy of Sciences, 112(3), 719–724. doi:10.1073/pnas.1410597112
King, A. A., Nguyen, D. and Ionides, E. L. (2016) Statistical inference for partially observed Markov processes via the package pomp. Journal of Statistical Software 69(12), 1–43. DOI: 10.18637/jss.v069.i12. An updated version of this paper is available on the package website.
See Also
pomp's mif2 at mif2, panel_loglik
Other panelPomp workhorse functions:
panelPomp
,
panel_loglik
,
pfilter()
Examples
## start with a panelPomp object
p <- panelRandomWalk()
## specify which parameters to estimate via rw_sd() and how fast to cool
mp <- mif2(p,Np=10,rw.sd=rw_sd(X.0=0.2),cooling.fraction.50=0.5,cooling.type="geometric")
mp
## the object resulting from an initial estimation can be used as a new starting point
mmp <- mif2(mp,Np=10,rw.sd=rw_sd(X.0=0.2),cooling.fraction.50=0.5,cooling.type="geometric")
mmp
## convergence can be partly diagnosed by checking estimates and likelihoods at different iterations
traces(mmp)