From 0b36fb666b84321814eabbc1a25687ee70d789e6 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Thu, 21 Apr 2016 17:34:38 +0200 Subject: Avoid unnecessary stop in edge case, improve warnings mkinfit: Do not error out in cases where the fit converges, but the Jacobian for the untransformed model cost can not be estimated. Give a warning instead and return NA for the t-test results. summary.mkinfit: Give a warning message when the covariance matrix can not be obtained. A test has been added to containing such an edge case to check that the warnings are correctly issued and the fit does not terminate. --- tests/testthat/test_FOMC_ill-defined.R | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 tests/testthat/test_FOMC_ill-defined.R (limited to 'tests') diff --git a/tests/testthat/test_FOMC_ill-defined.R b/tests/testthat/test_FOMC_ill-defined.R new file mode 100644 index 00000000..b036a0af --- /dev/null +++ b/tests/testthat/test_FOMC_ill-defined.R @@ -0,0 +1,42 @@ +# Copyright (C) 2016 Johannes Ranke +# Contact: jranke@uni-bremen.de + +# This file is part of the R package mkin + +# mkin is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. + +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. + +# You should have received a copy of the GNU General Public License along with +# this program. If not, see + +context("Fitting the FOMC model with large parameter correlation") + +# Dataset that I ran across during my work and for which the calculation of the +# Jacobian failed. Data were slightly fuzzed. +FOMC_test <- data.frame( + name = "test_compound", + time = c(0, 14, 31, 59, 91), + value = c(45.8, 28.0, 28.5, 35.1, 35.6)) + +test_that("Fitting with large parameter correlation gives warnings", { + + # When fitting from the maximum, the Port algorithm does not converge (with + # default settings) + expect_warning( + fit.FOMC.Port <- mkinfit("FOMC", FOMC_test, method.modFit = "Port"), + "Optimisation by method Port did not converge") + + # When we use Levenberg-Marquardt, we get a problem estimating the Jacobian + # for the untransformed model + expect_warning( + fit.FOMC.Marq <- mkinfit("FOMC", FOMC_test, method.modFit = "Marq"), + "Calculation of the Jacobian failed for the cost function of the untransformed model") + +}) -- cgit v1.2.1