From f35e0b3d3b9f41bee2f5cc357afcb69e3aadad15 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Fri, 8 Jul 2022 17:39:44 +0200 Subject: Store DLL info in mkinmod objects for performance Thanks to Tomas Kalibera for his analysis of the problem on the r-package-devel mailing list and for the suggestion on how to fix it. See the current benchmark vignette for the new data on mkin 1.1.1 with R 4.2.1, with unprecedented performance. --- vignettes/web_only/benchmarks.R | 112 ------------------------ vignettes/web_only/benchmarks.html | 53 +++++++++--- vignettes/web_only/dimethenamid_2018.R | 152 --------------------------------- vignettes/web_only/mkin_benchmarks.rda | Bin 1359 -> 1419 bytes 4 files changed, 41 insertions(+), 276 deletions(-) delete mode 100644 vignettes/web_only/benchmarks.R delete mode 100644 vignettes/web_only/dimethenamid_2018.R (limited to 'vignettes/web_only') diff --git a/vignettes/web_only/benchmarks.R b/vignettes/web_only/benchmarks.R deleted file mode 100644 index c9ba5be3..00000000 --- a/vignettes/web_only/benchmarks.R +++ /dev/null @@ -1,112 +0,0 @@ -## ---- include = FALSE--------------------------------------------------------- -library(knitr) -opts_chunk$set(tidy = FALSE, cache = FALSE) -library("mkin") - -## ----include = FALSE---------------------------------------------------------- -cpu_model <- benchmarkme::get_cpu()$model_name -# Abbreviate CPU identifiers -cpu_model <- gsub("AMD ", "", cpu_model) -cpu_model <- gsub("Intel\\(R\\) Core\\(TM\\) ", "", cpu_model) -cpu_model <- gsub(" Eight-Core Processor", "", cpu_model) -cpu_model <- gsub(" CPU @ 2.50GHz", "", cpu_model) - -operating_system <- Sys.info()[["sysname"]] -mkin_version <- as.character(packageVersion("mkin")) -R_version <- paste0(R.version$major, ".", R.version$minor) -system_string <- paste0(operating_system, ", ", cpu_model, ", mkin ", mkin_version, ", R ", R_version) - -benchmark_path = normalizePath("~/git/mkin/vignettes/web_only/mkin_benchmarks.rda") -load(benchmark_path) - -# Used for reformatting the data on 2022-06-30 -# mkin_benchmarks[, "R"] <- NA -# mkin_benchmarks <- mkin_benchmarks[c(2, 1, 15, 3, 4:14)] -# mkin_benchmarks[, "CPU"] <- gsub("AMD.*", "Ryzen 7 1700", mkin_benchmarks[, "CPU"]) -# mkin_benchmarks[, "CPU"] <- gsub("Intel.*", "i7-4710MQ", mkin_benchmarks[, "CPU"]) -# rownames(mkin_benchmarks) <- gsub("AMD Ryzen 7 1700 Eight-Core Processor", "Ryzen 7 1700", rownames(mkin_benchmarks)) -# rownames(mkin_benchmarks) <- gsub("Intel\\(R\\) Core\\(TM\\) i7-4710MQ CPU @ 2.50GHz", "i7-4710MQ", rownames(mkin_benchmarks)) -# rownames(mkin_benchmarks) <- gsub(" version", "", rownames(mkin_benchmarks)) - -mkin_benchmarks[system_string, c("CPU", "OS", "mkin", "R")] <- - c(cpu_model, operating_system, mkin_version, R_version) - -if (mkin_version > "0.9.48.1") { - mmkin_bench <- function(models, datasets, error_model = "const") { - mmkin(models, datasets, error_model = error_model, cores = 1, quiet = TRUE) - } -} else { - mmkin_bench <- function(models, datasets, error_model = NULL) { - mmkin(models, datasets, reweight.method = error_model, cores = 1, quiet = TRUE) - } -} - -## ----parent_only, warning = FALSE--------------------------------------------- -FOCUS_C <- FOCUS_2006_C -FOCUS_D <- subset(FOCUS_2006_D, value != 0) -parent_datasets <- list(FOCUS_C, FOCUS_D) - -t1 <- system.time(mmkin_bench(c("SFO", "FOMC", "DFOP", "HS"), parent_datasets))[["elapsed"]] -t2 <- system.time(mmkin_bench(c("SFO", "FOMC", "DFOP", "HS"), parent_datasets, - error_model = "tc"))[["elapsed"]] - -## ----one_metabolite, message = FALSE------------------------------------------ -SFO_SFO <- mkinmod( - parent = mkinsub("SFO", "m1"), - m1 = mkinsub("SFO")) -FOMC_SFO <- mkinmod( - parent = mkinsub("FOMC", "m1"), - m1 = mkinsub("SFO")) -DFOP_SFO <- mkinmod( - parent = mkinsub("FOMC", "m1"), - m1 = mkinsub("SFO")) -t3 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D)))[["elapsed"]] -t4 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D), - error_model = "tc"))[["elapsed"]] -t5 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D), - error_model = "obs"))[["elapsed"]] - -## ----two_metabolites, message = FALSE----------------------------------------- -m_synth_SFO_lin <- mkinmod(parent = mkinsub("SFO", "M1"), - M1 = mkinsub("SFO", "M2"), - M2 = mkinsub("SFO"), - use_of_ff = "max", quiet = TRUE) - -m_synth_DFOP_par <- mkinmod(parent = mkinsub("DFOP", c("M1", "M2")), - M1 = mkinsub("SFO"), - M2 = mkinsub("SFO"), - use_of_ff = "max", quiet = TRUE) - -SFO_lin_a <- synthetic_data_for_UBA_2014[[1]]$data - -DFOP_par_c <- synthetic_data_for_UBA_2014[[12]]$data - -t6 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a)))[["elapsed"]] -t7 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c)))[["elapsed"]] - -t8 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a), - error_model = "tc"))[["elapsed"]] -t9 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c), - error_model = "tc"))[["elapsed"]] - -t10 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a), - error_model = "obs"))[["elapsed"]] -t11 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c), - error_model = "obs"))[["elapsed"]] - -## ----results------------------------------------------------------------------ -mkin_benchmarks[system_string, paste0("t", 1:11)] <- - c(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) -save(mkin_benchmarks, file = benchmark_path) -# Hide rownames from kable for results section -rownames(mkin_benchmarks) <- NULL - -## ---- echo = FALSE------------------------------------------------------------ -kable(mkin_benchmarks[, c(1:4, 5:6)]) - -## ---- echo = FALSE------------------------------------------------------------ -kable(mkin_benchmarks[, c(1:4, 7:9)]) - -## ---- echo = FALSE------------------------------------------------------------ -kable(mkin_benchmarks[, c(1:4, 10:15)]) - diff --git a/vignettes/web_only/benchmarks.html b/vignettes/web_only/benchmarks.html index a127a7b4..9923a8fa 100644 --- a/vignettes/web_only/benchmarks.html +++ b/vignettes/web_only/benchmarks.html @@ -1599,7 +1599,7 @@ div.tocify {

