From 01d9de6ff165c64ffc4366f2eeb3d2649b5c74c0 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Mon, 22 Jun 2015 06:09:00 +0200 Subject: Version bump, correct benchmark in vignette/compiled_models Reorganisation of the vignette generation in the Makefile. Improved YAML header in the R markdown vignettes. Rebuilt vignettes with the package installed. --- .Rbuildignore | 28 +- .gitignore | 18 +- DESCRIPTION | 4 +- GNUmakefile | 37 +-- NEWS.md | 7 + vignettes/FOCUS_D.Rmd | 21 +- vignettes/FOCUS_D.html | 331 +++++--------------- vignettes/FOCUS_L.Rmd | 21 +- vignettes/FOCUS_L.html | 684 ++++++++++++----------------------------- vignettes/FOCUS_Z.pdf | Bin 224241 -> 225699 bytes vignettes/GNUMakefile | 18 ++ vignettes/compiled_models.Rmd | 47 +-- vignettes/compiled_models.html | 69 +++-- vignettes/mkin.pdf | Bin 160260 -> 160260 bytes 14 files changed, 447 insertions(+), 838 deletions(-) create mode 100644 vignettes/GNUMakefile diff --git a/.Rbuildignore b/.Rbuildignore index 528d800a..7633df3f 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -3,18 +3,16 @@ NEWS.md README.Rmd gmkin_screenshot.png ^inst/web$ -out$ -toc$ -bbl$ -blg$ -aux$ -log$ -figure/* -vignettes/.build.timestamp -vignettes/figure -vignettes/mkin.tex -vignettes/mkin.pdf -vignettes/FOCUS_L.md -vignettes/FOCUS_L.html -vignettes/FOCUS_Z.tex -vignettes/FOCUS_Z.pdf +^vignettes/*.out$ +^vignettes/*.toc$ +^vignettes/*.bbl$ +^vignettes/*.blg$ +^vignettes/*.aux$ +^vignettes/*.log$ +^vignettes/*.fls$ +^vignettes/*.fdb_latexmk$ +^vignettes/mkin.tex$ +^vignettes/FOCUS_Z.tex$ +^vignettes/*_cache$ +^vignettes/*_files$ +^figure/* diff --git a/.gitignore b/.gitignore index a06689ac..105ccc7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,24 @@ NEWS README.html inst/web* +vignettes/.build.timestamp vignettes/*.aux vignettes/*.bbl vignettes/*.blg +vignettes/*.fdb_latexmk +vignettes/*.fls +vignettes/*.log vignettes/*.log +vignettes/*.md vignettes/*.out -vignettes/*.toc vignettes/*.R -vignettes/.build.timestamp +vignettes/*-concordance.tex +vignettes/*.synctex.gz vignettes/mkin.tex vignettes/FOCUS_Z.tex -vignettes/FOCUS_Z.fls -vignettes/FOCUS_Z.fdb_latexmk -vignettes/*cache/ -vignettes/compiled_models_cache +vignettes/*.toc +vignettes/cache/ +vignettes/figure/ +vignettes/*_cache/ +vignettes/*_files/ mkin.Rcheck diff --git a/DESCRIPTION b/DESCRIPTION index 6586dd8b..60f44a82 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,8 +2,8 @@ Package: mkin Type: Package Title: Routines for Fitting Kinetic Models with One or More State Variables to Chemical Degradation Data -Version: 0.9-36 -Date: 2015-06-21 +Version: 0.9-37 +Date: 2015-06-22 Authors@R: c(person("Johannes", "Ranke", role = c("aut", "cre", "cph"), email = "jranke@uni-bremen.de"), person("Katrin", "Lindenberger", role = "ctb"), diff --git a/GNUmakefile b/GNUmakefile index 7135d6ee..7763098a 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -25,14 +25,13 @@ pkgfiles = NEWS \ README.md \ tests/* \ tests/testthat* \ - TODO \ - vignettes/*.Rmd \ - vignettes/*.Rnw + vignettes/header.tex \ + vignettes/mkin_vignettes.css* \ + vignettes/*.Rnw \ + vignettes/*.Rmd \ + TODO - - - -all: check clean +all: build # convert markdown to R's NEWS format (from knitr package) NEWS: NEWS.md @@ -62,38 +61,22 @@ install-no-vignettes: build-no-vignettes "$(RBIN)/R" CMD INSTALL $(TGZVNR) check: build - # Vignettes have been rebuilt by the build target - "$(RBIN)/R" CMD check --as-cran --no-tests --no-build-vignettes $(TGZ) + "$(RBIN)/R" CMD check --as-cran --no-tests $(TGZ) check-no-vignettes: build-no-vignettes mv $(TGZVNR) $(TGZ) "$(RBIN)/R" CMD check --as-cran --no-tests --no-build-vignettes --no-vignettes $(TGZ) mv $(TGZ) $(TGZVNR) -clean: +clean: clean-vignettes $(RM) -r $(PKGNAME).Rcheck/ - $(RM) vignettes/*.R test: install-no-vignettes cd tests;\ "$(RBIN)/Rscript" testthat.R -vignettes/mkin.pdf: vignettes/mkin.Rnw - "$(RBIN)/Rscript" -e "tools::buildVignette(file = 'vignettes/mkin.Rnw', dir = 'vignettes')" - -vignettes/FOCUS_D.html: vignettes/FOCUS_D.Rmd - "$(RBIN)/Rscript" -e "tools::buildVignette(file = 'vignettes/FOCUS_D.Rmd', dir = 'vignettes')" - -vignettes/FOCUS_L.html: vignettes/FOCUS_L.Rmd - "$(RBIN)/Rscript" -e "tools::buildVignette(file = 'vignettes/FOCUS_L.Rmd', dir = 'vignettes')" - -vignettes/FOCUS_Z.pdf: vignettes/FOCUS_Z.Rnw - "$(RBIN)/Rscript" -e "tools::buildVignette(file = 'vignettes/FOCUS_Z.Rnw', dir = 'vignettes')" - -vignettes/compiled_models.html: vignettes/compiled_models.Rmd - "$(RBIN)/Rscript" -e "tools::buildVignette(file = 'vignettes/compiled_models.Rmd', dir = 'vignettes')" - -vignettes: vignettes/mkin.pdf vignettes/FOCUS_D.html vignettes/FOCUS_L.html vignettes/FOCUS_Z.pdf vignettes/compiled_models.html +vignettes: install-no-vignettes vignettes/* + $(MAKE) -C vignettes sd: "$(RBIN)/Rscript" -e "library(staticdocs); build_site()" diff --git a/NEWS.md b/NEWS.md index 7ee9696f..c9f7efe8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,10 @@ +# CHANGES in mkin VERSION 0.9-37 + +## MINOR CHANGES + +- `vignettes/compiled_models.html`: Show the performance improvement factor actually obtained when building the vignette, as well as mkin version, some system info and the CPU model used for building the vignette. +- `GNUMakefile`,`vignettes/*`: Clean up vignette generation and include table of contents in HTML vignettes + # CHANGES in mkin VERSION 0.9-36 ## MAJOR CHANGES diff --git a/vignettes/FOCUS_D.Rmd b/vignettes/FOCUS_D.Rmd index 8ae73c16..ec0c9040 100644 --- a/vignettes/FOCUS_D.Rmd +++ b/vignettes/FOCUS_D.Rmd @@ -1,14 +1,21 @@ - +--- +title: "`r (vignette_title <- 'Example evaluation of FOCUS Example Dataset D')`" +author: "Johannes Ranke" +date: "`r Sys.Date()`" +output: + html_document: + mathjax: null + theme: united +vignette: > + %\VignetteIndexEntry{`r vignette_title`} + %\VignetteEngine{knitr::rmarkdown} + \usepackage[utf8]{inputenc} +--- ```{r, include = FALSE} library(knitr) -library(methods) -opts_chunk$set(tidy = FALSE, cache = FALSE) +opts_chunk$set(tidy = FALSE, cache = TRUE) ``` -# Example evaluation of FOCUS Example Dataset D This is just a very simple vignette showing how to fit a degradation model for a parent compound with one transformation product using `mkin`. After loading the diff --git a/vignettes/FOCUS_D.html b/vignettes/FOCUS_D.html index 074847f0..53711e88 100644 --- a/vignettes/FOCUS_D.html +++ b/vignettes/FOCUS_D.html @@ -1,223 +1,79 @@ - - - - -Example evaluation of FOCUS Example Dataset D - + - - + + + - - - - - - +
+ - - - - - -

Example evaluation of FOCUS Example Dataset D

- -

This is just a very simple vignette showing how to fit a degradation model for a parent -compound with one transformation product using mkin. After loading the -library we look a the data. We have observed concentrations in the column named -value at the times specified in column time for the two observed variables -named parent and m1.

- -
library("mkin")
-print(FOCUS_2006_D)
-
+

This is just a very simple vignette showing how to fit a degradation model for a parent compound with one transformation product using mkin. After loading the library we look a the data. We have observed concentrations in the column named value at the times specified in column time for the two observed variables named parent and m1.

+
library("mkin")
+
## Loading required package: minpack.lm
+## Loading required package: rootSolve
+## Loading required package: inline
+
print(FOCUS_2006_D)
##      name time  value
 ## 1  parent    0  99.46
 ## 2  parent    0 102.04
@@ -262,62 +118,30 @@ print(FOCUS_2006_D)
 ## 41     m1  100  31.04
 ## 42     m1  100  33.13
 ## 43     m1  120  25.15
-## 44     m1  120  33.31
-
- -

Next we specify the degradation model: The parent compound degrades with simple first-order -kinetics (SFO) to one metabolite named m1, which also degrades with SFO kinetics.

- -

The call to mkinmod returns a degradation model. The differential equations represented in -R code can be found in the character vector $diffs of the mkinmod object. If -the gcc compiler is installed and functional, the differential equation model -will be compiled from auto-generated C code.

- -
SFO_SFO <- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"))
-
- -
## Compiling differential equation model from auto-generated C code...
-
- -
print(SFO_SFO$diffs)
-
- +## 44 m1 120 33.31 +

Next we specify the degradation model: The parent compound degrades with simple first-order kinetics (SFO) to one metabolite named m1, which also degrades with SFO kinetics.

+

The call to mkinmod returns a degradation model. The differential equations represented in R code can be found in the character vector $diffs of the mkinmod object. If the gcc compiler is installed and functional, the differential equation model will be compiled from auto-generated C code.

+
SFO_SFO <- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"))
+
## Compiling differential equation model from auto-generated C code...
+
print(SFO_SFO$diffs)
##                                                       parent 
 ## "d_parent = - k_parent_sink * parent - k_parent_m1 * parent" 
 ##                                                           m1 
-##             "d_m1 = + k_parent_m1 * parent - k_m1_sink * m1"
-
- +## "d_m1 = + k_parent_m1 * parent - k_m1_sink * m1"

We do the fitting without progress report (quiet = TRUE).

- -
fit <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE)
-
- -

A plot of the fit including a residual plot for both observed variables is obtained -using the plot method for mkinfit objects.

- -
plot(fit, show_residuals = TRUE)
-
- -

plot of chunk unnamed-chunk-5

- +
fit <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE)
+

A plot of the fit including a residual plot for both observed variables is obtained using the plot method for mkinfit objects.

+
plot(fit, show_residuals = TRUE)
+

Confidence intervals for the parameter estimates are obtained using the mkinparplot function.

- -
mkinparplot(fit)
-
- -

plot of chunk unnamed-chunk-6

- -

A comprehensive report of the results is obtained using the summary method for mkinfit -objects.

- -
summary(fit)
-
- -
## mkin version:    0.9.36 
+
mkinparplot(fit)
+

+

A comprehensive report of the results is obtained using the summary method for mkinfit objects.

+
summary(fit)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:52 2015 
-## Date of summary: Sun Jun 21 18:14:52 2015 
+## Date of fit:     Mon Jun 22 18:45:34 2015 
+## Date of summary: Mon Jun 22 18:45:34 2015 
 ## 
 ## Equations:
 ## d_parent = - k_parent_sink * parent - k_parent_m1 * parent
@@ -325,7 +149,7 @@ objects.

## ## Model predictions using solution type deSolve ## -## Fitted with method Port using 153 model solutions performed in 0.733 s +## Fitted with method Port using 153 model solutions performed in 0.609 s ## ## Weighting: none ## @@ -435,9 +259,20 @@ objects.

## 100 m1 31.04 3.198e+01 -9.416e-01 ## 100 m1 33.13 3.198e+01 1.148e+00 ## 120 m1 25.15 2.879e+01 -3.640e+00 -## 120 m1 33.31 2.879e+01 4.520e+00 -
+## 120 m1 33.31 2.879e+01 4.520e+00
- +
+ + + + + diff --git a/vignettes/FOCUS_L.Rmd b/vignettes/FOCUS_L.Rmd index cd7711f6..584c43eb 100644 --- a/vignettes/FOCUS_L.Rmd +++ b/vignettes/FOCUS_L.Rmd @@ -1,15 +1,24 @@ - +--- +title: "`r (vignette_title <- 'Example evaluation of FOCUS Laboratory Data L1 to L3')`" +author: "Johannes Ranke" +date: "`r Sys.Date()`" +output: + html_document: + css: mkin_vignettes.css + toc: true + mathjax: null + theme: united +vignette: > + %\VignetteIndexEntry{`r vignette_title`} + %\VignetteEngine{knitr::rmarkdown} + \usepackage[utf8]{inputenc} +--- ```{r, include = FALSE} library(knitr) opts_chunk$set(tidy = FALSE, cache = TRUE) ``` -# Example evaluation of FOCUS Laboratory Data L1 to L3 - ## Laboratory Data L1 The following code defines example dataset L1 from the FOCUS kinetics diff --git a/vignettes/FOCUS_L.html b/vignettes/FOCUS_L.html index 3782847e..153be558 100644 --- a/vignettes/FOCUS_L.html +++ b/vignettes/FOCUS_L.html @@ -1,252 +1,111 @@ - - - - -Example evaluation of FOCUS Laboratory Data L1 to L3 - + - - + + + - - - - - - +
+ - - - - - -

Example evaluation of FOCUS Laboratory Data L1 to L3

+ +

Laboratory Data L1

- -

The following code defines example dataset L1 from the FOCUS kinetics -report, p. 284:

- -
library("mkin")
-FOCUS_2006_L1 = data.frame(
+

The following code defines example dataset L1 from the FOCUS kinetics report, p. 284:

+
library("mkin")
+
## Loading required package: minpack.lm
+## Loading required package: rootSolve
+## Loading required package: inline
+## Loading required package: methods
+
FOCUS_2006_L1 = data.frame(
   t = rep(c(0, 1, 2, 3, 5, 7, 14, 21, 30), each = 2),
   parent = c(88.3, 91.4, 85.6, 84.5, 78.9, 77.6, 
              72.0, 71.9, 50.3, 59.4, 47.0, 45.1,
              27.7, 27.3, 10.0, 10.4, 2.9, 4.0))
-FOCUS_2006_L1_mkin <- mkin_wide_to_long(FOCUS_2006_L1)
-
- -

Here we use the assumptions of simple first order (SFO), the case of declining -rate constant over time (FOMC) and the case of two different phases of the -kinetics (DFOP). For a more detailed discussion of the models, please see the -FOCUS kinetics report.

- -

Since mkin version 0.9-32 (July 2014), we can use shorthand notation like SFO -for parent only degradation models. The following two lines fit the model and -produce the summary report of the model fit. This covers the numerical analysis -given in the FOCUS report.

- -
m.L1.SFO <- mkinfit("SFO", FOCUS_2006_L1_mkin, quiet=TRUE)
-summary(m.L1.SFO)
-
- -
## mkin version:    0.9.36 
+FOCUS_2006_L1_mkin <- mkin_wide_to_long(FOCUS_2006_L1)
+

Here we use the assumptions of simple first order (SFO), the case of declining rate constant over time (FOMC) and the case of two different phases of the kinetics (DFOP). For a more detailed discussion of the models, please see the FOCUS kinetics report.

+

Since mkin version 0.9-32 (July 2014), we can use shorthand notation like SFO for parent only degradation models. The following two lines fit the model and produce the summary report of the model fit. This covers the numerical analysis given in the FOCUS report.

+
m.L1.SFO <- mkinfit("SFO", FOCUS_2006_L1_mkin, quiet=TRUE)
+summary(m.L1.SFO)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:52 2015 
-## Date of summary: Sun Jun 21 18:14:52 2015 
+## Date of fit:     Mon Jun 22 18:38:53 2015 
+## Date of summary: Mon Jun 22 18:38:53 2015 
 ## 
 ## Equations:
 ## d_parent = - k_parent_sink * parent
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 37 model solutions performed in 0.096 s
+## Fitted with method Port using 37 model solutions performed in 0.089 s
 ## 
 ## Weighting: none
 ## 
@@ -315,39 +174,21 @@ summary(m.L1.SFO)
 ##    21   parent     10.0    12.416  -2.4163
 ##    21   parent     10.4    12.416  -2.0163
 ##    30   parent      2.9     5.251  -2.3513
-##    30   parent      4.0     5.251  -1.2513
-
- +## 30 parent 4.0 5.251 -1.2513

A plot of the fit is obtained with the plot function for mkinfit objects.

- -
plot(m.L1.SFO)
-
- -

plot of chunk unnamed-chunk-4 -The residual plot can be easily obtained by

- -
mkinresplot(m.L1.SFO, ylab = "Observed", xlab = "Time")
-
- -

plot of chunk unnamed-chunk-5

- -

For comparison, the FOMC model is fitted as well, and the chi2 error level -is checked.

- -
m.L1.FOMC <- mkinfit("FOMC", FOCUS_2006_L1_mkin, quiet=TRUE)
-
- +
plot(m.L1.SFO)
+

The residual plot can be easily obtained by

+
mkinresplot(m.L1.SFO, ylab = "Observed", xlab = "Time")
+

+

For comparison, the FOMC model is fitted as well, and the chi^2 error level is checked.

+
m.L1.FOMC <- mkinfit("FOMC", FOCUS_2006_L1_mkin, quiet=TRUE)
## Warning in mkinfit("FOMC", FOCUS_2006_L1_mkin, quiet = TRUE): Optimisation by method Port did not converge.
-## Convergence code is 1
-
- -
summary(m.L1.FOMC, data = FALSE)
-
- -
## mkin version:    0.9.36 
+## Convergence code is 1
+
summary(m.L1.FOMC, data = FALSE)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:53 2015 
-## Date of summary: Sun Jun 21 18:14:53 2015 
+## Date of fit:     Mon Jun 22 18:38:54 2015 
+## Date of summary: Mon Jun 22 18:38:54 2015 
 ## 
 ## 
 ## Warning: Optimisation by method Port did not converge.
@@ -359,7 +200,7 @@ is checked.

## ## Model predictions using solution type analytical ## -## Fitted with method Port using 188 model solutions performed in 0.486 s +## Fitted with method Port using 188 model solutions performed in 0.397 s ## ## Weighting: none ## @@ -408,55 +249,33 @@ is checked.

## ## Estimated disappearance times: ## DT50 DT90 DT50back -## parent 7.25 24.08 7.25 -
- -

Due to the higher number of parameters, and the lower number of degrees of -freedom of the fit, the chi2 error level is actually higher for the FOMC -model (3.6%) than for the SFO model (3.4%). Additionally, the parameters -log_alpha and log_beta internally fitted in the model have p-values for the two -sided t-test of 0.18 and 0.125, and their correlation is 1.000, indicating that -the model is overparameterised.

- -

The chi2 error levels reported in Appendix 3 and Appendix 7 to the FOCUS -kinetics report are rounded to integer percentages and partly deviate by one -percentage point from the results calculated by mkin. The reason for -this is not known. However, mkin gives the same chi2 error levels -as the kinfit package. Furthermore, the calculation routines of the kinfit -package have been extensively compared to the results obtained by the KinGUI -software, as documented in the kinfit package vignette. KinGUI is a widely used -standard package in this field.

- +## parent 7.25 24.08 7.25 +

Due to the higher number of parameters, and the lower number of degrees of freedom of the fit, the chi^2 error level is actually higher for the FOMC model (3.6%) than for the SFO model (3.4%). Additionally, the parameters log_alpha and log_beta internally fitted in the model have p-values for the two sided t-test of 0.18 and 0.125, and their correlation is 1.000, indicating that the model is overparameterised.

+

The chi^2 error levels reported in Appendix 3 and Appendix 7 to the FOCUS kinetics report are rounded to integer percentages and partly deviate by one percentage point from the results calculated by mkin. The reason for this is not known. However, mkin gives the same chi^2 error levels as the kinfit package. Furthermore, the calculation routines of the kinfit package have been extensively compared to the results obtained by the KinGUI software, as documented in the kinfit package vignette. KinGUI is a widely used standard package in this field.

+
+

Laboratory Data L2

- -

The following code defines example dataset L2 from the FOCUS kinetics -report, p. 287:

- -
FOCUS_2006_L2 = data.frame(
+

The following code defines example dataset L2 from the FOCUS kinetics report, p. 287:

+
FOCUS_2006_L2 = data.frame(
   t = rep(c(0, 1, 3, 7, 14, 28), each = 2),
   parent = c(96.1, 91.8, 41.4, 38.7,
              19.3, 22.3, 4.6, 4.6,
              2.6, 1.2, 0.3, 0.6))
-FOCUS_2006_L2_mkin <- mkin_wide_to_long(FOCUS_2006_L2)
-
- +FOCUS_2006_L2_mkin <- mkin_wide_to_long(FOCUS_2006_L2)

Again, the SFO model is fitted and a summary is obtained:

- -
m.L2.SFO <- mkinfit("SFO", FOCUS_2006_L2_mkin, quiet=TRUE)
-summary(m.L2.SFO)
-
- -
## mkin version:    0.9.36 
+
m.L2.SFO <- mkinfit("SFO", FOCUS_2006_L2_mkin, quiet=TRUE)
+summary(m.L2.SFO)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:53 2015 
-## Date of summary: Sun Jun 21 18:14:53 2015 
+## Date of fit:     Mon Jun 22 18:38:54 2015 
+## Date of summary: Mon Jun 22 18:38:54 2015 
 ## 
 ## Equations:
 ## d_parent = - k_parent_sink * parent
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 41 model solutions performed in 0.101 s
+## Fitted with method Port using 41 model solutions performed in 0.086 s
 ## 
 ## Weighting: none
 ## 
@@ -519,54 +338,32 @@ summary(m.L2.SFO)
 ##    14   parent      2.6 8.532e-03   2.5915
 ##    14   parent      1.2 8.532e-03   1.1915
 ##    28   parent      0.3 7.958e-07   0.3000
-##    28   parent      0.6 7.958e-07   0.6000
-
- -

The chi2 error level of 14% suggests that the model does not fit very well. -This is also obvious from the plots of the fit and the residuals.

- -
par(mfrow = c(2, 1))
+##    28   parent      0.6 7.958e-07   0.6000
+

The chi^2 error level of 14% suggests that the model does not fit very well. This is also obvious from the plots of the fit and the residuals.

+
par(mfrow = c(2, 1))
 plot(m.L2.SFO)
-mkinresplot(m.L2.SFO)
-
- -

plot of chunk unnamed-chunk-9

- -

In the FOCUS kinetics report, it is stated that there is no apparent systematic -error observed from the residual plot up to the measured DT90 (approximately at -day 5), and there is an underestimation beyond that point.

- -

We may add that it is difficult to judge the random nature of the residuals just -from the three samplings at days 0, 1 and 3. Also, it is not clear a -priori why a consistent underestimation after the approximate DT90 should be -irrelevant. However, this can be rationalised by the fact that the FOCUS fate -models generally only implement SFO kinetics.

- -

For comparison, the FOMC model is fitted as well, and the chi2 error level -is checked.

- -
m.L2.FOMC <- mkinfit("FOMC", FOCUS_2006_L2_mkin, quiet = TRUE)
+mkinresplot(m.L2.SFO)
+

+

In the FOCUS kinetics report, it is stated that there is no apparent systematic error observed from the residual plot up to the measured DT90 (approximately at day 5), and there is an underestimation beyond that point.

+

We may add that it is difficult to judge the random nature of the residuals just from the three samplings at days 0, 1 and 3. Also, it is not clear a priori why a consistent underestimation after the approximate DT90 should be irrelevant. However, this can be rationalised by the fact that the FOCUS fate models generally only implement SFO kinetics.

+

For comparison, the FOMC model is fitted as well, and the chi^2 error level is checked.

+
m.L2.FOMC <- mkinfit("FOMC", FOCUS_2006_L2_mkin, quiet = TRUE)
 par(mfrow = c(2, 1))
 plot(m.L2.FOMC)
-mkinresplot(m.L2.FOMC)
-
- -

plot of chunk unnamed-chunk-10

- -
summary(m.L2.FOMC, data = FALSE)
-
- -
## mkin version:    0.9.36 
+mkinresplot(m.L2.FOMC)
+

+
summary(m.L2.FOMC, data = FALSE)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:54 2015 
-## Date of summary: Sun Jun 21 18:14:54 2015 
+## Date of fit:     Mon Jun 22 18:38:54 2015 
+## Date of summary: Mon Jun 22 18:38:54 2015 
 ## 
 ## Equations:
 ## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 81 model solutions performed in 0.213 s
+## Fitted with method Port using 81 model solutions performed in 0.175 s
 ## 
 ## Weighting: none
 ## 
@@ -615,40 +412,23 @@ mkinresplot(m.L2.FOMC)
 ## 
 ## Estimated disappearance times:
 ##          DT50  DT90 DT50back
-## parent 0.8092 5.356    1.612
-
- -

The error level at which the chi2 test passes is much lower in this case. -Therefore, the FOMC model provides a better description of the data, as less -experimental error has to be assumed in order to explain the data.

- -

Fitting the four parameter DFOP model further reduces the chi2 error level.

- -
m.L2.DFOP <- mkinfit("DFOP", FOCUS_2006_L2_mkin, quiet = TRUE)
-plot(m.L2.DFOP)
-
- -

plot of chunk unnamed-chunk-11

- -

Here, the default starting parameters for the DFOP model obviously do not lead -to a reasonable solution. Therefore the fit is repeated with different starting -parameters.

- -
m.L2.DFOP <- mkinfit("DFOP", FOCUS_2006_L2_mkin, 
+## parent 0.8092 5.356    1.612
+

The error level at which the chi^2 test passes is much lower in this case. Therefore, the FOMC model provides a better description of the data, as less experimental error has to be assumed in order to explain the data.

+

Fitting the four parameter DFOP model further reduces the chi^2 error level.

+
m.L2.DFOP <- mkinfit("DFOP", FOCUS_2006_L2_mkin, quiet = TRUE)
+plot(m.L2.DFOP)
+

+

Here, the default starting parameters for the DFOP model obviously do not lead to a reasonable solution. Therefore the fit is repeated with different starting parameters.

+
m.L2.DFOP <- mkinfit("DFOP", FOCUS_2006_L2_mkin, 
   parms.ini = c(k1 = 1, k2 = 0.01, g = 0.8),
   quiet=TRUE)
-plot(m.L2.DFOP)
-
- -

plot of chunk unnamed-chunk-12

- -
summary(m.L2.DFOP, data = FALSE)
-
- -
## mkin version:    0.9.36 
+plot(m.L2.DFOP)
+

+
summary(m.L2.DFOP, data = FALSE)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:56 2015 
-## Date of summary: Sun Jun 21 18:14:56 2015 
+## Date of fit:     Mon Jun 22 18:38:56 2015 
+## Date of summary: Mon Jun 22 18:38:56 2015 
 ## 
 ## Equations:
 ## d_parent = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 *
@@ -657,7 +437,7 @@ plot(m.L2.DFOP)
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 336 model solutions performed in 0.851 s
+## Fitted with method Port using 336 model solutions performed in 0.751 s
 ## 
 ## Weighting: none
 ## 
@@ -707,47 +487,32 @@ plot(m.L2.DFOP)
 ## 
 ## Estimated disappearance times:
 ##        DT50 DT90 DT50_k1 DT50_k2
-## parent   NA   NA 0.03058   2.058
-
- -

Here, the DFOP model is clearly the best-fit model for dataset L2 based on the -chi2 error level criterion. However, the failure to calculate the covariance -matrix indicates that the parameter estimates correlate excessively. Therefore, -the FOMC model may be preferred for this dataset.

- +## parent NA NA 0.03058 2.058
+

Here, the DFOP model is clearly the best-fit model for dataset L2 based on the chi^2 error level criterion. However, the failure to calculate the covariance matrix indicates that the parameter estimates correlate excessively. Therefore, the FOMC model may be preferred for this dataset.

+
+

Laboratory Data L3

- -

The following code defines example dataset L3 from the FOCUS kinetics report, -p. 290.

- -
FOCUS_2006_L3 = data.frame(
+

The following code defines example dataset L3 from the FOCUS kinetics report, p. 290.

+
FOCUS_2006_L3 = data.frame(
   t = c(0, 3, 7, 14, 30, 60, 91, 120),
   parent = c(97.8, 60, 51, 43, 35, 22, 15, 12))
-FOCUS_2006_L3_mkin <- mkin_wide_to_long(FOCUS_2006_L3)
-
- +FOCUS_2006_L3_mkin <- mkin_wide_to_long(FOCUS_2006_L3)

SFO model, summary and plot:

- -
m.L3.SFO <- mkinfit("SFO", FOCUS_2006_L3_mkin, quiet = TRUE)
-plot(m.L3.SFO)
-
- -

plot of chunk unnamed-chunk-14

- -
summary(m.L3.SFO)
-
- -
## mkin version:    0.9.36 
+
m.L3.SFO <- mkinfit("SFO", FOCUS_2006_L3_mkin, quiet = TRUE)
+plot(m.L3.SFO)
+

+
summary(m.L3.SFO)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:56 2015 
-## Date of summary: Sun Jun 21 18:14:56 2015 
+## Date of fit:     Mon Jun 22 18:38:56 2015 
+## Date of summary: Mon Jun 22 18:38:56 2015 
 ## 
 ## Equations:
 ## d_parent = - k_parent_sink * parent
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 43 model solutions performed in 0.103 s
+## Fitted with method Port using 43 model solutions performed in 0.088 s
 ## 
 ## Weighting: none
 ## 
@@ -806,34 +571,24 @@ plot(m.L3.SFO)
 ##    30   parent     35.0    35.084  -0.0839
 ##    60   parent     22.0    16.440   5.5602
 ##    91   parent     15.0     7.511   7.4887
-##   120   parent     12.0     3.610   8.3903
-
- -

The chi2 error level of 21% as well as the plot suggest that the model -does not fit very well.

- +## 120 parent 12.0 3.610 8.3903
+

The chi^2 error level of 21% as well as the plot suggest that the model does not fit very well.

The FOMC model performs better:

- -
m.L3.FOMC <- mkinfit("FOMC", FOCUS_2006_L3_mkin, quiet = TRUE)
-plot(m.L3.FOMC)
-
- -

plot of chunk unnamed-chunk-15

- -
summary(m.L3.FOMC, data = FALSE)
-
- -
## mkin version:    0.9.36 
+
m.L3.FOMC <- mkinfit("FOMC", FOCUS_2006_L3_mkin, quiet = TRUE)
+plot(m.L3.FOMC)
+

+
summary(m.L3.FOMC, data = FALSE)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:56 2015 
-## Date of summary: Sun Jun 21 18:14:56 2015 
+## Date of fit:     Mon Jun 22 18:38:57 2015 
+## Date of summary: Mon Jun 22 18:38:57 2015 
 ## 
 ## Equations:
 ## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 83 model solutions performed in 0.197 s
+## Fitted with method Port using 83 model solutions performed in 0.178 s
 ## 
 ## Weighting: none
 ## 
@@ -882,27 +637,17 @@ plot(m.L3.FOMC)
 ## 
 ## Estimated disappearance times:
 ##         DT50  DT90 DT50back
-## parent 7.729 431.2    129.8
-
- -

The error level at which the chi2 test passes is 7% in this case.

- -

Fitting the four parameter DFOP model further reduces the chi2 error level -considerably:

- -
m.L3.DFOP <- mkinfit("DFOP", FOCUS_2006_L3_mkin, quiet = TRUE)
-plot(m.L3.DFOP)
-
- -

plot of chunk unnamed-chunk-16

- -
summary(m.L3.DFOP, data = FALSE)
-
- -
## mkin version:    0.9.36 
+## parent 7.729 431.2    129.8
+

The error level at which the chi^2 test passes is 7% in this case.

+

Fitting the four parameter DFOP model further reduces the chi^2 error level considerably:

+
m.L3.DFOP <- mkinfit("DFOP", FOCUS_2006_L3_mkin, quiet = TRUE)
+plot(m.L3.DFOP)
+

+
summary(m.L3.DFOP, data = FALSE)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:57 2015 
-## Date of summary: Sun Jun 21 18:14:57 2015 
+## Date of fit:     Mon Jun 22 18:38:57 2015 
+## Date of summary: Mon Jun 22 18:38:57 2015 
 ## 
 ## Equations:
 ## d_parent = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 *
@@ -911,7 +656,7 @@ plot(m.L3.DFOP)
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 137 model solutions performed in 0.341 s
+## Fitted with method Port using 137 model solutions performed in 0.292 s
 ## 
 ## Weighting: none
 ## 
@@ -965,52 +710,33 @@ plot(m.L3.DFOP)
 ## 
 ## Estimated disappearance times:
 ##         DT50 DT90 DT50_k1 DT50_k2
-## parent 7.464  123   1.343   50.37
-
- -

Here, a look to the model plot, the confidence intervals of the parameters -and the correlation matrix suggest that the parameter estimates are reliable, and -the DFOP model can be used as the best-fit model based on the chi2 error -level criterion for laboratory data L3.

- -

This is also an example where the standard t-test for the parameter g_ilr is -misleading, as it tests for a significant difference from zero. In this case, -zero appears to be the correct value for this parameter, and the confidence -interval for the backtransformed parameter g is quite narrow.

- +## parent 7.464 123 1.343 50.37
+

Here, a look to the model plot, the confidence intervals of the parameters and the correlation matrix suggest that the parameter estimates are reliable, and the DFOP model can be used as the best-fit model based on the chi^2 error level criterion for laboratory data L3.

+

This is also an example where the standard t-test for the parameter g_ilr is misleading, as it tests for a significant difference from zero. In this case, zero appears to be the correct value for this parameter, and the confidence interval for the backtransformed parameter g is quite narrow.

+
+

Laboratory Data L4

- -

The following code defines example dataset L4 from the FOCUS kinetics -report, p. 293:

- -
FOCUS_2006_L4 = data.frame(
+

The following code defines example dataset L4 from the FOCUS kinetics report, p. 293:

+
FOCUS_2006_L4 = data.frame(
   t = c(0, 3, 7, 14, 30, 60, 91, 120),
   parent = c(96.6, 96.3, 94.3, 88.8, 74.9, 59.9, 53.5, 49.0))
-FOCUS_2006_L4_mkin <- mkin_wide_to_long(FOCUS_2006_L4)
-
- +FOCUS_2006_L4_mkin <- mkin_wide_to_long(FOCUS_2006_L4)

SFO model, summary and plot:

- -
m.L4.SFO <- mkinfit("SFO", FOCUS_2006_L4_mkin, quiet = TRUE)
-plot(m.L4.SFO)
-
- -

plot of chunk unnamed-chunk-18

- -
summary(m.L4.SFO, data = FALSE)
-
- -
## mkin version:    0.9.36 
+
m.L4.SFO <- mkinfit("SFO", FOCUS_2006_L4_mkin, quiet = TRUE)
+plot(m.L4.SFO)
+

+
summary(m.L4.SFO, data = FALSE)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:57 2015 
-## Date of summary: Sun Jun 21 18:14:57 2015 
+## Date of fit:     Mon Jun 22 18:38:57 2015 
+## Date of summary: Mon Jun 22 18:38:57 2015 
 ## 
 ## Equations:
 ## d_parent = - k_parent_sink * parent
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 46 model solutions performed in 0.111 s
+## Fitted with method Port using 46 model solutions performed in 0.102 s
 ## 
 ## Weighting: none
 ## 
@@ -1058,34 +784,24 @@ plot(m.L4.SFO)
 ## 
 ## Estimated disappearance times:
 ##        DT50 DT90
-## parent  106  352
-
- -

The chi2 error level of 3.3% as well as the plot suggest that the model -fits very well.

- +## parent 106 352
+

The chi^2 error level of 3.3% as well as the plot suggest that the model fits very well.

The FOMC model for comparison:

- -
m.L4.FOMC <- mkinfit("FOMC", FOCUS_2006_L4_mkin, quiet = TRUE)
-plot(m.L4.FOMC)
-
- -

plot of chunk unnamed-chunk-19

- -
summary(m.L4.FOMC, data = FALSE)
-
- -
## mkin version:    0.9.36 
+
m.L4.FOMC <- mkinfit("FOMC", FOCUS_2006_L4_mkin, quiet = TRUE)
+plot(m.L4.FOMC)
+

+
summary(m.L4.FOMC, data = FALSE)
+
## mkin version:    0.9.37 
 ## R version:       3.2.1 
-## Date of fit:     Sun Jun 21 18:14:57 2015 
-## Date of summary: Sun Jun 21 18:14:57 2015 
+## Date of fit:     Mon Jun 22 18:38:58 2015 
+## Date of summary: Mon Jun 22 18:38:58 2015 
 ## 
 ## Equations:
 ## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent
 ## 
 ## Model predictions using solution type analytical 
 ## 
-## Fitted with method Port using 66 model solutions performed in 0.162 s
+## Fitted with method Port using 66 model solutions performed in 0.137 s
 ## 
 ## Weighting: none
 ## 
@@ -1134,12 +850,22 @@ plot(m.L4.FOMC)
 ## 
 ## Estimated disappearance times:
 ##         DT50 DT90 DT50back
-## parent 108.9 1644    494.9
-
+## parent 108.9 1644 494.9
+

The error level at which the chi^2 test passes is slightly lower for the FOMC model. However, the difference appears negligible.

+
-

The error level at which the chi2 test passes is slightly lower for the FOMC -model. However, the difference appears negligible.

- +
+ + + + + diff --git a/vignettes/FOCUS_Z.pdf b/vignettes/FOCUS_Z.pdf index a42e6e01..95d5f949 100644 Binary files a/vignettes/FOCUS_Z.pdf and b/vignettes/FOCUS_Z.pdf differ diff --git a/vignettes/GNUMakefile b/vignettes/GNUMakefile new file mode 100644 index 00000000..de037089 --- /dev/null +++ b/vignettes/GNUMakefile @@ -0,0 +1,18 @@ +RBIN ?= $(shell dirname "`which R`") + +all: vignettes + +%.pdf: header.tex references.bib %.Rnw + "$(RBIN)/Rscript" -e "tools::buildVignette(file = '$*.Rnw')" + +%.html: mkin_vignettes.css %.Rmd + "$(RBIN)/Rscript" -e "tools::buildVignette(file = '$*.Rmd')" + +vignettes: mkin.pdf FOCUS_D.html FOCUS_L.html FOCUS_Z.pdf compiled_models.html + +clean: + $(RM) *.aux *.bbl *.blg *.fdb_latexmk *.fls *.log *.out *.toc + $(RM) *.R *.md + $(RM) mkin.tex FOCUS_Z.tex + $(RM) -r *_cache *_files + $(RM) -r figure cache diff --git a/vignettes/compiled_models.Rmd b/vignettes/compiled_models.Rmd index 3b24acbb..9aa8b133 100644 --- a/vignettes/compiled_models.Rmd +++ b/vignettes/compiled_models.Rmd @@ -1,34 +1,41 @@ --- -title: "Performance benefit by using compiled model definitions in mkin" +title: "`r (vignette_title <- 'Performance benefit by using compiled model definitions in mkin')`" +author: "Johannes Ranke" +date: "`r Sys.Date()`" output: html_document: css: mkin_vignettes.css toc: true mathjax: null theme: united +vignette: > + %\VignetteIndexEntry{`r vignette_title`} + %\VignetteEngine{knitr::rmarkdown} + \usepackage[utf8]{inputenc} --- - ```{r, include = FALSE} library(knitr) opts_chunk$set(tidy = FALSE, cache = TRUE) ``` -# Benchmark for a model that can also be solved with Eigenvalues +## Benchmark for a model that can also be solved with Eigenvalues This evaluation is taken from the example section of mkinfit. When using an mkin version equal to or greater than 0.9-36 and a compiler (gcc) is installed, you will see a message that the model is being compiled from autogenerated C code when -defining a model using mkinmod. +defining a model using mkinmod. The package tests for presence of the gcc compiler using + +```{r check_gcc} +Sys.which("gcc") +``` +First, we build a simple degradation model for a parent compound with one metabolite. ```{r create_SFO_SFO} library("mkin") SFO_SFO <- mkinmod( - parent = list(type = "SFO", to = "m1", sink = TRUE), - m1 = list(type = "SFO")) + parent = mkinsub("SFO", "m1"), + m1 = mkinsub("SFO")) ``` We can compare the performance of the Eigenvalue based solution against the @@ -36,11 +43,7 @@ compiled version and the R implementation of the differential equations using the microbenchmark package. -```{r benchmark_SFO_SFO, echo=-(1:2)} -# Redefining the model, in order not to confuse the knitr cache which leads to segfaults -suppressMessages(SFO_SFO <- mkinmod( - parent = list(type = "SFO", to = "m1", sink = TRUE), - m1 = list(type = "SFO"))) +```{r benchmark_SFO_SFO} library("microbenchmark") mb.1 <- microbenchmark( mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", use_compiled = FALSE, @@ -63,14 +66,14 @@ iterative solution of the ODEs: smb.1["median"]/smb.1["deSolve, compiled", "median"] ``` -# Benchmark for a model that can not be solved with Eigenvalues +## Benchmark for a model that can not be solved with Eigenvalues This evaluation is also taken from the example section of mkinfit. ```{r benchmark_FOMC_SFO} FOMC_SFO <- mkinmod( - parent = list(type = "FOMC", to = "m1", sink = TRUE), - m1 = list(type = "SFO")) + parent = mkinsub("FOMC", "m1"), + m1 = mkinsub( "SFO")) mb.2 <- microbenchmark( mkinfit(FOMC_SFO, FOCUS_2006_D, use_compiled = FALSE, quiet = TRUE), @@ -80,10 +83,18 @@ smb.2 <- summary(mb.2)[-1] rownames(smb.2) <- c("deSolve, not compiled", "deSolve, compiled") print(smb.2) smb.2["median"]/smb.2["deSolve, compiled", "median"] - ``` Here we get a performance benefit of a factor of `r round(smb.2["deSolve, not compiled", "median"]/smb.2["deSolve, compiled", "median"], 1)` using the version of the differential equation model compiled from C code using the inline package! + +This vignette was built with mkin `r packageVersion("mkin")` on + +```{r sessionInfo, echo = FALSE} +cat(capture.output(sessionInfo())[1:3], sep = "\n") +if(!inherits(try(cpuinfo <- readLines("/proc/cpuinfo")), "try-error")) { + cat(gsub("model name\t: ", "CPU model: ", cpuinfo[grep("model name", cpuinfo)[1]])) +} +``` diff --git a/vignettes/compiled_models.html b/vignettes/compiled_models.html index 5fcd88fb..fc71debe 100644 --- a/vignettes/compiled_models.html +++ b/vignettes/compiled_models.html @@ -8,7 +8,9 @@ + + Performance benefit by using compiled model definitions in mkin @@ -62,6 +64,8 @@ img {
@@ -71,17 +75,17 @@ img {
- -
-

Benchmark for a model that can also be solved with Eigenvalues

-

This evaluation is taken from the example section of mkinfit. When using an mkin version equal to or greater than 0.9-36 and a compiler (gcc) is installed, you will see a message that the model is being compiled from autogenerated C code when defining a model using mkinmod.

+
+

Benchmark for a model that can also be solved with Eigenvalues

+

This evaluation is taken from the example section of mkinfit. When using an mkin version equal to or greater than 0.9-36 and a compiler (gcc) is installed, you will see a message that the model is being compiled from autogenerated C code when defining a model using mkinmod. The package tests for presence of the gcc compiler using

+
Sys.which("gcc")
+
##            gcc 
+## "/usr/bin/gcc"
+

First, we build a simple degradation model for a parent compound with one metabolite.

library("mkin")
 SFO_SFO <- mkinmod(
-  parent = list(type = "SFO", to = "m1", sink = TRUE),
-  m1 = list(type = "SFO"))
+ parent = mkinsub("SFO", "m1"), + m1 = mkinsub("SFO"))
## Compiling differential equation model from auto-generated C code...

We can compare the performance of the Eigenvalue based solution against the compiled version and the R implementation of the differential equations using the microbenchmark package.

library("microbenchmark")
@@ -95,26 +99,26 @@ smb.1 <- summary(mb.1)[-1]
 rownames(smb.1) <- c("deSolve, not compiled", "Eigenvalue based", "deSolve, compiled")
 print(smb.1)
##                             min        lq      mean    median        uq
-## deSolve, not compiled 6980.8002 6996.4739 7024.5611 7012.1476 7046.4415
-## Eigenvalue based       925.3350  928.9405  951.8405  932.5460  965.0932
-## deSolve, compiled      747.2635  761.9405  771.4339  776.6174  783.5191
+## deSolve, not compiled 5379.4269 5431.6605 5455.0396 5483.8940 5492.8460
+## Eigenvalue based       930.6245  951.6701  959.4653  972.7157  973.8857
+## deSolve, compiled      755.9828  771.1000  794.1810  786.2172  813.2800
 ##                             max neval
-## deSolve, not compiled 7080.7354     3
-## Eigenvalue based       997.6404     3
-## deSolve, compiled      790.4207     3
-

We see that using the compiled model is by a factor of 9 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:

+## deSolve, not compiled 5501.7979 3 +## Eigenvalue based 975.0556 3 +## deSolve, compiled 840.3428 3 +

We see that using the compiled model is by a factor of 7 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:

smb.1["median"]/smb.1["deSolve, compiled", "median"]
##                         median
-## deSolve, not compiled 9.029089
-## Eigenvalue based      1.200779
+## deSolve, not compiled 6.975037
+## Eigenvalue based      1.237210
 ## deSolve, compiled     1.000000
-
-

Benchmark for a model that can not be solved with Eigenvalues

+
+

Benchmark for a model that can not be solved with Eigenvalues

This evaluation is also taken from the example section of mkinfit.

FOMC_SFO <- mkinmod(
-  parent = list(type = "FOMC", to = "m1", sink = TRUE),
-  m1 = list(type = "SFO"))
+ parent = mkinsub("FOMC", "m1"), + m1 = mkinsub( "SFO"))
## Compiling differential equation model from auto-generated C code...
mb.2 <- microbenchmark(
   mkinfit(FOMC_SFO, FOCUS_2006_D, use_compiled = FALSE, quiet = TRUE),
@@ -123,17 +127,22 @@ print(smb.1)
smb.2 <- summary(mb.2)[-1] rownames(smb.2) <- c("deSolve, not compiled", "deSolve, compiled") print(smb.2) -
##                             min        lq      mean    median        uq
-## deSolve, not compiled 14.127630 14.245064 14.298201 14.362497 14.383486
-## deSolve, compiled      1.354744  1.362167  1.366362  1.369589  1.372171
+
##                             min       lq     mean    median        uq
+## deSolve, not compiled 11.815894 11.84960 12.03290 11.883305 12.141404
+## deSolve, compiled      1.387086  1.43514  1.45956  1.483194  1.495796
 ##                             max neval
-## deSolve, not compiled 14.404474     3
-## deSolve, compiled      1.374752     3
+## deSolve, not compiled 12.399502 3 +## deSolve, compiled 1.508399 3
smb.2["median"]/smb.2["deSolve, compiled", "median"]
##                         median
-## deSolve, not compiled 10.48672
-## deSolve, compiled      1.00000
-

Here we get a performance benefit of a factor of 10.5 using the version of the differential equation model compiled from C code using the inline package!

+## deSolve, not compiled 8.011968 +## deSolve, compiled 1.000000 +

Here we get a performance benefit of a factor of 8 using the version of the differential equation model compiled from C code using the inline package!

+

This vignette was built with mkin 0.9.37 on

+
## R version 3.2.1 (2015-06-18)
+## Platform: x86_64-pc-linux-gnu (64-bit)
+## Running under: Debian GNU/Linux 8 (jessie)
+
## CPU model: Intel(R) Core(TM) i7-4710MQ CPU @ 2.50GHz
diff --git a/vignettes/mkin.pdf b/vignettes/mkin.pdf index 7454e688..11da2863 100644 Binary files a/vignettes/mkin.pdf and b/vignettes/mkin.pdf differ -- cgit v1.2.1