From 6f596ecec2c54d7d91cf3ca16b8643b64b903e57 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Fri, 13 Nov 2015 11:01:49 +0100 Subject: Add plots to compiled_models vignette, rebuild staticdocs --- inst/web/vignettes/compiled_models.html | 85 +++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 37 deletions(-) (limited to 'inst/web/vignettes/compiled_models.html') diff --git a/inst/web/vignettes/compiled_models.html b/inst/web/vignettes/compiled_models.html index 7722d95a..c7f4fbea 100644 --- a/inst/web/vignettes/compiled_models.html +++ b/inst/web/vignettes/compiled_models.html @@ -10,7 +10,7 @@ - + Performance benefit by using compiled model definitions in mkin @@ -65,7 +65,7 @@ img {
@@ -89,28 +89,36 @@ SFO_SFO <- mkinmod(
## Successfully compiled 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")
+library("ggplot2")
 mb.1 <- microbenchmark(
-  mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", use_compiled = FALSE, 
-          quiet = TRUE),
-  mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "eigen", quiet = TRUE),
-  mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", quiet = TRUE),
+  "deSolve, not compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, 
+                                    solution_type = "deSolve", 
+                                    use_compiled = FALSE, quiet = TRUE),
+  "Eigenvalue based" = mkinfit(SFO_SFO, FOCUS_2006_D, 
+                               solution_type = "eigen", quiet = TRUE),
+  "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, 
+                                solution_type = "deSolve", quiet = TRUE),
   times = 3, control = list(warmup = 1))
-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 9442.5119 9447.2060 9458.3420 9451.9001 9466.2571
-## Eigenvalue based       868.6312  872.4552  895.3422  876.2792  908.6977
-## deSolve, compiled      691.9663  697.5653  701.1004  703.1643  705.6674
-##                             max neval cld
-## deSolve, not compiled 9480.6141     3   c
-## Eigenvalue based       941.1163     3  b 
-## deSolve, compiled      708.1706     3 a
-

We see that using the compiled model is by a factor of 13.4 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"]
+ +smb.1 <- summary(mb.1) +print(mb.1) +
## Unit: milliseconds
+##                   expr       min        lq      mean    median        uq
+##  deSolve, not compiled 9538.4007 9570.3211 9605.6503 9602.2416 9639.2752
+##       Eigenvalue based  881.9438  885.9337  901.1558  889.9236  910.7618
+##      deSolve, compiled  692.0913  695.6109  697.9629  699.1304  700.8987
+##        max neval cld
+##  9676.3087     3   c
+##   931.5999     3  b 
+##   702.6669     3 a
+
autoplot(mb.1)
+

+

We see that using the compiled model is by a factor of 13.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:

+
rownames(smb.1) <- smb.1$expr
+smb.1["median"]/smb.1["deSolve, compiled", "median"]
##                          median
-## deSolve, not compiled 13.441951
-## Eigenvalue based       1.246194
+## deSolve, not compiled 13.734549
+## Eigenvalue based       1.272901
 ## deSolve, compiled      1.000000
@@ -121,24 +129,27 @@ print(smb.1) m1 = mkinsub( "SFO"))
## Successfully compiled differential equation model from auto-generated C code.
mb.2 <- microbenchmark(
-  mkinfit(FOMC_SFO, FOCUS_2006_D, use_compiled = FALSE, quiet = TRUE),
-  mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE),
+  "deSolve, not compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, 
+                                    use_compiled = FALSE, quiet = TRUE),
+  "deSolve, compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE),
   times = 3, control = list(warmup = 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 20.444632 20.48824 20.557595 20.531857 20.614077
-## deSolve, compiled      1.251733  1.25179  1.275227  1.251846  1.286973
-##                           max neval cld
-## deSolve, not compiled 20.6963     3   b
-## deSolve, compiled      1.3221     3  a
+smb.2 <- summary(mb.2) +print(mb.2) +
## Unit: seconds
+##                   expr       min        lq      mean    median        uq
+##  deSolve, not compiled 20.475764 20.494740 20.507391 20.513716 20.523205
+##      deSolve, compiled  1.244022  1.244327  1.261983  1.244631  1.270963
+##        max neval cld
+##  20.532695     3   b
+##   1.297295     3  a
smb.2["median"]/smb.2["deSolve, compiled", "median"]
-
##                         median
-## deSolve, not compiled 16.40126
-## deSolve, compiled      1.00000
-

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

-

This vignette was built with mkin 0.9.41 on

+
##   median
+## 1     NA
+## 2     NA
+
autoplot(mb.2)
+

+

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

+

This vignette was built with mkin 0.9.41.9000 on

## R version 3.2.2 (2015-08-14)
 ## Platform: x86_64-pc-linux-gnu (64-bit)
 ## Running under: Debian GNU/Linux 8 (jessie)
-- cgit v1.2.1