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).
# S4 method for 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 mif2d.ppomp
mif2(
data,
Nmif,
shared.start,
specific.start,
start,
Np,
rw.sd,
cooling.type,
cooling.fraction.50,
block,
...
)
# S4 method for mif2d.ppomp
traces(object, pars, ...)
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.
An object of class panelPomp or inheriting class.
The number of filtering iterations to perform.
named numerical vector; the starting guess of the shared parameters.
matrix with row parameter names and column unit names; the starting guess of the specific parameters.
A named numeric vector of parameters at which to start the IF2 procedure.
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 Np either as a vector of positive integers of length
length(time(object,t0=TRUE))or as a function taking a positive integer argument.
In the latter case, Np(k) must be a single positive integer, representing the number of particles to be used at the k-th timestep:
Np(0) is the number of particles to use going from timezero(object) to time(object)[1],
Np(1), from timezero(object) to time(object)[1],
and so on,
while when T=length(time(object)), Np(T) is the number of particles to sample at the end of the time-series.
An unevaluated expression of the form quote(rw.sd()) to
be used for all panel units. If a list of such expressions of the
same length as the object argument is provided, each list element
will be used for the corresponding panel unit.
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.
cooling.type specifies the nature of the cooling schedule.
See below (under “Specifying the perturbations”) for more detail.
A logical variable determining whether to carry out block resampling of unit-specific parameters.
logical; if TRUE, diagnostic messages will be printed to the console.
....
an object resulting from the application of IF2 (i.e., of
class mif2d.ppomp)
names of parameters
Carles Bretó
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. tools:::Rd_expr_doi("https://doi.org/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. tools:::Rd_expr_doi("https://doi.org/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. tools:::Rd_expr_doi("https://doi.org/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. tools:::Rd_expr_doi("https://doi.org/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.
pomp's mif2 at mif2, panel_loglik
Other panelPomp workhorse functions:
panelPomp,
panel_loglik,
pfilter()
## 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)
Run the code above in your browser using DataLab