diff options
author | Johannes Ranke <jranke@uni-bremen.de> | 2022-08-14 14:57:13 +0200 |
---|---|---|
committer | Johannes Ranke <jranke@uni-bremen.de> | 2022-08-14 14:57:13 +0200 |
commit | eb8b56ed6f83e3c7df63e48f9488362363d26709 (patch) | |
tree | 14e1fba1bd096d8d5adf2f3e7c1d5e4e53187401 /R/multistart.R | |
parent | 118b3753740ff4e7dc777baac7e769950005697b (diff) |
Basic multistart method for saem.mmkin objects
Diffstat (limited to 'R/multistart.R')
-rw-r--r-- | R/multistart.R | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/R/multistart.R b/R/multistart.R index db482cc4..819fcc1b 100644 --- a/R/multistart.R +++ b/R/multistart.R @@ -7,18 +7,38 @@ #' inspired by the article on practical identifiabiliy in the frame of nonlinear #' mixed-effects models by Duchesne et al (2021). #' +#' Currently, parallel execution of the fits is only supported using +#' [parallel::mclapply], i.e. not available on Windows. +#' +#' @param object The fit object to work with +#' @param n How many different combinations of starting parameters should be +#' used? +#' @param cores How many fits should be run in parallel? +#' @param \dots Passed to the update function. +#' @return A list of [saem.mmkin] objects, with class attributes +#' 'multistart.saem.mmkin' and 'multistart'. +#' #' @references Duchesne R, Guillemin A, Gandrillon O, Crauste F. Practical #' identifiability in the frame of nonlinear mixed effects models: the example #' of the in vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478. #' doi: 10.1186/s12859-021-04373-4. #' @export -multistart <- function(object, n = 50, ...) +multistart <- function(object, n = 50, cores = 1, ...) { UseMethod("multistart", object) } #' @rdname multistart #' @export -multistart.saem.mmkin <- function(object, n = 50, ...) { - +multistart.saem.mmkin <- function(object, n = 50, cores = 1, ...) { + start_parms <- apply( + parms(object$mmkin, errparms = FALSE), 1, + function(x) stats::runif(n, min(x), max(x)) + ) + + res <- parallel::mclapply(1:n, function(x) { + update(object, degparms_start = start_parms[x], ...) + }, mc.cores = cores) + class(res) <- c("multistart.saem.mmkin", "multistart") + return(res) } |