From 9f9336d59e68690472888bfdeb12944176d7d272 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Mon, 25 May 2020 13:01:23 +0200 Subject: First working version of saemix helper functions saemix_data depends on a development version of saemix, see pull request saemixdevelopment/saemixextension#2 --- DESCRIPTION | 2 +- NAMESPACE | 2 + NEWS.md | 2 + R/saemix.R | 118 ++++++++ _pkgdown.yml | 2 + docs/news/index.html | 3 +- docs/pkgdown.yml | 2 +- docs/reference/get_deg_func.html | 5 +- docs/reference/index.html | 6 + docs/reference/mkinfit.html | 22 +- docs/reference/nlme.mmkin.html | 5 +- docs/reference/saemix-1.png | Bin 0 -> 37443 bytes docs/reference/saemix-2.png | Bin 0 -> 38557 bytes docs/reference/saemix-3.png | Bin 0 -> 40023 bytes docs/reference/saemix-4.png | Bin 0 -> 37936 bytes docs/reference/saemix-5.png | Bin 0 -> 12062 bytes docs/reference/saemix.html | 489 +++++++++++++++++++++++++++++++++ docs/reference/transform_odeparms.html | 16 +- docs/sitemap.xml | 3 + man/saemix.Rd | 43 +++ 20 files changed, 694 insertions(+), 26 deletions(-) create mode 100644 R/saemix.R create mode 100644 docs/reference/saemix-1.png create mode 100644 docs/reference/saemix-2.png create mode 100644 docs/reference/saemix-3.png create mode 100644 docs/reference/saemix-4.png create mode 100644 docs/reference/saemix-5.png create mode 100644 docs/reference/saemix.html create mode 100644 man/saemix.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 96df2cea..8a71ea6c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -19,7 +19,7 @@ Description: Calculation routines based on the FOCUS Kinetics Report (2006, Imports: stats, graphics, methods, deSolve, R6, inline, parallel, numDeriv, lmtest, pkgbuild, nlme, purrr Suggests: knitr, rbenchmark, tikzDevice, testthat, rmarkdown, covr, vdiffr, - benchmarkme, tibble, stats4 + benchmarkme, tibble, stats4, saemix (>= 3.1.9000) License: GPL LazyLoad: yes LazyData: yes diff --git a/NAMESPACE b/NAMESPACE index 72a60dea..4ee0df91 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -73,6 +73,8 @@ export(parms) export(plot_err) export(plot_res) export(plot_sep) +export(saemix_data) +export(saemix_model) export(sigma_twocomp) export(transform_odeparms) import(deSolve) diff --git a/NEWS.md b/NEWS.md index 37cb5072..a3bd2bc2 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,6 +2,8 @@ - 'parms': Add a method for mmkin objects +- 'saemix_model', 'saemix_data': Helper functions to fit nonlinear mixed-effects models for mmkin row objects using the saemix package + # mkin 0.9.50.2 (2020-05-12) - Increase tolerance for a platform specific test results on the Solaris test machine on CRAN diff --git a/R/saemix.R b/R/saemix.R new file mode 100644 index 00000000..d3af8b43 --- /dev/null +++ b/R/saemix.R @@ -0,0 +1,118 @@ +#' Create saemix models from mmkin row objects +#' +#' This function sets up a nonlinear mixed effects model for an mmkin row +#' object for use with the saemix package. 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. +#' +#' @param object An mmkin row object containing several fits of the same model to different datasets +#' @rdname saemix +#' @examples +#' ds <- lapply(experimental_data_for_UBA_2019[6:10], +#' function(x) subset(x$data[c("name", "time", "value")])) +#' names(ds) <- paste("Dataset", 6:10) +#' sfo_sfo <- mkinmod(parent = mkinsub("SFO", "A1"), +#' A1 = mkinsub("SFO")) +#' f_mmkin <- mmkin(list("SFO-SFO" = sfo_sfo), ds, quiet = TRUE, cores = 5) +#' \dontrun{ +#' if (require(saemix)) { +#' m_saemix <- saemix_model(f_mmkin) +#' d_saemix <- saemix_data(f_mmkin) +#' saemix_options <- list(seed = 123456, save = FALSE, save.graphs = FALSE) +#' saemix(m_saemix, d_saemix, saemix_options) +#' } +#' } +#' @return An [saemix::SaemixModel] object. +#' @export +saemix_model <- function(object) { + if (nrow(object) > 1) stop("Only row objects allowed") + + mkin_model <- object[[1]]$mkinmod + analytical <- is.function(mkin_model$deg_func) + + degparms_optim <- mean_degparms(object) + psi0 <- matrix(degparms_optim, nrow = 1) + colnames(psi0) <- names(degparms_optim) + + degparms_fixed <- object[[1]]$bparms.fixed + + odeini_optim_parm_names <- grep('_0$', names(degparms_optim), value = TRUE) + odeini_fixed_parm_names <- grep('_0$', names(degparms_fixed), value = TRUE) + + odeparms_fixed_names <- setdiff(names(degparms_fixed), odeini_fixed_parm_names) + odeparms_fixed <- degparms_fixed[odeparms_fixed_names] + + odeini_fixed <- degparms_fixed[odeini_fixed_parm_names] + names(odeini_fixed) <- gsub('_0$', '', odeini_fixed_parm_names) + + model_function <- function(psi, id, xidep) { + + uid <- unique(id) + + res_list <- parallel::mclapply(uid, function(i) { + transparms_optim <- psi[i, ] + names(transparms_optim) <- names(degparms_optim) + + odeini_optim <- transparms_optim[odeini_optim_parm_names] + names(odeini_optim) <- gsub('_0$', '', odeini_optim_parm_names) + + odeini <- c(odeini_optim, odeini_fixed)[names(mkin_model$diffs)] + + ode_transparms_optim_names <- setdiff(names(transparms_optim), odeini_optim_parm_names) + odeparms_optim <- backtransform_odeparms(transparms_optim[ode_transparms_optim_names], mkin_model, + transform_rates = object[[1]]$transform_rates, + transform_fractions = object[[1]]$transform_fractions) + odeparms <- c(odeparms_optim, odeparms_fixed) + + xidep_i <- subset(xidep, id == i) + + if (analytical) { + out_values <- mkin_model$deg_func(xidep_i, odeini, odeparms) + } else { + + i_time <- xidep_i$time + i_name <- xidep_i$name + + out_wide <- mkinpredict(mkin_model, + odeparms = odeparms, odeini = odeini, + solution_type = object[[1]]$solution_type, + outtimes = sort(unique(i_time))) + + out_index <- cbind(as.character(i_time), as.character(i_name)) + out_values <- out_wide[out_index] + } + return(out_values) + }, mc.cores = 15) + res <- unlist(res_list) + return(res) + } + + res <- saemixModel(model_function, psi0, + "Mixed model generated from mmkin object", + transform.par = rep(0, length(degparms_optim))) + return(res) +} + +#' @rdname saemix +#' @param \dots Further parameters passed to [saemix::saemixData] +#' @return An [saemix::SaemixData] object. +#' @export +saemix_data <- function(object, ...) { + if (nrow(object) > 1) stop("Only row objects allowed") + ds_names <- colnames(object) + + ds_list <- lapply(object, function(x) x$data[c("time", "variable", "observed")]) + names(ds_list) <- ds_names + ds_saemix_all <- purrr::map_dfr(ds_list, function(x) x, .id = "ds") + ds_saemix <- data.frame(ds = ds_saemix_all$ds, + name = as.character(ds_saemix_all$variable), + time = ds_saemix_all$time, + value = ds_saemix_all$observed, + stringsAsFactors = FALSE) + + res <- saemixData(ds_saemix, + name.group = "ds", + name.predictors = c("time", "name"), + name.response = "value", ...) + return(res) +} diff --git a/_pkgdown.yml b/_pkgdown.yml index d42b7fc9..8c5122e6 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -39,6 +39,8 @@ reference: - nlme.mmkin - plot.nlme.mmkin - nlme_function + - saemix_model + - saemix_data - get_deg_func - title: Datasets and known results contents: diff --git a/docs/news/index.html b/docs/news/index.html index b8b7dacd..149fc98e 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -146,7 +146,8 @@ mkin 0.9.50.3 (unreleased) Unreleased
diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 4756397e..0bb01ef4 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -10,7 +10,7 @@ articles: NAFTA_examples: web_only/NAFTA_examples.html benchmarks: web_only/benchmarks.html compiled_models: web_only/compiled_models.html -last_built: 2020-05-15T05:30Z +last_built: 2020-05-25T10:48Z urls: reference: https://pkgdown.jrwb.de/mkin/reference article: https://pkgdown.jrwb.de/mkin/articles diff --git a/docs/reference/get_deg_func.html b/docs/reference/get_deg_func.html index 812b25d7..6eedafd2 100644 --- a/docs/reference/get_deg_func.html +++ b/docs/reference/get_deg_func.html @@ -72,7 +72,7 @@ mkin - 0.9.50.2 + 0.9.50.3
@@ -109,6 +109,9 @@
  • Example evaluation of NAFTA SOP Attachment examples
  • +
  • + Some benchmark timings +
  • diff --git a/docs/reference/index.html b/docs/reference/index.html index b418b6ab..10d3b53a 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -330,6 +330,12 @@ of an mmkin object

    Helper functions to create nlme models from mmkin row objects

    + +

    saemix_model() saemix_data()

    + +

    Create saemix models from mmkin row objects

    + +

    get_deg_func()

    diff --git a/docs/reference/mkinfit.html b/docs/reference/mkinfit.html index 0c1540d2..ced0cb54 100644 --- a/docs/reference/mkinfit.html +++ b/docs/reference/mkinfit.html @@ -424,8 +424,8 @@ Degradation Data. Environments 6(12) 124 fit <- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE) summary(fit)
    #> mkin version used for fitting: 0.9.50.3 #> R version used for fitting: 4.0.0 -#> Date of fit: Fri May 15 07:30:32 2020 -#> Date of summary: Fri May 15 07:30:32 2020 +#> Date of fit: Mon May 25 12:29:22 2020 +#> Date of summary: Mon May 25 12:29:22 2020 #> #> Equations: #> d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent @@ -509,7 +509,7 @@ Degradation Data. Environments 6(12) 124 m1 = mkinsub("SFO"))
    #> Successfully compiled differential equation model from auto-generated C code.
    # Fit the model to the FOCUS example dataset D using defaults print(system.time(fit <- mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "eigen", quiet = TRUE)))
    #> Warning: Observations with value of zero were removed from the data
    #> user system elapsed -#> 0.413 0.005 0.419
    parms(fit)
    #> parent_0 k_parent k_m1 f_parent_to_m1 sigma +#> 0.407 0.013 0.423
    parms(fit)
    #> parent_0 k_parent k_m1 f_parent_to_m1 sigma #> 99.598483222 0.098697734 0.005260651 0.514475962 3.125503875
    #> $ff #> parent_m1 parent_sink #> 0.514476 0.485524 @@ -599,7 +599,7 @@ Degradation Data. Environments 6(12) 124 #> Sum of squared residuals at call 166: 371.2134 #> Sum of squared residuals at call 168: 371.2134 #> Negative log-likelihood at call 178: 97.22429
    #> Optimisation successfully terminated.
    #> user system elapsed -#> 0.354 0.000 0.354
    parms(fit.deSolve)
    #> parent_0 k_parent k_m1 f_parent_to_m1 sigma +#> 0.351 0.000 0.352
    parms(fit.deSolve)
    #> parent_0 k_parent k_m1 f_parent_to_m1 sigma #> 99.598480759 0.098697739 0.005260651 0.514475958 3.125503874
    endpoints(fit.deSolve)
    #> $ff #> parent_m1 parent_sink #> 0.514476 0.485524 @@ -633,8 +633,8 @@ Degradation Data. Environments 6(12) 124 SFO_SFO.ff <- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"), use_of_ff = "max")
    #> Successfully compiled differential equation model from auto-generated C code.
    f.noweight <- mkinfit(SFO_SFO.ff, FOCUS_2006_D, quiet = TRUE)
    #> Warning: Observations with value of zero were removed from the data
    summary(f.noweight)
    #> mkin version used for fitting: 0.9.50.3 #> R version used for fitting: 4.0.0 -#> Date of fit: Fri May 15 07:30:37 2020 -#> Date of summary: Fri May 15 07:30:37 2020 +#> Date of fit: Mon May 25 12:29:28 2020 +#> Date of summary: Mon May 25 12:29:28 2020 #> #> Equations: #> d_parent/dt = - k_parent * parent @@ -755,8 +755,8 @@ Degradation Data. Environments 6(12) 124 #> 120 m1 25.15 28.78984 -3.640e+00 #> 120 m1 33.31 28.78984 4.520e+00
    f.obs <- mkinfit(SFO_SFO.ff, FOCUS_2006_D, error_model = "obs", quiet = TRUE)
    #> Warning: Observations with value of zero were removed from the data
    summary(f.obs)
    #> mkin version used for fitting: 0.9.50.3 #> R version used for fitting: 4.0.0 -#> Date of fit: Fri May 15 07:30:38 2020 -#> Date of summary: Fri May 15 07:30:38 2020 +#> Date of fit: Mon May 25 12:29:28 2020 +#> Date of summary: Mon May 25 12:29:28 2020 #> #> Equations: #> d_parent/dt = - k_parent * parent @@ -892,8 +892,8 @@ Degradation Data. Environments 6(12) 124 #> 120 m1 25.15 28.80429 -3.654e+00 #> 120 m1 33.31 28.80429 4.506e+00
    f.tc <- mkinfit(SFO_SFO.ff, FOCUS_2006_D, error_model = "tc", quiet = TRUE)
    #> Warning: Observations with value of zero were removed from the data
    summary(f.tc)
    #> mkin version used for fitting: 0.9.50.3 #> R version used for fitting: 4.0.0 -#> Date of fit: Fri May 15 07:30:39 2020 -#> Date of summary: Fri May 15 07:30:39 2020 +#> Date of fit: Mon May 25 12:29:29 2020 +#> Date of summary: Mon May 25 12:29:29 2020 #> #> Equations: #> d_parent/dt = - k_parent * parent @@ -901,7 +901,7 @@ Degradation Data. Environments 6(12) 124 #> #> Model predictions using solution type analytical #> -#> Fitted using 1875 model solutions performed in 0.658 s +#> Fitted using 1875 model solutions performed in 0.644 s #> #> Error model: Two-component variance function #> diff --git a/docs/reference/nlme.mmkin.html b/docs/reference/nlme.mmkin.html index 928ee378..2ada9501 100644 --- a/docs/reference/nlme.mmkin.html +++ b/docs/reference/nlme.mmkin.html @@ -74,7 +74,7 @@ have been obtained by fitting the same model to a list of datasets." /> mkin - 0.9.50.2 + 0.9.50.3
    @@ -111,6 +111,9 @@ have been obtained by fitting the same model to a list of datasets." />
  • Example evaluation of NAFTA SOP Attachment examples
  • +
  • + Some benchmark timings +
  • diff --git a/docs/reference/saemix-1.png b/docs/reference/saemix-1.png new file mode 100644 index 00000000..529588ce Binary files /dev/null and b/docs/reference/saemix-1.png differ diff --git a/docs/reference/saemix-2.png b/docs/reference/saemix-2.png new file mode 100644 index 00000000..b85f878f Binary files /dev/null and b/docs/reference/saemix-2.png differ diff --git a/docs/reference/saemix-3.png b/docs/reference/saemix-3.png new file mode 100644 index 00000000..7ccfd0ff Binary files /dev/null and b/docs/reference/saemix-3.png differ diff --git a/docs/reference/saemix-4.png b/docs/reference/saemix-4.png new file mode 100644 index 00000000..55698bba Binary files /dev/null and b/docs/reference/saemix-4.png differ diff --git a/docs/reference/saemix-5.png b/docs/reference/saemix-5.png new file mode 100644 index 00000000..27db3938 Binary files /dev/null and b/docs/reference/saemix-5.png differ diff --git a/docs/reference/saemix.html b/docs/reference/saemix.html new file mode 100644 index 00000000..1737a21c --- /dev/null +++ b/docs/reference/saemix.html @@ -0,0 +1,489 @@ + + + + + + + + +Create saemix models from mmkin row objects — saemix_model • mkin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    This function sets up a nonlinear mixed effects model for an mmkin row +object for use with the saemix package. 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.

    +
    + +
    saemix_model(object)
    +
    +saemix_data(object, ...)
    + +

    Arguments

    + + + + + + + + + + +
    object

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

    ...

    Further parameters passed to saemix::saemixData

    + +

    Value

    + +

    An saemix::SaemixModel object.

    +

    An saemix::SaemixData object.

    + +

    Examples

    +
    ds <- lapply(experimental_data_for_UBA_2019[6:10], + function(x) subset(x$data[c("name", "time", "value")])) +names(ds) <- paste("Dataset", 6:10) +sfo_sfo <- mkinmod(parent = mkinsub("SFO", "A1"), + A1 = mkinsub("SFO"))
    #> Successfully compiled differential equation model from auto-generated C code.
    f_mmkin <- mmkin(list("SFO-SFO" = sfo_sfo), ds, quiet = TRUE, cores = 5) +# \dontrun{ +if (require(saemix)) { + m_saemix <- saemix_model(f_mmkin) + d_saemix <- saemix_data(f_mmkin) + saemix_options <- list(seed = 123456, save = FALSE, save.graphs = FALSE) + saemix(m_saemix, d_saemix, saemix_options) +}
    #> Loading required package: saemix
    #> Package saemix, version 3.1.9000 +#> please direct bugs, questions and feedback to emmanuelle.comets@inserm.fr
    #> +#> +#> The following SaemixModel object was successfully created: +#> +#> Nonlinear mixed-effects model +#> Model function: Mixed model generated from mmkin object Model type: structural +#> function (psi, id, xidep) +#> { +#> uid <- unique(id) +#> res_list <- parallel::mclapply(uid, function(i) { +#> transparms_optim <- psi[i, ] +#> names(transparms_optim) <- names(degparms_optim) +#> odeini_optim <- transparms_optim[odeini_optim_parm_names] +#> names(odeini_optim) <- gsub("_0$", "", odeini_optim_parm_names) +#> odeini <- c(odeini_optim, odeini_fixed)[names(mkin_model$diffs)] +#> ode_transparms_optim_names <- setdiff(names(transparms_optim), +#> odeini_optim_parm_names) +#> odeparms_optim <- backtransform_odeparms(transparms_optim[ode_transparms_optim_names], +#> mkin_model, transform_rates = object[[1]]$transform_rates, +#> transform_fractions = object[[1]]$transform_fractions) +#> odeparms <- c(odeparms_optim, odeparms_fixed) +#> xidep_i <- subset(xidep, id == i) +#> if (analytical) { +#> out_values <- mkin_model$deg_func(xidep_i, odeini, +#> odeparms) +#> } +#> else { +#> i_time <- xidep_i$time +#> i_name <- xidep_i$name +#> out_wide <- mkinpredict(mkin_model, odeparms = odeparms, +#> odeini = odeini, solution_type = object[[1]]$solution_type, +#> outtimes = sort(unique(i_time))) +#> out_index <- cbind(as.character(i_time), as.character(i_name)) +#> out_values <- out_wide[out_index] +#> } +#> return(out_values) +#> }, mc.cores = 15) +#> res <- unlist(res_list) +#> return(res) +#> } +#> <bytecode: 0x555559875398> +#> <environment: 0x55555973a248> +#> Nb of parameters: 4 +#> parameter names: parent_0 log_k_parent log_k_A1 f_parent_ilr_1 +#> distribution: +#> Parameter Distribution Estimated +#> [1,] parent_0 normal Estimated +#> [2,] log_k_parent normal Estimated +#> [3,] log_k_A1 normal Estimated +#> [4,] f_parent_ilr_1 normal Estimated +#> Variance-covariance matrix: +#> parent_0 log_k_parent log_k_A1 f_parent_ilr_1 +#> parent_0 1 0 0 0 +#> log_k_parent 0 1 0 0 +#> log_k_A1 0 0 1 0 +#> f_parent_ilr_1 0 0 0 1 +#> Error model: constant , initial values: a.1=1 +#> No covariate in the model. +#> Initial values +#> parent_0 log_k_parent log_k_A1 f_parent_ilr_1 +#> Pop.CondInit 86.53449 -3.207005 -3.060308 -1.920449 +#> +#> +#> The following SaemixData object was successfully created: +#> +#> Object of class SaemixData +#> longitudinal data for use with the SAEM algorithm +#> Dataset ds_saemix +#> Structured data: value ~ time + name | ds +#> X variable for graphs: time () +#> Running main SAEM algorithm +#> [1] "Mon May 25 12:48:51 2020" +#> .
    #> .
    #> .
    #> .
    #> +#> Minimisation finished +#> [1] "Mon May 25 12:56:39 2020"
    #> Nonlinear mixed-effects model fit by the SAEM algorithm +#> ----------------------------------- +#> ---- Data ---- +#> ----------------------------------- +#> Object of class SaemixData +#> longitudinal data for use with the SAEM algorithm +#> Dataset ds_saemix +#> Structured data: value ~ time + name | ds +#> X variable for graphs: time () +#> Dataset characteristics: +#> number of subjects: 5 +#> number of observations: 170 +#> average/min/max nb obs: 34.00 / 30 / 38 +#> First 10 lines of data: +#> ds time name value mdv cens occ ytype +#> 1 Dataset 6 0 parent 97.2 0 0 1 1 +#> 2 Dataset 6 0 parent 96.4 0 0 1 1 +#> 3 Dataset 6 3 parent 71.1 0 0 1 1 +#> 4 Dataset 6 3 parent 69.2 0 0 1 1 +#> 5 Dataset 6 6 parent 58.1 0 0 1 1 +#> 6 Dataset 6 6 parent 56.6 0 0 1 1 +#> 7 Dataset 6 10 parent 44.4 0 0 1 1 +#> 8 Dataset 6 10 parent 43.4 0 0 1 1 +#> 9 Dataset 6 20 parent 33.3 0 0 1 1 +#> 10 Dataset 6 20 parent 29.2 0 0 1 1 +#> ----------------------------------- +#> ---- Model ---- +#> ----------------------------------- +#> Nonlinear mixed-effects model +#> Model function: Mixed model generated from mmkin object Model type: structural +#> function (psi, id, xidep) +#> { +#> uid <- unique(id) +#> res_list <- parallel::mclapply(uid, function(i) { +#> transparms_optim <- psi[i, ] +#> names(transparms_optim) <- names(degparms_optim) +#> odeini_optim <- transparms_optim[odeini_optim_parm_names] +#> names(odeini_optim) <- gsub("_0$", "", odeini_optim_parm_names) +#> odeini <- c(odeini_optim, odeini_fixed)[names(mkin_model$diffs)] +#> ode_transparms_optim_names <- setdiff(names(transparms_optim), +#> odeini_optim_parm_names) +#> odeparms_optim <- backtransform_odeparms(transparms_optim[ode_transparms_optim_names], +#> mkin_model, transform_rates = object[[1]]$transform_rates, +#> transform_fractions = object[[1]]$transform_fractions) +#> odeparms <- c(odeparms_optim, odeparms_fixed) +#> xidep_i <- subset(xidep, id == i) +#> if (analytical) { +#> out_values <- mkin_model$deg_func(xidep_i, odeini, +#> odeparms) +#> } +#> else { +#> i_time <- xidep_i$time +#> i_name <- xidep_i$name +#> out_wide <- mkinpredict(mkin_model, odeparms = odeparms, +#> odeini = odeini, solution_type = object[[1]]$solution_type, +#> outtimes = sort(unique(i_time))) +#> out_index <- cbind(as.character(i_time), as.character(i_name)) +#> out_values <- out_wide[out_index] +#> } +#> return(out_values) +#> }, mc.cores = 15) +#> res <- unlist(res_list) +#> return(res) +#> } +#> <bytecode: 0x555559875398> +#> <environment: 0x55555973a248> +#> Nb of parameters: 4 +#> parameter names: parent_0 log_k_parent log_k_A1 f_parent_ilr_1 +#> distribution: +#> Parameter Distribution Estimated +#> [1,] parent_0 normal Estimated +#> [2,] log_k_parent normal Estimated +#> [3,] log_k_A1 normal Estimated +#> [4,] f_parent_ilr_1 normal Estimated +#> Variance-covariance matrix: +#> parent_0 log_k_parent log_k_A1 f_parent_ilr_1 +#> parent_0 1 0 0 0 +#> log_k_parent 0 1 0 0 +#> log_k_A1 0 0 1 0 +#> f_parent_ilr_1 0 0 0 1 +#> Error model: constant , initial values: a.1=1 +#> No covariate in the model. +#> Initial values +#> parent_0 log_k_parent log_k_A1 f_parent_ilr_1 +#> Pop.CondInit 86.53449 -3.207005 -3.060308 -1.920449 +#> ----------------------------------- +#> ---- Key algorithm options ---- +#> ----------------------------------- +#> Estimation of individual parameters (MAP) +#> Estimation of standard errors and linearised log-likelihood +#> Estimation of log-likelihood by importance sampling +#> Number of iterations: K1=300, K2=100 +#> Number of chains: 10 +#> Seed: 123456 +#> Number of MCMC iterations for IS: 5000 +#> Simulations: +#> nb of simulated datasets used for npde: 1000 +#> nb of simulated datasets used for VPC: 100 +#> Input/output +#> save the results to a file: FALSE +#> save the graphs to files: FALSE +#> ---------------------------------------------------- +#> ---- Results ---- +#> ---------------------------------------------------- +#> ----------------- Fixed effects ------------------ +#> ---------------------------------------------------- +#> Parameter Estimate SE CV(%) +#> [1,] parent_0 86.21 1.51 1.7 +#> [2,] log_k_parent -3.21 0.59 18.5 +#> [3,] log_k_A1 -4.64 0.29 6.3 +#> [4,] f_parent_ilr_1 -0.32 0.30 93.2 +#> [5,] a.1 4.69 0.27 5.8 +#> ---------------------------------------------------- +#> ----------- Variance of random effects ----------- +#> ---------------------------------------------------- +#> Parameter Estimate SE CV(%) +#> parent_0 omega2.parent_0 6.07 7.08 117 +#> log_k_parent omega2.log_k_parent 1.75 1.11 63 +#> log_k_A1 omega2.log_k_A1 0.26 0.26 101 +#> f_parent_ilr_1 omega2.f_parent_ilr_1 0.38 0.27 71 +#> ---------------------------------------------------- +#> ------ Correlation matrix of random effects ------ +#> ---------------------------------------------------- +#> omega2.parent_0 omega2.log_k_parent omega2.log_k_A1 +#> omega2.parent_0 1 0 0 +#> omega2.log_k_parent 0 1 0 +#> omega2.log_k_A1 0 0 1 +#> omega2.f_parent_ilr_1 0 0 0 +#> omega2.f_parent_ilr_1 +#> omega2.parent_0 0 +#> omega2.log_k_parent 0 +#> omega2.log_k_A1 0 +#> omega2.f_parent_ilr_1 1 +#> ---------------------------------------------------- +#> --------------- Statistical criteria ------------- +#> ---------------------------------------------------- +#> Likelihood computed by linearisation +#> -2LL= 1064.397 +#> AIC = 1082.397 +#> BIC = 1078.882 +#> +#> Likelihood computed by importance sampling +#> -2LL= 1063.161 +#> AIC = 1081.161 +#> BIC = 1077.646 +#> ----------------------------------------------------
    #> Nonlinear mixed-effects model fit by the SAEM algorithm +#> ----------------------------------------- +#> ---- Data and Model ---- +#> ----------------------------------------- +#> Data +#> Dataset ds_saemix +#> Longitudinal data: value ~ time + name | ds +#> +#> Model: +#> Mixed model generated from mmkin object +#> 4 parameters: parent_0 log_k_parent log_k_A1 f_parent_ilr_1 +#> error model: constant +#> No covariate +#> +#> Key options +#> Estimation of individual parameters (MAP) +#> Estimation of standard errors and linearised log-likelihood +#> Estimation of log-likelihood by importance sampling +#> Number of iterations: K1=300, K2=100 +#> Number of chains: 10 +#> Seed: 123456 +#> Number of MCMC iterations for IS: 5000 +#> Input/output +#> results not saved +#> no graphs +#> ---------------------------------------------------- +#> ---- Results ---- +#> Fixed effects +#> Parameter Estimate SE CV(%) +#> parent_0 86.214 1.506 1.75 +#> log_k_parent -3.210 0.593 18.47 +#> log_k_A1 -4.643 0.294 6.34 +#> f_parent_ilr_1 -0.322 0.300 93.24 +#> a.1 4.689 0.270 5.76 +#> +#> Variance of random effects +#> Parameter Estimate SE CV(%) +#> omega2.parent_0 6.068 7.078 116.7 +#> omega2.log_k_parent 1.752 1.111 63.4 +#> omega2.log_k_A1 0.256 0.257 100.5 +#> omega2.f_parent_ilr_1 0.385 0.273 70.8 +#> +#> Statistical criteria +#> Likelihood computed by linearisation +#> -2LL= 1064.397 +#> AIC= 1082.397 +#> BIC= 1078.882 +#> Likelihood computed by importance sampling +#> -2LL= 1063.161 +#> AIC= 1081.161 +#> BIC= 1077.646
    # } +
    +
    + +
    + + +
    + + +
    +

    Site built with pkgdown 1.5.1.

    +
    + +
    +
    + + + + + + + + diff --git a/docs/reference/transform_odeparms.html b/docs/reference/transform_odeparms.html index 61ed96d7..7a9198de 100644 --- a/docs/reference/transform_odeparms.html +++ b/docs/reference/transform_odeparms.html @@ -77,7 +77,7 @@ the ilr transformation is used." /> mkin - 0.9.50.2 + 0.9.50.3 @@ -114,6 +114,9 @@ the ilr transformation is used." />
  • Example evaluation of NAFTA SOP Attachment examples
  • +
  • + Some benchmark timings +
  • @@ -211,19 +214,12 @@ fitting procedure.

    Value

    -

    A vector of transformed or backtransformed parameters with the same -names as the original parameters.

    +

    A vector of transformed or backtransformed parameters

    Details

    The transformation of sets of formation fractions is fragile, as it supposes the same ordering of the components in forward and backward transformation. This is no problem for the internal use in mkinfit.

    -

    Functions

    - - -

    Examples

    @@ -245,7 +241,7 @@ This is no problem for the internal use in mkinfit< #> sigma 3.12550 0.35852 8.72 2.24e-10 2.39609 3.8549
    # \dontrun{ # Compare to the version without transforming rate parameters -fit.2 <- mkinfit(SFO_SFO, FOCUS_2006_D, transform_rates = FALSE, quiet = TRUE)
    #> Warning: Observations with value of zero were removed from the data
    #> Error in if (cost < cost.current) { assign("cost.current", cost, inherits = TRUE) if (!quiet) cat(ifelse(OLS, "Sum of squared residuals", "Negative log-likelihood"), " at call ", calls, ": ", cost.current, "\n", sep = "")}: Fehlender Wert, wo TRUE/FALSE nötig ist
    #> Timing stopped at: 0.003 0 0.003
    fit.2.s <- summary(fit.2)
    #> Error in summary(fit.2): Objekt 'fit.2' nicht gefunden
    print(fit.2.s$par, 3)
    #> Error in print(fit.2.s$par, 3): Objekt 'fit.2.s' nicht gefunden
    print(fit.2.s$bpar, 3)
    #> Error in print(fit.2.s$bpar, 3): Objekt 'fit.2.s' nicht gefunden
    # } +fit.2 <- mkinfit(SFO_SFO, FOCUS_2006_D, transform_rates = FALSE, quiet = TRUE)
    #> Warning: Observations with value of zero were removed from the data
    #> Error in if (cost < cost.current) { assign("cost.current", cost, inherits = TRUE) if (!quiet) cat(ifelse(OLS, "Sum of squared residuals", "Negative log-likelihood"), " at call ", calls, ": ", cost.current, "\n", sep = "")}: missing value where TRUE/FALSE needed
    #> Timing stopped at: 0.002 0.001 0.002
    fit.2.s <- summary(fit.2)
    #> Error in summary(fit.2): object 'fit.2' not found
    print(fit.2.s$par, 3)
    #> Error in print(fit.2.s$par, 3): object 'fit.2.s' not found
    print(fit.2.s$bpar, 3)
    #> Error in print(fit.2.s$bpar, 3): object 'fit.2.s' not found
    # } initials <- fit$start$value names(initials) <- rownames(fit$start) diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 81368436..e284abf6 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -171,6 +171,9 @@ https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html + + https://pkgdown.jrwb.de/mkin/reference/saemix.html + https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html diff --git a/man/saemix.Rd b/man/saemix.Rd new file mode 100644 index 00000000..292c25aa --- /dev/null +++ b/man/saemix.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/saemix.R +\name{saemix_model} +\alias{saemix_model} +\alias{saemix_data} +\title{Create saemix models from mmkin row objects} +\usage{ +saemix_model(object) + +saemix_data(object, ...) +} +\arguments{ +\item{object}{An mmkin row object containing several fits of the same model to different datasets} + +\item{\dots}{Further parameters passed to \link[saemix:saemixData]{saemix::saemixData}} +} +\value{ +An \link[saemix:SaemixModel]{saemix::SaemixModel} object. + +An \link[saemix:SaemixData]{saemix::SaemixData} object. +} +\description{ +This function sets up a nonlinear mixed effects model for an mmkin row +object for use with the saemix package. 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. +} +\examples{ +ds <- lapply(experimental_data_for_UBA_2019[6:10], + function(x) subset(x$data[c("name", "time", "value")])) +names(ds) <- paste("Dataset", 6:10) +sfo_sfo <- mkinmod(parent = mkinsub("SFO", "A1"), + A1 = mkinsub("SFO")) +f_mmkin <- mmkin(list("SFO-SFO" = sfo_sfo), ds, quiet = TRUE, cores = 5) +\dontrun{ +if (require(saemix)) { + m_saemix <- saemix_model(f_mmkin) + d_saemix <- saemix_data(f_mmkin) + saemix_options <- list(seed = 123456, save = FALSE, save.graphs = FALSE) + saemix(m_saemix, d_saemix, saemix_options) +} +} +} -- cgit v1.2.1