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.

Benchmarks for all available error models are shown.

Parent only

Constant variance and two-component error model:

print(mkin_benchmarks[, c("mkin", "t1", "t2")], row.names = FALSE)
##      mkin    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.547  3.955

One metabolite

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

print(mkin_benchmarks[, c("mkin", "t3", "t4", "t5")], row.names = FALSE)
##      mkin    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.379  6.176 2.713

Two metabolites

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

print(mkin_benchmarks[, c("mkin", paste0("t", 6:11))], row.names = FALSE)
##      mkin    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.02 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.742 1.202 1.269   2.97 2.028  2.959