diff options
Diffstat (limited to 'vignettes')
-rw-r--r-- | vignettes/FOCUS_L.html | 64 | ||||
-rw-r--r-- | vignettes/FOCUS_Z.pdf | bin | 239558 -> 239558 bytes | |||
-rw-r--r-- | vignettes/compiled_models.html | 51 | ||||
-rw-r--r-- | vignettes/mkin.html | 10 |
4 files changed, 63 insertions, 62 deletions
diff --git a/vignettes/FOCUS_L.html b/vignettes/FOCUS_L.html index bcdee8df..0d96fd5f 100644 --- a/vignettes/FOCUS_L.html +++ b/vignettes/FOCUS_L.html @@ -244,15 +244,15 @@ FOCUS_2006_L1_mkin <- mkin_wide_to_long(FOCUS_2006_L1)</code></pre> summary(m.L1.SFO)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:04 2016 -## Date of summary: Thu Nov 17 17:46:04 2016 +## Date of fit: Thu Nov 17 18:44:25 2016 +## Date of summary: Thu Nov 17 18:44:25 2016 ## ## Equations: -## d_parent = - k_parent_sink * parent +## d_parent/dt = - k_parent_sink * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 37 model solutions performed in 0.093 s +## Fitted with method Port using 37 model solutions performed in 0.088 s ## ## Weighting: none ## @@ -337,8 +337,8 @@ summary(m.L1.SFO)</code></pre> <pre class="r"><code>summary(m.L1.FOMC, data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:05 2016 -## Date of summary: Thu Nov 17 17:46:05 2016 +## Date of fit: Thu Nov 17 18:44:26 2016 +## Date of summary: Thu Nov 17 18:44:26 2016 ## ## ## Warning: Optimisation by method Port did not converge. @@ -346,11 +346,11 @@ summary(m.L1.SFO)</code></pre> ## ## ## Equations: -## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent +## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 188 model solutions performed in 0.456 s +## Fitted with method Port using 188 model solutions performed in 0.431 s ## ## Weighting: none ## @@ -434,15 +434,15 @@ plot(m.L2.FOMC, show_residuals = TRUE, <pre class="r"><code>summary(m.L2.FOMC, data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:06 2016 -## Date of summary: Thu Nov 17 17:46:06 2016 +## Date of fit: Thu Nov 17 18:44:26 2016 +## Date of summary: Thu Nov 17 18:44:26 2016 ## ## Equations: -## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent +## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 81 model solutions performed in 0.227 s +## Fitted with method Port using 81 model solutions performed in 0.18 s ## ## Weighting: none ## @@ -504,17 +504,17 @@ plot(m.L2.DFOP, show_residuals = TRUE, show_errmin = TRUE, <pre class="r"><code>summary(m.L2.DFOP, data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:07 2016 -## Date of summary: Thu Nov 17 17:46:07 2016 +## Date of fit: Thu Nov 17 18:44:27 2016 +## Date of summary: Thu Nov 17 18:44:27 2016 ## ## Equations: -## d_parent = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * -## time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * -## time))) * parent +## d_parent/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * +## exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * +## exp(-k2 * time))) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 336 model solutions performed in 0.935 s +## Fitted with method Port using 336 model solutions performed in 0.768 s ## ## Weighting: none ## @@ -593,17 +593,17 @@ plot(mm.L3)</code></pre> <pre class="r"><code>summary(mm.L3[["DFOP", 1]])</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:08 2016 -## Date of summary: Thu Nov 17 17:46:08 2016 +## Date of fit: Thu Nov 17 18:44:28 2016 +## Date of summary: Thu Nov 17 18:44:28 2016 ## ## Equations: -## d_parent = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * -## time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * -## time))) * parent +## d_parent/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * +## exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * +## exp(-k2 * time))) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 137 model solutions performed in 0.332 s +## Fitted with method Port using 137 model solutions performed in 0.313 s ## ## Weighting: none ## @@ -693,15 +693,15 @@ plot(mm.L4)</code></pre> <pre class="r"><code>summary(mm.L4[["SFO", 1]], data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:08 2016 -## Date of summary: Thu Nov 17 17:46:08 2016 +## Date of fit: Thu Nov 17 18:44:28 2016 +## Date of summary: Thu Nov 17 18:44:29 2016 ## ## Equations: -## d_parent = - k_parent_sink * parent +## d_parent/dt = - k_parent_sink * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 46 model solutions performed in 0.131 s +## Fitted with method Port using 46 model solutions performed in 0.1 s ## ## Weighting: none ## @@ -753,15 +753,15 @@ plot(mm.L4)</code></pre> <pre class="r"><code>summary(mm.L4[["FOMC", 1]], data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:08 2016 -## Date of summary: Thu Nov 17 17:46:08 2016 +## Date of fit: Thu Nov 17 18:44:28 2016 +## Date of summary: Thu Nov 17 18:44:29 2016 ## ## Equations: -## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent +## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 66 model solutions performed in 0.167 s +## Fitted with method Port using 66 model solutions performed in 0.152 s ## ## Weighting: none ## diff --git a/vignettes/FOCUS_Z.pdf b/vignettes/FOCUS_Z.pdf Binary files differindex 6f71d018..6f8929ea 100644 --- a/vignettes/FOCUS_Z.pdf +++ b/vignettes/FOCUS_Z.pdf diff --git a/vignettes/compiled_models.html b/vignettes/compiled_models.html index dc2b2ca7..2cb73ac7 100644 --- a/vignettes/compiled_models.html +++ b/vignettes/compiled_models.html @@ -11,7 +11,7 @@ <meta name="author" content="Johannes Ranke" /> -<meta name="date" content="2016-11-04" /> +<meta name="date" content="2016-11-17" /> <title>Performance benefit by using compiled model definitions in mkin</title> @@ -216,7 +216,7 @@ div.tocify { <h1 class="title toc-ignore">Performance benefit by using compiled model definitions in mkin</h1> <h4 class="author"><em>Johannes Ranke</em></h4> -<h4 class="date"><em>2016-11-04</em></h4> +<h4 class="date"><em>2016-11-17</em></h4> </div> @@ -232,6 +232,7 @@ div.tocify { <pre><code>## Loading required package: minpack.lm</code></pre> <pre><code>## Loading required package: rootSolve</code></pre> <pre><code>## Loading required package: inline</code></pre> +<pre><code>## Loading required package: methods</code></pre> <pre><code>## Loading required package: parallel</code></pre> <pre class="r"><code>SFO_SFO <- mkinmod( parent = mkinsub("SFO", "m1"), @@ -241,12 +242,12 @@ div.tocify { <pre class="r"><code>library("microbenchmark") library("ggplot2") mb.1 <- microbenchmark( - "deSolve, not compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, - solution_type = "deSolve", + "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, + "Eigenvalue based" = mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "eigen", quiet = TRUE), - "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, + "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", quiet = TRUE), times = 3, control = list(warmup = 0))</code></pre> <pre><code>## Warning in microbenchmark(`deSolve, not compiled` = mkinfit(SFO_SFO, @@ -256,21 +257,21 @@ mb.1 <- microbenchmark( print(mb.1)</code></pre> <pre><code>## Unit: milliseconds ## expr min lq mean median uq -## deSolve, not compiled 4969.1274 5005.4703 5026.1990 5041.8132 5054.7348 -## Eigenvalue based 841.6273 843.3144 855.0880 845.0015 861.8183 -## deSolve, compiled 689.6154 698.2345 710.3162 706.8537 720.6666 +## deSolve, not compiled 4925.0009 4957.6694 4974.0652 4990.3379 4998.5974 +## Eigenvalue based 838.9741 839.6651 857.4679 840.3561 866.7149 +## deSolve, compiled 695.5858 709.3905 717.8062 723.1951 728.9163 ## max neval cld -## 5067.6564 3 c -## 878.6352 3 b -## 734.4795 3 a</code></pre> +## 5006.8569 3 c +## 893.0736 3 b +## 734.6375 3 a</code></pre> <pre class="r"><code>autoplot(mb.1)</code></pre> -<p><img src="data:image/png;base64,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" width="672" /></p> -<p>We see that using the compiled model is by a factor of 7.1 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:</p> +<p><img src="data:image/png;base64,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" width="672" /></p> +<p>We see that using the compiled model is by a factor of 6.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:</p> <pre class="r"><code>rownames(smb.1) <- smb.1$expr smb.1["median"]/smb.1["deSolve, compiled", "median"]</code></pre> <pre><code>## median -## deSolve, not compiled 7.132754 -## Eigenvalue based 1.195441 +## deSolve, not compiled 6.900403 +## Eigenvalue based 1.162005 ## deSolve, compiled 1.000000</code></pre> </div> <div id="model-that-can-not-be-solved-with-eigenvalues" class="section level2"> @@ -281,7 +282,7 @@ smb.1["median"]/smb.1["deSolve, compiled", "median" m1 = mkinsub( "SFO"))</code></pre> <pre><code>## Successfully compiled differential equation model from auto-generated C code.</code></pre> <pre class="r"><code>mb.2 <- microbenchmark( - "deSolve, not compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, + "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 = 0))</code></pre> @@ -291,19 +292,19 @@ smb.1["median"]/smb.1["deSolve, compiled", "median" <pre class="r"><code>smb.2 <- summary(mb.2) print(mb.2)</code></pre> <pre><code>## Unit: seconds -## expr min lq mean median uq -## deSolve, not compiled 10.998190 11.039105 11.133751 11.080019 11.201531 -## deSolve, compiled 1.286159 1.286381 1.288394 1.286602 1.289511 -## max neval cld -## 11.32304 3 b -## 1.29242 3 a</code></pre> +## expr min lq mean median uq +## deSolve, not compiled 10.905262 11.007527 11.335389 11.109791 11.55045 +## deSolve, compiled 1.297428 1.304999 1.327356 1.312569 1.34232 +## max neval cld +## 11.991114 3 b +## 1.372071 3 a</code></pre> <pre class="r"><code>smb.2["median"]/smb.2["deSolve, compiled", "median"]</code></pre> <pre><code>## median ## 1 NA ## 2 NA</code></pre> <pre class="r"><code>autoplot(mb.2)</code></pre> -<p><img src="data:image/png;base64,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UKAu2Ab0ivLXE9+RgJYemzy8edzyrl+EHHTayJ9sDB/qeHDS6JYzxk5tKw9dfllr8zlTX4pG8WIzoTJR9ND/J6DRWdxlracN+lP3yGenjGwePfu1/ZwsEdBND4zpPfTSlV0zV3kG8efWjYACuiwD+sRJhZMvOMUL6BeszpIIodTfSL8v+MZmnt7SX0NCQAFddgHt7FsoTNv6zLiTC+danSURBamAbu6T9xkIKNCg7AJ6Z6HQe7O3s37lq1ZnSURBKqBTpuV9BgIKNCirgO75r0LhzixnSURBKqAP5/0OnoACjcoqoHMKhYF2Lz3LElGQCmj+CCjQoGwCOvyLhZMeyXSWRBTeZQF9SwgooKvmgC492f/20sRsZ0lEgYDWjoACumoO6Na5XkGHb8p2lkQUCGjtCCigq/aAbl1+7a+2ZDxLIgoEtHYEFNBlEdC3IBEFAlo7AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuA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" width="672" /></p> -<p>Here we get a performance benefit of a factor of 8.6 using the version of the differential equation model compiled from C code!</p> +<p><img src="data:image/png;base64,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" width="672" /></p> +<p>Here we get a performance benefit of a factor of 8.5 using the version of the differential equation model compiled from C code!</p> <p>This vignette was built with mkin 0.9.44.9000 on</p> <pre><code>## R version 3.3.2 (2016-10-31) ## Platform: x86_64-pc-linux-gnu (64-bit) diff --git a/vignettes/mkin.html b/vignettes/mkin.html index 172712f5..a8f7f2ba 100644 --- a/vignettes/mkin.html +++ b/vignettes/mkin.html @@ -246,23 +246,23 @@ div.tocify { # Define the kinetic model m_SFO_SFO_SFO <- mkinmod(parent = mkinsub("SFO", "M1"), M1 = mkinsub("SFO", "M2"), - M2 = mkinsub("SFO"), + M2 = mkinsub("SFO"), use_of_ff = "max", quiet = TRUE) # Produce model predictions using some arbitrary parameters sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) d_SFO_SFO_SFO <- mkinpredict(m_SFO_SFO_SFO, - c(k_parent = 0.03, - f_parent_to_M1 = 0.5, k_M1 = log(2)/100, + c(k_parent = 0.03, + f_parent_to_M1 = 0.5, k_M1 = log(2)/100, f_M1_to_M2 = 0.9, k_M2 = log(2)/50), c(parent = 100, M1 = 0, M2 = 0), sampling_times) -# Generate a dataset by adding normally distributed errors with +# Generate a dataset by adding normally distributed errors with # standard deviation 3, for two replicates at each sampling time d_SFO_SFO_SFO_err <- add_err(d_SFO_SFO_SFO, reps = 2, - sdfunc = function(x) 3, + sdfunc = function(x) 3, n = 1, seed = 123456789 ) # Fit the model to the dataset |