aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--DESCRIPTION7
-rw-r--r--NEWS.md26
-rw-r--r--R/D24_2014.R2
-rw-r--r--check.log16
-rw-r--r--man/D24_2014.Rd2
-rw-r--r--man/saem.Rd8
-rw-r--r--man/summary.saem.mmkin.Rd2
-rw-r--r--test.log52
-rw-r--r--test_dev.log69
-rw-r--r--tests/testthat/print_mmkin_biphasic_mixed.txt4
-rw-r--r--tests/testthat/print_nlme_biphasic.txt8
-rw-r--r--tests/testthat/setup_script.R39
-rw-r--r--tests/testthat/summary_nlme_biphasic_s.txt42
-rw-r--r--tests/testthat/test_error_models.R1
-rw-r--r--tests/testthat/test_mixed.R13
-rw-r--r--tests/testthat/test_plot.R14
16 files changed, 187 insertions, 118 deletions
diff --git a/DESCRIPTION b/DESCRIPTION
index 697aa90d..fa6c1c90 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -2,7 +2,7 @@ Package: mkin
Type: Package
Title: Kinetic Evaluation of Chemical Degradation Data
Version: 0.9.50.4
-Date: 2020-12-10
+Date: 2021-01-06
Authors@R: c(person("Johannes", "Ranke", role = c("aut", "cre", "cph"),
email = "jranke@uni-bremen.de",
comment = c(ORCID = "0000-0003-4371-6538")),
@@ -18,9 +18,10 @@ Description: Calculation routines based on the FOCUS Kinetics Report (2006,
particular purpose.
Depends: R (>= 2.15.1), parallel
Imports: stats, graphics, methods, deSolve, R6, inline (>= 0.3.17), numDeriv,
- lmtest, pkgbuild, nlme (>= 3.1-151), purrr, saemix (>= 3.1.9000)
+ lmtest, pkgbuild, nlme (>= 3.1-151), purrr
Suggests: knitr, rbenchmark, tikzDevice, testthat, rmarkdown, covr, vdiffr,
- benchmarkme, tibble, stats4
+ benchmarkme, tibble, stats4, saemix (>= 3.1.9000)
+Additional_repositories: https://jranke.github.io/drat
License: GPL
LazyLoad: yes
LazyData: yes
diff --git a/NEWS.md b/NEWS.md
index ac67688d..a3fe63ed 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,28 +1,36 @@
# mkin 0.9.50.4 (unreleased)
-- 'mixed.mmkin' New container for mmkin objects for plotting with the 'plot.mixed.mmkin' method
+## General new features
- 'mkinmod' models gain arguments 'name' and 'dll_dir' which, in conjunction with a current version of the 'inline' package, make it possible to still use the DLL used for fast ODE solutions with 'deSolve' after saving and restoring the 'mkinmod' object.
-- 'f_norm_temp_focus' generic function to normalise time intervals using the FOCUS method, with methods for numeric vectors and 'mkindsg' objects
-
- 'mkindsg' R6 class for groups of 'mkinds' datasets with metadata
-- 'D24_2014' dataset
+- 'f_norm_temp_focus' generic function to normalise time intervals using the FOCUS method, with methods for numeric vectors and 'mkindsg' objects
+
+- 'D24_2014' and 'dimethenamid_2018' datasets
- 'focus_soil_moisture' FOCUS default soil moisture data
-- 'plot.mixed.mmkin' method used for 'nlme.mmkin' and 'saem.mmkin', both inheriting from 'mixed.mmkin' (currently virtual)
-
-- 'saem' generic function to fit saemix models, with a generator 'saem.mmkin', summary and plot methods
+- 'update' method for 'mmkin' objects
- 'transform_odeparms', 'backtransform_odeparms': Use logit transformation for solitary fractions like the g parameter of the DFOP model, or formation fractions for a pathway to only one target variable
-- 'update' method for 'mmkin' objects
+## Mixed-effects models
+
+- 'mixed.mmkin' New container for mmkin objects for plotting with the 'plot.mixed.mmkin' method
+
+- 'plot.mixed.mmkin' method used for 'nlme.mmkin' and 'saem.mmkin', both inheriting from 'mixed.mmkin' (currently virtual)
- 'plot', 'summary' and 'print' methods for 'nlme.mmkin' objects
-- 'saemix_model', 'saemix_data': Helper functions to fit nonlinear mixed-effects models for mmkin row objects using the saemix package
+- Add the current development version of the saemix package as a second, optional backend for mixed-effects models
+
+- DESCRIPTION: Additional_repositories entry pointing to my drat repository on github for a suitable saemix version
+
+- 'saemix_model', 'saemix_data': Helper functions to fit nonlinear mixed-effects models for mmkin row objects.
+
+- 'saem' generic function to fit saemix models using 'saemix_model' and 'saemix_data', with a generator 'saem.mmkin', summary and plot methods
# mkin 0.9.50.3 (2020-10-08)
diff --git a/R/D24_2014.R b/R/D24_2014.R
index 0a111e1c..1f2bcc04 100644
--- a/R/D24_2014.R
+++ b/R/D24_2014.R
@@ -23,6 +23,7 @@
#' \url{http://registerofquestions.efsa.europa.eu/roqFrontend/outputLoader?output=ON-3812}
#' @examples
#' print(D24_2014)
+#' \dontrun{
#' print(D24_2014$ds[[1]], data = TRUE)
#' m_D24 = mkinmod(D24 = mkinsub("SFO", to = "DCP"),
#' DCP = mkinsub("SFO", to = "DCA"),
@@ -32,4 +33,5 @@
#' DCP = mkinsub("SFO", to = "DCA"),
#' DCA = mkinsub("SFO"))
#' print(m_D24_2)
+#' }
"D24_2014"
diff --git a/check.log b/check.log
index 68367bee..778de34c 100644
--- a/check.log
+++ b/check.log
@@ -10,7 +10,8 @@
* checking CRAN incoming feasibility ... Note_to_CRAN_maintainers
Maintainer: ‘Johannes Ranke <jranke@uni-bremen.de>’
* checking package namespace information ... OK
-* checking package dependencies ... OK
+* checking package dependencies ... NOTE
+Package suggested but not available for checking: ‘saemix’
* checking if this is a source package ... OK
* checking if there is a namespace ... OK
* checking for executable files ... OK
@@ -21,8 +22,7 @@ Maintainer: ‘Johannes Ranke <jranke@uni-bremen.de>’
* checking whether package ‘mkin’ can be installed ... OK
* checking installed package size ... OK
* checking package directory ... OK
-* checking for future file timestamps ... NOTE
-unable to verify current time
+* checking for future file timestamps ... OK
* checking ‘build’ directory ... OK
* checking DESCRIPTION meta-information ... OK
* checking top-level files ... OK
@@ -46,7 +46,8 @@ unable to verify current time
* checking Rd files ... OK
* checking Rd metadata ... OK
* checking Rd line widths ... OK
-* checking Rd cross-references ... OK
+* checking Rd cross-references ... NOTE
+Package unavailable to check Rd xrefs: ‘saemix’
* checking for missing documentation entries ... OK
* checking for code/documentation mismatches ... OK
* checking Rd \usage sections ... OK
@@ -57,7 +58,10 @@ unable to verify current time
* checking data for ASCII and uncompressed saves ... OK
* checking installed files from ‘inst/doc’ ... OK
* checking files in ‘vignettes’ ... OK
-* checking examples ... OK
+* checking examples ... NOTE
+Examples with CPU (user + system) or elapsed time > 5s
+ user system elapsed
+D24_2014 1.808 3.425 0.986
* checking for unstated dependencies in ‘tests’ ... OK
* checking tests ... SKIPPED
* checking for unstated dependencies in vignettes ... OK
@@ -68,7 +72,7 @@ unable to verify current time
* checking for detritus in the temp directory ... OK
* DONE
-Status: 1 NOTE
+Status: 3 NOTEs
See
‘/home/jranke/git/mkin/mkin.Rcheck/00check.log’
for details.
diff --git a/man/D24_2014.Rd b/man/D24_2014.Rd
index 8d0e632c..1afa9596 100644
--- a/man/D24_2014.Rd
+++ b/man/D24_2014.Rd
@@ -36,6 +36,7 @@ specific pieces of information in the comments.
}
\examples{
print(D24_2014)
+\dontrun{
print(D24_2014$ds[[1]], data = TRUE)
m_D24 = mkinmod(D24 = mkinsub("SFO", to = "DCP"),
DCP = mkinsub("SFO", to = "DCA"),
@@ -46,4 +47,5 @@ m_D24_2 = mkinmod(D24 = mkinsub("DFOP", to = "DCP"),
DCA = mkinsub("SFO"))
print(m_D24_2)
}
+}
\keyword{datasets}
diff --git a/man/saem.Rd b/man/saem.Rd
index 775a8e7b..969e9a22 100644
--- a/man/saem.Rd
+++ b/man/saem.Rd
@@ -57,7 +57,7 @@ automatic choice is not desired}
\item{control}{Passed to \link[saemix:saemix]{saemix::saemix}}
\item{verbose}{Should we print information about created objects of
-type \link[saemix:SaemixModel-class]{saemix::SaemixModel} and \link[saemix:SaemixData-class]{saemix::SaemixData}?}
+type \link[saemix:SaemixModel]{saemix::SaemixModel} and \link[saemix:SaemixData]{saemix::SaemixData}?}
\item{suppressPlot}{Should we suppress any plotting that is done
by the saemix function?}
@@ -71,12 +71,12 @@ and the end of the optimisation process?}
}
\value{
An S3 object of class 'saem.mmkin', containing the fitted
-\link[saemix:SaemixObject-class]{saemix::SaemixObject} as a list component named 'so'. The
+\link[saemix:SaemixObject]{saemix::SaemixObject} as a list component named 'so'. The
object also inherits from 'mixed.mmkin'.
-An \link[saemix:SaemixModel-class]{saemix::SaemixModel} object.
+An \link[saemix:SaemixModel]{saemix::SaemixModel} object.
-An \link[saemix:SaemixData-class]{saemix::SaemixData} object.
+An \link[saemix:SaemixData]{saemix::SaemixData} object.
}
\description{
This function uses \code{\link[saemix:saemix]{saemix::saemix()}} as a backend for fitting nonlinear mixed
diff --git a/man/summary.saem.mmkin.Rd b/man/summary.saem.mmkin.Rd
index 67cb3cbb..4f83489c 100644
--- a/man/summary.saem.mmkin.Rd
+++ b/man/summary.saem.mmkin.Rd
@@ -27,7 +27,7 @@ included.}
\item{digits}{Number of digits to use for printing}
}
\value{
-The summary function returns a list based on the \link[saemix:SaemixObject-class]{saemix::SaemixObject}
+The summary function returns a list based on the \link[saemix:SaemixObject]{saemix::SaemixObject}
obtained in the fit, with at least the following additional components
\item{saemixversion, mkinversion, Rversion}{The saemix, mkin and R versions used}
\item{date.fit, date.summary}{The dates where the fit and the summary were
diff --git a/test.log b/test.log
index 7a9c55ed..ead5a1c7 100644
--- a/test.log
+++ b/test.log
@@ -4,41 +4,47 @@ Testing mkin
✔ | OK F W S | Context
✔ | 5 | AIC calculation
✔ | 2 | Export dataset for reading into CAKE
-✔ | 14 | Results for FOCUS D established in expertise for UBA (Ranke 2014) [1.0 s]
+✔ | 14 | Results for FOCUS D established in expertise for UBA (Ranke 2014) [1.1 s]
✔ | 4 | Calculation of FOCUS chi2 error levels [0.5 s]
-✔ | 7 | Fitting the SFORB model [3.6 s]
-✔ | 5 | Analytical solutions for coupled models [3.3 s]
+✔ | 7 | Fitting the SFORB model [4.0 s]
+✔ | 5 | Analytical solutions for coupled models [3.6 s]
✔ | 5 | Calculation of Akaike weights
-✔ | 14 | Confidence intervals and p-values [1.2 s]
-✔ | 14 | Error model fitting [5.6 s]
+✔ | 14 | Confidence intervals and p-values [1.4 s]
+✔ | 14 | Error model fitting [6.8 s]
✔ | 5 | Time step normalisation
-✔ | 4 | Test fitting the decline of metabolites from their maximum [0.3 s]
-✔ | 1 | Fitting the logistic model [0.2 s]
-✔ | 33 1 | Nonlinear mixed effects models [28.7 s]
+✔ | 4 | Test fitting the decline of metabolites from their maximum [0.5 s]
+✔ | 1 | Fitting the logistic model [0.3 s]
+✔ | 5 3 | Nonlinear mixed-effects models [0.1 s]
────────────────────────────────────────────────────────────────────────────────
-Skip (test_mixed.R:143:3): saem results are reproducible for biphasic fits
-Reason: Fitting with saemix takes around 10 minutes when using deSolve
+Skip (test_mixed.R:4:3): Parent fits using saemix are correctly implemented
+Reason: !saemix_available is TRUE
+
+Skip (test_mixed.R:94:3): Print methods work
+Reason: !saemix_available is TRUE
+
+Skip (test_mixed.R:118:3): saem results are reproducible for biphasic fits
+Reason: !saemix_available is TRUE
────────────────────────────────────────────────────────────────────────────────
✔ | 2 | Test dataset classes mkinds and mkindsg
-✔ | 1 | mkinfit features [0.3 s]
-✔ | 10 | Special cases of mkinfit calls [0.3 s]
+✔ | 1 | mkinfit features [0.4 s]
+✔ | 10 | Special cases of mkinfit calls [0.4 s]
✔ | 8 | mkinmod model generation and printing [0.2 s]
✔ | 3 | Model predictions with mkinpredict [0.4 s]
-✔ | 16 | Evaluations according to 2015 NAFTA guidance [1.7 s]
-✔ | 9 | Nonlinear mixed-effects models [8.2 s]
-✔ | 16 | Plotting [1.9 s]
+✔ | 16 | Evaluations according to 2015 NAFTA guidance [2.0 s]
+✔ | 9 | Nonlinear mixed-effects models [9.3 s]
+✔ | 14 | Plotting [2.0 s]
✔ | 4 | Residuals extracted from mkinfit models
-✔ | 2 | Complex test case from Schaefer et al. (2007) Piacenza paper [1.6 s]
-✔ | 4 | Summary [0.1 s]
+✔ | 2 | Complex test case from Schaefer et al. (2007) Piacenza paper [1.8 s]
+✔ | 4 | Summary [0.2 s]
✔ | 1 | Summaries of old mkinfit objects
-✔ | 4 | Results for synthetic data established in expertise for UBA (Ranke 2014) [2.3 s]
-✔ | 9 | Hypothesis tests [7.3 s]
-✔ | 4 | Calculation of maximum time weighted average concentrations (TWAs) [2.4 s]
+✔ | 4 | Results for synthetic data established in expertise for UBA (Ranke 2014) [2.5 s]
+✔ | 9 | Hypothesis tests [7.9 s]
+✔ | 4 | Calculation of maximum time weighted average concentrations (TWAs) [2.7 s]
══ Results ═════════════════════════════════════════════════════════════════════
-Duration: 71.3 s
+Duration: 48.3 s
── Skipped tests ──────────────────────────────────────────────────────────────
-● Fitting with saemix takes around 10 minutes when using deSolve (1)
+● !saemix_available is TRUE (3)
-[ FAIL 0 | WARN 0 | SKIP 1 | PASS 206 ]
+[ FAIL 0 | WARN 0 | SKIP 3 | PASS 176 ]
diff --git a/test_dev.log b/test_dev.log
index c57bb958..df159d1e 100644
--- a/test_dev.log
+++ b/test_dev.log
@@ -1,37 +1,62 @@
Loading mkin
+Loading required package: parallel
Testing mkin
✔ | OK F W S | Context
-✔ | 4 | AIC calculation
+✔ | 5 | AIC calculation
✔ | 2 | Export dataset for reading into CAKE
-✔ | 14 | Results for FOCUS D established in expertise for UBA (Ranke 2014) [0.9 s]
-✔ | 4 | Calculation of FOCUS chi2 error levels [0.4 s]
-✔ | 7 | Fitting the SFORB model [3.1 s]
-✔ | 5 | Analytical solutions for coupled models [2.8 s]
+✔ | 14 | Results for FOCUS D established in expertise for UBA (Ranke 2014) [1.0 s]
+✔ | 4 | Calculation of FOCUS chi2 error levels [0.5 s]
+✔ | 7 | Fitting the SFORB model [3.4 s]
+✔ | 5 | Analytical solutions for coupled models [3.1 s]
✔ | 5 | Calculation of Akaike weights
-✔ | 10 | Confidence intervals and p-values [0.9 s]
-✔ | 14 | Error model fitting [3.8 s]
+✔ | 14 | Confidence intervals and p-values [1.2 s]
+✔ | 14 | Error model fitting [5.8 s]
+✔ | 5 | Time step normalisation
✔ | 4 | Test fitting the decline of metabolites from their maximum [0.3 s]
✔ | 1 | Fitting the logistic model [0.2 s]
-✔ | 1 | Test dataset class mkinds used in gmkin
-✔ | 1 | mkinfit features [0.2 s]
-✔ | 12 | Special cases of mkinfit calls [0.6 s]
+✔ | 5 3 | Nonlinear mixed-effects models [0.1 s]
+────────────────────────────────────────────────────────────────────────────────
+Skip (test_mixed.R:4:3): Parent fits using saemix are correctly implemented
+Reason: !saemix_available is TRUE
+
+Skip (test_mixed.R:94:3): Print methods work
+Reason: !saemix_available is TRUE
+
+Skip (test_mixed.R:118:3): saem results are reproducible for biphasic fits
+Reason: !saemix_available is TRUE
+────────────────────────────────────────────────────────────────────────────────
+✔ | 2 | Test dataset classes mkinds and mkindsg
+✔ | 1 | mkinfit features [0.3 s]
+✔ | 10 | Special cases of mkinfit calls [0.3 s]
✔ | 8 | mkinmod model generation and printing [0.2 s]
✔ | 3 | Model predictions with mkinpredict [0.3 s]
-✔ | 16 | Evaluations according to 2015 NAFTA guidance [1.3 s]
-✔ | 9 | Nonlinear mixed-effects models [7.3 s]
-✔ | 14 | Plotting [1.3 s]
+✔ | 14 2 | Evaluations according to 2015 NAFTA guidance [2.2 s]
+────────────────────────────────────────────────────────────────────────────────
+Skip (test_nafta.R:25:5): Test data from Appendix B are correctly evaluated
+Reason: getRversion() >= "4.1.0" is TRUE
+
+Skip (test_nafta.R:53:5): Test data from Appendix D are correctly evaluated
+Reason: getRversion() >= "4.1.0" is TRUE
+────────────────────────────────────────────────────────────────────────────────
+✔ | 9 | Nonlinear mixed-effects models [7.9 s]
+✔ | 0 1 | Plotting [0.7 s]
+────────────────────────────────────────────────────────────────────────────────
+Skip (test_plot.R:18:3): Plotting mkinfit, mmkin and mixed model objects is reproducible
+Reason: getRversion() >= "4.1.0" is TRUE
+────────────────────────────────────────────────────────────────────────────────
✔ | 4 | Residuals extracted from mkinfit models
✔ | 2 | Complex test case from Schaefer et al. (2007) Piacenza paper [1.4 s]
-✔ | 4 | Summary
+✔ | 4 | Summary [0.1 s]
✔ | 1 | Summaries of old mkinfit objects
-✔ | 4 | Results for synthetic data established in expertise for UBA (Ranke 2014) [2.0 s]
-✔ | 9 | Hypothesis tests [7.4 s]
-✔ | 4 | Calculation of maximum time weighted average concentrations (TWAs) [2.2 s]
+✔ | 4 | Results for synthetic data established in expertise for UBA (Ranke 2014) [2.2 s]
+✔ | 9 | Hypothesis tests [7.7 s]
+✔ | 4 | Calculation of maximum time weighted average concentrations (TWAs) [2.0 s]
══ Results ═════════════════════════════════════════════════════════════════════
-Duration: 36.9 s
+Duration: 41.2 s
+
+── Skipped tests ──────────────────────────────────────────────────────────────
+● !saemix_available is TRUE (3)
+● getRversion() >= "4.1.0" is TRUE (3)
-OK: 162
-Failed: 0
-Warnings: 0
-Skipped: 0
+[ FAIL 0 | WARN 0 | SKIP 6 | PASS 160 ]
diff --git a/tests/testthat/print_mmkin_biphasic_mixed.txt b/tests/testthat/print_mmkin_biphasic_mixed.txt
index 3d92b120..11e11bfc 100644
--- a/tests/testthat/print_mmkin_biphasic_mixed.txt
+++ b/tests/testthat/print_mmkin_biphasic_mixed.txt
@@ -21,6 +21,6 @@ OK: No warnings
Mean fitted parameters:
parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2
- 100.700 -6.299 -0.078 -3.094 -3.954
+ 100.702 -5.347 -0.078 -2.681 -4.366
g_qlogis
- 0.027
+ -0.335
diff --git a/tests/testthat/print_nlme_biphasic.txt b/tests/testthat/print_nlme_biphasic.txt
index 98895d3a..f86bda76 100644
--- a/tests/testthat/print_nlme_biphasic.txt
+++ b/tests/testthat/print_nlme_biphasic.txt
@@ -11,19 +11,19 @@ d_m1/dt = + f_parent_to_m1 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g)
Data:
509 observations of 2 variable(s) grouped in 15 datasets
-Log-likelihood: -1343
+Log-likelihood: -1329
Fixed effects:
list(parent_0 ~ 1, log_k_m1 ~ 1, f_parent_qlogis ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1)
parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2
- 100.37 -6.23 -0.08 -3.22 -4.10
+ 100.43 -5.34 -0.08 -2.90 -4.34
g_qlogis
- -0.10
+ -0.19
Random effects:
Formula: list(parent_0 ~ 1, log_k_m1 ~ 1, f_parent_qlogis ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1)
Level: ds
Structure: Diagonal
parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2 g_qlogis Residual
-StdDev: 1 2e-04 0.3 0.7 0.8 0.3 3
+StdDev: 1 0.1 0.3 0.6 0.5 0.3 3
diff --git a/tests/testthat/setup_script.R b/tests/testthat/setup_script.R
index fd9635d1..2071e05c 100644
--- a/tests/testthat/setup_script.R
+++ b/tests/testthat/setup_script.R
@@ -156,7 +156,7 @@ DFOP_SFO <- mkinmod(
m1 = mkinsub("SFO"),
quiet = TRUE)
dfop_sfo_pop <- list(parent_0 = 100,
- k_m1 = 0.002, f_parent_to_m1 = 0.5,
+ k_m1 = 0.005, f_parent_to_m1 = 0.5,
k1 = 0.05, k2 = 0.01, g = 0.5)
syn_biphasic_parms <- as.matrix(data.frame(
k1 = rlnorm(n_biphasic, log(dfop_sfo_pop$k1), log_sd),
@@ -178,19 +178,27 @@ ds_biphasic <- lapply(ds_biphasic_mean, function(ds) {
})
# Mixed model fits
-mmkin_sfo_1 <- mmkin("SFO", ds_sfo, quiet = TRUE, error_model = "tc")
-sfo_saem_1 <- saem(mmkin_sfo_1, quiet = TRUE, transformations = "saemix")
+saemix_available <- FALSE
+if (requireNamespace("saemix", quietly = TRUE)) {
+ if(packageVersion("saemix") > "3.1.9000") saemix_available <- TRUE
+}
+mmkin_sfo_1 <- mmkin("SFO", ds_sfo, quiet = TRUE, error_model = "tc", cores = n_cores)
+mmkin_dfop_1 <- mmkin("DFOP", ds_dfop, quiet = TRUE, cores = n_cores)
+mmkin_biphasic <- mmkin(list("DFOP-SFO" = DFOP_SFO), ds_biphasic, quiet = TRUE, cores = n_cores)
+mmkin_biphasic_mixed <- mixed(mmkin_biphasic)
-mmkin_dfop_1 <- mmkin("DFOP", ds_dfop, quiet = TRUE)
-dfop_saemix_1 <- saem(mmkin_dfop_1, quiet = TRUE, transformations = "mkin")
-dfop_saemix_2 <- saem(mmkin_dfop_1, quiet = TRUE, transformations = "saemix")
dfop_nlme_1 <- nlme(mmkin_dfop_1)
-
-mmkin_biphasic <- mmkin(list("DFOP-SFO" = DFOP_SFO), ds_biphasic, quiet = TRUE)
-mmkin_biphasic_mixed <- mixed(mmkin_biphasic)
nlme_biphasic <- nlme(mmkin_biphasic)
-saem_biphasic_m <- saem(mmkin_biphasic, transformations = "mkin", quiet = TRUE)
-saem_biphasic_s <- saem(mmkin_biphasic, transformations = "saemix", quiet = TRUE)
+
+if (saemix_available) {
+ sfo_saem_1 <- saem(mmkin_sfo_1, quiet = TRUE, transformations = "saemix")
+
+ dfop_saemix_1 <- saem(mmkin_dfop_1, quiet = TRUE, transformations = "mkin")
+ dfop_saemix_2 <- saem(mmkin_dfop_1, quiet = TRUE, transformations = "saemix")
+
+ saem_biphasic_m <- saem(mmkin_biphasic, transformations = "mkin", quiet = TRUE)
+ saem_biphasic_s <- saem(mmkin_biphasic, transformations = "saemix", quiet = TRUE)
+}
ds_uba <- lapply(experimental_data_for_UBA_2019[6:10],
function(x) subset(x$data[c("name", "time", "value")]))
@@ -200,7 +208,10 @@ sfo_sfo_uba <- mkinmod(parent = mkinsub("SFO", "A1"),
dfop_sfo_uba <- mkinmod(parent = mkinsub("DFOP", "A1"),
A1 = mkinsub("SFO"), quiet = TRUE)
f_uba_mmkin <- mmkin(list("SFO-SFO" = sfo_sfo_uba, "DFOP-SFO" = dfop_sfo_uba),
- ds_uba, quiet = TRUE)
+ ds_uba, quiet = TRUE, cores = n_cores)
f_uba_dfop_sfo_mixed <- mixed(f_uba_mmkin[2, ])
-f_uba_sfo_sfo_saem <- saem(f_uba_mmkin["SFO-SFO", ], quiet = TRUE, transformations = "saemix")
-f_uba_dfop_sfo_saem <- saem(f_uba_mmkin["DFOP-SFO", ], quiet = TRUE, transformations = "saemix")
+
+if (saemix_available) {
+ f_uba_sfo_sfo_saem <- saem(f_uba_mmkin["SFO-SFO", ], quiet = TRUE, transformations = "saemix")
+ f_uba_dfop_sfo_saem <- saem(f_uba_mmkin["DFOP-SFO", ], quiet = TRUE, transformations = "saemix")
+}
diff --git a/tests/testthat/summary_nlme_biphasic_s.txt b/tests/testthat/summary_nlme_biphasic_s.txt
index f9171748..65aead62 100644
--- a/tests/testthat/summary_nlme_biphasic_s.txt
+++ b/tests/testthat/summary_nlme_biphasic_s.txt
@@ -17,15 +17,15 @@ Data:
Model predictions using solution type analytical
-Fitted in test time 0 s using 2 iterations
+Fitted in test time 0 s using 3 iterations
Variance model: Constant variance
Mean of starting values for individual parameters:
parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2
- 100.70 -6.30 -0.08 -3.09 -3.95
+ 100.70 -5.35 -0.08 -2.68 -4.37
g_qlogis
- 0.03
+ -0.33
Fixed degradation parameter values:
value type
@@ -34,40 +34,40 @@ m1_0 0 state
Results:
AIC BIC logLik
- 2711 2766 -1343
+ 2683 2738 -1329
Optimised, transformed parameters with symmetric confidence intervals:
lower est. upper
-parent_0 99.5 100.37 101.23
-log_k_m1 -6.5 -6.23 -5.94
-f_parent_qlogis -0.2 -0.08 0.08
-log_k1 -3.6 -3.22 -2.84
-log_k2 -4.5 -4.10 -3.68
-g_qlogis -0.4 -0.10 0.17
+parent_0 99.6 100.43 101.26
+log_k_m1 -5.5 -5.34 -5.18
+f_parent_qlogis -0.3 -0.08 0.09
+log_k1 -3.2 -2.90 -2.60
+log_k2 -4.6 -4.34 -4.07
+g_qlogis -0.5 -0.19 0.08
Correlation:
prnt_0 lg_k_1 f_prn_ log_k1 log_k2
-log_k_m1 -0.185
-f_parent_qlogis -0.161 0.405
-log_k1 0.056 -0.014 -0.016
-log_k2 0.025 0.011 -0.004 0.026
-g_qlogis -0.032 -0.046 -0.012 -0.109 -0.103
+log_k_m1 -0.177
+f_parent_qlogis -0.164 0.385
+log_k1 0.108 -0.017 -0.025
+log_k2 0.036 0.054 0.008 0.096
+g_qlogis -0.068 -0.110 -0.030 -0.269 -0.267
Random effects:
Formula: list(parent_0 ~ 1, log_k_m1 ~ 1, f_parent_qlogis ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1)
Level: ds
Structure: Diagonal
parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2 g_qlogis Residual
-StdDev: 1 2e-04 0.3 0.7 0.8 0.3 3
+StdDev: 1 0.1 0.3 0.6 0.5 0.3 3
Backtransformed parameters with asymmetric confidence intervals:
lower est. upper
parent_0 1e+02 1e+02 1e+02
-k_m1 1e-03 2e-03 3e-03
+k_m1 4e-03 5e-03 6e-03
f_parent_to_m1 4e-01 5e-01 5e-01
-k1 3e-02 4e-02 6e-02
-k2 1e-02 2e-02 3e-02
+k1 4e-02 6e-02 7e-02
+k2 1e-02 1e-02 2e-02
g 4e-01 5e-01 5e-01
Resulting formation fractions:
@@ -77,5 +77,5 @@ parent_sink 0.5
Estimated disappearance times:
DT50 DT90 DT50back DT50_k1 DT50_k2
-parent 27 105 31 17 42
-m1 352 1171 NA NA NA
+parent 26 131 39 13 53
+m1 144 479 NA NA NA
diff --git a/tests/testthat/test_error_models.R b/tests/testthat/test_error_models.R
index 2a1ffcc1..c11f6712 100644
--- a/tests/testthat/test_error_models.R
+++ b/tests/testthat/test_error_models.R
@@ -56,6 +56,7 @@ test_that("The default error model algorithm finds the best known AIC values for
f_tc_exp_d_3 <- mmkin(c("SFO", "DFOP", "HS"),
lapply(experimental_data_for_UBA_2019, function(x) x$data),
error_model = "tc",
+ cores = n_cores,
quiet = TRUE)
AIC_exp_d_3 <- lapply(f_tc_exp_d_3, AIC)
diff --git a/tests/testthat/test_mixed.R b/tests/testthat/test_mixed.R
index 1e96c338..e9af10e6 100644
--- a/tests/testthat/test_mixed.R
+++ b/tests/testthat/test_mixed.R
@@ -1,6 +1,8 @@
context("Nonlinear mixed-effects models")
-test_that("Parent only models can be fitted using nonlinear mixed effects models", {
+test_that("Parent fits using saemix are correctly implemented", {
+ skip_if(!saemix_available)
+
expect_error(saem(fits), "Only row objects")
# Some fits were done in the setup script
mmkin_sfo_2 <- update(mmkin_sfo_1, fixed_initials = c(parent = 100))
@@ -26,7 +28,7 @@ test_that("Parent only models can be fitted using nonlinear mixed effects models
expect_equal(round(s_sfo_s1$confint_back["k_parent", "est."], 3),
round(s_sfo_n$confint_back["k_parent", "est."], 3))
- mmkin_fomc_1 <- mmkin("FOMC", ds_fomc, quiet = TRUE, error_model = "tc")
+ mmkin_fomc_1 <- mmkin("FOMC", ds_fomc, quiet = TRUE, error_model = "tc", cores = n_cores)
fomc_saem_1 <- saem(mmkin_fomc_1, quiet = TRUE)
ci_fomc_s1 <- summary(fomc_saem_1)$confint_back
@@ -66,7 +68,7 @@ test_that("Parent only models can be fitted using nonlinear mixed effects models
rel_diff_2 <- (s_dfop_s2$confint_back[, "est."] - dfop_pop) / dfop_pop
expect_true(all(rel_diff_2 < 0.12))
- mmkin_hs_1 <- mmkin("HS", ds_hs, quiet = TRUE, error_model = "const")
+ mmkin_hs_1 <- mmkin("HS", ds_hs, quiet = TRUE, error_model = "const", cores = n_cores)
hs_saem_1 <- saem(mmkin_hs_1, quiet = TRUE)
ci_hs_s1 <- summary(hs_saem_1)$confint_back
@@ -88,10 +90,12 @@ test_that("Print methods work", {
expect_known_output(print(fits, digits = 2), "print_mmkin_parent.txt")
expect_known_output(print(mmkin_biphasic_mixed, digits = 2), "print_mmkin_biphasic_mixed.txt")
expect_known_output(print(nlme_biphasic, digits = 1), "print_nlme_biphasic.txt")
+
+ skip_if(!saemix_available)
expect_known_output(print(sfo_saem_1, digits = 1), "print_sfo_saem_1.txt")
})
-test_that("nlme results are reproducible", {
+test_that("nlme results are reproducible to some degree", {
test_summary <- summary(nlme_biphasic)
test_summary$nlmeversion <- "Dummy 0.0 for testing"
@@ -111,6 +115,7 @@ test_that("nlme results are reproducible", {
test_that("saem results are reproducible for biphasic fits", {
+ skip_if(!saemix_available)
test_summary <- summary(saem_biphasic_s)
test_summary$saemixversion <- "Dummy 0.0 for testing"
test_summary$mkinversion <- "Dummy 0.0 for testing"
diff --git a/tests/testthat/test_plot.R b/tests/testthat/test_plot.R
index 75d401a3..1c95d069 100644
--- a/tests/testthat/test_plot.R
+++ b/tests/testthat/test_plot.R
@@ -35,8 +35,10 @@ test_that("Plotting mkinfit, mmkin and mixed model objects is reproducible", {
plot_biphasic_mmkin <- function() plot(f_uba_dfop_sfo_mixed)
vdiffr::expect_doppelganger("mixed model fit for mmkin object", plot_biphasic_mmkin)
- plot_biphasic_saem_s <- function() plot(f_uba_dfop_sfo_saem)
- vdiffr::expect_doppelganger("mixed model fit for saem object with saemix transformations", plot_biphasic_saem_s)
+ if (saemix_available) {
+ plot_biphasic_saem_s <- function() plot(f_uba_dfop_sfo_saem)
+ vdiffr::expect_doppelganger("mixed model fit for saem object with saemix transformations", plot_biphasic_saem_s)
+ }
skip_on_travis()
@@ -46,10 +48,12 @@ test_that("Plotting mkinfit, mmkin and mixed model objects is reproducible", {
#plot_biphasic_mmkin <- function() plot(mixed(mmkin_biphasic))
# Biphasic fits with lots of data and fits have lots of potential for differences
plot_biphasic_nlme <- function() plot(nlme_biphasic)
- #plot_biphasic_saem_s <- function() plot(saem_biphasic_s)
- plot_biphasic_saem_m <- function() plot(saem_biphasic_m)
+ if (saemix_available) {
+ #plot_biphasic_saem_s <- function() plot(saem_biphasic_s)
+ plot_biphasic_saem_m <- function() plot(saem_biphasic_m)
- vdiffr::expect_doppelganger("mixed model fit for saem object with mkin transformations", plot_biphasic_saem_m)
+ vdiffr::expect_doppelganger("mixed model fit for saem object with mkin transformations", plot_biphasic_saem_m)
+ }
# different results when working with eigenvalues
plot_errmod_fit_D_obs_eigen <- function() plot_err(fit_D_obs_eigen, sep_obs = FALSE)

Contact - Imprint