From 5b28712ad11470293e7ab6746718ab3edcfe966b Mon Sep 17 00:00:00 2001 From: jranke Date: Tue, 3 Jul 2012 15:46:14 +0000 Subject: - Add rtol argument in order to increase the precision of deSolve based predictions for complex models - Improve default values for atol and set rtol default to 1e-10 git-svn-id: svn+ssh://svn.r-forge.r-project.org/svnroot/kinfit/pkg/mkin@49 edb9625f-4e0d-4859-8d74-9fd3b1da38cb --- DESCRIPTION | 4 ++-- R/mkinfit.R | 7 ++++--- R/mkinplot.R | 2 +- R/mkinpredict.R | 3 ++- man/mkinfit.Rd | 10 +++++++--- man/mkinpredict.Rd | 29 +++++++++++++++++------------ 6 files changed, 33 insertions(+), 22 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 46dda226..62c98813 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,8 +2,8 @@ Package: mkin Type: Package Title: Routines for fitting kinetic models with one or more state variables to chemical degradation data -Version: 0.9-05 -Date: 2012-06-28 +Version: 0.9-06 +Date: 2012-07-03 Author: Johannes Ranke, Katrin Lindenberger, René Lehmann Maintainer: Johannes Ranke Description: Calculation routines based on the FOCUS Kinetics Report (2006). diff --git a/R/mkinfit.R b/R/mkinfit.R index 3100b30f..02155966 100644 --- a/R/mkinfit.R +++ b/R/mkinfit.R @@ -29,7 +29,7 @@ mkinfit <- function(mkinmod, observed, solution_type = "auto", plot = FALSE, quiet = FALSE, err = NULL, weight = "none", scaleVar = FALSE, - atol = 1e-6, n.outtimes = 100, + atol = 1e-8, rtol = 1e-10, n.outtimes = 100, trace_parms = FALSE, ...) { @@ -130,7 +130,7 @@ mkinfit <- function(mkinmod, observed, parms <- backtransform_odeparms(odeparms, mod_vars) # Solve the system with current transformed parameter values - out <- mkinpredict(mkinmod, parms, odeini, outtimes, solution_type = solution_type, ...) + out <- mkinpredict(mkinmod, parms, odeini, outtimes, solution_type = solution_type, atol = atol, rtol = rtol, ...) assign("out_predicted", out, inherits=TRUE) @@ -146,7 +146,7 @@ mkinfit <- function(mkinmod, observed, outtimes_plot = seq(min(observed$time), max(observed$time), length.out=100) out_plot <- mkinpredict(mkinmod, parms, odeini, outtimes_plot, - solution_type = solution_type, ...) + solution_type = solution_type, atol = atol, rtol = rtol, ...) plot(0, type="n", xlim = range(observed$time), ylim = range(observed$value, na.rm=TRUE), @@ -198,6 +198,7 @@ mkinfit <- function(mkinmod, observed, data$variable <- ordered(data$variable, levels = obs_vars) fit$data <- data[order(data$variable, data$time), ] fit$atol <- atol + fit$rtol <- rtol fit$parms.all <- parms.all # Return all backtransformed parameters for summary fit$odeparms.final <- parms.all[mkinmod$parms] # Return ode parameters for further fitting fit$date <- date() diff --git a/R/mkinplot.R b/R/mkinplot.R index 7641d262..546c5061 100644 --- a/R/mkinplot.R +++ b/R/mkinplot.R @@ -18,7 +18,7 @@ mkinplot <- function(fit, xlab = "Time", ylab = "Observed", xlim = range(fit$dat odeparms <- parms.all[odenames] out <- mkinpredict(fit$mkinmod, odeparms, odeini, outtimes, - solution_type = solution_type, ...) + solution_type = solution_type, atol = fit$atol, rtol = fit$rtol, ...) # Plot the data and model output plot(0, type="n", diff --git a/R/mkinpredict.R b/R/mkinpredict.R index 493c5781..5170dc6b 100644 --- a/R/mkinpredict.R +++ b/R/mkinpredict.R @@ -18,7 +18,7 @@ # You should have received a copy of the GNU General Public License along with # this program. If not, see -mkinpredict <- function(mkinmod, odeparms, odeini, outtimes, solution_type = "deSolve", map_output = TRUE, atol = 1e-6, ...) { +mkinpredict <- function(mkinmod, odeparms, odeini, outtimes, solution_type = "deSolve", map_output = TRUE, atol = 1e-8, rtol = 1e-10, ...) { # Get the names of the state variables in the model mod_vars <- names(mkinmod$diffs) @@ -92,6 +92,7 @@ mkinpredict <- function(mkinmod, odeparms, odeini, outtimes, solution_type = "de func = mkindiff, parms = odeparms, atol = atol, + rtol = rtol, ... ) } diff --git a/man/mkinfit.Rd b/man/mkinfit.Rd index 5f70dae9..181da4bd 100644 --- a/man/mkinfit.Rd +++ b/man/mkinfit.Rd @@ -17,7 +17,7 @@ mkinfit(mkinmod, observed, solution_type = "auto", plot = FALSE, quiet = FALSE, err = NULL, weight = "none", scaleVar = FALSE, - atol = 1e-6, n.outtimes, + atol = 1e-8, rtol = 1e-10, n.outtimes = 100, trace_parms, ...) } \arguments{ @@ -84,8 +84,12 @@ mkinfit(mkinmod, observed, to the number of observations. } \item{atol}{ - Absolute error tolerance, passed to \code{\link{ode}}. Default is 1e-6 as in - \code{\link{lsoda}}. + Absolute error tolerance, passed to \code{\link{ode}}. Default is 1e-8, + lower than in \code{\link{lsoda}}. + } + \item{rtol}{ + Absolute error tolerance, passed to \code{\link{ode}}. Default is 1e-10, + much lower than in \code{\link{lsoda}}. } \item{n.outtimes}{ The length of the dataseries that is produced by the model prediction diff --git a/man/mkinpredict.Rd b/man/mkinpredict.Rd index d2931443..a8ece47f 100644 --- a/man/mkinpredict.Rd +++ b/man/mkinpredict.Rd @@ -9,42 +9,47 @@ initial values for the state variables. } \usage{ -mkinpredict(mkinmod, odeparms, odeini, outtimes, solution_type = "deSolve", map_output = TRUE, atol = 1e-06, ...) + mkinpredict(mkinmod, odeparms, odeini, outtimes, solution_type = "deSolve", map_output = TRUE, + atol = 1e-08, rtol = 1e-10, ...) } \arguments{ \item{mkinmod}{ A kinetic model as produced by \code{\link{mkinmod}}. -} + } \item{odeparms}{ A numeric vector specifying the parameters used in the kinetic model, which is generally defined as a set of ordinary differential equations. -} + } \item{odeini}{ A numeric vectory containing the initial values of the state variables of the model. Note that the state variables can differ from the observed variables, for example in the case of the SFORB model. -} + } \item{outtimes}{ A numeric vector specifying the time points for which model predictions should be generated. -} + } \item{solution_type}{ The method that should be used for producing the predictions. This should generally be "analytical" if there is only one observed variable, and usually "deSolve" in the case of several observed variables. The third possibility "eigen" is faster but produces results that the author believes to be less accurate. -} + } \item{map_output}{ Boolean to specify if the output should list values for the observed variables (default) or for all state variables (if set to FALSE). -} + } \item{atol}{ - Absolute error tolerance, passed to \code{\link{ode}}. Default is 1e-6 as in - \code{\link{lsoda}}. -} + Absolute error tolerance, passed to \code{\link{ode}}. Default is 1e-8, + lower than in \code{\link{lsoda}}. + } + \item{rtol}{ + Absolute error tolerance, passed to \code{\link{ode}}. Default is 1e-10, + much lower than in \code{\link{lsoda}}. + } \item{\dots}{ - Further arguments passed to the ode solver in case such a solver is used. -} + Further arguments passed to the ode solver in case such a solver is used. + } } \value{ A matrix in the same format as the output of \code{\link{ode}}. -- cgit v1.2.1