aboutsummaryrefslogtreecommitdiff
path: root/R/multistart.R
diff options
context:
space:
mode:
authorJohannes Ranke <jranke@uni-bremen.de>2022-08-14 14:57:13 +0200
committerJohannes Ranke <jranke@uni-bremen.de>2022-08-14 14:57:13 +0200
commiteb8b56ed6f83e3c7df63e48f9488362363d26709 (patch)
tree14e1fba1bd096d8d5adf2f3e7c1d5e4e53187401 /R/multistart.R
parent118b3753740ff4e7dc777baac7e769950005697b (diff)
Basic multistart method for saem.mmkin objects
Diffstat (limited to 'R/multistart.R')
-rw-r--r--R/multistart.R26
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)
}

Contact - Imprint