mif2: PIF: Panel iterated filtering

mif2R Documentation

PIF: Panel iterated filtering

Description

Tools for applying iterated filtering algorithms to panel data. The panel iterated filtering of \Breto 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 panelPomp or inheriting 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 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.

rw.sd

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.

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. cooling.type specifies the nature of the cooling schedule. See below (under “Specifying the perturbations”) for more detail.

block

A logical variable determining whether to carry out block resampling of unit-specific parameters.

verbose

logical; if TRUE, diagnostic messages will be printed to the console.

...

....

object

an object resulting from the application of IF2 (i.e., of class mif2d.ppomp)

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 \Breto

References

\breto

2020

\ionides

2006

\ionides

2011

\ionides

2015

\king

2016

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)

cbreto/panelPomp documentation built on Sept. 15, 2024, 10:42 p.m.