From 60270e2849ebd48eaf57b83eb1aa9fbe53281f8b Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Sat, 24 Oct 2020 02:18:59 +0200 Subject: Fix a bug for nlme with parent only, improve examples --- R/nlme.mmkin.R | 37 +++---------- R/plot.nlme.mmkin.R | 5 +- docs/dev/pkgdown.yml | 2 +- docs/dev/reference/Rplot001.png | Bin 27839 -> 48355 bytes docs/dev/reference/Rplot002.png | Bin 64132 -> 62018 bytes docs/dev/reference/Rplot003.png | Bin 26194 -> 62243 bytes docs/dev/reference/Rplot004.png | Bin 26783 -> 63952 bytes docs/dev/reference/nlme.mmkin-1.png | Bin 79142 -> 135400 bytes docs/dev/reference/nlme.mmkin-2.png | Bin 79539 -> 171122 bytes docs/dev/reference/nlme.mmkin-3.png | Bin 79703 -> 171684 bytes docs/dev/reference/nlme.mmkin-4.png | Bin 82209 -> 175495 bytes docs/dev/reference/nlme.mmkin.html | 101 +++++------------------------------- man/nlme.mmkin.Rd | 37 +++---------- 13 files changed, 32 insertions(+), 150 deletions(-) diff --git a/R/nlme.mmkin.R b/R/nlme.mmkin.R index d4720e79..22a70f18 100644 --- a/R/nlme.mmkin.R +++ b/R/nlme.mmkin.R @@ -53,6 +53,7 @@ get_deg_func <- function() { #' f_nlme_dfop <- nlme(f["DFOP", ]) #' AIC(f_nlme_sfo, f_nlme_dfop) #' print(f_nlme_dfop) +#' plot(f_nlme_dfop) #' endpoints(f_nlme_dfop) #' \dontrun{ #' f_nlme_2 <- nlme(f["SFO", ], start = c(parent_0 = 100, log_k_parent = 0.1)) @@ -63,58 +64,36 @@ get_deg_func <- function() { #' A1 = mkinsub("SFO"), use_of_ff = "min", quiet = TRUE) #' m_sfo_sfo_ff <- mkinmod(parent = mkinsub("SFO", "A1"), #' A1 = mkinsub("SFO"), use_of_ff = "max", quiet = TRUE) -#' m_fomc_sfo <- mkinmod(parent = mkinsub("FOMC", "A1"), -#' A1 = mkinsub("SFO"), quiet = TRUE) #' m_dfop_sfo <- mkinmod(parent = mkinsub("DFOP", "A1"), #' A1 = mkinsub("SFO"), quiet = TRUE) #' #' f_2 <- mmkin(list("SFO-SFO" = m_sfo_sfo, #' "SFO-SFO-ff" = m_sfo_sfo_ff, -#' "FOMC-SFO" = m_fomc_sfo, #' "DFOP-SFO" = m_dfop_sfo), #' ds_2, quiet = TRUE) -#' plot(f_2["SFO-SFO", 3:4]) # Separate fits for datasets 3 and 4 #' #' f_nlme_sfo_sfo <- nlme(f_2["SFO-SFO", ]) -#' # plot(f_nlme_sfo_sfo) # not feasible with pkgdown figures -#' plot(f_nlme_sfo_sfo, 3:4) # Global mixed model: Fits for datasets 3 and 4 +#' plot(f_nlme_sfo_sfo) #' #' # With formation fractions #' f_nlme_sfo_sfo_ff <- nlme(f_2["SFO-SFO-ff", ]) -#' plot(f_nlme_sfo_sfo_ff, 3:4) # chi2 different due to different df attribution +#' plot(f_nlme_sfo_sfo_ff) #' -#' # For more parameters, we need to increase pnlsMaxIter and the tolerance +#' # For the following fit we need to increase pnlsMaxIter and the tolerance #' # to get convergence -#' f_nlme_fomc_sfo <- nlme(f_2["FOMC-SFO", ], -#' control = list(pnlsMaxIter = 100, tolerance = 1e-4), verbose = TRUE) #' f_nlme_dfop_sfo <- nlme(f_2["DFOP-SFO", ], #' control = list(pnlsMaxIter = 120, tolerance = 5e-4), verbose = TRUE) -#' plot(f_2["FOMC-SFO", 3:4]) -#' plot(f_nlme_fomc_sfo, 3:4) #' -#' plot(f_2["DFOP-SFO", 3:4]) -#' plot(f_nlme_dfop_sfo, 3:4) +#' plot(f_nlme_dfop_sfo) #' -#' anova(f_nlme_dfop_sfo, f_nlme_fomc_sfo, f_nlme_sfo_sfo) -#' anova(f_nlme_dfop_sfo, f_nlme_sfo_sfo) # if we ignore FOMC +#' anova(f_nlme_dfop_sfo, f_nlme_sfo_sfo) #' #' endpoints(f_nlme_sfo_sfo) #' endpoints(f_nlme_dfop_sfo) #' #' if (length(findFunction("varConstProp")) > 0) { # tc error model for nlme available -#' # Attempts to fit metabolite kinetics with the tc error model -#' #f_2_tc <- mmkin(list("SFO-SFO" = m_sfo_sfo, -#' # "SFO-SFO-ff" = m_sfo_sfo_ff, -#' # "FOMC-SFO" = m_fomc_sfo, -#' # "DFOP-SFO" = m_dfop_sfo), -#' # ds_2, quiet = TRUE, -#' # error_model = "tc") -#' #f_nlme_sfo_sfo_tc <- nlme(f_2_tc["SFO-SFO", ], control = list(maxIter = 100)) -#' #f_nlme_dfop_sfo_tc <- nlme(f_2_tc["DFOP-SFO", ]) -#' #f_nlme_dfop_sfo_tc <- update(f_nlme_dfop_sfo, weights = varConstProp(), -#' # control = list(sigma = 1, msMaxIter = 100, pnlsMaxIter = 15)) -#' # Fitting metabolite kinetics with nlme.mmkin and the two-component -#' # error model currently does not work, at least not with these data. +#' # Attempts to fit metabolite kinetics with the tc error model are possible, +#' # but need tweeking of control values and sometimes do not converge #' #' f_tc <- mmkin(c("SFO", "DFOP"), ds, quiet = TRUE, error_model = "tc") #' f_nlme_sfo_tc <- nlme(f_tc["SFO", ]) diff --git a/R/plot.nlme.mmkin.R b/R/plot.nlme.mmkin.R index 2356070e..223aba68 100644 --- a/R/plot.nlme.mmkin.R +++ b/R/plot.nlme.mmkin.R @@ -99,7 +99,7 @@ plot.nlme.mmkin <- function(x, i = 1:ncol(x$mmkin_orig), transform_fractions = fit_1$transform_fractions) odeini <- degparms_all[ds_i, odeini_names] - names(odeini) <- gsub("_0", "", names(odeini)) + names(odeini) <- gsub("_0", "", odeini_names) out <- mkinpredict(x$mkinmod, odeparms, odeini, outtimes, solution_type = solution_type, @@ -116,7 +116,7 @@ plot.nlme.mmkin <- function(x, i = 1:ncol(x$mmkin_orig), transform_fractions = fit_1$transform_fractions) odeini_pop <- degparms_all_pop[odeini_names] - names(odeini_pop) <- gsub("_0", "", names(odeini_pop)) + names(odeini_pop) <- gsub("_0", "", odeini_names) pred_pop <- as.data.frame( mkinpredict(x$mkinmod, odeparms_pop, odeini_pop, @@ -171,7 +171,6 @@ plot.nlme.mmkin <- function(x, i = 1:ncol(x$mmkin_orig), maxabs = max(abs(observed_row$residual), na.rm = TRUE) } - if (identical(resplot, "time")) { plot(0, type = "n", xlim = xlim, xlab = "Time", ylim = c(-1.2 * maxabs, 1.2 * maxabs), diff --git a/docs/dev/pkgdown.yml b/docs/dev/pkgdown.yml index 61fa6e5d..d6c3d6c9 100644 --- a/docs/dev/pkgdown.yml +++ b/docs/dev/pkgdown.yml @@ -10,7 +10,7 @@ articles: web_only/NAFTA_examples: NAFTA_examples.html web_only/benchmarks: benchmarks.html web_only/compiled_models: compiled_models.html -last_built: 2020-10-23T23:38Z +last_built: 2020-10-24T00:14Z urls: reference: https://pkgdown.jrwb.de/mkin/reference article: https://pkgdown.jrwb.de/mkin/articles diff --git a/docs/dev/reference/Rplot001.png b/docs/dev/reference/Rplot001.png index cfc5bc2b..bf7c274a 100644 Binary files a/docs/dev/reference/Rplot001.png and b/docs/dev/reference/Rplot001.png differ diff --git a/docs/dev/reference/Rplot002.png b/docs/dev/reference/Rplot002.png index cffa10c1..965d4620 100644 Binary files a/docs/dev/reference/Rplot002.png and b/docs/dev/reference/Rplot002.png differ diff --git a/docs/dev/reference/Rplot003.png b/docs/dev/reference/Rplot003.png index 89ba6c49..057b525f 100644 Binary files a/docs/dev/reference/Rplot003.png and b/docs/dev/reference/Rplot003.png differ diff --git a/docs/dev/reference/Rplot004.png b/docs/dev/reference/Rplot004.png index 7d30a181..2b5ba960 100644 Binary files a/docs/dev/reference/Rplot004.png and b/docs/dev/reference/Rplot004.png differ diff --git a/docs/dev/reference/nlme.mmkin-1.png b/docs/dev/reference/nlme.mmkin-1.png index 564f7e2b..d0a1d7d4 100644 Binary files a/docs/dev/reference/nlme.mmkin-1.png and b/docs/dev/reference/nlme.mmkin-1.png differ diff --git a/docs/dev/reference/nlme.mmkin-2.png b/docs/dev/reference/nlme.mmkin-2.png index a9ce4636..b68dc3e0 100644 Binary files a/docs/dev/reference/nlme.mmkin-2.png and b/docs/dev/reference/nlme.mmkin-2.png differ diff --git a/docs/dev/reference/nlme.mmkin-3.png b/docs/dev/reference/nlme.mmkin-3.png index 0b7ce0f6..77804b2c 100644 Binary files a/docs/dev/reference/nlme.mmkin-3.png and b/docs/dev/reference/nlme.mmkin-3.png differ diff --git a/docs/dev/reference/nlme.mmkin-4.png b/docs/dev/reference/nlme.mmkin-4.png index d7c68dd5..96717087 100644 Binary files a/docs/dev/reference/nlme.mmkin-4.png and b/docs/dev/reference/nlme.mmkin-4.png differ diff --git a/docs/dev/reference/nlme.mmkin.html b/docs/dev/reference/nlme.mmkin.html index 6e83b700..3c84abe2 100644 --- a/docs/dev/reference/nlme.mmkin.html +++ b/docs/dev/reference/nlme.mmkin.html @@ -286,7 +286,8 @@ with additional elements

#> StdDev: 2.488249 0.8447273 1.32965 0.3289311 2.321364 #> #> Number of Observations: 90 -#> Number of Groups: 5
endpoints(f_nlme_dfop) +#> Number of Groups: 5
plot(f_nlme_dfop) +
endpoints(f_nlme_dfop)
#> $distimes #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 10.79857 100.7937 30.34193 4.193938 43.85443 @@ -313,82 +314,24 @@ with additional elements

A1 = mkinsub("SFO"), use_of_ff = "min", quiet = TRUE) m_sfo_sfo_ff <- mkinmod(parent = mkinsub("SFO", "A1"), A1 = mkinsub("SFO"), use_of_ff = "max", quiet = TRUE) - m_fomc_sfo <- mkinmod(parent = mkinsub("FOMC", "A1"), - A1 = mkinsub("SFO"), quiet = TRUE) m_dfop_sfo <- mkinmod(parent = mkinsub("DFOP", "A1"), A1 = mkinsub("SFO"), quiet = TRUE) f_2 <- mmkin(list("SFO-SFO" = m_sfo_sfo, "SFO-SFO-ff" = m_sfo_sfo_ff, - "FOMC-SFO" = m_fomc_sfo, "DFOP-SFO" = m_dfop_sfo), ds_2, quiet = TRUE) - plot(f_2["SFO-SFO", 3:4]) # Separate fits for datasets 3 and 4 -
+ f_nlme_sfo_sfo <- nlme(f_2["SFO-SFO", ]) - # plot(f_nlme_sfo_sfo) # not feasible with pkgdown figures - plot(f_nlme_sfo_sfo, 3:4) # Global mixed model: Fits for datasets 3 and 4 + plot(f_nlme_sfo_sfo)
# With formation fractions f_nlme_sfo_sfo_ff <- nlme(f_2["SFO-SFO-ff", ]) - plot(f_nlme_sfo_sfo_ff, 3:4) # chi2 different due to different df attribution + plot(f_nlme_sfo_sfo_ff)
- # For more parameters, we need to increase pnlsMaxIter and the tolerance + # For the following fit we need to increase pnlsMaxIter and the tolerance # to get convergence - f_nlme_fomc_sfo <- nlme(f_2["FOMC-SFO", ], - control = list(pnlsMaxIter = 100, tolerance = 1e-4), verbose = TRUE) -
#> -#> **Iteration 1 -#> LME step: Loglik: -394.1603, nlminb iterations: 3 -#> reStruct parameters: -#> ds1 ds2 ds3 ds4 ds5 -#> -0.2079793 0.8563830 1.7454105 1.0917354 1.2756825 -#> Beginning PNLS step: .. completed fit_nlme() step. -#> PNLS step: RSS = 643.8803 -#> fixed effects: 94.17379 -5.473193 -0.6970236 -0.2025091 2.103883 -#> iterations: 100 -#> Convergence crit. (must all become <= tolerance = 0.0001): -#> fixed reStruct -#> 0.7960134 0.1447728 -#> -#> **Iteration 2 -#> LME step: Loglik: -396.3824, nlminb iterations: 7 -#> reStruct parameters: -#> ds1 ds2 ds3 ds4 ds5 -#> -1.712404e-01 -2.432655e-05 1.842120e+00 1.073975e+00 1.322925e+00 -#> Beginning PNLS step: .. completed fit_nlme() step. -#> PNLS step: RSS = 643.8035 -#> fixed effects: 94.17385 -5.473487 -0.6970404 -0.2025137 2.103871 -#> iterations: 100 -#> Convergence crit. (must all become <= tolerance = 0.0001): -#> fixed reStruct -#> 5.382757e-05 1.236667e-03 -#> -#> **Iteration 3 -#> LME step: Loglik: -396.3825, nlminb iterations: 7 -#> reStruct parameters: -#> ds1 ds2 ds3 ds4 ds5 -#> -0.1712499044 -0.0001499831 1.8420971364 1.0739799123 1.3229167796 -#> Beginning PNLS step: .. completed fit_nlme() step. -#> PNLS step: RSS = 643.7948 -#> fixed effects: 94.17386 -5.473521 -0.6970422 -0.2025144 2.10387 -#> iterations: 100 -#> Convergence crit. (must all become <= tolerance = 0.0001): -#> fixed reStruct -#> 6.072817e-06 1.400857e-04 -#> -#> **Iteration 4 -#> LME step: Loglik: -396.3825, nlminb iterations: 7 -#> reStruct parameters: -#> ds1 ds2 ds3 ds4 ds5 -#> -0.1712529502 -0.0001641277 1.8420957542 1.0739797181 1.3229173076 -#> Beginning PNLS step: .. completed fit_nlme() step. -#> PNLS step: RSS = 643.7936 -#> fixed effects: 94.17386 -5.473526 -0.6970426 -0.2025146 2.103869 -#> iterations: 100 -#> Convergence crit. (must all become <= tolerance = 0.0001): -#> fixed reStruct -#> 1.027451e-06 2.275704e-05
f_nlme_dfop_sfo <- nlme(f_2["DFOP-SFO", ], + f_nlme_dfop_sfo <- nlme(f_2["DFOP-SFO", ], control = list(pnlsMaxIter = 120, tolerance = 5e-4), verbose = TRUE)
#> #> **Iteration 1 @@ -415,17 +358,10 @@ with additional elements

#> iterations: 120 #> Convergence crit. (must all become <= tolerance = 0.0005): #> fixed reStruct -#> 4.789774e-07 2.200661e-05
plot(f_2["FOMC-SFO", 3:4]) -
plot(f_nlme_fomc_sfo, 3:4) -
- plot(f_2["DFOP-SFO", 3:4]) -
plot(f_nlme_dfop_sfo, 3:4) -
- anova(f_nlme_dfop_sfo, f_nlme_fomc_sfo, f_nlme_sfo_sfo) -
#> Model df AIC BIC logLik Test L.Ratio p-value -#> f_nlme_dfop_sfo 1 13 843.8547 884.6201 -408.9273 -#> f_nlme_fomc_sfo 2 11 818.5149 853.0087 -398.2575 1 vs 2 21.33975 <.0001 -#> f_nlme_sfo_sfo 3 9 1085.1821 1113.4043 -533.5910 2 vs 3 270.66716 <.0001
anova(f_nlme_dfop_sfo, f_nlme_sfo_sfo) # if we ignore FOMC +#> 4.789774e-07 2.200661e-05
+ plot(f_nlme_dfop_sfo) +
+ anova(f_nlme_dfop_sfo, f_nlme_sfo_sfo)
#> Model df AIC BIC logLik Test L.Ratio p-value #> f_nlme_dfop_sfo 1 13 843.8547 884.6201 -408.9273 #> f_nlme_sfo_sfo 2 9 1085.1821 1113.4043 -533.5910 1 vs 2 249.3274 <.0001
@@ -449,19 +385,8 @@ with additional elements

#> A1 162.30536 539.1667 NA NA NA #>
if (length(findFunction("varConstProp")) > 0) { # tc error model for nlme available - # Attempts to fit metabolite kinetics with the tc error model - #f_2_tc <- mmkin(list("SFO-SFO" = m_sfo_sfo, - # "SFO-SFO-ff" = m_sfo_sfo_ff, - # "FOMC-SFO" = m_fomc_sfo, - # "DFOP-SFO" = m_dfop_sfo), - # ds_2, quiet = TRUE, - # error_model = "tc") - #f_nlme_sfo_sfo_tc <- nlme(f_2_tc["SFO-SFO", ], control = list(maxIter = 100)) - #f_nlme_dfop_sfo_tc <- nlme(f_2_tc["DFOP-SFO", ]) - #f_nlme_dfop_sfo_tc <- update(f_nlme_dfop_sfo, weights = varConstProp(), - # control = list(sigma = 1, msMaxIter = 100, pnlsMaxIter = 15)) - # Fitting metabolite kinetics with nlme.mmkin and the two-component - # error model currently does not work, at least not with these data. + # Attempts to fit metabolite kinetics with the tc error model are possible, + # but need tweeking of control values and sometimes do not converge f_tc <- mmkin(c("SFO", "DFOP"), ds, quiet = TRUE, error_model = "tc") f_nlme_sfo_tc <- nlme(f_tc["SFO", ]) diff --git a/man/nlme.mmkin.Rd b/man/nlme.mmkin.Rd index 08ce1ad8..87d84c74 100644 --- a/man/nlme.mmkin.Rd +++ b/man/nlme.mmkin.Rd @@ -83,6 +83,7 @@ f_nlme_sfo <- nlme(f["SFO", ]) f_nlme_dfop <- nlme(f["DFOP", ]) AIC(f_nlme_sfo, f_nlme_dfop) print(f_nlme_dfop) +plot(f_nlme_dfop) endpoints(f_nlme_dfop) \dontrun{ f_nlme_2 <- nlme(f["SFO", ], start = c(parent_0 = 100, log_k_parent = 0.1)) @@ -93,58 +94,36 @@ endpoints(f_nlme_dfop) A1 = mkinsub("SFO"), use_of_ff = "min", quiet = TRUE) m_sfo_sfo_ff <- mkinmod(parent = mkinsub("SFO", "A1"), A1 = mkinsub("SFO"), use_of_ff = "max", quiet = TRUE) - m_fomc_sfo <- mkinmod(parent = mkinsub("FOMC", "A1"), - A1 = mkinsub("SFO"), quiet = TRUE) m_dfop_sfo <- mkinmod(parent = mkinsub("DFOP", "A1"), A1 = mkinsub("SFO"), quiet = TRUE) f_2 <- mmkin(list("SFO-SFO" = m_sfo_sfo, "SFO-SFO-ff" = m_sfo_sfo_ff, - "FOMC-SFO" = m_fomc_sfo, "DFOP-SFO" = m_dfop_sfo), ds_2, quiet = TRUE) - plot(f_2["SFO-SFO", 3:4]) # Separate fits for datasets 3 and 4 f_nlme_sfo_sfo <- nlme(f_2["SFO-SFO", ]) - # plot(f_nlme_sfo_sfo) # not feasible with pkgdown figures - plot(f_nlme_sfo_sfo, 3:4) # Global mixed model: Fits for datasets 3 and 4 + plot(f_nlme_sfo_sfo) # With formation fractions f_nlme_sfo_sfo_ff <- nlme(f_2["SFO-SFO-ff", ]) - plot(f_nlme_sfo_sfo_ff, 3:4) # chi2 different due to different df attribution + plot(f_nlme_sfo_sfo_ff) - # For more parameters, we need to increase pnlsMaxIter and the tolerance + # For the following fit we need to increase pnlsMaxIter and the tolerance # to get convergence - f_nlme_fomc_sfo <- nlme(f_2["FOMC-SFO", ], - control = list(pnlsMaxIter = 100, tolerance = 1e-4), verbose = TRUE) f_nlme_dfop_sfo <- nlme(f_2["DFOP-SFO", ], control = list(pnlsMaxIter = 120, tolerance = 5e-4), verbose = TRUE) - plot(f_2["FOMC-SFO", 3:4]) - plot(f_nlme_fomc_sfo, 3:4) - plot(f_2["DFOP-SFO", 3:4]) - plot(f_nlme_dfop_sfo, 3:4) + plot(f_nlme_dfop_sfo) - anova(f_nlme_dfop_sfo, f_nlme_fomc_sfo, f_nlme_sfo_sfo) - anova(f_nlme_dfop_sfo, f_nlme_sfo_sfo) # if we ignore FOMC + anova(f_nlme_dfop_sfo, f_nlme_sfo_sfo) endpoints(f_nlme_sfo_sfo) endpoints(f_nlme_dfop_sfo) if (length(findFunction("varConstProp")) > 0) { # tc error model for nlme available - # Attempts to fit metabolite kinetics with the tc error model - #f_2_tc <- mmkin(list("SFO-SFO" = m_sfo_sfo, - # "SFO-SFO-ff" = m_sfo_sfo_ff, - # "FOMC-SFO" = m_fomc_sfo, - # "DFOP-SFO" = m_dfop_sfo), - # ds_2, quiet = TRUE, - # error_model = "tc") - #f_nlme_sfo_sfo_tc <- nlme(f_2_tc["SFO-SFO", ], control = list(maxIter = 100)) - #f_nlme_dfop_sfo_tc <- nlme(f_2_tc["DFOP-SFO", ]) - #f_nlme_dfop_sfo_tc <- update(f_nlme_dfop_sfo, weights = varConstProp(), - # control = list(sigma = 1, msMaxIter = 100, pnlsMaxIter = 15)) - # Fitting metabolite kinetics with nlme.mmkin and the two-component - # error model currently does not work, at least not with these data. + # Attempts to fit metabolite kinetics with the tc error model are possible, + # but need tweeking of control values and sometimes do not converge f_tc <- mmkin(c("SFO", "DFOP"), ds, quiet = TRUE, error_model = "tc") f_nlme_sfo_tc <- nlme(f_tc["SFO", ]) -- cgit v1.2.1