aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRanke Johannes <johannes.ranke@agroscope.admin.ch>2026-09-07 13:45:39 +0200
committerRanke Johannes <johannes.ranke@agroscope.admin.ch>2026-09-07 13:45:39 +0200
commit48d9cad339394c3aa0d730d9a27b1c0680ce13e8 (patch)
tree9c0a5766f3d0853c382ba0174f83e2e8ac9b0fbf
parent46735d7a6d429bb0c50f951763797f321a0d77ca (diff)
Add DTx function, check and testHEADmain
The tolerance of one test had to be increased in test_deSolve.R, and four vdiffr snapshots with negligible differences were updated. Tests run with a maximum of 16 cores when running in the Agroscope Apptainer environment.
-rw-r--r--DESCRIPTION6
-rw-r--r--NAMESPACE99
-rw-r--r--NEWS.md8
-rw-r--r--R/endpoints.R79
-rw-r--r--_pkgdown.yml1
-rw-r--r--log/build.log4
-rw-r--r--log/check.log29
-rw-r--r--log/test.log35
-rw-r--r--man/DFOP.solution.Rd14
-rw-r--r--man/DTx.Rd26
-rw-r--r--man/FOMC.solution.Rd14
-rw-r--r--man/HS.solution.Rd14
-rw-r--r--man/IORE.solution.Rd14
-rw-r--r--man/SFO.solution.Rd14
-rw-r--r--man/SFORB.solution.Rd14
-rw-r--r--man/anova.saem.mmkin.Rd2
-rw-r--r--man/logLik.saem.mmkin.Rd4
-rw-r--r--man/logistic.solution.Rd14
-rw-r--r--man/mkinds.Rd95
-rw-r--r--man/mkindsg.Rd91
-rw-r--r--man/reexports.Rd7
-rw-r--r--man/saem.Rd8
-rw-r--r--man/summary.saem.mmkin.Rd2
-rw-r--r--man/transform_odeparms.Rd2
-rw-r--r--tests/testthat/_snaps/multistart/llhist-for-dfop-sfo-fit.svg34
-rw-r--r--tests/testthat/_snaps/multistart/mixed-model-fit-for-saem-object-with-mkin-transformations.svg148
-rw-r--r--tests/testthat/_snaps/multistart/parplot-for-dfop-sfo-fit.svg236
-rw-r--r--tests/testthat/_snaps/plot/mixed-model-fit-for-nlme-object.svg20
-rw-r--r--tests/testthat/print_dfop_saem_1.txt10
-rw-r--r--tests/testthat/setup_script.R7
-rw-r--r--tests/testthat/test_deSolve.R3
-rw-r--r--tests/testthat/test_endpoints.R49
32 files changed, 645 insertions, 458 deletions
diff --git a/DESCRIPTION b/DESCRIPTION
index 77b53a6d..ded3b27b 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,8 +1,8 @@
Package: mkin
Type: Package
Title: Kinetic Evaluation of Chemical Degradation Data
-Version: 1.2.10
-Date: 2025-09-12
+Version: 1.2.11
+Date: 2026-09-07
Authors@R: c(
person("Johannes", "Ranke", role = c("aut", "cre", "cph"),
email = "johannes.ranke@jrwb.de",
@@ -35,4 +35,4 @@ VignetteBuilder: knitr
BugReports: https://github.com/jranke/mkin/issues/
URL: https://pkgdown.jrwb.de/mkin/
Roxygen: list(markdown = TRUE)
-RoxygenNote: 7.3.3
+Config/roxygen2/version: 8.1.0
diff --git a/NAMESPACE b/NAMESPACE
index 5b9a1c85..445a3649 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -83,6 +83,7 @@ S3method(update,saem.mmkin)
S3method(which.best,default)
export(CAKE_export)
export(DFOP.solution)
+export(DTx)
export(FOMC.solution)
export(HS.solution)
export(IORE.solution)
@@ -155,49 +156,59 @@ import(nlme)
importFrom(R6,R6Class)
importFrom(grDevices,dev.cur)
importFrom(lmtest,lrtest)
-importFrom(methods,is)
-importFrom(methods,signature)
-importFrom(nlme,intervals)
-importFrom(nlme,nlme)
-importFrom(parallel,detectCores)
-importFrom(parallel,mclapply)
-importFrom(parallel,parLapply)
+importFrom(methods,
+ is,
+ signature
+)
+importFrom(nlme,
+ intervals,
+ nlme
+)
+importFrom(parallel,
+ detectCores,
+ mclapply,
+ parLapply
+)
importFrom(rlang,"!!!")
importFrom(saemix,saemix)
-importFrom(stats,AIC)
-importFrom(stats,BIC)
-importFrom(stats,aggregate)
-importFrom(stats,anova)
-importFrom(stats,as.formula)
-importFrom(stats,coef)
-importFrom(stats,coefficients)
-importFrom(stats,cov2cor)
-importFrom(stats,dist)
-importFrom(stats,dnorm)
-importFrom(stats,lm)
-importFrom(stats,logLik)
-importFrom(stats,median)
-importFrom(stats,na.fail)
-importFrom(stats,nlminb)
-importFrom(stats,nobs)
-importFrom(stats,optimize)
-importFrom(stats,pchisq)
-importFrom(stats,plogis)
-importFrom(stats,predict)
-importFrom(stats,pt)
-importFrom(stats,qchisq)
-importFrom(stats,qf)
-importFrom(stats,qlogis)
-importFrom(stats,qnorm)
-importFrom(stats,qt)
-importFrom(stats,quantile)
-importFrom(stats,residuals)
-importFrom(stats,rnorm)
-importFrom(stats,shapiro.test)
-importFrom(stats,terms)
-importFrom(stats,update)
-importFrom(stats,vcov)
-importFrom(utils,capture.output)
-importFrom(utils,getFromNamespace)
-importFrom(utils,packageVersion)
-importFrom(utils,write.table)
+importFrom(stats,
+ AIC,
+ BIC,
+ aggregate,
+ anova,
+ as.formula,
+ coef,
+ coefficients,
+ cov2cor,
+ dist,
+ dnorm,
+ lm,
+ logLik,
+ median,
+ na.fail,
+ nlminb,
+ nobs,
+ optimize,
+ pchisq,
+ plogis,
+ predict,
+ pt,
+ qchisq,
+ qf,
+ qlogis,
+ qnorm,
+ qt,
+ quantile,
+ residuals,
+ rnorm,
+ shapiro.test,
+ terms,
+ update,
+ vcov
+)
+importFrom(utils,
+ capture.output,
+ getFromNamespace,
+ packageVersion,
+ write.table
+)
diff --git a/NEWS.md b/NEWS.md
index 82f6aa4d..bbdc1b29 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,4 +1,10 @@
-# mkin 1.2.10 (unreleased)
+# mkin 1.2.11 (unreleased)
+
+## New features
+
+- 'R/endpoints.R': Introduce the function `DTx` that makes it easy to calculate various types of DTx values such as DT50, DT90 and pseudo-half-lives calculated from DT90 or from the slow phase of biphasic models.
+
+# mkin 1.2.10 (2025-05-13)
## New features
diff --git a/R/endpoints.R b/R/endpoints.R
index 70a9eef3..fd5ecec1 100644
--- a/R/endpoints.R
+++ b/R/endpoints.R
@@ -158,7 +158,7 @@ endpoints <- function(fit, covariates = NULL, covariate_quantile = 0.5) {
silent = TRUE)
if (inherits(DT50, "try-error")) DT50 = NA
if (inherits(DT90, "try-error")) DT90 = NA
- DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011
+ DT50_back = DT90 / (log(10)/log(2))
ep$distimes[obs_var, c("DT50back")] = DT50_back
ep$distimes[obs_var, c("DT50_k1")] = DT50_k1
@@ -177,7 +177,7 @@ endpoints <- function(fit, covariates = NULL, covariate_quantile = 0.5) {
}
DT50 <- DTx(50)
DT90 <- DTx(90)
- DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011
+ DT50_back = DT90 / (log(10)/log(2))
DT50_k1 = log(2)/k1
DT50_k2 = log(2)/k2
ep$distimes[obs_var, c("DT50back")] = DT50_back
@@ -254,3 +254,78 @@ endpoints <- function(fit, covariates = NULL, covariate_quantile = 0.5) {
if (length(ep$SFORB) == 0) ep$SFORB <- NULL
return(ep)
}
+
+#' Calculate DTx from parameters of parent degradation models
+#'
+#' @param type Character string specifying the degradation model
+#' @param parms Named numeric vector giving the kinetic parameters
+#' @param exact Should we used log(10)/log(2) instead of the widely used value
+#' of 3.32 for backcalculation of DT50 values from DT90 values?
+#' @export
+#' @examples
+#' # Check what type of DT50 is given in the bixafen EFSA conclusion from 2012 on p. 42
+#' DTx("HS", parms = c(k1 = 0.0081, k2 = 0.00023, tb = 53))
+#' # We get 1200 days for the time the concentration reaches 50%, the value of 1235
+#' # was likely based on more digits for the parameters. The half-life corresponding
+#' # to the slow phase is around 3000 days
+DTx <- function(type = c("SFO", "FOMC", "DFOP", "HS", "SFORB"), parms, exact = FALSE) {
+ type <- match.arg(type)
+ backcalculation_factor <- if (exact) log(10)/log(2) else 3.32
+
+ if (type == "SFO") {
+ DT50 <- log(2)/parms[["k"]]
+ DT90 <- log(10)/parms[["k"]]
+ return(c(DT50 = DT50, DT90 = DT90))
+ }
+ if (type == "FOMC") {
+ alpha = parms[["alpha"]]
+ beta = parms[["beta"]]
+ DT50 = beta * (2^(1/alpha) - 1)
+ DT90 = beta * (10^(1/alpha) - 1)
+ DT50_back = DT90 / backcalculation_factor
+ return(c(DT50 = DT50, DT90 = DT90, DT50back = DT50_back))
+ }
+ if (type == "DFOP") {
+ k1 = parms[["k1"]]
+ k2 = parms[["k2"]]
+ g = parms[["g"]]
+
+ f <- function(log_t, x) {
+ t <- exp(log_t)
+ fraction <- g * exp( - k1 * t) + (1 - g) * exp( - k2 * t)
+ (fraction - (1 - x/100))^2
+ }
+
+ DT50_k1 = log(2)/k1
+ DT50_k2 = log(2)/k2
+ DT90_k1 = log(10)/k1
+ DT90_k2 = log(10)/k2
+
+ DT50 <- try(exp(optimize(f, c(log(DT50_k1), log(DT50_k2)), x=50)$minimum),
+ silent = TRUE)
+ DT90 <- try(exp(optimize(f, c(log(DT90_k1), log(DT90_k2)), x=90)$minimum),
+ silent = TRUE)
+ if (inherits(DT50, "try-error")) DT50 = NA
+ if (inherits(DT90, "try-error")) DT90 = NA
+ DT50_back = DT90 / backcalculation_factor
+ return(c(DT50 = DT50, DT90 = DT90, DT50back = DT50_back, DT50_k1 = DT50_k1, DT50_k2 = DT50_k2))
+ }
+ if (type == "HS") {
+ k1 = parms[["k1"]]
+ k2 = parms[["k2"]]
+ tb = parms[["tb"]]
+ DTx <- function(x) {
+ DTx.a <- (log(100/(100 - x)))/k1
+ DTx.b <- tb + (log(100/(100 - x)) - k1 * tb)/k2
+ if (DTx.a < tb) DTx <- DTx.a
+ else DTx <- DTx.b
+ return(DTx)
+ }
+ DT50 <- DTx(50)
+ DT90 <- DTx(90)
+ DT50_back = DT90 / backcalculation_factor
+ DT50_k1 = log(2)/k1
+ DT50_k2 = log(2)/k2
+ return(c(DT50 = DT50, DT90 = DT90, DT50back = DT50_back, DT50_k1 = DT50_k1, DT50_k2 = DT50_k2))
+ }
+}
diff --git a/_pkgdown.yml b/_pkgdown.yml
index a88e9cde..ebbe078b 100644
--- a/_pkgdown.yml
+++ b/_pkgdown.yml
@@ -94,6 +94,7 @@ reference:
- plot.nafta
- title: Utility functions
contents:
+ - DTx
- summary_listing
- f_time_norm_focus
- set_nd_nq
diff --git a/log/build.log b/log/build.log
index b2206986..0d9a46de 100644
--- a/log/build.log
+++ b/log/build.log
@@ -1,10 +1,10 @@
* checking for file ‘./DESCRIPTION’ ... OK
* preparing ‘mkin’:
* checking DESCRIPTION meta-information ... OK
-* installing the package to build vignettes
+* installing the package (it is needed to build vignettes)
* creating vignettes ... OK
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
Removed empty directory ‘mkin/vignettes/web_only’
-* building ‘mkin_1.2.10.tar.gz’
+* building ‘mkin_1.2.11.tar.gz’
diff --git a/log/check.log b/log/check.log
index 7f212453..575e96c3 100644
--- a/log/check.log
+++ b/log/check.log
@@ -1,15 +1,16 @@
-* using log directory ‘/home/jranke/git/mkin/mkin.Rcheck’
-* using R version 4.5.1 (2025-06-13)
+* using log directory ‘/home/f80868656/projects/mkin/mkin.Rcheck’
+* using R version 4.6.1 (2026-06-24)
* using platform: x86_64-pc-linux-gnu
* R was compiled by
- gcc (Debian 12.2.0-14+deb12u1) 12.2.0
- GNU Fortran (Debian 12.2.0-14+deb12u1) 12.2.0
-* running under: Debian GNU/Linux 13 (trixie)
+ gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
+ GNU Fortran (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
+* running under: Ubuntu 24.04.4 LTS
* using session charset: UTF-8
+* current time: 2026-09-07 10:01:19 UTC
* using options ‘--no-tests --as-cran’
* checking for file ‘mkin/DESCRIPTION’ ... OK
* checking extension type ... Package
-* this is package ‘mkin’ version ‘1.2.10’
+* this is package ‘mkin’ version ‘1.2.11’
* package encoding: UTF-8
* checking CRAN incoming feasibility ... OK
* checking package namespace information ... OK
@@ -43,7 +44,7 @@
* checking S3 generic/method consistency ... OK
* checking replacement functions ... OK
* checking foreign function calls ... OK
-* checking R code for possible problems ... OK
+* checking R code for possible problems ... [24s/15s] OK
* checking Rd files ... OK
* checking Rd metadata ... OK
* checking Rd line widths ... OK
@@ -60,17 +61,23 @@
* checking sizes of PDF files under ‘inst/doc’ ... OK
* checking installed files from ‘inst/doc’ ... OK
* checking files in ‘vignettes’ ... OK
-* checking examples ... [12s/12s] OK
+* checking examples ... [37s/21s] OK
* checking for unstated dependencies in ‘tests’ ... OK
* checking tests ... SKIPPED
* checking for unstated dependencies in vignettes ... OK
* checking package vignettes ... OK
-* checking re-building of vignette outputs ... [15s/11s] OK
+* checking re-building of vignette outputs ... [30s/19s] OK
* checking PDF version of manual ... OK
-* checking HTML version of manual ... OK
+* checking HTML version of manual ... NOTE
+Skipping checking HTML validation: no command 'tidy' found.
+Please obtain a recent version of HTML Tidy by downloading a binary
+release or compiling the source code from <https://www.html-tidy.org/>.
* checking for non-standard things in the check directory ... OK
* checking for detritus in the temp directory ... OK
* DONE
-Status: OK
+Status: 1 NOTE
+See
+ ‘/home/f80868656/projects/mkin/mkin.Rcheck/00check.log’
+for details.
diff --git a/log/test.log b/log/test.log
index e1726492..33ee7dfd 100644
--- a/log/test.log
+++ b/log/test.log
@@ -1,44 +1,45 @@
ℹ Testing mkin
✔ | F W S OK | Context
✔ | 5 | AIC calculation
-✔ | 5 | Analytical solutions for coupled models [1.6s]
+✔ | 5 | Analytical solutions for coupled models [2.8s]
✔ | 5 | Calculation of Akaike weights
✔ | 3 | Export dataset for reading into CAKE
-✔ | 6 | Use of precompiled symbols in mkinpredict [3.7s]
+✔ | 6 | Use of precompiled symbols in mkinpredict [4.7s]
✔ | 12 | Confidence intervals and p-values
✔ | 1 | Solutions with deSolve
-✔ | 1 12 | Dimethenamid data from 2018 [14.0s]
-✔ | 14 | Error model fitting [2.7s]
+✔ | 1 12 | Dimethenamid data from 2018 [24.3s]
+✔ | 4 | DTx calculations
+✔ | 14 | Error model fitting [4.0s]
✔ | 5 | Time step normalisation
✔ | 4 | Calculation of FOCUS chi2 error levels
✔ | 14 | Results for FOCUS D established in expertise for UBA (Ranke 2014)
✔ | 4 | Test fitting the decline of metabolites from their maximum
✔ | 1 | Fitting the logistic model
-✔ | 10 | Batch fitting and diagnosing hierarchical kinetic models [20.5s]
-✔ | 2 20 | Nonlinear mixed-effects models [142.6s]
+✔ | 10 | Batch fitting and diagnosing hierarchical kinetic models [37.9s]
+✔ | 2 20 | Nonlinear mixed-effects models [283.3s]
✔ | 3 | Test dataset classes mkinds and mkindsg
✔ | 10 | Special cases of mkinfit calls
✔ | 3 | mkinfit features
✔ | 8 | mkinmod model generation and printing
✔ | 4 | Model predictions with mkinpredict
-✔ | 12 | Multistart method for saem.mmkin models [23.8s]
-✔ | 16 | Evaluations according to 2015 NAFTA guidance [1.5s]
-✔ | 9 | Nonlinear mixed-effects models with nlme [4.0s]
-✔ | 15 | Plotting [4.9s]
+✔ | 12 | Multistart method for saem.mmkin models [41.8s]
+✔ | 16 | Evaluations according to 2015 NAFTA guidance [2.6s]
+✔ | 9 | Nonlinear mixed-effects models with nlme [7.6s]
+✔ | 15 | Plotting [9.1s]
✔ | 4 | Residuals extracted from mkinfit models
-✔ | 1 38 | saemix parent models [36.1s]
+✔ | 1 38 | saemix parent models [66.6s]
✔ | 2 | Complex test case from Schaefer et al. (2007) Piacenza paper
✔ | 11 | Processing of residue series
-✔ | 10 | Fitting the SFORB model [1.7s]
+✔ | 10 | Fitting the SFORB model [3.0s]
✔ | 1 | Summaries of old mkinfit objects
✔ | 5 | Summary
-✔ | 4 | Results for synthetic data established in expertise for UBA (Ranke 2014)
-✔ | 9 | Hypothesis tests [2.8s]
-✔ | 4 | Calculation of maximum time weighted average concentrations (TWAs)
+✔ | 4 | Results for synthetic data established in expertise for UBA (Ranke 2014) [1.5s]
+✔ | 9 | Hypothesis tests [5.3s]
+✔ | 4 | Calculation of maximum time weighted average concentrations (TWAs) [1.5s]
✔ | 2 | water-sediment
══ Results ═════════════════════════════════════════════════════════════════════
-Duration: 265.7 s
+Duration: 503.1 s
── Skipped tests (4) ───────────────────────────────────────────────────────────
• Fitting this ODE model with saemix takes about 5 minutes on my new system
@@ -49,4 +50,4 @@ Duration: 265.7 s
• This still takes almost 2.5 minutes although we do not solve ODEs (1):
'test_saemix_parent.R:143:3'
-[ FAIL 0 | WARN 0 | SKIP 4 | PASS 291 ]
+[ FAIL 0 | WARN 0 | SKIP 4 | PASS 295 ]
diff --git a/man/DFOP.solution.Rd b/man/DFOP.solution.Rd
index d8c4553e..61089081 100644
--- a/man/DFOP.solution.Rd
+++ b/man/DFOP.solution.Rd
@@ -43,12 +43,12 @@ Version 1.1, 18 December 2014
\url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}
}
\seealso{
-Other parent solutions:
-\code{\link{FOMC.solution}()},
-\code{\link{HS.solution}()},
-\code{\link{IORE.solution}()},
-\code{\link{SFO.solution}()},
-\code{\link{SFORB.solution}()},
-\code{\link{logistic.solution}()}
+Other parent solutions:
+\code{\link[=FOMC.solution]{FOMC.solution()}},
+\code{\link[=HS.solution]{HS.solution()}},
+\code{\link[=IORE.solution]{IORE.solution()}},
+\code{\link[=SFO.solution]{SFO.solution()}},
+\code{\link[=SFORB.solution]{SFORB.solution()}},
+\code{\link[=logistic.solution]{logistic.solution()}}
}
\concept{parent solutions}
diff --git a/man/DTx.Rd b/man/DTx.Rd
new file mode 100644
index 00000000..67dba5d6
--- /dev/null
+++ b/man/DTx.Rd
@@ -0,0 +1,26 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/endpoints.R
+\name{DTx}
+\alias{DTx}
+\title{Calculate DTx from parameters of parent degradation models}
+\usage{
+DTx(type = c("SFO", "FOMC", "DFOP", "HS", "SFORB"), parms, exact = FALSE)
+}
+\arguments{
+\item{type}{Character string specifying the degradation model}
+
+\item{parms}{Named numeric vector giving the kinetic parameters}
+
+\item{exact}{Should we used log(10)/log(2) instead of the widely used value
+of 3.32 for backcalculation of DT50 values from DT90 values?}
+}
+\description{
+Calculate DTx from parameters of parent degradation models
+}
+\examples{
+# Check what type of DT50 is given in the bixafen EFSA conclusion from 2012 on p. 42
+DTx("HS", parms = c(k1 = 0.0081, k2 = 0.00023, tb = 53))
+# We get 1200 days for the time the concentration reaches 50\%, the value of 1235
+# was likely based on more digits for the parameters. The half-life corresponding
+# to the slow phase is around 3000 days
+}
diff --git a/man/FOMC.solution.Rd b/man/FOMC.solution.Rd
index d645113c..456b406f 100644
--- a/man/FOMC.solution.Rd
+++ b/man/FOMC.solution.Rd
@@ -56,12 +56,12 @@ A new model based on spatial variability. \emph{Environmental Science and
Technology} \bold{24}, 1032-1038
}
\seealso{
-Other parent solutions:
-\code{\link{DFOP.solution}()},
-\code{\link{HS.solution}()},
-\code{\link{IORE.solution}()},
-\code{\link{SFO.solution}()},
-\code{\link{SFORB.solution}()},
-\code{\link{logistic.solution}()}
+Other parent solutions:
+\code{\link[=DFOP.solution]{DFOP.solution()}},
+\code{\link[=HS.solution]{HS.solution()}},
+\code{\link[=IORE.solution]{IORE.solution()}},
+\code{\link[=SFO.solution]{SFO.solution()}},
+\code{\link[=SFORB.solution]{SFORB.solution()}},
+\code{\link[=logistic.solution]{logistic.solution()}}
}
\concept{parent solutions}
diff --git a/man/HS.solution.Rd b/man/HS.solution.Rd
index 2940e949..9390a2e9 100644
--- a/man/HS.solution.Rd
+++ b/man/HS.solution.Rd
@@ -44,12 +44,12 @@ Version 1.1, 18 December 2014
\url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}
}
\seealso{
-Other parent solutions:
-\code{\link{DFOP.solution}()},
-\code{\link{FOMC.solution}()},
-\code{\link{IORE.solution}()},
-\code{\link{SFO.solution}()},
-\code{\link{SFORB.solution}()},
-\code{\link{logistic.solution}()}
+Other parent solutions:
+\code{\link[=DFOP.solution]{DFOP.solution()}},
+\code{\link[=FOMC.solution]{FOMC.solution()}},
+\code{\link[=IORE.solution]{IORE.solution()}},
+\code{\link[=SFO.solution]{SFO.solution()}},
+\code{\link[=SFORB.solution]{SFORB.solution()}},
+\code{\link[=logistic.solution]{logistic.solution()}}
}
\concept{parent solutions}
diff --git a/man/IORE.solution.Rd b/man/IORE.solution.Rd
index 5d0126a7..9909e87c 100644
--- a/man/IORE.solution.Rd
+++ b/man/IORE.solution.Rd
@@ -49,12 +49,12 @@ NAFTA Technical Working Group on Pesticides (not dated) Guidance
for Evaluating and Calculating Degradation Kinetics in Environmental Media
}
\seealso{
-Other parent solutions:
-\code{\link{DFOP.solution}()},
-\code{\link{FOMC.solution}()},
-\code{\link{HS.solution}()},
-\code{\link{SFO.solution}()},
-\code{\link{SFORB.solution}()},
-\code{\link{logistic.solution}()}
+Other parent solutions:
+\code{\link[=DFOP.solution]{DFOP.solution()}},
+\code{\link[=FOMC.solution]{FOMC.solution()}},
+\code{\link[=HS.solution]{HS.solution()}},
+\code{\link[=SFO.solution]{SFO.solution()}},
+\code{\link[=SFORB.solution]{SFORB.solution()}},
+\code{\link[=logistic.solution]{logistic.solution()}}
}
\concept{parent solutions}
diff --git a/man/SFO.solution.Rd b/man/SFO.solution.Rd
index c0aac237..f76837e8 100644
--- a/man/SFO.solution.Rd
+++ b/man/SFO.solution.Rd
@@ -37,12 +37,12 @@ Version 1.1, 18 December 2014
\url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}
}
\seealso{
-Other parent solutions:
-\code{\link{DFOP.solution}()},
-\code{\link{FOMC.solution}()},
-\code{\link{HS.solution}()},
-\code{\link{IORE.solution}()},
-\code{\link{SFORB.solution}()},
-\code{\link{logistic.solution}()}
+Other parent solutions:
+\code{\link[=DFOP.solution]{DFOP.solution()}},
+\code{\link[=FOMC.solution]{FOMC.solution()}},
+\code{\link[=HS.solution]{HS.solution()}},
+\code{\link[=IORE.solution]{IORE.solution()}},
+\code{\link[=SFORB.solution]{SFORB.solution()}},
+\code{\link[=logistic.solution]{logistic.solution()}}
}
\concept{parent solutions}
diff --git a/man/SFORB.solution.Rd b/man/SFORB.solution.Rd
index dc78d1f1..817e9788 100644
--- a/man/SFORB.solution.Rd
+++ b/man/SFORB.solution.Rd
@@ -47,12 +47,12 @@ Version 1.1, 18 December 2014
\url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}
}
\seealso{
-Other parent solutions:
-\code{\link{DFOP.solution}()},
-\code{\link{FOMC.solution}()},
-\code{\link{HS.solution}()},
-\code{\link{IORE.solution}()},
-\code{\link{SFO.solution}()},
-\code{\link{logistic.solution}()}
+Other parent solutions:
+\code{\link[=DFOP.solution]{DFOP.solution()}},
+\code{\link[=FOMC.solution]{FOMC.solution()}},
+\code{\link[=HS.solution]{HS.solution()}},
+\code{\link[=IORE.solution]{IORE.solution()}},
+\code{\link[=SFO.solution]{SFO.solution()}},
+\code{\link[=logistic.solution]{logistic.solution()}}
}
\concept{parent solutions}
diff --git a/man/anova.saem.mmkin.Rd b/man/anova.saem.mmkin.Rd
index 34711c41..59c6754e 100644
--- a/man/anova.saem.mmkin.Rd
+++ b/man/anova.saem.mmkin.Rd
@@ -19,7 +19,7 @@
\item{method}{Method for likelihood calculation: "is" (importance sampling),
"lin" (linear approximation), or "gq" (Gaussian quadrature). Passed
-to \link[saemix:logLik]{saemix::logLik.SaemixObject}}
+to \link[saemix:logLik.SaemixObject]{saemix::logLik.SaemixObject}}
\item{test}{Should a likelihood ratio test be performed? If TRUE,
the alternative models are tested against the first model. Should
diff --git a/man/logLik.saem.mmkin.Rd b/man/logLik.saem.mmkin.Rd
index bd0bb72e..e3a29ad2 100644
--- a/man/logLik.saem.mmkin.Rd
+++ b/man/logLik.saem.mmkin.Rd
@@ -9,9 +9,9 @@
\arguments{
\item{object}{The fitted \link{saem.mmkin} object}
-\item{\dots}{Passed to \link[saemix:logLik]{saemix::logLik.SaemixObject}}
+\item{\dots}{Passed to \link[saemix:logLik.SaemixObject]{saemix::logLik.SaemixObject}}
-\item{method}{Passed to \link[saemix:logLik]{saemix::logLik.SaemixObject}}
+\item{method}{Passed to \link[saemix:logLik.SaemixObject]{saemix::logLik.SaemixObject}}
}
\description{
logLik method for saem.mmkin objects
diff --git a/man/logistic.solution.Rd b/man/logistic.solution.Rd
index 22944098..137043d9 100644
--- a/man/logistic.solution.Rd
+++ b/man/logistic.solution.Rd
@@ -78,12 +78,12 @@ Version 1.1, 18 December 2014
\url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}
}
\seealso{
-Other parent solutions:
-\code{\link{DFOP.solution}()},
-\code{\link{FOMC.solution}()},
-\code{\link{HS.solution}()},
-\code{\link{IORE.solution}()},
-\code{\link{SFO.solution}()},
-\code{\link{SFORB.solution}()}
+Other parent solutions:
+\code{\link[=DFOP.solution]{DFOP.solution()}},
+\code{\link[=FOMC.solution]{FOMC.solution()}},
+\code{\link[=HS.solution]{HS.solution()}},
+\code{\link[=IORE.solution]{IORE.solution()}},
+\code{\link[=SFO.solution]{SFO.solution()}},
+\code{\link[=SFORB.solution]{SFORB.solution()}}
}
\concept{parent solutions}
diff --git a/man/mkinds.Rd b/man/mkinds.Rd
index a2c58300..ce87fb7f 100644
--- a/man/mkinds.Rd
+++ b/man/mkinds.Rd
@@ -27,70 +27,71 @@ print(mds)
}
\section{Public fields}{
-\if{html}{\out{<div class="r6-fields">}}
-\describe{
-\item{\code{title}}{A full title for the dataset}
+ \if{html}{\out{<div class="r6-fields">}}
+ \describe{
+ \item{\code{title}}{A full title for the dataset}
-\item{\code{sampling_times}}{The sampling times}
+ \item{\code{sampling_times}}{The sampling times}
-\item{\code{time_unit}}{The time unit}
+ \item{\code{time_unit}}{The time unit}
-\item{\code{observed}}{Names of the observed variables}
+ \item{\code{observed}}{Names of the observed variables}
-\item{\code{unit}}{The unit of the observations}
+ \item{\code{unit}}{The unit of the observations}
-\item{\code{replicates}}{The maximum number of replicates per sampling time}
+ \item{\code{replicates}}{The maximum number of replicates per sampling time}
-\item{\code{data}}{A data frame with at least the columns name, time
+ \item{\code{data}}{A data frame with at least the columns name, time
and value in order to be compatible with mkinfit}
-}
-\if{html}{\out{</div>}}
+ }
+ \if{html}{\out{</div>}}
}
\section{Methods}{
\subsection{Public methods}{
-\itemize{
-\item \href{#method-mkinds-new}{\code{mkinds$new()}}
-\item \href{#method-mkinds-clone}{\code{mkinds$clone()}}
-}
+ \itemize{
+ \item \href{#method-mkinds-initialize}{\code{mkinds$new()}}
+ \item \href{#method-mkinds-clone}{\code{mkinds$clone()}}
+ }
}
\if{html}{\out{<hr>}}
-\if{html}{\out{<a id="method-mkinds-new"></a>}}
-\if{latex}{\out{\hypertarget{method-mkinds-new}{}}}
-\subsection{Method \code{new()}}{
-Create a new mkinds object
-\subsection{Usage}{
-\if{html}{\out{<div class="r">}}\preformatted{mkinds$new(title = "", data, time_unit = NA, unit = NA)}\if{html}{\out{</div>}}
+\if{html}{\out{<a id="method-mkinds-initialize"></a>}}
+\if{latex}{\out{\hypertarget{method-mkinds-initialize}{}}}
+\subsection{\code{mkinds$new()}}{
+ Create a new mkinds object
+ \subsection{Usage}{
+ \if{html}{\out{<div class="r">}}
+ \preformatted{mkinds$new(title = "", data, time_unit = NA, unit = NA)}
+ \if{html}{\out{</div>}}
+ }
+ \subsection{Arguments}{
+ \if{html}{\out{<div class="arguments">}}
+ \describe{
+ \item{\code{title}}{The dataset title}
+ \item{\code{data}}{The data}
+ \item{\code{time_unit}}{The time unit}
+ \item{\code{unit}}{The unit of the observations}
+ }
+ \if{html}{\out{</div>}}
+ }
}
-\subsection{Arguments}{
-\if{html}{\out{<div class="arguments">}}
-\describe{
-\item{\code{title}}{The dataset title}
-
-\item{\code{data}}{The data}
-
-\item{\code{time_unit}}{The time unit}
-
-\item{\code{unit}}{The unit of the observations}
-}
-\if{html}{\out{</div>}}
-}
-}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-mkinds-clone"></a>}}
\if{latex}{\out{\hypertarget{method-mkinds-clone}{}}}
-\subsection{Method \code{clone()}}{
-The objects of this class are cloneable with this method.
-\subsection{Usage}{
-\if{html}{\out{<div class="r">}}\preformatted{mkinds$clone(deep = FALSE)}\if{html}{\out{</div>}}
+\subsection{\code{mkinds$clone()}}{
+ The objects of this class are cloneable with this method.
+ \subsection{Usage}{
+ \if{html}{\out{<div class="r">}}
+ \preformatted{mkinds$clone(deep = FALSE)}
+ \if{html}{\out{</div>}}
+ }
+ \subsection{Arguments}{
+ \if{html}{\out{<div class="arguments">}}
+ \describe{
+ \item{\code{deep}}{Whether to make a deep clone.}
+ }
+ \if{html}{\out{</div>}}
+ }
}
-\subsection{Arguments}{
-\if{html}{\out{<div class="arguments">}}
-\describe{
-\item{\code{deep}}{Whether to make a deep clone.}
-}
-\if{html}{\out{</div>}}
-}
-}
}
diff --git a/man/mkindsg.Rd b/man/mkindsg.Rd
index 3b6a9f61..cb0c9bfd 100644
--- a/man/mkindsg.Rd
+++ b/man/mkindsg.Rd
@@ -37,69 +37,70 @@ print(mdsg, verbose = TRUE, data = TRUE)
}
\section{Public fields}{
-\if{html}{\out{<div class="r6-fields">}}
-\describe{
-\item{\code{title}}{A title for the dataset group}
+ \if{html}{\out{<div class="r6-fields">}}
+ \describe{
+ \item{\code{title}}{A title for the dataset group}
-\item{\code{ds}}{A list of mkinds objects}
+ \item{\code{ds}}{A list of mkinds objects}
-\item{\code{observed_n}}{Occurrence counts of compounds in datasets}
+ \item{\code{observed_n}}{Occurrence counts of compounds in datasets}
-\item{\code{f_time_norm}}{Time normalisation factors}
+ \item{\code{f_time_norm}}{Time normalisation factors}
-\item{\code{meta}}{A data frame with a row for each dataset,
+ \item{\code{meta}}{A data frame with a row for each dataset,
containing additional information in the form
of categorical data (factors) or numerical data
(e.g. temperature, moisture,
or covariates like soil pH).}
-}
-\if{html}{\out{</div>}}
+ }
+ \if{html}{\out{</div>}}
}
\section{Methods}{
\subsection{Public methods}{
-\itemize{
-\item \href{#method-mkindsg-new}{\code{mkindsg$new()}}
-\item \href{#method-mkindsg-clone}{\code{mkindsg$clone()}}
-}
+ \itemize{
+ \item \href{#method-mkindsg-initialize}{\code{mkindsg$new()}}
+ \item \href{#method-mkindsg-clone}{\code{mkindsg$clone()}}
+ }
}
\if{html}{\out{<hr>}}
-\if{html}{\out{<a id="method-mkindsg-new"></a>}}
-\if{latex}{\out{\hypertarget{method-mkindsg-new}{}}}
-\subsection{Method \code{new()}}{
-Create a new mkindsg object
-\subsection{Usage}{
-\if{html}{\out{<div class="r">}}\preformatted{mkindsg$new(title = "", ds, f_time_norm = rep(1, length(ds)), meta)}\if{html}{\out{</div>}}
+\if{html}{\out{<a id="method-mkindsg-initialize"></a>}}
+\if{latex}{\out{\hypertarget{method-mkindsg-initialize}{}}}
+\subsection{\code{mkindsg$new()}}{
+ Create a new mkindsg object
+ \subsection{Usage}{
+ \if{html}{\out{<div class="r">}}
+ \preformatted{mkindsg$new(title = "", ds, f_time_norm = rep(1, length(ds)), meta)}
+ \if{html}{\out{</div>}}
+ }
+ \subsection{Arguments}{
+ \if{html}{\out{<div class="arguments">}}
+ \describe{
+ \item{\code{title}}{The title}
+ \item{\code{ds}}{A list of mkinds objects}
+ \item{\code{f_time_norm}}{Time normalisation factors}
+ \item{\code{meta}}{The meta data}
+ }
+ \if{html}{\out{</div>}}
+ }
}
-\subsection{Arguments}{
-\if{html}{\out{<div class="arguments">}}
-\describe{
-\item{\code{title}}{The title}
-
-\item{\code{ds}}{A list of mkinds objects}
-
-\item{\code{f_time_norm}}{Time normalisation factors}
-
-\item{\code{meta}}{The meta data}
-}
-\if{html}{\out{</div>}}
-}
-}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-mkindsg-clone"></a>}}
\if{latex}{\out{\hypertarget{method-mkindsg-clone}{}}}
-\subsection{Method \code{clone()}}{
-The objects of this class are cloneable with this method.
-\subsection{Usage}{
-\if{html}{\out{<div class="r">}}\preformatted{mkindsg$clone(deep = FALSE)}\if{html}{\out{</div>}}
+\subsection{\code{mkindsg$clone()}}{
+ The objects of this class are cloneable with this method.
+ \subsection{Usage}{
+ \if{html}{\out{<div class="r">}}
+ \preformatted{mkindsg$clone(deep = FALSE)}
+ \if{html}{\out{</div>}}
+ }
+ \subsection{Arguments}{
+ \if{html}{\out{<div class="arguments">}}
+ \describe{
+ \item{\code{deep}}{Whether to make a deep clone.}
+ }
+ \if{html}{\out{</div>}}
+ }
}
-\subsection{Arguments}{
-\if{html}{\out{<div class="arguments">}}
-\describe{
-\item{\code{deep}}{Whether to make a deep clone.}
-}
-\if{html}{\out{</div>}}
-}
-}
}
diff --git a/man/reexports.Rd b/man/reexports.Rd
index 43d27ac1..4608450f 100644
--- a/man/reexports.Rd
+++ b/man/reexports.Rd
@@ -1,5 +1,6 @@
% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/intervals.R, R/lrtest.mkinfit.R, R/nlme.mmkin.R
+% Please edit documentation in R/intervals.R, R/lrtest.mkinfit.R,
+% R/nlme.mmkin.R
\docType{import}
\name{reexports}
\alias{reexports}
@@ -13,8 +14,8 @@ These objects are imported from other packages. Follow the links
below to see their documentation.
\describe{
- \item{lmtest}{\code{\link[lmtest]{lrtest}}}
+ \item{lmtest}{\code{\link[lmtest:lrtest]{lrtest()}}}
- \item{nlme}{\code{\link[nlme]{intervals}}, \code{\link[nlme]{nlme}}}
+ \item{nlme}{\code{\link[nlme:intervals]{intervals()}}, \code{\link[nlme:nlme]{nlme()}}}
}}
diff --git a/man/saem.Rd b/man/saem.Rd
index 5a125ab6..73e42535 100644
--- a/man/saem.Rd
+++ b/man/saem.Rd
@@ -118,7 +118,7 @@ iterations}
\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{quiet}{Should we suppress the messages saemix prints at the beginning
and the end of the optimisation process?}
@@ -129,12 +129,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 41932547..1c27e941 100644
--- a/man/summary.saem.mmkin.Rd
+++ b/man/summary.saem.mmkin.Rd
@@ -42,7 +42,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/man/transform_odeparms.Rd b/man/transform_odeparms.Rd
index 3a97ff8d..09723fb8 100644
--- a/man/transform_odeparms.Rd
+++ b/man/transform_odeparms.Rd
@@ -42,7 +42,7 @@ of the estimator. The default (TRUE) is to do transformations.
The g parameter of the DFOP model is also seen as a fraction.
If a single fraction is transformed (g parameter of DFOP or only a single
target variable e.g. a single metabolite plus a pathway to sink), a
-logistic transformation is used \code{\link[stats:Logistic]{stats::qlogis()}}. In other cases, i.e. if
+logistic transformation is used \code{\link[stats:qlogis]{stats::qlogis()}}. In other cases, i.e. if
two or more formation fractions need to be transformed whose sum cannot
exceed one, the \link{ilr} transformation is used.}
diff --git a/tests/testthat/_snaps/multistart/llhist-for-dfop-sfo-fit.svg b/tests/testthat/_snaps/multistart/llhist-for-dfop-sfo-fit.svg
index 3b9d51fb..4c91a43e 100644
--- a/tests/testthat/_snaps/multistart/llhist-for-dfop-sfo-fit.svg
+++ b/tests/testthat/_snaps/multistart/llhist-for-dfop-sfo-fit.svg
@@ -27,20 +27,22 @@
<line x1='471.73' y1='502.56' x2='471.73' y2='509.76' style='stroke-width: 0.75;' />
<line x1='569.07' y1='502.56' x2='569.07' y2='509.76' style='stroke-width: 0.75;' />
<line x1='666.40' y1='502.56' x2='666.40' y2='509.76' style='stroke-width: 0.75;' />
-<text x='82.40' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='47.38px' lengthAdjust='spacingAndGlyphs'>-1149.30</text>
-<text x='179.73' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='47.38px' lengthAdjust='spacingAndGlyphs'>-1149.25</text>
-<text x='277.07' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='47.38px' lengthAdjust='spacingAndGlyphs'>-1149.20</text>
-<text x='374.40' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='47.38px' lengthAdjust='spacingAndGlyphs'>-1149.15</text>
-<text x='471.73' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='47.38px' lengthAdjust='spacingAndGlyphs'>-1149.10</text>
-<text x='569.07' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='47.38px' lengthAdjust='spacingAndGlyphs'>-1149.05</text>
-<text x='666.40' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='47.38px' lengthAdjust='spacingAndGlyphs'>-1149.00</text>
+<text x='82.40' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='40.70px' lengthAdjust='spacingAndGlyphs'>-1149.5</text>
+<text x='179.73' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='40.70px' lengthAdjust='spacingAndGlyphs'>-1149.4</text>
+<text x='277.07' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='40.70px' lengthAdjust='spacingAndGlyphs'>-1149.3</text>
+<text x='374.40' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='40.70px' lengthAdjust='spacingAndGlyphs'>-1149.2</text>
+<text x='471.73' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='40.70px' lengthAdjust='spacingAndGlyphs'>-1149.1</text>
+<text x='569.07' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='40.70px' lengthAdjust='spacingAndGlyphs'>-1149.0</text>
+<text x='666.40' y='528.48' text-anchor='middle' style='font-size: 12.00px; font-family: sans;' textLength='40.70px' lengthAdjust='spacingAndGlyphs'>-1148.9</text>
<line x1='59.04' y1='486.13' x2='59.04' y2='75.47' style='stroke-width: 0.75;' />
<line x1='59.04' y1='486.13' x2='51.84' y2='486.13' style='stroke-width: 0.75;' />
-<line x1='59.04' y1='280.80' x2='51.84' y2='280.80' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='349.24' x2='51.84' y2='349.24' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='212.36' x2='51.84' y2='212.36' style='stroke-width: 0.75;' />
<line x1='59.04' y1='75.47' x2='51.84' y2='75.47' style='stroke-width: 0.75;' />
<text x='44.64' y='490.26' text-anchor='end' style='font-size: 12.00px; font-family: sans;' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>0</text>
-<text x='44.64' y='284.93' text-anchor='end' style='font-size: 12.00px; font-family: sans;' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>1</text>
-<text x='44.64' y='79.60' text-anchor='end' style='font-size: 12.00px; font-family: sans;' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>2</text>
+<text x='44.64' y='353.37' text-anchor='end' style='font-size: 12.00px; font-family: sans;' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>1</text>
+<text x='44.64' y='216.48' text-anchor='end' style='font-size: 12.00px; font-family: sans;' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>2</text>
+<text x='44.64' y='79.60' text-anchor='end' style='font-size: 12.00px; font-family: sans;' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>3</text>
</g>
<defs>
<clipPath id='cpNTkuMDR8Njg5Ljc2fDU5LjA0fDUwMi41Ng=='>
@@ -48,13 +50,13 @@
</clipPath>
</defs>
<g clip-path='url(#cpNTkuMDR8Njg5Ljc2fDU5LjA0fDUwMi41Ng==)'>
-<rect x='82.40' y='280.80' width='97.33' height='205.33' style='stroke-width: 0.75; fill: #D3D3D3;' />
-<rect x='179.73' y='280.80' width='97.33' height='205.33' style='stroke-width: 0.75; fill: #D3D3D3;' />
-<rect x='277.07' y='280.80' width='97.33' height='205.33' style='stroke-width: 0.75; fill: #D3D3D3;' />
+<rect x='82.40' y='349.24' width='97.33' height='136.89' style='stroke-width: 0.75; fill: #D3D3D3;' />
+<rect x='179.73' y='486.13' width='97.33' height='0.00' style='stroke-width: 0.75; fill: #D3D3D3;' />
+<rect x='277.07' y='349.24' width='97.33' height='136.89' style='stroke-width: 0.75; fill: #D3D3D3;' />
<rect x='374.40' y='75.47' width='97.33' height='410.67' style='stroke-width: 0.75; fill: #D3D3D3;' />
-<rect x='471.73' y='75.47' width='97.33' height='410.67' style='stroke-width: 0.75; fill: #D3D3D3;' />
-<rect x='569.07' y='280.80' width='97.33' height='205.33' style='stroke-width: 0.75; fill: #D3D3D3;' />
-<line x1='596.13' y1='502.56' x2='596.13' y2='59.04' style='stroke-width: 0.75; stroke: #DF536B;' />
+<rect x='471.73' y='349.24' width='97.33' height='136.89' style='stroke-width: 0.75; fill: #D3D3D3;' />
+<rect x='569.07' y='212.36' width='97.33' height='273.78' style='stroke-width: 0.75; fill: #D3D3D3;' />
+<line x1='533.93' y1='502.56' x2='533.93' y2='59.04' style='stroke-width: 0.75; stroke: #DF536B;' />
<line x1='101.38' y1='95.62' x2='122.98' y2='95.62' style='stroke-width: 0.75; stroke: #DF536B;' />
<text x='133.78' y='99.75' style='font-size: 12.00px; font-family: sans;' textLength='51.35px' lengthAdjust='spacingAndGlyphs'>original fit</text>
</g>
diff --git a/tests/testthat/_snaps/multistart/mixed-model-fit-for-saem-object-with-mkin-transformations.svg b/tests/testthat/_snaps/multistart/mixed-model-fit-for-saem-object-with-mkin-transformations.svg
index 5e534dd1..381fed52 100644
--- a/tests/testthat/_snaps/multistart/mixed-model-fit-for-saem-object-with-mkin-transformations.svg
+++ b/tests/testthat/_snaps/multistart/mixed-model-fit-for-saem-object-with-mkin-transformations.svg
@@ -342,7 +342,7 @@
<rect x='327.11' y='273.27' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='327.11' y1='276.84' x2='330.67' y2='273.27' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='327.11' y1='273.27' x2='330.67' y2='276.84' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<polyline points='50.12,111.20 52.44,127.01 55.81,146.51 57.09,153.01 61.50,172.19 66.38,188.72 67.19,191.06 72.87,205.10 78.56,215.70 82.64,221.74 84.25,223.84 89.94,230.20 95.63,235.28 101.32,239.42 107.01,242.85 112.70,245.76 115.16,246.89 118.39,248.27 124.08,250.46 129.77,252.41 135.46,254.15 141.15,255.73 146.83,257.16 152.52,258.48 158.21,259.69 163.90,260.81 169.59,261.85 175.28,262.81 180.97,263.70 186.66,264.53 189.50,264.92 192.35,265.30 198.04,266.02 203.73,266.69 209.42,267.31 215.11,267.90 220.79,268.44 226.48,268.95 232.17,269.42 237.86,269.86 243.55,270.28 249.24,270.66 254.93,271.02 259.20,271.27 260.62,271.35 266.31,271.67 272.00,271.96 277.69,272.23 283.38,272.48 289.07,272.72 294.76,272.94 300.44,273.15 306.13,273.34 311.82,273.52 317.51,273.69 323.20,273.85 328.89,273.99 ' style='stroke-width: 0.75; stroke: #9E9E9E; stroke-dasharray: 4.00,4.00;' />
+<polyline points='50.12,111.20 52.44,127.01 55.81,146.51 57.09,153.01 61.50,172.19 66.38,188.72 67.19,191.06 72.87,205.10 78.56,215.70 82.64,221.74 84.25,223.84 89.94,230.20 95.63,235.28 101.32,239.42 107.01,242.85 112.70,245.76 115.16,246.89 118.39,248.27 124.08,250.46 129.77,252.41 135.46,254.15 141.15,255.73 146.83,257.16 152.52,258.48 158.21,259.69 163.90,260.81 169.59,261.84 175.28,262.80 180.97,263.70 186.66,264.53 189.50,264.92 192.35,265.30 198.04,266.02 203.73,266.69 209.42,267.31 215.11,267.90 220.79,268.44 226.48,268.95 232.17,269.42 237.86,269.86 243.55,270.27 249.24,270.66 254.93,271.02 259.20,271.27 260.62,271.35 266.31,271.67 272.00,271.96 277.69,272.23 283.38,272.48 289.07,272.72 294.76,272.94 300.44,273.15 306.13,273.34 311.82,273.52 317.51,273.69 323.20,273.85 328.89,273.99 ' style='stroke-width: 0.75; stroke: #9E9E9E; stroke-dasharray: 4.00,4.00;' />
<line x1='48.34' y1='112.38' x2='51.90' y2='108.82' style='stroke-width: 0.75;' />
<line x1='48.34' y1='108.82' x2='51.90' y2='112.38' style='stroke-width: 0.75;' />
<line x1='47.60' y1='110.60' x2='52.64' y2='110.60' style='stroke-width: 0.75;' />
@@ -933,51 +933,51 @@
<rect x='660.37' y='164.80' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='660.37' y1='168.36' x2='663.94' y2='164.80' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='660.37' y1='164.80' x2='663.94' y2='168.36' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='660.37' y='139.74' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='660.37' y1='143.30' x2='663.94' y2='139.74' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='660.37' y1='139.74' x2='663.94' y2='143.30' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='660.37' y='139.73' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='660.37' y1='143.30' x2='663.94' y2='139.73' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='660.37' y1='139.73' x2='663.94' y2='143.30' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='616.40' y='137.54' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='616.40' y1='141.11' x2='619.97' y2='137.54' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='616.40' y1='137.54' x2='619.97' y2='141.11' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='616.40' y1='141.10' x2='619.97' y2='137.54' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='616.40' y1='137.54' x2='619.97' y2='141.10' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='616.40' y='186.64' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='616.40' y1='190.21' x2='619.97' y2='186.64' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='616.40' y1='186.64' x2='619.97' y2='190.21' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='556.01' y='235.04' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='556.01' y1='238.60' x2='559.58' y2='235.04' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='556.01' y1='235.04' x2='559.58' y2='238.60' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='556.01' y='180.68' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='556.01' y1='184.24' x2='559.58' y2='180.68' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='556.01' y1='180.68' x2='559.58' y2='184.24' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='616.40' y1='190.20' x2='619.97' y2='186.64' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='616.40' y1='186.64' x2='619.97' y2='190.20' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='556.01' y='235.03' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='556.01' y1='238.60' x2='559.58' y2='235.03' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='556.01' y1='235.03' x2='559.58' y2='238.60' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='556.01' y='180.67' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='556.01' y1='184.24' x2='559.58' y2='180.67' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='556.01' y1='180.67' x2='559.58' y2='184.24' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='500.17' y='173.95' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='500.17' y1='177.51' x2='503.73' y2='173.95' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='500.17' y1='173.95' x2='503.73' y2='177.51' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='500.17' y='175.57' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='500.17' y1='179.14' x2='503.73' y2='175.57' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='500.17' y1='175.57' x2='503.73' y2='179.14' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='457.63' y='196.74' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='457.63' y1='200.31' x2='461.20' y2='196.74' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='457.63' y1='196.74' x2='461.20' y2='200.31' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='457.63' y='208.83' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='457.63' y1='212.39' x2='461.20' y2='208.83' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='457.63' y1='208.83' x2='461.20' y2='212.39' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='427.14' y='202.49' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='427.14' y1='206.05' x2='430.71' y2='202.49' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='427.14' y1='202.49' x2='430.71' y2='206.05' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='427.14' y='148.41' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='427.14' y1='151.97' x2='430.71' y2='148.41' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='427.14' y1='148.41' x2='430.71' y2='151.97' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='416.40' y='137.68' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='416.40' y1='141.24' x2='419.97' y2='137.68' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='416.40' y1='137.68' x2='419.97' y2='141.24' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='416.40' y='211.52' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='416.40' y1='215.08' x2='419.97' y2='211.52' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='416.40' y1='211.52' x2='419.97' y2='215.08' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='411.80' y='152.26' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='411.80' y1='155.83' x2='415.36' y2='152.26' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='411.80' y1='152.26' x2='415.36' y2='155.83' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='411.80' y='203.14' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='411.80' y1='206.71' x2='415.36' y2='203.14' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='411.80' y1='203.14' x2='415.36' y2='206.71' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='457.63' y='196.76' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='457.63' y1='200.32' x2='461.20' y2='196.76' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='457.63' y1='196.76' x2='461.20' y2='200.32' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='457.63' y='208.84' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='457.63' y1='212.41' x2='461.20' y2='208.84' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='457.63' y1='208.84' x2='461.20' y2='212.41' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='427.15' y='202.51' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='427.15' y1='206.07' x2='430.71' y2='202.51' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='427.15' y1='202.51' x2='430.71' y2='206.07' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='427.15' y='148.43' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='427.15' y1='151.99' x2='430.71' y2='148.43' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='427.15' y1='148.43' x2='430.71' y2='151.99' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='416.40' y='137.69' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='416.40' y1='141.25' x2='419.97' y2='137.69' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='416.40' y1='137.69' x2='419.97' y2='141.25' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='416.40' y='211.53' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='416.40' y1='215.09' x2='419.97' y2='211.53' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='416.40' y1='211.53' x2='419.97' y2='215.09' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='411.80' y='152.27' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='411.80' y1='155.83' x2='415.37' y2='152.27' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='411.80' y1='152.27' x2='415.37' y2='155.83' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='411.80' y='203.15' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='411.80' y1='206.71' x2='415.37' y2='203.15' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='411.80' y1='203.15' x2='415.37' y2='206.71' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='687.10' y1='182.56' x2='690.66' y2='178.99' style='stroke-width: 0.75;' />
<line x1='687.10' y1='178.99' x2='690.66' y2='182.56' style='stroke-width: 0.75;' />
<line x1='686.36' y1='180.78' x2='691.40' y2='180.78' style='stroke-width: 0.75;' />
@@ -1585,7 +1585,7 @@
<rect x='327.11' y='422.78' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='327.11' y1='426.35' x2='330.67' y2='422.78' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='327.11' y1='422.78' x2='330.67' y2='426.35' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<polyline points='50.12,519.93 52.44,501.23 55.81,478.37 57.09,470.82 61.50,448.81 66.38,430.31 67.19,427.74 72.87,412.69 78.56,401.93 82.64,396.17 84.25,394.25 89.94,388.78 95.63,384.91 101.32,382.21 107.01,380.38 112.70,379.20 115.16,378.85 118.39,378.51 124.08,378.20 129.77,378.19 135.46,378.42 141.15,378.84 146.83,379.42 152.52,380.13 158.21,380.95 163.90,381.87 169.59,382.87 175.28,383.95 180.97,385.08 186.66,386.27 189.50,386.89 192.35,387.52 198.04,388.80 203.73,390.12 209.42,391.47 215.11,392.85 220.79,394.26 226.48,395.68 232.17,397.12 237.86,398.58 243.55,400.04 249.24,401.52 254.93,403.00 259.20,404.12 260.62,404.49 266.31,405.98 272.00,407.47 277.69,408.96 283.38,410.44 289.07,411.92 294.76,413.40 300.44,414.87 306.13,416.34 311.82,417.79 317.51,419.24 323.20,420.67 328.89,422.10 ' style='stroke-width: 0.75; stroke: #9E9E9E; stroke-dasharray: 4.00,4.00;' />
+<polyline points='50.12,519.93 52.44,501.23 55.81,478.37 57.09,470.82 61.50,448.81 66.38,430.31 67.19,427.74 72.87,412.69 78.56,401.93 82.64,396.17 84.25,394.25 89.94,388.78 95.63,384.91 101.32,382.21 107.01,380.38 112.70,379.20 115.16,378.85 118.39,378.51 124.08,378.20 129.77,378.19 135.46,378.42 141.15,378.84 146.83,379.42 152.52,380.13 158.21,380.95 163.90,381.87 169.59,382.87 175.28,383.94 180.97,385.08 186.66,386.27 189.50,386.89 192.35,387.51 198.04,388.80 203.73,390.12 209.42,391.47 215.11,392.85 220.79,394.25 226.48,395.68 232.17,397.12 237.86,398.57 243.55,400.04 249.24,401.52 254.93,403.00 259.20,404.11 260.62,404.48 266.31,405.97 272.00,407.46 277.69,408.95 283.38,410.44 289.07,411.92 294.76,413.40 300.44,414.87 306.13,416.33 311.82,417.78 317.51,419.23 323.20,420.66 328.89,422.09 ' style='stroke-width: 0.75; stroke: #9E9E9E; stroke-dasharray: 4.00,4.00;' />
<line x1='50.66' y1='500.33' x2='54.22' y2='496.77' style='stroke-width: 0.75;' />
<line x1='50.66' y1='496.77' x2='54.22' y2='500.33' style='stroke-width: 0.75;' />
<line x1='49.92' y1='498.55' x2='54.96' y2='498.55' style='stroke-width: 0.75;' />
@@ -2099,7 +2099,7 @@
<polygon points='489.66,418.35 492.06,414.19 487.26,414.19 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='524.33,484.33 526.73,480.17 521.93,480.17 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='524.33,429.68 526.73,425.52 521.93,425.52 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
-<polygon points='548.15,432.73 550.55,428.57 545.75,428.57 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
+<polygon points='548.15,432.73 550.55,428.58 545.75,428.58 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='548.15,399.05 550.55,394.90 545.75,394.90 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='553.97,493.76 556.37,489.60 551.57,489.60 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='553.97,417.07 556.37,412.92 551.57,412.92 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
@@ -2107,54 +2107,54 @@
<polygon points='545.50,423.57 547.90,419.41 543.10,419.41 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='532.05,397.89 534.45,393.73 529.65,393.73 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='532.05,431.54 534.45,427.38 529.65,427.38 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
-<rect x='436.91' y='449.24' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='436.91' y1='452.81' x2='440.48' y2='449.24' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='436.91' y1='449.24' x2='440.48' y2='452.81' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='436.91' y='449.25' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='436.91' y1='452.81' x2='440.48' y2='449.25' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='436.91' y1='449.25' x2='440.48' y2='452.81' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='436.91' y='395.33' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='436.91' y1='398.89' x2='440.48' y2='395.33' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='436.91' y1='395.33' x2='440.48' y2='398.89' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='483.39' y='440.28' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='483.39' y1='443.84' x2='486.95' y2='440.28' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='483.39' y1='440.28' x2='486.95' y2='443.84' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='483.39' y='434.43' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='483.39' y1='438.00' x2='486.95' y2='434.43' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='483.39' y1='434.43' x2='486.95' y2='438.00' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='483.39' y='434.44' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='483.39' y1='438.00' x2='486.95' y2='434.44' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='483.39' y1='434.44' x2='486.95' y2='438.00' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='545.30' y='410.97' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='545.30' y1='414.53' x2='548.86' y2='410.97' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='545.30' y1='410.97' x2='548.86' y2='414.53' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='545.30' y1='414.54' x2='548.86' y2='410.97' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='545.30' y1='410.97' x2='548.86' y2='414.54' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='545.30' y='424.50' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='545.30' y1='428.07' x2='548.86' y2='424.50' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='545.30' y1='424.50' x2='548.86' y2='428.07' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='597.46' y='409.32' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='597.46' y1='412.88' x2='601.03' y2='409.32' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='597.46' y1='409.32' x2='601.03' y2='412.88' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='597.46' y='409.31' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='597.46' y1='412.88' x2='601.03' y2='409.31' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='597.46' y1='409.31' x2='601.03' y2='412.88' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='597.46' y='440.38' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='597.46' y1='443.94' x2='601.03' y2='440.38' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='597.46' y1='440.38' x2='601.03' y2='443.94' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='623.93' y='419.73' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='623.93' y1='423.29' x2='627.49' y2='419.73' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='623.93' y1='419.73' x2='627.49' y2='423.29' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='623.93' y='419.72' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='623.93' y1='423.29' x2='627.49' y2='419.72' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='623.93' y1='419.72' x2='627.49' y2='423.29' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='623.93' y='394.87' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='623.93' y1='398.44' x2='627.49' y2='394.87' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='623.93' y1='394.87' x2='627.49' y2='398.44' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='611.64' y='444.16' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='611.64' y1='447.73' x2='615.21' y2='444.16' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='611.64' y1='444.16' x2='615.21' y2='447.73' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='611.64' y='430.30' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='611.64' y1='433.87' x2='615.21' y2='430.30' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='611.64' y1='430.30' x2='615.21' y2='433.87' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='585.32' y='419.02' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='585.32' y1='422.58' x2='588.88' y2='419.02' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='585.32' y1='419.02' x2='588.88' y2='422.58' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='585.32' y='413.27' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='585.32' y1='416.84' x2='588.88' y2='413.27' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='585.32' y1='413.27' x2='588.88' y2='416.84' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='557.84' y='407.74' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='557.84' y1='411.31' x2='561.41' y2='407.74' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='557.84' y1='407.74' x2='561.41' y2='411.31' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<rect x='557.84' y='435.57' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='557.84' y1='439.13' x2='561.41' y2='435.57' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='557.84' y1='435.57' x2='561.41' y2='439.13' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='623.93' y1='398.43' x2='627.49' y2='394.87' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='623.93' y1='394.87' x2='627.49' y2='398.43' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='611.65' y='444.17' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='611.65' y1='447.74' x2='615.21' y2='444.17' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='611.65' y1='444.17' x2='615.21' y2='447.74' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='611.65' y='430.31' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='611.65' y1='433.88' x2='615.21' y2='430.31' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='611.65' y1='430.31' x2='615.21' y2='433.88' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='585.32' y='419.04' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='585.32' y1='422.60' x2='588.89' y2='419.04' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='585.32' y1='419.04' x2='588.89' y2='422.60' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='585.32' y='413.29' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='585.32' y1='416.86' x2='588.89' y2='413.29' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='585.32' y1='413.29' x2='588.89' y2='416.86' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='557.85' y='407.78' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='557.85' y1='411.34' x2='561.42' y2='407.78' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='557.85' y1='407.78' x2='561.42' y2='411.34' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<rect x='557.85' y='435.60' width='3.56' height='3.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='557.85' y1='439.16' x2='561.42' y2='435.60' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='557.85' y1='435.60' x2='561.42' y2='439.16' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='451.73' y1='480.11' x2='455.29' y2='476.55' style='stroke-width: 0.75;' />
<line x1='451.73' y1='476.55' x2='455.29' y2='480.11' style='stroke-width: 0.75;' />
<line x1='450.99' y1='478.33' x2='456.03' y2='478.33' style='stroke-width: 0.75;' />
diff --git a/tests/testthat/_snaps/multistart/parplot-for-dfop-sfo-fit.svg b/tests/testthat/_snaps/multistart/parplot-for-dfop-sfo-fit.svg
index c733f84f..9be7ee5f 100644
--- a/tests/testthat/_snaps/multistart/parplot-for-dfop-sfo-fit.svg
+++ b/tests/testthat/_snaps/multistart/parplot-for-dfop-sfo-fit.svg
@@ -25,104 +25,104 @@
</clipPath>
</defs>
<g clip-path='url(#cpNTkuMDR8Njg5Ljc2fDMwLjI0fDQzMC41Ng==)'>
-<polygon points='86.57,230.39 119.94,230.39 119.94,229.91 86.57,229.91 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='86.57' y1='230.31' x2='119.94' y2='230.31' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='103.26' y1='230.40' x2='103.26' y2='230.39' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='103.26' y1='229.58' x2='103.26' y2='229.91' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='94.91' y1='230.40' x2='111.60' y2='230.40' style='stroke-width: 0.75;' />
-<line x1='94.91' y1='229.58' x2='111.60' y2='229.58' style='stroke-width: 0.75;' />
-<polygon points='86.57,230.39 119.94,230.39 119.94,229.91 86.57,229.91 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='128.29,232.31 161.66,232.31 161.66,231.10 128.29,231.10 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='128.29' y1='232.04' x2='161.66' y2='232.04' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='144.97' y1='232.35' x2='144.97' y2='232.31' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='144.97' y1='230.40' x2='144.97' y2='231.10' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='136.63' y1='232.35' x2='153.31' y2='232.35' style='stroke-width: 0.75;' />
-<line x1='136.63' y1='230.40' x2='153.31' y2='230.40' style='stroke-width: 0.75;' />
-<polygon points='128.29,232.31 161.66,232.31 161.66,231.10 128.29,231.10 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='170.00,231.51 203.37,231.51 203.37,230.67 170.00,230.67 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='170.00' y1='230.98' x2='203.37' y2='230.98' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='186.69' y1='232.01' x2='186.69' y2='231.51' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='186.69' y1='230.40' x2='186.69' y2='230.67' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='178.34' y1='232.01' x2='195.03' y2='232.01' style='stroke-width: 0.75;' />
-<line x1='178.34' y1='230.40' x2='195.03' y2='230.40' style='stroke-width: 0.75;' />
-<polygon points='170.00,231.51 203.37,231.51 203.37,230.67 170.00,230.67 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='211.71,231.11 245.09,231.11 245.09,229.68 211.71,229.68 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='211.71' y1='230.71' x2='245.09' y2='230.71' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='228.40' y1='231.20' x2='228.40' y2='231.11' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='228.40' y1='228.97' x2='228.40' y2='229.68' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='220.06' y1='231.20' x2='236.74' y2='231.20' style='stroke-width: 0.75;' />
-<line x1='220.06' y1='228.97' x2='236.74' y2='228.97' style='stroke-width: 0.75;' />
-<polygon points='211.71,231.11 245.09,231.11 245.09,229.68 211.71,229.68 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='253.43,231.37 286.80,231.37 286.80,230.25 253.43,230.25 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='253.43' y1='230.85' x2='286.80' y2='230.85' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='270.11' y1='231.42' x2='270.11' y2='231.37' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='270.11' y1='230.10' x2='270.11' y2='230.25' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='261.77' y1='231.42' x2='278.46' y2='231.42' style='stroke-width: 0.75;' />
-<line x1='261.77' y1='230.10' x2='278.46' y2='230.10' style='stroke-width: 0.75;' />
-<polygon points='253.43,231.37 286.80,231.37 286.80,230.25 253.43,230.25 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='295.14,230.73 328.51,230.73 328.51,228.30 295.14,228.30 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='295.14' y1='229.68' x2='328.51' y2='229.68' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='311.83' y1='231.07' x2='311.83' y2='230.73' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='311.83' y1='227.65' x2='311.83' y2='228.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='303.49' y1='231.07' x2='320.17' y2='231.07' style='stroke-width: 0.75;' />
-<line x1='303.49' y1='227.65' x2='320.17' y2='227.65' style='stroke-width: 0.75;' />
-<polygon points='295.14,230.73 328.51,230.73 328.51,228.30 295.14,228.30 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='336.86,231.87 370.23,231.87 370.23,230.47 336.86,230.47 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='336.86' y1='231.08' x2='370.23' y2='231.08' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='353.54' y1='232.11' x2='353.54' y2='231.87' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='353.54' y1='230.40' x2='353.54' y2='230.47' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='345.20' y1='232.11' x2='361.89' y2='232.11' style='stroke-width: 0.75;' />
-<line x1='345.20' y1='230.40' x2='361.89' y2='230.40' style='stroke-width: 0.75;' />
-<polygon points='336.86,231.87 370.23,231.87 370.23,230.47 336.86,230.47 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='378.57,230.55 411.94,230.55 411.94,230.41 378.57,230.41 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='378.57' y1='230.43' x2='411.94' y2='230.43' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='395.26' y1='230.66' x2='395.26' y2='230.55' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='395.26' y1='230.40' x2='395.26' y2='230.41' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='386.91' y1='230.66' x2='403.60' y2='230.66' style='stroke-width: 0.75;' />
-<line x1='386.91' y1='230.40' x2='403.60' y2='230.40' style='stroke-width: 0.75;' />
-<polygon points='378.57,230.55 411.94,230.55 411.94,230.41 378.57,230.41 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='420.29,346.11 453.66,346.11 453.66,-152.79 420.29,-152.79 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='420.29' y1='13.60' x2='453.66' y2='13.60' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='436.97' y1='554.61' x2='436.97' y2='346.11' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='436.97' y1='-193.66' x2='436.97' y2='-152.79' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='428.63' y1='554.61' x2='445.31' y2='554.61' style='stroke-width: 0.75;' />
-<line x1='428.63' y1='-193.66' x2='445.31' y2='-193.66' style='stroke-width: 0.75;' />
-<polygon points='420.29,346.11 453.66,346.11 453.66,-152.79 420.29,-152.79 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='462.00,228.86 495.37,228.86 495.37,224.73 462.00,224.73 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='462.00' y1='227.05' x2='495.37' y2='227.05' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='478.69' y1='230.40' x2='478.69' y2='228.86' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='478.69' y1='222.69' x2='478.69' y2='224.73' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='470.34' y1='230.40' x2='487.03' y2='230.40' style='stroke-width: 0.75;' />
-<line x1='470.34' y1='222.69' x2='487.03' y2='222.69' style='stroke-width: 0.75;' />
-<polygon points='462.00,228.86 495.37,228.86 495.37,224.73 462.00,224.73 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='503.71,232.09 537.09,232.09 537.09,230.98 503.71,230.98 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='503.71' y1='231.78' x2='537.09' y2='231.78' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='520.40' y1='232.19' x2='520.40' y2='232.09' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='520.40' y1='230.40' x2='520.40' y2='230.98' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='512.06' y1='232.19' x2='528.74' y2='232.19' style='stroke-width: 0.75;' />
+<polygon points='86.57,230.54 119.94,230.54 119.94,230.24 86.57,230.24 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='86.57' y1='230.41' x2='119.94' y2='230.41' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='103.26' y1='230.67' x2='103.26' y2='230.54' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='103.26' y1='230.08' x2='103.26' y2='230.24' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='94.91' y1='230.67' x2='111.60' y2='230.67' style='stroke-width: 0.75;' />
+<line x1='94.91' y1='230.08' x2='111.60' y2='230.08' style='stroke-width: 0.75;' />
+<polygon points='86.57,230.54 119.94,230.54 119.94,230.24 86.57,230.24 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='128.29,231.05 161.66,231.05 161.66,229.65 128.29,229.65 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='128.29' y1='230.26' x2='161.66' y2='230.26' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='144.97' y1='231.70' x2='144.97' y2='231.05' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='144.97' y1='229.18' x2='144.97' y2='229.65' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='136.63' y1='231.70' x2='153.31' y2='231.70' style='stroke-width: 0.75;' />
+<line x1='136.63' y1='229.18' x2='153.31' y2='229.18' style='stroke-width: 0.75;' />
+<polygon points='128.29,231.05 161.66,231.05 161.66,229.65 128.29,229.65 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='170.00,230.77 203.37,230.77 203.37,229.87 170.00,229.87 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='170.00' y1='230.14' x2='203.37' y2='230.14' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='186.69' y1='231.13' x2='186.69' y2='230.77' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='186.69' y1='229.85' x2='186.69' y2='229.87' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='178.34' y1='231.13' x2='195.03' y2='231.13' style='stroke-width: 0.75;' />
+<line x1='178.34' y1='229.85' x2='195.03' y2='229.85' style='stroke-width: 0.75;' />
+<polygon points='170.00,230.77 203.37,230.77 203.37,229.87 170.00,229.87 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='211.71,232.84 245.09,232.84 245.09,230.55 211.71,230.55 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='211.71' y1='231.55' x2='245.09' y2='231.55' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='228.40' y1='233.29' x2='228.40' y2='232.84' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='228.40' y1='230.40' x2='228.40' y2='230.55' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='220.06' y1='233.29' x2='236.74' y2='233.29' style='stroke-width: 0.75;' />
+<line x1='220.06' y1='230.40' x2='236.74' y2='230.40' style='stroke-width: 0.75;' />
+<polygon points='211.71,232.84 245.09,232.84 245.09,230.55 211.71,230.55 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='253.43,231.32 286.80,231.32 286.80,230.12 253.43,230.12 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='253.43' y1='230.83' x2='286.80' y2='230.83' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='270.11' y1='231.37' x2='270.11' y2='231.32' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='270.11' y1='229.84' x2='270.11' y2='230.12' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='261.77' y1='231.37' x2='278.46' y2='231.37' style='stroke-width: 0.75;' />
+<line x1='261.77' y1='229.84' x2='278.46' y2='229.84' style='stroke-width: 0.75;' />
+<polygon points='253.43,231.32 286.80,231.32 286.80,230.12 253.43,230.12 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='295.14,230.81 328.51,230.81 328.51,228.06 295.14,228.06 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='295.14' y1='229.37' x2='328.51' y2='229.37' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='311.83' y1='231.22' x2='311.83' y2='230.81' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='311.83' y1='227.78' x2='311.83' y2='228.06' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='303.49' y1='231.22' x2='320.17' y2='231.22' style='stroke-width: 0.75;' />
+<line x1='303.49' y1='227.78' x2='320.17' y2='227.78' style='stroke-width: 0.75;' />
+<polygon points='295.14,230.81 328.51,230.81 328.51,228.06 295.14,228.06 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='336.86,231.12 370.23,231.12 370.23,229.88 336.86,229.88 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='336.86' y1='230.18' x2='370.23' y2='230.18' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='353.54' y1='231.83' x2='353.54' y2='231.12' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='353.54' y1='229.79' x2='353.54' y2='229.88' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='345.20' y1='231.83' x2='361.89' y2='231.83' style='stroke-width: 0.75;' />
+<line x1='345.20' y1='229.79' x2='361.89' y2='229.79' style='stroke-width: 0.75;' />
+<polygon points='336.86,231.12 370.23,231.12 370.23,229.88 336.86,229.88 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='378.57,230.43 411.94,230.43 411.94,230.25 378.57,230.25 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='378.57' y1='230.34' x2='411.94' y2='230.34' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='395.26' y1='230.46' x2='395.26' y2='230.43' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='395.26' y1='230.23' x2='395.26' y2='230.25' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='386.91' y1='230.46' x2='403.60' y2='230.46' style='stroke-width: 0.75;' />
+<line x1='386.91' y1='230.23' x2='403.60' y2='230.23' style='stroke-width: 0.75;' />
+<polygon points='378.57,230.43 411.94,230.43 411.94,230.25 378.57,230.25 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='420.29,351.23 453.66,351.23 453.66,17.36 420.29,17.36 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='420.29' y1='188.57' x2='453.66' y2='188.57' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='436.97' y1='577.69' x2='436.97' y2='351.23' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='436.97' y1='-71.94' x2='436.97' y2='17.36' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='428.63' y1='577.69' x2='445.31' y2='577.69' style='stroke-width: 0.75;' />
+<line x1='428.63' y1='-71.94' x2='445.31' y2='-71.94' style='stroke-width: 0.75;' />
+<polygon points='420.29,351.23 453.66,351.23 453.66,17.36 420.29,17.36 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='462.00,233.57 495.37,233.57 495.37,228.34 462.00,228.34 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='462.00' y1='230.39' x2='495.37' y2='230.39' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='478.69' y1='236.77' x2='478.69' y2='233.57' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='478.69' y1='226.33' x2='478.69' y2='228.34' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='470.34' y1='236.77' x2='487.03' y2='236.77' style='stroke-width: 0.75;' />
+<line x1='470.34' y1='226.33' x2='487.03' y2='226.33' style='stroke-width: 0.75;' />
+<polygon points='462.00,233.57 495.37,233.57 495.37,228.34 462.00,228.34 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='503.71,230.28 537.09,230.28 537.09,227.99 503.71,227.99 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='503.71' y1='229.36' x2='537.09' y2='229.36' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='520.40' y1='230.40' x2='520.40' y2='230.28' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='520.40' y1='227.41' x2='520.40' y2='227.99' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
<line x1='512.06' y1='230.40' x2='528.74' y2='230.40' style='stroke-width: 0.75;' />
-<polygon points='503.71,232.09 537.09,232.09 537.09,230.98 503.71,230.98 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='545.43,231.58 578.80,231.58 578.80,227.39 545.43,227.39 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='545.43' y1='229.57' x2='578.80' y2='229.57' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='562.11' y1='232.77' x2='562.11' y2='231.58' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='562.11' y1='226.04' x2='562.11' y2='227.39' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='553.77' y1='232.77' x2='570.46' y2='232.77' style='stroke-width: 0.75;' />
-<line x1='553.77' y1='226.04' x2='570.46' y2='226.04' style='stroke-width: 0.75;' />
-<polygon points='545.43,231.58 578.80,231.58 578.80,227.39 545.43,227.39 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='587.14,231.83 620.51,231.83 620.51,229.20 587.14,229.20 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='587.14' y1='230.91' x2='620.51' y2='230.91' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='603.83' y1='232.25' x2='603.83' y2='231.83' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='603.83' y1='228.00' x2='603.83' y2='229.20' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='595.49' y1='232.25' x2='612.17' y2='232.25' style='stroke-width: 0.75;' />
-<line x1='595.49' y1='228.00' x2='612.17' y2='228.00' style='stroke-width: 0.75;' />
-<polygon points='587.14,231.83 620.51,231.83 620.51,229.20 587.14,229.20 ' style='stroke-width: 0.75; fill: none;' />
-<polygon points='628.86,244.99 662.23,244.99 662.23,231.51 628.86,231.51 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
-<line x1='628.86' y1='238.60' x2='662.23' y2='238.60' style='stroke-width: 2.25; stroke-linecap: butt;' />
-<line x1='645.54' y1='245.26' x2='645.54' y2='244.99' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='645.54' y1='230.40' x2='645.54' y2='231.51' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
-<line x1='637.20' y1='245.26' x2='653.89' y2='245.26' style='stroke-width: 0.75;' />
+<line x1='512.06' y1='227.41' x2='528.74' y2='227.41' style='stroke-width: 0.75;' />
+<polygon points='503.71,230.28 537.09,230.28 537.09,227.99 503.71,227.99 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='545.43,230.66 578.80,230.66 578.80,225.54 545.43,225.54 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='545.43' y1='228.79' x2='578.80' y2='228.79' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='562.11' y1='230.92' x2='562.11' y2='230.66' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='562.11' y1='223.91' x2='562.11' y2='225.54' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='553.77' y1='230.92' x2='570.46' y2='230.92' style='stroke-width: 0.75;' />
+<line x1='553.77' y1='223.91' x2='570.46' y2='223.91' style='stroke-width: 0.75;' />
+<polygon points='545.43,230.66 578.80,230.66 578.80,225.54 545.43,225.54 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='587.14,229.41 620.51,229.41 620.51,226.13 587.14,226.13 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='587.14' y1='227.35' x2='620.51' y2='227.35' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='603.83' y1='230.40' x2='603.83' y2='229.41' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='603.83' y1='225.96' x2='603.83' y2='226.13' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='595.49' y1='230.40' x2='612.17' y2='230.40' style='stroke-width: 0.75;' />
+<line x1='595.49' y1='225.96' x2='612.17' y2='225.96' style='stroke-width: 0.75;' />
+<polygon points='587.14,229.41 620.51,229.41 620.51,226.13 587.14,226.13 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='628.86,259.66 662.23,259.66 662.23,238.02 628.86,238.02 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='628.86' y1='252.29' x2='662.23' y2='252.29' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='645.54' y1='260.44' x2='645.54' y2='259.66' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='645.54' y1='230.40' x2='645.54' y2='238.02' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='637.20' y1='260.44' x2='653.89' y2='260.44' style='stroke-width: 0.75;' />
<line x1='637.20' y1='230.40' x2='653.89' y2='230.40' style='stroke-width: 0.75;' />
-<polygon points='628.86,244.99 662.23,244.99 662.23,231.51 628.86,231.51 ' style='stroke-width: 0.75; fill: none;' />
+<polygon points='628.86,259.66 662.23,259.66 662.23,238.02 628.86,238.02 ' style='stroke-width: 0.75; fill: none;' />
</g>
<g clip-path='url(#cpMC4wMHw3MjAuMDB8MC4wMHw1NzYuMDA=)'>
<line x1='103.26' y1='430.56' x2='645.54' y2='430.56' style='stroke-width: 0.75;' />
@@ -167,28 +167,28 @@
<polygon points='59.04,430.56 689.76,430.56 689.76,30.24 59.04,30.24 ' style='stroke-width: 0.75; fill: none;' />
</g>
<g clip-path='url(#cpNTkuMDR8Njg5Ljc2fDMwLjI0fDQzMC41Ng==)'>
-<circle cx='103.26' cy='229.36' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
-<circle cx='144.97' cy='235.49' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
-<circle cx='186.69' cy='232.58' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
-<circle cx='228.40' cy='220.07' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
-<circle cx='270.11' cy='232.81' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
-<circle cx='311.83' cy='234.57' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
-<circle cx='353.54' cy='210.04' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
-<circle cx='395.26' cy='-561.33' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
-<circle cx='103.26' cy='230.22' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='144.97' cy='231.43' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='186.69' cy='230.96' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='228.40' cy='233.01' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='270.11' cy='232.26' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='311.83' cy='227.14' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='353.54' cy='230.35' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='395.26' cy='230.86' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='436.97' cy='-68.67' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='478.69' cy='232.30' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='520.40' cy='230.90' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='562.11' cy='227.27' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='603.83' cy='231.42' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
-<circle cx='645.54' cy='245.02' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='103.26' cy='229.66' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='144.97' cy='233.35' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='186.69' cy='231.46' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='228.40' cy='221.80' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='270.11' cy='232.54' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='311.83' cy='234.72' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='353.54' cy='209.77' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='395.26' cy='-561.52' r='8.10' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='103.26' cy='230.52' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='144.97' cy='229.28' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='186.69' cy='229.83' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='228.40' cy='234.74' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='270.11' cy='232.00' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='311.83' cy='227.29' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='353.54' cy='230.08' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='395.26' cy='230.66' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='436.97' cy='-45.59' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='478.69' cy='235.94' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='520.40' cy='228.86' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='562.11' cy='225.42' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='603.83' cy='227.59' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='645.54' cy='258.26' r='5.40' style='stroke-width: 0.75; stroke: #DF536B;' />
<line x1='59.04' y1='230.40' x2='689.76' y2='230.40' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
<line x1='93.82' y1='396.14' x2='115.42' y2='396.14' style='stroke-width: 0.75;' />
<circle cx='104.62' cy='367.34' r='2.70' style='stroke-width: 0.75; stroke: #61D04F;' />
diff --git a/tests/testthat/_snaps/plot/mixed-model-fit-for-nlme-object.svg b/tests/testthat/_snaps/plot/mixed-model-fit-for-nlme-object.svg
index c94012ce..76fed0dc 100644
--- a/tests/testthat/_snaps/plot/mixed-model-fit-for-nlme-object.svg
+++ b/tests/testthat/_snaps/plot/mixed-model-fit-for-nlme-object.svg
@@ -813,7 +813,7 @@
<polygon points='495.59,338.28 498.61,343.51 492.57,343.51 ' style='stroke-width: 0.75; stroke: #61D04F; fill: none;' />
<polygon points='495.59,278.47 498.61,283.70 492.57,283.70 ' style='stroke-width: 0.75; stroke: #61D04F; fill: none;' />
<polygon points='468.31,316.26 471.32,321.49 465.29,321.49 ' style='stroke-width: 0.75; stroke: #61D04F; fill: none;' />
-<polygon points='468.31,426.24 471.32,431.46 465.29,431.46 ' style='stroke-width: 0.75; stroke: #61D04F; fill: none;' />
+<polygon points='468.31,426.24 471.32,431.47 465.29,431.47 ' style='stroke-width: 0.75; stroke: #61D04F; fill: none;' />
<polygon points='451.62,304.02 454.64,309.24 448.60,309.24 ' style='stroke-width: 0.75; stroke: #61D04F; fill: none;' />
<polygon points='451.62,287.86 454.64,293.09 448.60,293.09 ' style='stroke-width: 0.75; stroke: #61D04F; fill: none;' />
<line x1='679.89' y1='246.30' x2='686.23' y2='246.30' style='stroke-width: 0.75; stroke: #2297E6;' />
@@ -833,7 +833,7 @@
<line x1='626.22' y1='377.79' x2='632.56' y2='377.79' style='stroke-width: 0.75; stroke: #2297E6;' />
<line x1='629.39' y1='380.96' x2='629.39' y2='374.62' style='stroke-width: 0.75; stroke: #2297E6;' />
<line x1='586.08' y1='296.19' x2='592.42' y2='296.19' style='stroke-width: 0.75; stroke: #2297E6;' />
-<line x1='589.25' y1='299.36' x2='589.25' y2='293.03' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='589.25' y1='299.36' x2='589.25' y2='293.02' style='stroke-width: 0.75; stroke: #2297E6;' />
<line x1='586.08' y1='337.84' x2='592.42' y2='337.84' style='stroke-width: 0.75; stroke: #2297E6;' />
<line x1='589.25' y1='341.01' x2='589.25' y2='334.67' style='stroke-width: 0.75; stroke: #2297E6;' />
<line x1='531.93' y1='352.31' x2='538.27' y2='352.31' style='stroke-width: 0.75; stroke: #2297E6;' />
@@ -900,7 +900,7 @@
<polygon points='566.02,339.01 569.19,335.84 572.36,339.01 569.19,342.18 ' style='stroke-width: 0.75; stroke: #CD0BBC; fill: none;' />
<polygon points='522.33,381.82 525.49,378.65 528.66,381.82 525.49,384.99 ' style='stroke-width: 0.75; stroke: #CD0BBC; fill: none;' />
<polygon points='522.33,245.14 525.49,241.97 528.66,245.14 525.49,248.31 ' style='stroke-width: 0.75; stroke: #CD0BBC; fill: none;' />
-<polygon points='476.30,377.33 479.47,374.16 482.64,377.33 479.47,380.50 ' style='stroke-width: 0.75; stroke: #CD0BBC; fill: none;' />
+<polygon points='476.30,377.33 479.47,374.17 482.64,377.33 479.47,380.50 ' style='stroke-width: 0.75; stroke: #CD0BBC; fill: none;' />
<polygon points='476.30,307.60 479.47,304.43 482.64,307.60 479.47,310.77 ' style='stroke-width: 0.75; stroke: #CD0BBC; fill: none;' />
<polygon points='453.11,292.28 456.28,289.11 459.45,292.28 456.28,295.45 ' style='stroke-width: 0.75; stroke: #CD0BBC; fill: none;' />
<polygon points='453.11,318.06 456.28,314.89 459.45,318.06 456.28,321.23 ' style='stroke-width: 0.75; stroke: #CD0BBC; fill: none;' />
@@ -921,7 +921,7 @@
<polygon points='503.90,402.64 506.92,397.41 500.88,397.41 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='503.90,291.61 506.92,286.38 500.88,286.38 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='477.83,272.00 480.84,266.77 474.81,266.77 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
-<polygon points='477.83,263.66 480.84,258.44 474.81,258.44 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
+<polygon points='477.83,263.66 480.84,258.43 474.81,258.43 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='460.40,410.08 463.42,404.85 457.38,404.85 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<polygon points='460.40,330.79 463.42,325.57 457.38,325.57 ' style='stroke-width: 0.75; stroke: #F5C710; fill: none;' />
<rect x='677.35' y='382.94' width='4.48' height='4.48' style='stroke-width: 0.75; stroke: #9E9E9E;' />
@@ -964,8 +964,8 @@
<line x1='449.96' y1='214.56' x2='454.44' y2='210.07' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='449.96' y1='210.07' x2='454.44' y2='214.56' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='449.96' y='386.83' width='4.48' height='4.48' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='449.96' y1='391.31' x2='454.44' y2='386.83' style='stroke-width: 0.75; stroke: #9E9E9E;' />
-<line x1='449.96' y1='386.83' x2='454.44' y2='391.31' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='449.96' y1='391.32' x2='454.44' y2='386.83' style='stroke-width: 0.75; stroke: #9E9E9E;' />
+<line x1='449.96' y1='386.83' x2='454.44' y2='391.32' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<rect x='432.50' y='414.10' width='4.48' height='4.48' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='432.50' y1='418.58' x2='436.98' y2='414.10' style='stroke-width: 0.75; stroke: #9E9E9E;' />
<line x1='432.50' y1='414.10' x2='436.98' y2='418.58' style='stroke-width: 0.75; stroke: #9E9E9E;' />
@@ -1243,8 +1243,8 @@
<line x1='457.81' y1='329.91' x2='457.81' y2='325.43' style='stroke-width: 0.75; stroke: #28E2E5;' />
<rect x='455.57' y='325.43' width='4.48' height='4.48' style='stroke-width: 0.75; stroke: #28E2E5;' />
<line x1='440.28' y1='265.76' x2='444.76' y2='265.76' style='stroke-width: 0.75; stroke: #28E2E5;' />
-<line x1='442.52' y1='268.00' x2='442.52' y2='263.52' style='stroke-width: 0.75; stroke: #28E2E5;' />
-<rect x='440.28' y='263.52' width='4.48' height='4.48' style='stroke-width: 0.75; stroke: #28E2E5;' />
+<line x1='442.52' y1='268.00' x2='442.52' y2='263.51' style='stroke-width: 0.75; stroke: #28E2E5;' />
+<rect x='440.28' y='263.51' width='4.48' height='4.48' style='stroke-width: 0.75; stroke: #28E2E5;' />
<line x1='440.28' y1='335.48' x2='444.76' y2='335.48' style='stroke-width: 0.75; stroke: #28E2E5;' />
<line x1='442.52' y1='337.73' x2='442.52' y2='333.24' style='stroke-width: 0.75; stroke: #28E2E5;' />
<rect x='440.28' y='333.24' width='4.48' height='4.48' style='stroke-width: 0.75; stroke: #28E2E5;' />
@@ -1291,8 +1291,8 @@
<line x1='471.24' y1='273.93' x2='475.72' y2='269.45' style='stroke-width: 0.75; stroke: #CD0BBC;' />
<line x1='471.24' y1='269.45' x2='475.72' y2='273.93' style='stroke-width: 0.75; stroke: #CD0BBC;' />
<circle cx='449.95' cy='261.17' r='2.24' style='stroke-width: 0.75; stroke: #CD0BBC;' />
-<line x1='447.71' y1='263.42' x2='452.19' y2='258.93' style='stroke-width: 0.75; stroke: #CD0BBC;' />
-<line x1='447.71' y1='258.93' x2='452.19' y2='263.42' style='stroke-width: 0.75; stroke: #CD0BBC;' />
+<line x1='447.71' y1='263.41' x2='452.19' y2='258.93' style='stroke-width: 0.75; stroke: #CD0BBC;' />
+<line x1='447.71' y1='258.93' x2='452.19' y2='263.41' style='stroke-width: 0.75; stroke: #CD0BBC;' />
<circle cx='449.95' cy='397.82' r='2.24' style='stroke-width: 0.75; stroke: #CD0BBC;' />
<line x1='447.71' y1='400.06' x2='452.19' y2='395.57' style='stroke-width: 0.75; stroke: #CD0BBC;' />
<line x1='447.71' y1='395.57' x2='452.19' y2='400.06' style='stroke-width: 0.75; stroke: #CD0BBC;' />
diff --git a/tests/testthat/print_dfop_saem_1.txt b/tests/testthat/print_dfop_saem_1.txt
index 3a1f1667..3d036357 100644
--- a/tests/testthat/print_dfop_saem_1.txt
+++ b/tests/testthat/print_dfop_saem_1.txt
@@ -9,15 +9,15 @@ Data:
Likelihood computed by importance sampling
AIC BIC logLik
- 1409 1415 -696
+ 1409 1414 -696
Fitted parameters:
estimate lower upper
-parent_0 99.96 98.82 101.11
-log_k1 -2.71 -2.94 -2.49
+parent_0 99.97 98.83 101.12
+log_k1 -2.71 -2.94 -2.48
log_k2 -4.14 -4.26 -4.01
g_qlogis -0.36 -0.54 -0.17
-a.1 0.93 0.69 1.17
+a.1 0.92 0.68 1.17
b.1 0.05 0.04 0.05
-SD.log_k1 0.37 0.23 0.51
+SD.log_k1 0.37 0.23 0.52
SD.log_k2 0.23 0.14 0.31
diff --git a/tests/testthat/setup_script.R b/tests/testthat/setup_script.R
index b2147fbe..111daa30 100644
--- a/tests/testthat/setup_script.R
+++ b/tests/testthat/setup_script.R
@@ -4,7 +4,12 @@ require(testthat)
# Per default (on my box where I set NOT_CRAN in .Rprofile) use all cores minus one
# Otherwise (CRAN check systems) use the allowed maximum of two cores
if (identical(Sys.getenv("NOT_CRAN"), "true")) {
- n_cores <- parallel::detectCores() - 1
+ # We cannot use all course if on the Agroscope cluster, if not we use all but one
+ if (grepl("agsad.admin.ch", Sys.getenv("http_proxy"))) {
+ n_cores = 16
+ } else {
+ n_cores <- parallel::detectCores() - 1
+ }
} else {
n_cores <- 2
}
diff --git a/tests/testthat/test_deSolve.R b/tests/testthat/test_deSolve.R
index 3d15de35..c7acdc43 100644
--- a/tests/testthat/test_deSolve.R
+++ b/tests/testthat/test_deSolve.R
@@ -13,7 +13,8 @@ test_that("Solutions with deSolve work if we have no observations at time zero",
solution_type = "deSolve", quiet = TRUE)
expect_equal(
parms(f_sfo_sfo_nozero),
- parms(f_sfo_sfo_nozero_deSolve)
+ parms(f_sfo_sfo_nozero_deSolve),
+ tolerance = 1e-5
)
})
diff --git a/tests/testthat/test_endpoints.R b/tests/testthat/test_endpoints.R
new file mode 100644
index 00000000..284e1379
--- /dev/null
+++ b/tests/testthat/test_endpoints.R
@@ -0,0 +1,49 @@
+context("DTx calculations")
+
+test_that("The DTx function gives the same results as the endpoints function", {
+ # We silently assume that the calculations in the endpoint function are correct
+
+ SFO_fit <- fits[["SFO", "FOCUS_C"]]
+ SFO_distimes <- endpoints(SFO_fit)$distimes
+ SFO_DTx <- DTx("SFO", c(k = parms(SFO_fit)[["k_parent"]]))
+
+ expect_equal(
+ as.numeric(SFO_distimes),
+ as.numeric(SFO_DTx)
+ )
+
+ FOMC_fit <- fits[["FOMC", "FOCUS_C"]]
+ FOMC_distimes <- endpoints(FOMC_fit)$distimes
+ FOMC_DTx <- DTx("FOMC", c(
+ alpha = parms(FOMC_fit)[["alpha"]],
+ beta = parms(FOMC_fit)[["beta"]]), exact = TRUE)
+
+ expect_equal(
+ as.numeric(FOMC_distimes),
+ as.numeric(FOMC_DTx)
+ )
+
+ DFOP_fit <- fits[["DFOP", "FOCUS_C"]]
+ DFOP_distimes <- endpoints(DFOP_fit)$distimes
+ DFOP_DTx <- DTx("DFOP", c(
+ k1 = parms(DFOP_fit)[["k1"]],
+ k2 = parms(DFOP_fit)[["k2"]],
+ g = parms(DFOP_fit)[["g"]]), exact = TRUE)
+
+ expect_equal(
+ as.numeric(DFOP_distimes),
+ as.numeric(DFOP_DTx)
+ )
+
+ HS_fit <- fits[["HS", "FOCUS_C"]]
+ HS_distimes <- endpoints(HS_fit)$distimes
+ HS_DTx <- DTx("HS", c(
+ k1 = parms(HS_fit)[["k1"]],
+ k2 = parms(HS_fit)[["k2"]],
+ tb = parms(HS_fit)[["tb"]]), exact = TRUE)
+
+ expect_equal(
+ as.numeric(HS_distimes),
+ as.numeric(HS_DTx)
+ )
+})

Contact - Imprint