This function uses saemix::saemix() as a backend for fitting nonlinear mixed effects models created from mmkin row objects using the stochastic approximation to the expectation maximisation algorithm (SAEM).

saem(object, control, ...)

# S3 method for mmkin
saem(
  object,
  control = list(displayProgress = FALSE, print = FALSE, save = FALSE, save.graphs =
    FALSE),
  cores = 1,
  verbose = FALSE,
  suppressPlot = TRUE,
  ...
)

saemix_model(object, cores = 1, verbose = FALSE, ...)

saemix_data(object, verbose = FALSE, ...)

Arguments

object

An mmkin row object containing several fits of the same mkinmod model to different datasets

control

Passed to saemix::saemix

...

Further parameters passed to saemix::saemixData and saemix::saemixModel.

cores

The number of cores to be used for multicore processing using parallel::mclapply(). Using more than 1 core is experimental and may lead to uncontrolled forking, apparently depending on the BLAS version used.

verbose

Should we print information about created objects?

suppressPlot

Should we suppress any plotting that is done by the saemix function?

Value

An saemix::SaemixObject.

An saemix::SaemixModel object.

An saemix::SaemixData object.

Details

An mmkin row object is essentially a list of mkinfit objects that have been obtained by fitting the same model to a list of datasets using mkinfit.

Starting values for the fixed effects (population mean parameters, argument psi0 of saemix::saemixModel() are the mean values of the parameters found using mmkin.

Examples

# \dontrun{ ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) subset(x$data[c("name", "time", "value")])) names(ds) <- paste("Dataset", 6:10) f_mmkin_parent_p0_fixed <- mmkin("FOMC", ds, cores = 1, state.ini = c(parent = 100), fixed_initials = "parent", quiet = TRUE) f_saem_p0_fixed <- saem(f_mmkin_parent_p0_fixed)
#> Running main SAEM algorithm #> [1] "Sat Nov 7 13:14:50 2020" #> .... #> Minimisation finished #> [1] "Sat Nov 7 13:14:52 2020"
f_mmkin_parent <- mmkin(c("SFO", "FOMC", "DFOP"), ds, quiet = TRUE) f_saem_sfo <- saem(f_mmkin_parent["SFO", ])
#> Running main SAEM algorithm #> [1] "Sat Nov 7 13:14:53 2020" #> .... #> Minimisation finished #> [1] "Sat Nov 7 13:14:55 2020"
f_saem_fomc <- saem(f_mmkin_parent["FOMC", ])
#> Running main SAEM algorithm #> [1] "Sat Nov 7 13:14:55 2020" #> .... #> Minimisation finished #> [1] "Sat Nov 7 13:14:57 2020"
f_saem_dfop <- saem(f_mmkin_parent["DFOP", ])
#> Running main SAEM algorithm #> [1] "Sat Nov 7 13:14:57 2020" #> .... #> Minimisation finished #> [1] "Sat Nov 7 13:15:00 2020"
# The returned saem.mmkin object contains an SaemixObject, we can use # functions from saemix library(saemix)
#> Package saemix, version 3.1.9000 #> please direct bugs, questions and feedback to emmanuelle.comets@inserm.fr
compare.saemix(list(f_saem_sfo$so, f_saem_fomc$so, f_saem_dfop$so))
#> Likelihoods computed by importance sampling
#> AIC BIC #> 1 624.2428 622.2900 #> 2 467.7644 465.0305 #> 3 491.3541 487.8391
f_mmkin_parent_tc <- update(f_mmkin_parent, error_model = "tc") f_saem_fomc_tc <- saem(f_mmkin_parent_tc["FOMC", ])
#> Running main SAEM algorithm #> [1] "Sat Nov 7 13:15:02 2020" #> .... #> Minimisation finished #> [1] "Sat Nov 7 13:15:07 2020"
compare.saemix(list(f_saem_fomc$so, f_saem_fomc_tc$so))
#> Likelihoods computed by importance sampling
#> AIC BIC #> 1 467.7644 465.0305 #> 2 469.4862 466.3617
dfop_sfo <- mkinmod(parent = mkinsub("DFOP", "A1"), A1 = mkinsub("SFO"))
#> Successfully compiled differential equation model from auto-generated C code.
f_mmkin <- mmkin(list("DFOP-SFO" = dfop_sfo), ds, quiet = TRUE, solution_type = "analytical") # This takes about 4 minutes on my system f_saem <- saem(f_mmkin)
#> Running main SAEM algorithm #> [1] "Sat Nov 7 13:15:08 2020" #> .... #> Minimisation finished #> [1] "Sat Nov 7 13:19:07 2020"
f_mmkin_des <- mmkin(list("DFOP-SFO" = dfop_sfo), ds, quiet = TRUE, solution_type = "deSolve") # Using a single core, the following takes about 6 minutes, using 10 cores # it is slower instead of faster f_saem_des <- saem(f_mmkin_des, cores = 1)
#> Running main SAEM algorithm #> [1] "Sat Nov 7 13:19:26 2020" #> .... #> Minimisation finished #> [1] "Sat Nov 7 13:27:33 2020"
compare.saemix(list(f_saemix$so, f_saemix_des$so))
#> Error in compare.saemix(list(f_saemix$so, f_saemix_des$so)): object 'f_saemix' not found
# }