From 808a679efb69ec6603db6642687d9e8ceb3b3453 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Thu, 14 May 2020 18:39:29 +0200 Subject: Add a parms method for mmkin objects --- NAMESPACE | 1 + NEWS.md | 4 +++ R/parms.mkinfit.R | 34 +++++++++++++++++-- docs/news/index.html | 8 +++++ docs/pkgdown.yml | 2 +- docs/reference/parms.html | 83 +++++++++++++++++++++++++++++++++++++++++++++-- man/parms.Rd | 19 +++++++++-- 7 files changed, 143 insertions(+), 8 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index ef1ddca5..72a60dea 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -16,6 +16,7 @@ S3method(mkinpredict,mkinmod) S3method(nlme,mmkin) S3method(nobs,mkinfit) S3method(parms,mkinfit) +S3method(parms,mmkin) S3method(plot,mkinfit) S3method(plot,mmkin) S3method(plot,nafta) diff --git a/NEWS.md b/NEWS.md index 3867320e..37cb5072 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# mkin 0.9.50.3 (unreleased) + +- 'parms': Add a method for mmkin objects + # mkin 0.9.50.2 (2020-05-12) - Increase tolerance for a platform specific test results on the Solaris test machine on CRAN diff --git a/R/parms.mkinfit.R b/R/parms.mkinfit.R index 281d06de..f173ef51 100644 --- a/R/parms.mkinfit.R +++ b/R/parms.mkinfit.R @@ -4,9 +4,13 @@ #' model parameters, in order to avoid working with a fitted model without #' considering the error structure that was assumed for the fit. #' -#' @param object A fitted model object +#' @param object A fitted model object. Methods are implemented for +#' [mkinfit()] objects and for [mmkin()] objects. #' @param \dots Not used -#' @return A numeric vector of fitted model parameters +#' @return For mkinfit objects, a numeric vector of fitted model parameters. +#' For mmkin row objects, a matrix with the parameters with a +#' row for each dataset. If the mmkin object has more than one row, a list of +#' such matrices is returned. #' @export parms <- function(object, ...) { @@ -26,3 +30,29 @@ parms.mkinfit <- function(object, transformed = FALSE, ...) if (transformed) object$par else c(object$bparms.optim, object$errparms) } + +#' @rdname parms +#' @examples +#' ds <- lapply(experimental_data_for_UBA_2019[6:10], +#' function(x) subset(x$data[c("name", "time", "value")])) +#' names(ds) <- paste("Dataset", 6:10) +#' fits <- mmkin(c("SFO", "FOMC", "DFOP"), ds, quiet = TRUE) +#' parms(fits["SFO", ]) +#' parms(fits[, 2]) +#' parms(fits) +#' parms(fits, transformed = TRUE) +#' @export +parms.mmkin <- function(object, transformed = FALSE, ...) +{ + if (nrow(object) == 1) { + res <- sapply(object, parms, transformed = transformed, ...) + colnames(res) <- colnames(object) + } else { + res <- list() + for (i in 1:nrow(object)) { + res[[i]] <- parms(object[i, ], transformed = transformed, ...) + } + names(res) <- rownames(object) + } + return(res) +} diff --git a/docs/news/index.html b/docs/news/index.html index 20f532ab..c3713a94 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -141,6 +141,14 @@ Source: NEWS.md +
+

+mkin 0.9.50.3 (unreleased) Unreleased +

+ +

