
Last chance! 50% off unlimited learning
Sale ends in
This simulates samples from a fit object inheriting from class "HLfit"
, as produced by spaMM's fitting functions, and applies a given function to each simulated sample. Parallelization is supported (see Details). A typical usage of the parametric bootstrap is to fit by one model some samples simulated under another model (see Example).
spaMM_boot(object, simuland, nsim, nb_cores=NULL,
resp_testfn=NULL, control.foreach=list(),
debug. = FALSE, type, fit_env=NULL, cluster_args=NULL,
...)
The fit object to simulate from.
The function to apply to each simulated sample. See Details for requirements of this function.
Number of samples to simulate and analyze.
Number of cores to use for parallel computation. The default is spaMM.getOption("nb_cores")
, and 1 if the latter is NULL. nb_cores=1
prevents the use of parallelisation procedures.
Passed to simulate.HLfit
; NULL, or a function that tests a condition which simulated samples should satisfy. This function takes a response vector as argument and return a boolean (TRUE indicating that the sample satisfies the condition).
list of control arguments for foreach
. These include in particular .combine
(with default value "rbind"
), and .errorhandling
(with default value "remove"
, but "pass"
is quite useful for debugging).
Boolean (or integer, interpreted as boolean). For debugging purposes, particularly from parallel computations. The effect of debug.=TRUE
depends on what simuland
does of it. The default simuland
for likelihood ratio testing functions, eval_replicate
, shows how debug.
can be used.
Character: passed to simulate.HLfit
. Defaults, with a warning, to codetype="marginal" in order to replicate the behaviour of previous versions. But this is not necessarily the appropriate type
for all possible uses. See Details of simulate.HLfit
for other implemented options.
An environment or list containing arguments necessary to evaluate simuland
on each sample.
NULL
or a list
of arguments, passed to makeCluster
.
Further arguments passed to the simuland
function.
A list, with two elements (unless debug.
is TRUE
):
nsim
return values in the format returned either by apply
or parallel::parApply
or by foreach::`%dopar%`
as controlled by control.foreach$.combine
(which is here "rbind"
by default).
the state of .Random.seed
at the beginning of the sample simulation
spaMM_boot
handles parallel backends with different features. pbapply::pbapply
has a very simple interface (essentially equivalent to apply
) and provides progress bars, but (in version 1.4.0, at least) does not have efficient load-balancing. doSNOW
also provides a progress bar and allows more efficient load-balancing, but its requires foreach
. foreach
handles errors diferently from pbapply
(which will simply stop if fitting a model to a bootstrap replicate fails): see the foreach
documentation.
spaMM_boot
calls simulate.HLfit
on the fit object
and applies simuland
on each column of the matrix returned by this call.
simulate.HLfit
uses the type
argument, which must be explicitly provided.
The simuland
function must take as first argument a vector of response values, and may have other arguments including …. Reuired argument must be provided from the …\ argument of spaMM_boot
. Variables needed to evaluate them must be available from within the simuland
function or otherwise provided as elements of fit_env
.
# NOT RUN {
if (spaMM.getOption("example_maxtime")>8.7) {
data("blackcap")
# Generate fits of null and full models:
lrt <- fixedLRT(null.formula=migStatus ~ 1 + Matern(1|latitude+longitude),
formula=migStatus ~ means + Matern(1|latitude+longitude),
HLmethod='ML',data=blackcap)
# The 'simuland' argument:
myfun <- function(y, what=NULL, lrt, ...) {
data <- lrt$fullfit$data
data$migStatus <- y ## replaces original response (! more complicated for binomial fits)
full_call <- getCall(lrt$fullfit) ## call for full fit
full_call$data <- data
res <- eval(full_call) ## fits the full model on the simulated response
if (!is.null(what)) res <- eval(what) ## post-process the fit
return(res) ## the fit, or anything produced by evaluating 'what'
}
# where the 'what' argument (not required) of myfun() allows one to control
# what the function returns without redefining the function.
# Call myfun() with no 'what' argument: returns a list of fits
spaMM_boot(lrt$nullfit, simuland = myfun, nsim=1, lrt=lrt, type ="marginal")[["bootreps"]]
# Return only a model coefficient for each fit:
spaMM_boot(lrt$nullfit, simuland = myfun, nsim=7,
what=quote(fixef(res)[2L]), lrt=lrt, type ="marginal")[["bootreps"]]
}
# }
Run the code above in your browser using DataLab