Each system is characterized by its CPU type, the operating system type and the mkin version. Currently only values for one system are available.

cpu_model <- benchmarkme::get_cpu()$model_name
operating_system <- Sys.info()[["sysname"]]
mkin_version <- as.character(packageVersion("mkin"))
system_string <- paste0(operating_system, ", ", cpu_model, ", mkin version ", mkin_version)
load("~/git/mkin/vignettes/web_only/mkin_benchmarks.rda")
mkin_benchmarks[system_string, c("CPU", "OS", "mkin")] <-
  c(cpu_model, operating_system, mkin_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)
  }
}

Test cases

Parent only:

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:

SFO_SFO <- mkinmod(
  parent = mkinsub("SFO", "m1"),
  m1 = mkinsub("SFO"))
## Successfully compiled differential equation model from auto-generated C code.
FOMC_SFO <- mkinmod(
  parent = mkinsub("FOMC", "m1"),
  m1 = mkinsub("SFO"))
## Successfully compiled differential equation model from auto-generated C code.
DFOP_SFO <- mkinmod(
  parent = mkinsub("FOMC", "m1"),
  m1 = mkinsub("SFO"))
## Successfully compiled differential equation model from auto-generated C code.
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, synthetic data:

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"]]
mkin_benchmarks[system_string, paste0("t", 1:11)] <-
  c(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11)
save(mkin_benchmarks, file = "~/git/mkin/vignettes/web_only/mkin_benchmarks.rda")

Results

Currently, we only have benchmark information on one system, therefore only the mkin version is shown with the results below. Timings are in seconds, shorter is better.

rownames(mkin_benchmarks) <- as.character(mkin_benchmarks$mkin)

Benchmarks for all available error models are shown.

Parent only

Constant variance and two-component error model:

kable(mkin_benchmarks[, c("t1", "t2")])
t1 t2
0.9.48.1 3.610 11.019
0.9.49.1 8.184 22.889
0.9.49.2 7.064 12.558
0.9.49.3 7.296 21.239
0.9.49.4 5.936 20.545
0.9.50.2 1.659 3.900

One metabolite

Constant variance, variance by variable and two-component error model:

kable(mkin_benchmarks[, c("t3", "t4", "t5")])
t3 t4 t5
0.9.48.1 3.764 14.347 9.495
0.9.49.1 4.649 13.789 6.395
0.9.49.2 4.786 8.461 5.675
0.9.49.3 4.510 13.805 7.386
0.9.49.4 4.446 15.335 6.002
0.9.50.2 1.389 6.106 2.716

Two metabolites

Two different datasets, for each constant variance, variance by variable and two-component error model are shown:

kable(mkin_benchmarks[, paste0("t", 6:11)])
t6 t7 t8 t9 t10 t11
0.9.48.1 2.623 4.587 7.525 16.621 8.576 31.267
0.9.49.1 2.542 4.128 4.632 8.171 3.676 5.636
0.9.49.2 2.723 4.478 4.862 7.618 3.579 5.574
0.9.49.3 2.643 4.374 7.020 11.124 5.388 7.365
0.9.49.4 2.635 4.259 4.737 7.763 3.427 5.626
0.9.50.2 0.751 1.209 1.270 2.859 2.026 2.963