mkin 0.9.50.2 (2020-05-12) 2020-05-12 diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index eb3f0f6e..77d13196 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -10,7 +10,7 @@ articles: NAFTA_examples: web_only/NAFTA_examples.html benchmarks: web_only/benchmarks.html compiled_models: web_only/compiled_models.html -last_built: 2020-05-14T15:07Z +last_built: 2020-05-14T16:37Z urls: reference: https://pkgdown.jrwb.de/mkin/reference article: https://pkgdown.jrwb.de/mkin/articles diff --git a/docs/reference/parms.html b/docs/reference/parms.html index f62b3898..cb705d2c 100644 --- a/docs/reference/parms.html +++ b/docs/reference/parms.html @@ -111,6 +111,9 @@ considering the error structure that was assumed for the fit." />
  • Example evaluation of NAFTA SOP Attachment examples
  • +
  • + Some benchmark timings +
  • @@ -151,6 +154,9 @@ considering the error structure that was assumed for the fit.

    parms(object, ...)
     
     # S3 method for mkinfit
    +parms(object, transformed = FALSE, ...)
    +
    +# S3 method for mmkin
     parms(object, transformed = FALSE, ...)

    Arguments

    @@ -158,7 +164,8 @@ considering the error structure that was assumed for the fit.

    object -

    A fitted model object

    +

    A fitted model object. Methods are implemented for +mkinfit() objects and for mmkin() objects.

    ... @@ -173,7 +180,10 @@ as used internally during the optimisation?

    Value

    -

    A numeric vector of fitted model parameters

    +

    For mkinfit objects, a numeric vector of fitted model parameters. +For mmkin row objects, a matrix with the parameters with a +row for each dataset. If the mmkin object has more than one row, a list of +such matrices is returned.

    Examples

    fit <- mkinfit("SFO", FOCUS_2006_C)
    #> Ordinary least squares optimisation
    #> Sum of squared residuals at call 1: 2388.077 @@ -190,7 +200,74 @@ as used internally during the optimisation?

    #> Sum of squared residuals at call 25: 196.5334 #> Negative log-likelihood at call 31: 26.64668
    #> Optimisation successfully terminated.
    parms(fit)
    #> parent_0 k_parent_sink sigma #> 82.4921598 0.3060633 4.6730124
    parms(fit, transformed = TRUE)
    #> parent_0 log_k_parent_sink sigma -#> 82.492160 -1.183963 4.673012
    +#> 82.492160 -1.183963 4.673012
  • ds <- lapply(experimental_data_for_UBA_2019[6:10], + function(x) subset(x$data[c("name", "time", "value")])) +names(ds) <- paste("Dataset", 6:10) +fits <- mmkin(c("SFO", "FOMC", "DFOP"), ds, quiet = TRUE) +parms(fits["SFO", ])
    #> Dataset 6 Dataset 7 Dataset 8 Dataset 9 Dataset 10 +#> parent_0 88.52275400 82.666781678 86.8547308 91.7779306 82.14809450 +#> k_parent_sink 0.05794659 0.009647805 0.2102974 0.1232258 0.00720421 +#> sigma 5.15274487 7.040168584 3.6769645 6.4669234 6.50457673
    parms(fits[, 2])
    #> $SFO +#> Dataset 7 +#> parent_0 82.666781678 +#> k_parent_sink 0.009647805 +#> sigma 7.040168584 +#> +#> $FOMC +#> Dataset 7 +#> parent_0 92.6837649 +#> alpha 0.4967832 +#> beta 14.1451255 +#> sigma 1.9167519 +#> +#> $DFOP +#> Dataset 7 +#> parent_0 91.058971503 +#> k1 0.044946770 +#> k2 0.002868336 +#> g 0.526942415 +#> sigma 2.221302196 +#>
    parms(fits)
    #> $SFO +#> Dataset 6 Dataset 7 Dataset 8 Dataset 9 Dataset 10 +#> parent_0 88.52275400 82.666781678 86.8547308 91.7779306 82.14809450 +#> k_parent_sink 0.05794659 0.009647805 0.2102974 0.1232258 0.00720421 +#> sigma 5.15274487 7.040168584 3.6769645 6.4669234 6.50457673 +#> +#> $FOMC +#> Dataset 6 Dataset 7 Dataset 8 Dataset 9 Dataset 10 +#> parent_0 95.558575 92.6837649 90.719787 98.383939 94.8481458 +#> alpha 1.338667 0.4967832 1.639099 1.074460 0.2805272 +#> beta 13.033315 14.1451255 5.007077 4.397126 6.9052224 +#> sigma 1.847671 1.9167519 1.066063 3.146056 1.6222778 +#> +#> $DFOP +#> Dataset 6 Dataset 7 Dataset 8 Dataset 9 Dataset 10 +#> parent_0 96.55213663 91.058971503 90.34509469 98.14858850 94.311323409 +#> k1 0.21954589 0.044946770 0.41232289 0.31697588 0.080663853 +#> k2 0.02957934 0.002868336 0.07581767 0.03260384 0.003425417 +#> g 0.44845068 0.526942415 0.66091965 0.65322767 0.342652880 +#> sigma 1.35690468 2.221302196 1.34169076 2.87159846 1.942067831 +#>
    parms(fits, transformed = TRUE)
    #> $SFO +#> Dataset 6 Dataset 7 Dataset 8 Dataset 9 Dataset 10 +#> parent_0 88.522754 82.666782 86.854731 91.777931 82.148094 +#> log_k_parent_sink -2.848234 -4.641025 -1.559232 -2.093737 -4.933090 +#> sigma 5.152745 7.040169 3.676964 6.466923 6.504577 +#> +#> $FOMC +#> Dataset 6 Dataset 7 Dataset 8 Dataset 9 Dataset 10 +#> parent_0 95.5585751 92.6837649 90.7197870 98.38393897 94.848146 +#> log_alpha 0.2916741 -0.6996015 0.4941466 0.07181816 -1.271085 +#> log_beta 2.5675088 2.6493701 1.6108523 1.48095106 1.932278 +#> sigma 1.8476712 1.9167519 1.0660627 3.14605557 1.622278 +#> +#> $DFOP +#> Dataset 6 Dataset 7 Dataset 8 Dataset 9 Dataset 10 +#> parent_0 96.5521366 91.05897150 90.3450947 98.1485885 94.311323 +#> log_k1 -1.5161940 -3.10227638 -0.8859485 -1.1489296 -2.517465 +#> log_k2 -3.5206791 -5.85402317 -2.5794240 -3.4233253 -5.676532 +#> g_ilr -0.1463234 0.07627854 0.4719196 0.4477805 -0.460676 +#> sigma 1.3569047 2.22130220 1.3416908 2.8715985 1.942068 +#>