Last chance! 50% off unlimited learning
Sale ends in
probe
applies one or more probe.match
calls an optimizer to adjust model parameters to do probe-matching, i.e., to minimize the discrepancy between simulated and actual data.
This discrepancy is measured using the probe.match.objfun
constructs an objective function for probe-matching suitable for use in optim
-like optimizers.## S3 method for class 'pomp':
probe(object, probes, params, nsim, seed = NULL, \dots)
## S3 method for class 'probed.pomp':
probe(object, probes, params, nsim, \dots)
## S3 method for class 'pomp':
probe.match(object, start, est = character(0),
probes, weights,
nsim, seed = NULL,
method = c("subplex","Nelder-Mead","SANN","BFGS","sannbox"),
verbose = getOption("verbose"),
eval.only = FALSE, fail.value = NA, transform = FALSE, ...)
## S3 method for class 'probed.pomp':
probe.match(object, start, est = character(0),
probes, weights,
nsim, seed = NULL,
method = c("subplex","Nelder-Mead","SANN","BFGS","sannbox"),
verbose = getOption("verbose"),
eval.only = FALSE, fail.value = NA, transform = FALSE, ...)
## S3 method for class 'probe.matched.pomp':
probe.match(object, start, est,
probes, weights,
nsim, seed = NULL,
method = c("subplex","Nelder-Mead","SANN","BFGS","sannbox"),
verbose = getOption("verbose"),
eval.only = FALSE, fail.value, transform, ...)
probe.match.objfun(object, params, est, probes, nsim = 1,
seed = NULL, fail.value = NA, transform = FALSE, ...)
pomp
.pomp
.
A vector-valued probe must always return a vector of the same size.params=coef(object)
.NULL
, the random number generator will be initialized with this seed for simulations.
See simulate-pomp.probes
.TRUE
, no optimization is attempted.
Instead, the probe-mismatch value is simply evaluated at the start
parameters.NA
, this value is substituted for non-finite values of the objective function.
It should be a large number (i.e., bigger than any legitimate values the objective function is likely to take).TRUE
, optimization is performed on the transformed scale.probe
, these are currently ignored.
In the case of probe.match
, these are passed to optim
or subplex
in the control
list.probe
returns an object of class probed.pomp
.
probed.pomp
is derived from the pomp
class and therefore have all the slots of pomp
.
In addition, a probed.pomp
class has the following slots:
[object Object],[object Object],[object Object],[object Object],[object Object] probe.match
returns an object of class probe.matched.pomp
, which is derived from class probed.pomp
.
probe.matched.pomp
objects therefore have all the slots above plus the following:
[object Object],[object Object],[object Object],[object Object]
probe.match.objfun
returns a function suitable for use as an objective function in an optim
-like optimizer.
probe
results in the evaluation of the probe(s) in probes
on the data.
Additionally, nsim
simulated data sets are generated (via a call to simulate
) and the probe(s) are applied to each of these.
The results of the probe computations on real and simulated data are stored in an object of class probed.pomp
. A call to probe.match
results in an attempt to optimize the agreement between model and data, as measured by the specified probes, over the parameters named in est
.
The results, including coefficients of the fitted model and values of the probes for data and fitted-model simulations, are stored in an object of class probe.matched.pomp
.
The objective function minimized by probe.match
--- in a form suitable for use with optim
-like optimizers --- is created by a call to probe.match.objfun
.
Specifically, probe.match.objfun
will return a function that takes a single numeric-vector argument that is assumed to cotain the parameters named in est
, in that order.
This function will return the negative synthetic log likelihood for the probes specified.
S. N. Wood Statistical inference for noisy nonlinear ecological dynamic systems, Nature, 466: 1102--1104, 2010.
probe.match
pompExample(ou2)
good <- probe(
ou2,
probes=list(
y1.mean=probe.mean(var="y1"),
y2.mean=probe.mean(var="y2"),
y1.sd=probe.sd(var="y1"),
y2.sd=probe.sd(var="y2"),
extra=function(x)max(x["y1",])
),
nsim=500
)
summary(good)
plot(good)
bad <- probe(
ou2,
params=c(alpha.1=0.1,alpha.4=0.2,x1.0=0,x2.0=0,
alpha.2=-0.5,alpha.3=0.3,
sigma.1=3,sigma.2=-0.5,sigma.3=2,
tau=1),
probes=list(
y1.mean=probe.mean(var="y1"),
y2.mean=probe.mean(var="y2"),
y1.sd=probe.sd(var="y1"),
y2.sd=probe.sd(var="y2"),
extra=function(x)range(x["y1",])
),
nsim=500
)
summary(bad)
plot(bad)
Run the code above in your browser using DataLab