Benchmark timings for mkin

Johannes Ranke

-

Last change 1 July 2022 (rebuilt 2022-07-01)

+

Last change 1 July 2022 (rebuilt 2022-07-08)

@@ -1775,8 +1775,8 @@ rownames(mkin_benchmarks) <- NULL Ryzen 7 1700 4.2.1 1.1.0 -1.807 -3.488 +1.842 +3.453 Linux @@ -1794,6 +1794,14 @@ rownames(mkin_benchmarks) <- NULL 1.877 3.906 + +Linux +i7-4710MQ +4.2.1 +1.1.1 +1.592 +3.101 + @@ -1917,9 +1925,9 @@ rownames(mkin_benchmarks) <- NULL Ryzen 7 1700 4.2.1 1.1.0 -3.788 -19.727 -8.846 +3.802 +21.247 +8.461 Linux @@ -1939,6 +1947,15 @@ rownames(mkin_benchmarks) <- NULL 8.058 3.339 + +Linux +i7-4710MQ +4.2.1 +1.1.1 +1.198 +5.740 +2.388 + @@ -2098,12 +2115,12 @@ rownames(mkin_benchmarks) <- NULL Ryzen 7 1700 4.2.1 1.1.0 -2.828 -4.286 -5.475 -11.054 -6.704 -9.085 +3.018 +4.165 +5.036 +10.844 +6.623 +9.722 Linux @@ -2129,6 +2146,18 @@ rownames(mkin_benchmarks) <- NULL 2.302 3.463 + +Linux +i7-4710MQ +4.2.1 +1.1.1 +0.652 +1.089 +1.149 +3.205 +1.635 +2.444 + diff --git a/vignettes/web_only/dimethenamid_2018.R b/vignettes/web_only/dimethenamid_2018.R deleted file mode 100644 index 2554cd13..00000000 --- a/vignettes/web_only/dimethenamid_2018.R +++ /dev/null @@ -1,152 +0,0 @@ -## ---- include = FALSE--------------------------------------------------------- -require(knitr) -require(mkin) -require(nlme) -options(digits = 5) -opts_chunk$set( - comment = "", - tidy = FALSE, - cache = TRUE -) - -## ----dimethenamid_data-------------------------------------------------------- -library(mkin, quietly = TRUE) -dmta_ds <- lapply(1:7, function(i) { - ds_i <- dimethenamid_2018$ds[[i]]$data - ds_i[ds_i$name == "DMTAP", "name"] <- "DMTA" - ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] - ds_i -}) -names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) -dmta_ds[["Elliot"]] <- rbind(dmta_ds[["Elliot 1"]], dmta_ds[["Elliot 2"]]) -dmta_ds[["Elliot 1"]] <- NULL -dmta_ds[["Elliot 2"]] <- NULL - -## ----f_parent_mkin------------------------------------------------------------ -f_parent_mkin_const <- mmkin(c("SFO", "DFOP"), dmta_ds, - error_model = "const", quiet = TRUE) -f_parent_mkin_tc <- mmkin(c("SFO", "DFOP"), dmta_ds, - error_model = "tc", quiet = TRUE) - -## ----f_parent_mkin_sfo_const-------------------------------------------------- -plot(mixed(f_parent_mkin_const["SFO", ])) - -## ----f_parent_mkin_dfop_const------------------------------------------------- -plot(mixed(f_parent_mkin_const["DFOP", ])) - -## ----f_parent_mkin_dfop_const_test-------------------------------------------- -plot(mixed(f_parent_mkin_const["DFOP", ]), test_log_parms = TRUE) - -## ----f_parent_mkin_dfop_tc_test----------------------------------------------- -plot(mixed(f_parent_mkin_tc["DFOP", ]), test_log_parms = TRUE) - -## ----f_parent_mkin_dfop_tc_print---------------------------------------------- -print(f_parent_mkin_tc["DFOP", ]) - -## ----f_parent_nlme, warning = FALSE------------------------------------------- -library(nlme) -f_parent_nlme_sfo_const <- nlme(f_parent_mkin_const["SFO", ]) -# f_parent_nlme_dfop_const <- nlme(f_parent_mkin_const["DFOP", ]) -f_parent_nlme_sfo_tc <- nlme(f_parent_mkin_tc["SFO", ]) -f_parent_nlme_dfop_tc <- nlme(f_parent_mkin_tc["DFOP", ]) - -## ----AIC_parent_nlme---------------------------------------------------------- -anova( - f_parent_nlme_sfo_const, f_parent_nlme_sfo_tc, f_parent_nlme_dfop_tc -) - -## ----f_parent_nlme_logchol, warning = FALSE, eval = FALSE--------------------- -# f_parent_nlme_sfo_const_logchol <- nlme(f_parent_mkin_const["SFO", ], -# random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k_DMTA ~ 1))) -# anova(f_parent_nlme_sfo_const, f_parent_nlme_sfo_const_logchol) -# f_parent_nlme_sfo_tc_logchol <- nlme(f_parent_mkin_tc["SFO", ], -# random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k_DMTA ~ 1))) -# anova(f_parent_nlme_sfo_tc, f_parent_nlme_sfo_tc_logchol) -# f_parent_nlme_dfop_tc_logchol <- nlme(f_parent_mkin_const["DFOP", ], -# random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1))) -# anova(f_parent_nlme_dfop_tc, f_parent_nlme_dfop_tc_logchol) - -## ----plot_parent_nlme--------------------------------------------------------- -plot(f_parent_nlme_dfop_tc) - -## ----saemix_control, results='hide'------------------------------------------- -library(saemix) -saemix_control <- saemixControl(nbiter.saemix = c(800, 300), nb.chains = 15, - print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) -saemix_control_moreiter <- saemixControl(nbiter.saemix = c(1600, 300), nb.chains = 15, - print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) -saemix_control_10k <- saemixControl(nbiter.saemix = c(10000, 300), nb.chains = 15, - print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) - -## ----f_parent_saemix_sfo_const, results = 'hide', dependson = "saemix_control"---- -f_parent_saemix_sfo_const <- mkin::saem(f_parent_mkin_const["SFO", ], quiet = TRUE, - control = saemix_control, transformations = "saemix") -plot(f_parent_saemix_sfo_const$so, plot.type = "convergence") - -## ----f_parent_saemix_sfo_tc, results = 'hide', dependson = "saemix_control"---- -f_parent_saemix_sfo_tc <- mkin::saem(f_parent_mkin_tc["SFO", ], quiet = TRUE, - control = saemix_control, transformations = "saemix") -plot(f_parent_saemix_sfo_tc$so, plot.type = "convergence") - -## ----f_parent_saemix_dfop_const, results = 'show', dependson = "saemix_control"---- -f_parent_saemix_dfop_const <- mkin::saem(f_parent_mkin_const["DFOP", ], quiet = TRUE, - control = saemix_control, transformations = "saemix") -plot(f_parent_saemix_dfop_const$so, plot.type = "convergence") -print(f_parent_saemix_dfop_const) - -## ----f_parent_saemix_dfop_tc, results = 'show', dependson = "saemix_control"---- -f_parent_saemix_dfop_tc <- mkin::saem(f_parent_mkin_tc["DFOP", ], quiet = TRUE, - control = saemix_control, transformations = "saemix") -f_parent_saemix_dfop_tc_moreiter <- mkin::saem(f_parent_mkin_tc["DFOP", ], quiet = TRUE, - control = saemix_control_moreiter, transformations = "saemix") -plot(f_parent_saemix_dfop_tc$so, plot.type = "convergence") -print(f_parent_saemix_dfop_tc) - -## ----AIC_parent_saemix, cache = FALSE----------------------------------------- -AIC_parent_saemix <- saemix::compare.saemix( - f_parent_saemix_sfo_const$so, - f_parent_saemix_sfo_tc$so, - f_parent_saemix_dfop_const$so, - f_parent_saemix_dfop_tc$so, - f_parent_saemix_dfop_tc_moreiter$so) -rownames(AIC_parent_saemix) <- c( - "SFO const", "SFO tc", "DFOP const", "DFOP tc", "DFOP tc more iterations") -print(AIC_parent_saemix) - -## ----AIC_parent_saemix_methods, cache = FALSE--------------------------------- -f_parent_saemix_dfop_tc$so <- - saemix::llgq.saemix(f_parent_saemix_dfop_tc$so) -AIC_parent_saemix_methods <- c( - is = AIC(f_parent_saemix_dfop_tc$so, method = "is"), - gq = AIC(f_parent_saemix_dfop_tc$so, method = "gq"), - lin = AIC(f_parent_saemix_dfop_tc$so, method = "lin") -) -print(AIC_parent_saemix_methods) - -## ----AIC_parent_saemix_methods_defaults, cache = FALSE------------------------ -f_parent_saemix_dfop_tc_defaults <- mkin::saem(f_parent_mkin_tc["DFOP", ]) -f_parent_saemix_dfop_tc_defaults$so <- - saemix::llgq.saemix(f_parent_saemix_dfop_tc_defaults$so) -AIC_parent_saemix_methods_defaults <- c( - is = AIC(f_parent_saemix_dfop_tc_defaults$so, method = "is"), - gq = AIC(f_parent_saemix_dfop_tc_defaults$so, method = "gq"), - lin = AIC(f_parent_saemix_dfop_tc_defaults$so, method = "lin") -) -print(AIC_parent_saemix_methods_defaults) - -## ----AIC_all, cache = FALSE--------------------------------------------------- -AIC_all <- data.frame( - check.names = FALSE, - "Degradation model" = c("SFO", "SFO", "DFOP", "DFOP"), - "Error model" = c("const", "tc", "const", "tc"), - nlme = c(AIC(f_parent_nlme_sfo_const), AIC(f_parent_nlme_sfo_tc), NA, AIC(f_parent_nlme_dfop_tc)), - saemix_lin = sapply(list(f_parent_saemix_sfo_const$so, f_parent_saemix_sfo_tc$so, - f_parent_saemix_dfop_const$so, f_parent_saemix_dfop_tc$so), AIC, method = "lin"), - saemix_is = sapply(list(f_parent_saemix_sfo_const$so, f_parent_saemix_sfo_tc$so, - f_parent_saemix_dfop_const$so, f_parent_saemix_dfop_tc$so), AIC, method = "is") -) -kable(AIC_all) - -## ----sessionInfo, cache = FALSE----------------------------------------------- -sessionInfo() - diff --git a/vignettes/web_only/mkin_benchmarks.rda b/vignettes/web_only/mkin_benchmarks.rda index 18211bb9..3687ab8e 100644 Binary files a/vignettes/web_only/mkin_benchmarks.rda and b/vignettes/web_only/mkin_benchmarks.rda differ -- cgit v1.2.1