aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--DESCRIPTION2
-rw-r--r--NEWS.md4
-rw-r--r--R/dimethenamid_2018.R10
-rw-r--r--R/mean_degparms.R8
-rw-r--r--R/plot.mixed.mmkin.R18
-rw-r--r--man/dimethenamid_2018.Rd10
-rw-r--r--man/mean_degparms.Rd12
-rw-r--r--man/plot.mixed.mmkin.Rd4
8 files changed, 53 insertions, 15 deletions
diff --git a/DESCRIPTION b/DESCRIPTION
index db40d511..73547d2c 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -2,7 +2,7 @@ Package: mkin
Type: Package
Title: Kinetic Evaluation of Chemical Degradation Data
Version: 1.1.0
-Date: 2022-03-07
+Date: 2022-04-09
Authors@R: c(
person("Johannes", "Ranke", role = c("aut", "cre", "cph"),
email = "johannes.ranke@jrwb.de",
diff --git a/NEWS.md b/NEWS.md
index 4a3b352d..77eec332 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -6,6 +6,10 @@
- 'saem()': Slightly improve speed in the case that no analytical solution for saemix is implemented, activate a test of the respective code
+- 'mean_degparms': New argument 'default_log_parms' that makes it possible to supply a surrogate value (default) for log parameters that fail the t-test
+
+- 'plot.mixed.mmkin': Pass the frame argument also to residual plots, take the 'default_log_parms' argument for 'mean_degparms' used for constructing approximate population curves, plot population curve last to avoid that it is covered by data
+
# mkin 1.1.0 (2022-03-14)
## Mixed-effects models
diff --git a/R/dimethenamid_2018.R b/R/dimethenamid_2018.R
index 2fdd1981..00ed9073 100644
--- a/R/dimethenamid_2018.R
+++ b/R/dimethenamid_2018.R
@@ -49,12 +49,16 @@
#' # look more plausible, but the truth is likely to be in
#' # between these variants
#' plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = TRUE)
-#' # Therefore we use nonlinear mixed-effects models
+#' # We can also specify a default value for the failing
+#' # log parameters, to mimic FOCUS guidance
+#' plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = TRUE,
+#' default_log_parms = log(2)/1000)
+#' # As these attempts are not satisfying, we use nonlinear mixed-effects models
#' # f_dmta_nlme_tc <- nlme(dmta_sfo_sfo3p_tc)
#' # nlme reaches maxIter = 50 without convergence
#' f_dmta_saem_tc <- saem(dmta_sfo_sfo3p_tc)
#' # I am commenting out the convergence plot as rendering them
-#' # with pkgdown fails (at least without further tweaks to the
+#' # with pkgdown fails (at least without further tweaks to the
#' # graphics device used)
#' #saemix::plot(f_dmta_saem_tc$so, plot.type = "convergence")
#' summary(f_dmta_saem_tc)
@@ -65,6 +69,6 @@
#' # covariance.model = diag(c(0, rep(1, 7))))
#' # saemix::plot(f_dmta_saem_tc_2$so, plot.type = "convergence")
#' # This does not perform better judged by AIC and BIC
-#' saemix::compare.saemix(f_dmta_saem_tc$so, f_dmta_saem_tc_2$so)
+#' # saemix::compare.saemix(f_dmta_saem_tc$so, f_dmta_saem_tc_2$so)
#' }
"dimethenamid_2018"
diff --git a/R/mean_degparms.R b/R/mean_degparms.R
index ec20c068..fdcc5c00 100644
--- a/R/mean_degparms.R
+++ b/R/mean_degparms.R
@@ -11,8 +11,12 @@
#' rate constants) pass the t-test for significant difference from zero.
#' @param conf.level Possibility to adjust the required confidence level
#' for parameter that are tested if requested by 'test_log_parms'.
+#' @param default_log_parms If set to a numeric value, this is used
+#' as a default value for the tested log parameters that failed the
+#' t-test.
#' @export
-mean_degparms <- function(object, random = FALSE, test_log_parms = FALSE, conf.level = 0.6)
+mean_degparms <- function(object, random = FALSE, test_log_parms = FALSE, conf.level = 0.6,
+ default_log_parms = NA)
{
if (nrow(object) > 1) stop("Only row objects allowed")
parm_mat_trans <- sapply(object, parms, transformed = TRUE)
@@ -33,7 +37,7 @@ mean_degparms <- function(object, random = FALSE, test_log_parms = FALSE, conf.l
parm_mat_trans_OK <- parm_mat_trans
for (trans_parm in log_parm_trans_names) {
parm_mat_trans_OK[trans_parm, ] <- ifelse(t_test_back_OK[trans_parm, ],
- parm_mat_trans[trans_parm, ], NA)
+ parm_mat_trans[trans_parm, ], default_log_parms)
}
} else {
parm_mat_trans_OK <- parm_mat_trans
diff --git a/R/plot.mixed.mmkin.R b/R/plot.mixed.mmkin.R
index 2903a05c..3a444253 100644
--- a/R/plot.mixed.mmkin.R
+++ b/R/plot.mixed.mmkin.R
@@ -14,6 +14,8 @@ utils::globalVariables("ds")
#' [mixed.mmkin] object
#' @param conf.level Passed to [mean_degparms] in the case of an
#' [mixed.mmkin] object
+#' @param default_log_parms Passed to [mean_degparms] in the case of an
+#' [mixed.mmkin] object
#' @param rel.height.legend The relative height of the legend shown on top
#' @param rel.height.bottom The relative height of the bottom plot row
#' @param ymax Vector of maximum y axis values
@@ -69,6 +71,7 @@ plot.mixed.mmkin <- function(x,
pred_over = NULL,
test_log_parms = FALSE,
conf.level = 0.6,
+ default_log_parms = NA,
ymax = "auto", maxabs = "auto",
ncol.legend = ifelse(length(i) <= 3, length(i) + 1, ifelse(length(i) <= 8, 3, 4)),
nrow.legend = ceiling((length(i) + 1) / ncol.legend),
@@ -87,7 +90,8 @@ plot.mixed.mmkin <- function(x,
backtransform = TRUE
if (identical(class(x), "mixed.mmkin")) {
- degparms_pop <- mean_degparms(x$mmkin, test_log_parms = test_log_parms, conf.level = conf.level)
+ degparms_pop <- mean_degparms(x$mmkin, test_log_parms = test_log_parms,
+ conf.level = conf.level, default_log_parms = default_log_parms)
degparms_tmp <- parms(x$mmkin, transformed = TRUE)
degparms_i <- as.data.frame(t(degparms_tmp[setdiff(rownames(degparms_tmp), names(fit_1$errparms)), ]))
@@ -247,8 +251,7 @@ plot.mixed.mmkin <- function(x,
par(mar = c(3.0, 4.1, 1.1, 2.1))
}
- plot(pred_pop$time, pred_pop[[obs_var]],
- type = "l", lwd = 2, lty = lty_pop,
+ plot(0, type = "n",
xlim = xlim, ylim = ylim_row,
xlab = xlab, ylab = paste("Residues", obs_var), frame = frame)
@@ -267,6 +270,9 @@ plot.mixed.mmkin <- function(x,
col = col_ds[ds_i], lty = lty_ds[ds_i])
}
+ lines(pred_pop$time, pred_pop[[obs_var]],
+ type = "l", lwd = 2, lty = lty_pop)
+
if (identical(maxabs, "auto")) {
maxabs = max(abs(observed_row$residual), na.rm = TRUE)
}
@@ -274,7 +280,8 @@ plot.mixed.mmkin <- function(x,
if (identical(resplot, "time")) {
plot(0, type = "n", xlim = xlim, xlab = "Time",
ylim = c(-1.2 * maxabs, 1.2 * maxabs),
- ylab = if (standardized) "Standardized residual" else "Residual")
+ ylab = if (standardized) "Standardized residual" else "Residual",
+ frame = frame)
abline(h = 0, lty = 2)
@@ -289,7 +296,8 @@ plot.mixed.mmkin <- function(x,
xlim = c(0, max(pred_ds[[obs_var]])),
xlab = "Predicted",
ylim = c(-1.2 * maxabs, 1.2 * maxabs),
- ylab = if (standardized) "Standardized residual" else "Residual")
+ ylab = if (standardized) "Standardized residual" else "Residual",
+ frame = frame)
abline(h = 0, lty = 2)
diff --git a/man/dimethenamid_2018.Rd b/man/dimethenamid_2018.Rd
index 6c28ab7b..20d2dc1b 100644
--- a/man/dimethenamid_2018.Rd
+++ b/man/dimethenamid_2018.Rd
@@ -62,12 +62,16 @@ plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = FALSE)
# look more plausible, but the truth is likely to be in
# between these variants
plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = TRUE)
-# Therefore we use nonlinear mixed-effects models
+# We can also specify a default value for the failing
+# log parameters, to mimic FOCUS guidance
+plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = TRUE,
+ default_log_parms = log(2)/1000)
+# As these attempts are not satisfying, we use nonlinear mixed-effects models
# f_dmta_nlme_tc <- nlme(dmta_sfo_sfo3p_tc)
# nlme reaches maxIter = 50 without convergence
f_dmta_saem_tc <- saem(dmta_sfo_sfo3p_tc)
# I am commenting out the convergence plot as rendering them
-# with pkgdown fails (at least without further tweaks to the
+# with pkgdown fails (at least without further tweaks to the
# graphics device used)
#saemix::plot(f_dmta_saem_tc$so, plot.type = "convergence")
summary(f_dmta_saem_tc)
@@ -78,7 +82,7 @@ summary(f_dmta_saem_tc)
# covariance.model = diag(c(0, rep(1, 7))))
# saemix::plot(f_dmta_saem_tc_2$so, plot.type = "convergence")
# This does not perform better judged by AIC and BIC
-saemix::compare.saemix(f_dmta_saem_tc$so, f_dmta_saem_tc_2$so)
+# saemix::compare.saemix(f_dmta_saem_tc$so, f_dmta_saem_tc_2$so)
}
}
\keyword{datasets}
diff --git a/man/mean_degparms.Rd b/man/mean_degparms.Rd
index 5e2b4b0f..bc986d35 100644
--- a/man/mean_degparms.Rd
+++ b/man/mean_degparms.Rd
@@ -4,7 +4,13 @@
\alias{mean_degparms}
\title{Calculate mean degradation parameters for an mmkin row object}
\usage{
-mean_degparms(object, random = FALSE, test_log_parms = FALSE, conf.level = 0.6)
+mean_degparms(
+ object,
+ random = FALSE,
+ test_log_parms = FALSE,
+ conf.level = 0.6,
+ default_log_parms = NA
+)
}
\arguments{
\item{object}{An mmkin row object containing several fits of the same model to different datasets}
@@ -17,6 +23,10 @@ rate constants) pass the t-test for significant difference from zero.}
\item{conf.level}{Possibility to adjust the required confidence level
for parameter that are tested if requested by 'test_log_parms'.}
+
+\item{default_log_parms}{If set to a numeric value, this is used
+as a default value for the tested log parameters that failed the
+t-test.}
}
\value{
If random is FALSE (default), a named vector containing mean values
diff --git a/man/plot.mixed.mmkin.Rd b/man/plot.mixed.mmkin.Rd
index d87ca22c..33b4a67f 100644
--- a/man/plot.mixed.mmkin.Rd
+++ b/man/plot.mixed.mmkin.Rd
@@ -15,6 +15,7 @@
pred_over = NULL,
test_log_parms = FALSE,
conf.level = 0.6,
+ default_log_parms = NA,
ymax = "auto",
maxabs = "auto",
ncol.legend = ifelse(length(i) <= 3, length(i) + 1, ifelse(length(i) <= 8, 3, 4)),
@@ -57,6 +58,9 @@ from \link{mkinpredict} with a compatible \link{mkinmod}.}
\item{conf.level}{Passed to \link{mean_degparms} in the case of an
\link{mixed.mmkin} object}
+\item{default_log_parms}{Passed to \link{mean_degparms} in the case of an
+\link{mixed.mmkin} object}
+
\item{ymax}{Vector of maximum y axis values}
\item{maxabs}{Maximum absolute value of the residuals. This is used for the

Contact - Imprint