From 0517ca6179d3c4bc35cc7edcfd5de3d98aa4fd64 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Wed, 9 Dec 2020 08:40:49 +0100 Subject: Some more tests --- R/summary.saem.mmkin.R | 4 +- tests/testthat/print_saem_biphasic_s.txt | 37 +++++++++ tests/testthat/summary_DFOP_FOCUS_C.txt | 125 ++++++++++++++--------------- tests/testthat/summary_saem_biphasic_s.txt | 77 ++++++++++++++++++ tests/testthat/test_f_time_norm.R | 6 ++ tests/testthat/test_saem.R | 16 +++- 6 files changed, 196 insertions(+), 69 deletions(-) create mode 100644 tests/testthat/print_saem_biphasic_s.txt create mode 100644 tests/testthat/summary_saem_biphasic_s.txt create mode 100644 tests/testthat/test_f_time_norm.R diff --git a/R/summary.saem.mmkin.R b/R/summary.saem.mmkin.R index 27c2ce6c..3f50c42d 100644 --- a/R/summary.saem.mmkin.R +++ b/R/summary.saem.mmkin.R @@ -207,11 +207,11 @@ print.summary.saem.mmkin <- function(x, digits = max(3, getOption("digits") - 3) tc = "Two-component variance function"), "\n") cat("\nMean of starting values for individual parameters:\n") - print(x$mean_dp_start) + print(x$mean_dp_start, digits = digits) cat("\nFixed degradation parameter values:\n") if(length(x$fixed$value) == 0) cat("None\n") - else print(x$fixed) + else print(x$fixed, digits = digits) cat("\nResults:\n\n") cat("Likelihood computed by importance sampling\n") diff --git a/tests/testthat/print_saem_biphasic_s.txt b/tests/testthat/print_saem_biphasic_s.txt new file mode 100644 index 00000000..4d20117e --- /dev/null +++ b/tests/testthat/print_saem_biphasic_s.txt @@ -0,0 +1,37 @@ +Kinetic nonlinear mixed-effects model fit by SAEM +Structural model: +d_parent/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * + time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) + * parent +d_m1/dt = + f_parent_to_m1 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) + * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * + exp(-k2 * time))) * parent - k_m1 * m1 + +Data: +509 observations of 2 variable(s) grouped in 15 datasets + +Likelihood computed by importance sampling + AIC BIC logLik + 2692 2702 -1333 + +Fitted parameters: + estimate lower upper +parent_0 1.002e+02 99.302986 1.011e+02 +k_m1 2.182e-03 0.001576 2.788e-03 +f_parent_to_m1 4.883e-01 0.447687 5.289e-01 +k1 4.014e-02 0.023941 5.634e-02 +k2 1.517e-02 0.008507 2.184e-02 +g 5.007e-01 0.380534 6.208e-01 +Var.parent_0 1.511e+00 -0.551247 3.574e+00 +Var.k_m1 1.912e-02 -0.151313 1.896e-01 +Var.f_parent_to_m1 8.082e-02 0.018430 1.432e-01 +Var.k1 5.037e-01 0.095343 9.121e-01 +Var.k2 6.129e-01 0.124868 1.101e+00 +Var.g 7.107e-02 -0.244901 3.870e-01 +a.1 2.749e+00 2.568674 2.929e+00 +SD.parent_0 1.229e+00 0.390443 2.068e+00 +SD.k_m1 1.383e-01 -0.477984 7.545e-01 +SD.f_parent_to_m1 2.843e-01 0.174562 3.940e-01 +SD.k1 7.097e-01 0.422037 9.974e-01 +SD.k2 7.829e-01 0.471184 1.095e+00 +SD.g 2.666e-01 -0.326044 8.592e-01 diff --git a/tests/testthat/summary_DFOP_FOCUS_C.txt b/tests/testthat/summary_DFOP_FOCUS_C.txt index 2b0210c0..da3276e1 100644 --- a/tests/testthat/summary_DFOP_FOCUS_C.txt +++ b/tests/testthat/summary_DFOP_FOCUS_C.txt @@ -1,82 +1,77 @@ -mkin version used for fitting: Dummy 0.0 for testing -R version used for fitting: Dummy R version for testing -Date of fit: Dummy date for testing -Date of summary: Dummy date for testing +saemix version used for fitting: 3.1.9000 +mkin version used for pre-fitting: 0.9.50.4 +R version used for fitting: 4.0.3 +Date of fit: Wed Dec 9 08:16:28 2020 +Date of summary: Wed Dec 9 08:23:19 2020 Equations: d_parent/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * parent +d_m1/dt = + f_parent_to_m1 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) + * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * + exp(-k2 * time))) * parent - k_m1 * m1 -Model predictions using solution type analytical - -Fitted using test 0 model solutions performed in test time 0 s +Data: +509 observations of 2 variable(s) grouped in 15 datasets -Error model: Constant variance +Model predictions using solution type analytical -Error model algorithm: OLS +Fitted in 10.222 s using 300, 100 iterations -Starting values for parameters to be optimised: - value type -parent_0 85.10 state -k1 0.10 deparm -k2 0.01 deparm -g 0.50 deparm +Variance model: Constant variance -Starting values for the transformed parameters actually optimised: - value lower upper -parent_0 85.100000 -Inf Inf -log_k1 -2.302585 -Inf Inf -log_k2 -4.605170 -Inf Inf -g_qlogis 0.000000 -Inf Inf +Mean of starting values for individual parameters: + parent_0 k_m1 f_parent_to_m1 k1 k2 + 1.007005e+02 1.837381e-03 4.803953e-01 4.534096e-02 1.918378e-02 + g + 5.068235e-01 -Fixed parameter values: +Fixed degradation parameter values: None Results: - AIC BIC logLik - 29.02372 30.00984 -9.511861 - -Optimised, transformed parameters with symmetric confidence intervals: - Estimate Std. Error Lower Upper -parent_0 85.0000 0.66620 83.1500 86.8500 -log_k1 -0.7775 0.03380 -0.8713 -0.6836 -log_k2 -4.0260 0.13100 -4.3890 -3.6620 -g_qlogis 1.7660 0.08218 1.5380 1.9940 -sigma 0.6962 0.16410 0.2406 1.1520 - -Parameter correlation: -[1] "Correlation matrix is platform dependent, not tested" - -Backtransformed parameters: -Confidence intervals for internally transformed parameters are asymmetric. -t-test (unrealistically) based on the assumption of normal distribution -for estimators of untransformed parameters. - Estimate t value Pr(>t) Lower Upper -parent_0 85.00000 127.600 1.131e-08 83.15000 86.85000 -k1 0.45960 29.580 3.887e-06 0.41840 0.50480 -k2 0.01785 7.636 7.901e-04 0.01241 0.02568 -g 0.85390 83.310 6.221e-08 0.82310 0.88020 -sigma 0.69620 4.243 6.618e-03 0.24060 1.15200 - -FOCUS Chi2 error levels in percent: - err.min n.optim df -All data 2.661 4 5 -parent 2.661 4 5 +Likelihood computed by importance sampling + AIC BIC logLik + 2692 2702 -1333 + +Optimised parameters: + est. lower upper +parent_0 1.002e+02 99.302986 1.011e+02 +k_m1 2.182e-03 0.001576 2.788e-03 +f_parent_to_m1 4.883e-01 0.447687 5.289e-01 +k1 4.014e-02 0.023941 5.634e-02 +k2 1.517e-02 0.008507 2.184e-02 +g 5.007e-01 0.380534 6.208e-01 + +Correlation: + prnt_0 k_m1 f_p__1 k1 k2 +k_m1 -0.152 +f_parent_to_m1 -0.138 0.396 +k1 0.085 -0.036 -0.026 +k2 0.005 0.067 0.018 -0.043 +g -0.075 -0.113 -0.029 -0.248 -0.263 + +Random effects: + est. lower upper +SD.parent_0 1.2293 0.3904 2.0682 +SD.k_m1 0.1383 -0.4780 0.7545 +SD.f_parent_to_m1 0.2843 0.1746 0.3940 +SD.k1 0.7097 0.4220 0.9974 +SD.k2 0.7829 0.4712 1.0946 +SD.g 0.2666 -0.3260 0.8592 + +Variance model: + est. lower upper +a.1 2.749 2.569 2.929 + +Resulting formation fractions: + ff +parent_m1 0.4883 +parent_sink 0.5117 Estimated disappearance times: - DT50 DT90 DT50back DT50_k1 DT50_k2 -parent 1.887 21.25 6.397 1.508 38.83 - -Data: - time variable observed predicted residual - 0 parent 85.1 85.003 0.09726 - 1 parent 57.9 58.039 -0.13912 - 3 parent 29.9 30.054 -0.15351 - 7 parent 14.6 13.866 0.73388 - 14 parent 9.7 9.787 -0.08657 - 28 parent 6.6 7.532 -0.93205 - 63 parent 4.0 4.033 -0.03269 - 91 parent 3.9 2.447 1.45348 - 119 parent 0.6 1.484 -0.88424 + DT50 DT90 DT50back DT50_k1 DT50_k2 +parent 27.07 110.1 33.14 17.27 45.68 +m1 317.69 1055.4 NA NA NA diff --git a/tests/testthat/summary_saem_biphasic_s.txt b/tests/testthat/summary_saem_biphasic_s.txt new file mode 100644 index 00000000..b5777ce1 --- /dev/null +++ b/tests/testthat/summary_saem_biphasic_s.txt @@ -0,0 +1,77 @@ +saemix version used for fitting: Dummy 0.0 for testing +mkin version used for pre-fitting: Dummy 0.0 for testing +R version used for fitting: Dummy R version for testing +Date of fit: Dummy date for testing +Date of summary: Dummy date for testing + +Equations: +d_parent/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * + time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) + * parent +d_m1/dt = + f_parent_to_m1 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) + * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * + exp(-k2 * time))) * parent - k_m1 * m1 + +Data: +509 observations of 2 variable(s) grouped in 15 datasets + +Model predictions using solution type analytical + +Fitted in test time 0 s using 300, 100 iterations + +Variance model: Constant variance + +Mean of starting values for individual parameters: + parent_0 k_m1 f_parent_to_m1 k1 k2 + 1.0e+02 1.8e-03 4.8e-01 4.5e-02 1.9e-02 + g + 5.1e-01 + +Fixed degradation parameter values: +None + +Results: + +Likelihood computed by importance sampling + AIC BIC logLik + 2692 2702 -1333 + +Optimised parameters: + est. lower upper +parent_0 1.0e+02 99.3030 1.0e+02 +k_m1 2.2e-03 0.0016 2.8e-03 +f_parent_to_m1 4.9e-01 0.4477 5.3e-01 +k1 4.0e-02 0.0239 5.6e-02 +k2 1.5e-02 0.0085 2.2e-02 +g 5.0e-01 0.3805 6.2e-01 + +Correlation: + prnt_0 k_m1 f_p__1 k1 k2 +k_m1 -0.152 +f_parent_to_m1 -0.138 0.396 +k1 0.085 -0.036 -0.026 +k2 0.005 0.067 0.018 -0.043 +g -0.075 -0.113 -0.029 -0.248 -0.263 + +Random effects: + est. lower upper +SD.parent_0 1.23 0.39 2.07 +SD.k_m1 0.14 -0.48 0.75 +SD.f_parent_to_m1 0.28 0.17 0.39 +SD.k1 0.71 0.42 1.00 +SD.k2 0.78 0.47 1.09 +SD.g 0.27 -0.33 0.86 + +Variance model: + est. lower upper +a.1 2.7 2.6 2.9 + +Resulting formation fractions: + ff +parent_m1 0.49 +parent_sink 0.51 + +Estimated disappearance times: + DT50 DT90 DT50back DT50_k1 DT50_k2 +parent 27 110 33 17 46 +m1 318 1055 NA NA NA diff --git a/tests/testthat/test_f_time_norm.R b/tests/testthat/test_f_time_norm.R new file mode 100644 index 00000000..790cce8b --- /dev/null +++ b/tests/testthat/test_f_time_norm.R @@ -0,0 +1,6 @@ +context("Time step normalisation") + +test_that("Simple temperature and moisture normalisation works", { + expect_equal(round(f_time_norm_focus(25, 20, 25), 2), 1.37) +}) + diff --git a/tests/testthat/test_saem.R b/tests/testthat/test_saem.R index 0b6d4531..d41efbfa 100644 --- a/tests/testthat/test_saem.R +++ b/tests/testthat/test_saem.R @@ -102,15 +102,27 @@ test_that("Parent only models can be fitted with saemix", { test_that("Simple models with metabolite can be fitted with saemix", { + expect_known_output(print(saem_biphasic_s), "print_saem_biphasic_s.txt") + + test_summary <- summary(saem_biphasic_s) + test_summary$saemixversion <- "Dummy 0.0 for testing" + test_summary$mkinversion <- "Dummy 0.0 for testing" + test_summary$Rversion <- "Dummy R version for testing" + test_summary$date.fit <- "Dummy date for testing" + test_summary$date.summary <- "Dummy date for testing" + test_summary$time <- c(elapsed = "test time 0") + + expect_known_output(print(test_summary, digits = 2), "summary_saem_biphasic_s.txt") + dfop_sfo_pop <- as.numeric(dfop_sfo_pop) ci_dfop_sfo_s_s <- summary(saem_biphasic_s)$confint_back expect_true(all(ci_dfop_sfo_s_s[, "lower"] < dfop_sfo_pop)) expect_true(all(ci_dfop_sfo_s_s[, "upper"] > dfop_sfo_pop)) - # The following does not work, the k1 and k2 are not fitted well + # The following does not work, as k1 and k2 are not fitted well ci_dfop_sfo_s_m <- summary(saem_biphasic_m)$confint_back # expect_true(all(ci_dfop_sfo_s_m[, "lower"] < dfop_sfo_pop)) - #expect_true(all(ci_dfop_sfo_s_m[, "upper"] > dfop_sfo_pop)) + # expect_true(all(ci_dfop_sfo_s_m[, "upper"] > dfop_sfo_pop)) # Somehow this does not work at the moment. But it took forever (~ 10 min) anyways... #saem_biphasic_2 <- saem(mmkin_biphasic, solution_type = "deSolve", quiet = TRUE) -- cgit v1.2.1