This function uses saemix::saemix() as a backend for fitting nonlinear mixed effects models created from mmkin row objects using the Stochastic Approximation 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 S3 object of class 'saem.mmkin', containing the fitted saemix::SaemixObject as a list component named 'so'.

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.

See also

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] "Mon Nov 9 07:04:09 2020" #> .... #> Minimisation finished #> [1] "Mon Nov 9 07:04:11 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] "Mon Nov 9 07:04:12 2020" #> .... #> Minimisation finished #> [1] "Mon Nov 9 07:04:13 2020"
f_saem_fomc <- saem(f_mmkin_parent["FOMC", ])
#> Running main SAEM algorithm #> [1] "Mon Nov 9 07:04:14 2020" #> .... #> Minimisation finished #> [1] "Mon Nov 9 07:04:16 2020"
f_saem_dfop <- saem(f_mmkin_parent["DFOP", ])
#> Running main SAEM algorithm #> [1] "Mon Nov 9 07:04:16 2020" #> .... #> Minimisation finished #> [1] "Mon Nov 9 07:04:19 2020"
# The returned saem.mmkin object contains an SaemixObject, therefore 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] "Mon Nov 9 07:04:21 2020" #> .... #> Minimisation finished #> [1] "Mon Nov 9 07:04:26 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
sfo_sfo <- mkinmod(parent = mkinsub("SFO", "A1"), A1 = mkinsub("SFO"))
#> Successfully compiled differential equation model from auto-generated C code.
fomc_sfo <- mkinmod(parent = mkinsub("FOMC", "A1"), A1 = mkinsub("SFO"))
#> Successfully compiled differential equation model from auto-generated C code.
dfop_sfo <- mkinmod(parent = mkinsub("DFOP", "A1"), A1 = mkinsub("SFO"))
#> Successfully compiled differential equation model from auto-generated C code.
# The following fit uses analytical solutions for SFO-SFO and DFOP-SFO, # and compiled ODEs for FOMC, both are fast f_mmkin <- mmkin(list( "SFO-SFO" = sfo_sfo, "FOMC-SFO" = fomc_sfo, "DFOP-SFO" = dfop_sfo), ds, quiet = TRUE) # These take about five seconds each on this system, as we use # analytical solutions written for saemix. When using the analytical # solutions written for mkin this took around four minutes f_saem_sfo_sfo <- saem(f_mmkin["SFO-SFO", ])
#> Running main SAEM algorithm #> [1] "Mon Nov 9 07:04:28 2020" #> .... #> Minimisation finished #> [1] "Mon Nov 9 07:04:33 2020"
f_saem_dfop_sfo <- saem(f_mmkin["SFO-SFO", ])
#> Running main SAEM algorithm #> [1] "Mon Nov 9 07:04:33 2020" #> .... #> Minimisation finished #> [1] "Mon Nov 9 07:04:39 2020"
# Using a single core, the following takes about 6 minutes, using 10 cores # it is slower instead of faster f_saem_fomc <- saem(f_mmkin["FOMC-SFO", ], cores = 1)
#> Running main SAEM algorithm #> [1] "Mon Nov 9 07:04:39 2020" #> DLSODA- At current T (=R1), MXSTEP (=I1) steps #> taken on this call before reaching TOUT #> In above message, I1 = 5000 #> #> In above message, R1 = 0.00156238 #> #> DLSODA- At T (=R1) and step size H (=R2), the #> corrector convergence failed repeatedly #> or with ABS(H) = HMIN #> In above message, R1 = 0, R2 = 1.1373e-10 #> #> DLSODA- At current T (=R1), MXSTEP (=I1) steps #> taken on this call before reaching TOUT #> In above message, I1 = 5000 #> #> In above message, R1 = 2.24752e-06 #> #> DLSODA- At current T (=R1), MXSTEP (=I1) steps #> taken on this call before reaching TOUT #> In above message, I1 = 5000 #> #> In above message, R1 = 0.000585935 #> #> .... #> Minimisation finished #> [1] "Mon Nov 9 07:11:24 2020"
#> Warning: Creating predictions from the saemix model failed
# }