aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorRanke Johannes <johannes.ranke@agroscope.admin.ch>2024-09-06 17:29:02 +0200
committerRanke Johannes <johannes.ranke@agroscope.admin.ch>2024-09-06 17:29:02 +0200
commit7b14afbeaa779009014ee866fe5e56edd3e8681d (patch)
tree7875bfab7c9da31e1c634a7bbc2a15989cac48e3 /docs
parentd34f2b003bee7eda8553c19d61ac21d2ce708f4e (diff)
parentba3eaa0d61d4980a61ebbcd105f07d21dd2aabb6 (diff)
Merge remote-tracking branch 'refs/remotes/origin/main'
Diffstat (limited to 'docs')
-rw-r--r--docs/404.html112
-rw-r--r--docs/articles/index.html129
-rw-r--r--docs/articles/mkin.html136
-rw-r--r--docs/authors.html124
-rw-r--r--docs/coverage/coverage.html69858
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/css/bootstrap-theme.min.css5
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/css/bootstrap.min.css5
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/js/bootstrap.min.js7
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/shim/html5shiv.min.js7
-rw-r--r--docs/coverage/lib/bootstrap-3.3.5/shim/respond.min.js8
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/css/crosstalk.min.css1
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js1474
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js.map37
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js2
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js.map1
-rw-r--r--docs/coverage/lib/crosstalk-1.2.1/scss/crosstalk.scss75
-rw-r--r--docs/coverage/lib/datatables-binding-0.33/datatables.js1539
-rw-r--r--docs/coverage/lib/datatables-css-0.0.0/datatables-crosstalk.css32
-rw-r--r--docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.extra.css28
-rw-r--r--docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.min.css1
-rw-r--r--docs/coverage/lib/dt-core-1.13.6/js/jquery.dataTables.min.js4
-rw-r--r--docs/coverage/lib/highlight.js-6.2/LICENSE24
-rw-r--r--docs/coverage/lib/highlight.js-6.2/highlight.pack.js1
-rw-r--r--docs/coverage/lib/highlight.js-6.2/rstudio.css81
-rw-r--r--docs/coverage/lib/htmltools-fill-0.5.8.1/fill.css21
-rw-r--r--docs/coverage/lib/htmlwidgets-1.6.4/htmlwidgets.js901
-rw-r--r--docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.js10881
-rw-r--r--docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.js2
-rw-r--r--docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.map1
-rw-r--r--docs/index.html136
-rw-r--r--docs/news/index.html117
-rw-r--r--docs/reference/BIC.mmkin.html8
-rw-r--r--docs/reference/FOCUS_2006_A.html8
-rw-r--r--docs/reference/FOCUS_2006_B.html8
-rw-r--r--docs/reference/FOCUS_2006_C.html8
-rw-r--r--docs/reference/FOCUS_2006_D.html8
-rw-r--r--docs/reference/FOCUS_2006_E.html8
-rw-r--r--docs/reference/FOCUS_2006_F.html8
-rw-r--r--docs/reference/NAFTA_SOP_Appendix_B.html8
-rw-r--r--docs/reference/NAFTA_SOP_Appendix_D.html8
-rw-r--r--docs/reference/Rplot001.pngbin13993 -> 1011 bytes
-rw-r--r--docs/reference/[.mhmkin.html8
-rw-r--r--docs/reference/aw.mixed.mmkin.html8
-rw-r--r--docs/reference/aw.mkinfit.html8
-rw-r--r--docs/reference/aw.mmkin.html8
-rw-r--r--docs/reference/aw.multistart.html8
-rw-r--r--docs/reference/backtransform_odeparms.html8
-rw-r--r--docs/reference/best.default.html8
-rw-r--r--docs/reference/best.html8
-rw-r--r--docs/reference/check_failed.html100
-rw-r--r--docs/reference/ds_dfop.html8
-rw-r--r--docs/reference/ds_dfop_sfo.html8
-rw-r--r--docs/reference/ds_fomc.html8
-rw-r--r--docs/reference/ds_hs.html8
-rw-r--r--docs/reference/ds_sfo.html8
-rw-r--r--docs/reference/f_time_norm_focus.mkindsg.html8
-rw-r--r--docs/reference/f_time_norm_focus.numeric.html8
-rw-r--r--docs/reference/hierarchical_kinetics.html125
-rw-r--r--docs/reference/html_listing.html8
-rw-r--r--docs/reference/illparms.mhmkin.html8
-rw-r--r--docs/reference/illparms.mkinfit.html8
-rw-r--r--docs/reference/illparms.mmkin.html8
-rw-r--r--docs/reference/illparms.saem.mmkin.html8
-rw-r--r--docs/reference/index.html725
-rw-r--r--docs/reference/intervals.html8
-rw-r--r--docs/reference/invilr.html8
-rw-r--r--docs/reference/loftest.mkinfit.html8
-rw-r--r--docs/reference/lrtest.html8
-rw-r--r--docs/reference/lrtest.mmkin.html8
-rw-r--r--docs/reference/max_twa_dfop.html8
-rw-r--r--docs/reference/max_twa_fomc.html8
-rw-r--r--docs/reference/max_twa_hs.html8
-rw-r--r--docs/reference/max_twa_sfo.html8
-rw-r--r--docs/reference/mhmkin.list.html8
-rw-r--r--docs/reference/mhmkin.mmkin.html8
-rw-r--r--docs/reference/mixed.mmkin.html8
-rw-r--r--docs/reference/mkinpredict.mkinfit.html8
-rw-r--r--docs/reference/mkinpredict.mkinmod.html8
-rw-r--r--docs/reference/mkinsub.html234
-rw-r--r--docs/reference/multistart.saem.mmkin.html8
-rw-r--r--docs/reference/nlme_data.html8
-rw-r--r--docs/reference/parms.mkinfit.html8
-rw-r--r--docs/reference/parms.mmkin.html8
-rw-r--r--docs/reference/parms.multistart.html8
-rw-r--r--docs/reference/parms.saem.mmkin.html8
-rw-r--r--docs/reference/parplot.multistart.saem.mmkin.html8
-rw-r--r--docs/reference/plot_err.html8
-rw-r--r--docs/reference/plot_res.html8
-rw-r--r--docs/reference/plot_sep.html8
-rw-r--r--docs/reference/print.illparms.mhmkin.html8
-rw-r--r--docs/reference/print.illparms.mkinfit.html8
-rw-r--r--docs/reference/print.illparms.mmkin.html8
-rw-r--r--docs/reference/print.illparms.saem.mmkin.html8
-rw-r--r--docs/reference/print.mhmkin.html8
-rw-r--r--docs/reference/print.mixed.mmkin.html8
-rw-r--r--docs/reference/print.mkinds.html194
-rw-r--r--docs/reference/print.mkindsg.html8
-rw-r--r--docs/reference/print.mkinmod.html214
-rw-r--r--docs/reference/print.mmkin.html194
-rw-r--r--docs/reference/print.multistart.html8
-rw-r--r--docs/reference/print.nafta.html8
-rw-r--r--docs/reference/print.nlme.mmkin.html8
-rw-r--r--docs/reference/print.saem.mmkin.html8
-rw-r--r--docs/reference/print.status.mhmkin.html8
-rw-r--r--docs/reference/print.status.mmkin.html8
-rw-r--r--docs/reference/print.summary.mkinfit.html8
-rw-r--r--docs/reference/print.summary.mmkin.html8
-rw-r--r--docs/reference/print.summary.nlme.mmkin.html8
-rw-r--r--docs/reference/print.summary.saem.mmkin.html8
-rw-r--r--docs/reference/saem.mmkin.html8
-rw-r--r--docs/reference/saemix_data.html8
-rw-r--r--docs/reference/saemix_model.html8
-rw-r--r--docs/reference/schaefer07_complex_results.html8
-rw-r--r--docs/reference/set_nd_nq_focus.html8
-rw-r--r--docs/reference/status.mhmkin.html8
-rw-r--r--docs/reference/status.mmkin.html8
-rw-r--r--docs/reference/tex_listing.html149
-rw-r--r--docs/reference/update.nlme.mmkin.html8
-rw-r--r--docs/reference/which.best.default.html8
-rw-r--r--docs/reference/which.best.html8
-rw-r--r--docs/search.json2
-rw-r--r--docs/sitemap.xml469
122 files changed, 86661 insertions, 2135 deletions
diff --git a/docs/404.html b/docs/404.html
index b85f954e..22e29157 100644
--- a/docs/404.html
+++ b/docs/404.html
@@ -8,87 +8,73 @@
<title>Page not found (404) • mkin</title>
<script src="https://pkgdown.jrwb.de/mkin/deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="https://pkgdown.jrwb.de/mkin/deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet">
-<script src="https://pkgdown.jrwb.de/mkin/deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous">
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous">
-<!-- bootstrap-toc --><script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@v1.0.1/dist/bootstrap-toc.min.js" integrity="sha256-4veVQbu7//Lk5TSmc7YV48MxtMy98e26cf5MrgZYnwo=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="https://pkgdown.jrwb.de/mkin/pkgdown.js"></script><meta property="og:title" content="Page not found (404)">
-<!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]-->
+<script src="https://pkgdown.jrwb.de/mkin/deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="https://pkgdown.jrwb.de/mkin/pkgdown.js"></script><meta property="og:title" content="Page not found (404)">
</head>
<body>
<a href="https://pkgdown.jrwb.de/mkin/#main" class="visually-hidden-focusable">Skip to contents</a>
-
- <nav class="navbar fixed-top navbar-default navbar-expand-lg bg-light"><div class="container">
-
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
<a class="navbar-brand me-2" href="https://pkgdown.jrwb.de/mkin/index.html">mkin</a>
- <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.6</small>
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
<ul class="navbar-nav me-auto">
-<li class="nav-item">
- <a class="nav-link" href="https://pkgdown.jrwb.de/mkin/reference/index.html">Reference</a>
-</li>
+<li class="nav-item"><a class="nav-link" href="https://pkgdown.jrwb.de/mkin/reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
- <a href="https://pkgdown.jrwb.de/mkin/#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-articles">Articles</a>
- <div class="dropdown-menu" aria-labelledby="dropdown-articles">
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/mkin.html">Introduction to mkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/multistart.html">Short demo of the multistart method</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Performance</h6>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- <a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </div>
-</li>
-<li class="nav-item">
- <a class="nav-link" href="https://pkgdown.jrwb.de/mkin/news/index.html">News</a>
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles">
+<li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul>
</li>
+<li class="nav-item"><a class="nav-link" href="https://pkgdown.jrwb.de/mkin/coverage/coverage.html">Test coverage</a></li>
+<li class="nav-item"><a class="nav-link" href="https://pkgdown.jrwb.de/mkin/news/index.html">News</a></li>
</ul>
-<form class="form-inline my-2 my-lg-0" role="search">
- <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="search.json" id="search-input" placeholder="Search for" autocomplete="off">
-</form>
-
- <ul class="navbar-nav">
-<li class="nav-item">
- <a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="github">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
+<ul class="navbar-nav">
+<li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="search.json">
+</form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
</ul>
</div>
-
+
</div>
</nav><div class="container template-title-body">
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
- <img src="https://pkgdown.jrwb.de/mkin/" class="logo" alt=""><h1>Page not found (404)</h1>
-
+
+ <h1>Page not found (404)</h1>
+
</div>
Content not found. Please use links in the navbar.
@@ -98,21 +84,19 @@ Content not found. Please use links in the navbar.
<footer><div class="pkgdown-footer-left">
- <p></p>
-<p>Developed by Johannes Ranke.</p>
+ <p>Developed by Johannes Ranke.</p>
</div>
<div class="pkgdown-footer-right">
- <p></p>
-<p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.7.</p>
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
</div>
</footer>
</div>
-
-
+
+
</body>
</html>
diff --git a/docs/articles/index.html b/docs/articles/index.html
index c6a8604e..0d62e494 100644
--- a/docs/articles/index.html
+++ b/docs/articles/index.html
@@ -1,87 +1,68 @@
<!DOCTYPE html>
-<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Articles • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- bootstrap-toc --><script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@v1.0.1/dist/bootstrap-toc.min.js" integrity="sha256-4veVQbu7//Lk5TSmc7YV48MxtMy98e26cf5MrgZYnwo=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Articles"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]--></head><body>
+<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Articles • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Articles"></head><body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
-
- <nav class="navbar fixed-top navbar-default navbar-expand-lg bg-light"><div class="container">
-
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
<a class="navbar-brand me-2" href="../index.html">mkin</a>
- <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.6</small>
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
- <ul class="navbar-nav me-auto"><li class="nav-item">
- <a class="nav-link" href="../reference/index.html">Reference</a>
-</li>
+ <ul class="navbar-nav me-auto"><li class="nav-item"><a class="nav-link" href="../reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
- <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-articles">Articles</a>
- <div class="dropdown-menu" aria-labelledby="dropdown-articles">
- <a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6>
- <a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- <a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- <a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a>
- <a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a>
- <a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Performance</h6>
- <a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- <a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- <a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6>
- <a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- <a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </div>
-</li>
-<li class="nav-item">
- <a class="nav-link" href="../news/index.html">News</a>
-</li>
- </ul><form class="form-inline my-2 my-lg-0" role="search">
- <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="../search.json" id="search-input" placeholder="Search for" autocomplete="off"></form>
-
- <ul class="navbar-nav"><li class="nav-item">
- <a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="github">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles"><li><a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul></li>
+<li class="nav-item"><a class="nav-link" href="../coverage/coverage.html">Test coverage</a></li>
+<li class="nav-item"><a class="nav-link" href="../news/index.html">News</a></li>
+ </ul><ul class="navbar-nav"><li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json"></form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
</ul></div>
-
+
</div>
</nav><div class="container template-article-index">
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
- <img src="" class="logo" alt=""><h1>Articles</h1>
+
+ <h1>Articles</h1>
</div>
<div class="section ">
<h3>All vignettes</h3>
- <p class="section-desc"></p>
+ <div class="section-desc"></div>
- <dl><dt><a href="FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></dt>
- <dd>
- </dd><dt><a href="FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></dt>
- <dd>
- </dd><dt><a href="mkin.html">Short introduction to mkin</a></dt>
- <dd>
- </dd><dt><a href="prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></dt>
+ <dl><dt><a href="prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></dt>
<dd>
</dd><dt><a href="prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></dt>
<dd>
@@ -89,39 +70,45 @@
<dd>
</dd><dt><a href="prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></dt>
<dd>
- </dd><dt><a href="twa.html">Calculation of time weighted average concentrations with mkin</a></dt>
- <dd>
- </dd><dt><a href="web_only/FOCUS_Z.html">Example evaluation of FOCUS dataset Z</a></dt>
- <dd>
- </dd><dt><a href="web_only/NAFTA_examples.html">Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance</a></dt>
- <dd>
</dd><dt><a href="web_only/benchmarks.html">Benchmark timings for mkin</a></dt>
<dd>
</dd><dt><a href="web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></dt>
<dd>
</dd><dt><a href="web_only/dimethenamid_2018.html">Example evaluations of the dimethenamid data from 2018</a></dt>
<dd>
+ </dd><dt><a href="FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></dt>
+ <dd>
+ </dd><dt><a href="FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></dt>
+ <dd>
+ </dd><dt><a href="web_only/FOCUS_Z.html">Example evaluation of FOCUS dataset Z</a></dt>
+ <dd>
+ </dd><dt><a href="mkin.html">Short introduction to mkin</a></dt>
+ <dd>
</dd><dt><a href="web_only/multistart.html">Short demo of the multistart method</a></dt>
<dd>
+ </dd><dt><a href="web_only/NAFTA_examples.html">Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance</a></dt>
+ <dd>
</dd><dt><a href="web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></dt>
<dd>
+ </dd><dt><a href="twa.html">Calculation of time weighted average concentrations with mkin</a></dt>
+ <dd>
</dd></dl></div>
</main></div>
<footer><div class="pkgdown-footer-left">
- <p></p><p>Developed by Johannes Ranke.</p>
+ <p>Developed by Johannes Ranke.</p>
</div>
<div class="pkgdown-footer-right">
- <p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.7.</p>
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
</div>
</footer></div>
-
-
+
+
</body></html>
diff --git a/docs/articles/mkin.html b/docs/articles/mkin.html
index 68755a66..b6ca47ad 100644
--- a/docs/articles/mkin.html
+++ b/docs/articles/mkin.html
@@ -5,86 +5,69 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-<meta name="description" content="mkin">
<title>Short introduction to mkin • mkin</title>
<script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet">
-<script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous">
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous">
-<!-- bootstrap-toc --><script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@v1.0.1/dist/bootstrap-toc.min.js" integrity="sha256-4veVQbu7//Lk5TSmc7YV48MxtMy98e26cf5MrgZYnwo=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Short introduction to mkin">
-<meta property="og:description" content="mkin">
-<!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]-->
+<script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Short introduction to mkin">
</head>
<body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
-
- <nav class="navbar fixed-top navbar-default navbar-expand-lg bg-light"><div class="container">
-
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
<a class="navbar-brand me-2" href="../index.html">mkin</a>
- <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.6</small>
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
<ul class="navbar-nav me-auto">
-<li class="nav-item">
- <a class="nav-link" href="../reference/index.html">Reference</a>
-</li>
+<li class="nav-item"><a class="nav-link" href="../reference/index.html">Reference</a></li>
<li class="active nav-item dropdown">
- <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-articles">Articles</a>
- <div class="dropdown-menu" aria-labelledby="dropdown-articles">
- <a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6>
- <a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- <a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- <a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a>
- <a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a>
- <a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Performance</h6>
- <a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- <a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- <a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6>
- <a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- <a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </div>
-</li>
-<li class="nav-item">
- <a class="nav-link" href="../news/index.html">News</a>
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles">
+<li><a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul>
</li>
+<li class="nav-item"><a class="nav-link" href="../coverage/coverage.html">Test coverage report</a></li>
+<li class="nav-item"><a class="nav-link" href="../news/index.html">News</a></li>
</ul>
-<form class="form-inline my-2 my-lg-0" role="search">
- <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="../search.json" id="search-input" placeholder="Search for" autocomplete="off">
-</form>
-
- <ul class="navbar-nav">
-<li class="nav-item">
- <a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="github">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
+<ul class="navbar-nav">
+<li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json">
+</form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
</ul>
</div>
-
+
</div>
</nav><div class="container template-article">
@@ -93,12 +76,13 @@
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
- <img src="" class="logo" alt=""><h1>Short introduction to mkin</h1>
+
+ <h1>Short introduction to mkin</h1>
<h4 data-toc-skip class="author">Johannes
Ranke</h4>
<h4 data-toc-skip class="date">Last change 18 May 2023
-(rebuilt 2023-11-16)</h4>
+(rebuilt 2024-07-29)</h4>
<small class="dont-index">Source: <a href="https://github.com/jranke/mkin/blob/HEAD/vignettes/mkin.rmd" class="external-link"><code>vignettes/mkin.rmd</code></a></small>
<div class="d-none name"><code>mkin.rmd</code></div>
@@ -184,8 +168,9 @@ was already available, and provided a good basis for developing a
package specifically tailored to the task. The remaining challenge was
to make it as easy as possible for the users (including the author of
this vignette) to specify the system of differential equations and to
-include the output requested by the FOCUS guidance, such as the <span class="math inline">\(\chi^2\)</span> error level as defined in this
-guidance.</p>
+include the output requested by the FOCUS guidance, such as the
+<math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><msup><mi>χ</mi><mn>2</mn></msup><annotation encoding="application/x-tex">\chi^2</annotation></semantics></math>
+error level as defined in this guidance.</p>
<p>Also, <code>mkin</code> introduced using analytical solutions for
parent only kinetics for improved optimization speed. Later, Eigenvalue
based solutions were introduced to <code>mkin</code> for the case of
@@ -323,13 +308,14 @@ reliability of parameter estimates, based on the FOCUS guidance
mentioned above. Therefore, the results of this one-sided t-test are
included in the summary output from <code>mkin</code>.</p>
<p>As it is not reasonable to test for significant difference of the
-transformed parameters (<em>e.g.</em> <span class="math inline">\(log(k)\)</span>) from zero, the t-test is
-calculated based on the model definition before parameter
-transformation, <em>i.e.</em> in a similar way as in packages that do
-not apply such an internal parameter transformation. A note is included
-in the <code>mkin</code> output, pointing to the fact that the t-test is
-based on the unjustified assumption of normal distribution of the
-parameter estimators.</p>
+transformed parameters (<em>e.g.</em>
+<math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>l</mi><mi>o</mi><mi>g</mi><mrow><mo stretchy="true" form="prefix">(</mo><mi>k</mi><mo stretchy="true" form="postfix">)</mo></mrow></mrow><annotation encoding="application/x-tex">log(k)</annotation></semantics></math>)
+from zero, the t-test is calculated based on the model definition before
+parameter transformation, <em>i.e.</em> in a similar way as in packages
+that do not apply such an internal parameter transformation. A note is
+included in the <code>mkin</code> output, pointing to the fact that the
+t-test is based on the unjustified assumption of normal distribution of
+the parameter estimators.</p>
</div>
</div>
<div class="section level2">
@@ -400,28 +386,26 @@ Sensitivity and Monte Carlo Analysis in <span>R</span> Using Package
</div>
</div>
</div>
- </main><aside class="col-md-3"><nav id="toc"><h2>On this page</h2>
+ </main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
</nav></aside>
</div>
<footer><div class="pkgdown-footer-left">
- <p></p>
-<p>Developed by Johannes Ranke.</p>
+ <p>Developed by Johannes Ranke.</p>
</div>
<div class="pkgdown-footer-right">
- <p></p>
-<p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.7.</p>
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
</div>
</footer>
</div>
-
-
+
+
</body>
</html>
diff --git a/docs/authors.html b/docs/authors.html
index 088db2aa..56bae28c 100644
--- a/docs/authors.html
+++ b/docs/authors.html
@@ -1,130 +1,118 @@
<!DOCTYPE html>
-<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Authors and Citation • mkin</title><script src="deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- bootstrap-toc --><script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@v1.0.1/dist/bootstrap-toc.min.js" integrity="sha256-4veVQbu7//Lk5TSmc7YV48MxtMy98e26cf5MrgZYnwo=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="pkgdown.js"></script><meta property="og:title" content="Authors and Citation"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]--></head><body>
+<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Authors and Citation • mkin</title><script src="deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="pkgdown.js"></script><meta property="og:title" content="Authors and Citation"></head><body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
-
- <nav class="navbar fixed-top navbar-default navbar-expand-lg bg-light"><div class="container">
-
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
<a class="navbar-brand me-2" href="index.html">mkin</a>
- <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.6</small>
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
- <ul class="navbar-nav me-auto"><li class="nav-item">
- <a class="nav-link" href="reference/index.html">Reference</a>
-</li>
+ <ul class="navbar-nav me-auto"><li class="nav-item"><a class="nav-link" href="reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
- <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-articles">Articles</a>
- <div class="dropdown-menu" aria-labelledby="dropdown-articles">
- <a class="dropdown-item" href="articles/mkin.html">Introduction to mkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6>
- <a class="dropdown-item" href="articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- <a class="dropdown-item" href="articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- <a class="dropdown-item" href="articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6>
- <a class="dropdown-item" href="articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a>
- <a class="dropdown-item" href="articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a>
- <a class="dropdown-item" href="articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a>
- <a class="dropdown-item" href="articles/web_only/multistart.html">Short demo of the multistart method</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Performance</h6>
- <a class="dropdown-item" href="articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- <a class="dropdown-item" href="articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- <a class="dropdown-item" href="articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6>
- <a class="dropdown-item" href="articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- <a class="dropdown-item" href="articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </div>
-</li>
-<li class="nav-item">
- <a class="nav-link" href="news/index.html">News</a>
-</li>
- </ul><form class="form-inline my-2 my-lg-0" role="search">
- <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="search.json" id="search-input" placeholder="Search for" autocomplete="off"></form>
-
- <ul class="navbar-nav"><li class="nav-item">
- <a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="github">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles"><li><a class="dropdown-item" href="articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul></li>
+<li class="nav-item"><a class="nav-link" href="coverage/coverage.html">Test coverage</a></li>
+<li class="nav-item"><a class="nav-link" href="news/index.html">News</a></li>
+ </ul><ul class="navbar-nav"><li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="search.json"></form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
</ul></div>
-
+
</div>
</nav><div class="container template-citation-authors">
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
- <img src="" class="logo" alt=""><h1>Authors and Citation</h1>
+
+ <h1>Authors and Citation</h1>
</div>
- <div class="section level2 citation">
+ <div class="section level2">
<h2>Authors</h2>
-
+
<ul class="list-unstyled"><li>
<p><strong>Johannes Ranke</strong>. Author, maintainer, copyright holder. <a href="https://orcid.org/0000-0003-4371-6538" target="orcid.widget" aria-label="ORCID" class="external-link"><span class="fab fa-orcid orcid" aria-hidden="true"></span></a>
</p>
</li>
<li>
- <p><strong>Katrin Lindenberger</strong>. Contributor.
+ <p><strong>Katrin Lindenberger</strong>. Contributor.
<br><small>contributed to mkinresplot()</small></p>
</li>
<li>
- <p><strong>René Lehmann</strong>. Contributor.
+ <p><strong>René Lehmann</strong>. Contributor.
<br><small>ilr() and invilr()</small></p>
</li>
<li>
- <p><strong>Eurofins Regulatory AG</strong>. Copyright holder.
+ <p><strong>Eurofins Regulatory AG</strong>. Copyright holder.
<br><small>copyright for some of the contributions of JR 2012-2014</small></p>
</li>
</ul></div>
- <div class="section level2 citation">
+ <div class="section level2">
<h2 id="citation">Citation</h2>
<p><small class="dont-index">Source: <a href="https://github.com/jranke/mkin/blob/HEAD/DESCRIPTION" class="external-link"><code>DESCRIPTION</code></a></small></p>
- <p>Ranke J (2023).
+ <p>Ranke J (2024).
<em>mkin: Kinetic Evaluation of Chemical Degradation Data</em>.
-R package version 1.2.6, <a href="https://pkgdown.jrwb.de/mkin/">https://pkgdown.jrwb.de/mkin/</a>.
+R package version 1.2.9, <a href="https://pkgdown.jrwb.de/mkin/">https://pkgdown.jrwb.de/mkin/</a>.
</p>
<pre>@Manual{,
title = {mkin: Kinetic Evaluation of Chemical Degradation Data},
author = {Johannes Ranke},
- year = {2023},
- note = {R package version 1.2.6},
+ year = {2024},
+ note = {R package version 1.2.9},
url = {https://pkgdown.jrwb.de/mkin/},
}</pre>
</div>
- </main><aside class="col-md-3"><nav id="toc"><h2>On this page</h2>
+
+ </main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
</nav></aside></div>
<footer><div class="pkgdown-footer-left">
- <p></p><p>Developed by Johannes Ranke.</p>
+ <p>Developed by Johannes Ranke.</p>
</div>
<div class="pkgdown-footer-right">
- <p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.7.</p>
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
</div>
</footer></div>
-
-
+
+
</body></html>
diff --git a/docs/coverage/coverage.html b/docs/coverage/coverage.html
new file mode 100644
index 00000000..749ccdd0
--- /dev/null
+++ b/docs/coverage/coverage.html
@@ -0,0 +1,69858 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8"/>
+<style>body{background-color:white;}</style>
+<link href="lib/htmltools-fill-0.5.8.1/fill.css" rel="stylesheet" />
+<script src="lib/htmlwidgets-1.6.4/htmlwidgets.js"></script>
+<link href="lib/datatables-css-0.0.0/datatables-crosstalk.css" rel="stylesheet" />
+<script src="lib/datatables-binding-0.33/datatables.js"></script>
+<script src="lib/jquery-3.6.0/jquery-3.6.0.min.js"></script>
+<link href="lib/dt-core-1.13.6/css/jquery.dataTables.min.css" rel="stylesheet" />
+<link href="lib/dt-core-1.13.6/css/jquery.dataTables.extra.css" rel="stylesheet" />
+<script src="lib/dt-core-1.13.6/js/jquery.dataTables.min.js"></script>
+<link href="lib/crosstalk-1.2.1/css/crosstalk.min.css" rel="stylesheet" />
+<script src="lib/crosstalk-1.2.1/js/crosstalk.min.js"></script>
+<link href="lib/highlight.js-6.2/rstudio.css" rel="stylesheet" />
+<script src="lib/highlight.js-6.2/highlight.pack.js"></script>
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<link href="lib/bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet" />
+<link href="lib/bootstrap-3.3.5/css/bootstrap-theme.min.css" rel="stylesheet" />
+<script src="lib/bootstrap-3.3.5/js/bootstrap.min.js"></script>
+<script src="lib/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
+<script src="lib/bootstrap-3.3.5/shim/respond.min.js"></script>
+
+</head>
+<body>
+<div class="container-fluid">
+ <style type="text/css">table tr:hover td {
+ font-weight:bold;text-decoration:none
+}
+table tr.covered td{
+ background-color:rgba(95,151,68,0.3)
+}
+
+table tr:hover.covered .num{
+ background-color:rgba(95,151,68,0.7)
+}
+table tr.missed td{
+ background-color:rgba(185,73,71,0.3)
+}
+table tr:hover.missed .num{
+ background-color:rgba(185,73,71,0.7)
+}
+
+table tr.missed:hover td{
+ -webkit-box-shadow:0 -2px 0 0 #b94947 inset;
+ -moz-box-shadow:0 -2px 0 0 #b94947 inset;
+ box-shadow:0 -2px 0 0 #b94947 inset
+}
+table tr.covered:hover td{
+ -webkit-box-shadow:0 -2px 0 0 #5f9744 inset;
+ -moz-box-shadow:0 -2px 0 0 #5f9744 inset;
+ box-shadow:0 -2px 0 0 #5f9744 inset
+}
+
+table tr.never td{
+ background-color:transparent
+}
+
+table tbody {
+ border-style: solid;
+ border: 1px solid rgba(0,0,0,0.1)
+}
+
+table .num {
+ border-right: 1px solid rgba(0,0,0,0.1)
+}
+
+td.coverage em {
+ opacity: 0.5;
+}
+
+table td.coverage {
+ border-right: 1px solid rgba(0,0,0,0.1);
+ font-weight: bold;
+ text-align: center;
+}
+table.table-condensed pre {
+ background-color: transparent;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 11px;
+}
+div#files td {
+ padding: 0;
+ padding-left: 5px;
+}
+
+div#files td.num {
+ padding-right: 5px;
+}
+
+table.table-condensed {
+ font-size: 11px;
+}</style>
+ <div class="col-md-8 col-md-offset-2">
+ <h2>mkin coverage - 89.32%</h2>
+ <div class="tabbable">
+ <ul class="nav nav-tabs" data-tabsetid="covr">
+ <li class="active">
+ <a href="#tab-covr-1" data-toggle="tab" data-value="Files">Files</a>
+ </li>
+ <li>
+ <a href="#tab-covr-2" data-toggle="tab" data-value="Source">Source</a>
+ </li>
+ </ul>
+ <div class="tab-content" data-tabsetid="covr">
+ <div class="tab-pane active" title="Files" data-value="Files" id="tab-covr-1">
+ <div class="datatables html-widget html-fill-item" id="htmlwidget-df8b8ed832d104ae69ed" style="width:100%;height:500px;"></div>
+ <script type="application/json" data-for="htmlwidget-df8b8ed832d104ae69ed">{"x":{"filter":"none","vertical":false,"fillContainer":false,"data":[["<a href=\"#\">R/summary_listing.R<\/a>","<a href=\"#\">R/hierarchical_kinetics.R<\/a>","<a href=\"#\">R/aw.R<\/a>","<a href=\"#\">R/multistart.R<\/a>","<a href=\"#\">R/status.R<\/a>","<a href=\"#\">R/parms.R<\/a>","<a href=\"#\">R/lrtest.mkinfit.R<\/a>","<a href=\"#\">R/mkinresplot.R<\/a>","<a href=\"#\">R/mkinds.R<\/a>","<a href=\"#\">R/f_time_norm_focus.R<\/a>","<a href=\"#\">R/loftest.R<\/a>","<a href=\"#\">R/read_spreadsheet.R<\/a>","<a href=\"#\">R/mhmkin.R<\/a>","<a href=\"#\">R/plot.mixed.mmkin.R<\/a>","<a href=\"#\">R/plot.mkinfit.R<\/a>","<a href=\"#\">R/mkinpredict.R<\/a>","<a href=\"#\">R/update.mkinfit.R<\/a>","<a href=\"#\">R/anova.saem.mmkin.R<\/a>","<a href=\"#\">R/plot.mmkin.R<\/a>","<a href=\"#\">R/max_twa_parent.R<\/a>","<a href=\"#\">R/nafta.R<\/a>","<a href=\"#\">R/saem.R<\/a>","<a href=\"#\">R/llhist.R<\/a>","<a href=\"#\">R/illparms.R<\/a>","<a href=\"#\">R/mkin_wide_to_long.R<\/a>","<a href=\"#\">R/summary.saem.mmkin.R<\/a>","<a href=\"#\">R/summary.nlme.mmkin.R<\/a>","<a href=\"#\">R/summary.mkinfit.R<\/a>","<a href=\"#\">R/mean_degparms.R<\/a>","<a href=\"#\">R/transform_odeparms.R<\/a>","<a href=\"#\">R/mkinmod.R<\/a>","<a href=\"#\">R/mkinfit.R<\/a>","<a href=\"#\">R/endpoints.R<\/a>","<a href=\"#\">R/intervals.R<\/a>","<a href=\"#\">R/ilr.R<\/a>","<a href=\"#\">R/set_nd_nq.R<\/a>","<a href=\"#\">R/parplot.R<\/a>","<a href=\"#\">R/mkinparplot.R<\/a>","<a href=\"#\">R/nlme.R<\/a>","<a href=\"#\">R/mixed.mmkin.R<\/a>","<a href=\"#\">R/mkinerrplot.R<\/a>","<a href=\"#\">R/nlme.mmkin.R<\/a>","<a href=\"#\">R/mmkin.R<\/a>","<a href=\"#\">R/confint.mkinfit.R<\/a>","<a href=\"#\">R/create_deg_func.R<\/a>","<a href=\"#\">R/mkinerrmin.R<\/a>","<a href=\"#\">R/CAKE_export.R<\/a>","<a href=\"#\">R/summary.mmkin.R<\/a>","<a href=\"#\">R/AIC.mmkin.R<\/a>","<a href=\"#\">R/parent_solutions.R<\/a>","<a href=\"#\">R/residuals.mkinfit.R<\/a>","<a href=\"#\">R/add_err.R<\/a>","<a href=\"#\">R/mkin_long_to_wide.R<\/a>","<a href=\"#\">R/logLik.mkinfit.R<\/a>","<a href=\"#\">R/nobs.mkinfit.R<\/a>","<a href=\"#\">R/sigma_twocomp.R<\/a>","<a href=\"#\">R/mkinsub.R<\/a>"],[59,59,84,224,117,82,80,94,178,112,112,120,300,380,336,271,61,114,157,125,153,867,43,168,35,317,240,291,68,278,513,985,255,102,89,164,124,75,145,103,107,267,199,238,159,120,95,56,68,238,31,104,29,43,8,54,17],[28,14,27,76,59,22,20,26,44,39,28,46,110,183,109,87,23,62,47,48,58,466,18,66,11,149,116,167,28,88,225,452,159,53,18,56,64,47,62,31,37,83,51,69,95,43,41,20,17,15,13,12,6,5,1,1,1],[0,0,17,49,39,16,15,21,36,32,23,38,91,152,91,74,20,54,41,42,51,411,16,60,10,136,106,155,26,82,211,425,150,50,17,53,61,45,60,30,36,81,50,68,95,43,41,20,17,15,13,12,6,5,1,1,1],[28,14,10,27,20,6,5,5,8,7,5,8,19,31,18,13,3,8,6,6,7,55,2,6,1,13,10,12,2,6,14,27,9,3,1,3,3,2,2,1,1,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],["0","0","403","168","482","20261","5","976","102","290","1","305","305","634","738","19867308","4","509","523","2","179","2273233","225","867","1025","500","323","44586","6538","30119107","4421","292559","29490","3125","529091","18","160","104","1217374","149","206","3258","1963","773","4031","72485","337","1","247","426770","1607","1285","535","166798","166810","4250","9864"],["0.00%","0.00%","62.96%","64.47%","66.10%","72.73%","75.00%","80.77%","81.82%","82.05%","82.14%","82.61%","82.73%","83.06%","83.49%","85.06%","86.96%","87.10%","87.23%","87.50%","87.93%","88.20%","88.89%","90.91%","90.91%","91.28%","91.38%","92.81%","92.86%","93.18%","93.78%","94.03%","94.34%","94.34%","94.44%","94.64%","95.31%","95.74%","96.77%","96.77%","97.30%","97.59%","98.04%","98.55%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%","100.00%"]],"container":"<table class=\"row-border\">\n <thead>\n <tr>\n <th>File<\/th>\n <th>Lines<\/th>\n <th>Relevant<\/th>\n <th>Covered<\/th>\n <th>Missed<\/th>\n <th>Hits / Line<\/th>\n <th>Coverage<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"searching":false,"dom":"t","paging":false,"columnDefs":[{"targets":6,"createdCell":"function(td, cellData, rowData, row, col) {\n var percent = cellData.replace(\"%\", \"\");\n if (percent > 90) {\n var grad = \"linear-gradient(90deg, #edfde7 \" + cellData + \", white \" + cellData + \")\";\n } else if (percent > 75) {\n var grad = \"linear-gradient(90deg, #f9ffe5 \" + cellData + \", white \" + cellData + \")\";\n } else {\n var grad = \"linear-gradient(90deg, #fcece9 \" + cellData + \", white \" + cellData + \")\";\n }\n $(td).css(\"background\", grad);\n}\n"},{"className":"dt-right","targets":[1,2,3,4]},{"name":"File","targets":0},{"name":"Lines","targets":1},{"name":"Relevant","targets":2},{"name":"Covered","targets":3},{"name":"Missed","targets":4},{"name":"Hits / Line","targets":5},{"name":"Coverage","targets":6}],"order":[],"autoWidth":false,"orderClasses":false},"callback":"function(table) {\ntable.on('click.dt', 'a', function() {\n files = $('div#files div');\n files.not('div.hidden').addClass('hidden');\n id = $(this).text();\n files.filter('div[id=\\'' + id + '\\']').removeClass('hidden');\n $('ul.nav a[data-value=Source]').text(id).tab('show');\n});\n}"},"evals":["options.columnDefs.0.createdCell","callback"],"jsHooks":[]}</script>
+ </div>
+ <div class="tab-pane" title="Source" data-value="Source" id="tab-covr-2">
+ <div id="files">
+ <div id="R/saem.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("predicted", "std"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fit nonlinear mixed models with SAEM</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function uses [saemix::saemix()] as a backend for fitting nonlinear mixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effects models created from [mmkin] row objects using the Stochastic Approximation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Expectation Maximisation algorithm (SAEM).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' An mmkin row object is essentially a list of mkinfit objects that have been</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' obtained by fitting the same model to a list of datasets using [mkinfit].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Starting values for the fixed effects (population mean parameters, argument</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' psi0 of [saemix::saemixModel()] are the mean values of the parameters found</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using [mmkin].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom utils packageVersion</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom saemix saemix</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An [mmkin] row object containing several fits of the same</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mkinmod] model to different datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose Should we print information about created objects of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' type [saemix::SaemixModel] and [saemix::SaemixData]?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transformations Per default, all parameter transformations are done</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in mkin. If this argument is set to 'saemix', parameter transformations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are done in 'saemix' for the supported cases, i.e. (as of version 1.1.2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO, FOMC, DFOP and HS without fixing `parent_0`, and SFO or DFOP with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' one SFO metabolite.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param error_model Possibility to override the error model used in the mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param degparms_start Parameter values given as a named numeric vector will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be used to override the starting values obtained from the 'mmkin' object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test_log_parms If TRUE, an attempt is made to use more robust starting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values for population parameters fitted as log parameters in mkin (like</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rate constants) by only considering rate constants that pass the t-test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' when calculating mean degradation parameters using [mean_degparms].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level Possibility to adjust the required confidence level</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for parameter that are tested if requested by 'test_log_parms'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param solution_type Possibility to specify the solution type in case the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' automatic choice is not desired</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param no_random_effect Character vector of degradation parameters for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which there should be no variability over the groups. Only used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if the covariance model is not explicitly specified.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariance.model Will be passed to [saemix::saemixModel()]. Per</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' default, uncorrelated random effects are specified for all degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param omega.init Will be passed to [saemix::saemixModel()]. If using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkin transformations and the default covariance model with optionally</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' excluded random effects, the variances of the degradation parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are estimated using [mean_degparms], with testing of untransformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log parameters for significant difference from zero. If not using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkin transformations or a custom covariance model, the default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' initialisation of [saemix::saemixModel] is used for omega.init.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariates A data frame with covariate data for use in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'covariate_models', with dataset names as row names.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariate_models A list containing linear model formulas with one explanatory</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable, i.e. of the type 'parameter ~ covariate'. Covariates must be available</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the 'covariates' data frame.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param error.init Will be passed to [saemix::saemixModel()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Should we suppress the messages saemix prints at the beginning</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and the end of the optimisation process?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param nbiter.saemix Convenience option to increase the number of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' iterations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param control Passed to [saemix::saemix].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further parameters passed to [saemix::saemixModel].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An S3 object of class 'saem.mmkin', containing the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [saemix::SaemixObject] as a list component named 'so'. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object also inherits from 'mixed.mmkin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [summary.saem.mmkin] [plot.mixed.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) subset(x$data[c("name", "time", "value")]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds) &lt;- paste("Dataset", 6:10)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin_parent_p0_fixed &lt;- mmkin("FOMC", ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' state.ini = c(parent = 100), fixed_initials = "parent", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_p0_fixed &lt;- saem(f_mmkin_parent_p0_fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin_parent &lt;- mmkin(c("SFO", "FOMC", "DFOP"), ds, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_sfo &lt;- saem(f_mmkin_parent["SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_fomc &lt;- saem(f_mmkin_parent["FOMC", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop &lt;- saem(f_mmkin_parent["DFOP", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_sfo, f_saem_fomc, f_saem_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_sfo, f_saem_dfop, test = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_red &lt;- update(f_saem_dfop, no_random_effect = "g_qlogis")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_dfop, f_saem_dfop_red, test = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_sfo, f_saem_fomc, f_saem_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The returned saem.mmkin object contains an SaemixObject, therefore we can use</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # functions from saemix</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(saemix)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compare.saemix(f_saem_sfo$so, f_saem_fomc$so, f_saem_dfop$so)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_fomc$so, plot.type = "convergence")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_fomc$so, plot.type = "individual.fit")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_fomc$so, plot.type = "npde")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_fomc$so, plot.type = "vpc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin_parent_tc &lt;- update(f_mmkin_parent, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_fomc_tc &lt;- saem(f_mmkin_parent_tc["FOMC", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_fomc, f_saem_fomc_tc, test = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_sfo &lt;- mkinmod(parent = mkinsub("SFO", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fomc_sfo &lt;- mkinmod(parent = mkinsub("FOMC", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_sfo &lt;- mkinmod(parent = mkinsub("DFOP", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The following fit uses analytical solutions for SFO-SFO and DFOP-SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # and compiled ODEs for FOMC that are much slower</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin &lt;- mmkin(list(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "SFO-SFO" = sfo_sfo, "FOMC-SFO" = fomc_sfo, "DFOP-SFO" = dfop_sfo),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # saem fits of SFO-SFO and DFOP-SFO to these data take about five seconds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # each on this system, as we use analytical solutions written for saemix.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # When using the analytical solutions written for mkin this took around</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # four minutes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_sfo_sfo &lt;- saem(f_mmkin["SFO-SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo &lt;- saem(f_mmkin["DFOP-SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can use print, plot and summary methods to check the results</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_saem_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(f_saem_dfop_sfo, data = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The following takes about 6 minutes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo_deSolve &lt;- saem(f_mmkin["DFOP-SFO", ], solution_type = "deSolve",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nbiter.saemix = c(200, 80))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #anova(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_saem_dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_saem_dfop_sfo_deSolve))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # If the model supports it, we can also use eigenvalue based solutions, which</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # take a similar amount of time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #f_saem_sfo_sfo_eigen &lt;- saem(f_mmkin["SFO-SFO", ], solution_type = "eigen",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # control = list(nbiter.saemix = c(200, 80), nbdisplay = 10))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r">saem &lt;- function(object, ...) UseMethod("saem")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">saem.mmkin &lt;- function(object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations = c("mkin", "saemix"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_start = numeric(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_log_parms = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.level = 0.6,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_models = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_random_effect = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.init = c(1, 1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nbiter.saemix = c(300, 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = list(displayProgress = FALSE, print = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nbiter.saemix = nbiter.saemix,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> save = FALSE, save.graphs = FALSE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> verbose = FALSE, quiet = FALSE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations &lt;- match.arg(transformations)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m_saemix &lt;- saemix_model(object, verbose = verbose,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model = error_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_start = degparms_start,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_log_parms = test_log_parms, conf.level = conf.level,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations = transformations,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = covariance.model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init = omega.init,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = covariates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_models = covariate_models,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.init = error.init,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">2411<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_random_effect = no_random_effect,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_saemix &lt;- saemix_data(object, covariates = covariates, verbose = verbose)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_failed &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FIM_failed &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> utils::capture.output(f_saemix &lt;- try(saemix(m_saemix, d_saemix, control)), split = !quiet)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">180</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(f_saemix, "try-error")) fit_failed &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_data &lt;- nlme_data(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!fit_failed) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">186</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(is.na(f_saemix@results@se.fixed))) FIM_failed &lt;- c(FIM_failed, "fixed effects")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(is.na(c(f_saemix@results@se.omega, f_saemix@results@se.respar)))) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">188</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FIM_failed &lt;- c(FIM_failed, "random effects and error model parameters")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms_optim &lt;- f_saemix@results@fixed.effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(transparms_optim) &lt;- f_saemix@results@name.fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms_optim &lt;- backtransform_odeparms(transparms_optim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">774<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms_optim &lt;- transparms_optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemix_data_ds &lt;- f_saemix@data@data$ds</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkin_ds_order &lt;- as.character(unique(return_data$ds))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemix_ds_order &lt;- unique(saemix_data_ds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi &lt;- saemix::psi(f_saemix)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(psi) &lt;- saemix_ds_order</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_data$predicted &lt;- f_saemix@model@model(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi = psi[mkin_ds_order, ],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> id = as.numeric(return_data$ds),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xidep = return_data[c("time", "name")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_data &lt;- transform(return_data,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residual = value - predicted,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> std = sigma_twocomp(predicted,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_saemix@results@respar[1], f_saemix@results@respar[2]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_data &lt;- transform(return_data,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = residual / std)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod = object[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin = object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = object[[1]]$solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations = transformations,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">227</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = object[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = object[[1]]$transform_fractions,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = covariates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_models = covariate_models,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sm = m_saemix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">232</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> so = f_saemix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call = call,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = fit_time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FIM_failed = FIM_failed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mean_dp_start = attr(m_saemix, "mean_dp_start"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms.fixed = object[[1]]$bparms.fixed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data = return_data,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object[[1]]$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> date.fit = date(),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemixversion = as.character(utils::packageVersion("saemix")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinversion = as.character(utils::packageVersion("mkin")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Rversion = paste(R.version$major, R.version$minor, sep=".")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!fit_failed) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$mkin_ds_order &lt;- mkin_ds_order</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$saemix_ds_order &lt;- saemix_ds_order</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$bparms.optim &lt;- bparms_optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">251</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- c("saem.mmkin", "mixed.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An saem.mmkin object to print</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.saem.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat( "Kinetic nonlinear mixed-effects model fit by SAEM" )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">262</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStructural model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- x$mmkin[[1]]$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">265</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">270</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">271</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">272</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFit did not terminate successfully\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">273</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">274</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nLikelihood computed by importance sampling\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">275</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;- try(logLik(x$so, type = "is"), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">276</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(ll, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">277</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Not available\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">278</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> AIC = AIC(x$so, type = "is"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> BIC = BIC(x$so, type = "is"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">282</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> logLik = logLik(x$so, type = "is"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = " "), digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">284</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">285</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFitted parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">287</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- parms(x, ci = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(conf.int, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">290</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">291</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">293</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">294</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An [saemix::SaemixModel] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">296</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">saemix_model &lt;- function(object, solution_type = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformations = c("mkin", "saemix"), error_model = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">299</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_start = numeric(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">300</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = "auto", no_random_effect = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">301</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">302</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = NULL, covariate_models = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">303</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.init = numeric(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">304</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_log_parms = FALSE, conf.level = 0.6, verbose = FALSE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">305</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">306</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">307</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">2346<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkin_model &lt;- object[[1]]$mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">309</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">310</td>
+ <td class="coverage">2346<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(mkin_model$spec) &gt; 1 &amp; solution_type[1] == "analytical") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("mkin analytical solutions not supported for more thane one observed variable")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">312</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">313</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">314</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_optim &lt;- mean_degparms(object, test_log_parms = test_log_parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">315</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na_degparms &lt;- names(which(is.na(degparms_optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">316</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(na_degparms) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">317</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("Did not find valid starting values for ", paste(na_degparms, collapse = ", "), "\n",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">318</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Now trying with test_log_parms = FALSE")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">319</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_optim &lt;- mean_degparms(object, test_log_parms = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">320</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">321</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "saemix") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">322</td>
+ <td class="coverage">779<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_optim &lt;- backtransform_odeparms(degparms_optim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">323</td>
+ <td class="coverage">779<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">324</td>
+ <td class="coverage">779<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">325</td>
+ <td class="coverage">779<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">326</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">327</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_fixed &lt;- object[[1]]$bparms.fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">328</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">329</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transformations are done in the degradation function by default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">330</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # (transformations = "mkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">331</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = rep(0, length(degparms_optim))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">332</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">333</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim_parm_names &lt;- grep('_0$', names(degparms_optim), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">334</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed_parm_names &lt;- grep('_0$', names(degparms_fixed), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">335</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">336</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_fixed_names &lt;- setdiff(names(degparms_fixed), odeini_fixed_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">337</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_fixed &lt;- degparms_fixed[odeparms_fixed_names]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">338</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">339</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed &lt;- degparms_fixed[odeini_fixed_parm_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">340</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini_fixed) &lt;- gsub('_0$', '', odeini_fixed_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">341</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">342</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">343</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">344</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Model functions with analytical solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">345</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Fixed parameters, use_of_ff = "min" and turning off sinks currently not supported here</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">346</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # In general, we need to consider exactly how the parameters in mkinfit were specified,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">347</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # as the parameters are currently mapped by position in these solutions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">348</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sinks &lt;- sapply(mkin_model$spec, function(x) x$sink)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">349</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(odeparms_fixed) == 0 &amp; mkin_model$use_of_ff == "max" &amp; all(sinks)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">350</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Parent only</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">351</td>
+ <td class="coverage">2242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(mkin_model$spec) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">352</td>
+ <td class="coverage">1748<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_type &lt;- mkin_model$spec[[1]]$type</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">353</td>
+ <td class="coverage">1748<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(odeini_fixed) == 1 &amp;&amp; !grepl("_bound$", names(odeini_fixed))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">354</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "saemix") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">355</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("saemix transformations are not supported for parent fits with fixed initial parent value")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">356</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">357</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">358</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("saemix needs at least two parameters to work on.")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">359</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">360</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "FOMC") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">361</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">362</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed / (xidep[, "time"]/exp(psi[id, 2]) + 1)^exp(psi[id, 1])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">363</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">364</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">365</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "DFOP") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">366</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">367</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- plogis(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">368</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">369</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed * (g * exp(- exp(psi[id, 1]) * t) +</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">370</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1 - g) * exp(- exp(psi[id, 2]) * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">371</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">372</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">373</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "HS") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">374</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">375</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb &lt;- exp(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">376</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">377</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 = exp(psi[id, 1])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">378</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed * ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">379</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">380</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- k1 * tb) * exp(- exp(psi[id, 2]) * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">381</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">382</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">383</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">384</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(odeini_fixed) == 2) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">385</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("SFORB with fixed initial parent value is not supported")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">386</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">387</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">388</td>
+ <td class="coverage">785<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">389</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">390</td>
+ <td class="coverage">2628025<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * exp( - exp(psi[id, 2]) * xidep[, "time"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">391</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">392</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">393</td>
+ <td class="coverage">502<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">394</td>
+ <td class="coverage">4054103<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * exp( - psi[id, 2] * xidep[, "time"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">395</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">396</td>
+ <td class="coverage">502<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">397</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">398</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">399</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "FOMC") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">400</td>
+ <td class="coverage">76<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">401</td>
+ <td class="coverage">41<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">402</td>
+ <td class="coverage">510269<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] / (xidep[, "time"]/exp(psi[id, 3]) + 1)^exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">403</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">404</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">405</td>
+ <td class="coverage">35<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">406</td>
+ <td class="coverage">432565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] / (xidep[, "time"]/psi[id, 3] + 1)^psi[id, 2]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">407</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">408</td>
+ <td class="coverage">35<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">409</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">410</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">411</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "DFOP") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">412</td>
+ <td class="coverage">677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">413</td>
+ <td class="coverage">637<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">414</td>
+ <td class="coverage">8785439<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- plogis(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">415</td>
+ <td class="coverage">8785439<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">416</td>
+ <td class="coverage">8785439<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * (g * exp(- exp(psi[id, 2]) * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">417</td>
+ <td class="coverage">8785439<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1 - g) * exp(- exp(psi[id, 3]) * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">418</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">419</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">420</td>
+ <td class="coverage">40<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">421</td>
+ <td class="coverage">507885<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">422</td>
+ <td class="coverage">507885<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">423</td>
+ <td class="coverage">507885<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * (g * exp(- psi[id, 2] * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">424</td>
+ <td class="coverage">507885<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1 - g) * exp(- psi[id, 3] * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">425</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">426</td>
+ <td class="coverage">40<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">427</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">428</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">429</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFORB") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">430</td>
+ <td class="coverage">150<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">431</td>
+ <td class="coverage">130<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">432</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_12 &lt;- exp(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">433</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_21 &lt;- exp(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">434</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_1output &lt;- exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">435</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">436</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">437</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt_exp = sqrt(1/4 * (k_12 + k_21 + k_1output)^2 - k_1output * k_21)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">438</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b1 = 0.5 * (k_12 + k_21 + k_1output) + sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">439</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b2 = 0.5 * (k_12 + k_21 + k_1output) - sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">440</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">441</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * (((k_12 + k_21 - b1)/(b2 - b1)) * exp(-b1 * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">442</td>
+ <td class="coverage">1240580<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((k_12 + k_21 - b2)/(b1 - b2)) * exp(-b2 * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">443</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">444</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">445</td>
+ <td class="coverage">20<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">446</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_12 &lt;- psi[id, 3]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">447</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_21 &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">448</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_1output &lt;- psi[id, 2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">449</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">450</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">451</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt_exp = sqrt(1/4 * (k_12 + k_21 + k_1output)^2 - k_1output * k_21)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">452</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b1 = 0.5 * (k_12 + k_21 + k_1output) + sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">453</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b2 = 0.5 * (k_12 + k_21 + k_1output) - sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">454</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">455</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * (((k_12 + k_21 - b1)/(b2 - b1)) * exp(-b1 * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">456</td>
+ <td class="coverage">290980<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((k_12 + k_21 - b2)/(b1 - b2)) * exp(-b2 * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">457</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">458</td>
+ <td class="coverage">20<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">459</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">460</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">461</td>
+ <td class="coverage">1698<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "HS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">462</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">463</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">464</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb &lt;- exp(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">465</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">466</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">467</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">468</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">469</td>
+ <td class="coverage">150610<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- k1 * tb) * exp(- exp(psi[id, 3]) * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">470</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">471</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">472</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">473</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">474</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">475</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi[id, 1] * ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">476</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- psi[id, 2] * t),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">477</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> exp(- psi[id, 2] * tb) * exp(- psi[id, 3] * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">478</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">479</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">480</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">481</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">482</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">483</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">484</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">485</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Parent with one metabolite</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">486</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Parameter names used in the model functions are as in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">487</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # https://nbviewer.jupyter.org/urls/jrwb.de/nb/Symbolic%20ODE%20solutions%20for%20mkin.ipynb</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">488</td>
+ <td class="coverage">2192<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> types &lt;- unname(sapply(mkin_model$spec, function(x) x$type))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">489</td>
+ <td class="coverage">2192<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(mkin_model$spec) == 2 &amp;! "SFORB" %in% types ) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">490</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Initial value for the metabolite (n20) must be fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">491</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (names(odeini_fixed) == names(mkin_model$spec)[2]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">492</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n20 &lt;- odeini_fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">493</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_name &lt;- names(mkin_model$spec)[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">494</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(types, c("SFO", "SFO"))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">495</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">496</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">497</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">498</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- psi[id, 1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">499</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">500</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- exp(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">501</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- plogis(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">502</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(xidep[, "name"] == parent_name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">503</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 * exp(- k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">504</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (((k2 - k1) * n20 - f12 * k1 * n10) * exp(- k2 * t)) / (k2 - k1) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">505</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (f12 * k1 * n10 * exp(- k1 * t)) / (k2 - k1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">506</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">507</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">508</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">509</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">510</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">511</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- psi[id, 1]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">512</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- psi[id, 2]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">513</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- psi[id, 3]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">514</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">515</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(xidep[, "name"] == parent_name,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">516</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 * exp(- k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">517</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (((k2 - k1) * n20 - f12 * k1 * n10) * exp(- k2 * t)) / (k2 - k1) +</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">518</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (f12 * k1 * n10 * exp(- k1 * t)) / (k2 - k1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">519</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">520</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">521</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 1, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">522</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">523</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">524</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(types, c("DFOP", "SFO"))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">525</td>
+ <td class="coverage">286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">526</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">527</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">528</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- psi[id, 1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">529</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- exp(psi[id, 2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">530</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- plogis(psi[id, 3])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">531</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> l1 &lt;- exp(psi[id, 4])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">532</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> l2 &lt;- exp(psi[id, 5])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">533</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- plogis(psi[id, 6])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">534</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(xidep[, "name"] == parent_name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">535</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 * (g * exp(- l1 * t) + (1 - g) * exp(- l2 * t)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">536</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((f12 * g - f12) * l2 * n10 * exp(- l2 * t)) / (l2 - k2) -</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">537</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (f12 * g * l1 * n10 * exp(- l1 * t)) / (l1 - k2) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">538</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((((l1 - k2) * l2 - k2 * l1 + k2^2) * n20 +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">539</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((f12 * l1 + (f12 * g - f12) * k2) * l2 -</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">540</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 * g * k2 * l1) * n10) * exp( - k2 * t)) /</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">541</td>
+ <td class="coverage">1821022<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((l1 - k2) * l2 - k2 * l1 + k2^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">542</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">543</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">544</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">545</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">546</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- xidep[, "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">547</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- psi[id, 1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">548</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- psi[id, 2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">549</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- psi[id, 3]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">550</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> l1 &lt;- psi[id, 4]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">551</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> l2 &lt;- psi[id, 5]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">552</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- psi[id, 6]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">553</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(xidep[, "name"] == parent_name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">554</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 * (g * exp(- l1 * t) + (1 - g) * exp(- l2 * t)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">555</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((f12 * g - f12) * l2 * n10 * exp(- l2 * t)) / (l2 - k2) -</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">556</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (f12 * g * l1 * n10 * exp(- l1 * t)) / (l1 - k2) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">557</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((((l1 - k2) * l2 - k2 * l1 + k2^2) * n20 +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">558</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((f12 * l1 + (f12 * g - f12) * k2) * l2 -</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">559</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 * g * k2 * l1) * n10) * exp( - k2 * t)) /</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">560</td>
+ <td class="coverage">2908620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((l1 - k2) * l2 - k2 * l1 + k2^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">561</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">562</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">563</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = c(0, 1, 3, 1, 1, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">564</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">565</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">566</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">567</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">568</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">569</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">570</td>
+ <td class="coverage">2192<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.function(model_function) &amp; solution_type == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">571</td>
+ <td class="coverage">2083<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "analytical saemix"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">572</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">573</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">574</td>
+ <td class="coverage">109<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "saemix") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">575</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Using saemix transformations is only supported if an analytical solution is implemented for saemix")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">576</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">577</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">578</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "auto")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">579</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type &lt;- object[[1]]$solution_type</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">580</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">581</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define some variables to avoid function calls in model function</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">582</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms_optim_names &lt;- names(degparms_optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">583</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim_names &lt;- gsub('_0$', '', odeini_optim_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">584</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diff_names &lt;- names(mkin_model$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">585</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_transparms_optim_names &lt;- setdiff(transparms_optim_names, odeini_optim_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">586</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates &lt;- object[[1]]$transform_rates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">587</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions &lt;- object[[1]]$transform_fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">588</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">589</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get native symbol info for speed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">590</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">591</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "deSolve" &amp; !is.null(mkin_model$cf)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">592</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkin_model$symbols &lt;- try(deSolve::checkDLL(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">593</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dllname = mkin_model$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">594</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = "diffs", initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">595</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> jacfunc = NULL, nout = 0, outnames = NULL))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">596</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(mkin_model$symbols, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">597</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">598</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">599</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">600</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">601</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define the model function</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">602</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- function(psi, id, xidep) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">603</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">604</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uid &lt;- unique(id)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">605</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">606</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_list &lt;- lapply(uid, function(i) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">607</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">608</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms_optim &lt;- as.numeric(psi[i, ]) # psi[i, ] is a dataframe when called in saemix.predict</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">609</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(transparms_optim) &lt;- transparms_optim_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">610</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">611</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim &lt;- transparms_optim[odeini_optim_parm_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">612</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini_optim) &lt;- odeini_optim_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">613</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">614</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- c(odeini_optim, odeini_fixed)[diff_names]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">615</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">616</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_optim &lt;- backtransform_odeparms(transparms_optim[ode_transparms_optim_names], mkin_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">617</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">618</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">619</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- c(odeparms_optim, odeparms_fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">620</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">621</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xidep_i &lt;- xidep[which(id == i), ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">622</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">623</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type[1] == "analytical") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">624</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_values &lt;- mkin_model$deg_func(xidep_i, odeini, odeparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">625</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">626</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">627</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> i_time &lt;- xidep_i$time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">628</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> i_name &lt;- xidep_i$name</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">629</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">630</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_wide &lt;- mkinpredict(mkin_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">631</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms = odeparms, odeini = odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">632</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">633</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes = sort(unique(i_time)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">634</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na_stop = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">635</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">636</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">637</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_index &lt;- cbind(as.character(i_time), as.character(i_name))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">638</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_values &lt;- out_wide[out_index]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">639</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">640</td>
+ <td class="coverage">43671888<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(out_values)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">641</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">642</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- unlist(res_list)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">643</td>
+ <td class="coverage">873912<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">644</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">645</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">646</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">647</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(error_model, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">648</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model = object[[1]]$err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">649</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">650</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.model &lt;- switch(error_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">651</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "constant",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">652</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "combined",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">653</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "constant")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">654</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">655</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">656</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("The error model 'obs' (variance by variable) can currently not be transferred to an saemix model")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">657</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">658</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">659</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_psi0 &lt;- degparms_optim</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">660</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_psi0[names(degparms_start)] &lt;- degparms_start</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">661</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi0_matrix &lt;- matrix(degparms_psi0, nrow = 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">662</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list("(Intercept)", names(degparms_psi0)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">663</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">664</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (covariance.model[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">665</td>
+ <td class="coverage">2062<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance_diagonal &lt;- rep(1, length(degparms_optim))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">666</td>
+ <td class="coverage">2062<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(no_random_effect)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">667</td>
+ <td class="coverage">766<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_no_random &lt;- which(names(degparms_psi0) %in% no_random_effect)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">668</td>
+ <td class="coverage">766<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance_diagonal[degparms_no_random] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">669</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">670</td>
+ <td class="coverage">2062<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = diag(covariance_diagonal)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">671</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">672</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">673</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (omega.init[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">674</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">675</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_eta_ini &lt;- as.numeric( # remove names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">676</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mean_degparms(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">677</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> random = TRUE, test_log_parms = TRUE)$eta)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">678</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">679</td>
+ <td class="coverage">1413<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init &lt;- 2 * diag(degparms_eta_ini^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">680</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">681</td>
+ <td class="coverage">774<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init &lt;- matrix(nrow = 0, ncol = 0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">682</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">683</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">684</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">685</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariate_models)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">686</td>
+ <td class="coverage">2027<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate.model &lt;- matrix(nrow = 0, ncol = 0) # default in saemixModel()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">687</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">688</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_dependent &lt;- sapply(covariate_models, function(x) as.character(x[[2]]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">689</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates_in_models = unique(unlist(lapply(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">690</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_models, function(x)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">691</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(attr(terms(x), "factors"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">692</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">693</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates_not_available &lt;- setdiff(covariates_in_models, names(covariates))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">694</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(covariates_not_available) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">695</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Covariate(s) ", paste(covariates_not_available, collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">696</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " used in the covariate models not available in the covariate data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">697</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">698</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi0_matrix &lt;- rbind(psi0_matrix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">699</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> matrix(0, nrow = length(covariates), ncol = ncol(psi0_matrix),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">700</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(names(covariates), colnames(psi0_matrix))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">701</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate.model &lt;- matrix(0, nrow = length(covariates),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">702</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ncol = ncol(psi0_matrix),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">703</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">704</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = names(covariates),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">705</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms = colnames(psi0_matrix)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">706</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformations == "saemix") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">707</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Covariate models with saemix transformations currently not supported")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">708</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">709</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_trans &lt;- as.data.frame(t(sapply(object, parms, transformed = TRUE)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">710</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (covariate_model in covariate_models) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">711</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_name &lt;- as.character(covariate_model[[2]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">712</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_data &lt;- cbind(parms_trans, covariates)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">713</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ini_model &lt;- lm(covariate_model, data = model_data)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">714</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ini_coef &lt;- coef(ini_model)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">715</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi0_matrix[names(ini_coef), covariate_name] &lt;- ini_coef</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">716</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate.model[names(ini_coef)[-1], covariate_name] &lt;- as.numeric(as.logical(ini_coef[-1]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">717</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">718</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">719</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">720</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- saemix::saemixModel(model_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">721</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi0 = psi0_matrix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">722</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Mixed model generated from mmkin object",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">723</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform.par = transform.par,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">724</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.model = error.model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">725</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> verbose = verbose,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">726</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariance.model = covariance.model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">727</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate.model = covariate.model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">728</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> omega.init = omega.init,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">729</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error.init = error.init,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">730</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">731</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">732</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "mean_dp_start") &lt;- degparms_optim</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">733</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">734</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">735</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">736</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">737</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom rlang !!!</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">738</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An [saemix::SaemixData] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">739</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">740</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">saemix_data &lt;- function(object, covariates = NULL, verbose = FALSE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">741</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">742</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_names &lt;- colnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">743</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">744</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_list &lt;- lapply(object, function(x) x$data[c("time", "variable", "observed")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">745</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_list) &lt;- ds_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">746</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_saemix_all &lt;- vctrs::vec_rbind(!!!ds_list, .names_to = "ds")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">747</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_saemix &lt;- data.frame(ds = ds_saemix_all$ds,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">748</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name = as.character(ds_saemix_all$variable),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">749</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = ds_saemix_all$time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">750</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> value = ds_saemix_all$observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">751</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stringsAsFactors = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">752</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">753</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.covariates &lt;- names(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">754</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates$ds &lt;- rownames(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">755</td>
+ <td class="coverage">160<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_saemix &lt;- merge(ds_saemix, covariates, sort = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">756</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">757</td>
+ <td class="coverage">2027<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.covariates &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">758</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">759</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">760</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- saemix::saemixData(ds_saemix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">761</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.group = "ds",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">762</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.predictors = c("time", "name"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">763</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.response = "value",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">764</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name.covariates = name.covariates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">765</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> verbose = verbose,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">766</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">767</td>
+ <td class="coverage">2187<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">768</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">769</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">770</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' logLik method for saem.mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">771</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">772</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The fitted [saem.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">773</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Passed to [saemix::logLik.SaemixObject]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">774</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method Passed to [saemix::logLik.SaemixObject]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">775</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">776</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">logLik.saem.mmkin &lt;- function(object, ..., method = c("is", "lin", "gq")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">777</td>
+ <td class="coverage">4404<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method &lt;- match.arg(method)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">778</td>
+ <td class="coverage">4404<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(logLik(object$so, method = method))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">779</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">780</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">781</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">782</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.saem.mmkin &lt;- function(object, ..., evaluate = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">783</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- object$call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">784</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For some reason we get saem.mmkin in the call when using mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">785</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # so we need to fix this so we do not have to export saem.mmkin in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">786</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # addition to the S3 method</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">787</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[1]] &lt;- saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">788</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">789</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We also need to provide the mmkin object in the call, so it</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">790</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # will also be found when called by testthat or pkgdown</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">791</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[2]] &lt;- object$mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">792</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">793</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">794</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">795</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">796</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">797</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">798</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">799</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">800</td>
+ <td class="coverage">35<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">801</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">802</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">803</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">804</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">805</td>
+ <td class="coverage">472<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">806</td>
+ <td class="coverage">472<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">807</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">808</td>
+ <td class="coverage">507<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">809</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">810</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">811</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">812</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">813</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">814</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ci Should a matrix with estimates and confidence interval boundaries</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">815</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be returned? If FALSE (default), a vector of estimates is returned if no</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">816</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' covariates are given, otherwise a matrix of estimates is returned, with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">817</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' each column corresponding to a row of the data frame holding the covariates</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">818</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariates A data frame holding covariate values for which to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">819</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' return parameter values. Only has an effect if 'ci' is FALSE.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">820</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms.saem.mmkin &lt;- function(object, ci = FALSE, covariates = NULL, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">821</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cov.mod &lt;- object$sm@covariance.model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">822</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_cov_mod_parms &lt;- sum(cov.mod[upper.tri(cov.mod, diag = TRUE)])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">823</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_parms &lt;- length(object$sm@name.modpar) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">824</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_cov_mod_parms +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">825</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(object$sm@name.sigma)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">826</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">827</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">828</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- matrix(rep(NA, 3 * n_parms), ncol = 3)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">829</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(conf.int) &lt;- c("estimate", "lower", "upper")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">830</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">831</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- object$so@results@conf.int[c("estimate", "lower", "upper")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">832</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(conf.int) &lt;- object$so@results@conf.int[["name"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">833</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int.var &lt;- grepl("^Var\\.", rownames(conf.int))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">834</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- conf.int[!conf.int.var, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">835</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int.cov &lt;- grepl("^Cov\\.", rownames(conf.int))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">836</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- conf.int[!conf.int.cov, ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">837</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">838</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> estimate &lt;- conf.int[, "estimate"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">839</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">840</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(estimate) &lt;- rownames(conf.int)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">841</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">842</td>
+ <td class="coverage">2904<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ci) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">843</td>
+ <td class="coverage">1034<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(conf.int)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">844</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">845</td>
+ <td class="coverage">1870<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">846</td>
+ <td class="coverage">1760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(estimate)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">847</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">848</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> est_for_cov &lt;- matrix(NA,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">849</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow = length(object$sm@name.modpar), ncol = nrow(covariates),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">850</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = (list(object$sm@name.modpar, rownames(covariates))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">851</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covmods &lt;- object$covariate_models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">852</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(covmods) &lt;- sapply(covmods, function(x) as.character(x[[2]]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">853</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (deg_parm_name in rownames(est_for_cov)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">854</td>
+ <td class="coverage">440<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (deg_parm_name %in% names(covmods)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">855</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate &lt;- covmods[[deg_parm_name]][[3]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">856</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beta_degparm_name &lt;- paste0("beta_", covariate,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">857</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(", deg_parm_name, ")")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">858</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> est_for_cov[deg_parm_name, ] &lt;- estimate[deg_parm_name] +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">859</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates[[covariate]] * estimate[beta_degparm_name]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">860</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">861</td>
+ <td class="coverage">330<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> est_for_cov[deg_parm_name, ] &lt;- estimate[deg_parm_name]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">862</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">863</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">864</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(est_for_cov)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">865</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">866</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">867</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/status.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Method to get status information for fit array objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The object to investigate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x The object to be printed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For potential future extensions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object with the same dimensions as the fit array</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' suitable printing method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">11</td>
+ <td class="coverage">589<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("status", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname status</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c("SFO", "FOMC"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS A" = FOCUS_2006_A,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOCUS B" = FOCUS_2006_C),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' status(fits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_summary_warnings &lt;- character()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sww &lt;- 0 # Counter for Shapiro-Wilks warnings</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">31</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "try-error")) return("E")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">4391<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sw &lt;- fit$summary_warnings</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">4391<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> swn &lt;- names(sw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">4391<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(sw) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">35</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(grepl("S", swn))) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">36</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sww &lt;&lt;- sww + 1</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">37</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> swn &lt;- gsub("S", paste0("S", sww), swn)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">39</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warnstring &lt;- paste(swn, collapse = ", ")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">40</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(sw) &lt;- swn</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">41</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_summary_warnings &lt;&lt;- c(all_summary_warnings, sw)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">42</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(warnstring)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">4391<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("OK")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> u_swn &lt;- unique(names(all_summary_warnings))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(result, "unique_warnings") &lt;- all_summary_warnings[u_swn]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "status.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname status</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.status.mmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> u_w &lt;- attr(x, "unique_warnings")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(x, "unique_warnings") &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x, quote = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(u_w)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">66</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(names(u_w)[i], ": ", u_w[i], "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">376<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "OK")) cat("OK: No warnings\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">69</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "E")) cat("E: Error\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname status</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status.mhmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object[[1]], "saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_func &lt;- function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">81</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(fit$FIM_failed)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">84</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_values &lt;- c("fixed effects" = "Fth",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">85</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "random effects and error model parameters" = "FO")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">86</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(paste(return_values[fit$FIM_failed], collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("OK")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">94</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Only mhmkin objects containing saem.mmkin objects currently supported")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object, test_func)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "status.mhmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname status</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.status.mhmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x, quote = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "OK")) cat("OK: Fit terminated successfully\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">112</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "Fth")) cat("Fth: Could not invert FIM for fixed effects\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">113</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "FO")) cat("FO: Could not invert FIM for random effects and error model parameters\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">114</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "Fth, FO")) cat("Fth, FO: Could not invert FIM for fixed effects, nor for random effects and error model parameters\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">115</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "E")) cat("E: Error\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/endpoints.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to calculate endpoints for further use from kinetic models fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' with mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function calculates DT50 and DT90 values as well as formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from kinetic models fitted with mkinfit. If the SFORB model was specified</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for one of the parents or metabolites, the Eigenvalues are returned. These</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are equivalent to the rate constants of the DFOP model, but with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' advantage that the SFORB model can also be used for metabolites.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Additional DT50 values are calculated from the FOMC DT90 and k1 and k2 from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' HS and DFOP, as well as from Eigenvalues b1 and b2 of any SFORB models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit An object of class [mkinfit], [nlme.mmkin] or [saem.mmkin], or</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' another object that has list components mkinmod containing an [mkinmod]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation model, and two numeric vectors, bparms.optim and bparms.fixed,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' that contain parameter values for that model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariates Numeric vector with covariate values for all variables in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' any covariate models in the object. If given, it overrides 'covariate_quantile'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariate_quantile This argument only has an effect if the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object has covariate models. If so, the default is to show endpoints</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for the median of the covariate values (50th percentile).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats optimize</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list with a matrix of dissipation times named distimes, and, if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' applicable, a vector of formation fractions named ff and, if the SFORB model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' was in use, a vector of eigenvalues of these SFORB models, equivalent to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DFOP rate constants</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The function is used internally by [summary.mkinfit],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [summary.nlme.mmkin] and [summary.saem.mmkin].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_2 &lt;- mkinfit("DFOP", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fit_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_3 &lt;- mkinfit("SFORB", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fit_3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">endpoints &lt;- function(fit, covariates = NULL, covariate_quantile = 0.5) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod &lt;- fit$mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(mkinmod$spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(fit$covariate_models)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = as.data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> apply(fit$covariates, 2, quantile,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_quantile, simplify = FALSE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">52</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_m &lt;- matrix(covariates, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">53</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(covariate_m) &lt;- names(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">54</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covariate_m) &lt;- "User"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">55</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates &lt;- as.data.frame(covariate_m)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_trans &lt;- parms(fit, covariates = covariates)[, 1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "saem.mmkin") &amp; (fit$transformations == "saemix")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">59</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- degparms_trans</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- backtransform_odeparms(degparms_trans,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = fit$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">110<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = fit$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">56098<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- c(fit$bparms.optim, fit$bparms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up object to return</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$covariates &lt;- covariates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$SFORB &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes &lt;- data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = rep(NA, length(obs_vars)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = rep(NA, length(obs_vars)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> type = names(mkinmod$map[[obs_var]])[1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get formation fractions if directly fitted, and calculate remaining fraction to sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names = grep(paste("^f", obs_var, sep = "_"), names(degparms), value=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f_names) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_values = degparms[f_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_to_sink = 1 - sum(f_values)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(f_to_sink) = ifelse(type == "SFORB",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(obs_var, "free", "sink", sep = "_"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(obs_var, "sink", sep = "_"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (f_name in f_names) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">17338<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff[[sub("f_", "", sub("_to_", "_", f_name))]] = f_values[[f_name]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">15068<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff = append(ep$ff, f_to_sink)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the rest</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_names = grep(paste("^k", obs_var, sep="_"), names(degparms), value=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_tot = sum(degparms[k_names])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = log(2)/k_tot</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = log(10)/k_tot</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">40900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$use_of_ff == "min" &amp;&amp; length(obs_vars) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">622<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (k_name in k_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">932<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff[[sub("k_", "", k_name)]] = degparms[[k_name]] / k_tot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "FOMC") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> alpha = degparms["alpha"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beta = degparms["beta"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = beta * (2^(1/alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = beta * (10^(1/alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">1790<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_names = grep(paste("^k__iore", obs_var, sep="_"), names(degparms), value=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_tot = sum(degparms[k_names])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From the NAFTA kinetics guidance, p. 5</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n = degparms[paste("N", obs_var, sep = "_")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k = k_tot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Use the initial concentration of the parent compound</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> source_name = mkinmod$map[[1]][[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c0 = degparms[paste(source_name, "0", sep = "_")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> alpha = 1 / (n - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beta = (c0^(1 - n))/(k * (n - 1))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = beta * (2^(1/alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = beta * (10^(1/alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$use_of_ff == "min") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">134</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (k_name in k_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">136</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff[[sub("k_", "", k_name)]] = degparms[[k_name]] / k_tot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "DFOP") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 = degparms["k1"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 = degparms["k2"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g = degparms["g"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f &lt;- function(log_t, x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">684705<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t &lt;- exp(log_t)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">684705<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fraction &lt;- g * exp( - k1 * t) + (1 - g) * exp( - k2 * t)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">684705<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (fraction - (1 - x/100))^2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k1 = log(2)/k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k2 = log(2)/k2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90_k1 = log(10)/k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90_k2 = log(10)/k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 &lt;- try(exp(optimize(f, c(log(DT50_k1), log(DT50_k2)), x=50)$minimum),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 &lt;- try(exp(optimize(f, c(log(DT90_k1), log(DT90_k2)), x=90)$minimum),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">158</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(DT50, "try-error")) DT50 = NA</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">159</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(DT90, "try-error")) DT90 = NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k1")] = DT50_k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">27729<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k2")] = DT50_k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "HS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 = degparms["k1"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 = degparms["k2"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb = degparms["tb"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DTx &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">636<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DTx.a &lt;- (log(100/(100 - x)))/k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">636<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DTx.b &lt;- tb + (log(100/(100 - x)) - k1 * tb)/k2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">339<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (DTx.a &lt; tb) DTx &lt;- DTx.a</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">297<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else DTx &lt;- DTx.b</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">636<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(DTx)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 &lt;- DTx(50)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 &lt;- DTx(90)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k1 = log(2)/k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k2 = log(2)/k2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k1")] = DT50_k1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">318<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k2")] = DT50_k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "SFORB") {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # FOCUS kinetics (2006), p. 60 f</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_out_names = grep(paste("^k", obs_var, "free", sep="_"), names(degparms), value=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_out_names = setdiff(k_out_names, paste("k", obs_var, "free", "bound", sep="_"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_1output = sum(degparms[k_out_names])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_12 = degparms[paste("k", obs_var, "free", "bound", sep="_")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_21 = degparms[paste("k", obs_var, "bound", "free", sep="_")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt_exp = sqrt(1/4 * (k_12 + k_21 + k_1output)^2 - k_1output * k_21)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b1 = 0.5 * (k_12 + k_21 + k_1output) + sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b2 = 0.5 * (k_12 + k_21 + k_1output) - sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g = (k_12 + k_21 - b1)/(b2 - b1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_b1 = log(2)/b1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_b2 = log(2)/b2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90_b1 = log(10)/b1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90_b2 = log(10)/b2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFORB_fraction = function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">60096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g * exp(-b1 * t) + (1 - g) * exp(-b2 * t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_50 &lt;- function(log_t) (SFORB_fraction(exp(log_t)) - 0.5)^2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> log_DT50 &lt;- try(optimize(f_50, c(log(DT50_b1), log(DT50_b2)))$minimum,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_90 &lt;- function(log_t) (SFORB_fraction(exp(log_t)) - 0.1)^2</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> log_DT90 &lt;- try(optimize(f_90, c(log(DT90_b1), log(DT90_b2)))$minimum,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = if (inherits(log_DT50, "try-error")) NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else exp(log_DT50)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = if (inherits(log_DT90, "try-error")) NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else exp(log_DT90)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">220</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_back = DT90 / (log(10)/log(2)) # Backcalculated DT50 as recommended in FOCUS 2011</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (k_out_name in k_out_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">2618<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$ff[[sub("k_", "", k_out_name)]] = degparms[[k_out_name]] / k_1output</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Return the eigenvalues for comparison with DFOP rate constants</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$SFORB[[paste(obs_var, "b1", sep="_")]] = b1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$SFORB[[paste(obs_var, "b2", sep="_")]] = b2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Return g for comparison with DFOP</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$SFORB[[paste(obs_var, "g", sep="_")]] = g</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50back")] = DT50_back</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c(paste("DT50", obs_var, "b1", sep = "_"))] = DT50_b1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">2616<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c(paste("DT50", obs_var, "b2", sep = "_"))] = DT50_b2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "logistic") {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # FOCUS kinetics (2014) p. 67</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> kmax = degparms["kmax"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k0 = degparms["k0"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> r = degparms["r"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50 = (1/r) * log(1 - ((kmax/k0) * (1 - 2^(r/kmax))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT90 = (1/r) * log(1 - ((kmax/k0) * (1 - 10^(r/kmax))))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_k0 = log(2)/k0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DT50_kmax = log(2)/kmax</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_k0")] = DT50_k0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50_kmax")] = DT50_kmax</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">250</td>
+ <td class="coverage">73858<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep$distimes[obs_var, c("DT50", "DT90")] = c(DT50, DT90)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">251</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">38846<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$ff) == 0) ep$ff &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">53592<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$SFORB) == 0) ep$SFORB &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">254</td>
+ <td class="coverage">56208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ep)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinmod.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to set up a kinetic model with one or more state variables</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function is usually called using a call to [mkinsub()] for each observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable, specifying the corresponding submodel as well as outgoing pathways</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (see examples).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' For the definition of model types and their parameters, the equations given</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the FOCUS and NAFTA guidance documents are used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' For kinetic models with more than one observed variable, a symbolic solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the system of differential equations is included in the resulting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinmod object in some cases, speeding up the solution.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If a C compiler is found by [pkgbuild::has_compiler()] and there</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is more than one observed variable in the specification, C code is generated</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for evaluating the differential equations, compiled using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [inline::cfunction()] and added to the resulting mkinmod object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... For each observed variable, a list as obtained by [mkinsub()]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' has to be specified as an argument (see examples). Currently, single</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' first order kinetics "SFO", indeterminate order rate equation kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "IORE", or single first order with reversible binding "SFORB" are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' implemented for all variables, while "FOMC", "DFOP", "HS" and "logistic"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' can additionally be chosen for the first variable which is assumed to be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the source compartment.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Additionally, [mkinsub()] has an argument \code{to}, specifying names of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables to which a transfer is to be assumed in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the argument \code{use_of_ff} is set to "min"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and the model for the compartment is "SFO" or "SFORB", an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' additional [mkinsub()] argument can be \code{sink = FALSE}, effectively</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fixing the flux to sink to zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' In print.mkinmod, this argument is currently not used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_of_ff Specification of the use of formation fractions in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model equations and, if applicable, the coefficient matrix. If "max",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' formation fractions are always used (default). If "min", a minimum use of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' formation fractions is made, i.e. each first-order pathway to a metabolite</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' has its own rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param speclist The specification of the observed variables and their</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' submodel types and pathways can be given as a single list using this</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' argument. Default is NULL.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Should messages be suppressed?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose If \code{TRUE}, passed to [inline::cfunction()] if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' applicable to give detailed information about the C function being built.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param name A name for the model. Should be a valid R object name.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param dll_dir Directory where an DLL object, if generated internally by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [inline::cfunction()], should be saved. The DLL will only be stored in a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' permanent location for use in future sessions, if 'dll_dir' and 'name'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are specified. This is helpful if fit objects are cached e.g. by knitr,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as the cache remains functional across sessions if the DLL is stored in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a user defined location.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param unload If a DLL from the target location in 'dll_dir' is already</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loaded, should that be unloaded first?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param overwrite If a file exists at the target DLL location in 'dll_dir',</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' should this be overwritten?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom methods signature</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list of class \code{mkinmod} for use with [mkinfit()],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' containing, among others,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{diffs}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A vector of string representations of differential equations, one for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' each modelling variable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{map}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A list containing named character vectors for each observed variable,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' specifying the modelling variables by which it is represented.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{use_of_ff}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The content of \code{use_of_ff} is passed on in this list component.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{deg_func}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If generated, a function containing the solution of the degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{coefmat}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The coefficient matrix, if the system of differential equations can be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' represented by one.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{cf}{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If generated, a compiled function calculating the derivatives as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' returned by cfunction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The IORE submodel is not well tested for metabolites. When using this</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model for metabolites, you may want to read the note in the help</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' page to [mkinfit].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' NAFTA Technical Working Group on Pesticides (not dated) Guidance for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Evaluating and Calculating Degradation Kinetics in Environmental Media</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Specify the SFO model (this is not needed any more, as we can now mkinfit("SFO", ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO &lt;- mkinmod(parent = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # One parent compound, one metabolite, both single first order</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(SFO_SFO)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_sfo_sfo &lt;- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, solution_type = "deSolve")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Now supplying compound names used for plotting, and write to user defined location</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We need to choose a path outside the session tempdir because this gets removed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DLL_dir &lt;- "~/.local/share/mkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (!dir.exists(DLL_dir)) dir.create(DLL_dir)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.2 &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1", full_name = "Test compound"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO", full_name = "Metabolite M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' name = "SFO_SFO", dll_dir = DLL_dir, unload = TRUE, overwrite = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Now we can save the model and restore it in a new session</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' saveRDS(SFO_SFO.2, file = "~/SFO_SFO.rds")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Terminate the R session here if you would like to check, and then do</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(mkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.3 &lt;- readRDS("~/SFO_SFO.rds")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_sfo_sfo &lt;- mkinfit(SFO_SFO.3, FOCUS_2006_D, quiet = TRUE, solution_type = "deSolve")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Show details of creating the C function</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"), verbose = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The symbolic solution which is available in this case is not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # made for human reading but for speed of computation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO$deg_func</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # If we have several parallel metabolites</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # (compare tests/testthat/test_synthetic_data_for_UBA_2014.R)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_DFOP_par &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("DFOP", c("M1", "M2")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_DFOP_par_c &lt;- mkinfit(m_synth_DFOP_par,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' synthetic_data_for_UBA_2014[[12]]$data,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinmod &lt;- function(..., use_of_ff = "max", name = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> speclist = NULL, quiet = FALSE, verbose = FALSE, dll_dir = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> unload = FALSE, overwrite = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">4940<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(speclist)) spec &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">3905<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else spec &lt;- speclist</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">8845<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">8845<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> save_msg &lt;- "You need to specify both 'name' and 'dll_dir' to save a model DLL"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">8845<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(dll_dir)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">155</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!dir.exists(dll_dir)) stop(dll_dir, " does not exist")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">156</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(name)) stop(save_msg)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if any of the names of the observed variables contains any other</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">8845<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(grep(obs_var, obs_vars)) &gt; 1) stop("Sorry, variable names can not contain each other")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("_to_", obs_var)) stop("Sorry, names of observed variables can not contain _to_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (obs_var == "sink") stop("Naming a compound 'sink' is not supported")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">8533<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!use_of_ff %in% c("min", "max"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The use of formation fractions 'use_of_ff' can only be 'min' or 'max'")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # }}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not return a coefficient matrix mat when FOMC, IORE, DFOP, HS or logistic is used for the parent {{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[1]]$type %in% c("FOMC", "IORE", "DFOP", "HS", "logistic")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">2280<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mat = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">6149<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else mat = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Establish a list of differential equations as well as a map from observed {{{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # compartments to differential equations</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> map &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">8429<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (varname in obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check the type component of the compartment specification {{{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">185</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(is.null(spec[[varname]]$type)) stop(</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">186</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Every part of the model specification must be a list containing a type component")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(!spec[[varname]]$type %in% c("SFO", "FOMC", "IORE", "DFOP", "HS", "SFORB", "logistic")) stop(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Available types are SFO, FOMC, IORE, DFOP, HS, SFORB and logistic only")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">13150<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type %in% c("FOMC", "DFOP", "HS", "logistic") &amp; match(varname, obs_vars) != 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop(paste("Types FOMC, DFOP, HS and logistic are only implemented for the first compartment,",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "which is assumed to be the source compartment"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">192</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # New (sub)compartments (boxes) needed for the model type {{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> new_boxes &lt;- switch(spec[[varname]]$type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFO = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FOMC = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> IORE = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DFOP = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> HS = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> logistic = varname,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFORB = paste(varname, c("free", "bound"), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> map[[varname]] &lt;- new_boxes</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(map[[varname]]) &lt;- rep(spec[[varname]]$type, length(new_boxes)) #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Start a new differential equation for each new box {{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> new_diffs &lt;- paste("d_", new_boxes, " =", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(new_diffs) &lt;- new_boxes</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">13046<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- c(diffs, new_diffs) #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Create content of differential equations and build parameter list {{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">8221<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (varname in obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the name of the box(es) we are working on for the decline term(s)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">12838<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> box_1 = map[[varname]][[1]] # This is the only box unless type is SFORB</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Turn on sink if this is not explicitly excluded by the user by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # specifying sink=FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(is.null(spec[[varname]]$sink)) spec[[varname]]$sink &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">220</td>
+ <td class="coverage">12838<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type %in% c("SFO", "IORE", "SFORB")) { # {{{ Add decline term</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">10838<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (use_of_ff == "min") { # Minimum use of formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">1304<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE" &amp;&amp; length(spec[[varname]]$to) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Transformation reactions from compounds modelled with IORE\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "are only supported with formation fractions (use_of_ff = 'max')")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">1200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$sink) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # If sink is requested, add first-order/IORE sink term</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_compound_sink &lt;- paste("k", box_1, "sink", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">230</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_compound_sink &lt;- paste("k__iore", box_1, "sink", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">232</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, k_compound_sink)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste(k_compound_sink, "*", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">235</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N &lt;- paste("N", box_1, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">236</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, N)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">237</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste0(decline_term, "^", N)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">239</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # otherwise no decline term needed here</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">248<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term = "0"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # Maximum use of formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_compound &lt;- paste("k", box_1, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_compound &lt;- paste("k__iore", box_1, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, k_compound)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste(k_compound, "*", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">9534<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">250</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N &lt;- paste("N", box_1, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, N)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste0(decline_term, "^", N)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">253</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">256</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "FOMC") { # {{{ Add FOMC decline term</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From p. 53 of the FOCUS kinetics report, without the power function so it works in C</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">258</td>
+ <td class="coverage">381<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste("(alpha/beta) * 1/((time/beta) + 1) *", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">259</td>
+ <td class="coverage">381<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, "alpha", "beta")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "DFOP") { # {{{ Add DFOP decline term</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From p. 57 of the FOCUS kinetics report</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">1283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste("((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) *", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">1283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, "k1", "k2", "g")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> HS_decline &lt;- "ifelse(time &lt;= tb, k1, k2)" # Used below for automatic translation to C</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "HS") { # {{{ Add HS decline term</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">268</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From p. 55 of the FOCUS kinetics report</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">30<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste(HS_decline, "*", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">270</td>
+ <td class="coverage">30<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, "k1", "k2", "tb")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "logistic") { # {{{ Add logistic decline term</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">273</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # From p. 67 of the FOCUS kinetics report (2014)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">274</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term &lt;- paste("(k0 * kmax)/(k0 + (kmax - k0) * exp(-r * time)) *", box_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">275</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, "kmax", "k0", "r")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Add origin decline term to box 1 (usually the only box, unless type is SFORB)#{{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[box_1]] &lt;- paste(diffs[[box_1]], "-", decline_term)#}}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(spec[[varname]]$type == "SFORB") { # {{{ Add SFORB reversible binding terms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> box_2 = map[[varname]][[2]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_free_bound &lt;- paste("k", varname, "free", "bound", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">282</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_bound_free &lt;- paste("k", varname, "bound", "free", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, k_free_bound, k_bound_free)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reversible_binding_term_1 &lt;- paste("-", k_free_bound, "*", box_1, "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_bound_free, "*", box_2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reversible_binding_term_2 &lt;- paste("+", k_free_bound, "*", box_1, "-",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">287</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_bound_free, "*", box_2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[box_1]] &lt;- paste(diffs[[box_1]], reversible_binding_term_1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">289</td>
+ <td class="coverage">25<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[box_2]] &lt;- paste(diffs[[box_2]], reversible_binding_term_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">290</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transfer between compartments#{{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> to &lt;- spec[[varname]]$to</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">294</td>
+ <td class="coverage">12734<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(!is.null(to)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Name of box from which transfer takes place</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">296</td>
+ <td class="coverage">4174<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> origin_box &lt;- box_1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Number of targets</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">299</td>
+ <td class="coverage">4174<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_targets = length(to)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">300</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">301</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Add transfer terms to listed compartments</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">302</td>
+ <td class="coverage">4174<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (target in to) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">303</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!target %in% obs_vars) stop("You did not specify a submodel for target variable ", target)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">304</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> target_box &lt;- switch(spec[[target]]$type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">305</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFO = target,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">306</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> IORE = target,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">307</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFORB = paste(target, "free", sep = "_"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">4813<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (use_of_ff == "min" &amp;&amp; spec[[varname]]$type %in% c("SFO", "SFORB"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">309</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">310</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_from_to &lt;- paste("k", origin_box, target_box, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, k_from_to)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">312</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[origin_box]] &lt;- paste(diffs[[origin_box]], "-",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">313</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_from_to, "*", origin_box)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">314</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[target_box]] &lt;- paste(diffs[[target_box]], "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">315</td>
+ <td class="coverage">601<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_from_to, "*", origin_box)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">316</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not introduce a formation fraction if this is the only target</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">318</td>
+ <td class="coverage">4212<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[varname]]$sink == FALSE &amp;&amp; n_targets == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">319</td>
+ <td class="coverage">689<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[target_box]] &lt;- paste(diffs[[target_box]], "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">320</td>
+ <td class="coverage">689<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> decline_term)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">321</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">322</td>
+ <td class="coverage">3523<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fraction_to_target = paste("f", origin_box, "to", target, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">323</td>
+ <td class="coverage">3523<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(parms, fraction_to_target)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">324</td>
+ <td class="coverage">3523<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[[target_box]] &lt;- paste(diffs[[target_box]], "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">325</td>
+ <td class="coverage">3523<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fraction_to_target, "*", decline_term)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">326</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">327</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">328</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">329</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">330</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } #}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">331</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">332</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model &lt;- list(diffs = diffs, parms = parms, map = map, spec = spec, use_of_ff = use_of_ff, name = name)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">333</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">334</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Create coefficient matrix if possible #{{{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">335</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mat) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">336</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> boxes &lt;- names(diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">337</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n &lt;- length(boxes)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">338</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m &lt;- matrix(nrow=n, ncol=n, dimnames=list(boxes, boxes))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">339</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">340</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (use_of_ff == "min") { # {{{ Minimum use of formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">341</td>
+ <td class="coverage">600<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (from in boxes) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">342</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (to in boxes) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">343</td>
+ <td class="coverage">2405<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (from == to) { # diagonal elements</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">344</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", from, c(boxes, "sink"), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">345</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = sub("free.*bound", "free_bound", k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">346</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = sub("bound.*free", "bound_free", k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">347</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.effective = intersect(model$parms, k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">348</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = ifelse(length(k.effective) &gt; 0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">349</td>
+ <td class="coverage">1201<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste("-", k.effective, collapse = " "), "0")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">350</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">351</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # off-diagonal elements</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">352</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", from, to, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">353</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sub("_free$", "", from) == sub("_bound$", "", to)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">354</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", sub("_free$", "_free_bound", from), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">355</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">356</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sub("_bound$", "", from) == sub("_free$", "", to)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">357</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", sub("_bound$", "_bound_free", from), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">358</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">359</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.effective = intersect(model$parms, k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">360</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[to, from] = ifelse(length(k.effective) &gt; 0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">361</td>
+ <td class="coverage">1204<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.effective, "0")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">362</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">363</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">364</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } # }}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">365</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # {{{ Use formation fractions where possible</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">366</td>
+ <td class="coverage">5341<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (from in boxes) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">367</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (to in boxes) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">368</td>
+ <td class="coverage">15220<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (from == to) { # diagonal elements</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">369</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", from, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">370</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = ifelse(k.candidate %in% model$parms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">371</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste("-", k.candidate), "0")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">372</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(grepl("_free", from)) { # add transfer to bound compartment for SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">373</td>
+ <td class="coverage">24<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = paste(m[from,to], "-", paste("k", from, "bound", sep = "_"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">374</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">375</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(grepl("_bound", from)) { # add backtransfer to free compartment for SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">376</td>
+ <td class="coverage">24<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = paste("- k", from, "free", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">377</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">378</td>
+ <td class="coverage">8074<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[from,to] = m[from,to]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">379</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # off-diagonal elements</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">380</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f.candidate = paste("f", from, "to", to, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">381</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = paste("k", from, to, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">382</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = sub("free.*bound", "free_bound", k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">383</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k.candidate = sub("bound.*free", "bound_free", k.candidate)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">384</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[to, from] = ifelse(f.candidate %in% model$parms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">385</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(f.candidate, " * k_", from, sep = ""),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">386</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(k.candidate %in% model$parms, k.candidate, "0"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">387</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Special case: singular pathway and no sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">388</td>
+ <td class="coverage">7146<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[from]]$sink == FALSE &amp;&amp; length(spec[[from]]$to) == 1 &amp;&amp; to %in% spec[[from]]$to) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">389</td>
+ <td class="coverage">689<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> m[to, from] = paste("k", from, sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">390</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">391</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">392</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">393</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">394</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } # }}}</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">395</td>
+ <td class="coverage">5941<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model$coefmat &lt;- m</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">396</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }#}}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">397</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">398</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Try to create a function compiled from C code if there is more than one observed variable {{{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">399</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and a compiler is available</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">400</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 1 &amp; pkgbuild::has_compiler()) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">401</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">402</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Translate the R code for the derivatives to C code</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">403</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- paste(diffs, collapse = ";\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">404</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- paste0(diffs.C, ";")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">405</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">406</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # HS</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">407</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(HS_decline, "(time &lt;= tb ? k1 : k2)", diffs.C, fixed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">408</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">409</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(diffs)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">410</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state_var &lt;- names(diffs)[i]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">411</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">412</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # IORE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">413</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (state_var %in% obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">414</td>
+ <td class="coverage">8343<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[state_var]]$type == "IORE") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">415</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(paste0(state_var, "^N_", state_var),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">416</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("pow(y[", i - 1, "], N_", state_var, ")"),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">417</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C, fixed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">418</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">419</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">420</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">421</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Replace d_... terms by f[i-1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">422</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # First line</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">423</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pattern &lt;- paste0("^d_", state_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">424</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> replacement &lt;- paste0("\nf[", i - 1, "]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">425</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(pattern, replacement, diffs.C)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">426</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Other lines</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">427</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pattern &lt;- paste0("\\nd_", state_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">428</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> replacement &lt;- paste0("\nf[", i - 1, "]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">429</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(pattern, replacement, diffs.C)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">430</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">431</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Replace names of observed variables by y[i],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">432</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # making the implicit assumption that the observed variables only occur after "* "</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">433</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pattern &lt;- paste0("\\* ", state_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">434</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> replacement &lt;- paste0("* y[", i - 1, "]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">435</td>
+ <td class="coverage">8347<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C &lt;- gsub(pattern, replacement, diffs.C)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">436</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">437</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">438</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> derivs_sig &lt;- signature(n = "integer", t = "numeric", y = "numeric",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">439</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f = "numeric", rpar = "numeric", ipar = "integer")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">440</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">441</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Declare the time variable in the body of the function if it is used</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">442</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> derivs_code &lt;- if (spec[[1]]$type %in% c("FOMC", "DFOP", "HS")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">443</td>
+ <td class="coverage">1060<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("double time = *t;\n", diffs.C)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">444</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">445</td>
+ <td class="coverage">2668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs.C</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">446</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">447</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">448</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define the function initializing the parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">449</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> npar &lt;- length(parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">450</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> initpar_code &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">451</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "static double parms [", npar, "];\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">452</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("#define ", parms, " parms[", 0:(npar - 1), "]\n", collapse = ""),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">453</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">454</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "void initpar(void (* odeparms)(int *, double *)) {\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">455</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " int N = ", npar, ";\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">456</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " odeparms(&amp;N, parms);\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">457</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "}\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">458</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">459</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Try to build a shared library</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">460</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model$cf &lt;- try(inline::cfunction(derivs_sig, derivs_code,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">461</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> otherdefs = initpar_code,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">462</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> verbose = verbose, name = "diffs",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">463</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> convention = ".C", language = "C"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">464</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">465</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">466</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(model$cf, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">467</td>
+ <td class="coverage">495<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Temporary DLL for differentials generated and loaded")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">468</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(dll_dir)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">469</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We suppress warnings, as we get a warning about a path "(embedding)" </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">470</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # under Windows, at least when using RStudio</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">471</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> suppressWarnings(inline::moveDLL(model$cf, name, dll_dir,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">472</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> unload = unload, overwrite = overwrite, verbose = !quiet))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">473</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">474</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model$dll_info &lt;- inline::getDynLib(model$cf)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">475</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">476</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">477</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # }}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">478</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">479</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Attach a degradation function if an analytical solution is available</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">480</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model$deg_func &lt;- create_deg_func(spec, use_of_ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">481</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">482</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(model) &lt;- "mkinmod"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">483</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(model)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">484</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">485</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">486</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print mkinmod objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">487</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">488</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print mkinmod objects in a way that the user finds his way to get to its</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">489</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' components.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">490</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">491</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">492</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An \code{\link{mkinmod}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">493</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">494</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mkinmod &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">495</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mkinmod&gt; model generated with\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">496</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Use of formation fractions $use_of_ff:", x$use_of_ff, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">497</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Specification $spec:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">498</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs in names(x$spec)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">499</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("$", obs, "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">500</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spl &lt;- x$spec[[obs]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">501</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("$type:", spl$type)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">502</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(spl$to) &amp;&amp; length(spl$to)) cat("; $to: ", paste(spl$to, collapse = ", "), sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">503</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("; $sink: ", spl$sink, sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">504</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(spl$full_name)) if (!is.na(spl$full_name)) cat("; $full_name:", spl$full_name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">505</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">506</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">507</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.matrix(x$coefmat)) cat("Coefficient matrix $coefmat available\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">508</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$cf)) cat("Compiled model $cf available\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">509</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Differential equations:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">510</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", x[["diffs"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">511</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">512</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">513</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># vim: set foldmethod=marker ts=2 sw=2 expandtab:</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mhmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fit nonlinear mixed-effects models built from one or more kinetic</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation models and one or more error models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The name of the methods expresses that (**m**ultiple) **h**ierarchichal</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (also known as multilevel) **m**ulticompartment **kin**etic models are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitted. Our kinetic models are nonlinear, so we can use various nonlinear</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mixed-effects model fitting functions.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param objects A list of [mmkin] objects containing fits of the same</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation models to the same data, but using different error models.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Alternatively, a single [mmkin] object containing fits of several</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation models to the same data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param backend The backend to be used for fitting. Currently, only saemix is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' supported</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param no_random_effect Default is NULL and will be passed to [saem]. If a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' character vector is supplied, it will be passed to all calls to [saem],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which will exclude random effects for all matching parameters. Alternatively,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a list of character vectors or an object of class [illparms.mhmkin] can be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' specified. They have to have the same dimensions that the return object of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the current call will have, i.e. the number of rows must match the number</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of degradation models in the mmkin object(s), and the number of columns must</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' match the number of error models used in the mmkin object(s).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param algorithm The algorithm to be used for fitting (currently not used)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments that will be passed to the nonlinear mixed-effects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model fitting function.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cores The number of cores to be used for multicore processing. This</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is only used when the \code{cluster} argument is \code{NULL}. On Windows</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' machines, cores &gt; 1 is not supported, you need to use the \code{cluster}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' argument to use multiple logical processors. Per default, all cores detected</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' by [parallel::detectCores()] are used, except on Windows where the default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is 1.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cluster A cluster as returned by [makeCluster] to be used for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parallel execution.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom parallel mclapply parLapply detectCores</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A two-dimensional [array] of fit objects and/or try-errors that can</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be indexed using the degradation model names for the first index (row index)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and the error model names for the second index (column index), with class</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' attribute 'mhmkin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{[.mhmkin}} for subsetting [mhmkin] objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mhmkin &lt;- function(objects, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("mhmkin")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mhmkin.mmkin &lt;- function(objects, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">49</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mhmkin(list(objects), ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We start with separate evaluations of all the first six datasets with two</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # degradation models and two error models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_sep_const &lt;- mmkin(c("SFO", "FOMC"), ds_fomc[1:6], cores = 2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_sep_tc &lt;- update(f_sep_const, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The mhmkin function sets up hierarchical degradation models aka</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # nonlinear mixed-effects models for all four combinations, specifying</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # uncorrelated random effects for all degradation parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_1 &lt;- mhmkin(list(f_sep_const, f_sep_tc), cores = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' status(f_saem_1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The 'illparms' function shows that in all hierarchical fits, at least</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # one random effect is ill-defined (the confidence interval for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # random effect expressed as standard deviation includes zero)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Therefore we repeat the fits, excluding the ill-defined random effects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_2 &lt;- update(f_saem_1, no_random_effect = illparms(f_saem_1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' status(f_saem_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Model comparisons show that FOMC with two-component error is preferable,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # and confirms our reduction of the default parameter model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The convergence plot for the selected model looks fine</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' saemix::plot(f_saem_2[["FOMC", "tc"]]$so, plot.type = "convergence")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The plot of predictions versus data shows that we have a pretty data-rich</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # situation with homogeneous distribution of residuals, because we used the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # same degradation model, error model and parameter distribution model that</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # was used in the data generation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem_2[["FOMC", "tc"]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can specify the same parameter model reductions manually</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' no_ranef &lt;- list("parent_0", "log_beta", "parent_0", c("parent_0", "log_beta"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dim(no_ranef) &lt;- c(2, 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_2m &lt;- update(f_saem_1, no_random_effect = no_ranef)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_2m)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mhmkin.list &lt;- function(objects, backend = "saemix", algorithm = "saem",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_random_effect = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cores = if (Sys.info()["sysname"] == "Windows") 1 else parallel::detectCores(), cluster = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dot_args &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> backend_function &lt;- switch(backend,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemix = "saem"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_models &lt;- lapply(objects[[1]][, 1], function(x) x$mkinmod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(deg_models) &lt;- dimnames(objects[[1]])$model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.deg &lt;- length(deg_models)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds &lt;- lapply(objects[[1]][1, ], function(x) x$data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (other in objects[-1]) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if the degradation models in all objects are the same</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (deg_model_name in names(deg_models)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">750<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all.equal(other[[deg_model_name, 1]]$mkinmod$spec,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">750<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_models[[deg_model_name]]$spec))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">113</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The mmkin objects have to be based on the same degradation models")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if they have been fitted to the same dataset</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> other_object_ds &lt;- lapply(other[1, ], function(x) x$data)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:length(ds)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">2250<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all.equal(ds[[i]][c("time", "variable", "observed")],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">2250<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> other_object_ds[[i]][c("time", "variable", "observed")]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">122</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The mmkin objects have to be fitted to the same datasets")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.o &lt;- length(objects)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_models = sapply(objects, function(x) x[[1]]$err_mod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.e &lt;- length(error_models)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- n.deg * n.e</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_indices &lt;- matrix(1:n.fits, ncol = n.e)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(fit_indices) &lt;- list(degradation = names(deg_models),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error = error_models)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(no_random_effect) || is.null(dim(no_random_effect))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef &lt;- rep(list(no_random_effect), n.fits)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(no_ranef) &lt;- dim(fit_indices)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(dim(no_random_effect), dim(fit_indices))) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">142</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Dimensions of argument 'no_random_effect' are not suitable")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is(no_random_effect, "illparms.mhmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef_dim &lt;- dim(no_random_effect)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef &lt;- lapply(no_random_effect, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef_split &lt;- strsplit(x, ", ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- sapply(no_ranef_split, function(y) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> gsub("sd\\((.*)\\)", "\\1", y)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(no_ranef) &lt;- no_ranef_dim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">121<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> no_ranef &lt;- no_random_effect</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_function &lt;- function(fit_index) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> w &lt;- which(fit_indices == fit_index, arr.ind = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_index &lt;- w[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_index &lt;- w[2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin_row &lt;- objects[[error_index]][deg_index, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- try(do.call(backend_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> args = c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> list(mmkin_row),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dot_args,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> list(no_random_effect = no_ranef[[deg_index, error_index]]))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">12<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(cluster)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> results &lt;- parallel::mclapply(as.list(1:n.fits), fit_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mc.cores = cores, mc.preschedule = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">178</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> results &lt;- parallel::parLapply(cluster, as.list(1:n.fits), fit_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attributes(results) &lt;- attributes(fit_indices)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(results, "call") &lt;- call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(results, "time") &lt;- fit_time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(results) &lt;- switch(backend,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saemix = c("mhmkin.saem.mmkin", "mhmkin")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">363<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(results)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Subsetting method for mhmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">192</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An [mhmkin] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param i Row index selecting the fits for specific models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param j Column index selecting the fits to specific datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param drop If FALSE, the method always returns an mhmkin object, otherwise</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' either a list of fit objects or a single fit object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object inheriting from \code{\link{mhmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">`[.mhmkin` &lt;- function(x, i, j, ..., drop = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">202</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> original_class &lt;- class(x)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">203</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">204</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x_sub &lt;- x[i, j, drop = drop]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">206</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!drop) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">207</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x_sub) &lt;- original_class</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">209</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(x_sub)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print method for mhmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mhmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mhmkin&gt; object\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Status of individual fits:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(status(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">222</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Check if fit within an mhmkin object failed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x The object to be checked</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">check_failed &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">1936<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">226</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">1936<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">229</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">1936<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">235</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">AIC.mhmkin &lt;- function(object, ..., k = 2) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- sapply(object, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">239</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (check_failed(x)) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(AIC(x$so, k = k))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(res) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(res) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">247</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">248</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">BIC.mhmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- sapply(object, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">250</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (check_failed(x)) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">500<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(BIC(x$so))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">252</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(res) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">254</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(res) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">255</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.mhmkin &lt;- function(object, ..., evaluate = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">260</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- attr(object, "call")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For some reason we get mhkin.list in call[[1]] when using mhmkin from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # loaded package so we need to fix this so we do not have to export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">263</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # mhmkin.list in addition to the S3 method mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[1]] &lt;- mhmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">267</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">270</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">273</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">274</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">275</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">276</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">277</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">280</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">282</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">283</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">284</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">285</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">286</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">anova.mhmkin &lt;- function(object, ...,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">287</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method = c("is", "lin", "gq"), test = FALSE, model.names = "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(model.names, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">289</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names &lt;- outer(rownames(object), colnames(object), paste)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">290</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">291</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> failed_index &lt;- which(sapply(object, check_failed), arr.ind = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">292</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(failed_index &gt; 0)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">293</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rlang::inject(anova(!!!(object[-failed_index]), method = method, test = test,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">294</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names = model.names[-failed_index]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">296</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rlang::inject(anova(!!!(object), method = method, test = test,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">297</td>
+ <td class="coverage">234<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names = model.names))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">299</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">300</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/nafta.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Evaluate parent kinetics using the NAFTA guidance</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The function fits the SFO, IORE and DFOP models using \code{\link{mmkin}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and returns an object of class \code{nafta} that has methods for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and plotting.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ds A dataframe that must contain one variable called "time" with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time values specified by the \code{time} argument, one column called</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "name" with the grouping of the observed values, and finally one column of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed values called "value".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param title Optional title of the dataset</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Should the evaluation text be shown?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to \code{\link{mmkin}} (not for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' printing method).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats qf</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An list of class \code{nafta}. The list element named "mmkin" is the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mmkin}} object containing the fits of the three models. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list element named "title" contains the title of the dataset used. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list element "data" contains the dataset used in the fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @source NAFTA (2011) Guidance for evaluating and calculating degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetics in environmental media. NAFTA Technical Working Group on</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Pesticides</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{https://www.epa.gov/pesticide-science-and-assessing-pesticide-risks/guidance-evaluating-and-calculating-degradation}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' accessed 2019-02-22</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' US EPA (2015) Standard Operating Procedure for Using the NAFTA Guidance to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate Representative Half-life Values and Characterizing Pesticide</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{https://www.epa.gov/pesticide-science-and-assessing-pesticide-risks/standard-operating-procedure-using-nafta-guidance}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nafta_evaluation &lt;- nafta(NAFTA_SOP_Appendix_D, cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(nafta_evaluation)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(nafta_evaluation)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nafta &lt;- function(ds, title = NA, quiet = FALSE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">264<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(levels(ds$name)) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The NAFTA procedure is only defined for decline data for a single compound")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n &lt;- nrow(subset(ds, !is.na(value)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> models &lt;- c("SFO", "IORE", "DFOP")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- list(title = title, data = ds)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$mmkin &lt;- mmkin(models, list(ds), quiet = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> distimes &lt;- lapply(result$mmkin, function(x) as.numeric(endpoints(x)$distimes["parent", ]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes &lt;- matrix(NA, nrow = 3, ncol = 3,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(models, c("DT50", "DT90", "DT50_rep")))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes["SFO", ] &lt;- distimes[[1]][c(1, 2, 1)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes["IORE", ] &lt;- distimes[[2]][c(1, 2, 3)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes["DFOP", ] &lt;- distimes[[3]][c(1, 2, 5)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get parameters with statistics</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$parameters &lt;- lapply(result$mmkin, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">528<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary(x)$bpar[, c(1, 4:6)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(result$parameters) &lt;- models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Compare the sum of squared residuals (SSR) to the upper bound of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # confidence region of the SSR for the IORE model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$S &lt;- sapply(result$mmkin, function(x) sum(x$data$residual^2))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(result$S) &lt;- c("SFO", "IORE", "DFOP")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Equation (3) on p. 3</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> p &lt;- 3</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$S["IORE"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$S_c &lt;- result$S[["IORE"]] * (1 + p/(n - p) * qf(0.5, p, n - p))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$t_rep &lt;- .evaluate_nafta_results(result$S, result$S_c,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result$distimes, quiet = quiet)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "nafta"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot the results of the three models used in the NAFTA scheme.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The plots are ordered with increasing complexity of the model in this</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function (SFO, then IORE, then DFOP).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calls \code{\link{plot.mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An object of class \code{\link{nafta}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legend Should a legend be added?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param main Possibility to override the main title of the plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to \code{\link{plot.mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot.nafta &lt;- function(x, legend = FALSE, main = "auto", ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (main == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">94</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.na(x$title)) main = ""</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else main = x$title</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(x$mmkin, ..., legend = legend, main = main)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print nafta objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print nafta objects. The results for the three models are printed in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' order of increasing model complexity, i.e. SFO, then IORE, and finally DFOP.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An \code{\link{nafta}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to be used for printing parameters and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dissipation times.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nafta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.nafta &lt;- function(x, quiet = TRUE, digits = 3, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Sums of squares:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$S)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nCritical sum of squares for checking the SFO model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$S_c)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nParameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$parameters, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_rep &lt;- .evaluate_nafta_results(x$S, x$S_c, x$distimes, quiet = quiet)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nDTx values:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(signif(x$distimes, digits = digits))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nRepresentative half-life:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(round(t_rep, 2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">.evaluate_nafta_results &lt;- function(S, S_c, distimes, quiet = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_SFO &lt;- distimes["IORE", "DT50"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_IORE &lt;- distimes["IORE", "DT50_rep"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_DFOP2 &lt;- distimes["DFOP", "DT50_rep"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (S["SFO"] &lt; S_c) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">130</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">131</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("S_SFO is lower than the critical value S_c, use the SFO model")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">133</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_rep &lt;- t_SFO</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("The SFO model is rejected as S_SFO is equal or higher than the critical value S_c")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (t_IORE &lt; t_DFOP2) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("The half-life obtained from the IORE model may be used")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_rep &lt;- t_IORE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">145</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("The representative half-life of the IORE model is longer than the one corresponding")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">146</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("to the terminal degradation rate found with the DFOP model.")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">147</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("The representative half-life obtained from the DFOP model may be used")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_rep &lt;- t_DFOP2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(t_rep)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary.nlme.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Summary method for class "nlme.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Lists model equations, initial parameter values, optimised parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for fixed effects (population), random effects (deviations from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' population mean) and residual error model, as well as the resulting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints such as formation fractions and DT50 values. Optionally</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (default is FALSE), the data are listed in full.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object an object of class [nlme.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x an object of class [summary.nlme.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data logical, indicating whether the full data should be included in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose Should the summary be verbose?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param distimes logical, indicating whether DT50 and DT90 values should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' included.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha error level for confidence interval estimation from the t</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' distribution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots optional arguments passed to methods like \code{print}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The summary function returns a list based on the [nlme] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' obtained in the fit, with at least the following additional components</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{nlmeversion, mkinversion, Rversion}{The nlme, mkin and R versions used}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{date.fit, date.summary}{The dates where the fit and the summary were</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' produced}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{diffs}{The differential equations used in the degradation model}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{use_of_ff}{Was maximum or minimum use made of formation fractions}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{data}{The data}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_trans}{Transformed parameters as used in the optimisation, with confidence intervals}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_back}{Backtransformed parameters, with confidence intervals if available}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{ff}{The estimated formation fractions derived from the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{distimes}{The DT50 and DT90 values for each observed variable.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{SFORB}{If applicable, eigenvalues of SFORB components of the model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The print method is called for its side effect, i.e. printing the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats predict</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke for the mkin specific parts</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' José Pinheiro and Douglas Bates for the components inherited from nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Generate five datasets following SFO kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dt50_sfo_in_pop &lt;- 50</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_in_pop &lt;- log(2) / dt50_sfo_in_pop</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(1234)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_in &lt;- rlnorm(5, log(k_in_pop), 0.5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO &lt;- mkinmod(parent = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' pred_sfo &lt;- function(k) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = k),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_sfo_mean &lt;- lapply(k_in, pred_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds_sfo_mean) &lt;- paste("ds", 1:5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(12345)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_sfo_syn &lt;- lapply(ds_sfo_mean, function(ds) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' add_err(ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sdfunc = function(value) sqrt(1^2 + value^2 * 0.07^2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n = 1)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Evaluate using mmkin and nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin &lt;- mmkin("SFO", ds_sfo_syn, quiet = TRUE, error_model = "tc", cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme &lt;- nlme(f_mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(f_nlme, data = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary.nlme.mmkin &lt;- function(object, data = FALSE, verbose = FALSE, distimes = TRUE, alpha = 0.05, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(object$mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_trans &lt;- intervals(object, which = "fixed", level = 1 - alpha)$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(confint_trans, "label") &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames &lt;- rownames(confint_trans)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bp &lt;- backtransform_odeparms(confint_trans[, "est."], object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(bp)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # variance-covariance estimates for fixed effects (from summary.lme)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed &lt;- fixef(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stdFixed &lt;- sqrt(diag(as.matrix(object$varFix)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$corFixed &lt;- array(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t(object$varFix/stdFixed)/stdFixed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(object$varFix),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> list(names(fixed), names(fixed)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform boundaries of CI for one parameter at a time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # with the exception of sets of formation fractions (single fractions are OK).</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names_skip &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) { # Figure out sets of fractions to skip</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">436<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- grep(paste("^f", box, sep = "_"), pnames, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">436<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_paths &lt;- length(f_names)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">100</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_paths &gt; 1) f_names_skip &lt;- c(f_names_skip, f_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back &lt;- matrix(NA, nrow = length(bp), ncol = 3,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(bpnames, colnames(confint_trans)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[, "est."] &lt;- bp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in pnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!pname %in% f_names_skip) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.lower &lt;- confint_trans[pname, "lower"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.upper &lt;- confint_trans[pname, "upper"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(par.lower) &lt;- names(par.upper) &lt;- pname</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpl &lt;- backtransform_odeparms(par.lower, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpu &lt;- backtransform_odeparms(par.upper, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpl), "lower"] &lt;- bpl</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">1410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpu), "upper"] &lt;- bpu</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_trans &lt;- confint_trans</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_back &lt;- confint_back</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$date.summary = date()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$use_of_ff = object$mkinmod$use_of_ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$error_model_algorithm = object$mmkin[[1]]$error_model_algorithm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object$mmkin[[1]]$err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$diffs &lt;- object$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$print_data &lt;- data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["observed"]] &lt;- object$data[["value"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["value"]] &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["predicted"]] &lt;- predict(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["residual"]] &lt;- residuals(object, type = "response")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object$modelStruct$varStruct)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">138</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["std"]] &lt;- object$sigma</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["std"]] &lt;- 1/attr(object$modelStruct$varStruct, "weights")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[["standardized"]] &lt;- residuals(object, type = "pearson")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$verbose &lt;- verbose</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$fixed &lt;- object$mmkin[[1]]$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$AIC = AIC(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$BIC = BIC(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$logLik = logLik(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep &lt;- endpoints(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$ff) != 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$ff &lt;- ep$ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (distimes) object$distimes &lt;- ep$distimes</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">154</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$SFORB) != 0) object$SFORB &lt;- ep$SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(object) &lt;- c("summary.nlme.mmkin", "nlme.mmkin", "nlme", "lme")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">319<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary.nlme.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.summary.nlme.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), verbose = x$verbose, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("nlme version used for fitting: ", x$nlmeversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("mkin version used for pre-fitting: ", x$mkinversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("R version used for fitting: ", x$Rversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of fit: ", x$date.fit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of summary:", x$date.summary, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEquations:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", x[["diffs"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nModel predictions using solution type", x$solution_type, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFitted in", x$time[["elapsed"]], "s using", x$numIter, "iterations\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nVariance model: ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(switch(x$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "Constant variance",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "Variance unique to each observed variable",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "Two-component variance function"), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nMean of starting values for individual parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$mean_dp_start, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFixed degradation parameter values:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(x$fixed$value) == 0) cat("None\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">193</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else print(x$fixed, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResults:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(AIC = x$AIC, BIC = x$BIC, logLik = x$logLik,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = " "), digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nOptimised, transformed parameters with symmetric confidence intervals:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_trans, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(x$confint_trans) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corr &lt;- x$corFixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(corr) &lt;- "correlation"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(corr, title = "\nCorrelation:", rdig = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n") # Random effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(summary(x$modelStruct), sigma = x$sigma,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reEstimates = x$coef$random, digits = digits, verbose = verbose, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nBacktransformed parameters with asymmetric confidence intervals:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_back, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printSFORB &lt;- !is.null(x$SFORB)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printSFORB){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">218</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated Eigenvalues of SFORB model(s):\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">219</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$SFORB, digits = digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printff &lt;- !is.null(x$ff)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printff){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">224</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResulting formation fractions:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">225</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(ff = x$ff), digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printdistimes &lt;- !is.null(x$distimes)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printdistimes){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated disappearance times:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$distimes, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$print_data){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">235</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">236</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(format(x$data, digits = digits, ...), row.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinerrplot.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("variable", "residual"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to plot squared residuals and the error model for an mkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function plots the squared residuals for the specified subset of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed variables from an mkinfit object. In addition, one or more dashed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' line(s) show the fitted error model. A combined plot of the fitted model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and this error model plot can be obtained with \code{\link{plot.mkinfit}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using the argument \code{show_errplot = TRUE}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A fit represented in an \code{\link{mkinfit}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param obs_vars A character vector of names of the observed variables for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which residuals should be plotted. Defaults to all observed variables in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlim plot range in x direction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlab Label for the x axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylab Label for the y axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param maxy Maximum value of the residuals. This is used for the scaling of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the y axis and defaults to "auto".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legend Should a legend be plotted?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Where should the legend be placed? Default is "topright". Will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be passed on to \code{\link{legend}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param col_obs Colors for the observed variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pch_obs Symbols to be used for the observed variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param frame Should a frame be drawn around the plots?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots further arguments passed to \code{\link{plot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Nothing is returned by this function, as it is called for its side</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effect, namely to produce a plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{mkinplot}}, for a way to plot the data and the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lines of the mkinfit object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords hplot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model &lt;- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(model, FOCUS_2006_D, error_model = "tc", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinerrplot(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinerrplot &lt;- function (object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars = names(object$mkinmod$map),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = c(0, 1.1 * max(object$data$predicted)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Predicted", ylab = "Squared residual",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxy = "auto", legend= TRUE, lpos = "topright",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs = "auto", pch_obs = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars_all &lt;- as.character(unique(object$data$variable))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 0){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- intersect(obs_vars_all, obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">55</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else obs_vars &lt;- obs_vars_all</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals &lt;- subset(object$data, variable %in% obs_vars, residual)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (maxy == "auto") maxy = max(residuals^2, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set colors and symbols</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (col_obs[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs &lt;- 1:length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pch_obs[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs &lt;- 1:length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(col_obs) &lt;- names(pch_obs) &lt;- obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = xlab, ylab = ylab,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(0, 1.2 * maxy), frame = frame, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for(obs_var in obs_vars){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals_plot &lt;- subset(object$data, variable == obs_var, c("predicted", "residual"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(residuals_plot[["predicted"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals_plot[["residual"]]^2,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch = pch_obs[obs_var], col = col_obs[obs_var])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = object$errparms^2, lty = 2, col = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">130<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_name = paste0("sigma_", obs_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">130<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = object$errparms[sigma_name]^2, lty = 2,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">130<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_obs[obs_var])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_plot &lt;- function(predicted) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_twocomp(predicted,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_low = object$errparms[1],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rsd_high = object$errparms[2])^2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(sigma_plot, from = 0, to = max(object$data$predicted),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add = TRUE, lty = 2, col = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">275<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (legend == TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos, inset = c(0.05, 0.05), legend = obs_vars,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_obs[obs_vars], pch = pch_obs[obs_vars])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/parplot.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot parameter variability of multistart objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Produces a boxplot with all parameters from the multiple runs, scaled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' either by the parameters of the run with the highest likelihood,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' or by their medians as proposed in the paper by Duchesne et al. (2021).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Starting values of degradation model parameters and error model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are shown as green circles. The results obtained in the original run</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are shown as red circles.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The [multistart] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param llmin The minimum likelihood of objects to be shown</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param llquant Fractional value for selecting only the fits with higher</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' likelihoods. Overrides 'llmin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param scale By default, scale parameters using the best</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' available fit.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If 'median', parameters are scaled using the median parameters from all fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param main Title of the plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Positioning of the legend.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Passed to [boxplot]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Duchesne R, Guillemin A, Gandrillon O, Crauste F. Practical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' identifiability in the frame of nonlinear mixed effects models: the example</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the in vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' doi: 10.1186/s12859-021-04373-4.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [multistart]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats median quantile</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parplot &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("parplot")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parplot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parplot.multistart.saem.mmkin &lt;- function(object, llmin = -Inf, llquant = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> scale = c("best", "median"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lpos = "bottomleft", main = "", ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig &lt;- attr(object, "orig")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig_parms &lt;- parms(orig)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_degparms &lt;- orig$mean_dp_start</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_parms &lt;- parms(object, exclude_failed = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object, "multistart.saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llfunc &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">48</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object$so, "try-error")) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">1408<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(logLik(object$so))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">52</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("parplot is only implemented for multistart.saem.mmkin objects")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;- sapply(object, llfunc)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(llquant[1])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (llmin != -Inf) warning("Overriding 'llmin' because 'llquant' was specified")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llmin &lt;- quantile(ll, 1 - llquant)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> selected &lt;- which(ll &gt; llmin)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> selected_parms &lt;- all_parms[selected, ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(las = 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (orig$transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_names_transformed &lt;- names(start_degparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_index &lt;- which(names(orig_parms) %in% degparm_names_transformed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig_parms[degparm_names_transformed] &lt;- backtransform_odeparms(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig_parms[degparm_names_transformed],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig$mmkin[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = orig$mmkin[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = orig$mmkin[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_degparms &lt;- backtransform_odeparms(start_degparms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig$mmkin[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = orig$mmkin[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = orig$mmkin[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_names &lt;- names(start_degparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(orig_parms) &lt;- c(degparm_names, names(orig_parms[-degparm_index]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> selected_parms[, degparm_names_transformed] &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t(apply(selected_parms[, degparm_names_transformed], 1, backtransform_odeparms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig$mmkin[[1]]$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = orig$mmkin[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = orig$mmkin[[1]]$transform_fractions))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(selected_parms)[1:length(degparm_names)] &lt;- degparm_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_errparms &lt;- orig$so@model@error.init</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(start_errparms) &lt;- orig$so@model@name.sigma</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_omegaparms &lt;- orig$so@model@omega.init</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_parms &lt;- c(start_degparms, start_errparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> scale &lt;- match.arg(scale)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_scale &lt;- switch(scale,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> best = selected_parms[which.best(object[selected]), ],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> median = apply(selected_parms, 2, median)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Boxplots of all scaled parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> selected_scaled_parms &lt;- t(apply(selected_parms, 1, function(x) x / parm_scale))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> boxplot(selected_scaled_parms, log = "y", main = main, ,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = "Normalised parameters", ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show starting parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_scaled_parms &lt;- rep(NA_real_, length(orig_parms))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(start_scaled_parms) &lt;- names(orig_parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_scaled_parms[names(start_parms)] &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_parms / parm_scale[names(start_parms)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(start_scaled_parms, col = 3, cex = 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show parameters of original run</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> orig_scaled_parms &lt;- orig_parms / parm_scale</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(orig_scaled_parms, col = 2, cex = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = 1, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos, inset = c(0.05, 0.05), bty = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch = 1, col = 3:1, lty = c(NA, NA, 1),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Original start",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Original results",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Multistart runs"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/plot.mixed.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables("ds")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An object of class [mixed.mmkin], [saem.mmkin] or [nlme.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param i A numeric index to select datasets for which to plot the individual predictions,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in case plots get too large</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inheritParams plot.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized Should the residuals be standardized? Only takes effect if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' `resplot = "time"`.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pop_curves Per default, one population curve is drawn in case</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' population parameters are fitted by the model, e.g. for saem objects.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' In case there is a covariate model, the behaviour depends on the value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of 'covariates'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariates Data frame with covariate values for all variables in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' any covariate models in the object. If given, it overrides 'covariate_quantiles'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Each line in the data frame will result in a line drawn for the population.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Rownames are used in the legend to label the lines.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param covariate_quantiles This argument only has an effect if the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object has covariate models. If so, the default is to show three population</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' curves, for the 5th percentile, the 50th percentile and the 95th percentile</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the covariate values used for fitting the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note Covariate models are currently only supported for saem.mmkin objects.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pred_over Named list of alternative predictions as obtained</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from [mkinpredict] with a compatible [mkinmod].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test_log_parms Passed to [mean_degparms] in the case of an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mixed.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level Passed to [mean_degparms] in the case of an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mixed.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param default_log_parms Passed to [mean_degparms] in the case of an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mixed.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel.height.legend The relative height of the legend shown on top</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel.height.bottom The relative height of the bottom plot row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ymax Vector of maximum y axis values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ncol.legend Number of columns to use in the legend</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param nrow.legend Number of rows to use in the legend</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param resplot Should the residuals plotted against time or against</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' predicted values?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param col_ds Colors used for plotting the observed data and the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' corresponding model prediction lines for the different datasets.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pch_ds Symbols to be used for plotting the data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lty_ds Line types to be used for the model predictions.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats coefficients</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) x$data[c("name", "time", "value")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds) &lt;- paste0("ds ", 6:10)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_sfo &lt;- mkinmod(parent = mkinsub("DFOP", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(list("DFOP-SFO" = dfop_sfo), ds, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f[, 3:4], standardized = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # For this fit we need to increase pnlsMaxiter, and we increase the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # tolerance in order to speed up the fit for this example evaluation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # It still takes 20 seconds to run</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme &lt;- nlme(f, control = list(pnlsMaxIter = 120, tolerance = 1e-3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem &lt;- saem(f, transformations = "saemix")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_obs &lt;- mmkin(list("DFOP-SFO" = dfop_sfo), ds, quiet = TRUE, error_model = "obs")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlmix &lt;- nlmix(f_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlmix)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can overlay the two variants if we generate predictions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' pred_nlme &lt;- mkinpredict(dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme$bparms.optim[-1],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = f_nlme$bparms.optim[[1]], A1 = 0),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' seq(0, 180, by = 0.2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_saem, pred_over = list(nlme = pred_nlme))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot.mixed.mmkin &lt;- function(x,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> i = 1:ncol(x$mmkin),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars = names(x$mkinmod$map),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_quantiles = c(0.5, 0.05, 0.95),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Time",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = range(x$data$time),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> resplot = c("predicted", "time"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_over = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_log_parms = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.level = 0.6,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> default_log_parms = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ymax = "auto", maxabs = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ncol.legend = ifelse(length(i) &lt;= 3, length(i) + 1, ifelse(length(i) &lt;= 8, 3, 4)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow.legend = ceiling((length(i) + 1) / ncol.legend),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.height.legend = 0.02 + 0.07 * nrow.legend,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.height.bottom = 1.1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_ds = 1:length(i),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_ds = pch_ds + 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_ds = col_ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = TRUE, ...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Prepare parameters and data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_1 &lt;- x$mmkin[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_names &lt;- colnames(x$mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> backtransform = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(class(x), "mixed.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(pop_curves, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">110</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- mean_degparms(x$mmkin, test_log_parms = test_log_parms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.level = conf.level, default_log_parms = default_log_parms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_tmp &lt;- parms(x$mmkin, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_i &lt;- as.data.frame(t(degparms_tmp[setdiff(rownames(degparms_tmp), names(fit_1$errparms)), ]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residual_type = ifelse(standardized, "standardized", "residual")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals &lt;- x$data[[residual_type]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x, "nlme.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(pop_curves, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">129</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_i &lt;- coefficients(x)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- nlme::fixef(x)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals &lt;- residuals(x,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> type = ifelse(standardized, "pearson", "response"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(x, "saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$transformations == "saemix") backtransform = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> psi &lt;- saemix::psi(x$so)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(psi) &lt;- x$saemix_ds_order</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_i &lt;- psi[ds_names, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_i_names &lt;- colnames(degparms_i)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residual_type = ifelse(standardized, "standardized", "residual")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals &lt;- x$data[[residual_type]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(pop_curves, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x$covariate_models) == 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- x$so@results@fixed.effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(degparms_pop) &lt;- degparms_i_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">152</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">153</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = as.data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">154</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> apply(x$covariates, 2, quantile,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">155</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariate_quantiles, simplify = FALSE))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">156</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covariates) &lt;- paste(</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">157</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(length(x$covariate_models) == 1,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">158</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Covariate", "Covariates"),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">159</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covariates))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">161</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- parms(x, covariates = covariates)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">162</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">165</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pop_curves &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Make sure degparms_pop is a matrix, columns corresponding to population curve(s)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(dim(degparms_pop))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_pop &lt;- matrix(degparms_pop, ncol = 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(names(degparms_pop), "Population"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_fixed &lt;- fit_1$fixed$value</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(degparms_fixed) &lt;- rownames(fit_1$fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_all &lt;- cbind(as.matrix(degparms_i),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> matrix(rep(degparms_fixed, nrow(degparms_i)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ncol = length(degparms_fixed),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow = nrow(degparms_i), byrow = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_all_names &lt;- c(names(degparms_i), names(degparms_fixed))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(degparms_all) &lt;- degparms_all_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_names &lt;- grep("_0$", degparms_all_names, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_names &lt;- setdiff(degparms_all_names, odeini_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- cbind(x$data[c("ds", "name", "time", "value")],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residual = residuals)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = fit_1$solution_type</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes &lt;- sort(unique(c(x$data$time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> seq(xlim[1], xlim[2], length.out = 50))))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list &lt;- lapply(i, function(ds_i) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_trans &lt;- degparms_all[ds_i, odeparms_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeparms_trans) &lt;- odeparms_names # needed if only one odeparm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (backtransform) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">2620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- backtransform_odeparms(odeparms_trans,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">2620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">2620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = fit_1$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">2620<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = fit_1$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">325<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- odeparms_trans</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- degparms_all[ds_i, odeini_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- gsub("_0", "", odeini_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- mkinpredict(x$mkinmod, odeparms, odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes, solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">2945<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = fit_1$atol, rtol = fit_1$rtol)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(pred_list) &lt;- ds_names[i]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_ds &lt;- vctrs::vec_rbind(!!!pred_list, .names_to = "ds")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">220</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list_pop &lt;- lapply(1:ncol(degparms_pop), function(cov_i) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_all_pop_i &lt;- c(degparms_pop[, cov_i], degparms_fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_pop_trans_i &lt;- degparms_all_pop_i[odeparms_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeparms_pop_trans_i) &lt;- odeparms_names # needed if only one odeparm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (backtransform) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_pop_i &lt;- backtransform_odeparms(odeparms_pop_trans_i,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">227</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = fit_1$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = fit_1$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">229</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_pop_i &lt;- odeparms_pop_trans_i</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- degparms_all_pop_i[odeini_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- gsub("_0", "", odeini_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">235</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- mkinpredict(x$mkinmod, odeparms_pop_i, odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes, solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = fit_1$atol, rtol = fit_1$rtol)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">239</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(pred_list_pop) &lt;- colnames(degparms_pop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">243</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list_pop &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Start of graphical section</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">250</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_rows = length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plots = n_plot_rows * 2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">252</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">253</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set relative plot heights, so the first plot row is the norm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">254</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.heights &lt;- if (n_plot_rows &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">255</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c(rel.height.legend, c(rep(1, n_plot_rows - 1), rel.height.bottom))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">257</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c(rel.height.legend, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">260</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout_matrix = matrix(c(1, 1, 2:(n_plots + 1)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_rows + 1, 2, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">262</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(layout_matrix, heights = rel.heights)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">263</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(0.1, 2.1, 0.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Empty plot with legend</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">267</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(pred_over)) lty_over &lt;- seq(2, length.out = length(pred_over))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else lty_over &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">270</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">271</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_pop &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(lty_pop) &lt;- "Population"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">273</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">274</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_pop &lt;- 1:nrow(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">275</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(lty_pop) &lt;- rownames(covariates)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">278</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_pop &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">279</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_pop_over &lt;- length(lty_pop) + length(lty_over)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">281</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">282</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n", axes = FALSE, ann = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend("center", bty = "n", ncol = ncol.legend,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = c(names(lty_pop), names(pred_over), ds_names[i]),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty = c(lty_pop, lty_over, lty_ds),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lwd = c(rep(2, n_pop_over), rep(1, length(i))),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">287</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = c(rep(1, n_pop_over), col_ds),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch = c(rep(NA, n_pop_over), pch_ds))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">290</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> resplot &lt;- match.arg(resplot)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Loop plot rows</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (plot_row in 1:n_plot_rows) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">294</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">295</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_var &lt;- obs_vars[plot_row]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">296</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed_row &lt;- subset(observed, name == obs_var)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set ylim to sensible default, or use ymax</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">299</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(ymax, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">300</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row = c(0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">301</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max(c(observed_row$value, pred_ds[[obs_var]]), na.rm = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">302</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">303</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row = c(0, ymax[plot_row])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">304</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">305</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">306</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for bottom row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">307</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # This is the only row that needs to show the x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (plot_row == n_plot_rows) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">309</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(5.1, 4.1, 1.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">310</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">218<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 1.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">312</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">313</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">314</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">315</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim, ylim = ylim_row,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">316</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = xlab, ylab = paste("Residues", obs_var), frame = frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">318</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(pred_over)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">319</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i_over in seq_along(pred_over)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">320</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_frame &lt;- as.data.frame(pred_over[[i_over]])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">321</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lines(pred_frame$time, pred_frame[[obs_var]],</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">322</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lwd = 2, lty = lty_over[i_over])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">323</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">324</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">325</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">326</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (ds_i in seq_along(i)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">327</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(subset(observed_row, ds == ds_names[ds_i], c("time", "value")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">328</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_ds[ds_i], pch = pch_ds[ds_i])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">329</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lines(subset(pred_ds, ds == ds_names[ds_i], c("time", obs_var)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">330</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_ds[ds_i], lty = lty_ds[ds_i])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">331</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">332</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">333</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pop_curves) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">334</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (cov_i in seq_along(pred_list_pop)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">335</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cov_name &lt;- names(pred_list_pop)[cov_i]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">336</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lines(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">337</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list_pop[[cov_i]][, "time"],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">338</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pred_list_pop[[cov_i]][, obs_var],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">339</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> type = "l", lwd = 2, lty = lty_pop[cov_i])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">340</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">341</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">342</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">343</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(maxabs, "auto")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">344</td>
+ <td class="coverage">283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxabs = max(abs(observed_row$residual), na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">345</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">346</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">347</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(resplot, "time")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">348</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n", xlim = xlim, xlab = "Time",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">349</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(-1.2 * maxabs, 1.2 * maxabs),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">350</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = if (standardized) "Standardized residual" else "Residual",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">351</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">352</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">353</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = 0, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">354</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">355</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (ds_i in seq_along(i)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">356</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(subset(observed_row, ds == ds_names[ds_i], c("time", "residual")),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">357</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_ds[ds_i], pch = pch_ds[ds_i])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">358</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">359</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">360</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">361</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(resplot, "predicted")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">362</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">363</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = c(0, max(pred_ds[[obs_var]])),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">364</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Predicted",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">365</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(-1.2 * maxabs, 1.2 * maxabs),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">366</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = if (standardized) "Standardized residual" else "Residual",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">367</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">368</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">369</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = 0, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">370</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">371</td>
+ <td class="coverage">501<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (ds_i in seq_along(i)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">372</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed_row_ds &lt;- merge(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">373</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> subset(observed_row, ds == ds_names[ds_i], c("time", "residual")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">374</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> subset(pred_ds, ds == ds_names[ds_i], c("time", obs_var)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">375</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(observed_row_ds[c(3, 2)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">376</td>
+ <td class="coverage">4915<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_ds[ds_i], pch = pch_ds[ds_i])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">377</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">378</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">379</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">380</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Summary method for class "mkinfit"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Lists model equations, initial parameter values, optimised parameters with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' some uncertainty statistics, the chi2 error levels calculated according to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS guidance (2006) as defined therein, formation fractions, DT50 values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and optionally the data, consisting of observed, predicted and residual</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object an object of class [mkinfit].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x an object of class \code{summary.mkinfit}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data logical, indicating whether the data should be included in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param distimes logical, indicating whether DT50 and DT90 values should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' included.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha error level for confidence interval estimation from t</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' distribution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots optional arguments passed to methods like \code{print}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats qt pt cov2cor</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The summary function returns a list with components, among others</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{version, Rversion}{The mkin and R versions used}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{date.fit, date.summary}{The dates where the fit and the summary were</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' produced}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{diffs}{The differential equations used in the model}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{use_of_ff}{Was maximum or minimum use made of formation fractions}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{bpar}{Optimised and backtransformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{data}{The data (see Description above).}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{start}{The starting values and bounds, if applicable, for optimised</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{fixed}{The values of fixed parameters.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{errmin }{The chi2 error levels for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' each observed variable.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{bparms.ode}{All backtransformed ODE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters, for use as starting parameters for related models.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{errparms}{Error model parameters.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{ff}{The estimated formation fractions derived from the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{distimes}{The DT50 and DT90 values for each observed variable.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{SFORB}{If applicable, eigenvalues and fractional eigenvector component</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' g of SFORB systems in the model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The print method is called for its side effect, i.e. printing the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(mkinfit("SFO", FOCUS_2006_A, quiet = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary.mkinfit &lt;- function(object, data = TRUE, distimes = TRUE, alpha = 0.05, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> param &lt;- object$par</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames &lt;- names(param)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(object$bparms.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> epnames &lt;- names(object$errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> p &lt;- length(param)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(object$mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar &lt;- try(solve(object$hessian), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_notrans &lt;- try(solve(object$hessian_notrans), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rdf &lt;- object$df.residual</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.numeric(covar) | is.na(covar[1])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">66</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">67</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> se &lt;- lci &lt;- uci &lt;- rep(NA, p)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covar) &lt;- colnames(covar) &lt;- pnames</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> se &lt;- sqrt(diag(covar))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci &lt;- param + qt(alpha/2, rdf) * se</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci &lt;- param + qt(1-alpha/2, rdf) * se</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beparms.optim &lt;- c(object$bparms.optim, object$par[epnames])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.numeric(covar_notrans) | is.na(covar_notrans[1])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_notrans &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> se_notrans &lt;- tval &lt;- pval &lt;- rep(NA, p)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">52070<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covar_notrans) &lt;- colnames(covar_notrans) &lt;- c(bpnames, epnames)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">52070<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> se_notrans &lt;- sqrt(diag(covar_notrans))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">52070<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tval &lt;- beparms.optim / se_notrans</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">52070<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pval &lt;- pt(abs(tval), rdf, lower.tail = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(se) &lt;- pnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> param &lt;- cbind(param, se, lci, uci)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(param) &lt;- list(pnames, c("Estimate", "Std. Error", "Lower", "Upper"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparam &lt;- cbind(Estimate = beparms.optim, se_notrans,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "t value" = tval, "Pr(&gt;t)" = pval, Lower = NA, Upper = NA)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform boundaries of CI for one parameter at a time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # with the exception of sets of formation fractions (single fractions are OK).</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names_skip &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) { # Figure out sets of fractions to skip</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">70671<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- grep(paste("^f", box, sep = "_"), pnames, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">70671<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_paths &lt;- length(f_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">1135<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_paths &gt; 1) f_names_skip &lt;- c(f_names_skip, f_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in pnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">293621<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!pname %in% f_names_skip) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.lower &lt;- param[pname, "Lower"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.upper &lt;- param[pname, "Upper"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(par.lower) &lt;- names(par.upper) &lt;- pname</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpl &lt;- backtransform_odeparms(par.lower, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpu &lt;- backtransform_odeparms(par.upper, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparam[names(bpl), "Lower"] &lt;- bpl</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">290217<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparam[names(bpu), "Upper"] &lt;- bpu</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparam[epnames, c("Lower", "Upper")] &lt;- param[epnames, c("Lower", "Upper")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans &lt;- list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> version = as.character(utils::packageVersion("mkin")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Rversion = paste(R.version$major, R.version$minor, sep="."),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> date.fit = object$date,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> date.summary = date(),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = object$solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warnings = object$summary_warnings,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff = object$mkinmod$use_of_ff,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model_algorithm = object$error_model_algorithm,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> df = c(p, rdf),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar = covar,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_notrans = covar_notrans,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> niter = object$iterations,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> calls = object$calls,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = object$time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par = param,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpar = bparam)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(object$version)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$fit_version &lt;- object$version</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$fit_Rversion &lt;- object$Rversion</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ans$fit_version &gt;= "0.9.49.6") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">52156<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$AIC = AIC(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">52156<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$BIC = BIC(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">52156<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$logLik = logLik(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$diffs &lt;- object$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(data) ans$data &lt;- object$data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$start &lt;- object$start</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$start_transformed &lt;- object$start_transformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$fixed &lt;- object$fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$errmin &lt;- mkinerrmin(object, alpha = 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$calls &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(ans$covar)){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Corr &lt;- cov2cor(ans$covar)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(Corr) &lt;- colnames(Corr) &lt;- rownames(ans$par)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$Corr &lt;- Corr</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">164</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Could not calculate correlation; no covariance matrix")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$bparms.ode &lt;- object$bparms.ode</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$shapiro.p &lt;- object$shapiro.p</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep &lt;- endpoints(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$ff) != 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">15612<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans$ff &lt;- ep$ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (distimes) ans$distimes &lt;- ep$distimes</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">2442<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$SFORB) != 0) ans$SFORB &lt;- ep$SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">43972<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(object$d_3_message)) ans$d_3_message &lt;- object$d_3_message</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(ans) &lt;- "summary.mkinfit"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">52158<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ans)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.summary.mkinfit &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(x$fit_version)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">184</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("mkin version: ", x$version, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">185</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("R version: ", x$Rversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("mkin version used for fitting: ", x$fit_version, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("R version used for fitting: ", x$fit_Rversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of fit: ", x$date.fit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of summary:", x$date.summary, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEquations:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", x[["diffs"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> df &lt;- x$df</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rdf &lt;- df[2]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nModel predictions using solution type", x$solution_type, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFitted using", x$calls, "model solutions performed in", x$time[["elapsed"]], "s\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$err_mod)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nError model: ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(switch(x$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "Constant variance",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "Variance unique to each observed variable",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "Two-component variance function"), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nError model algorithm:", x$error_model_algorithm, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">212</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$d_3_message)) cat(x$d_3_message, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for parameters to be optimised:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$start)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for the transformed parameters actually optimised:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$start_transformed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFixed parameter values:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(x$fixed$value) == 0) cat("None\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else print(x$fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We used to only have one warning - show this for summarising old objects</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">226</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x[["warning"]])) cat("\n\nWarning:", x$warning, "\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x$warnings) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">229</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n\nWarning(s):", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">230</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(x$warnings, sep = "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$AIC)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResults:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(AIC = x$AIC, BIC = x$BIC, logLik = x$logLik,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = " "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nOptimised, transformed parameters with symmetric confidence intervals:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(signif(x$par, digits = digits))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$calls &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nParameter correlation:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$covar)){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$Corr, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">247</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("No covariance matrix")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">248</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nBacktransformed parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Confidence intervals for internally transformed parameters are asymmetric.\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ((x$version) &lt; "0.9-36") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">254</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("To get the usual (questionable) t-test, upgrade mkin and repeat the fit.\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">255</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(signif(x$bpar, digits = digits))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">257</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("t-test (unrealistically) based on the assumption of normal distribution\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">258</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("for estimators of untransformed parameters.\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">259</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(signif(x$bpar[, c(1, 3, 4, 5, 6)], digits = digits))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">262</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFOCUS Chi2 error levels in percent:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$errmin$err.min &lt;- 100 * x$errmin$err.min</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$errmin, digits=digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printSFORB &lt;- !is.null(x$SFORB)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printSFORB){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated Eigenvalues and DFOP g parameter of SFORB model(s):\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$SFORB, digits=digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">270</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printff &lt;- !is.null(x$ff)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">273</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printff){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">274</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResulting formation fractions:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">275</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(ff = x$ff), digits=digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printdistimes &lt;- !is.null(x$distimes)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printdistimes){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated disappearance times:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$distimes, digits=digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">282</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">283</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printdata &lt;- !is.null(x$data)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (printdata){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">287</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(format(x$data, digits = digits, ...), row.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">288</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">290</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("name", "time", "value"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fit a kinetic model to data with one or more state variables</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function maximises the likelihood of the observed data using the Port</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' algorithm [stats::nlminb()], and the specified initial or fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters and starting values. In each step of the optimisation, the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic model is solved using the function [mkinpredict()], except</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if an analytical solution is implemented, in which case the model is solved</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using the degradation function in the [mkinmod] object. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters of the selected error model are fitted simultaneously with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation model parameters, as both of them are arguments of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' likelihood function.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Per default, parameters in the kinetic models are internally transformed in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' order to better satisfy the assumption of a normal distribution of their</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' estimators.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param mkinmod A list of class [mkinmod], containing the kinetic</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model to be fitted to the data, or one of the shorthand names ("SFO",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOMC", "DFOP", "HS", "SFORB", "IORE"). If a shorthand name is given, a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent only degradation model is generated for the variable with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' highest value in \code{observed}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param observed A dataframe with the observed data. The first column called</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "name" must contain the name of the observed variable for each data point.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The second column must contain the times of observation, named "time".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The third column must be named "value" and contain the observed values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Zero values in the "value" column will be removed, with a warning, in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' order to avoid problems with fitting the two-component error model. This</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is not expected to be a problem, because in general, values of zero are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' not observed in degradation data, because there is a lower limit of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' detection.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parms.ini A named vector of initial values for the parameters,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' including parameters to be optimised and potentially also fixed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as indicated by \code{fixed_parms}. If set to "auto", initial values for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rate constants are set to default values. Using parameter names that are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' not in the model gives an error.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' It is possible to only specify a subset of the parameters that the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' needs. You can use the parameter lists "bparms.ode" from a previously</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitted model, which contains the differential equation parameters from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' this model. This works nicely if the models are nested. An example is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' given below.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param state.ini A named vector of initial values for the state variables of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the model. In case the observed variables are represented by more than one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model variable, the names will differ from the names of the observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables (see \code{map} component of [mkinmod]). The default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is to set the initial value of the first model variable to the mean of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time zero values for the variable with the maximum observed value, and all</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' others to 0. If this variable has no time zero observations, its initial</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' value is set to 100.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param err.ini A named vector of initial values for the error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters to be optimised. If set to "auto", initial values are set to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' default values. Otherwise, inital values for all error model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' must be given.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fixed_parms The names of parameters that should not be optimised but</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rather kept at the values specified in \code{parms.ini}. Alternatively,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a named numeric vector of parameters to be fixed, regardless of the values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in parms.ini.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fixed_initials The names of model variables for which the initial</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' state at time 0 should be excluded from the optimisation. Defaults to all</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' state variables except for the first one.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param from_max_mean If this is set to TRUE, and the model has only one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed variable, then data before the time of the maximum observed value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (after averaging for each sampling time) are discarded, and this time is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' subtracted from all remaining time values, so the time of the maximum</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed mean value is the new time zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param solution_type If set to "eigen", the solution of the system of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' differential equations is based on the spectral decomposition of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' coefficient matrix in cases that this is possible. If set to "deSolve", a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' numerical [ode solver from package deSolve][deSolve::ode()] is used. If</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set to "analytical", an analytical solution of the model is used. This is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' only implemented for relatively simple degradation models. The default is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "auto", which uses "analytical" if possible, otherwise "deSolve" if a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compiler is present, and "eigen" if no compiler is present and the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' can be expressed using eigenvalues and eigenvectors.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method.ode The solution method passed via [mkinpredict()]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to [deSolve::ode()] in case the solution type is "deSolve". The default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "lsoda" is performant, but sometimes fails to converge.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_compiled If set to \code{FALSE}, no compiled version of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mkinmod] model is used in the calls to [mkinpredict()] even if a compiled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' version is present.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param control A list of control arguments passed to [stats::nlminb()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transform_rates Boolean specifying if kinetic rate constants should</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be transformed in the model specification used in the fitting for better</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compliance with the assumption of normal distribution of the estimator. If</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' TRUE, also alpha and beta parameters of the FOMC model are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log-transformed, as well as k1 and k2 rate constants for the DFOP and HS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' models and the break point tb of the HS model. If FALSE, zero is used as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a lower bound for the rates in the optimisation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transform_fractions Boolean specifying if formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' should be transformed in the model specification used in the fitting for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' better compliance with the assumption of normal distribution of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' estimator. The default (TRUE) is to do transformations. If TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the g parameter of the DFOP model is also transformed. Transformations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' are described in [transform_odeparms].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Suppress printing out the current value of the negative</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log-likelihood after each improvement?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param atol Absolute error tolerance, passed to [deSolve::ode()]. Default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is 1e-8, which is lower than the default in the [deSolve::lsoda()]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function which is used per default.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rtol Absolute error tolerance, passed to [deSolve::ode()]. Default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is 1e-10, much lower than in [deSolve::lsoda()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param error_model If the error model is "const", a constant standard</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deviation is assumed.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the error model is "obs", each observed variable is assumed to have its</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' own variance.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the error model is "tc" (two-component error model), a two component</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' error model similar to the one described by Rocke and Lorenzato (1995) is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' used for setting up the likelihood function. Note that this model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deviates from the model by Rocke and Lorenzato, as their model implies</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' that the errors follow a lognormal distribution for large values, not a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' normal distribution as assumed by this method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param error_model_algorithm If "auto", the selected algorithm depends on</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the error model. If the error model is "const", unweighted nonlinear</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' least squares fitting ("OLS") is selected. If the error model is "obs", or</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "tc", the "d_3" algorithm is selected.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "d_3" will directly minimize the negative log-likelihood</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and independently also use the three step algorithm described below.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The fit with the higher likelihood is returned.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "direct" will directly minimize the negative log-likelihood.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "twostep" will minimize the negative log-likelihood after an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' initial unweighted least squares optimisation step.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "threestep" starts with unweighted least squares, then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' optimizes only the error model using the degradation model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' found, and then minimizes the negative log-likelihood with free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation and error model parameters.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "fourstep" starts with unweighted least squares, then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' optimizes only the error model using the degradation model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' found, then optimizes the degradation model again with fixed error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters, and finally minimizes the negative log-likelihood with free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation and error model parameters.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The algorithm "IRLS" (Iteratively Reweighted Least Squares) starts with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' unweighted least squares, and then iterates optimization of the error</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model parameters and subsequent optimization of the degradation model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using those error model parameters, until the error model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' converge.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param reweight.tol Tolerance for the convergence criterion calculated from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the error model parameters in IRLS fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param reweight.max.iter Maximum number of iterations in IRLS fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param trace_parms Should a trace of the parameter values be listed?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test_residuals Should the residuals be tested for normal distribution?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments that will be passed on to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [deSolve::ode()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats nlminb aggregate dist shapiro.test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list with "mkinfit" in the class attribute.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note When using the "IORE" submodel for metabolites, fitting with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "transform_rates = TRUE" (the default) often leads to failures of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' numerical ODE solver. In this situation it may help to switch off the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' internal rate transformation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [summary.mkinfit], [plot.mkinfit], [parms] and [lrtest].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Comparisons of models fitted to the same data can be made using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{AIC}} by virtue of the method \code{\link{logLik.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fitting of several models to several datasets in a single call to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Rocke DM and Lorenzato S (1995) A two-component model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for measurement error in analytical chemistry. *Technometrics* 37(2), 176-184.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Ranke J and Meinecke S (2019) Error Models for the Kinetic Evaluation of Chemical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Degradation Data. *Environments* 6(12) 124</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \doi{10.3390/environments6120124}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Use shorthand notation for parent only degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # One parent compound, one metabolite, both single first order.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We remove zero values from FOCUS dataset D in order to avoid warnings</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS_D &lt;- subset(FOCUS_2006_D, value != 0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Use mkinsub for convenience in model formulation. Pathway to sink included per default.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Fit the model quietly to the FOCUS example dataset D using defaults</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_sep(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # As lower parent values appear to have lower variance, we try an alternative error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.tc &lt;- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">192</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This avoids the warning, and the likelihood ratio test confirms it is preferable</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(fit.tc, fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can also allow for different variances of parent and metabolite as error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.obs &lt;- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "obs")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The two-component error model has significantly higher likelihood</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(fit.obs, fit.tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit.tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fit.tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can show a quick (only one replication) benchmark for this case, as we</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # have several alternative solution methods for the model. We skip</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # uncompiled deSolve, as it is so slow. More benchmarks are found in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # benchmark vignette</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if(require(rbenchmark)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' benchmark(replications = 1, order = "relative", columns = c("test", "relative", "elapsed"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve_compiled = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "tc",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">209</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve", use_compiled = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' eigen = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "tc",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "eigen"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' analytical = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = "tc",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "analytical"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Use stepwise fitting, using optimised parameters from parent only fit, FOMC-SFO</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOMC_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("FOMC", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">222</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.FOMC_SFO &lt;- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Again, we get a warning and try a more sophisticated error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.FOMC_SFO.tc &lt;- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This model has a higher likelihood, but not significantly so</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(fit.tc, fit.FOMC_SFO.tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Also, the missing standard error for log_beta and the t-tests for alpha</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">228</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # and beta indicate overparameterisation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">229</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(fit.FOMC_SFO.tc, data = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can easily use starting parameters from the parent only fit (only for illustration)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.FOMC = mkinfit("FOMC", FOCUS_2006_D, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.FOMC_SFO &lt;- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms.ini = fit.FOMC$bparms.ode, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">235</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinfit &lt;- function(mkinmod, observed,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">239</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err.ini = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_parms = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_initials = names(mkinmod$diffs)[-1],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">243</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> from_max_mean = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = c("auto", "analytical", "eigen", "deSolve"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode = "lsoda",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_compiled = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">247</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = list(eval.max = 300, iter.max = 200),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">248</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> quiet = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">251</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = 1e-8, rtol = 1e-10,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">252</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model = c("const", "obs", "tc"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">253</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model_algorithm = c("auto", "d_3", "direct", "twostep", "threestep", "fourstep", "IRLS", "OLS"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reweight.tol = 1e-8, reweight.max.iter = 10,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trace_parms = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> test_residuals = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">259</td>
+ <td class="coverage">9202<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">9202<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary_warnings &lt;- character()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">263</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Derive the name used for the model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">9202<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.character(mkinmod)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">265</td>
+ <td class="coverage">4009<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod_name &lt;- mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">5193<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(mkinmod$name)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">5071<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod_name &lt;- deparse(substitute(mkinmod))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">269</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">270</td>
+ <td class="coverage">18<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod_name &lt;- mkinmod$name</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">272</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">273</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">274</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check mkinmod and generate a model for the variable whith the highest value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">275</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # if a suitable string is given</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">276</td>
+ <td class="coverage">9098<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_models_available = c("SFO", "FOMC", "DFOP", "HS", "SFORB", "IORE", "logistic")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">277</td>
+ <td class="coverage">9098<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(mkinmod, "mkinmod")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">4009<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> presumed_parent_name = observed[which.max(observed$value), "name"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">4009<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod[[1]] %in% parent_models_available) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">3905<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> speclist &lt;- list(list(type = mkinmod, sink = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">3905<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(speclist) &lt;- presumed_parent_name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">282</td>
+ <td class="coverage">3905<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod &lt;- mkinmod(speclist = speclist, use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">283</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Argument mkinmod must be of class mkinmod or a string containing one of\n ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(parent_models_available, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">286</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">287</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">288</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the names of the state variables in the model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">290</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the names of observed variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(mkinmod$spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">294</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Subset observed data with names of observed data in the model and remove NA values</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">296</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- subset(observed, name %in% obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">297</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- subset(observed, !is.na(value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">299</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Also remove zero values to avoid instabilities (e.g. of the 'tc' error model)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">300</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(observed$value == 0)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">301</td>
+ <td class="coverage">529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> zero_warning &lt;- "Observations with value of zero were removed from the data"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">302</td>
+ <td class="coverage">529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary_warnings &lt;- c(summary_warnings, Z = zero_warning)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">303</td>
+ <td class="coverage">529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning(zero_warning)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">304</td>
+ <td class="coverage">529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- subset(observed, value != 0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">305</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">306</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">307</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Sort observed values for efficient analytical predictions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$name &lt;- ordered(observed$name, levels = obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">309</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- observed[order(observed$name, observed$time), ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">310</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">311</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Obtain data for decline from maximum mean value if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">312</td>
+ <td class="coverage">8994<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (from_max_mean) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">313</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # This is only used for simple decline models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">314</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">315</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Decline from maximum is only implemented for models with a single observed variable")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">316</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$name &lt;- as.character(observed$name)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">318</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> means &lt;- aggregate(value ~ time, data = observed, mean, na.rm=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">319</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_of_max &lt;- means[which.max(means$value), "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">320</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- subset(observed, time &gt;= t_of_max)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">321</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$time &lt;- observed$time - t_of_max</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">322</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">323</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">324</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Number observations used for fitting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">325</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_observed &lt;- nrow(observed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">326</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">327</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define starting values for parameters where not specified by the user</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">328</td>
+ <td class="coverage">8371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parms.ini[[1]] == "auto") parms.ini = vector()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">329</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">330</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Override parms.ini for parameters given as a numeric vector in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">331</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # fixed_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">332</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.numeric(fixed_parms)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">333</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_parm_names &lt;- names(fixed_parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">334</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini[fixed_parm_names] &lt;- fixed_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">335</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_parms &lt;- fixed_parm_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">336</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">337</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">338</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Warn for inital parameter specifications that are not in the model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">339</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> wrongpar.names &lt;- setdiff(names(parms.ini), mkinmod$parms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">340</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(wrongpar.names) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">341</td>
+ <td class="coverage">257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Initial parameter(s) ", paste(wrongpar.names, collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">342</td>
+ <td class="coverage">257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " not used in the model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">343</td>
+ <td class="coverage">257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini &lt;- parms.ini[setdiff(names(parms.ini), wrongpar.names)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">344</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">345</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">346</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Warn that the sum of formation fractions may exceed one if they are not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">347</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # fitted in the transformed way</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">348</td>
+ <td class="coverage">8841<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$use_of_ff == "max" &amp; transform_fractions == FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">349</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("The sum of formation fractions may exceed one if you do not use ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">350</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "transform_fractions = TRUE." )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">351</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">352</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Stop if formation fractions are not transformed and we have no sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">353</td>
+ <td class="coverage">716<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$spec[[box]]$sink == FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">354</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("If formation fractions are not transformed during the fitting, ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">355</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "it is not supported to turn off pathways to sink.\n ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">356</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Consider turning on the transformation of formation fractions or ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">357</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "setting up a model with use_of_ff = 'min'.\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">358</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">359</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">360</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">361</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">362</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not allow fixing formation fractions if we are using the ilr transformation,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">363</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # this is not supported</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">364</td>
+ <td class="coverage">8737<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transform_fractions == TRUE &amp;&amp; length(fixed_parms) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">365</td>
+ <td class="coverage">107<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(grepl("^f_", fixed_parms))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">366</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Fixing formation fractions is not supported when using the ilr ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">367</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "transformation.")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">368</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">369</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">370</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">371</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set initial parameter values, including a small increment (salt)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">372</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # to avoid linear dependencies (singular matrix) in Eigenvalue based solutions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">373</td>
+ <td class="coverage">8633<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_salt = 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">374</td>
+ <td class="coverage">8633<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> defaultpar.names &lt;- setdiff(mkinmod$parms, names(parms.ini))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">375</td>
+ <td class="coverage">8633<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (parmname in defaultpar.names) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">376</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for rate constants, depending on the parameterisation</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">377</td>
+ <td class="coverage">20999<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("^k", parmname)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">378</td>
+ <td class="coverage">15908<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini[parmname] = 0.1 + k_salt</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">379</td>
+ <td class="coverage">15908<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_salt = k_salt + 1e-4</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">380</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">381</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for rate constants for reversible binding</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">382</td>
+ <td class="coverage">26<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("free_bound$", parmname)) parms.ini[parmname] = 0.1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">383</td>
+ <td class="coverage">26<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("bound_free$", parmname)) parms.ini[parmname] = 0.02</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">384</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for IORE exponents</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">385</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (grepl("^N", parmname)) parms.ini[parmname] = 1.1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">386</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for the FOMC, DFOP and HS models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">387</td>
+ <td class="coverage">238<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "alpha") parms.ini[parmname] = 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">388</td>
+ <td class="coverage">238<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "beta") parms.ini[parmname] = 10</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">389</td>
+ <td class="coverage">1014<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "k1") parms.ini[parmname] = 0.1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">390</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "k2") parms.ini[parmname] = 0.01</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">391</td>
+ <td class="coverage">30<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "tb") parms.ini[parmname] = 5</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">392</td>
+ <td class="coverage">984<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "g") parms.ini[parmname] = 0.5</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">393</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "kmax") parms.ini[parmname] = 0.1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">394</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "k0") parms.ini[parmname] = 0.0001</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">395</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parmname == "r") parms.ini[parmname] = 0.2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">396</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">397</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Default values for formation fractions in case they are present</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">398</td>
+ <td class="coverage">8633<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">399</td>
+ <td class="coverage">13865<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> origin &lt;- mkinmod$map[[obs_var]][[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">400</td>
+ <td class="coverage">13865<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- mkinmod$parms[grep(paste0("^f_", origin), mkinmod$parms)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">401</td>
+ <td class="coverage">13865<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f_names) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">402</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We need to differentiate between default and specified fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">403</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and set the unspecified to 1 - sum(specified)/n_unspecified</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">404</td>
+ <td class="coverage">3365<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_default_names &lt;- intersect(f_names, defaultpar.names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">405</td>
+ <td class="coverage">3365<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_specified_names &lt;- setdiff(f_names, defaultpar.names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">406</td>
+ <td class="coverage">3365<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sum_f_specified = sum(parms.ini[f_specified_names])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">407</td>
+ <td class="coverage">3365<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sum_f_specified &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">408</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Starting values for the formation fractions originating from ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">409</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> origin, " sum up to more than 1.")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">410</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">411</td>
+ <td class="coverage">3260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (mkinmod$spec[[obs_var]]$sink) n_unspecified = length(f_default_names) + 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">412</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">413</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_unspecified = length(f_default_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">414</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">415</td>
+ <td class="coverage">3261<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.ini[f_default_names] &lt;- (1 - sum_f_specified) / n_unspecified</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">416</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">417</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">418</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">419</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set default for state.ini if appropriate</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">420</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_name = names(mkinmod$spec)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">421</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_time_0 = subset(observed, time == 0 &amp; name == parent_name)$value</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">422</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_time_0_mean = mean(parent_time_0, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">423</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.na(parent_time_0_mean)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">424</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_auto = c(100, rep(0, length(mkinmod$diffs) - 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">425</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">426</td>
+ <td class="coverage">8527<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_auto = c(parent_time_0_mean, rep(0, length(mkinmod$diffs) - 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">427</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">428</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(state.ini_auto) &lt;- mod_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">429</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">430</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (state.ini[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">431</td>
+ <td class="coverage">8316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_used &lt;- state.ini_auto</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">432</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">433</td>
+ <td class="coverage">213<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_used &lt;- state.ini_auto</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">434</td>
+ <td class="coverage">213<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_good &lt;- intersect(names(mkinmod$diffs), names(state.ini))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">435</td>
+ <td class="coverage">213<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini_used[state.ini_good] &lt;- state.ini[state.ini_good]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">436</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">437</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini &lt;- state.ini_used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">438</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">439</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Name the inital state variable values if they are not named yet</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">440</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(is.null(names(state.ini))) names(state.ini) &lt;- mod_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">441</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">442</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform initial parameter values for fitting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">443</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms.ini &lt;- transform_odeparms(parms.ini, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">444</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">445</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">446</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">447</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Parameters to be optimised:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">448</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Kinetic parameters in parms.ini whose names are not in fixed_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">449</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.fixed &lt;- parms.ini[fixed_parms]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">450</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.optim &lt;- parms.ini[setdiff(names(parms.ini), fixed_parms)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">451</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">452</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms.fixed &lt;- transform_odeparms(parms.fixed, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">453</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">454</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">455</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms.optim &lt;- transform_odeparms(parms.optim, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">456</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">457</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">458</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">459</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Inital state variables in state.ini whose names are not in fixed_initials</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">460</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.fixed &lt;- state.ini[fixed_initials]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">461</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.optim &lt;- state.ini[setdiff(names(state.ini), fixed_initials)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">462</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">463</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Preserve names of state variables before renaming initial state variable</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">464</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">465</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.optim.boxnames &lt;- names(state.ini.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">466</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.fixed.boxnames &lt;- names(state.ini.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">467</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(state.ini.optim) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">468</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(state.ini.optim) &lt;- paste(names(state.ini.optim), "0", sep="_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">469</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">470</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(state.ini.fixed) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">471</td>
+ <td class="coverage">4509<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(state.ini.fixed) &lt;- paste(names(state.ini.fixed), "0", sep="_")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">472</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">473</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">474</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Decide if the solution of the model can be based on a simple analytical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">475</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # formula, the spectral decomposition of the matrix (fundamental system)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">476</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # or a numeric ode solver from the deSolve package</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">477</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Prefer deSolve over eigen if a compiled model is present and use_compiled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">478</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # is not set to FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">479</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = match.arg(solution_type)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">480</td>
+ <td class="coverage">8529<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "analytical" &amp;&amp; !is.function(mkinmod$deg_func))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">481</td>
+ <td class="coverage">105<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Analytical solution not implemented for this model.")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">482</td>
+ <td class="coverage">8424<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "eigen" &amp;&amp; !is.matrix(mkinmod$coefmat))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">483</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Eigenvalue based solution not possible, coefficient matrix not present.")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">484</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">485</td>
+ <td class="coverage">6190<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(mkinmod$spec) == 1 || is.function(mkinmod$deg_func)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">486</td>
+ <td class="coverage">5434<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "analytical"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">487</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">488</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(mkinmod$cf) &amp; use_compiled[1] != FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">489</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "deSolve"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">490</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">491</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.matrix(mkinmod$coefmat)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">492</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "eigen"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">493</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (max(observed$value, na.rm = TRUE) &lt; 0.1) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">494</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The combination of small observed values (all &lt; 0.1) and solution_type = eigen is error-prone")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">495</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">496</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">497</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "deSolve"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">498</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">499</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">500</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">501</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">502</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">503</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get native symbol before iterations info for speed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">504</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">505</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "deSolve" &amp; use_compiled[1] != FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">506</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinmod[["symbols"]] &lt;- try(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">507</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deSolve::checkDLL(dllname = mkinmod$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">508</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = "diffs", initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">509</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> jacfunc = NULL, nout = 0, outnames = NULL))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">510</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(mkinmod[["symbols"]], "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">511</td>
+ <td class="coverage">2144<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">512</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">513</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">514</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">515</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the error model and the algorithm for fitting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">516</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod &lt;- match.arg(error_model)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">517</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model_algorithm = match.arg(error_model_algorithm)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">518</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "OLS") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">519</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod != "const") stop("OLS is only appropriate for constant variance")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">520</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">521</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">522</td>
+ <td class="coverage">6692<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model_algorithm = switch(err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">523</td>
+ <td class="coverage">6692<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "OLS", obs = "d_3", tc = "d_3")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">524</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">525</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparm_names &lt;- switch(err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">526</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "const" = "sigma",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">527</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "obs" = paste0("sigma_", obs_vars),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">528</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "tc" = c("sigma_low", "rsd_high"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">529</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparm_names_optim &lt;- if (error_model_algorithm == "OLS") NULL else errparm_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">530</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">531</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define starting values for the error model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">532</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err.ini[1] != "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">533</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(names(err.ini), errparm_names)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">534</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply initial values for error model components ", paste(errparm_names, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">535</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">536</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = err.ini</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">537</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">538</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">539</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">540</td>
+ <td class="coverage">6410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = 3</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">541</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">542</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">543</td>
+ <td class="coverage">317<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = rep(3, length(obs_vars))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">544</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">545</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">546</td>
+ <td class="coverage">1593<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- c(sigma_low = 0.1, rsd_high = 0.1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">547</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">548</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(errparms) &lt;- errparm_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">549</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">550</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "OLS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">551</td>
+ <td class="coverage">6410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_optim &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">552</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">553</td>
+ <td class="coverage">1910<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_optim &lt;- errparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">554</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">555</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">556</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Unique outtimes for model solution.</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">557</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes &lt;- sort(unique(observed$time))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">558</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">559</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define the objective function for optimisation, including (back)transformations</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">560</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_function &lt;- function(P, trans = TRUE, OLS = FALSE, fixed_degparms = FALSE, fixed_errparms = FALSE, update_data = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">561</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">562</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> assign("calls", calls + 1, inherits = TRUE) # Increase the model solution counter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">563</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">564</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #browser()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">565</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">566</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Trace parameter values if requested and if we are actually optimising</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">567</td>
+ <td class="coverage">3224<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(trace_parms &amp; update_data) cat(format(P, width = 10, digits = 6), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">568</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">569</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Determine local parameter values for the cost estimation</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">570</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.numeric(fixed_degparms)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">571</td>
+ <td class="coverage">94746<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_degparms &lt;- fixed_degparms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">572</td>
+ <td class="coverage">94746<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_errparms &lt;- P</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">573</td>
+ <td class="coverage">94746<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_fixed = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">574</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">575</td>
+ <td class="coverage">3991822<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_fixed = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">576</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">577</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">578</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.numeric(fixed_errparms)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">579</td>
+ <td class="coverage">4725<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_degparms &lt;- P</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">580</td>
+ <td class="coverage">4725<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_errparms &lt;- fixed_errparms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">581</td>
+ <td class="coverage">4725<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_fixed = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">582</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">583</td>
+ <td class="coverage">4081843<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_fixed = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">584</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">585</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">586</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (OLS) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">587</td>
+ <td class="coverage">1063145<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_degparms &lt;- P</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">588</td>
+ <td class="coverage">1063145<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_errparms &lt;- numeric(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">589</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">590</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">591</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!OLS &amp; !degparms_fixed &amp; !errparms_fixed) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">592</td>
+ <td class="coverage">2923952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_degparms &lt;- P[1:(length(P) - length(errparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">593</td>
+ <td class="coverage">2923952<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost_errparms &lt;- P[(length(cost_degparms) + 1):length(P)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">594</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">595</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">596</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Initial states for t0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">597</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(state.ini.optim) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">598</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- c(cost_degparms[1:length(state.ini.optim)], state.ini.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">599</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- c(state.ini.optim.boxnames, state.ini.fixed.boxnames)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">600</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">601</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- state.ini.fixed</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">602</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- state.ini.fixed.boxnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">603</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">604</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">605</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms.optim &lt;- cost_degparms[(length(state.ini.optim) + 1):length(cost_degparms)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">606</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">607</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (trans == TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">608</td>
+ <td class="coverage">2580794<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- c(odeparms.optim, transparms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">609</td>
+ <td class="coverage">2580794<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- backtransform_odeparms(odeparms, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">610</td>
+ <td class="coverage">2580794<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">611</td>
+ <td class="coverage">2580794<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">612</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">613</td>
+ <td class="coverage">1505774<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- c(odeparms.optim, parms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">614</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">615</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">616</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Solve the system with current parameter values</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">617</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "analytical") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">618</td>
+ <td class="coverage">2562380<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$predicted &lt;- mkinmod$deg_func(observed, odeini, parms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">619</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">620</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- mkinpredict(mkinmod, parms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">621</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini, outtimes,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">622</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">623</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_compiled = use_compiled,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">624</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = use_symbols,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">625</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode = method.ode,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">626</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = atol, rtol = rtol,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">627</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">628</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">629</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed_index &lt;- cbind(as.character(observed$time), as.character(observed$name))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">630</td>
+ <td class="coverage">1524188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$predicted &lt;- out[observed_index]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">631</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">632</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">633</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define standard deviation for each observation</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">634</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">635</td>
+ <td class="coverage">2789021<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$std &lt;- if (OLS) NA else cost_errparms["sigma"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">636</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">637</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">638</td>
+ <td class="coverage">366137<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> std_names &lt;- paste0("sigma_", observed$name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">639</td>
+ <td class="coverage">366137<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$std &lt;- cost_errparms[std_names]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">640</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">641</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">642</td>
+ <td class="coverage">931410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed$std &lt;- sqrt(cost_errparms["sigma_low"]^2 + observed$predicted^2 * cost_errparms["rsd_high"]^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">643</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">644</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">645</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Calculate model cost</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">646</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (OLS) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">647</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Cost is the sum of squared residuals</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">648</td>
+ <td class="coverage">1063145<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost &lt;- with(observed, sum((value - predicted)^2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">649</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">650</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Cost is the negative log-likelihood</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">651</td>
+ <td class="coverage">3023423<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost &lt;- - with(observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">652</td>
+ <td class="coverage">3023423<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sum(dnorm(x = value, mean = predicted, sd = std, log = TRUE)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">653</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">654</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">655</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We update the current cost and data during the optimisation, not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">656</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # during hessian calculations</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">657</td>
+ <td class="coverage">4086568<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (update_data) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">658</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">659</td>
+ <td class="coverage">1622188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> assign("current_data", observed, inherits = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">660</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">661</td>
+ <td class="coverage">1622188<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (cost &lt; cost.current) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">662</td>
+ <td class="coverage">594930<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> assign("cost.current", cost, inherits = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">663</td>
+ <td class="coverage">1768<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(ifelse(OLS, "Sum of squared residuals", "Negative log-likelihood"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">664</td>
+ <td class="coverage">1768<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> " at call ", calls, ": ", signif(cost.current, 6), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">665</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">666</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">667</td>
+ <td class="coverage">4086415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(cost)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">668</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">669</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">670</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names_optim &lt;- c(names(state.ini.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">671</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(transparms.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">672</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparm_names_optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">673</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_optim &lt;- length(names_optim)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">674</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">675</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define lower and upper bounds other than -Inf and Inf for parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">676</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # for which no internal transformation is requested in the call to mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">677</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and for optimised error model parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">678</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower &lt;- rep(-Inf, n_optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">679</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper &lt;- rep(Inf, n_optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">680</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(lower) &lt;- names(upper) &lt;- names_optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">681</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">682</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # IORE exponents are not transformed, but need a lower bound</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">683</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_N &lt;- grep("^N", names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">684</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_N] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">685</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">686</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">687</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_k &lt;- grep("^k_", names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">688</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_k] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">689</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_k__iore &lt;- grep("^k__iore_", names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">690</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_k__iore] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">691</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> other_rate_parms &lt;- intersect(c("alpha", "beta", "k1", "k2", "tb", "r"), names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">692</td>
+ <td class="coverage">553<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[other_rate_parms] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">693</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">694</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">695</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!transform_fractions) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">696</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_f &lt;- grep("^f_", names(upper))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">697</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_f] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">698</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper[index_f] &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">699</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> other_fraction_parms &lt;- intersect(c("g"), names(upper))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">700</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[other_fraction_parms] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">701</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper[other_fraction_parms] &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">702</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">703</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">704</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">705</td>
+ <td class="coverage">6410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm != "OLS") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">706</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower["sigma"] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">707</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">708</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">709</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">710</td>
+ <td class="coverage">317<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> index_sigma &lt;- grep("^sigma_", names(lower))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">711</td>
+ <td class="coverage">317<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower[index_sigma] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">712</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">713</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">714</td>
+ <td class="coverage">1593<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower["sigma_low"] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">715</td>
+ <td class="coverage">1593<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower["rsd_high"] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">716</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">717</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">718</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Counter for cost function evaluations</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">719</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> calls = 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">720</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost.current &lt;- Inf</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">721</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_predicted &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">722</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> current_data &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">723</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">724</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show parameter names if tracing is requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">725</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(trace_parms) cat(format(names_optim, width = 10), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">726</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">727</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #browser()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">728</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">729</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do the fit and take the time until the hessians are calculated</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">730</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">731</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- c(state.ini.optim, transparms.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">732</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_degparms &lt;- length(degparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">733</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms_index &lt;- seq(1, n_degparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">734</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_index &lt;- seq(n_degparms + 1, length.out = length(errparms))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">735</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">736</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "d_3") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">737</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Directly optimising the complete model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">738</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.start &lt;- c(degparms, errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">739</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_direct &lt;- try(nlminb(parms.start, cost_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">740</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(parms.start)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">741</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(parms.start)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">742</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = control, ...))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">743</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(fit_direct, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">744</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_direct$logLik &lt;- - cost.current</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">745</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost.current &lt;- Inf # reset to avoid conflict with the OLS step</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">746</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_direct &lt;- current_data # We need this later if it was better</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">747</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> direct_failed = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">748</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">749</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> direct_failed = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">750</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">751</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">752</td>
+ <td class="coverage">8320<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm != "direct") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">753</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Ordinary least squares optimisation")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">754</td>
+ <td class="coverage">7884<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(degparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">755</td>
+ <td class="coverage">7884<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">756</td>
+ <td class="coverage">7884<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(degparms)], OLS = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">757</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">758</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">759</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the maximum likelihood estimate for sigma at the optimum parameter values</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">760</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> current_data$residual &lt;- current_data$value - current_data$predicted</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">761</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_mle &lt;- sqrt(sum(current_data$residual^2)/nrow(current_data))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">762</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">763</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Use that estimate for the constant variance, or as first guess if err_mod = "obs"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">764</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod != "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">765</td>
+ <td class="coverage">6327<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms[names(errparms)] &lt;- sigma_mle</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">766</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">767</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$par &lt;- c(fit$par, errparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">768</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">769</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost.current &lt;- cost_function(c(degparms, errparms), OLS = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">770</td>
+ <td class="coverage">7731<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$logLik &lt;- - cost.current</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">771</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">772</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm %in% c("threestep", "fourstep", "d_3")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">773</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the error model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">774</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(errparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">775</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(errparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">776</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(errparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">777</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_degparms = degparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">778</td>
+ <td class="coverage">1096<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">779</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">780</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "fourstep") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">781</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the degradation model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">782</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(degparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">783</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">784</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">785</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_errparms = errparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">786</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">787</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">788</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm %in%</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">789</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c("direct", "twostep", "threestep", "fourstep", "d_3")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">790</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the complete model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">791</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.start &lt;- c(degparms, errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">792</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(parms.start, cost_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">793</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(parms.start)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">794</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(parms.start)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">795</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = control, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">796</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par[degparms_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">797</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- fit$par[errparms_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">798</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$logLik &lt;- - cost.current</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">799</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">800</td>
+ <td class="coverage">1721<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model_algorithm == "d_3") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">801</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_3_messages = c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">802</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> direct_failed = "Direct fitting failed, results of three-step fitting are returned",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">803</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> same = "Direct fitting and three-step fitting yield approximately the same likelihood",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">804</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> threestep = "Three-step fitting yielded a higher likelihood than direct fitting",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">805</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> direct = "Direct fitting yielded a higher likelihood than three-step fitting")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">806</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (direct_failed) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">807</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(d_3_messages["direct_failed"])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">808</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$d_3_message &lt;- d_3_messages["direct_failed"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">809</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">810</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel_diff &lt;- abs((fit_direct$logLik - fit$logLik))/-mean(c(fit_direct$logLik, fit$logLik))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">811</td>
+ <td class="coverage">471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (rel_diff &lt; 0.0001) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">812</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(d_3_messages["same"])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">813</td>
+ <td class="coverage">240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$d_3_message &lt;- d_3_messages["same"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">814</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">815</td>
+ <td class="coverage">231<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (fit$logLik &gt; fit_direct$logLik) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">816</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(d_3_messages["threestep"])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">817</td>
+ <td class="coverage">15<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$d_3_message &lt;- d_3_messages["threestep"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">818</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">819</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message(d_3_messages["direct"])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">820</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- fit_direct</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">821</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$d_3_message &lt;- d_3_messages["direct"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">822</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par[degparms_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">823</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- fit$par[errparms_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">824</td>
+ <td class="coverage">216<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> current_data &lt;- data_direct</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">825</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">826</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">827</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">828</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">829</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">830</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (err_mod != "const" &amp; error_model_algorithm == "IRLS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">831</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reweight.diff &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">832</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.iter &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">833</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_last &lt;- errparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">834</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">835</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> while (reweight.diff &gt; reweight.tol &amp;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">836</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.iter &lt; reweight.max.iter) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">837</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">838</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the error model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">839</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(errparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">840</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(errparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">841</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(errparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">842</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_degparms = degparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">843</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">844</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">845</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Optimising the degradation model")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">846</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- nlminb(degparms, cost_function, control = control,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">847</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">848</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper[names(degparms)],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">849</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_errparms = errparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">850</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparms &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">851</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">852</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> reweight.diff &lt;- dist(rbind(errparms, errparms_last))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">853</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms_last &lt;- errparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">854</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">855</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$par &lt;- c(fit$par, errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">856</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost.current &lt;- cost_function(c(degparms, errparms), OLS = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">857</td>
+ <td class="coverage">756<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$logLik &lt;- - cost.current</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">858</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">859</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">860</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">861</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim_hessian &lt;- length(c(degparms, errparms))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">862</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">863</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$hessian &lt;- try(numDeriv::hessian(cost_function, c(degparms, errparms), OLS = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">864</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_data = FALSE), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">865</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit$hessian, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">866</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$hessian &lt;- matrix(NA, nrow = dim_hessian, ncol = dim_hessian)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">867</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">868</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(fit$hessian) &lt;- list(names(c(degparms, errparms)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">869</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(c(degparms, errparms)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">870</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">871</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Backtransform parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">872</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms.optim = backtransform_odeparms(degparms, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">873</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">874</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">875</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms.fixed = c(state.ini.fixed, parms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">876</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms.all = c(bparms.optim, parms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">877</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">878</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$hessian_notrans &lt;- try(numDeriv::hessian(cost_function, c(bparms.optim, errparms),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">879</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> OLS = FALSE, trans = FALSE, update_data = FALSE), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">880</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit$hessian_notrans, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">881</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$hessian_notrans &lt;- matrix(NA, nrow = dim_hessian, ncol = dim_hessian)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">882</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">883</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(fit$hessian_notrans) &lt;- list(names(c(bparms.optim, errparms)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">884</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(c(bparms.optim, errparms)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">885</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">886</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">887</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$call &lt;- call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">888</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">889</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$error_model_algorithm &lt;- error_model_algorithm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">890</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">891</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (fit$convergence != 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">892</td>
+ <td class="coverage">108<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> convergence_warning = paste0("Optimisation did not converge:\n", fit$message)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">893</td>
+ <td class="coverage">108<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary_warnings &lt;- c(summary_warnings, C = convergence_warning)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">894</td>
+ <td class="coverage">108<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning(convergence_warning)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">895</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">896</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(!quiet) message("Optimisation successfully terminated.\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">897</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">898</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">899</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We need to return some more data for summary and plotting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">900</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$solution_type &lt;- solution_type</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">901</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$transform_rates &lt;- transform_rates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">902</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$transform_fractions &lt;- transform_fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">903</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$reweight.tol &lt;- reweight.tol</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">904</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$reweight.max.iter &lt;- reweight.max.iter</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">905</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$control &lt;- control</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">906</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$calls &lt;- calls</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">907</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$time &lt;- fit_time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">908</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">909</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We also need the model and a model name for summary and plotting,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">910</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # but without symbols because they could become invalid</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">911</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$symbols &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">912</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$mkinmod &lt;- mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">913</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$mkinmod$name &lt;- mkinmod_name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">914</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$obs_vars &lt;- obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">915</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">916</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Residual sum of squares as a function of the fitted parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">917</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$rss &lt;- function(P) cost_function(P, OLS = TRUE, update_data = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">918</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">919</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Log-likelihood with possibility to fix degparms or errparms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">920</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$ll &lt;- function(P, fixed_degparms = FALSE, fixed_errparms = FALSE, trans = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">921</td>
+ <td class="coverage">547080<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> - cost_function(P, trans = trans, fixed_degparms = fixed_degparms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">922</td>
+ <td class="coverage">547080<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_errparms = fixed_errparms, OLS = FALSE, update_data = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">923</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">924</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">925</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Collect initial parameter values in three dataframes</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">926</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$start &lt;- data.frame(value = c(state.ini.optim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">927</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.optim, errparms_optim))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">928</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$start$type = c(rep("state", length(state.ini.optim)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">929</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rep("deparm", length(parms.optim)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">930</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rep("error", length(errparms_optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">931</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">932</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$start_transformed = data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">933</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> value = c(state.ini.optim, transparms.optim, errparms_optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">934</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower = lower,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">935</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = upper)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">936</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">937</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$fixed &lt;- data.frame(value = c(state.ini.fixed, parms.fixed))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">938</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$fixed$type = c(rep("state", length(state.ini.fixed)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">939</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rep("deparm", length(parms.fixed)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">940</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">941</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$data &lt;- data.frame(time = current_data$time,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">942</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> variable = current_data$name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">943</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed = current_data$value,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">944</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted = current_data$predicted)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">945</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">946</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$data$residual &lt;- fit$data$observed - fit$data$predicted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">947</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">948</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$atol &lt;- atol</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">949</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$rtol &lt;- rtol</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">950</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$err_mod &lt;- err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">951</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">952</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Return different sets of backtransformed parameters for summary and plotting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">953</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$bparms.optim &lt;- bparms.optim</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">954</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$bparms.fixed &lt;- bparms.fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">955</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">956</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Return ode and state parameters for further fitting</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">957</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$bparms.ode &lt;- bparms.all[mkinmod$parms]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">958</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$bparms.state &lt;- c(bparms.all[setdiff(names(bparms.all), names(fit$bparms.ode))],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">959</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">960</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(fit$bparms.state) &lt;- gsub("_0$", "", names(fit$bparms.state))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">961</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">962</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$errparms &lt;- errparms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">963</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$df.residual &lt;- n_observed - length(c(degparms, errparms))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">964</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">965</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Assign the class here so method dispatch works for residuals</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">966</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(fit) &lt;- c("mkinfit")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">967</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">968</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (test_residuals) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">969</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check for normal distribution of residuals</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">970</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$shapiro.p &lt;- shapiro.test(residuals(fit, standardized = TRUE))$p.value</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">971</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (fit$shapiro.p &lt; 0.05) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">972</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> shapiro_warning &lt;- paste("Shapiro-Wilk test for standardized residuals: p = ", signif(fit$shapiro.p, 3))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">973</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning(shapiro_warning)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">974</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> summary_warnings &lt;- c(summary_warnings, S = shapiro_warning)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">975</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">976</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">977</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">978</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$summary_warnings &lt;- summary_warnings</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">979</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">980</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$date &lt;- date()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">981</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$version &lt;- as.character(utils::packageVersion("mkin"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">982</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$Rversion &lt;- paste(R.version$major, R.version$minor, sep=".")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">983</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">984</td>
+ <td class="coverage">8167<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">985</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/illparms.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Method to get the names of ill-defined parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The method for generalised nonlinear regression fits as obtained</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' with [mkinfit] and [mmkin] checks if the degradation parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' pass the Wald test (in degradation kinetics often simply called t-test) for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' significant difference from zero. For this test, the parameterisation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' without parameter transformations is used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The method for hierarchical model fits, also known as nonlinear</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mixed-effects model fits as obtained with [saem] and [mhmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' checks if any of the confidence intervals for the random</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effects expressed as standard deviations include zero, and if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the confidence intervals for the error model parameters include</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The object to investigate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x The object to be printed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level The confidence level for checking p values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For potential future extensions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param random For hierarchical fits, should random effects be tested?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errmod For hierarchical fits, should error model parameters be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' tested?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param slopes For hierarchical [saem] fits using saemix as backend,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' should slope parameters in the covariate model(starting with 'beta_') be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' tested?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return For [mkinfit] or [saem] objects, a character vector of parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names. For [mmkin] or [mhmkin] objects, a matrix like object of class</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'illparms.mmkin' or 'illparms.mhmkin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note All return objects have printing methods. For the single fits, printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' does not output anything in the case no ill-defined parameters are found.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">2471<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("illparms", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("FOMC", FOCUS_2006_A, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms.mkinfit &lt;- function(object, conf.level = 0.95, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> p_values &lt;- suppressWarnings(summary(object)$bpar[, "Pr(&gt;t)"])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na &lt;- is.na(p_values)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> failed &lt;- p_values &gt; 1 - conf.level</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- names(parms(object))[na | failed]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(ret) &lt;- "illparms.mkinfit"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.illparms.mkinfit &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">190<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">190<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(as.character(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c("SFO", "FOMC"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS A" = FOCUS_2006_A,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOCUS C" = FOCUS_2006_C),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(fits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms.mmkin &lt;- function(object, conf.level = 0.95, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">74</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "try-error")) return("E")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill &lt;- illparms(fit, conf.level = conf.level)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ill) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(paste(ill, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "illparms.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.illparms.mmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x, quote = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms.saem.mmkin &lt;- function(object, conf.level = 0.95, random = TRUE, errmod = TRUE, slopes = TRUE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object$so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">100</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ints &lt;- intervals(object, conf.level = conf.level)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (random) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_random_i &lt;- which(ints$random[, "lower"] &lt; 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_random &lt;- rownames(ints$random)[ill_parms_random_i]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- c(ill_parms, ill_parms_random)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (errmod) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_errmod_i &lt;- which(ints$errmod[, "lower"] &lt; 0 &amp; ints$errmod[, "upper"] &gt; 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_errmod &lt;- rownames(ints$errmod)[ill_parms_errmod_i]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- c(ill_parms, ill_parms_errmod)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (slopes) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">115</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object$so)) stop("Slope testing is only implemented for the saemix backend")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> slope_names &lt;- grep("^beta_", object$so@model@name.fixed, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ci &lt;- object$so@results@conf.int</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(ci) &lt;- ci$name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> slope_ci &lt;- ci[slope_names, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms_slopes &lt;- slope_ci[, "lower"] &lt; 0 &amp; slope_ci[, "upper"] &gt; 0</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill_parms &lt;- c(ill_parms, slope_names[ill_parms_slopes])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(ill_parms) &lt;- "illparms.saem.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">2091<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ill_parms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.illparms.saem.mmkin &lt;- print.illparms.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">illparms.mhmkin &lt;- function(object, conf.level = 0.95, random = TRUE, errmod = TRUE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object[[1]], "saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> check_failed &lt;- function(x) if (inherits(x$so, "try-error")) TRUE else FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (check_failed(fit)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">141</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(fit$FIM_failed) &amp;&amp;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "random effects and error model parameters" %in% fit$FIM_failed) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">145</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("NA")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ill &lt;- illparms(fit, conf.level = conf.level, random = random, errmod = errmod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">1484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ill) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">1000<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(paste(ill, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">484<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "illparms.mhmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">371<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname illparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.illparms.mhmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x, quote = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/plot.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("type", "variable", "observed"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot the observed data and the fitted model of an mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Solves the differential equations with the optimised and fixed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from a previous successful call to \code{\link{mkinfit}} and plots the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed data together with the solution of the fitted model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the current plot device is a \code{\link[tikzDevice]{tikz}} device, then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' latex is being used for the formatting of the chi2 error level, if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{show_errmin = TRUE}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @aliases plot.mkinfit plot_sep plot_res plot_err</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x Alias for fit introduced for compatibility with the generic S3</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit An object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param obs_vars A character vector of names of the observed variables for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which the data and the model should be plotted. Defauls to all observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlab Label for the x axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylab Label for the y axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlim Plot range in x direction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylim Plot range in y direction. If given as a list, plot ranges</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for the different plot rows can be given for row layout.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param col_obs Colors used for plotting the observed data and the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' corresponding model prediction lines.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pch_obs Symbols to be used for plotting the data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lty_obs Line types to be used for the model predictions.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param add Should the plot be added to an existing plot?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legend Should a legend be added to the plot?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param show_residuals Should residuals be shown? If only one plot of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits is shown, the residual plot is in the lower third of the plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Otherwise, i.e. if "sep_obs" is given, the residual plots will be located</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to the right of the plots of the fitted curves. If this is set to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'standardized', a plot of the residuals divided by the standard deviation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' given by the fitted error model will be shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized When calling 'plot_res', should the residuals be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' standardized in the residual plot?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param show_errplot Should squared residuals and the error model be shown?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If only one plot of the fits is shown, this plot is in the lower third of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the plot. Otherwise, i.e. if "sep_obs" is given, the residual plots will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be located to the right of the plots of the fitted curves.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param maxabs Maximum absolute value of the residuals. This is used for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' scaling of the y axis and defaults to "auto".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param sep_obs Should the observed variables be shown in separate subplots?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If yes, residual plots requested by "show_residuals" will be shown next</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to, not below the plot of the fits.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel.height.middle The relative height of the middle plot, if more</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' than two rows of plots are shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param row_layout Should we use a row layout where the residual plot or the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' error model plot is shown to the right?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Position(s) of the legend(s). Passed to \code{\link{legend}} as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the first argument. If not length one, this should be of the same length</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as the obs_var argument.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param inset Passed to \code{\link{legend}} if applicable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param show_errmin Should the FOCUS chi2 error value be shown in the upper</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' margin of the plot?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errmin_digits The number of significant digits for rounding the FOCUS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' chi2 error percentage.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param frame Should a frame be drawn around the plots?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to \code{\link{plot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @import graphics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom grDevices dev.cur</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # One parent compound, one metabolite, both single first order, path from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # parent to sink included</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(parent = mkinsub("SFO", "m1", full = "Parent"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO", full = "Metabolite M1" ))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(fit, standardized = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_err(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Show the observed variables separately, with residuals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fit, sep_obs = TRUE, show_residuals = TRUE, lpos = c("topright", "bottomright"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' show_errmin = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The same can be obtained with less typing, using the convenience function plot_sep</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_sep(fit, lpos = c("topright", "bottomright"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Show the observed variables separately, with the error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fit, sep_obs = TRUE, show_errplot = TRUE, lpos = c("topright", "bottomright"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' show_errmin = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot.mkinfit &lt;- function(x, fit = x,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars = names(fit$mkinmod$map),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Time", ylab = "Residue",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = range(fit$data$time),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = "default",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs = 1:length(obs_vars),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs = col_obs,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty_obs = rep(1, length(obs_vars)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add = FALSE, legend = !add,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_residuals = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errplot = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxabs = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sep_obs = FALSE, rel.height.middle = 0.9,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_layout = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lpos = "topright", inset = c(0.05, 0.05),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errmin = FALSE, errmin_digits = 3,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(show_residuals, "standardized")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">112</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_residuals &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">113</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">118</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (add &amp;&amp; show_residuals) stop("If adding to an existing plot we can not show residuals")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">119</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (add &amp;&amp; show_errplot) stop("If adding to an existing plot we can not show the error model plot")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">120</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_residuals &amp;&amp; show_errplot) stop("We can either show residuals over time or the error model plot, not both")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">121</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (add &amp;&amp; sep_obs) stop("If adding to an existing plot we can not show observed variables separately")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = fit$solution_type</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.all &lt;- c(fit$bparms.optim, fit$bparms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ininames &lt;- c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(subset(fit$start, type == "state")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(subset(fit$fixed, type == "state")))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- parms.all[ininames]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Order initial state variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini) &lt;- sub("_0", "", names(odeini))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- odeini[names(fit$mkinmod$diffs)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes &lt;- seq(xlim[1], xlim[2], length.out=100)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odenames &lt;- c(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(subset(fit$start, type == "deparm")),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(subset(fit$fixed, type == "deparm")))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- parms.all[odenames]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "deSolve" &amp; !is.null(fit$mkinmod$cf)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit$mkinmod[["symbols"]] &lt;- deSolve::checkDLL(dllname = fit$mkinmod$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = "diffs", initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> jacfunc = NULL, nout = 0, outnames = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- mkinpredict(fit$mkinmod, odeparms, odeini, outtimes,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = solution_type, atol = fit$atol, rtol = fit$rtol)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- as.data.frame(out)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(col_obs) &lt;- names(pch_obs) &lt;- names(lty_obs) &lt;- obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Create a plot layout only if not to be added to an existing plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # or only a single plot is requested (e.g. by plot.mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> do_layout = FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_residuals | sep_obs | show_errplot) do_layout = TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_rows = if (sep_obs) length(obs_vars) else 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (do_layout) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Layout should be restored afterwards</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # If the observed variables are shown separately, or if requested, do row layout</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sep_obs | row_layout) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_layout &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_cols = if (show_residuals | show_errplot) 2 else 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plots = n_plot_rows * n_plot_cols</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set relative plot heights, so the first and the last plot are the norm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and the middle plots (if n_plot_rows &gt;2) are smaller by rel.height.middle</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.heights &lt;- if (n_plot_rows &gt; 2) c(1, rep(rel.height.middle, n_plot_rows - 2), 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else rep(1, n_plot_rows)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout_matrix = matrix(1:n_plots,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_plot_rows, n_plot_cols, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(layout_matrix, heights = rel.heights)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else { # else show residuals in the lower third to keep compatibility</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(matrix(c(1, 2), 2, 1), heights = c(2, 1.3))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3, 4, 4, 2) + 0.1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Replicate legend position argument if necessary</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(lpos) == 1) lpos = rep(lpos, n_plot_rows)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Loop over plot rows</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (plot_row in 1:n_plot_rows) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_obs_vars = if (sep_obs) obs_vars[plot_row] else obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set ylim to sensible default, or to the specified value</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.list(ylim)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">196</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row &lt;- ylim[[plot_row]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ylim[[1]] == "default") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row = c(0, max(c(subset(fit$data, variable %in% row_obs_vars)$observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> unlist(out[row_obs_vars])), na.rm = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">202</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim_row = ylim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (row_layout) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for top row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Reduce bottom margin by 2.1 - hides x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (plot_row == 1 &amp; n_plot_rows &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">210</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 4.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for middle rows of plots, if any</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (plot_row &gt; 1 &amp; plot_row &lt; n_plot_rows) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Reduce top margin by 2 after the first plot as we have no main title,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # reduced plot height, therefore we need rel.height.middle in the layout</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">217</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 2.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for bottom row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">415<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (plot_row == n_plot_rows &amp; n_plot_rows &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">222</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Restore bottom margin for last plot to show x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">223</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(5.1, 4.1, 2.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up the main plot if not to be added to an existing plot</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (add == FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type="n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim, ylim = ylim_row,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = xlab, ylab = ylab, frame = frame, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Plot the data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in row_obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">1708<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(subset(fit$data, variable == obs_var, c(time, observed)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">1708<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch = pch_obs[obs_var], col = col_obs[obs_var])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">239</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Plot the model output</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> matlines(out$time, out[row_obs_vars], col = col_obs[row_obs_vars], lty = lty_obs[row_obs_vars])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (legend == TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get full names from model definition if they are available</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend_names = lapply(row_obs_vars, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">900<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(fit$mkinmod$spec[[x]]$full_name))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">410<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.na(fit$mkinmod$spec[[x]]$full_name)) x</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">248</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else fit$mkinmod$spec[[x]]$full_name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">490<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else x</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos[plot_row], inset= inset, legend = legend_names,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_obs[row_obs_vars], pch = pch_obs[row_obs_vars], lty = lty_obs[row_obs_vars])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">253</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show chi2 error value if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">256</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_errmin) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">257</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(row_obs_vars) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">258</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin_var = row_obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">260</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin_var = "All data"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">261</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(row_obs_vars) != length(fit$mkinmod$map)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">262</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Showing chi2 error level for all data, but only ",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">263</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_obs_vars, " were selected for plotting")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">264</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2 &lt;- signif(100 * mkinerrmin(fit)[errmin_var, "err.min"], errmin_digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">268</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Use LateX if the current plotting device is tikz</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (names(dev.cur()) == "tikz output") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">270</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_text &lt;- paste0("$\\chi^2$ error level = ", chi2, "\\%")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_perc &lt;- paste0(chi2, "%")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">273</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_text &lt;- bquote(chi^2 ~ "error level" == .(chi2_perc))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">274</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">275</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mtext(chi2_text, cex = 0.7, line = 0.4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (do_layout &amp; !row_layout) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">279</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(5, 4, 0, 2) + 0.1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">280</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">281</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">282</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show residuals if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_residuals) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">280<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinresplot(fit, obs_vars = row_obs_vars, standardized = standardized,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">280<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs = pch_obs[row_obs_vars], col_obs = col_obs[row_obs_vars],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">286</td>
+ <td class="coverage">280<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = FALSE, frame = frame, xlab = xlab, xlim = xlim, maxabs = maxabs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">287</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">288</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">289</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Show error model plot if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">290</td>
+ <td class="coverage">1503<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_errplot) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">291</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinerrplot(fit, obs_vars = row_obs_vars,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">292</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs = pch_obs[row_obs_vars], col_obs = col_obs[row_obs_vars],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = FALSE, frame = frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">294</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">295</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">296</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname plot.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">299</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">300</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot_sep &lt;- function(fit, show_errmin = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">301</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_residuals = ifelse(identical(fit$err_mod, "const"), TRUE, "standardized"), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">302</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot.mkinfit(fit, sep_obs = TRUE, show_residuals = show_residuals,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">303</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errmin = show_errmin, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">304</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">305</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">306</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname plot.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">307</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">308</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot_res &lt;- function(fit, sep_obs = FALSE, show_errmin = sep_obs,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">309</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = ifelse(identical(fit$err_mod, "const"), FALSE, TRUE), ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">310</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot.mkinfit(fit, sep_obs = sep_obs, show_errmin = show_errmin,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">312</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_residuals = ifelse(standardized, "standardized", TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">313</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row_layout = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">314</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">315</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">316</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname plot.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">318</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot_err &lt;- function(fit, sep_obs = FALSE, show_errmin = sep_obs, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">319</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot.mkinfit(fit, sep_obs = sep_obs, show_errmin = show_errmin,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">320</td>
+ <td class="coverage">205<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errplot = TRUE, row_layout = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">321</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">322</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">323</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot the observed data and the fitted model of an mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">324</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">325</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Deprecated function. It now only calls the plot method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">326</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{plot.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">327</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">328</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit an object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">329</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots further arguments passed to \code{\link{plot.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">330</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">331</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">332</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">333</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinplot &lt;- function(fit, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">334</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">335</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(fit, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">336</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mixed.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Create a mixed effects model from an mmkin row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom rlang !!!</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An [mmkin] row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method The method to be used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Currently not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object of class 'mixed.mmkin' which has the observed data in a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' single dataframe which is convenient for plotting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n_biphasic &lt;- 8</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' err_1 = list(const = 1, prop = 0.07)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DFOP_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("DFOP", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(123456)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log_sd &lt;- 0.3</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' syn_biphasic_parms &lt;- as.matrix(data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k1 = rlnorm(n_biphasic, log(0.05), log_sd),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k2 = rlnorm(n_biphasic, log(0.01), log_sd),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' g = plogis(rnorm(n_biphasic, 0, log_sd)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_parent_to_m1 = plogis(rnorm(n_biphasic, 0, log_sd)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_m1 = rlnorm(n_biphasic, log(0.002), log_sd)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_biphasic_mean &lt;- lapply(1:n_biphasic,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(i) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(DFOP_SFO, syn_biphasic_parms[i, ],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(123456L)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_biphasic &lt;- lapply(ds_biphasic_mean, function(ds) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' add_err(ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sdfunc = function(value) sqrt(err_1$const^2 + value^2 * err_1$prop^2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n = 1, secondary = "m1")[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin &lt;- mmkin(list("DFOP-SFO" = DFOP_SFO), ds_biphasic, error_model = "tc", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mixed &lt;- mixed(f_mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_mixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_mixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mixed &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("mixed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mixed.mmkin &lt;- function(object, method = c("none"), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">57</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method &lt;- match.arg(method)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_names &lt;- colnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- list(mmkin = object, mkinmod = object[[1]]$mkinmod)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (method[1] == "none") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_list &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(x) x$data[c("variable", "time", "observed", "predicted", "residual")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_list) &lt;- ds_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data &lt;- vctrs::vec_rbind(!!!ds_list, .names_to = "ds")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(res$data)[1:4] &lt;- c("ds", "name", "time", "value")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data$name &lt;- as.character(res$data$name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data$ds &lt;- ordered(res$data$ds, levels = unique(res$data$ds))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized &lt;- unlist(lapply(object, residuals, standardized = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data$std &lt;- res$data$residual / standardized</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$data$standardized &lt;- standardized</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(res) &lt;- c("mixed.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x A mixed.mmkin object to print</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mixed.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Kinetic model fitted by nonlinear regression to each dataset" )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStructural model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- x$mmkin[[1]]$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$mmkin, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nMean fitted parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(mean_degparms(x$mmkin), digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/parms.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Extract model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function returns degradation model parameters as well as error</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model parameters per default, in order to avoid working with a fitted model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' without considering the error structure that was assumed for the fit.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A fitted model object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Depending on the object, a numeric vector of fitted model parameters,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a matrix (e.g. for mmkin row objects), or a list of matrices (e.g. for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mmkin objects with more than one row).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [saem], [multistart]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # mkinfit objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("SFO", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) subset(x$data[c("name", "time", "value")]))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds) &lt;- paste("Dataset", 6:10)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(c("SFO", "FOMC", "DFOP"), ds, quiet = TRUE, cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fits["SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fits[, 2])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fits, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">91384<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("parms", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transformed Should the parameters be returned as used internally</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' during the optimisation?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errparms Should the error model parameters be returned</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in addition to the degradation parameters?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms.mkinfit &lt;- function(object, transformed = FALSE, errparms = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">88039<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- if (transformed) object$par</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">88039<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else c(object$bparms.optim, object$errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">88039<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!errparms) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">3000<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res[setdiff(names(res), names(object$errparms))]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">85039<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms.mmkin &lt;- function(object, transformed = FALSE, errparms = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- sapply(object, parms, transformed = transformed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = errparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(res) &lt;- colnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">61</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">62</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:nrow(object)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">63</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res[[i]] &lt;- parms(object[i, ], transformed = transformed,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">64</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms = errparms, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">66</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(res) &lt;- rownames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">265<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param exclude_failed For [multistart] objects, should rows for failed fits</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be removed from the returned parameter matrix?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">parms.multistart &lt;- function(object, exclude_failed = TRUE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- t(sapply(object, parms))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> successful &lt;- which(!is.na(res[, 1]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> first_success &lt;- successful[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(res) &lt;- names(parms(object[[first_success]]))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">80</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (exclude_failed[1]) res &lt;- res[successful, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Fit one or more kinetic models with one or more state variables to one or</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' more datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function calls \code{\link{mkinfit}} on all combinations of models and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' datasets specified in its first two arguments.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param models Either a character vector of shorthand names like</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{c("SFO", "FOMC", "DFOP", "HS", "SFORB")}, or an optionally named</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list of \code{\link{mkinmod}} objects.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param datasets An optionally named list of datasets suitable as observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' data for \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cores The number of cores to be used for multicore processing. This</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is only used when the \code{cluster} argument is \code{NULL}. On Windows</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' machines, cores &gt; 1 is not supported, you need to use the \code{cluster}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' argument to use multiple logical processors. Per default, all cores</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' detected by [parallel::detectCores()] are used, except on Windows where</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the default is 1.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cluster A cluster as returned by \code{\link{makeCluster}} to be used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for parallel execution.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments that will be passed to \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom parallel mclapply parLapply detectCores</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A two-dimensional \code{\link{array}} of \code{\link{mkinfit}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' objects and/or try-errors that can be indexed using the model names for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' first index (row index) and the dataset names for the second index (column</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' index).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{[.mmkin}} for subsetting, \code{\link{plot.mmkin}} for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plotting.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords optimize</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_SFO_lin &lt;- mkinmod(parent = mkinsub("SFO", "M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO", "M2"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = mkinsub("SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_FOMC_lin &lt;- mkinmod(parent = mkinsub("FOMC", "M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO", "M2"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = mkinsub("SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' models &lt;- list(SFO_lin = m_synth_SFO_lin, FOMC_lin = m_synth_FOMC_lin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' datasets &lt;- lapply(synthetic_data_for_UBA_2014[1:3], function(x) x$data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(datasets) &lt;- paste("Dataset", 1:3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time_default &lt;- system.time(fits.0 &lt;- mmkin(models, datasets, quiet = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time_1 &lt;- system.time(fits.4 &lt;- mmkin(models, datasets, cores = 1, quiet = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time_default</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time_1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(fits.0[["SFO_lin", 2]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # plot.mkinfit handles rows or columns of mmkin result objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[1, ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[1, ], obs_var = c("M1", "M2"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[, 1])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Use double brackets to extract a single mkinfit object, which will be plotted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # by plot.mkinfit and can be plotted using plot_sep</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[[1, 1]], sep_obs = TRUE, show_residuals = TRUE, show_errmin = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_sep(fits.0[[1, 1]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Plotting with mmkin (single brackets, extracting an mmkin object) does not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # allow to plot the observed variables separately</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits.0[1, 1])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # On Windows, we can use multiple cores by making a cluster first</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cl &lt;- parallel::makePSOCKcluster(12)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(c("SFO", "FOMC", "DFOP"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list(A = FOCUS_2006_A, B = FOCUS_2006_B, C = FOCUS_2006_C, D = FOCUS_2006_D),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cluster = cl, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We get false convergence for the FOMC fit to FOCUS_2006_A because this</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # dataset is really SFO, and the FOMC fit is overparameterised</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parallel::stopCluster(cl)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mmkin &lt;- function(models = c("SFO", "FOMC", "DFOP"), datasets,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cores = if (Sys.info()["sysname"] == "Windows") 1 else parallel::detectCores(), cluster = NULL, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_models_available = c("SFO", "FOMC", "DFOP", "HS", "SFORB", "IORE", "logistic")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.m &lt;- length(models)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.d &lt;- length(datasets)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- n.m * n.d</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_indices &lt;- matrix(1:n.fits, ncol = n.d)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check models and define their names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">4032<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all(sapply(models, function(x) inherits(x, "mkinmod")))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">2323<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all(models %in% parent_models_available)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply models as a list of mkinmod objects or a vector combined of\n ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">50<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(parent_models_available, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">2273<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(models) &lt;- models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">1087<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(names(models))) names(models) &lt;- as.character(1:n.m)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check datasets and define their names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">1575<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(names(datasets))) names(datasets) &lt;- as.character(1:n.d)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Define names for fit index</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(fit_indices) &lt;- list(model = names(models),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dataset = names(datasets))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_function &lt;- function(fit_index) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> w &lt;- which(fit_indices == fit_index, arr.ind = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_index &lt;- w[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dataset_index &lt;- w[2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- try(mkinfit(models[[model_index]], datasets[[dataset_index]], ...))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(res, "try-error")) res$mkinmod$name &lt;- names(models)[model_index]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">793<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">3982<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(cluster)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">2154<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> results &lt;- parallel::mclapply(as.list(1:n.fits), fit_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">2154<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mc.cores = cores, mc.preschedule = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">1828<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> results &lt;- parallel::parLapply(cluster, as.list(1:n.fits), fit_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attributes(results) &lt;- attributes(fit_indices)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(results, "call") &lt;- call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(results, "time") &lt;- fit_time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(results) &lt;- "mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">3798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(results)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Subsetting method for mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An \code{\link{mmkin} object}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param i Row index selecting the fits for specific models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param j Column index selecting the fits to specific datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... Not used, only there to satisfy the generic method definition</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param drop If FALSE, the method always returns an mmkin object, otherwise</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' either a list of mkinfit objects or a single mkinfit object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object of class \code{\link{mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname Extract.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Only use one core, to pass R CMD check --as-cran</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(c("SFO", "FOMC"), list(B = FOCUS_2006_B, C = FOCUS_2006_C),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cores = 1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits["FOMC", ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits[, "B"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits["SFO", "B"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' head(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This extracts an mkinfit object with lots of components</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits[["FOMC", "B"]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">`[.mmkin` &lt;- function(x, i, j, ..., drop = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">2760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">2760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x_sub &lt;- x[i, j, drop = drop]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">2760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!drop) class(x_sub) &lt;- "mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">2760<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(x_sub)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print method for mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An [mmkin] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mmkin &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mmkin&gt; object\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Status of individual fits:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">375<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(status(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.mmkin &lt;- function(object, ..., evaluate = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- attr(object, "call")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">115<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">193</td>
+ <td class="coverage">206<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">206<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">197</td>
+ <td class="coverage">256<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">198</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinpredict.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Produce predictions from a kinetic model using specific parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function produces a time series for all the observed variables in a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic model as specified by [mkinmod], using a specific set of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic parameters and initial values for the state variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @aliases mkinpredict mkinpredict.mkinmod mkinpredict.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x A kinetic model as produced by [mkinmod], or a kinetic fit as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitted by [mkinfit]. In the latter case, the fitted parameters are used for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the prediction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param odeparms A numeric vector specifying the parameters used in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic model, which is generally defined as a set of ordinary differential</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' equations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param odeini A numeric vector containing the initial values of the state</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables of the model. Note that the state variables can differ from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed variables, for example in the case of the SFORB model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param outtimes A numeric vector specifying the time points for which model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' predictions should be generated.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param solution_type The method that should be used for producing the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' predictions. This should generally be "analytical" if there is only one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed variable, and usually "deSolve" in the case of several observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables. The third possibility "eigen" is fast in comparison to uncompiled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ODE models, but not applicable to some models, e.g. using FOMC for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent compound.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method.ode The solution method passed via [mkinpredict] to [ode]] in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' case the solution type is "deSolve" and we are not using compiled code.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' When using compiled code, only lsoda is supported.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_compiled If set to \code{FALSE}, no compiled version of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mkinmod] model is used, even if is present.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_symbols If set to \code{TRUE} (default), symbol info present in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the [mkinmod] object is used if available for accessing compiled code</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param atol Absolute error tolerance, passed to the ode solver.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rtol Absolute error tolerance, passed to the ode solver.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param maxsteps Maximum number of steps, passed to the ode solver.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param map_output Boolean to specify if the output should list values for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the observed variables (default) or for all state variables (if set to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FALSE). Setting this to FALSE has no effect for analytical solutions,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as these always return mapped output.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param na_stop Should it be an error if [ode] returns NaN values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to the ode solver in case such a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solver is used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A matrix with the numeric solution in wide format</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO &lt;- mkinmod(degradinol = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Compare solution types</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "analytical")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve", use_compiled = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "eigen")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Compare integration methods to analytical solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "analytical")[21,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method = "lsoda", use_compiled = FALSE)[21,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method = "ode45", use_compiled = FALSE)[21,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method = "rk4", use_compiled = FALSE)[21,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # rk4 is not as precise here</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The number of output times used to make a lot of difference until the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # default for atol was adjusted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' seq(0, 20, by = 0.1))[201,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' seq(0, 20, by = 0.01))[2001,]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Comparison of the performance of solution types</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO = mkinmod(parent = list(type = "SFO", to = "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = list(type = "SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if(require(rbenchmark)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' benchmark(replications = 10, order = "relative", columns = c("test", "relative", "elapsed"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' eigen = mkinpredict(SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), seq(0, 20, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "eigen")[201,],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve_compiled = mkinpredict(SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), seq(0, 20, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve")[201,],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve = mkinpredict(SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), seq(0, 20, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve", use_compiled = FALSE)[201,],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' analytical = mkinpredict(SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0), seq(0, 20, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "analytical", use_compiled = FALSE)[201,])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Predict from a fitted model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mkinfit(SFO_SFO, FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mkinfit(SFO_SFO, FOCUS_2006_C, quiet = TRUE, solution_type = "deSolve")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' head(mkinpredict(f))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinpredict &lt;- function(x, odeparms, odeini, outtimes, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("mkinpredict", x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinpredict</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinpredict.mkinmod &lt;- function(x,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms = c(k_parent_sink = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini = c(parent = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes = seq(0, 120, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "deSolve",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_compiled = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_symbols = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode = "lsoda", atol = 1e-8, rtol = 1e-10, maxsteps = 20000L,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> map_output = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na_stop = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Names of state variables and observed variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(x$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(x$spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Order the inital values for state variables if they are named</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(names(odeini))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- odeini[mod_vars]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs &lt;- matrix(NA, nrow = length(outtimes), ncol = 1 + length(obs_vars),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(as.character(outtimes), c("time", obs_vars)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs[, "time"] &lt;- outtimes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_out_na &lt;- 0 # to check if we get NA values with deSolve</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">47544878<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "analytical") {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # This is clumsy, as we wanted fast analytical predictions for mkinfit,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # which bypasses mkinpredict in the case of analytical solutions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pseudo_observed &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data.frame(name = rep(obs_vars, each = length(outtimes)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = rep(outtimes, length(obs_vars)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pseudo_observed$predicted &lt;- x$deg_func(pseudo_observed, odeini, odeparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">2431585<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs[, obs_var] &lt;- pseudo_observed[pseudo_observed$name == obs_var, "predicted"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We don't have solutions for unobserved state variables, the output of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # analytical solutions is always mapped to observed variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">1843695<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(out_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "eigen") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> evalparse &lt;- function(string) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">392283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> eval(parse(text=string), as.list(c(odeparms, odeini)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> coefmat.num &lt;- matrix(sapply(as.vector(x$coefmat), evalparse),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow = length(mod_vars))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> e &lt;- eigen(coefmat.num)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c &lt;- solve(e$vectors, odeini)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f.out &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">1085040<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> e$vectors %*% diag(exp(e$values * t), nrow=length(mod_vars)) %*% c</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> o &lt;- matrix(mapply(f.out, outtimes),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nrow = length(mod_vars), ncol = length(outtimes))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- cbind(outtimes, t(o))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">97082<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(out) &lt;- c("time", mod_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (solution_type == "deSolve") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">45604101<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$cf) &amp; use_compiled[1] != FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$symbols) &amp; use_symbols) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">1427314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lsoda_func &lt;- x$symbols</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">44175921<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lsoda_func &lt;- "diffs"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- deSolve::lsoda(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y = odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> times = outtimes,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = lsoda_func,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dllname = x$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms = odeparms[x$parms], # Order matters when using compiled models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = atol,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rtol = rtol,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxsteps = maxsteps,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">45603235<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(out) &lt;- c("time", mod_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkindiff &lt;- function(t, state, parms) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time &lt;- t</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in names(x$diffs))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffname &lt;- paste("d", box, sep="_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs[diffname] &lt;- with(as.list(c(time, state, parms)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> eval(parse(text=x$diffs[[box]])))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">145229<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(list(c(diffs)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">209</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out &lt;- deSolve::ode(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y = odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> times = outtimes,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = mkindiff,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms = odeparms,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method = method.ode,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> atol = atol,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rtol = rtol,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">866<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxsteps = maxsteps,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">45604101<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_out_na &lt;- sum(is.na(out))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">45604101<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_out_na &gt; 0 &amp; na_stop) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">224</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("odeini:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">225</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(odeini)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">226</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("odeparms:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">227</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(odeparms)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">228</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("out:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">229</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(out)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">230</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Differential equations were not integrated for all output times because\n",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">231</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_out_na, " NaN values occurred in output from ode()")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (map_output) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Output transformation for models with unobserved compartments like SFORB</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">237</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # if not already mapped in analytical solution</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_out_na &gt; 0 &amp; !na_stop) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">239</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> available &lt;- c(TRUE, rep(FALSE, length(outtimes) - 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> available &lt;- rep(TRUE, length(outtimes))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (var in names(x$map)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">93237433<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if((length(x$map[[var]]) == 1)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">93235081<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs[available, var] &lt;- out[available, var]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">2352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_obs[available, var] &lt;- out[available, x$map[[var]][1]] +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">2352<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out[available, x$map[[var]][2]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">249</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">45701183<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(out_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">252</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">253</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(out) &lt;- list(time = as.character(outtimes), c("time", mod_vars))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">254</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(out)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinpredict</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinpredict.mkinfit &lt;- function(x,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms = x$bparms.ode,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini = x$bparms.state,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">263</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes = seq(0, 120, by = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">264</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = "deSolve",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_compiled = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode = "lsoda", atol = 1e-8, rtol = 1e-10,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">267</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> map_output = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">268</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">269</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinpredict(x$mkinmod, odeparms, odeini, outtimes, solution_type, use_compiled,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">270</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method.ode, atol, rtol, map_output, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/anova.saem.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Anova method for saem.mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Generate an anova object. The method to calculate the BIC is that from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' saemix package. As in other prominent anova methods, models are sorted by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' number of parameters, and the tests (if requested) are always relative to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the model on the previous line.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An [saem.mmkin] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... further such objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method Method for likelihood calculation: "is" (importance sampling),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "lin" (linear approximation), or "gq" (Gaussian quadrature). Passed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to [saemix::logLik.SaemixObject]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test Should a likelihood ratio test be performed? If TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the alternative models are tested against the first model. Should</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' only be done for nested models.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param model.names Optional character vector of model names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats anova logLik update pchisq terms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom methods is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom utils capture.output</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return an "anova" data frame; the traditional (S3) result of anova()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">anova.saem.mmkin &lt;- function(object, ...,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method = c("is", "lin", "gq"), test = FALSE, model.names = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # The following code is heavily inspired by anova.lmer in the lme4 package</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mCall &lt;- match.call(expand.dots = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dots &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method &lt;- match.arg(method)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is_model &lt;- sapply(dots, is, "saem.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(is_model)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mods &lt;- c(list(object), dots[is_model])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> successful &lt;- sapply(mods, function(x) !inherits(x$so, "try-error"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(model.names))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">284<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names &lt;- vapply(as.list(mCall)[c(FALSE, TRUE, is_model)], deparse1, "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Sanitize model names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(model.names) != length(mods))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">40</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Model names vector and model list have different lengths")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(duplicated(model.names)))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">43</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Duplicate model names are not allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (max(nchar(model.names)) &gt; 200) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">46</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Model names longer than 200 characters, assigning generic names")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">47</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model.names &lt;- paste0("MODEL",seq_along(model.names))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(mods) &lt;- model.names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mods &lt;- mods[successful]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Ensure same data, ignoring covariates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> same_data &lt;- sapply(mods[-1], function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">1182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> identical(mods[[1]]$data[c("ds", "name", "time", "value")],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">1182<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$data[c("ds", "name", "time", "value")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all(same_data)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">58</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop(sum(!same_data), " objects have not been fitted to the same data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llks &lt;- lapply(names(mods), function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">1700<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llk &lt;- try(logLik(mods[[x]], method = method), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">1700<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(llk, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">64</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Could not obtain log likelihood with '", method, "' method for ", x)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">65</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llk &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">1700<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(llk)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> available &lt;- !sapply(llks, is.na)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llks &lt;- llks[available]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mods &lt;- mods[available]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Order models by increasing degrees of freedom:</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> npar &lt;- vapply(llks, attr, FUN.VALUE=numeric(1), "df")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ii &lt;- order(npar)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mods &lt;- mods[ii]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llks &lt;- llks[ii]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> npar &lt;- npar[ii]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Describe data for the header, as in summary.saem.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> header &lt;- paste("Data:", nrow(object$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(object$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(object$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Calculate statistics</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llk &lt;- unlist(llks)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chisq &lt;- 2 * pmax(0, c(NA, diff(llk)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dfChisq &lt;- c(NA, diff(npar))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bic &lt;- function(x, method) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">1700<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> BIC(x$so, method = method)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val &lt;- data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> npar = npar,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> AIC = sapply(llks, AIC),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> BIC = sapply(mods, bic, method = method), # We use the saemix method here</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Lik = llk,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = names(mods), check.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (test) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> testval &lt;- data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Chisq = chisq,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Df = dfChisq,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "Pr(&gt;Chisq)" = ifelse(dfChisq == 0, NA,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pchisq(chisq, dfChisq, lower.tail = FALSE)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = names(mods), check.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">196<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val &lt;- cbind(val, testval)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(val) &lt;- c("anova", class(val))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">518<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> structure(val, heading = c(header))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">112</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Currently, no anova method is implemented for the case of a single saem.mmkin object")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/create_deg_func.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Create degradation functions for known analytical solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param spec List of model specifications as contained in mkinmod objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param use_of_ff Minimum or maximum use of formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Degradation function to be attached to mkinmod objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS_D &lt;- subset(FOCUS_2006_D, value != 0) # to avoid warnings</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_1 &lt;- mkinfit(SFO_SFO, FOCUS_D, solution_type = "analytical", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_2 &lt;- mkinfit(SFO_SFO, FOCUS_D, solution_type = "deSolve", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (require(rbenchmark))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' benchmark(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' analytical = mkinfit(SFO_SFO, FOCUS_D, solution_type = "analytical", quiet = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve = mkinfit(SFO_SFO, FOCUS_D, solution_type = "deSolve", quiet = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' replications = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DFOP_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("DFOP", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' benchmark(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' analytical = mkinfit(DFOP_SFO, FOCUS_D, solution_type = "analytical", quiet = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deSolve = mkinfit(DFOP_SFO, FOCUS_D, solution_type = "deSolve", quiet = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' replications = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">create_deg_func &lt;- function(spec, use_of_ff = c("min", "max")) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff &lt;- match.arg(use_of_ff)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> min_ff &lt;- use_of_ff == "min"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- names(spec)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent &lt;- obs_vars[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_type &lt;- spec[[1]]$type</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE # This may be modified below</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">5916<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (min_ff) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">599<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> targets &lt;- c(spec[[1]]$to, if (spec[[1]]$sink) "sink" else NULL)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">599<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_parent &lt;- paste(paste0("k_", parent, "_", targets), collapse = " + ")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">5317<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_parent &lt;- paste0("k_", parent)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[parent] &lt;- paste0(parent_type, ".solution(t, odeini['", parent,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_type == "SFORB") "_free", "'], ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> switch(parent_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFO = k_parent,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> FOMC = "alpha, beta",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> IORE = paste0("k__iore_", parent, if (min_ff) "_sink" else "", ", N_", parent),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> DFOP = "k1, k2, g",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> SFORB = paste0("k_", parent, "_free_bound, k_", parent, "_bound_free, k_", parent, "_free", if (min_ff) "_sink" else ""),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> HS = "k1, k2, tb",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> logistic = "kmax, k0, r"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ")")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">3728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt;= 2) supported &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Except for the following cases:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) == 2) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n1 &lt;- obs_vars[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n2 &lt;- obs_vars[2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n10 &lt;- paste0("odeini['", parent, "']")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n20 &lt;- paste0("odeini['", n2, "']")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # sfo_sfo</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$sink == FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[2]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is.null(spec[[2]]$to))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- k_parent</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- paste0("k_", n2, if(min_ff) "_sink" else "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[n2] &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(((", k2, "-", k1, ")*", n20, "-", k1, "*", n10, ")*exp(-", k2, "*t)+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1, "*", n10, "*exp(-", k1, "*t))/(", k2, "-", k1, ")")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # sfo_f12_sfo</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff == "max",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$sink == TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[2]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is.null(spec[[2]]$to))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- k_parent</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- paste0("k_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- paste0("f_", n1, "_to_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[n2] &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(((", k2, "-", k1, ")*", n20, "-", f12, "*", k1, "*", n10, ")*exp(-", k2, "*t)+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">1129<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12, "*", k1, "*", n10, "*exp(-", k1, "*t))/(", k2, "-", k1, ")")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # sfo_k120_sfo</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff == "min",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$sink == TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[2]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is.null(spec[[2]]$to))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k12 &lt;- paste0("k_", n1, "_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k10 &lt;- paste0("k_", n1, "_sink")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- paste0("k_", n2, "_sink")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[n2] &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(((", k2, "-", k12, "-", k10, ")*", n20, "-", k12, "*", n10, ")*exp(-", k2, "*t)+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">351<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k12, "*", n10, "*exp(-(", k_parent, ")*t))/(", k2, "-(", k_parent, "))")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # dfop_f12_sfo</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> use_of_ff == "max",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$sink == TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[1]]$type == "DFOP",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec[[2]]$type == "SFO",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">3036<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> is.null(spec[[2]]$to))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> supported &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f12 &lt;- paste0("f_", n1, "_to_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- paste0("k_", n2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> predicted_text[n2] &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "((", f12, "* g - ", f12, ") * k2 * ", n10, " * exp(- k2 * t))/(k2 - ", k2, ") - ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "((", f12, "* g) * k1 * ", n10, " * exp(- k1 * t))/(k1 - ", k2, ") + ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "(((k1 - ", k2, ") * k2 - ", k2, "* k1 + ", k2, "^2) * ", n20, "+",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "((", f12, "* k1 + (", f12, "*g - ", f12, ") * ", k2, ") * k2 - ", f12, " * g * ", k2, " * k1) * ", n10, ") * ",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">565<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "exp( - ", k2, " * t)/((k1 - ", k2, ") * k2 - ", k2, " * k1 + ", k2, "^2)")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">8117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (supported) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_func &lt;- function(observed, odeini, odeparms) {}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_body &lt;- paste0("{\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "predicted &lt;- numeric(0)\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "with(as.list(odeparms), {\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">9961<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_body &lt;- paste0(f_body,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">9961<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "t &lt;- observed[observed$name == '", obs_var, "', 'time']\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">9961<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "predicted &lt;&lt;- c(predicted, ", predicted_text[obs_var], ")\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_body &lt;- paste0(f_body,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "})\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "return(predicted)\n}\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> body(deg_func) &lt;- parse(text = f_body)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">7175<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(deg_func)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">942<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/nlme.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Helper functions to create nlme models from mmkin row objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' These functions facilitate setting up a nonlinear mixed effects model for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' an mmkin row object. An mmkin row object is essentially a list of mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' objects that have been obtained by fitting the same model to a list of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' datasets. They are used internally by the [nlme.mmkin()] method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An mmkin row object containing several fits of the same model to different datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @import nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{nlme.mmkin}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_SFO &lt;- mkinmod(parent = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_1 &lt;- mkinpredict(m_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 98), sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_1_long &lt;- mkin_wide_to_long(d_SFO_1, time = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_2 &lt;- mkinpredict(m_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.05),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 102), sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_2_long &lt;- mkin_wide_to_long(d_SFO_2, time = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_3 &lt;- mkinpredict(m_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.02),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 103), sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_3_long &lt;- mkin_wide_to_long(d_SFO_3, time = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d1 &lt;- add_err(d_SFO_1, function(value) 3, n = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d2 &lt;- add_err(d_SFO_2, function(value) 2, n = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d3 &lt;- add_err(d_SFO_3, function(value) 4, n = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- c(d1 = d1, d2 = d2, d3 = d3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin("SFO", ds, cores = 1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mean_dp &lt;- mean_degparms(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' grouped_data &lt;- nlme_data(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nlme_f &lt;- nlme_function(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # These assignments are necessary for these objects to be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # visible to nlme and augPred when evaluation is done by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # pkgdown to generate the html docs.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' assign("nlme_f", nlme_f, globalenv())</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' assign("grouped_data", grouped_data, globalenv())</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_nlme &lt;- nlme(value ~ nlme_f(name, time, parent_0, log_k_parent_sink),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' data = grouped_data,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fixed = parent_0 + log_k_parent_sink ~ 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' random = pdDiag(parent_0 + log_k_parent_sink ~ 1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' start = mean_dp)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(m_nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(augPred(m_nlme, level = 0:1), layout = c(3, 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # augPred does not work on fits with more than one state</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # variable</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The procedure is greatly simplified by the nlme.mmkin function</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme &lt;- nlme(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A function that can be used with nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme_function &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">60</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkin_model &lt;- object[[1]]$mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_names &lt;- names(mean_degparms(object))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Inspired by https://stackoverflow.com/a/12983961/3805440</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and https://stackoverflow.com/a/26280789/3805440</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function_alist &lt;- replicate(length(degparm_names) + 2, substitute())</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(model_function_alist) &lt;- c("name", "time", degparm_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function_body &lt;- quote({</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> arg_frame &lt;- as.data.frame(as.list((environment())), stringsAsFactors = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_frame &lt;- arg_frame[1:2]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_frame &lt;- arg_frame[-(1:2)]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_unique &lt;- unique(parm_frame)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_unique &lt;- nrow(parms_unique)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> times_ds &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names_ds &lt;- list()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:n_unique) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> times_ds[[i]] &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> arg_frame[which(arg_frame[[3]] == parms_unique[i, 1]), "time"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names_ds[[i]] &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> arg_frame[which(arg_frame[[3]] == parms_unique[i, 1]), "name"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_list &lt;- lapply(1:n_unique, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms_optim &lt;- unlist(parms_unique[x, , drop = TRUE])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_fixed &lt;- object[[1]]$bparms.fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim_parm_names &lt;- grep('_0$', names(transparms_optim), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_optim &lt;- transparms_optim[odeini_optim_parm_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini_optim) &lt;- gsub('_0$', '', odeini_optim_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed_parm_names &lt;- grep('_0$', names(parms_fixed), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini_fixed &lt;- parms_fixed[odeini_fixed_parm_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(odeini_fixed) &lt;- gsub('_0$', '', odeini_fixed_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeini &lt;- c(odeini_optim, odeini_fixed)[names(mkin_model$diffs)]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_transparms_optim_names &lt;- setdiff(names(transparms_optim), odeini_optim_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_optim &lt;- backtransform_odeparms(transparms_optim[ode_transparms_optim_names], mkin_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = object[[1]]$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = object[[1]]$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_fixed_names &lt;- setdiff(names(parms_fixed), odeini_fixed_parm_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms_fixed &lt;- parms_fixed[odeparms_fixed_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms &lt;- c(odeparms_optim, odeparms_fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_wide &lt;- mkinpredict(mkin_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> odeparms = odeparms, odeini = odeini,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> solution_type = object[[1]]$solution_type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> outtimes = sort(unique(times_ds[[x]])))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_array &lt;- out_wide[, -1, drop = FALSE]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(out_array) &lt;- as.character(unique(times_ds[[x]]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_times &lt;- as.character(times_ds[[x]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_names &lt;- as.character(names_ds[[x]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_values &lt;- mapply(function(times, names) out_array[times, names],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> out_times, out_names)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">2342789<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(as.numeric(out_values))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- unlist(res_list)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">252739<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_function &lt;- as.function(c(model_function_alist, model_function_body))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">1168<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(model_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom rlang !!!</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A \code{\link{groupedData}} object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme_data &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">132</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_names &lt;- colnames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_list &lt;- lapply(object, function(x) x$data[c("time", "variable", "observed")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_list) &lt;- ds_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme &lt;- vctrs::vec_rbind(!!!ds_list, .names_to = "ds")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme$variable &lt;- as.character(ds_nlme$variable)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme$ds &lt;- ordered(ds_nlme$ds, levels = unique(ds_nlme$ds))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme_renamed &lt;- data.frame(ds = ds_nlme$ds, name = ds_nlme$variable,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = ds_nlme$time, value = ds_nlme$observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stringsAsFactors = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_nlme_grouped &lt;- groupedData(value ~ time | ds, ds_nlme_renamed, order.groups = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">5677<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ds_nlme_grouped)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/transform_odeparms.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Functions to transform and backtransform kinetic parameters for fitting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The transformations are intended to map parameters that should only take on</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' restricted values to the full scale of real numbers. For kinetic rate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' constants and other parameters that can only take on positive values, a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' simple log transformation is used. For compositional parameters, such as the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' formations fractions that should always sum up to 1 and can not be negative,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the [ilr] transformation is used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The transformation of sets of formation fractions is fragile, as it supposes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the same ordering of the components in forward and backward transformation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This is no problem for the internal use in [mkinfit].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parms Parameters of kinetic models as used in the differential</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' equations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transparms Transformed parameters of kinetic models as used in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitting procedure.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param mkinmod The kinetic model of class [mkinmod], containing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the names of the model variables that are needed for grouping the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' formation fractions before [ilr] transformation, the parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names and the information if the pathway to sink is included in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transform_rates Boolean specifying if kinetic rate constants should</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be transformed in the model specification used in the fitting for better</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compliance with the assumption of normal distribution of the estimator. If</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' TRUE, also alpha and beta parameters of the FOMC model are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' log-transformed, as well as k1 and k2 rate constants for the DFOP and HS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' models and the break point tb of the HS model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transform_fractions Boolean specifying if formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' constants should be transformed in the model specification used in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitting for better compliance with the assumption of normal distribution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the estimator. The default (TRUE) is to do transformations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The g parameter of the DFOP model is also seen as a fraction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If a single fraction is transformed (g parameter of DFOP or only a single</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' target variable e.g. a single metabolite plus a pathway to sink), a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' logistic transformation is used [stats::qlogis()]. In other cases, i.e. if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' two or more formation fractions need to be transformed whose sum cannot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' exceed one, the [ilr] transformation is used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A vector of transformed or backtransformed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats plogis qlogis</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = list(type = "SFO", to = "m1", sink = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = list(type = "SFO"), use_of_ff = "min")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Fit the model to the FOCUS example dataset D using defaults</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS_D &lt;- subset(FOCUS_2006_D, value != 0) # remove zero values to avoid warning</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.s &lt;- summary(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Transformed and backtransformed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.s$par, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.s$bpar, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Compare to the version without transforming rate parameters (does not work</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # with analytical solution, we get NA values for m1 in predictions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.2 &lt;- mkinfit(SFO_SFO, FOCUS_D, transform_rates = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' solution_type = "deSolve", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.2.s &lt;- summary(fit.2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.2.s$par, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.2.s$bpar, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' initials &lt;- fit$start$value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(initials) &lt;- rownames(fit$start)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformed &lt;- fit$start_transformed$value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(transformed) &lt;- rownames(fit$start_transformed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transform_odeparms(initials, SFO_SFO)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' backtransform_odeparms(transformed, SFO_SFO)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The case of formation fractions (this is now the default)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.ff &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = list(type = "SFO", to = "m1", sink = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = list(type = "SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.ff &lt;- mkinfit(SFO_SFO.ff, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.ff.s &lt;- summary(fit.ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.ff.s$par, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.ff.s$bpar, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' initials &lt;- c("f_parent_to_m1" = 0.5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformed &lt;- transform_odeparms(initials, SFO_SFO.ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' backtransform_odeparms(transformed, SFO_SFO.ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # And without sink</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.ff.2 &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = list(type = "SFO", to = "m1", sink = FALSE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = list(type = "SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.ff.2 &lt;- mkinfit(SFO_SFO.ff.2, FOCUS_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.ff.2.s &lt;- summary(fit.ff.2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.ff.2.s$par, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(fit.ff.2.s$bpar, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export transform_odeparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">transform_odeparms &lt;- function(parms, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = TRUE, transform_fractions = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We need the model specification for the names of the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # variables and the information on the sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec = mkinmod$spec</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up container for transformed parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms &lt;- numeric(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not transform initial values for state variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.optim &lt;- parms[grep("_0$", names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[names(state.ini.optim)] &lt;- state.ini.optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Log transformation for rate constants if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k &lt;- parms[grep("^k_", names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k__iore &lt;- parms[grep("^k__iore_", names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k &lt;- c(k, k__iore)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(k) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">120</td>
+ <td class="coverage">15485<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">14379<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[paste0("log_", names(k))] &lt;- log(k)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">1106<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else transparms[names(k)] &lt;- k</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not transform exponents in IORE models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">126</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N &lt;- parms[grep("^N", names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">127</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[names(N)] &lt;- N</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Go through state variables and transform formation fractions if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars = names(spec)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">41283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f &lt;- parms[grep(paste("^f", box, sep = "_"), names(parms))]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">41283<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">6522<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(transform_fractions) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">5910<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[box]]$sink) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">5908<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">5894<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f_name &lt;- paste("f", box, "qlogis", sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">5894<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[trans_f_name] &lt;- qlogis(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">14<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f &lt;- ilr(c(f, 1 - sum(f)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">14<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f_names &lt;- paste("f", box, "ilr", 1:length(trans_f), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">14<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[trans_f_names] &lt;- trans_f</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(f) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f &lt;- ilr(f)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f_names &lt;- paste("f", box, "ilr", 1:length(trans_f), sep = "_")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[trans_f_names] &lt;- trans_f</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">612<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[names(f)] &lt;- f</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform also FOMC parameters alpha and beta, DFOP and HS rates k1 and k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and HS parameter tb as well as logistic model parameters kmax, k0 and r if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # transformation of rates is requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in c("alpha", "beta", "k1", "k2", "tb", "kmax", "k0", "r")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">204696<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(parms[pname])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">6006<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">6006<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[paste0("log_", pname)] &lt;- log(parms[pname])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">166</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms[pname] &lt;- parms[pname]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # DFOP parameter g is treated as a fraction</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(parms["g"])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">1978<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- parms["g"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">1978<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transform_fractions) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">1978<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms["g_qlogis"] &lt;- qlogis(g)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">177</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transparms["g"] &lt;- g</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">25587<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(transparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname transform_odeparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export backtransform_odeparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">backtransform_odeparms &lt;- function(transparms, mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We need the model specification for the names of the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # variables and the information on the sink</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec = mkinmod$spec</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up container for backtransformed parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms &lt;- numeric(0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not transform initial values for state variables</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.ini.optim &lt;- transparms[grep("_0$", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(state.ini.optim)] &lt;- state.ini.optim</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Exponential transformation for rate constants</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">49140623<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k &lt;- transparms[grep("^log_k_", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">49140623<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k__iore &lt;- transparms[grep("^log_k__iore_", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">49140623<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k = c(trans_k, trans_k__iore)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">49140623<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(trans_k) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">47598103<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_names &lt;- gsub("^log_k", "k", names(trans_k))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">47598103<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[k_names] &lt;- exp(trans_k)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">209</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">73591<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k &lt;- transparms[grep("^k_", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">73591<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(trans_k)] &lt;- trans_k</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">213</td>
+ <td class="coverage">73591<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_k__iore &lt;- transparms[grep("^k__iore_", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">73591<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(trans_k__iore)] &lt;- trans_k__iore</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Do not transform exponents in IORE models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N &lt;- transparms[grep("^N", names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(N)] &lt;- N</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Go through state variables and apply inverse transformations to formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars = names(spec)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the names as used in the model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">97593385<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names = grep(paste("^f", box, sep = "_"), mkinmod$parms, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get the formation fraction parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">97593385<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> trans_f = transparms[grep(paste("^f", box, sep = "_"), names(transparms))]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">97593385<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(trans_f) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">46632823<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(transform_fractions) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">46588453<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(grepl("qlogis", names(trans_f)))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">232</td>
+ <td class="coverage">46059152<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_tmp &lt;- plogis(trans_f)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">46059152<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[f_names] &lt;- f_tmp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_tmp &lt;- invilr(trans_f)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (spec[[box]]$sink) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">528393<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[f_names] &lt;- f_tmp[1:length(f_tmp)-1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">908<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[f_names] &lt;- f_tmp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">240</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">241</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">242</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">44370<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[names(trans_f)] &lt;- trans_f</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">245</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">246</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">247</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">248</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform parameters also for FOMC, DFOP, HS and logistic models</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in c("alpha", "beta", "k1", "k2", "tb", "kmax", "k0", "r")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">250</td>
+ <td class="coverage">393713712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transform_rates) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">393124984<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pname_trans = paste0("log_", pname)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">393124984<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms[pname_trans])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">4306142<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[pname] &lt;- exp(transparms[pname_trans])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">255</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">256</td>
+ <td class="coverage">588728<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms[pname])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">257</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms[pname] &lt;- transparms[pname]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # DFOP parameter g is now transformed using qlogis</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms["g_qlogis"])) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">2034008<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g_qlogis &lt;- transparms["g_qlogis"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">265</td>
+ <td class="coverage">2034008<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms["g"] &lt;- plogis(g_qlogis)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">266</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">267</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # In earlier times we used ilr for g, so we keep this around</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">268</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms["g_ilr"])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">269</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g_ilr &lt;- transparms["g_ilr"]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">270</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms["g"] &lt;- invilr(g_ilr)[1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(transparms["g"])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">273</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms["g"] &lt;- transparms["g"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">274</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">275</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">276</td>
+ <td class="coverage">49214214<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(parms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">277</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">278</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># vim: set ts=2 sw=2 expandtab:</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/hierarchical_kinetics.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Hierarchical kinetics template</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' R markdown format for setting up hierarchical kinetics based on a template</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' provided with the mkin package. This format is based on [rmarkdown::pdf_document].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Chunk options are adapted. Echoing R code from code chunks and caching are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' turned on per default. character for prepending output from code chunks is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set to the empty string, code tidying is off, figure alignment defaults to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' centering, and positioning of figures is set to "H", which means that</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' figures will not move around in the document, but stay where the user</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' includes them.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The latter feature (positioning the figures with "H") depends on the LaTeX</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' package 'float'. In addition, the LaTeX package 'listing' is used in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' template for showing model fit summaries in the Appendix. This means that</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the LaTeX packages 'float' and 'listing' need to be installed in the TeX</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' distribution used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' On Windows, the easiest way to achieve this (if no TeX distribution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is present before) is to install the 'tinytex' R package, to run</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'tinytex::install_tinytex()' to get the basic tiny Tex distribution,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and then to run 'tinytex::tlmgr_install(c("float", "listing"))'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inheritParams rmarkdown::pdf_document</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... Arguments to \code{rmarkdown::pdf_document}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return R Markdown output format to pass to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link[rmarkdown:render]{render}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(rmarkdown)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The following is now commented out after the relase of v1.2.3 for the generation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # of online docs, as the command creates a directory and opens an editor</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #draft("example_analysis.rmd", template = "hierarchical_kinetics", package = "mkin")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">hierarchical_kinetics &lt;- function(..., keep_tex = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">41</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (getRversion() &lt; "4.1.0")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">42</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("You need R with version &gt; 4.1.0 to compile this document")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">44</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!requireNamespace("knitr")) stop("Please install the knitr package to use this template")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">45</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!requireNamespace("rmarkdown")) stop("Please install the rmarkdown package to use this template")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">46</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> knitr::opts_chunk$set(cache = TRUE, comment = "", tidy = FALSE, echo = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">47</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> knitr::opts_chunk$set(fig.align = "center", fig.pos = "H")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">48</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> options(knitr.kable.NA = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">50</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fmt &lt;- rmarkdown::pdf_document(...,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">51</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> keep_tex = keep_tex,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">52</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> toc = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">53</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> toc_depth = 3,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">54</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> includes = rmarkdown::includes(in_header = "header.tex"),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">55</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> extra_dependencies = c("float", "listing", "framed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">58</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(fmt)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/nlme.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># Code inspired by nlme::nlme.nlsList and R/nlme_fit.R from nlmixr</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># We need to assign the degradation function created in nlme.mmkin to an</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># environment that is always accessible, also e.g. when evaluation is done by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># testthat or pkgdown. Therefore parent.frame() is not good enough. The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># following environment will be in the mkin namespace.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">.nlme_env &lt;- new.env(parent = emptyenv())</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme::nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Retrieve a degradation function from the mmkin namespace</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom utils getFromNamespace</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A function that was likely previously assigned from within</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nlme.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">get_deg_func &lt;- function() {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">19</td>
+ <td class="coverage">217279<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(get("deg_func", getFromNamespace(".nlme_env", "mkin")))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Create an nlme model for an mmkin row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This functions sets up a nonlinear mixed effects model for an mmkin row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object. An mmkin row object is essentially a list of mkinfit objects that</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' have been obtained by fitting the same model to a list of datasets.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Note that the convergence of the nlme algorithms depends on the quality</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the data. In degradation kinetics, we often only have few datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (e.g. data for few soils) and complicated degradation models, which may</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' make it impossible to obtain convergence with nlme.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param model An [mmkin] row object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data Ignored, data are taken from the mmkin model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fixed Ignored, all degradation parameters fitted in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mmkin model are used as fixed parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param random If not specified, no correlations between random effects are</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set up for the optimised degradation model parameters. This is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' achieved by using the [nlme::pdDiag] method.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param groups See the documentation of nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param start If not specified, mean values of the fitted degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters taken from the mmkin object are used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param correlation See the documentation of nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param weights passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param subset passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param na.action passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param naPattern passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param control passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose passed to nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats na.fail as.formula</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Upon success, a fitted 'nlme.mmkin' object, which is an nlme object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' with additional elements. It also inherits from 'mixed.mmkin'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note As the object inherits from [nlme::nlme], there is a wealth of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' methods that will automatically work on 'nlme.mmkin' objects, such as</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [nlme::intervals()], [nlme::anova.lme()] and [nlme::coef.lme()].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [nlme_function()], [plot.mixed.mmkin], [summary.nlme.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) subset(x$data[c("name", "time", "value")], name == "parent"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(c("SFO", "DFOP"), ds, quiet = TRUE, cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_sfo &lt;- nlme(f["SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_dfop &lt;- nlme(f["DFOP", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_nlme_sfo, f_nlme_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_nlme_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(f_nlme_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_2 &lt;- lapply(experimental_data_for_UBA_2019[6:10],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' function(x) x$data[c("name", "time", "value")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_sfo_sfo &lt;- mkinmod(parent = mkinsub("SFO", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"), use_of_ff = "min", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_sfo_sfo_ff &lt;- mkinmod(parent = mkinsub("SFO", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"), use_of_ff = "max", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_dfop_sfo &lt;- mkinmod(parent = mkinsub("DFOP", "A1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A1 = mkinsub("SFO"), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_2 &lt;- mmkin(list("SFO-SFO" = m_sfo_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "SFO-SFO-ff" = m_sfo_sfo_ff,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "DFOP-SFO" = m_dfop_sfo),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_sfo_sfo &lt;- nlme(f_2["SFO-SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme_sfo_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # With formation fractions this does not coverge with defaults</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_nlme_sfo_sfo_ff &lt;- nlme(f_2["SFO-SFO-ff", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #plot(f_nlme_sfo_sfo_ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # For the following, we need to increase pnlsMaxIter and the tolerance</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # to get convergence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_dfop_sfo &lt;- nlme(f_2["DFOP-SFO", ],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' control = list(pnlsMaxIter = 120, tolerance = 5e-4))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_nlme_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_nlme_dfop_sfo, f_nlme_sfo_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(f_nlme_sfo_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(f_nlme_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (length(findFunction("varConstProp")) &gt; 0) { # tc error model for nlme available</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Attempts to fit metabolite kinetics with the tc error model are possible,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # but need tweeking of control values and sometimes do not converge</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_tc &lt;- mmkin(c("SFO", "DFOP"), ds, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_sfo_tc &lt;- nlme(f_tc["SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_dfop_tc &lt;- nlme(f_tc["DFOP", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f_nlme_sfo, f_nlme_sfo_tc, f_nlme_dfop, f_nlme_dfop_tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_nlme_dfop_tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_2_obs &lt;- update(f_2, error_model = "obs")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_sfo_sfo_obs &lt;- nlme(f_2_obs["SFO-SFO", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_nlme_sfo_sfo_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nlme_dfop_sfo_obs &lt;- nlme(f_2_obs["DFOP-SFO", ],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' control = list(pnlsMaxIter = 120, tolerance = 5e-4))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_2_tc &lt;- update(f_2, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_nlme_sfo_sfo_tc &lt;- nlme(f_2_tc["SFO-SFO", ]) # No convergence with 50 iterations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # f_nlme_dfop_sfo_tc &lt;- nlme(f_2_tc["DFOP-SFO", ],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # control = list(pnlsMaxIter = 120, tolerance = 5e-4)) # Error in X[, fmap[[nm]]] &lt;- gradnm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_nlme_dfop_sfo, f_nlme_dfop_sfo_obs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme.mmkin &lt;- function(model, data = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed = lapply(as.list(names(mean_degparms(model))),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(el) eval(parse(text = paste(el, 1, sep = "~")))),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> random = pdDiag(fixed),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> groups,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start = mean_degparms(model, random = TRUE, test_log_parms = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> correlation = NULL, weights = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> subset, method = c("ML", "REML"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.action = na.fail, naPattern,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control = list(), verbose= FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">142</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(model) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall &lt;- as.list(match.call())[-1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Warn in case arguments were used that are overriden</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(!is.na(match(names(thisCall),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> c("data"))))) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">149</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("'nlme.mmkin' will redefine 'data'")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get native symbol info for speed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (model[[1]]$solution_type == "deSolve" &amp; !is.null(model[[1]]$mkinmod$cf)) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # The mkinmod stored in the first fit will be used by nlme</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model[[1]]$mkinmod$symbols &lt;- deSolve::checkDLL(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">156</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dllname = model[[1]]$mkinmod$dll_info[["name"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> func = "diffs", initfunc = "initpar",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> jacfunc = NULL, nout = 0, outnames = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deg_func &lt;- nlme_function(model)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> assign("deg_func", deg_func, getFromNamespace(".nlme_env", "mkin"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For the formula, get the degradation function from the mkin namespace</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> this_model_text &lt;- paste0("value ~ mkin::get_deg_func()(",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(names(formals(deg_func)), collapse = ", "), ")")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> this_model &lt;- as.formula(this_model_text)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["model"]] &lt;- this_model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["data"]] &lt;- nlme_data(model)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["start"]] &lt;- start</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["fixed"]] &lt;- fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["random"]] &lt;- random</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> error_model &lt;- model[[1]]$err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (missing(weights)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["weights"]] &lt;- switch(error_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">185</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = varIdent(form = ~ 1 | name),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = varConstProp())</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma &lt;- switch(error_model,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">189</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> NULL)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control &lt;- thisCall[["control"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">193</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (error_model == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">928<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> control$sigma = 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">928<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> thisCall[["control"]] &lt;- control</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_time &lt;- system.time(val &lt;- do.call("nlme.formula", thisCall))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$time &lt;- fit_time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mkinmod &lt;- model[[1]]$mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Don't return addresses that will become invalid</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">203</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mkinmod$symbols &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$data &lt;- thisCall[["data"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mmkin &lt;- model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">824<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.list(start)) val$mean_dp_start &lt;- start$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">189<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else val$mean_dp_start &lt;- start</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$transform_rates &lt;- model[[1]]$transform_rates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$transform_fractions &lt;- model[[1]]$transform_fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$solution_type &lt;- model[[1]]$solution_type</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$err_mode &lt;- error_model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$bparms.optim &lt;- backtransform_odeparms(val$coefficients$fixed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">215</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">216</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_rates = val$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform_fractions = val$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$bparms.fixed &lt;- model[[1]]$bparms.fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">220</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$date.fit &lt;- date()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$nlmeversion &lt;- as.character(utils::packageVersion("nlme"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$mkinversion &lt;- as.character(utils::packageVersion("mkin"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val$Rversion &lt;- paste(R.version$major, R.version$minor, sep=".")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(val) &lt;- c("nlme.mmkin", "mixed.mmkin", "nlme", "lme")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">1013<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(val)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">228</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">229</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nlme.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An nlme.mmkin object to print</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.nlme.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat( "Kinetic nonlinear mixed-effects model fit by " )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat( if(x$method == "REML") "REML\n" else "maximum likelihood\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStructural model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> diffs &lt;- x$mmkin[[1]]$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", diffs)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">238</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nLog-", if(x$method == "REML") "restricted-" else "",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">244</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "likelihood: ", format(x$logLik, digits = digits), "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixF &lt;- x$call$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFixed effects:\n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">247</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deparse(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(inherits(fixF, "formula") || is.call(fixF) || is.name(fixF))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> x$call$fixed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">250</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">251</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lapply(fixF, function(el) as.name(deparse(el)))), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(fixef(x), digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">254</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(summary(x$modelStruct), sigma = x$sigma, digits = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">255</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">256</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">257</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">258</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">259</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname nlme.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An nlme.mmkin object to update</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">261</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ... Update specifications passed to update.nlme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">262</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.nlme.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">85<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- NextMethod()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">85<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res$mmkin &lt;- object$mmkin</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">265</td>
+ <td class="coverage">85<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(res) &lt;- c("nlme.mmkin", "nlme", "lme")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">85<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">267</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinresplot.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("variable", "residual"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to plot residuals stored in an mkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function plots the residuals for the specified subset of the observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variables from an mkinfit object. A combined plot of the fitted model and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the residuals can be obtained using \code{\link{plot.mkinfit}} using the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' argument \code{show_residuals = TRUE}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats residuals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A fit represented in an \code{\link{mkinfit}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param obs_vars A character vector of names of the observed variables for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' which residuals should be plotted. Defaults to all observed variables in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlim plot range in x direction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param xlab Label for the x axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized Should the residuals be standardized by dividing by the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' standard deviation given by the error model of the fit?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylab Label for the y axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param maxabs Maximum absolute value of the residuals. This is used for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' scaling of the y axis and defaults to "auto".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legend Should a legend be plotted?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Where should the legend be placed? Default is "topright". Will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be passed on to \code{\link{legend}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param col_obs Colors for the observed variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param pch_obs Symbols to be used for the observed variables.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param frame Should a frame be drawn around the plots?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots further arguments passed to \code{\link{plot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Nothing is returned by this function, as it is called for its side</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effect, namely to produce a plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke and Katrin Lindenberger</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso \code{\link{mkinplot}}, for a way to plot the data and the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lines of the mkinfit object, and \code{\link{plot_res}} for a function</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' combining the plot of the fit and the residual plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model &lt;- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(model, FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinresplot(fit, "m1")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinresplot &lt;- function (object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars = names(object$mkinmod$map),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = c(0, 1.1 * max(object$data$time)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "Time", ylab = ifelse(standardized, "Standardized residual", "Residual"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> maxabs = "auto", legend = TRUE, lpos = "topright",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs = "auto", pch_obs = "auto",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> frame = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars_all &lt;- as.character(unique(object$data$variable))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 0){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- intersect(obs_vars_all, obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else obs_vars &lt;- obs_vars_all</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (standardized) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">59</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_col &lt;- "standardized"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">60</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$data[[res_col]] &lt;- residuals(object, standardized = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_col &lt;- "residual"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- subset(object$data, variable %in% obs_vars)[res_col]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (maxabs == "auto") maxabs = max(abs(res), na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set colors and symbols</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (col_obs[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col_obs &lt;- 1:length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (pch_obs[1] == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pch_obs &lt;- 1:length(obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(col_obs) &lt;- names(pch_obs) &lt;- obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(0, type = "n", frame = frame,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = xlab, ylab = ylab,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(-1.2 * maxabs, 1.2 * maxabs), ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for(obs_var in obs_vars){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">1298<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> residuals_plot &lt;- subset(object$data, variable == obs_var, c("time", res_col))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">1298<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> points(residuals_plot, pch = pch_obs[obs_var], col = col_obs[obs_var])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(h = 0, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">1228<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (legend == TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">91</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos, inset = c(0.05, 0.05), legend = obs_vars,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">92</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> col = col_obs[obs_vars], pch = pch_obs[obs_vars])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/plot.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot model fits (observed and fitted) and the residuals for a row or column</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of an mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' When x is a row selected from an mmkin object (\code{\link{[.mmkin}}), the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' same model fitted for at least one dataset is shown. When it is a column,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the fit of at least one model to the same dataset is shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' If the current plot device is a \code{\link[tikzDevice]{tikz}} device, then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' latex is being used for the formatting of the chi2 error level.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An object of class \code{\link{mmkin}}, with either one row or one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' column.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param main The main title placed on the outer margin of the plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param legends An index for the fits for which legends should be shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param resplot Should the residuals plotted against time, using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinresplot}}, or as squared residuals against predicted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values, with the error model, using \code{\link{mkinerrplot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ylab Label for the y axis.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized Should the residuals be standardized? This option</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is passed to \code{\link{mkinresplot}}, it only takes effect if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' `resplot = "time"`.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param show_errmin Should the chi2 error level be shown on top of the plots</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to the left?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errmin_var The variable for which the FOCUS chi2 error value should</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param errmin_digits The number of significant digits for rounding the FOCUS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' chi2 error percentage.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cex Passed to the plot functions and \code{\link{mtext}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel.height.middle The relative height of the middle plot, if more</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' than two rows of plots are shown.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ymax Maximum y axis value for \code{\link{plot.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Further arguments passed to \code{\link{plot.mkinfit}} and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinresplot}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Only use one core not to offend CRAN checks</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(c("FOMC", "HS"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS B" = FOCUS_2006_B, "FOCUS C" = FOCUS_2006_C), # named list for titles</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cores = 1, quiet = TRUE, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits[, "FOCUS C"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits["FOMC", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits["FOMC", ], show_errmin = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We can also plot a single fit, if we like the way plot.mmkin works, but then the plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # height should be smaller than the plot width (this is not possible for the html pages</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # generated by pkgdown, as far as I know).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits["FOMC", "FOCUS C"]) # same as plot(fits[1, 2])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Show the error models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(fits["FOMC", ], resplot = "errmod")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">plot.mmkin &lt;- function(x, main = "auto", legends = 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> resplot = c("time", "errmod"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = "Residue",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> standardized = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> show_errmin = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin_var = "All data", errmin_digits = 3,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cex = 0.7, rel.height.middle = 0.9,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ymax = "auto", ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.m &lt;- nrow(x)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.d &lt;- ncol(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> resplot &lt;- match.arg(resplot)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We can handle either a row (different models, same dataset)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # or a column (same model, different datasets)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">77</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.m &gt; 1 &amp; n.d &gt; 1) stop("Please select fits either for one model or for one dataset")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.m == 1 &amp; n.d == 1) loop_over = "none"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">246<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.m &gt; 1) loop_over &lt;- "models"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.d &gt; 1) loop_over &lt;- "datasets"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- length(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set the main plot titles from the names of the models or the datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Will be integer indexes if no other names are present in the mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (main == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> main = switch(loop_over,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> none = paste(rownames(x), colnames(x)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> models = colnames(x),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> datasets = rownames(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set relative plot heights, so the first and the last plot are the norm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # and the middle plots (if n.fits &gt;2) are smaller by rel.height.middle</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rel.heights &lt;- if (n.fits &gt; 2) c(1, rep(rel.height.middle, n.fits - 2), 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else rep(1, n.fits)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(matrix(1:(2 * n.fits), n.fits, 2, byrow = TRUE), heights = rel.heights)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(cex = cex)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i.fit in 1:n.fits) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for top row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Reduce bottom margin by 2.1 - hides x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i.fit == 1 &amp; n.fits &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 4.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for middle rows of plots, if any</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i.fit &gt; 1 &amp; i.fit &lt; n.fits) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Reduce top margin by 2 after the first plot as we have no main title,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # reduced plot height, therefore we need rel.height.middle in the layout</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(3.0, 4.1, 2.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Margins for bottom row of plots when we have more than one row</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i.fit == n.fits &amp; n.fits &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Restore bottom margin for last plot to show x axis legend</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">316<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(5.1, 4.1, 2.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit &lt;- x[[i.fit]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ymax == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(fit, legend = legends == i.fit, ylab = ylab, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">125</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> plot(fit, legend = legends == i.fit, ylim = c(0, ymax), ylab = ylab, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">128</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> title(main, outer = TRUE, line = -2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_name &lt;- switch(loop_over,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> models = rownames(x)[i.fit],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> datasets = colnames(x)[i.fit],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> none = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (show_errmin) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2 &lt;- signif(100 * mkinerrmin(fit)[errmin_var, "err.min"], errmin_digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Use LateX if the current plotting device is tikz</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (names(dev.cur()) == "tikz output") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">140</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_text &lt;- paste0(fit_name, " $\\chi^2$ error level = ", chi2, "\\%")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_perc &lt;- paste0(chi2, "%")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> chi2_text &lt;- bquote(.(fit_name) ~ chi^2 ~ "error level" == .(chi2_perc))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mtext(chi2_text, cex = cex, line = 0.4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">147</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mtext(fit_name, cex = cex, line = 0.4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (resplot == "time") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinresplot(fit, legend = FALSE, standardized = standardized, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">153</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mkinerrplot(fit, legend = FALSE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">948<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mtext(paste(fit_name, "residuals"), cex = cex, line = 0.4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Summary method for class "mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Shows status information on the [mkinfit] objects contained in the object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and gives an overview of ill-defined parameters calculated by [illparms].</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object an object of class [mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x an object of class \code{summary.mmkin}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level confidence level for testing parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots optional arguments passed to methods like \code{print}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fits &lt;- mmkin(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c("SFO", "FOMC"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS A" = FOCUS_2006_A,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOCUS C" = FOCUS_2006_C),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE, cores = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(fits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary.mmkin &lt;- function(object, conf.level = 0.95, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ans &lt;- list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object[[1, 1]]$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = attr(object, "time"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> illparms = illparms(object),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> status = status(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(ans) &lt;- c("summary.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ans)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.summary.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$err_mod)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Error model: ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(switch(x$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "Constant variance",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "Variance unique to each observed variable",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "Two-component variance function"), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Fitted in", x$time[["elapsed"]], "s\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStatus:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$status)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x$illparms != "")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nIll-defined parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$illparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/read_spreadsheet.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Read datasets and relevant meta information from a spreadsheet file</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function imports one dataset from each sheet of a spreadsheet file.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' These sheets are selected based on the contents of a sheet 'Datasets', with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a column called 'Dataset Number', containing numbers identifying the dataset</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sheets to be read in. In the second column there must be a grouping</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable, which will often be named 'Soil'. Optionally, time normalization</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' factors can be given in columns named 'Temperature' and 'Moisture'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' There must be a sheet 'Compounds', with columns 'Name' and 'Acronym'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The first row read after the header read in from this sheet is assumed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to contain name and acronym of the parent compound.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The dataset sheets should be named using the dataset numbers read in from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the 'Datasets' sheet, i.e. '1', '2', ... . In each dataset sheet, the name</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the observed variable (e.g. the acronym of the parent compound or</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' one of its transformation products) should be in the first column,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the time values should be in the second colum, and the observed value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the third column.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' In case relevant covariate data are available, they should be given</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in a sheet 'Covariates', containing one line for each value of the grouping</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable specified in 'Datasets'. These values should be in the first</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' column and the column must have the same name as the second column in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'Datasets'. Covariates will be read in from columns four and higher.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Their names should preferably not contain special characters like spaces,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' so they can be easily used for specifying covariate models.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A similar data structure is defined as the R6 class [mkindsg], but</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is probably more complicated to use.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param path Absolute or relative path to the spreadsheet file</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param valid_datasets Optional numeric index of the valid datasets, default is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to use all datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parent_only Should only the parent data be used?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param normalize Should the time scale be normalized using temperature</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and moisture normalisation factors in the sheet 'Datasets'?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">read_spreadsheet &lt;- function(path, valid_datasets = "all",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_only = FALSE, normalize = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!requireNamespace("readxl", quietly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">43</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please install the readxl package to use this function")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Read the compound table</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> compounds &lt;- readxl::read_excel(path, sheet = "Compounds")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent &lt;- compounds[1, ]$Acronym</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Read in meta information</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_meta &lt;- readxl::read_excel(path, sheet = "Datasets")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_meta["Dataset Number"] &lt;- as.character(ds_meta[["Dataset Number"]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Select valid datasets</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">54</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (valid_datasets[1] == "all") valid_datasets &lt;- 1:nrow(ds_meta)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_numbers_valid &lt;- ds_meta[valid_datasets, ]$`Dataset Number`</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> grouping_factor &lt;- names(ds_meta[2]) # Often "Soil"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Read in valid datasets</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_raw &lt;- lapply(ds_numbers_valid,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(dsn) readxl::read_excel(path, sheet = as.character(dsn)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Make data frames compatible with mmkin</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_tmp &lt;- lapply(ds_raw, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_ret &lt;- x[1:3] |&gt;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rlang::set_names(c("name", "time", "value")) |&gt;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform(value = as.numeric(value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_tmp) &lt;- ds_numbers_valid</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Normalize with temperature and moisture correction factors</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (normalize) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_norm &lt;- lapply(ds_numbers_valid, function(ds_number) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_corr &lt;- as.numeric(ds_meta[ds_number, c("Temperature", "Moisture")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_corr &lt;- ds_tmp[[ds_number]] |&gt;</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transform(time = time * f_corr[1] * f_corr[2])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">1287<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ds_corr)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">79</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_norm &lt;- ds_tmp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds_norm) &lt;- ds_numbers_valid</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Select parent data only if requested</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (parent_only) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">85</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_norm &lt;- lapply(ds_norm, function(x) subset(x, name == parent))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">86</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> compounds &lt;- compounds[1, ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Create a single long table to combine datasets with the same group name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_all &lt;- vctrs::vec_rbind(!!!ds_norm, .names_to = "Dataset Number")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds_all_group &lt;- merge(ds_all, ds_meta[c("Dataset Number", grouping_factor)])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> groups &lt;- unique(ds_meta[valid_datasets, ][[grouping_factor]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds &lt;- lapply(groups, function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">819<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- ds_all_group[ds_all_group[[grouping_factor]] == x, ]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">819<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret[c("name", "time", "value")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(ds) &lt;- groups</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get covariates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates_raw &lt;- readxl::read_excel(path, sheet = "Covariates")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates &lt;- as.data.frame(covariates_raw[4:ncol(covariates_raw)])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nocov &lt;- setdiff(groups, covariates_raw[[1]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(nocov) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">106</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("Did not find covariate data for ", paste(nocov, collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">107</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("Not returning covariate data")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">108</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(ds, "covariates") &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(covariates) &lt;- covariates_raw[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates &lt;- covariates[which(colnames(covariates) != "Remarks")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Attach covariate data if available</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(ds, "covariates") &lt;- covariates[groups, , drop = FALSE]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Attach the compound list to support automatic model building</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(ds, "compounds") &lt;- as.data.frame(compounds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/CAKE_export.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Export a list of datasets format to a CAKE study file</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' In addition to the datasets, the pathways in the degradation model can be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' specified as well.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ds A named list of datasets in long format as compatible with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param map A character vector with CAKE compartment names (Parent, A1, ...),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' named with the names used in the list of datasets.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param links An optional character vector of target compartments, named with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the names of the source compartments. In order to make this easier, the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names are used as in the datasets supplied.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param filename Where to write the result. Should end in .csf in order to be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compatible with CAKE.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param path An optional path to the output file.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param overwrite If TRUE, existing files are overwritten.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param study The name of the study.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param description An optional description.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param time_unit The time unit for the residue data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param res_unit The unit used for the residues.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param comment An optional comment.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param date The date of file creation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param optimiser Can be OLS or IRLS.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom utils write.table</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The function is called for its side effect.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">CAKE_export &lt;- function(ds, map = c(parent = "Parent"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> links = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> filename = "CAKE_export.csf", path = ".", overwrite = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study = "Degradinol aerobic soil degradation",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> description = "",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time_unit = "days",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_unit = "% AR",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> comment = "",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> date = Sys.Date(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> optimiser = "IRLS")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> file &lt;- file.path(path, filename)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (file.exists(file) &amp; !overwrite) stop(file, " already exists, stopping")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> csf &lt;- file(file, encoding = "latin1", open = "w+")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(close(csf))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> CAKE_compartments = c("Parent", "A1", "A2", "A3", "B1", "B2", "C1")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!all(map %in% CAKE_compartments)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("The elements of map have to be CAKE compartment names")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add &lt;- function(x) cat(paste0(x, "\r\n"), file = csf, append = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add0 &lt;- function(x) cat(x, file = csf, append = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("[FileInfo]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("CAKE-Version: 3.4 (Release)")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Name:", study))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Description:", description))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("MeasurementUnits:", res_unit))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("TimeUnits:", time_unit))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Comments:", comment))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Date:", date))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("Optimiser:", optimiser))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("[Data]")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(ds)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste("NewDataSet:", names(ds)[i]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d &lt;- mkin_long_to_wide(ds[[i]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(d) &lt;- c("Time", map[names(d)[-1]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> write.table(d, csf,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sep = "\t", col.names = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> quote = FALSE, eol = "\r\n", na = "")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(links)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("[Model]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste0("ParentCompartment: Parent\t", names(map)[1], "\t", names(map)[1]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (name in names(map)[-1]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste0("Compartment: ", map[name], "\t", name, "\t", name))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (li in names(links)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste0("Link: ", map[li], "\t", map[links[li]], "\t0.5\t0\t1\tFree\tExplicit"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add("[ComponentNames]")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (name in names(map)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> add(paste0(map[name], ":", name))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary_listing.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Display the output of a summary function according to the output format</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function is intended for use in a R markdown code chunk with the chunk</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' option `results = "asis"`.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The object for which the summary is to be listed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param caption An optional caption</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param label An optional label, ignored in html output</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param clearpage Should a new page be started after the listing? Ignored in html output</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary_listing &lt;- function(object, caption = NULL, label = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> clearpage = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">13</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (knitr::is_latex_output()) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">14</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tex_listing(object = object, caption = caption, label = label,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">15</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> clearpage = clearpage)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">17</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (knitr::is_html_output()) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">18</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> html_listing(object = object, caption = caption)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary_listing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">tex_listing &lt;- function(object, caption = NULL, label = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> clearpage = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">26</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">27</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\begin{listing}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">28</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(caption)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">29</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\caption{", caption, "}", "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">31</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(label)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">32</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\caption{", label, "}", "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">34</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\begin{snugshade}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">35</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\scriptsize", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">36</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\begin{verbatim}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">37</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(capture.output(suppressWarnings(summary(object))), sep = "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">38</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">39</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\end{verbatim}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">40</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\end{snugshade}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">41</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\end{listing}", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">42</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (clearpage) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">43</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\\clearpage", "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary_listing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">html_listing &lt;- function(object, caption = NULL) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">50</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">51</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(caption)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">52</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;caption&gt;", caption, "&lt;/caption&gt;", "\n", sep = "")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">54</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;pre&gt;&lt;code&gt;\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">55</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(capture.output(suppressWarnings(summary(object))), sep = "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">57</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;/pre&gt;&lt;/code&gt;\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/multistart.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Perform a hierarchical model fit with multiple starting values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The purpose of this method is to check if a certain algorithm for fitting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nonlinear hierarchical models (also known as nonlinear mixed-effects models)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' will reliably yield results that are sufficiently similar to each other, if</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' started with a certain range of reasonable starting parameters. It is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' inspired by the article on practical identifiabiliy in the frame of nonlinear</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mixed-effects models by Duchesne et al (2021).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The fit object to work with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param n How many different combinations of starting parameters should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' used?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cores How many fits should be run in parallel (only on posix platforms)?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cluster A cluster as returned by [parallel::makeCluster] to be used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for parallel execution.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Passed to the update function.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x The multistart object to print</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list of [saem.mmkin] objects, with class attributes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 'multistart.saem.mmkin' and 'multistart'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [parplot], [llhist]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Duchesne R, Guillemin A, Gandrillon O, Crauste F. Practical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' identifiability in the frame of nonlinear mixed effects models: the example</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the in vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' doi: 10.1186/s12859-021-04373-4.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(mkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dmta_ds &lt;- lapply(1:7, function(i) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_i &lt;- dimethenamid_2018$ds[[i]]$data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_i[ds_i$name == "DMTAP", "name"] &lt;- "DMTA"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_i$time &lt;- ds_i$time * dimethenamid_2018$f_time_norm[i]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_i</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(dmta_ds) &lt;- sapply(dimethenamid_2018$ds, function(ds) ds$title)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dmta_ds[["Elliot"]] &lt;- rbind(dmta_ds[["Elliot 1"]], dmta_ds[["Elliot 2"]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dmta_ds[["Elliot 1"]] &lt;- dmta_ds[["Elliot 2"]] &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin &lt;- mmkin("DFOP", dmta_ds, error_model = "tc", cores = 7, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_full &lt;- saem(f_mmkin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_full_multi &lt;- multistart(f_saem_full, n = 16, cores = 16)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parplot(f_saem_full_multi, lpos = "topleft")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_full)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_reduced &lt;- update(f_saem_full, no_random_effect = "log_k2")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_reduced)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # On Windows, we need to create a PSOCK cluster first and refer to it</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # in the call to multistart()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(parallel)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cl &lt;- makePSOCKcluster(12)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_reduced_multi &lt;- multistart(f_saem_reduced, n = 16, cluster = cl)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parplot(f_saem_reduced_multi, lpos = "topright", ylim = c(0.5, 2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' stopCluster(cl)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">multistart &lt;- function(object, n = 50,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cores = if (Sys.info()["sysname"] == "Windows") 1 else parallel::detectCores(),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cluster = NULL, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("multistart", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">multistart.saem.mmkin &lt;- function(object, n = 50, cores = 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cluster = NULL, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- match.call()</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">68</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n &lt;= 1) stop("Please specify an n of at least 2")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin_object &lt;- object$mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin_parms &lt;- parms(mmkin_object, errparms = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformed = object$transformations == "mkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> start_parms &lt;- apply(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mmkin_parms, 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(x) stats::runif(n, min(x), max(x)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call &lt;- object$call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call[[1]] &lt;- saem</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call[[2]] &lt;- mmkin_object</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> i_startparms &lt;- which(names(saem_call) == "degparms_start")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fit_function &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> new_startparms &lt;- str2lang(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0(capture.output(dput(start_parms[x, ])),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> collapse = ""))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(i_startparms) == 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call &lt;- c(as.list(saem_call), degparms_start = new_startparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call &lt;- as.call(saem_call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">93</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> saem_call[i_startparms] &lt;- new_startparms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- eval(saem_call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(cluster)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- parallel::mclapply(1:n, fit_function,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">200<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mc.cores = cores, mc.preschedule = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">105</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- parallel::parLapplyLB(cluster, 1:n, fit_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "orig") &lt;- object</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "start_parms") &lt;- start_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "call") &lt;- call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(res) &lt;- c("multistart.saem.mmkin", "multistart")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status.multistart &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">116</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_summary_warnings &lt;- character()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">118</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">119</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">120</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit, "try-error")) return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">122</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("OK")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">125</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">127</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "status.multistart"</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">128</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">130</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">status.multistart.saem.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_summary_warnings &lt;- character()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- lapply(object,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> function(fit) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">137</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(fit$so, "try-error")) return("E")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">704<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return("OK")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> })</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- unlist(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(result) &lt;- "status.multistart"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.status.multistart &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(x) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(table(x, dnn = NULL))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "OK")) cat("OK: Fit terminated successfully\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">153</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x == "E")) cat("E: Error\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.multistart &lt;- function(x, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;multistart&gt; object with", length(x), "fits:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">88<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(status(x))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">best &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("best", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The object with the highest likelihood</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">best.default &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">184<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object[[which.best(object)]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The index of the object with the highest likelihood</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">179</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">181</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">which.best &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">360<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("which.best", object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">which.best.default &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">360<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llfunc &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">191</td>
+ <td class="coverage">2528<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ret &lt;- try(logLik(object))</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">192</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(ret, "try-error")) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">193</td>
+ <td class="coverage">2528<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">360<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;- sapply(object, llfunc)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">360<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(which.max(ll))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.multistart &lt;- function(object, ..., evaluate = TRUE) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">201</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- attr(object, "call")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For some reason we get multistart.saem.mmkin in call[[1]] when using multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # from the loaded package so we need to fix this so we do not have to export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # multistart.saem.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">205</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[1]] &lt;- multistart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">207</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">209</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">210</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">213</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">214</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">217</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">218</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">219</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">220</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">222</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">223</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/lrtest.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom lmtest lrtest</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">lmtest::lrtest</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Likelihood ratio test for mkinfit models</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Compare two mkinfit models based on their likelihood. If two fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinfit objects are given as arguments, it is checked if they have been</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fitted to the same data. It is the responsibility of the user to make sure</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' that the models are nested, i.e. one of them has less degrees of freedom</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and can be expressed by fixing the parameters of the other.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Alternatively, an argument to mkinfit can be given which is then passed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to \code{\link{update.mkinfit}} to obtain the alternative model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The comparison is then made by the \code{\link[lmtest]{lrtest.default}}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method from the lmtest package. The model with the higher number of fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters (alternative hypothesis) is listed first, then the model with the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lower number of fitted parameters (null hypothesis).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats logLik update</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An \code{\link{mkinfit}} object, or an \code{\link{mmkin}} column</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' object containing two fits to the same data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object_2 Optionally, another mkinfit object fitted to the same data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Argument to \code{\link{mkinfit}}, passed to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{update.mkinfit}} for creating the alternative fitted object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data &lt;- subset(synthetic_data_for_UBA_2014[[12]]$data, name == "parent")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_fit &lt;- mkinfit("SFO", test_data, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_fit &lt;- mkinfit("DFOP", test_data, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(dfop_fit, sfo_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(sfo_fit, dfop_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The following two examples are commented out as they fail during</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # generation of the static help pages by pkgdown</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #lrtest(dfop_fit, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #lrtest(dfop_fit, fixed_parms = c(k2 = 0))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # However, this equivalent syntax also works for static help pages</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(dfop_fit, update(dfop_fit, error_model = "tc"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lrtest(dfop_fit, update(dfop_fit, fixed_parms = c(k2 = 0)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">lrtest.mkinfit &lt;- function(object, object_2 = NULL, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name_function &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_name &lt;- paste(x$mkinmod$name, "with error model", x$err_mod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x$bparms.fixed) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">7<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_name &lt;- paste(object_name,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">7<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "and fixed parameter(s)",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">7<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(names(x$bparms.fixed), collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object_name)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object_2)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">58</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2 &lt;- update(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_object &lt;- object$data[c("time", "variable", "observed")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_object_2 &lt;- object_2$data[c("time", "variable", "observed")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">6<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(data_object, data_object_2)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("It seems that the mkinfit objects have not been fitted to the same data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (attr(logLik(object), "df") &gt; attr(logLik(object_2), "df")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lmtest::lrtest.default(object, object_2, name = name_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lmtest::lrtest.default(object_2, object, name = name_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname lrtest.mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">lrtest.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">76</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) != 2 | ncol(object) &gt; 1) stop("Only works for a column containing two mkinfit objects")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">77</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[1, 1]]$mkinmod$name &lt;- rownames(object)[1]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object[[2, 1]]$mkinmod$name &lt;- rownames(object)[2]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">79</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lrtest(object[[1, 1]], object[[2, 1]])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/aw.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate Akaike weights for model averaging</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Akaike weights are calculated based on the relative</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' expected Kullback-Leibler information as specified</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' by Burnham and Anderson (2004).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An [mmkin] column object, containing two or more</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' [mkinfit] models that have been fitted to the same data,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' or an mkinfit object. In the latter case, further mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' objects fitted to the same data should be specified</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as dots arguments.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used in the method for [mmkin] column objects,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' further [mkinfit] objects in the method for mkinfit objects.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Burnham KP and Anderson DR (2004) Multimodel</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Inference: Understanding AIC and BIC in Model Selection.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' *Sociological Methods &amp; Research* **33**(2) 261-304</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @md</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_sfo &lt;- mkinfit("SFO", FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_dfop &lt;- mkinfit("DFOP", FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' aw_sfo_dfop &lt;- aw(f_sfo, f_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sum(aw_sfo_dfop)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' aw_sfo_dfop # SFO gets more weight as it has less parameters and a similar fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(c("SFO", "FOMC", "DFOP"), list("FOCUS D" = FOCUS_2006_D), cores = 1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' aw(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sum(aw(f))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' aw(f[c("SFO", "DFOP")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">1482<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw &lt;- function(object, ...) UseMethod("aw")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">.aw &lt;- function(all_objects) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> AIC_all &lt;- sapply(all_objects, AIC)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> delta_i &lt;- AIC_all - min(AIC_all)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> denom &lt;- sum(exp(-delta_i/2))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> w_i &lt;- exp(-delta_i/2) / denom</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(w_i)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname aw</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw.mkinfit &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oo &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_object &lt;- object$data[c("time", "variable", "observed")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(oo)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(oo[[i]], "mkinfit")) stop("Please supply only mkinfit objects")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_other_object &lt;- oo[[i]]$data[c("time", "variable", "observed")]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">988<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(data_object, data_other_object)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("It seems that the mkinfit objects have not all been fitted to the same data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_objects &lt;- list(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> .aw(all_objects)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname aw</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ncol(object) &gt; 1) stop("Please supply an mmkin column object")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> do.call(aw, object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname aw</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw.mixed.mmkin &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">67</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oo &lt;- list(...)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">68</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_object &lt;- object$data[c("ds", "name", "time", "value")]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">69</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in seq_along(oo)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">70</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!inherits(oo[[i]], "mixed.mmkin")) stop("Please supply objects inheriting from mixed.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">71</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_other_object &lt;- oo[[i]]$data[c("ds", "name", "time", "value")]</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">72</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(data_object, data_other_object)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">73</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("It seems that the mixed.mmkin objects have not all been fitted to the same data")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">76</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_objects &lt;- list(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">77</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> .aw(all_objects)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname aw</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">aw.multistart &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">83</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> do.call(aw, object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mean_degparms.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate mean degradation parameters for an mmkin row object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return If random is FALSE (default), a named vector containing mean values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the fitted degradation model parameters. If random is TRUE, a list with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fixed and random effects, in the format required by the start argument of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' nlme for the case of a single grouping variable ds.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An mmkin row object containing several fits of the same model to different datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param random Should a list with fixed and random effects be returned?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param test_log_parms If TRUE, log parameters are only considered in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the mean calculations if their untransformed counterparts (most likely</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rate constants) pass the t-test for significant difference from zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param conf.level Possibility to adjust the required confidence level</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for parameter that are tested if requested by 'test_log_parms'.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param default_log_parms If set to a numeric value, this is used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as a default value for the tested log parameters that failed the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' t-test.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mean_degparms &lt;- function(object, random = FALSE, test_log_parms = FALSE, conf.level = 0.6,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> default_log_parms = NA)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">21</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(object) &gt; 1) stop("Only row objects allowed")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans &lt;- sapply(object, parms, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (test_log_parms) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_dim &lt;- dim(parm_mat_trans)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_dimnames &lt;- dimnames(parm_mat_trans)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> log_parm_trans_names &lt;- grep("^log_", rownames(parm_mat_trans), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> log_parm_names &lt;- gsub("^log_", "", log_parm_trans_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t_test_back_OK &lt;- matrix(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sapply(object, function(o) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">49860<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> suppressWarnings(summary(o)$bpar[log_parm_names, "Pr(&gt;t)"] &lt; (1 - conf.level))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }), nrow = length(log_parm_names))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(t_test_back_OK) &lt;- log_parm_trans_names</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans_OK &lt;- parm_mat_trans</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">4668<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (trans_parm in log_parm_trans_names) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">9398<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans_OK[trans_parm, ] &lt;- ifelse(t_test_back_OK[trans_parm, ],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">9398<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans[trans_parm, ], log(default_log_parms))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">2603<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm_mat_trans_OK &lt;- parm_mat_trans</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mean_degparm_names &lt;- setdiff(rownames(parm_mat_trans), names(object[[1]]$errparms))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_mat_trans &lt;- parm_mat_trans[mean_degparm_names, , drop = FALSE]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> degparm_mat_trans_OK &lt;- parm_mat_trans_OK[mean_degparm_names, , drop = FALSE]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # fixed in the sense of fixed effects, as this function was</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # written to supply starting parameters for nlme</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed &lt;- apply(degparm_mat_trans_OK, 1, mean, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">7271<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (random) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">2322<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> random &lt;- t(apply(degparm_mat_trans[mean_degparm_names, , drop = FALSE], 2, function(column) column - fixed))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # If we only have one parameter, apply returns a vector so we get a single row</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">56</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nrow(degparm_mat_trans) == 1) random &lt;- t(random)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">2322<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(random) &lt;- levels(nlme_data(object)$ds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # For nlmixr we can specify starting values for standard deviations eta, and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # we ignore uncertain parameters if test_log_parms is FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">2322<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> eta &lt;- apply(degparm_mat_trans_OK, 1, stats::sd, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">2322<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(list(fixed = fixed, random = list(ds = random), eta = eta))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">4949<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(fixed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/ilr.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># This file is part of the R package mkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># mkin is free software: you can redistribute it and/or modify it under the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># terms of the GNU General Public License as published by the Free Software</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># Foundation, either version 3 of the License, or (at your option) any later</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># version.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># This program is distributed in the hope that it will be useful, but WITHOUT</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># FOR A PARTICULAR PURPOSE. See the GNU General Public License for more</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># details.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># You should have received a copy of the GNU General Public License along with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"># this program. If not, see &lt;http://www.gnu.org/licenses/&gt;</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to perform isometric log-ratio transformation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This implementation is a special case of the class of isometric log-ratio</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @aliases ilr invilr</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x A numeric vector. Naturally, the forward transformation is only</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sensible for vectors with all elements being greater than zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The result of the forward or backward transformation. The returned</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' components always sum to 1 for the case of the inverse log-ratio</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author René Lehmann and Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso Another implementation can be found in R package</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{robCompositions}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Peter Filzmoser, Karel Hron (2008) Outlier Detection for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Compositional Data Using Robust Methods. Math Geosci 40 233-248</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords manip</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Order matters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(0.1, 1, 10))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(10, 1, 0.1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Equal entries give ilr transformations with zeros as elements</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(3, 3, 3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Almost equal entries give small numbers</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(0.3, 0.4, 0.3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Only the ratio between the numbers counts, not their sum</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' invilr(ilr(c(0.7, 0.29, 0.01)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' invilr(ilr(2.1 * c(0.7, 0.29, 0.01)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Inverse transformation of larger numbers gives unequal elements</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' invilr(-10)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' invilr(c(-10, 0))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The sum of the elements of the inverse ilr is 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sum(invilr(c(-10, 0)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This is why we do not need all elements of the inverse transformation to go back:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a &lt;- c(0.1, 0.3, 0.5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' b &lt;- invilr(a)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' length(b) # Four elements</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ilr(c(b[1:3], 1 - sum(b[1:3]))) # Gives c(0.1, 0.3, 0.5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">ilr &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:(length(x) - 1)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">44<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z[i] &lt;- sqrt(i/(i+1)) * log((prod(x[1:i]))^(1/i) / x[i+1])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">16<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(z)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname ilr</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">invilr&lt;-function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> D &lt;- length(x) + 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z &lt;- c(x, 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y &lt;- rep(0, D)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> s &lt;- sqrt(1:D*2:(D+1))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> q &lt;- z/s</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y[1] &lt;- sum(q[1:D])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 2:D) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">1585969<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> y[i] &lt;- sum(q[i:D]) - sqrt((i-1)/i) * z[i-1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z &lt;- vector()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:D) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">2115270<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z[i] &lt;- exp(y[i])/sum(exp(y))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Work around a numerical problem with NaN values returned by the above</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Only works if there is only one NaN value: replace it with 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # if the sum of the other components is &lt; 1e-10</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (sum(is.na(z)) == 1 &amp;&amp; sum(z[!is.na(z)]) &lt; 1e-10)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">86</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> z = ifelse(is.na(z), 1, z)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">529301<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(z)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/max_twa_parent.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to calculate maximum time weighted average concentrations from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic models fitted with mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function calculates maximum moving window time weighted average</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' concentrations (TWAs) for kinetic models fitted with \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Currently, only calculations for the parent are implemented for the SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOMC, DFOP and HS models, using the analytical formulas given in the PEC</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' soil section of the FOCUS guidance.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @aliases max_twa_parent max_twa_sfo max_twa_fomc max_twa_dfop max_twa_hs</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit An object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param windows The width of the time windows for which the TWAs should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' calculated.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param M0 The initial concentration for which the maximum time weighted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' average over the decline curve should be calculated. The default is to use</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a value of 1, which means that a relative maximum time weighted average</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' factor (f_twa) is calculated.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k The rate constant in the case of SFO kinetics.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param t The width of the time window.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha Parameter of the FOMC model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param beta Parameter of the FOMC model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k1 The first rate constant of the DFOP or the HS kinetics.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k2 The second rate constant of the DFOP or the HS kinetics.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param g Parameter of the DFOP model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param tb Parameter of the HS model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return For \code{max_twa_parent}, a numeric vector, named using the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{windows} argument. For the other functions, a numeric vector of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' length one (also known as 'a number').</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' max_twa_parent(fit, c(7, 21))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_parent &lt;- function(fit, windows) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.all &lt;- c(fit$bparms.optim, fit$bparms.fixed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_vars &lt;- fit$obs_vars</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(obs_vars) &gt; 1) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">45</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> warning("Calculation of maximum time weighted average concentrations is",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">46</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "currently only implemented for the parent compound using",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">47</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "analytical solutions")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_var &lt;- obs_vars[1]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> spec = fit$mkinmod$spec</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> type = spec[[1]]$type</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> M0 &lt;- parms.all[paste0(obs_var, "_0")]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "SFO") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_name &lt;- paste0("k_", obs_var)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (fit$mkinmod$use_of_ff == "min") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">58</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k_name &lt;- paste0(k_name, "_sink")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k &lt;- parms.all[k_name]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> twafunc &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_sfo(M0, k, t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "FOMC") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> alpha &lt;- parms.all["alpha"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> beta &lt;- parms.all["beta"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> twafunc &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_fomc(M0, alpha, beta, t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "DFOP") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- parms.all["k1"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- parms.all["k2"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> g &lt;- parms.all["g"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> twafunc &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_dfop(M0, k1, k2, g, t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type == "HS") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k1 &lt;- parms.all["k1"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> k2 &lt;- parms.all["k2"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tb &lt;- parms.all["tb"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> twafunc &lt;- function(t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_sfo(M0, k1, t),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> max_twa_hs(M0, k1, k2, tb, t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type %in% c("IORE", "SFORB")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">92</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Calculation of maximum time weighted average concentrations is currently ",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">93</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "not implemented for the ", type, " model.")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- twafunc(windows)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(res) &lt;- windows</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname max_twa_parent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_sfo &lt;- function(M0 = 1, k, t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> M0 * (1 - exp(- k * t)) / (k * t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname max_twa_parent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_fomc &lt;- function(M0 = 1, alpha, beta, t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> M0 * (beta)/(t * (1 - alpha)) * ((t/beta + 1)^(1 - alpha) - 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname max_twa_parent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_dfop &lt;- function(M0 = 1, k1, k2, g, t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> M0/t * ((g/k1) * (1 - exp(- k1 * t)) + ((1 - g)/k2) * (1 - exp(- k2 * t)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname max_twa_parent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">max_twa_hs &lt;- function(M0 = 1, k1, k2, tb, t) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">121</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (M0 / t) * (</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1/k1) * (1 - exp(- k1 * tb)) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (exp(- k1 * tb) / k2) * (1 - exp(- k2 * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/f_time_norm_focus.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables("D24_2014")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Normalisation factors for aerobic soil degradation according to FOCUS guidance</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Time step normalisation factors for aerobic soil degradation as described</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in Appendix 8 to the FOCUS kinetics guidance (FOCUS 2014, p. 369).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An object containing information used for the calculations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param temperature Numeric vector of temperatures in °C</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param moisture Numeric vector of moisture contents in \\% w/w</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param field_moisture Numeric vector of moisture contents at field capacity</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (pF2) in \\% w/w</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param study_moisture_ref_source Source for the reference value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' used to calculate the study moisture. If 'auto', preference is given</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to a reference moisture given in the meta information, otherwise</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the focus soil moisture for the soil class is used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param Q10 The Q10 value used for temperature normalisation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param walker The Walker exponent used for moisture normalisation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param f_na The factor to use for NA values. If set to NA, only factors</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for complete cases will be returned.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Currently not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2014) \dQuote{Generic guidance for Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Version 1.1, 18 December 2014</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [focus_soil_moisture]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_time_norm_focus(25, 20, 25) # 1.37, compare FOCUS 2014 p. 184</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' D24_2014$meta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # No moisture normalisation in the first dataset, so we use f_na = 1 to get</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # temperature only normalisation as in the EU evaluation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_time_norm_focus(D24_2014, study_moisture_ref_source = "focus", f_na = 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">f_time_norm_focus &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">765<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("f_time_norm_focus")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname f_time_norm_focus</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">f_time_norm_focus.numeric &lt;- function(object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> moisture = NA, field_moisture = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> temperature = object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Q10 = 2.58, walker = 0.7, f_na = NA, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_temp &lt;- ifelse(is.na(temperature),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_na,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(temperature &lt;= 0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> 0,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Q10^((temperature - 20)/10)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_moist &lt;- ifelse(is.na(moisture),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_na,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(moisture &gt;= field_moisture,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> 1,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (moisture / field_moisture)^walker))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_time_norm &lt;- f_temp * f_moist</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">459<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_time_norm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname f_time_norm_focus</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">f_time_norm_focus.mkindsg &lt;- function(object,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref_source = c("auto", "meta", "focus"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Q10 = 2.58, walker = 0.7, f_na = NA, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref_source &lt;- match.arg(study_moisture_ref_source)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta &lt;- object$meta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(meta$field_moisture)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> field_moisture &lt;- focus_soil_moisture[meta$usda_soil_type, "pF2"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">79</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> field_moisture &lt;- ifelse(is.na(meta$field_moisture),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">80</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> focus_soil_moisture[meta$usda_soil_type, "pF2"],</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">81</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta$field_moisture)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref_focus &lt;-</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> focus_soil_moisture[as.matrix(meta[c("usda_soil_type", "study_moisture_ref_type")])]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (study_moisture_ref_source == "auto") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref &lt;- ifelse (is.na(meta$study_ref_moisture),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref_focus,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta$study_ref_moisture)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (study_moisture_ref_source == "meta") {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">93</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref &lt;- meta$study_moisture_ref</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">153<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture_ref &lt;- study_moisture_ref_focus</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ("study_moisture" %in% names(meta)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">100</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture &lt;- ifelse(is.na(meta$study_moisture),</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">101</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta$rel_moisture * study_moisture_ref,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">102</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta$study_moisture)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> study_moisture &lt;- meta$rel_moisture * study_moisture_ref</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$f_time_norm &lt;- f_time_norm_focus(meta$temperature,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> moisture = study_moisture, field_moisture = field_moisture,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> Q10 = Q10, walker = walker, f_na = f_na)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> message("$f_time_norm was (re)set to normalised values")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">306<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(object$f_time_norm)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinds.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A dataset class for mkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @description</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' At the moment this dataset class is hardly used in mkin. For example,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinfit does not take mkinds datasets as argument, but works with dataframes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' such as the on contained in the data field of mkinds objects. Some datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' provided by this package come as mkinds objects nevertheless.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom R6 R6Class</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mds &lt;- mkinds$new("FOCUS A", FOCUS_2006_A)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(mds)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinds &lt;- R6Class("mkinds",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> public = list(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field title A full title for the dataset</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> title = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field sampling_times The sampling times</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sampling_times = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field time_unit The time unit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time_unit = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field observed Names of the observed variables</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field unit The unit of the observations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> unit = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field replicates The maximum number of replicates per sampling time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> replicates = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field data A data frame with at least the columns name, time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' and value in order to be compatible with mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @description</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' Create a new mkinds object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param title The dataset title</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param data The data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param time_unit The time unit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param unit The unit of the observations</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> initialize = function(title = "", data, time_unit = NA, unit = NA) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$title &lt;- title</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$sampling_times &lt;- sort(unique(data$time))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$time_unit &lt;- time_unit</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$observed &lt;- unique(data$name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$unit &lt;- unit</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$replicates &lt;- max(by(data, list(data$name, data$time), nrow))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(data$override)) data$override &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(data$err)) data$err &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">57</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$data &lt;- data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print mkinds objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An [mkinds] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data Should the data be printed?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mkinds &lt;- function(x, data = FALSE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mkinds&gt; with $title: ", x$title, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Observed compounds $observed: ", paste(x$observed, collapse = ", "), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Sampling times $sampling_times:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(paste(x$sampling_times, collapse = ", "), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("With a maximum of ", x$replicates, " replicates\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(x$time_unit)) cat("Time unit: ", x$time_unit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(x$unit)) cat("Observation unit: ", x$unit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (data) print(mkin_long_to_wide(x$data))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A class for dataset groups for mkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @description</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A container for working with datasets that share at least one compound,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' so that combined evaluations are desirable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Time normalisation factors are initialised with a value of 1 for each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dataset if no data are supplied.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mdsg &lt;- mkindsg$new("Experimental X", experimental_data_for_UBA_2019[6:10])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(mdsg)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(mdsg, verbose = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(mdsg, verbose = TRUE, data = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkindsg &lt;- R6Class("mkindsg",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> public = list(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field title A title for the dataset group</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> title = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field ds A list of mkinds objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ds = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field observed_n Occurrence counts of compounds in datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed_n = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field f_time_norm Time normalisation factors</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_time_norm = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @field meta A data frame with a row for each dataset,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' containing additional information in the form</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' of categorical data (factors) or numerical data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' (e.g. temperature, moisture,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' or covariates like soil pH).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> meta = NULL,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @description</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' Create a new mkindsg object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param title The title</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param ds A list of mkinds objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param f_time_norm Time normalisation factors</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> #' @param meta The meta data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> initialize = function(title = "", ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_time_norm = rep(1, length(ds)), meta)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$title &lt;- title</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(sapply(ds, inherits, "mkinds"))) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$ds &lt;- ds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">133</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply a list of mkinds objects")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_observed &lt;- unlist(lapply(ds, function(x) x$observed))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> observed &lt;- factor(all_observed, levels = unique(all_observed))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$observed_n &lt;- table(observed)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(dimnames(self$observed_n)) &lt;- NULL</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$f_time_norm &lt;- f_time_norm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!missing(meta)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">143</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(meta) &lt;- lapply(ds, function(x) x$title)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">144</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> self$meta &lt;- meta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Print mkindsg objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkindsg</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x An [mkindsg] object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose Should the mkinds objects be printed?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data Should the mkinds objects be printed with their data?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.mkindsg &lt;- function(x, data = FALSE, verbose = data, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("&lt;mkindsg&gt; holding", length(x$ds), "mkinds objects\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Title $title: ", x$title, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Occurrence of observed compounds $observed_n:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$observed_n)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (any(x$f_time_norm != 1)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">164</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Time normalisation factors $f_time_norm:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">165</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$f_time_norm)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$meta)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Meta information $meta:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">104<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$meta)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">208<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (verbose) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">172</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nDatasets $ds:")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">173</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (ds in x$ds) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">174</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">175</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(ds, data = data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">177</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinerrmin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("name", "value_mean"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate the minimum error to assume in order to pass the variance test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function finds the smallest relative error still resulting in passing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the chi-squared test as defined in the FOCUS kinetics report from 2006.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function is used internally by \code{\link{summary.mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param fit an object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha The confidence level chosen for the chi-squared test.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats qchisq aggregate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A dataframe with the following components: \item{err.min}{The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' relative error, expressed as a fraction.} \item{n.optim}{The number of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' optimised parameters attributed to the data series.} \item{df}{The number of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' remaining degrees of freedom for the chi2 error level calculations. Note</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' that mean values are used for the chi2 statistic and therefore every time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' point with observed values in the series only counts one time.} The</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dataframe has one row for the total dataset and one further row for each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed state variable in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in EU</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Registration} Report of the FOCUS Work Group on Degradation Kinetics, EC</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords manip</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO = mkinmod(parent = mkinsub("SFO", to = "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_FOCUS_D = mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' round(mkinerrmin(fit_FOCUS_D), 4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_FOCUS_E = mkinfit(SFO_SFO, FOCUS_2006_E, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' round(mkinerrmin(fit_FOCUS_E), 4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinerrmin &lt;- function(fit, alpha = 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms.optim &lt;- fit$par</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> kinerrmin &lt;- function(errdata, n.parms) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> means.mean &lt;- mean(errdata$observed, na.rm = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> df = nrow(errdata) - n.parms</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err.min &lt;- sqrt((1 / qchisq(1 - alpha, df)) *</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sum((errdata$observed - errdata$predicted)^2)/(means.mean^2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">124726<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(list(err.min = err.min, n.optim = n.parms, df = df))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errdata &lt;- aggregate(cbind(observed, predicted) ~ time + variable, data = fit$data, mean, na.rm=TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errdata &lt;- errdata[order(errdata$time, errdata$variable), ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Remove values at time zero for variables whose value for state.ini is fixed,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # as these will not have any effect in the optimization and should therefore not</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # be counted as degrees of freedom.</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed_initials = gsub("_0$", "", rownames(subset(fit$fixed, type == "state")))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errdata &lt;- subset(errdata, !(time == 0 &amp; variable %in% fixed_initials))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.optim.overall &lt;- length(parms.optim) - length(fit$errparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin.overall &lt;- kinerrmin(errdata, n.optim.overall)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin &lt;- data.frame(err.min = errmin.overall$err.min,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.optim = errmin.overall$n.optim, df = errmin.overall$df)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(errmin) &lt;- "All data"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # The degrees of freedom are counted according to FOCUS kinetics (2011, p. 164)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (obs_var in fit$obs_vars)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">74</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errdata.var &lt;- subset(errdata, variable == obs_var)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if initial value is optimised</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.initials.optim &lt;- length(grep(paste(obs_var, ".*", "_0", sep=""), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Rate constants and IORE exponents are attributed to the source variable</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.k.optim &lt;- length(grep(paste("^k", obs_var, sep="_"), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.k.optim &lt;- n.k.optim + length(grep(paste("^log_k", obs_var, sep="_"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.k__iore.optim &lt;- length(grep(paste("^k__iore", obs_var, sep="_"), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.k__iore.optim &lt;- n.k__iore.optim + length(grep(paste("^log_k__iore",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs_var, sep = "_"), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.N.optim &lt;- length(grep(paste("^N", obs_var, sep="_"), names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.ff.optim &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Formation fractions are attributed to the target variable, so look</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # for source compartments with formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (source_var in fit$obs_vars) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">112543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.ff.source = length(grep(paste("^f", source_var, sep = "_"),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">112543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">112543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.paths.source = length(fit$mkinmod$spec[[source_var]]$to)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">112543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (target_var in fit$mkinmod$spec[[source_var]]$to) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">46296<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (obs_var == target_var) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">17974<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.ff.optim &lt;- n.ff.optim + n.ff.source/n.paths.source</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.optim &lt;- sum(n.initials.optim, n.k.optim, n.k__iore.optim, n.N.optim, n.ff.optim)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # FOMC, DFOP and HS parameters are only counted if we are looking at the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # first variable in the model which is always the source variable</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (obs_var == fit$obs_vars[[1]]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> special_parms = c("alpha", "log_alpha", "beta", "log_beta",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "k1", "log_k1", "k2", "log_k2",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "g", "g_ilr", "g_qlogis", "tb", "log_tb")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.optim &lt;- n.optim + length(intersect(special_parms, names(parms.optim)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Calculate and add a line to the dataframe holding the results</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin.tmp &lt;- kinerrmin(errdata.var, n.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">70783<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmin[obs_var, c("err.min", "n.optim", "df")] &lt;- errmin.tmp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">119</td>
+ <td class="coverage">53943<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(errmin)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/residuals.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Extract residuals from an mkinfit model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A \code{\link{mkinfit}} object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param standardized Should the residuals be standardized by dividing by the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' standard deviation obtained from the fitted error model?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mkinfit("DFOP", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' residuals(f)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' residuals(f, standardized = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">residuals.mkinfit &lt;- function(object, standardized = FALSE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">13</td>
+ <td class="coverage">2493<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- object$data[["residual"]]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">14</td>
+ <td class="coverage">2493<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (standardized) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">15</td>
+ <td class="coverage">2428<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "const") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">16</td>
+ <td class="coverage">543<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_fitted &lt;- object$errparms["sigma"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">18</td>
+ <td class="coverage">2428<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "obs") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">19</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_names = paste0("sigma_", object$data[["variable"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">20</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_fitted &lt;- object$errparms[sigma_names]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">2428<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$err_mod == "tc") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">1820<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_fitted &lt;- sigma_twocomp(object$data[["predicted"]],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">1820<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_low = object$errparms[1],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">1820<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rsd_high = object$errparms[2])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">2428<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res / sigma_fitted)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">65<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/AIC.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculate the AIC for a column of an mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Provides a convenient way to compare different kinetic models fitted to the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' same dataset.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats AIC BIC</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An object of class \code{\link{mmkin}}, containing only one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' column.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For compatibility with the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k As in the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return As in the generic method (a numeric value for single fits, or a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dataframe if there are several fits in the column).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{ # skip, as it takes &gt; 10 s on winbuilder</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mmkin(c("SFO", "FOMC", "DFOP"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' list("FOCUS A" = FOCUS_2006_A,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "FOCUS C" = FOCUS_2006_C), cores = 1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We get a warning because the FOMC model does not converge for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # FOCUS A dataset, as it is well described by SFO</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f["SFO", "FOCUS A"]) # We get a single number for a single fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f[["SFO", "FOCUS A"]]) # or when extracting an mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # For FOCUS A, the models fit almost equally well, so the higher the number</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # of parameters, the higher (worse) the AIC</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f[, "FOCUS A"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f[, "FOCUS A"], k = 0) # If we do not penalize additional parameters, we get nearly the same</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' BIC(f[, "FOCUS A"]) # Comparing the BIC gives a very similar picture</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # For FOCUS C, the more complex models fit better</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f[, "FOCUS C"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' BIC(f[, "FOCUS C"])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">AIC.mmkin &lt;- function(object, ..., k = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We can only handle a single column</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ncol(object) != 1) stop("Please provide a single column object")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- length(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_names &lt;- rownames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> code &lt;- paste0("AIC(",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("object[[", 1:n.fits, "]]", collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ", k = k)")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- eval(parse(text = code))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.fits &gt; 1) rownames(res) &lt;- model_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname AIC.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">BIC.mmkin &lt;- function(object, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # We can only handle a single column</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ncol(object) != 1) stop("Please provide a single column object")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.fits &lt;- length(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> model_names &lt;- rownames(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> code &lt;- paste0("BIC(",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste0("object[[", 1:n.fits, "]]", collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ")")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- eval(parse(text = code))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n.fits &gt; 1) rownames(res) &lt;- model_names</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">247<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/intervals.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom nlme intervals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nlme::intervals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Confidence intervals for parameters in saem.mmkin objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The fitted saem.mmkin object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param level The confidence level. Must be the default of 0.95 as this is what</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' is available in the saemix object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param backtransform In case the model was fitted with mkin transformations,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' should we backtransform the parameters where a one to one correlation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' between transformed and backtransformed parameters exists?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For compatibility with the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object with 'intervals.saem.mmkin' and 'intervals.lme' in the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' class attribute</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">intervals.saem.mmkin &lt;- function(object, level = 0.95, backtransform = TRUE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">19</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!identical(level, 0.95)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">20</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Confidence intervals are only available for a level of 95%")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(object$mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames &lt;- names(object$mean_dp_start)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Confidence intervals are available in the SaemixObject, so</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # we just need to extract them and put them into a list modelled</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # after the result of nlme::intervals.lme</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- object$so@results@conf.int</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(conf.int) &lt;- conf.int$name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(conf.int)[2] &lt;- "est."</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_trans &lt;- as.matrix(conf.int[pnames, c("lower", "est.", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Fixed effects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # In case objects were produced by earlier versions of saem</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">38</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object$transformations)) object$transformations &lt;- "mkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$transformations == "mkin" &amp; backtransform) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bp &lt;- backtransform_odeparms(confint_trans[, "est."], object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(bp)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform boundaries of CI for one parameter at a time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # with the exception of sets of formation fractions (single fractions are OK).</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names_skip &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) { # Figure out sets of fractions to skip</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">2396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- grep(paste("^f", box, sep = "_"), pnames, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">2396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_paths &lt;- length(f_names)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">51</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_paths &gt; 1) f_names_skip &lt;- c(f_names_skip, f_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back &lt;- matrix(NA, nrow = length(bp), ncol = 3,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(bpnames, colnames(confint_trans)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[, "est."] &lt;- bp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in pnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!pname %in% f_names_skip) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.lower &lt;- confint_trans[pname, "lower"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.upper &lt;- confint_trans[pname, "upper"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(par.lower) &lt;- names(par.upper) &lt;- pname</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">63</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpl &lt;- backtransform_odeparms(par.lower, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpu &lt;- backtransform_odeparms(par.upper, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpl), "lower"] &lt;- bpl</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">6314<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpu), "upper"] &lt;- bpu</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">2286<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_ret &lt;- confint_back</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">195<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_ret &lt;- confint_trans</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(confint_ret, "label") &lt;- "Fixed effects:"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Random effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">80</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sdnames &lt;- intersect(rownames(conf.int), paste("SD", pnames, sep = "."))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corrnames &lt;- grep("^Corr.", rownames(conf.int), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ranef_ret &lt;- as.matrix(conf.int[c(sdnames, corrnames), c("lower", "est.", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sdnames_ret &lt;- paste0(gsub("SD\\.", "sd(", sdnames), ")")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">84</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corrnames_ret &lt;- gsub("Corr\\.(.*)\\.(.*)", "corr(\\1,\\2)", corrnames)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(ranef_ret) &lt;- c(sdnames_ret, corrnames_ret)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(ranef_ret, "label") &lt;- "Random effects:"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Error model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> enames &lt;- if (object$err_mod == "const") "a.1" else c("a.1", "b.1")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_ret &lt;- as.matrix(conf.int[enames, c("lower", "est.", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res &lt;- list(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fixed = confint_ret,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> random = ranef_ret,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errmod = err_ret</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> )</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(res) &lt;- c("intervals.saemix.mmkin", "intervals.lme")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(res, "level") &lt;- level</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">2481<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(res)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/update.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Update an mkinfit model with different arguments</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function will return an updated mkinfit object. The fitted degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model parameters from the old fit are used as starting values for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' updated fit. Values specified as 'parms.ini' and/or 'state.ini' will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' override these starting values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An mkinfit object to be updated</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Arguments to \code{\link{mkinfit}} that should replace</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the arguments from the original call. Arguments set to NULL will</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' remove arguments given in the original call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param evaluate Should the call be evaluated or returned as a call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit("SFO", subset(FOCUS_2006_D, value != 0), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_err(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit_2 &lt;- update(fit, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms(fit_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_err(fit_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">update.mkinfit &lt;- function(object, ..., evaluate = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- object$call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments &lt;- match.call(expand.dots = FALSE)$...</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get optimised ODE parameters and let parms.ini override them</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_optim_names &lt;- intersect(names(object$bparms.optim), names(object$bparms.ode))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_start &lt;- object$bparms.optim[ode_optim_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ("parms.ini" %in% names(update_arguments)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">33</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ode_start[names(update_arguments["parms.ini"])] &lt;- update_arguments["parms.ini"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ode_start)) update_arguments[["parms.ini"]] &lt;- ode_start</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Get optimised values for initial states and let state.ini override them</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state_optim_names &lt;- intersect(names(object$bparms.optim), paste0(names(object$bparms.state), "_0"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state_start &lt;- object$bparms.optim[state_optim_names]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(state_start) &lt;- gsub("_0$", "", names(state_start))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ("state.ini" %in% names(update_arguments)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">42</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state_start[names(update_arguments["state.ini"])] &lt;- update_arguments["state.ini"]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(state_start)) update_arguments[["state.ini"]] &lt;- state_start</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(update_arguments) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_in_call &lt;- !is.na(match(names(update_arguments), names(call)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (a in names(update_arguments)[update_arguments_in_call]) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call[[a]] &lt;- update_arguments[[a]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> update_arguments_not_in_call &lt;- !update_arguments_in_call</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(any(update_arguments_not_in_call)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- c(as.list(call), update_arguments[update_arguments_not_in_call])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> call &lt;- as.call(call)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(evaluate) eval(call, parent.frame())</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">60</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else call</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/confint.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Confidence intervals for parameters of mkinfit objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The default method 'quadratic' is based on the quadratic approximation of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the curvature of the likelihood function at the maximum likelihood parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' estimates.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The alternative method 'profile' is based on the profile likelihood for each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameter. The 'profile' method uses two nested optimisations and can take a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' very long time, even if parallelized by specifying 'cores' on unixoid</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' platforms. The speed of the method could likely be improved by using the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' method of Venzon and Moolgavkar (1988).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An \code{\link{mkinfit}} object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parm A vector of names of the parameters which are to be given</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confidence intervals. If missing, all parameters are considered.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param level The confidence level required</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha The allowed error probability, overrides 'level' if specified.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cutoff Possibility to specify an alternative cutoff for the difference</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the log-likelihoods at the confidence boundary. Specifying an explicit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cutoff value overrides arguments 'level' and 'alpha'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param method The 'quadratic' method approximates the likelihood function at</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the optimised parameters using the second term of the Taylor expansion,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' using a second derivative (hessian) contained in the object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The 'profile' method searches the parameter space for the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cutoff of the confidence intervals by means of a likelihood ratio test.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param transformed If the quadratic approximation is used, should it be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' applied to the likelihood based on the transformed parameters?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param backtransform If we approximate the likelihood in terms of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformed parameters, should we backtransform the parameters with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' their confidence intervals?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rel_tol If the method is 'profile', what should be the accuracy</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of the lower and upper bounds, relative to the estimate obtained from</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the quadratic method?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param cores The number of cores to be used for multicore processing.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' On Windows machines, cores &gt; 1 is currently not supported.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param quiet Should we suppress the message "Profiling the likelihood"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A matrix with columns giving lower and upper confidence limits for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' each parameter.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats qnorm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Bates DM and Watts GW (1988) Nonlinear regression analysis &amp; its applications</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Pawitan Y (2013) In all likelihood - Statistical modelling and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' inference using likelihood. Clarendon Press, Oxford.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Venzon DJ and Moolgavkar SH (1988) A Method for Computing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Profile-Likelihood Based Confidence Intervals, Applied Statistics, 37,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 87–94.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f &lt;- mkinfit("SFO", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confint(f, method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confint(f, method = "profile")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Set the number of cores for the profiling method for further examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (identical(Sys.getenv("NOT_CRAN"), "true")) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n_cores &lt;- parallel::detectCores() - 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' } else {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n_cores &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (Sys.getenv("TRAVIS") != "") n_cores = 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (Sys.info()["sysname"] == "Windows") n_cores = 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO &lt;- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "min", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' SFO_SFO.ff &lt;- mkinmod(parent = mkinsub("SFO", "m1"), m1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_d_1 &lt;- mkinfit(SFO_SFO, subset(FOCUS_2006_D, value != 0), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' system.time(ci_profile &lt;- confint(f_d_1, method = "profile", cores = 1, quiet = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Using more cores does not save much time here, as parent_0 takes up most of the time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # If we additionally exclude parent_0 (the confidence of which is often of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # minor interest), we get a nice performance improvement if we use at least 4 cores</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' system.time(ci_profile_no_parent_0 &lt;- confint(f_d_1, method = "profile",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c("k_parent_sink", "k_parent_m1", "k_m1_sink", "sigma"), cores = n_cores))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_profile</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_transformed &lt;- confint(f_d_1, method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_transformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_untransformed &lt;- confint(f_d_1, method = "quadratic", transformed = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_untransformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Against the expectation based on Bates and Watts (1988), the confidence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # intervals based on the internal parameter transformation are less</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # congruent with the likelihood based intervals. Note the superiority of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # interval based on the untransformed fit for k_m1_sink</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed &lt;- abs((ci_quadratic_transformed - ci_profile)/ci_profile)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_untransformed &lt;- abs((ci_quadratic_untransformed - ci_profile)/ci_profile)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed &lt; rel_diffs_untransformed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' signif(rel_diffs_transformed, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' signif(rel_diffs_untransformed, 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Investigate a case with formation fractions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_d_2 &lt;- mkinfit(SFO_SFO.ff, subset(FOCUS_2006_D, value != 0), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_profile_ff &lt;- confint(f_d_2, method = "profile", cores = n_cores)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_profile_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_transformed_ff &lt;- confint(f_d_2, method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_transformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_untransformed_ff &lt;- confint(f_d_2, method = "quadratic", transformed = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ci_quadratic_untransformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed_ff &lt;- abs((ci_quadratic_transformed_ff - ci_profile_ff)/ci_profile_ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_untransformed_ff &lt;- abs((ci_quadratic_untransformed_ff - ci_profile_ff)/ci_profile_ff)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # While the confidence interval for the parent rate constant is closer to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # the profile based interval when using the internal parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # transformation, the interval for the metabolite rate constant is 'better</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # without internal parameter transformation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed_ff &lt; rel_diffs_untransformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_transformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rel_diffs_untransformed_ff</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The profiling for the following fit does not finish in a reasonable time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # therefore we use the quadratic approximation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_DFOP_par &lt;- mkinmod(parent = mkinsub("DFOP", c("M1", "M2")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = mkinsub("SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' use_of_ff = "max", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' DFOP_par_c &lt;- synthetic_data_for_UBA_2014[[12]]$data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_tc_2 &lt;- mkinfit(m_synth_DFOP_par, DFOP_par_c, error_model = "tc",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' error_model_algorithm = "direct", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confint(f_tc_2, method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' confint(f_tc_2, "parent_0", method = "quadratic")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">confint.mkinfit &lt;- function(object, parm,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> level = 0.95, alpha = 1 - level, cutoff,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method = c("quadratic", "profile"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> transformed = TRUE, backtransform = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cores = parallel::detectCores(), rel_tol = 0.01, quiet = FALSE, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tparms &lt;- parms(object, transformed = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bparms &lt;- parms(object, transformed = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tpnames &lt;- names(tparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(bparms)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_pnames &lt;- if (missing(parm)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (backtransform) bpnames else tpnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> p &lt;- length(return_pnames)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> method &lt;- match.arg(method)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> a &lt;- c(alpha / 2, 1 - (alpha / 2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> quantiles &lt;- qt(a, object$df.residual)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_pnames &lt;- if (missing(parm)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">420<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformed) tpnames else bpnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_parms &lt;- if (backtransform) bparms[return_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">155</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else tparms[return_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar_parms &lt;- if (transformed) tparms[covar_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else bparms[covar_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformed) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">840<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar &lt;- try(solve(object$hessian), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">420<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covar &lt;- try(solve(object$hessian_notrans), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # If inverting the covariance matrix failed or produced NA values</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.numeric(covar) | is.na(covar[1])) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">168</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ses &lt;- lci &lt;- uci &lt;- rep(NA, p)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">170</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ses &lt;- sqrt(diag(covar))[covar_pnames]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">171</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci &lt;- covar_parms + quantiles[1] * ses</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci &lt;- covar_parms + quantiles[2] * ses</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (transformed &amp; backtransform) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci_back &lt;- backtransform_odeparms(lci,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">175</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$mkinmod, object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci_back &lt;- backtransform_odeparms(uci,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$mkinmod, object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">178</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return_errparm_names &lt;- intersect(names(object$errparms), return_pnames)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">180</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci &lt;- c(lci_back, lci[return_errparm_names])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">630<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci &lt;- c(uci_back, uci[return_errparm_names])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">182</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">183</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ci &lt;- cbind(lower = lci, upper = uci)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">1260<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (method == "profile") {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ci_quadratic &lt;- ci</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!quiet) message("Profiling the likelihood")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci &lt;- uci &lt;- rep(NA, p)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">193</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(lci) &lt;- names(uci) &lt;- return_pnames</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> profile_pnames &lt;- if(missing(parm)) names(parms(object))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else parm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">198</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (missing(cutoff)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cutoff &lt;- 0.5 * qchisq(1 - alpha, 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">202</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> all_parms &lt;- parms(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> get_ci &lt;- function(pname) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames_free &lt;- setdiff(names(all_parms), pname)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> profile_ll &lt;- function(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">80<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pll_cost &lt;- function(P) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">209</td>
+ <td class="coverage">3132<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_cost &lt;- all_parms</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">3132<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_cost[pnames_free] &lt;- P[pnames_free]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">3132<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parms_cost[pname] &lt;- x</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">212</td>
+ <td class="coverage">3132<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> - object$ll(parms_cost)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">214</td>
+ <td class="coverage">80<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> - nlminb(all_parms[pnames_free], pll_cost)$objective</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cost &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">80<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (cutoff - (object$logLik - profile_ll(x)))^2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lower_quadratic &lt;- ci_quadratic["lower"][pname]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper_quadratic &lt;- ci_quadratic["upper"][pname]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">223</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ltol &lt;- if (!is.na(lower_quadratic)) rel_tol * lower_quadratic else .Machine$double.eps^0.25</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> utol &lt;- if (!is.na(upper_quadratic)) rel_tol * upper_quadratic else .Machine$double.eps^0.25</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lci_pname &lt;- optimize(cost, lower = 0, upper = all_parms[pname], tol = ltol)$minimum</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> uci_pname &lt;- optimize(cost, lower = all_parms[pname],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">227</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> upper = ifelse(grepl("^f_|^g$", pname), 1, 15 * all_parms[pname]),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tol = utol)$minimum</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(c(lci_pname, uci_pname))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">210<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ci &lt;- t(parallel::mcmapply(get_ci, profile_pnames, mc.cores = cores))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">234</td>
+ <td class="coverage">1257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(ci) &lt;- paste0(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">1257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> format(100 * a, trim = TRUE, scientific = FALSE, digits = 3), "%")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">1257<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(ci)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/set_nd_nq.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Set non-detects and unquantified values in residue series without replicates</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function automates replacing unquantified values in residue time and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' depth series. For time series, the function performs part of the residue</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' processing proposed in the FOCUS kinetics guidance for parent compounds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and metabolites. For two-dimensional residue series over time and depth,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' it automates the proposal of Boesten et al (2015).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param res_raw Character vector of a residue time series, or matrix of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' residue values with rows representing depth profiles for a specific sampling</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' time, and columns representing time series of residues at the same depth.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Values below the limit of detection (lod) have to be coded as "nd", values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' between the limit of detection and the limit of quantification, if any, have</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to be coded as "nq". Samples not analysed have to be coded as "na". All</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values that are not "na", "nd" or "nq" have to be coercible to numeric</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lod Limit of detection (numeric)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param loq Limit of quantification(numeric). Must be specified if the FOCUS rule to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' stop after the first non-detection is to be applied</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param time_zero_presence Do we assume that residues occur at time zero?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This only affects samples from the first sampling time that have been</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' reported as "nd" (not detected).</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Boesten, J. J. T. I., van der Linden, A. M. A., Beltman, W. H.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' J. and Pol, J. W. (2015). Leaching of plant protection products and their</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformation products; Proposals for improving the assessment of leaching</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to groundwater in the Netherlands — Version 2. Alterra report 2630, Alterra</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Wageningen UR (University &amp; Research centre)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references FOCUS (2014) Generic Guidance for Estimating Persistence and Degradation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Kinetics from Environmental Fate Studies on Pesticides in EU Registration, Version 1.1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 18 December 2014, p. 251</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A numeric vector, if a vector was supplied, or a numeric matrix otherwise</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # FOCUS (2014) p. 75/76 and 131/132</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent_1 &lt;- c(.12, .09, .05, .03, "nd", "nd", "nd", "nd", "nd", "nd")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(parent_1, 0.02)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent_2 &lt;- c(.12, .09, .05, .03, "nd", "nd", .03, "nd", "nd", "nd")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(parent_2, 0.02)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq_focus(parent_2, 0.02, loq = 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent_3 &lt;- c(.12, .09, .05, .03, "nd", "nd", .06, "nd", "nd", "nd")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(parent_3, 0.02)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq_focus(parent_3, 0.02, loq = 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' metabolite &lt;- c("nd", "nd", "nd", 0.03, 0.06, 0.10, 0.11, 0.10, 0.09, 0.05, 0.03, "nd", "nd")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(metabolite, 0.02)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq_focus(metabolite, 0.02, 0.05)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Boesten et al. (2015), p. 57/58</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' table_8 &lt;- matrix(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(10, 10, rep("nd", 4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 10, 10, rep("nq", 2), rep("nd", 2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 10, 10, 10, "nq", "nd", "nd",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "nq", 10, "nq", rep("nd", 3),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "nd", "nq", "nq", rep("nd", 3),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rep("nd", 6), rep("nd", 6)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ncol = 6, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(table_8, 0.5, 1.5, time_zero_presence = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' table_10 &lt;- matrix(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(10, 10, rep("nd", 4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 10, 10, rep("nd", 4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 10, 10, 10, rep("nd", 3),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "nd", 10, rep("nd", 4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' rep("nd", 18)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ncol = 6, byrow = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set_nd_nq(table_10, 0.5, time_zero_presence = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">set_nd_nq &lt;- function(res_raw, lod, loq = NA, time_zero_presence = FALSE) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.character(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">66</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply a vector or a matrix of character values")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">68</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.vector(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> was_vector &lt;- TRUE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">70</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw &lt;- as.matrix(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> was_vector &lt;- FALSE</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.matrix(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">74</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Please supply a vector or a matrix of character values")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nq &lt;- 0.5 * (loq + lod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">78</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nda &lt;- 0.5 * lod # not detected but adjacent to detection</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[res_raw == "nq"] &lt;- nq</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">81</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!time_zero_presence) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (j in 1:ncol(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">83</td>
+ <td class="coverage">3<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (res_raw[1, j] == "nd") res_raw[1, j] &lt;- "na"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[res_raw == "na"] &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> not_nd_na &lt;- function(value) !(grepl("nd", value) | is.na(value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:nrow(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">94<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (j in 1:ncol(res_raw)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">164<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(res_raw[i, j]) &amp;&amp; res_raw[i, j] == "nd") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">98<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i &gt; 1) { # check earlier sample in same layer</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">17<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (not_nd_na(res_raw[i - 1, j])) res_raw[i, j] &lt;- "nda"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">96</td>
+ <td class="coverage">98<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (i &lt; nrow(res_raw)) { # check later sample</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">97</td>
+ <td class="coverage">7<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (not_nd_na(res_raw[i + 1, j])) res_raw[i, j] &lt;- "nda"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">99</td>
+ <td class="coverage">98<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (j &gt; 1) { # check above sample at the same time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">9<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (not_nd_na(res_raw[i, j - 1])) res_raw[i, j] &lt;- "nda"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">98<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (j &lt; ncol(res_raw)) { # check sample below at the same time</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (not_nd_na(res_raw[i, j + 1])) res_raw[i, j] &lt;- "nda"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">107</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[res_raw == "nda"] &lt;- nda</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[res_raw == "nd"] &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- as.numeric(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">112</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(result) &lt;- dim(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">113</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames(result) &lt;- dimnames(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">114</td>
+ <td class="coverage">8<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (was_vector) result &lt;- as.vector(result)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">10<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @describeIn set_nd_nq Set non-detects in residue time series according to FOCUS rules</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param set_first_sample_nd Should the first sample be set to "first_sample_nd_value"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in case it is a non-detection?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param first_sample_nd_value Value to be used for the first sample if it is a non-detection</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param ignore_below_loq_after_first_nd Should we ignore values below the LOQ after the first</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' non-detection that occurs after the quantified values?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">set_nd_nq_focus &lt;- function(res_raw, lod, loq = NA,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> set_first_sample_nd = TRUE, first_sample_nd_value = 0,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ignore_below_loq_after_first_nd = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">129</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">130</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.vector(res_raw)) stop("FOCUS rules are only specified for one-dimensional time series")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">132</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ignore_below_loq_after_first_nd &amp; is.na(loq)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("You need to specify an LOQ")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n &lt;- length(res_raw)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (ignore_below_loq_after_first_nd) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 3:n) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">35<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!res_raw[i - 2] %in% c("na", "nd")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">21<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (res_raw[i - 1] == "nd") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_remaining &lt;- res_raw[i:n]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_remaining_unquantified &lt;- ifelse(res_remaining == "na", TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(res_remaining == "nd", TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(res_remaining == "nq", TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(suppressWarnings(as.numeric(res_remaining)) &lt; loq, TRUE, FALSE))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">146</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_remaining_numeric &lt;- suppressWarnings(as.numeric(res_remaining))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">147</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_remaining_below_loq &lt;- ifelse(res_remaining == "nq", TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">148</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ifelse(!is.na(res_remaining_numeric) &amp; res_remaining_numeric &lt; loq, TRUE, FALSE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">5<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (all(res_remaining_unquantified)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> res_raw[i:n] &lt;- ifelse(res_remaining_below_loq, "nd", res_remaining)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> result &lt;- set_nd_nq(res_raw, lod = lod, loq = loq)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (set_first_sample_nd) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (res_raw[1] == "nd") result[1] &lt;- first_sample_nd_value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">163</td>
+ <td class="coverage">4<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(result)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinparplot.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function to plot the confidence intervals obtained using mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function plots the confidence intervals for the parameters fitted using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A fit represented in an \code{\link{mkinfit}} object.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Nothing is returned by this function, as it is called for its side</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' effect, namely to produce a plot.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' T245 = mkinsub("SFO", to = c("phenol"), sink = FALSE),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' phenol = mkinsub("SFO", to = c("anisole")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anisole = mkinsub("SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit &lt;- mkinfit(model, subset(mccall81_245T, soil == "Commerce"), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinparplot(fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinparplot &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.optim = rownames(subset(object$start, type == "state"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> deparms.optim = rownames(subset(object$start, type == "deparm"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fractions.optim = grep("^f_", deparms.optim, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N.optim = grep("^N_", deparms.optim, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">26</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if ("g" %in% deparms.optim) fractions.optim &lt;- c("g", fractions.optim)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rates.optim.unsorted = setdiff(deparms.optim, union(fractions.optim, N.optim))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rates.optim &lt;- rownames(object$start[rates.optim.unsorted, ])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.plot &lt;- c(state.optim = length(state.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rates.optim = length(rates.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N.optim = length(N.optim),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fractions.optim = length(fractions.optim))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n.plot &lt;- n.plot[n.plot &gt; 0]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">35</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> layout(matrix(1:length(n.plot), ncol = 1), heights = n.plot + 1)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> s &lt;- summary(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpar &lt;- data.frame(t(s$bpar[, c("Estimate", "Lower", "Upper")]))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(mar = c(2.1, 2.1, 0.1, 2.1))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(cex = 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">43</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (type in names(n.plot)) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">44</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parnames &lt;- get(type)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">45</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> values &lt;- bpar[parnames]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">46</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> values_with_confints &lt;- data.frame(t(subset(data.frame(t(values)), !is.na("Lower"))))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">47</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = switch(type,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">48</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> state.optim = range(c(0, unlist(values)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">49</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.rm = TRUE, finite = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">50</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rates.optim = range(c(0, unlist(values)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">51</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.rm = TRUE, finite = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">52</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> N.optim = range(c(0, 1, unlist(values)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.rm = TRUE, finite = TRUE),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">54</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> fractions.optim = range(c(0, 1, unlist(values)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">55</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> na.rm = TRUE, finite = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">56</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parname_index &lt;- length(parnames):1 # Reverse order for strip chart</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">58</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stripchart(values["Estimate", ][parname_index],</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">59</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlim = xlim,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">60</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylim = c(0.5, length(get(type)) + 0.5),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">61</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> yaxt = "n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">62</td>
+ <td class="coverage">70<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type %in% c("rates.optim", "fractions.optim")) abline(v = 0, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">63</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (type %in% c("N.optim", "fractions.optim")) abline(v = 1, lty = 2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">64</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> position &lt;- ifelse(values["Estimate", ] &lt; mean(xlim), "right", "left")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">65</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> text(ifelse(position == "left", min(xlim), max(xlim)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">66</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parname_index, parnames,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">67</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pos = ifelse(position == "left", 4, 2))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">69</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> values.upper.nonInf &lt;- ifelse(values["Upper", ] == Inf, 1.5 * xlim[[2]], values["Upper", ])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Suppress warnings for non-existing arrow lengths</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> suppressWarnings(arrows(as.numeric(values["Lower", ]), parname_index,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">72</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> as.numeric(values.upper.nonInf), parname_index,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">73</td>
+ <td class="coverage">140<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> code = 3, angle = 90, length = 0.05))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/summary.saem.mmkin.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Summary method for class "saem.mmkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Lists model equations, initial parameter values, optimised parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for fixed effects (population), random effects (deviations from the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' population mean) and residual error model, as well as the resulting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints such as formation fractions and DT50 values. Optionally</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' (default is FALSE), the data are listed in full.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object an object of class [saem.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param x an object of class [summary.saem.mmkin]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param data logical, indicating whether the full data should be included in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param verbose Should the summary be verbose?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param distimes logical, indicating whether DT50 and DT90 values should be</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' included.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits Number of digits to use for printing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots optional arguments passed to methods like \code{print}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inheritParams endpoints</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The summary function returns a list based on the [saemix::SaemixObject]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' obtained in the fit, with at least the following additional components</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{saemixversion, mkinversion, Rversion}{The saemix, mkin and R versions used}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{date.fit, date.summary}{The dates where the fit and the summary were</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' produced}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{diffs}{The differential equations used in the degradation model}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{use_of_ff}{Was maximum or minimum use made of formation fractions}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{data}{The data}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_trans}{Transformed parameters as used in the optimisation, with confidence intervals}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_back}{Backtransformed parameters, with confidence intervals if available}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{confint_errmod}{Error model parameters with confidence intervals}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{ff}{The estimated formation fractions derived from the fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{distimes}{The DT50 and DT90 values for each observed variable.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \item{SFORB}{If applicable, eigenvalues of SFORB components of the model.}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The print method is called for its side effect, i.e. printing the summary.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats predict vcov</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke for the mkin specific parts</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' saemix authors for the parts inherited from saemix.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Generate five datasets following DFOP-SFO kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_sfo &lt;- mkinmod(parent = mkinsub("DFOP", "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO"), quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(1234)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k1_in &lt;- rlnorm(5, log(0.1), 0.3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k2_in &lt;- rlnorm(5, log(0.02), 0.3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' g_in &lt;- plogis(rnorm(5, qlogis(0.5), 0.3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_parent_to_m1_in &lt;- plogis(rnorm(5, qlogis(0.3), 0.3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_m1_in &lt;- rlnorm(5, log(0.02), 0.3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' pred_dfop_sfo &lt;- function(k1, k2, g, f_parent_to_m1, k_m1) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k1 = k1, k2 = k2, g = g, f_parent_to_m1 = f_parent_to_m1, k_m1 = k_m1),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_mean_dfop_sfo &lt;- lapply(1:5, function(i) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkinpredict(dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k1 = k1_in[i], k2 = k2_in[i], g = g_in[i],</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_parent_to_m1 = f_parent_to_m1_in[i], k_m1 = k_m1_in[i]),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, m1 = 0),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(ds_mean_dfop_sfo) &lt;- paste("ds", 1:5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ds_syn_dfop_sfo &lt;- lapply(ds_mean_dfop_sfo, function(ds) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' add_err(ds,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sdfunc = function(value) sqrt(1^2 + value^2 * 0.07^2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n = 1)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' })</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Evaluate using mmkin and saem</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mmkin_dfop_sfo &lt;- mmkin(list(dfop_sfo), ds_syn_dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE, error_model = "tc", cores = 5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo &lt;- saem(f_mmkin_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(f_saem_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_dfop_sfo)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo_2 &lt;- update(f_saem_dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' no_random_effect = c("parent_0", "log_k_m1"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' illparms(f_saem_dfop_sfo_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' intervals(f_saem_dfop_sfo_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(f_saem_dfop_sfo_2, data = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Add a correlation between random effects of g and k2</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cov_model_3 &lt;- f_saem_dfop_sfo_2$so@model@covariance.model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cov_model_3["log_k2", "g_qlogis"] &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' cov_model_3["g_qlogis", "log_k2"] &lt;- 1</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_saem_dfop_sfo_3 &lt;- update(f_saem_dfop_sfo,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' covariance.model = cov_model_3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' intervals(f_saem_dfop_sfo_3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The correlation does not improve the fit judged by AIC and BIC, although</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # the likelihood is higher with the additional parameter</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova(f_saem_dfop_sfo, f_saem_dfop_sfo_2, f_saem_dfop_sfo_3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">summary.saem.mmkin &lt;- function(object, data = FALSE, verbose = FALSE,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> covariates = NULL, covariate_quantile = 0.5,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> distimes = TRUE, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mod_vars &lt;- names(object$mkinmod$diffs)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> pnames &lt;- names(object$mean_dp_start)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names_fixed_effects &lt;- object$so@results@name.fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_fixed &lt;- length(names_fixed_effects)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> conf.int &lt;- object$so@results@conf.int</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> rownames(conf.int) &lt;- conf.int$name</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_trans &lt;- as.matrix(parms(object, ci = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">110</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(confint_trans)[1] &lt;- "est."</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # In case objects were produced by earlier versions of saem</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">113</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (is.null(object$transformations)) object$transformations &lt;- "mkin"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">115</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (object$transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">116</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bp &lt;- backtransform_odeparms(confint_trans[pnames, "est."], object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">117</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates, object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">118</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpnames &lt;- names(bp)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Transform boundaries of CI for one parameter at a time,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # with the exception of sets of formation fractions (single fractions are OK).</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">122</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names_skip &lt;- character(0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">123</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (box in mod_vars) { # Figure out sets of fractions to skip</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">124</td>
+ <td class="coverage">492<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> f_names &lt;- grep(paste("^f", box, sep = "_"), pnames, value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">125</td>
+ <td class="coverage">492<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n_paths &lt;- length(f_names)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">126</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (n_paths &gt; 1) f_names_skip &lt;- c(f_names_skip, f_names)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back &lt;- matrix(NA, nrow = length(bp), ncol = 3,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dimnames = list(bpnames, colnames(confint_trans)))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">131</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[, "est."] &lt;- bp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">133</td>
+ <td class="coverage">396<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (pname in pnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">134</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!pname %in% f_names_skip) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">135</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.lower &lt;- confint_trans[pname, "lower"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">136</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par.upper &lt;- confint_trans[pname, "upper"]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">137</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(par.lower) &lt;- names(par.upper) &lt;- pname</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">138</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpl &lt;- backtransform_odeparms(par.lower, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">139</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">140</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">141</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> bpu &lt;- backtransform_odeparms(par.upper, object$mkinmod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">142</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_rates,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">143</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$transform_fractions)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">144</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpl), "lower"] &lt;- bpl</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">145</td>
+ <td class="coverage">1291<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back[names(bpu), "upper"] &lt;- bpu</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">149</td>
+ <td class="coverage">404<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_back &lt;- confint_trans[names_fixed_effects, ]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">150</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">151</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">152</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Correlation of fixed effects (inspired by summary.nlme)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">153</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cov_so &lt;- try(solve(object$so@results@fim), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">154</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(cov_so, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">155</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$corFixed &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">157</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> varFix &lt;- cov_so[1:n_fixed, 1:n_fixed]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">158</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stdFix &lt;- sqrt(diag(varFix))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">159</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$corFixed &lt;- array(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">160</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> t(varFix/stdFix)/stdFix,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">161</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> dim(varFix),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">162</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> list(names_fixed_effects, names_fixed_effects))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Random effects</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">166</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sdnames &lt;- intersect(rownames(conf.int), paste0("SD.", pnames))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">167</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corrnames &lt;- grep("^Corr.", rownames(conf.int), value = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">168</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_ranef &lt;- as.matrix(conf.int[c(sdnames, corrnames), c("estimate", "lower", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">169</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(confint_ranef)[1] &lt;- "est."</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Error model</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">172</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> enames &lt;- if (object$err_mod == "const") "a.1" else c("a.1", "b.1")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">173</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> confint_errmod &lt;- as.matrix(conf.int[enames, c("estimate", "lower", "upper")])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">174</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames(confint_errmod)[1] &lt;- "est."</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">176</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_trans &lt;- confint_trans</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_ranef &lt;- confint_ranef</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_errmod &lt;- confint_errmod</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$confint_back &lt;- confint_back</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$date.summary = date()</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$use_of_ff = object$mkinmod$use_of_ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$error_model_algorithm = object$mmkin_orig[[1]]$error_model_algorithm</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">184</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> err_mod = object$mmkin_orig[[1]]$err_mod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">186</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$diffs &lt;- object$mkinmod$diffs</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">187</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$print_data &lt;- data # boolean: Should we print the data?</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">188</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> so_pred &lt;- object$so@results@predictions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">190</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(object$data)[4] &lt;- "observed" # rename value to observed</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">192</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$verbose &lt;- verbose</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">194</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$fixed &lt;- object$mmkin_orig[[1]]$fixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">195</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;-try(logLik(object$so, method = "is"), silent = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">196</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(ll, "try-error")) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">197</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$logLik &lt;- object$AIC &lt;- object $BIC &lt;- NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">199</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$logLik = logLik(object$so, method = "is")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">200</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$AIC = AIC(object$so)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">201</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$BIC = BIC(object$so)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">204</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ep &lt;- endpoints(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">205</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$covariates &lt;- ep$covariates</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">206</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$ff) != 0)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">207</td>
+ <td class="coverage">330<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object$ff &lt;- ep$ff</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">208</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (distimes) object$distimes &lt;- ep$distimes</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">209</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(ep$SFORB) != 0) object$SFORB &lt;- ep$SFORB</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">210</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(object) &lt;- c("summary.saem.mmkin")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">211</td>
+ <td class="coverage">800<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname summary.saem.mmkin</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">print.summary.saem.mmkin &lt;- function(x, digits = max(3, getOption("digits") - 3), verbose = x$verbose, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">217</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("saemix version used for fitting: ", x$saemixversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">218</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("mkin version used for pre-fitting: ", x$mkinversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">219</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("R version used for fitting: ", x$Rversion, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">221</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of fit: ", x$date.fit, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">222</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Date of summary:", x$date.summary, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">224</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEquations:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">225</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> nice_diffs &lt;- gsub("^(d.*) =", "\\1/dt =", x[["diffs"]])</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">226</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> writeLines(strwrap(nice_diffs, exdent = 11))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">228</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">229</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(nrow(x$data), "observations of",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">230</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$name)), "variable(s) grouped in",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">231</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> length(unique(x$data$ds)), "datasets\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">233</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nModel predictions using solution type", x$solution_type, "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">235</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFitted in", x$time[["elapsed"]], "s\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">236</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Using", paste(x$so@options$nbiter.saemix, collapse = ", "),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "iterations and", x$so@options$nb.chains, "chains\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">239</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nVariance model: ")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">240</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat(switch(x$err_mod,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">241</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> const = "Constant variance",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">242</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> obs = "Variance unique to each observed variable",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">243</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> tc = "Two-component variance function"), "\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">244</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">245</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for degradation parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">246</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$mean_dp_start, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">247</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">248</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nFixed degradation parameter values:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">249</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(length(x$fixed$value) == 0) cat("None\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">250</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else print(x$fixed, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">251</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">252</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for random effects (square root of initial entries in omega):\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">253</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(sqrt(x$so@model@omega.init), digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">254</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">255</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nStarting values for error model parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">256</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- x$so@model@error.init</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">257</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(errparms) &lt;- x$so@model@name.sigma</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">258</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> errparms &lt;- errparms[x$so@model@indx.res]</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">259</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(errparms, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">260</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">261</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResults:\n\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">262</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("Likelihood computed by importance sampling\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">263</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(AIC = x$AIC, BIC = x$BIC, logLik = x$logLik,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">264</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = " "), digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">265</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">266</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nOptimised parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">267</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_trans, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">268</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">269</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (identical(x$corFixed, NA)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">270</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nCorrelation is not available\n")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">271</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">272</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> corr &lt;- x$corFixed</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">273</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(corr) &lt;- "correlation"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">274</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(corr, title = "\nCorrelation:", rdig = digits, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">275</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">276</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">277</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nRandom effects:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">278</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_ranef, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">279</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">280</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nVariance model:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">281</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_errmod, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">282</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">283</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$transformations == "mkin") {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">284</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nBacktransformed parameters:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">285</td>
+ <td class="coverage">125<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$confint_back, digits = digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">286</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">287</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">288</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.null(x$covariates)) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">289</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nCovariates used for endpoints below:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">290</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$covariates)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">291</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">292</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">293</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printSFORB &lt;- !is.null(x$SFORB)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">294</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printSFORB){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">295</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated Eigenvalues of SFORB model(s):\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">296</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$SFORB, digits = digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">297</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">298</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">299</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printff &lt;- !is.null(x$ff)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">300</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printff){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">301</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nResulting formation fractions:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">302</td>
+ <td class="coverage">117<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(data.frame(ff = x$ff), digits = digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">303</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">304</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">305</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> printdistimes &lt;- !is.null(x$distimes)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">306</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if(printdistimes){</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">307</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nEstimated disappearance times:\n")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">308</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(x$distimes, digits = digits,...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">309</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">310</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">311</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (x$print_data){</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">312</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> cat("\nData:\n")</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">313</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> print(format(x$data, digits = digits, ...), row.names = FALSE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">314</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">315</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">316</td>
+ <td class="coverage">242<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> invisible(x)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">317</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkin_long_to_wide.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Convert a dataframe from long to wide format</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function takes a dataframe in the long form, i.e. with a row for each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed value, and converts it into a dataframe with one independent</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' variable and several dependent variables as columns.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param long_data The dataframe must contain one variable called "time" with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the time values specified by the \code{time} argument, one column called</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' "name" with the grouping of the observed values, and finally one column of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed values called "value".</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param time The name of the time variable in the long input data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param outtime The name of the time variable in the wide output data.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Dataframe in wide format.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkin_long_to_wide(FOCUS_2006_D)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export mkin_long_to_wide</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkin_long_to_wide &lt;- function(long_data, time = "time", outtime = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames &lt;- unique(long_data$name)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">23</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> wide_data &lt;- data.frame(time = subset(long_data, name == colnames[1], time))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> names(wide_data) &lt;- outtime</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (var in colnames) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">26</td>
+ <td class="coverage">741<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> wide_data[var] &lt;- subset(long_data, name == var, value)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">494<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(wide_data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/loftest.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Lack-of-fit test for models fitted to data with replicates</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This is a generic function with a method currently only defined for mkinfit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' objects. It fits an anova model to the data contained in the object and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' compares the likelihoods using the likelihood ratio test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link[lmtest]{lrtest.default}} from the lmtest package.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The anova model is interpreted as the simplest form of an mkinfit model,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' assuming only a constant variance about the means, but not enforcing any</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' structure of the means, so we have one model parameter for every mean</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' of replicate samples.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object A model object with a defined loftest method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Not used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">loftest &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">17</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> UseMethod("loftest")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname loftest</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats logLik lm dnorm coef</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso lrtest</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data &lt;- subset(synthetic_data_for_UBA_2014[[12]]$data, name == "parent")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_fit &lt;- mkinfit("SFO", test_data, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(sfo_fit) # We see a clear pattern in the residuals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(sfo_fit) # We have a clear lack of fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We try a different model (the one that was used to generate the data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_fit &lt;- mkinfit("DFOP", test_data, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(dfop_fit) # We don't see systematic deviations, but heteroscedastic residuals</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # therefore we should consider adapting the error model, although we have</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(dfop_fit) # no lack of fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This is the anova model used internally for the comparison</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova &lt;- test_data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova$time &lt;- as.factor(test_data_anova$time)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova_fit &lt;- lm(value ~ time, data = test_data_anova)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(anova_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' logLik(anova_fit) # We get the same likelihood and degrees of freedom</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_2 &lt;- synthetic_data_for_UBA_2014[[12]]$data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_SFO_lin &lt;- mkinmod(parent = list(type = "SFO", to = "M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = list(type = "SFO", to = "M2"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = list(type = "SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_lin_fit &lt;- mkinfit(m_synth_SFO_lin, test_data_2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(sfo_lin_fit) # not a good model, we try parallel formation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(sfo_lin_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_SFO_par &lt;- mkinmod(parent = list(type = "SFO", to = c("M1", "M2")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = list(type = "SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = list(type = "SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_par_fit &lt;- mkinfit(m_synth_SFO_par, test_data_2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(sfo_par_fit) # much better for metabolites</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(sfo_par_fit)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_synth_DFOP_par &lt;- mkinmod(parent = list(type = "DFOP", to = c("M1", "M2")),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = list(type = "SFO"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M2 = list(type = "SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dfop_par_fit &lt;- mkinfit(m_synth_DFOP_par, test_data_2, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(dfop_par_fit) # No visual lack of fit</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' loftest(dfop_par_fit) # no lack of fit found by the test</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' #</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The anova model used for comparison in the case of transformation products</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova_2 &lt;- dfop_par_fit$data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova_2$variable &lt;- as.factor(test_data_anova_2$variable)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' test_data_anova_2$time &lt;- as.factor(test_data_anova_2$time)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' anova_fit_2 &lt;- lm(observed ~ time:variable - 1, data = test_data_anova_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(anova_fit_2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">loftest.mkinfit &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">75</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name_function &lt;- function(x) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">76</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_name &lt;- paste(x$mkinmod$name, "with error model", x$err_mod)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (length(x$bparms.fixed) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">78</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_name &lt;- paste(object_name,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">79</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> "and fixed parameter(s)",</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">80</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> paste(names(x$bparms.fixed), collapse = ", "))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(object_name)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Check if we have replicates in the data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">86</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (max(aggregate(object$data$observed,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">87</td>
+ <td class="coverage">2<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> by = list(object$data$variable, object$data$time), length)$x) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("Not defined for fits to data without replicates")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">91</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_anova &lt;- object$data</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_anova$time &lt;- as.factor(data_anova$time)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">93</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data_anova$variable &lt;- as.factor(data_anova$variable)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">94</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (nlevels(data_anova$variable) == 1) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2 &lt;- lm(observed ~ time - 1, data = data_anova)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">97</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2 &lt;- lm(observed ~ variable:time - 1,</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">98</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> data = data_anova)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">101</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$mkinmod &lt;- list(name = "ANOVA")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">102</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$err_mod &lt;- "const"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sigma_mle &lt;- sqrt(sum(residuals(object_2)^2)/nobs(object_2))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">104</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$logLik &lt;- sum(dnorm(x = object_2$residuals,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">105</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> mean = 0, sd = sigma_mle, log = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">106</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$data &lt;- object$data # to make the nobs.mkinfit method work</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$bparms.optim &lt;- coef(object_2)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">108</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> object_2$errparms &lt;- 1 # We have estimated one error model parameter</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">109</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(object_2) &lt;- "mkinfit"</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">111</td>
+ <td class="coverage">1<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lmtest::lrtest.default(object_2, object, name = name_function)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/add_err.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Add normally distributed errors to simulated kinetic degradation data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Normally distributed errors are added to data predicted for a specific</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' degradation model using \code{\link{mkinpredict}}. The variance of the error</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' may depend on the predicted value and is specified as a standard deviation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param prediction A prediction from a kinetic model as produced by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinpredict}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param sdfunc A function taking the predicted value as its only argument and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' returning a standard deviation that should be used for generating the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' random error terms for this value.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param secondary The names of state variables that should have an initial</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' value of zero</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param n The number of datasets to be generated.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param LOD The limit of detection (LOD). Values that are below the LOD after</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' adding the random error will be set to NA.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param reps The number of replicates to be generated within the datasets.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param digits The number of digits to which the values will be rounded.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param seed The seed used for the generation of random numbers. If NA, the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' seed is not set.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats rnorm</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list of datasets compatible with \code{\link{mmkin}}, i.e. the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' components of the list are datasets compatible with \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Ranke J and Lehmann R (2015) To t-test or not to t-test, that is</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the question. XV Symposium on Pesticide Chemistry 2-4 September 2015,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Piacenza, Italy</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' https://jrwb.de/posters/piacenza_2015.pdf</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # The kinetic model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m_SFO_SFO &lt;- mkinmod(parent = mkinsub("SFO", "M1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' M1 = mkinsub("SFO"), use_of_ff = "max")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Generate a prediction for a specific set of parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # This is the prediction used for the "Type 2 datasets" on the Piacenza poster</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # from 2015</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_SFO &lt;- mkinpredict(m_SFO_SFO,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(k_parent = 0.1, f_parent_to_M1 = 0.5,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' k_M1 = log(2)/1000),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' c(parent = 100, M1 = 0),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Add an error term with a constant (independent of the value) standard deviation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # of 10, and generate three datasets</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_SFO_err &lt;- add_err(d_SFO_SFO, function(x) 10, n = 3, seed = 123456789 )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Name the datasets for nicer plotting</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' names(d_SFO_SFO_err) &lt;- paste("Dataset", 1:3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Name the model in the list of models (with only one member in this case) for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # nicer plotting later on. Be quiet and use only one core not to offend CRAN</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # checks</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_SFO_SFO &lt;- mmkin(list("SFO-SFO" = m_SFO_SFO),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_SFO_SFO_err, cores = 1,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_SFO_SFO)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # We would like to inspect the fit for dataset 3 more closely</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Using double brackets makes the returned object an mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # instead of a list of mkinfit objects, so plot.mkinfit is used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_SFO_SFO[[3]], show_residuals = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # If we use single brackets, we should give two indices (model and dataset),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # and plot.mmkin is used</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(f_SFO_SFO[1, 3])</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">71</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">add_err &lt;- function(prediction, sdfunc, secondary = c("M1", "M2"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n = 10, LOD = 0.1, reps = 2, digits = 1, seed = NA)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">77</td>
+ <td class="coverage">842<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!is.na(seed)) set.seed(seed)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">79</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> prediction &lt;- as.data.frame(prediction)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # The output of mkinpredict is in wide format</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">82</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_long = mkin_wide_to_long(prediction, time = "time")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set up the list to be returned</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">85</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_return = list()</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Generate datasets one by one in a loop</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">88</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> for (i in 1:n) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">89</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_rep = data.frame(lapply(d_long, rep, each = reps))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">90</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_rep$value = rnorm(length(d_rep$value), d_rep$value, sdfunc(d_rep$value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">92</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_rep[d_rep$time == 0 &amp; d_rep$name %in% secondary, "value"] &lt;- 0</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Set values below the LOD to NA</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">95</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_NA &lt;- transform(d_rep, value = ifelse(value &lt; LOD, NA, value))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Round the values for convenience</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">98</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_NA$value &lt;- round(d_NA$value, digits)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">100</td>
+ <td class="coverage">1712<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> d_return[[i]] &lt;- d_NA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">103</td>
+ <td class="coverage">862<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(d_return)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkin_wide_to_long.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">utils::globalVariables(c("name", "time", "value"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Convert a dataframe with observations over time into long format</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function simply takes a dataframe with one independent variable and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' several dependent variable and converts it into the long form as required by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param wide_data The dataframe must contain one variable with the time</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' values specified by the \code{time} argument and usually more than one</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' column of observed values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param time The name of the time variable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return Dataframe in long format as needed for \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @keywords manip</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' wide &lt;- data.frame(t = c(1,2,3), x = c(1,4,7), y = c(3,4,5))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' mkin_wide_to_long(wide)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' </pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkin_wide_to_long &lt;- function(wide_data, time = "t")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">24</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> wide_data &lt;- as.data.frame(wide_data)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">25</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> colnames &lt;- names(wide_data)</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">26</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (!(time %in% colnames)) stop("The data in wide format have to contain a variable named ", time, ".")</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">27</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> vars &lt;- subset(colnames, colnames != time)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> n &lt;- length(colnames) - 1</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> long_data &lt;- data.frame(</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">30</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> name = rep(vars, each = length(wide_data[[time]])),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> time = as.numeric(rep(wide_data[[time]], n)),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> value = as.numeric(unlist(wide_data[vars])),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> row.names = NULL)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">1127<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(long_data)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/parent_solutions.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Single First-Order kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing exponential decline from a defined starting value.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param t Time.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param parent_0 Starting value for the response variable at time zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k Kinetic rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The value of the response variable at time \code{t}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2014) \dQuote{Generic guidance for Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Version 1.1, 18 December 2014</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{plot(function(x) SFO.solution(x, 100, 3), 0, 2)}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">SFO.solution &lt;- function(t, parent_0, k)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">2338849<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = parent_0 * exp(-k * t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' First-Order Multi-Compartment kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing exponential decline from a defined starting value, with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a decreasing rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The form given here differs slightly from the original reference by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Gustafson and Holden (1990). The parameter \code{beta} corresponds to 1/beta</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' in the original equation.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param alpha Shape parameter determined by coefficient of variation of rate</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' constant values.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param beta Location parameter.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The solution of the FOMC kinetic model reduces to the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{SFO.solution}} for large values of \code{alpha} and \code{beta}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' with \eqn{k = \frac{\beta}{\alpha}}{k = beta/alpha}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2006) \dQuote{Guidance Document on Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EC Document Reference Sanco/10058/2005 version 2.0, 434 pp,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">53</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">55</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' FOCUS (2014) \dQuote{Generic guidance for Estimating Persistence</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">56</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and Degradation Kinetics from Environmental Fate Studies on Pesticides in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">57</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' EU Registration} Report of the FOCUS Work Group on Degradation Kinetics,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">58</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Version 1.1, 18 December 2014</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">59</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \url{http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">60</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">61</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Gustafson DI and Holden LR (1990) Nonlinear pesticide dissipation in soil:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">62</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' A new model based on spatial variability. \emph{Environmental Science and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">63</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Technology} \bold{24}, 1032-1038</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">64</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">65</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">66</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) FOMC.solution(x, 100, 10, 2), 0, 2, ylim = c(0, 100))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">67</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">68</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">69</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">FOMC.solution &lt;- function(t, parent_0, alpha, beta)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">70</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">71</td>
+ <td class="coverage">32626<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = parent_0 / (t/beta + 1)^alpha</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">72</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">73</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">74</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Indeterminate order rate equation kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">75</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">76</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing exponential decline from a defined starting value, with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">77</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' a concentration dependent rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">78</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">79</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">80</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">81</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k__iore Rate constant. Note that this depends on the concentration</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">82</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' units used.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">83</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param N Exponent describing the nonlinearity of the rate equation</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">84</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The solution of the IORE kinetic model reduces to the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">85</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{SFO.solution}} if N = 1. The parameters of the IORE model can</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">86</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' be transformed to equivalent parameters of the FOMC mode - see the NAFTA</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">87</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' guidance for details.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">88</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references NAFTA Technical Working Group on Pesticides (not dated) Guidance</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">89</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' for Evaluating and Calculating Degradation Kinetics in Environmental Media</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">90</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">91</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">92</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) IORE.solution(x, 100, 0.2, 1.3), 0, 2, ylim = c(0, 100))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">93</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">94</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.fomc &lt;- mkinfit("FOMC", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">95</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.iore &lt;- mkinfit("IORE", FOCUS_2006_C, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">96</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fit.iore.deS &lt;- mkinfit("IORE", FOCUS_2006_C, solution_type = "deSolve", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">97</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">98</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(data.frame(fit.fomc$par, fit.iore$par, fit.iore.deS$par,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">99</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' row.names = paste("model par", 1:4)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">100</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' print(rbind(fomc = endpoints(fit.fomc)$distimes, iore = endpoints(fit.iore)$distimes,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">101</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' iore.deS = endpoints(fit.iore)$distimes))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">102</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">103</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">104</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">105</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">IORE.solution &lt;- function(t, parent_0, k__iore, N)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">106</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">107</td>
+ <td class="coverage">42328<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = (parent_0^(1 - N) - (1 - N) * k__iore * t)^(1/(1 - N))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">108</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">109</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">110</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Double First-Order in Parallel kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">111</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">112</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing decline from a defined starting value using the sum of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">113</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' two exponential decline functions.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">114</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">115</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">116</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">117</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param t Time.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">118</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k1 First kinetic constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">119</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k2 Second kinetic constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">120</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param g Fraction of the starting value declining according to the first</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">121</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' kinetic constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">122</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">123</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">124</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) DFOP.solution(x, 100, 5, 0.5, 0.3), 0, 4, ylim = c(0,100))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">125</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">126</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">127</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">DFOP.solution &lt;- function(t, parent_0, k1, k2, g)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">128</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">129</td>
+ <td class="coverage">1904176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = g * parent_0 * exp(-k1 * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">130</td>
+ <td class="coverage">1904176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (1 - g) * parent_0 * exp(-k2 * t)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">131</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">132</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">133</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Hockey-Stick kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">134</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">135</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing two exponential decline functions with a break point</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">136</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' between them.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">137</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">138</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">139</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit DFOP.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">140</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param tb Break point. Before this time, exponential decline according to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">141</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{k1} is calculated, after this time, exponential decline proceeds</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">142</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' according to \code{k2}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">143</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">144</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">145</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) HS.solution(x, 100, 2, 0.3, 0.5), 0, 2, ylim=c(0,100))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">146</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">147</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">148</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">HS.solution &lt;- function(t, parent_0, k1, k2, tb)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">149</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">150</td>
+ <td class="coverage">22552<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = ifelse(t &lt;= tb,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">151</td>
+ <td class="coverage">22552<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_0 * exp(-k1 * t),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">152</td>
+ <td class="coverage">22552<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent_0 * exp(-k1 * tb) * exp(-k2 * (t - tb)))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">153</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">154</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">155</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Single First-Order Reversible Binding kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">156</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">157</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing the solution of the differential equations describing</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">158</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the kinetic model with first-order terms for a two-way transfer from a free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">159</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' to a bound fraction, and a first-order degradation term for the free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">160</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fraction. The initial condition is a defined amount in the free fraction</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">161</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and no substance in the bound fraction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">162</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">163</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">164</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">165</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k_12 Kinetic constant describing transfer from free to bound.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">166</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k_21 Kinetic constant describing transfer from bound to free.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">167</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k_1output Kinetic constant describing degradation of the free</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">168</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' fraction.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">169</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The value of the response variable, which is the sum of free and</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">170</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' bound fractions at time \code{t}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">171</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">172</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">173</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{plot(function(x) SFORB.solution(x, 100, 0.5, 2, 3), 0, 2)}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">174</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">175</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">176</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">SFORB.solution = function(t, parent_0, k_12, k_21, k_1output) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">177</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt_exp = sqrt(1/4 * (k_12 + k_21 + k_1output)^2 - k_1output * k_21)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">178</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b1 = 0.5 * (k_12 + k_21 + k_1output) + sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">179</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> b2 = 0.5 * (k_12 + k_21 + k_1output) - sqrt_exp</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">180</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">181</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = parent_0 *</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">182</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> (((k_12 + k_21 - b1)/(b2 - b1)) * exp(-b1 * t) +</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">183</td>
+ <td class="coverage">9240<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ((k_12 + k_21 - b2)/(b1 - b2)) * exp(-b2 * t))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">184</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">185</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">186</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Logistic kinetics</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">187</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">188</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing exponential decline from a defined starting value, with</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">189</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' an increasing rate constant, supposedly caused by microbial growth</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">190</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">191</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @family parent solutions</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">192</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @inherit SFO.solution</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">193</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param kmax Maximum rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">194</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param k0 Minimum rate constant effective at time zero.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">195</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param r Growth rate of the increase in the rate constant.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">196</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @note The solution of the logistic model reduces to the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">197</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{SFO.solution}} if \code{k0} is equal to \code{kmax}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">198</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">199</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">200</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Reproduce the plot on page 57 of FOCUS (2014)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">201</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">202</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, ylim = c(0, 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">203</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' xlab = "Time", ylab = "Residue")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">204</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.4),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">205</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, add = TRUE, lty = 2, col = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">206</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.8),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">207</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, add = TRUE, lty = 3, col = 3)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">208</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.001, 0.2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">209</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, add = TRUE, lty = 4, col = 4)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">210</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot(function(x) logistic.solution(x, 100, 0.08, 0.08, 0.2),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">211</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' from = 0, to = 100, add = TRUE, lty = 5, col = 5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">212</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' legend("topright", inset = 0.05,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">213</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' legend = paste0("k0 = ", c(0.0001, 0.0001, 0.0001, 0.001, 0.08),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">214</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' ", r = ", c(0.2, 0.4, 0.8, 0.2, 0.2)),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">215</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' lty = 1:5, col = 1:5)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">216</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">217</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' # Fit with synthetic data</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">218</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' logistic &lt;- mkinmod(parent = mkinsub("logistic"))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">219</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">220</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">221</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms_logistic &lt;- c(kmax = 0.08, k0 = 0.0001, r = 0.2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">222</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_logistic &lt;- mkinpredict(logistic,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">223</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parms_logistic, c(parent = 100),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">224</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sampling_times)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">225</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_2_1 &lt;- add_err(d_logistic,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">226</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sdfunc = function(x) sigma_twocomp(x, 0.5, 0.07),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">227</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' n = 1, reps = 2, digits = 5, LOD = 0.1, seed = 123456)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">228</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">229</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m &lt;- mkinfit("logistic", d_2_1, quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">230</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_sep(m)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">231</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' summary(m)$bpar</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">232</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' endpoints(m)$distimes</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">233</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">234</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">235</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">logistic.solution &lt;- function(t, parent_0, kmax, k0, r)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">236</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">237</td>
+ <td class="coverage">56304<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> parent = parent_0 * (kmax / (kmax - k0 + k0 * exp (r * t))) ^(kmax/r)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">238</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/llhist.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Plot the distribution of log likelihoods from multistart objects</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Produces a histogram of log-likelihoods. In addition, the likelihood of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' original fit is shown as a red vertical line.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object The [multistart] object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param breaks Passed to [hist]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param lpos Positioning of the legend.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param main Title of the plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots Passed to [hist]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso [multistart]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">llhist &lt;- function(object, breaks = "Sturges", lpos = "topleft", main = "",</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">16</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> oldpar &lt;- par(no.readonly = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">17</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> on.exit(par(oldpar, no.readonly = TRUE))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">19</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object, "multistart.saem.mmkin")) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">20</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> llfunc &lt;- function(object) {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">21</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> if (inherits(object$so, "try-error")) return(NA)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">22</td>
+ <td class="coverage">1408<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> else return(logLik(object$so))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> } else {</pre>
+ </td>
+ </tr>
+ <tr class="missed">
+ <td class="num">25</td>
+ <td class="coverage">!</td>
+ <td class="col-sm-12">
+ <pre class="language-r"> stop("llhist is only implemented for multistart.saem.mmkin objects")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">28</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll_orig &lt;- logLik(attr(object, "orig"))</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">29</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ll &lt;- stats::na.omit(sapply(object, llfunc))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">31</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> par(las = 1)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">32</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> h &lt;- hist(ll, freq = TRUE,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">33</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> xlab = "", main = main,</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">34</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> ylab = "Frequency of log likelihoods", breaks = breaks, ...)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">36</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> freq_factor &lt;- h$counts[1] / h$density[1]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">38</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> abline(v = ll_orig, col = 2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"></pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend(lpos, inset = c(0.05, 0.05), bty = "n",</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> lty = 1, col = c(2),</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">176<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> legend = "original fit")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/logLik.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Calculated the log-likelihood of a fitted mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This function returns the product of the likelihood densities of each</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed value, as calculated as part of the fitting procedure using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{dnorm}}, i.e. assuming normal distribution, and with the means</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' predicted by the degradation model, and the standard deviations predicted by</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the error model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' The total number of estimated parameters returned with the value of the</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' likelihood is calculated as the sum of fitted degradation model parameters</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' and the fitted error model parameters.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An object of class \code{\link{mkinfit}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For compatibility with the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return An object of class \code{\link{logLik}} with the number of estimated</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parameters (degradation model parameters plus variance model parameters)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' as attribute.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @author Johannes Ranke</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @seealso Compare the AIC of columns of \code{\link{mmkin}} objects using</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \code{\link{AIC.mmkin}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \dontrun{</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sfo_sfo &lt;- mkinmod(</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' parent = mkinsub("SFO", to = "m1"),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' m1 = mkinsub("SFO")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' )</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_t &lt;- subset(FOCUS_2006_D, value != 0)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nw &lt;- mkinfit(sfo_sfo, d_t, quiet = TRUE) # no weighting (weights are unity)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_obs &lt;- update(f_nw, error_model = "obs")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_tc &lt;- update(f_nw, error_model = "tc")</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f_nw, f_obs, f_tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">logLik.mkinfit &lt;- function(object, ...) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">37</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> val &lt;- object$logLik</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> # Number of estimated parameters</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">39</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(val, "df") &lt;- length(object$bparms.optim) + length(object$errparms)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">40</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> attr(val, "nobs") &lt;- nobs(object)</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">41</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> class(val) &lt;- "logLik"</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">42</td>
+ <td class="coverage">166798<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(val)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/nobs.mkinfit.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Number of observations on which an mkinfit object was fitted</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @importFrom stats nobs</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param object An mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param \dots For compatibility with the generic method</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The number of rows in the data included in the mkinfit object</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">8</td>
+ <td class="coverage">166810<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r">nobs.mkinfit &lt;- function(object, ...) nrow(object$data)</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/sigma_twocomp.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Two-component error model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Function describing the standard deviation of the measurement error in</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' dependence of the measured value \eqn{y}:</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \deqn{\sigma = \sqrt{ \sigma_{low}^2 + y^2 * {rsd}_{high}^2}} sigma =</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' sqrt(sigma_low^2 + y^2 * rsd_high^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' This is the error model used for example by Werner et al. (1978). The model</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' proposed by Rocke and Lorenzato (1995) can be written in this form as well,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' but assumes approximate lognormal distribution of errors for high values of</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' y.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param y The magnitude of the observed value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param sigma_low The asymptotic minimum of the standard deviation for low</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">16</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' observed values</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param rsd_high The coefficient describing the increase of the standard</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">18</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' deviation with the magnitude of the observed value</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">19</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return The standard deviation of the response variable.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">20</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @references Werner, Mario, Brooks, Samuel H., and Knott, Lancaster B. (1978)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">21</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Additive, Multiplicative, and Mixed Analytical Errors. Clinical Chemistry</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">22</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' 24(11), 1895-1898.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">23</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">24</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Rocke, David M. and Lorenzato, Stefan (1995) A two-component model for</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">25</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' measurement error in analytical chemistry. Technometrics 37(2), 176-184.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">26</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">27</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Ranke J and Meinecke S (2019) Error Models for the Kinetic Evaluation of Chemical</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">28</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' Degradation Data. *Environments* 6(12) 124</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">29</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' \doi{10.3390/environments6120124}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">30</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#'</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">31</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @examples</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">32</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' times &lt;- c(0, 1, 3, 7, 14, 28, 60, 90, 120)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">33</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_pred &lt;- data.frame(time = times, parent = 100 * exp(- 0.03 * times))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">34</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' set.seed(123456)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">35</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' d_syn &lt;- add_err(d_pred, function(y) sigma_twocomp(y, 1, 0.07),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">36</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' reps = 2, n = 1)[[1]]</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">37</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_nls &lt;- nls(value ~ SSasymp(time, 0, parent_0, lrc), data = d_syn,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">38</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' start = list(parent_0 = 100, lrc = -3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">39</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' library(nlme)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">40</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_gnls &lt;- gnls(value ~ SSasymp(time, 0, parent_0, lrc),</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">41</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' data = d_syn, na.action = na.omit,</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">42</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' start = list(parent_0 = 100, lrc = -3))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">43</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' if (length(findFunction("varConstProp")) &gt; 0) {</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">44</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_gnls_tc &lt;- update(f_gnls, weights = varConstProp())</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">45</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_gnls_tc_sf &lt;- update(f_gnls_tc, control = list(sigma = 1))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">46</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' }</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">47</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mkin &lt;- mkinfit("SFO", d_syn, error_model = "const", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">48</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' f_mkin_tc &lt;- mkinfit("SFO", d_syn, error_model = "tc", quiet = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">49</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' plot_res(f_mkin_tc, standardized = TRUE)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">50</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' AIC(f_nls, f_gnls, f_gnls_tc, f_gnls_tc_sf, f_mkin, f_mkin_tc)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">51</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">52</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">sigma_twocomp &lt;- function(y, sigma_low, rsd_high) {</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">53</td>
+ <td class="coverage">4250<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> sqrt(sigma_low^2 + y^2 * rsd_high^2)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">54</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div id="R/mkinsub.R" class="hidden">
+ <table class="table-condensed">
+ <tbody>
+ <tr class="never">
+ <td class="num">1</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @rdname mkinmod</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">2</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param submodel Character vector of length one to specify the submodel type.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">3</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' See \code{\link{mkinmod}} for the list of allowed submodel names.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">4</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param to Vector of the names of the state variable to which a</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">5</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' transformation shall be included in the model.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">6</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param sink Should a pathway to sink be included in the model in addition to</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">7</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' the pathways to other state variables?</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">8</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @param full_name An optional name to be used e.g. for plotting fits</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">9</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' performed with the model. You can use non-ASCII characters here, but then</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">10</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' your R code will not be portable, \emph{i.e.} may produce unintended plot</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">11</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' results on other operating systems or system configurations.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">12</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @return A list for use with \code{\link{mkinmod}}.</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">13</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">#' @export</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">14</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">mkinsub &lt;- function(submodel, to = NULL, sink = TRUE, full_name = NA)</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">15</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">{</pre>
+ </td>
+ </tr>
+ <tr class="covered">
+ <td class="num">16</td>
+ <td class="coverage">9864<em>x</em></td>
+ <td class="col-sm-12">
+ <pre class="language-r"> return(list(type = submodel, to = to, sink = sink, full_name = full_name))</pre>
+ </td>
+ </tr>
+ <tr class="never">
+ <td class="num">17</td>
+ <td class="coverage"></td>
+ <td class="col-sm-12">
+ <pre class="language-r">}</pre>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <script>$('div#files pre').each(function(i, block) {
+ hljs.highlightBlock(block);
+});</script>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+</body>
+</html>
diff --git a/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap-theme.min.css b/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap-theme.min.css
new file mode 100644
index 00000000..61358b13
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap-theme.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file
diff --git a/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap.min.css b/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap.min.css
new file mode 100644
index 00000000..9dc0f978
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/css/bootstrap.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
diff --git a/docs/coverage/lib/bootstrap-3.3.5/js/bootstrap.min.js b/docs/coverage/lib/bootstrap-3.3.5/js/bootstrap.min.js
new file mode 100644
index 00000000..133aeecb
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/js/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),
+d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/docs/coverage/lib/bootstrap-3.3.5/shim/html5shiv.min.js b/docs/coverage/lib/bootstrap-3.3.5/shim/html5shiv.min.js
new file mode 100644
index 00000000..36831143
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/shim/html5shiv.min.js
@@ -0,0 +1,7 @@
+/**
+* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+// Only run this code in IE 8
+if (!!window.navigator.userAgent.match("MSIE 8")) {
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
+};
diff --git a/docs/coverage/lib/bootstrap-3.3.5/shim/respond.min.js b/docs/coverage/lib/bootstrap-3.3.5/shim/respond.min.js
new file mode 100644
index 00000000..22094690
--- /dev/null
+++ b/docs/coverage/lib/bootstrap-3.3.5/shim/respond.min.js
@@ -0,0 +1,8 @@
+/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
+ * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
+ * */
+
+// Only run this code in IE 8
+if (!!window.navigator.userAgent.match("MSIE 8")) {
+!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
+};
diff --git a/docs/coverage/lib/crosstalk-1.2.1/css/crosstalk.min.css b/docs/coverage/lib/crosstalk-1.2.1/css/crosstalk.min.css
new file mode 100644
index 00000000..6b453828
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/css/crosstalk.min.css
@@ -0,0 +1 @@
+.container-fluid.crosstalk-bscols{margin-left:-30px;margin-right:-30px;white-space:normal}body>.container-fluid.crosstalk-bscols{margin-left:auto;margin-right:auto}.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column{display:inline-block;padding-right:12px;vertical-align:top}@media only screen and (max-width: 480px){.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column{display:block;padding-right:inherit}}.crosstalk-input{margin-bottom:15px}.crosstalk-input .control-label{margin-bottom:0;vertical-align:middle}.crosstalk-input input[type="checkbox"]{margin:4px 0 0;margin-top:1px;line-height:normal}.crosstalk-input .checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.crosstalk-input .checkbox>label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.crosstalk-input .checkbox input[type="checkbox"],.crosstalk-input .checkbox-inline input[type="checkbox"]{position:absolute;margin-top:2px;margin-left:-20px}.crosstalk-input .checkbox+.checkbox{margin-top:-5px}.crosstalk-input .checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.crosstalk-input .checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}
diff --git a/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js
new file mode 100644
index 00000000..fd9eb53d
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js
@@ -0,0 +1,1474 @@
+(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Events = function () {
+ function Events() {
+ _classCallCheck(this, Events);
+
+ this._types = {};
+ this._seq = 0;
+ }
+
+ _createClass(Events, [{
+ key: "on",
+ value: function on(eventType, listener) {
+ var subs = this._types[eventType];
+ if (!subs) {
+ subs = this._types[eventType] = {};
+ }
+ var sub = "sub" + this._seq++;
+ subs[sub] = listener;
+ return sub;
+ }
+
+ // Returns false if no match, or string for sub name if matched
+
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ var subs = this._types[eventType];
+ if (typeof listener === "function") {
+ for (var key in subs) {
+ if (subs.hasOwnProperty(key)) {
+ if (subs[key] === listener) {
+ delete subs[key];
+ return key;
+ }
+ }
+ }
+ return false;
+ } else if (typeof listener === "string") {
+ if (subs && subs[listener]) {
+ delete subs[listener];
+ return listener;
+ }
+ return false;
+ } else {
+ throw new Error("Unexpected type for listener");
+ }
+ }
+ }, {
+ key: "trigger",
+ value: function trigger(eventType, arg, thisObj) {
+ var subs = this._types[eventType];
+ for (var key in subs) {
+ if (subs.hasOwnProperty(key)) {
+ subs[key].call(thisObj, arg);
+ }
+ }
+ }
+ }]);
+
+ return Events;
+}();
+
+exports.default = Events;
+
+},{}],2:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.FilterHandle = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _events = require("./events");
+
+var _events2 = _interopRequireDefault(_events);
+
+var _filterset = require("./filterset");
+
+var _filterset2 = _interopRequireDefault(_filterset);
+
+var _group = require("./group");
+
+var _group2 = _interopRequireDefault(_group);
+
+var _util = require("./util");
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function getFilterSet(group) {
+ var fsVar = group.var("filterset");
+ var result = fsVar.get();
+ if (!result) {
+ result = new _filterset2.default();
+ fsVar.set(result);
+ }
+ return result;
+}
+
+var id = 1;
+function nextId() {
+ return id++;
+}
+
+/**
+ * Use this class to contribute to, and listen for changes to, the filter set
+ * for the given group of widgets. Filter input controls should create one
+ * `FilterHandle` and only call {@link FilterHandle#set}. Output widgets that
+ * wish to displayed filtered data should create one `FilterHandle` and use
+ * the {@link FilterHandle#filteredKeys} property and listen for change
+ * events.
+ *
+ * If two (or more) `FilterHandle` instances in the same webpage share the
+ * same group name, they will contribute to a single "filter set". Each
+ * `FilterHandle` starts out with a `null` value, which means they take
+ * nothing away from the set of data that should be shown. To make a
+ * `FilterHandle` actually remove data from the filter set, set its value to
+ * an array of keys which should be displayed. Crosstalk will aggregate the
+ * various key arrays by finding their intersection; only keys that are
+ * present in all non-null filter handles are considered part of the filter
+ * set.
+ *
+ * @param {string} [group] - The name of the Crosstalk group, or if none,
+ * null or undefined (or any other falsy value). This can be changed later
+ * via the {@link FilterHandle#setGroup} method.
+ * @param {Object} [extraInfo] - An object whose properties will be copied to
+ * the event object whenever an event is emitted.
+ */
+
+var FilterHandle = exports.FilterHandle = function () {
+ function FilterHandle(group, extraInfo) {
+ _classCallCheck(this, FilterHandle);
+
+ this._eventRelay = new _events2.default();
+ this._emitter = new util.SubscriptionTracker(this._eventRelay);
+
+ // Name of the group we're currently tracking, if any. Can change over time.
+ this._group = null;
+ // The filterSet that we're tracking, if any. Can change over time.
+ this._filterSet = null;
+ // The Var we're currently tracking, if any. Can change over time.
+ this._filterVar = null;
+ // The event handler subscription we currently have on var.on("change").
+ this._varOnChangeSub = null;
+
+ this._extraInfo = util.extend({ sender: this }, extraInfo);
+
+ this._id = "filter" + nextId();
+
+ this.setGroup(group);
+ }
+
+ /**
+ * Changes the Crosstalk group membership of this FilterHandle. If `set()` was
+ * previously called on this handle, switching groups will clear those keys
+ * from the old group's filter set. These keys will not be applied to the new
+ * group's filter set either. In other words, `setGroup()` effectively calls
+ * `clear()` before switching groups.
+ *
+ * @param {string} group - The name of the Crosstalk group, or null (or
+ * undefined) to clear the group.
+ */
+
+
+ _createClass(FilterHandle, [{
+ key: "setGroup",
+ value: function setGroup(group) {
+ var _this = this;
+
+ // If group is unchanged, do nothing
+ if (this._group === group) return;
+ // Treat null, undefined, and other falsy values the same
+ if (!this._group && !group) return;
+
+ if (this._filterVar) {
+ this._filterVar.off("change", this._varOnChangeSub);
+ this.clear();
+ this._varOnChangeSub = null;
+ this._filterVar = null;
+ this._filterSet = null;
+ }
+
+ this._group = group;
+
+ if (group) {
+ group = (0, _group2.default)(group);
+ this._filterSet = getFilterSet(group);
+ this._filterVar = (0, _group2.default)(group).var("filter");
+ var sub = this._filterVar.on("change", function (e) {
+ _this._eventRelay.trigger("change", e, _this);
+ });
+ this._varOnChangeSub = sub;
+ }
+ }
+
+ /**
+ * Combine the given `extraInfo` (if any) with the handle's default
+ * `_extraInfo` (if any).
+ * @private
+ */
+
+ }, {
+ key: "_mergeExtraInfo",
+ value: function _mergeExtraInfo(extraInfo) {
+ return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null);
+ }
+
+ /**
+ * Close the handle. This clears this handle's contribution to the filter set,
+ * and unsubscribes all event listeners.
+ */
+
+ }, {
+ key: "close",
+ value: function close() {
+ this._emitter.removeAllListeners();
+ this.clear();
+ this.setGroup(null);
+ }
+
+ /**
+ * Clear this handle's contribution to the filter set.
+ *
+ * @param {Object} [extraInfo] - Extra properties to be included on the event
+ * object that's passed to listeners (in addition to any options that were
+ * passed into the `FilterHandle` constructor).
+ *
+ * @fires FilterHandle#change
+ */
+
+ }, {
+ key: "clear",
+ value: function clear(extraInfo) {
+ if (!this._filterSet) return;
+ this._filterSet.clear(this._id);
+ this._onChange(extraInfo);
+ }
+
+ /**
+ * Set this handle's contribution to the filter set. This array should consist
+ * of the keys of the rows that _should_ be displayed; any keys that are not
+ * present in the array will be considered _filtered out_. Note that multiple
+ * `FilterHandle` instances in the group may each contribute an array of keys,
+ * and only those keys that appear in _all_ of the arrays make it through the
+ * filter.
+ *
+ * @param {string[]} keys - Empty array, or array of keys. To clear the
+ * filter, don't pass an empty array; instead, use the
+ * {@link FilterHandle#clear} method.
+ * @param {Object} [extraInfo] - Extra properties to be included on the event
+ * object that's passed to listeners (in addition to any options that were
+ * passed into the `FilterHandle` constructor).
+ *
+ * @fires FilterHandle#change
+ */
+
+ }, {
+ key: "set",
+ value: function set(keys, extraInfo) {
+ if (!this._filterSet) return;
+ this._filterSet.update(this._id, keys);
+ this._onChange(extraInfo);
+ }
+
+ /**
+ * @return {string[]|null} - Either: 1) an array of keys that made it through
+ * all of the `FilterHandle` instances, or, 2) `null`, which means no filter
+ * is being applied (all data should be displayed).
+ */
+
+ }, {
+ key: "on",
+
+
+ /**
+ * Subscribe to events on this `FilterHandle`.
+ *
+ * @param {string} eventType - Indicates the type of events to listen to.
+ * Currently, only `"change"` is supported.
+ * @param {FilterHandle~listener} listener - The callback function that
+ * will be invoked when the event occurs.
+ * @return {string} - A token to pass to {@link FilterHandle#off} to cancel
+ * this subscription.
+ */
+ value: function on(eventType, listener) {
+ return this._emitter.on(eventType, listener);
+ }
+
+ /**
+ * Cancel event subscriptions created by {@link FilterHandle#on}.
+ *
+ * @param {string} eventType - The type of event to unsubscribe.
+ * @param {string|FilterHandle~listener} listener - Either the callback
+ * function previously passed into {@link FilterHandle#on}, or the
+ * string that was returned from {@link FilterHandle#on}.
+ */
+
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ return this._emitter.off(eventType, listener);
+ }
+ }, {
+ key: "_onChange",
+ value: function _onChange(extraInfo) {
+ if (!this._filterSet) return;
+ this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));
+ }
+
+ /**
+ * @callback FilterHandle~listener
+ * @param {Object} event - An object containing details of the event. For
+ * `"change"` events, this includes the properties `value` (the new
+ * value of the filter set, or `null` if no filter set is active),
+ * `oldValue` (the previous value of the filter set), and `sender` (the
+ * `FilterHandle` instance that made the change).
+ */
+
+ }, {
+ key: "filteredKeys",
+ get: function get() {
+ return this._filterSet ? this._filterSet.value : null;
+ }
+ }]);
+
+ return FilterHandle;
+}();
+
+/**
+ * @event FilterHandle#change
+ * @type {object}
+ * @property {object} value - The new value of the filter set, or `null`
+ * if no filter set is active.
+ * @property {object} oldValue - The previous value of the filter set.
+ * @property {FilterHandle} sender - The `FilterHandle` instance that
+ * changed the value.
+ */
+
+},{"./events":1,"./filterset":3,"./group":4,"./util":11}],3:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _util = require("./util");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function naturalComparator(a, b) {
+ if (a === b) {
+ return 0;
+ } else if (a < b) {
+ return -1;
+ } else if (a > b) {
+ return 1;
+ }
+}
+
+/**
+ * @private
+ */
+
+var FilterSet = function () {
+ function FilterSet() {
+ _classCallCheck(this, FilterSet);
+
+ this.reset();
+ }
+
+ _createClass(FilterSet, [{
+ key: "reset",
+ value: function reset() {
+ // Key: handle ID, Value: array of selected keys, or null
+ this._handles = {};
+ // Key: key string, Value: count of handles that include it
+ this._keys = {};
+ this._value = null;
+ this._activeHandles = 0;
+ }
+ }, {
+ key: "update",
+ value: function update(handleId, keys) {
+ if (keys !== null) {
+ keys = keys.slice(0); // clone before sorting
+ keys.sort(naturalComparator);
+ }
+
+ var _diffSortedLists = (0, _util.diffSortedLists)(this._handles[handleId], keys),
+ added = _diffSortedLists.added,
+ removed = _diffSortedLists.removed;
+
+ this._handles[handleId] = keys;
+
+ for (var i = 0; i < added.length; i++) {
+ this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;
+ }
+ for (var _i = 0; _i < removed.length; _i++) {
+ this._keys[removed[_i]]--;
+ }
+
+ this._updateValue(keys);
+ }
+
+ /**
+ * @param {string[]} keys Sorted array of strings that indicate
+ * a superset of possible keys.
+ * @private
+ */
+
+ }, {
+ key: "_updateValue",
+ value: function _updateValue() {
+ var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._allKeys;
+
+ var handleCount = Object.keys(this._handles).length;
+ if (handleCount === 0) {
+ this._value = null;
+ } else {
+ this._value = [];
+ for (var i = 0; i < keys.length; i++) {
+ var count = this._keys[keys[i]];
+ if (count === handleCount) {
+ this._value.push(keys[i]);
+ }
+ }
+ }
+ }
+ }, {
+ key: "clear",
+ value: function clear(handleId) {
+ if (typeof this._handles[handleId] === "undefined") {
+ return;
+ }
+
+ var keys = this._handles[handleId];
+ if (!keys) {
+ keys = [];
+ }
+
+ for (var i = 0; i < keys.length; i++) {
+ this._keys[keys[i]]--;
+ }
+ delete this._handles[handleId];
+
+ this._updateValue();
+ }
+ }, {
+ key: "value",
+ get: function get() {
+ return this._value;
+ }
+ }, {
+ key: "_allKeys",
+ get: function get() {
+ var allKeys = Object.keys(this._keys);
+ allKeys.sort(naturalComparator);
+ return allKeys;
+ }
+ }]);
+
+ return FilterSet;
+}();
+
+exports.default = FilterSet;
+
+},{"./util":11}],4:[function(require,module,exports){
+(function (global){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+exports.default = group;
+
+var _var2 = require("./var");
+
+var _var3 = _interopRequireDefault(_var2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+// Use a global so that multiple copies of crosstalk.js can be loaded and still
+// have groups behave as singletons across all copies.
+global.__crosstalk_groups = global.__crosstalk_groups || {};
+var groups = global.__crosstalk_groups;
+
+function group(groupName) {
+ if (groupName && typeof groupName === "string") {
+ if (!groups.hasOwnProperty(groupName)) {
+ groups[groupName] = new Group(groupName);
+ }
+ return groups[groupName];
+ } else if ((typeof groupName === "undefined" ? "undefined" : _typeof(groupName)) === "object" && groupName._vars && groupName.var) {
+ // Appears to already be a group object
+ return groupName;
+ } else if (Array.isArray(groupName) && groupName.length == 1 && typeof groupName[0] === "string") {
+ return group(groupName[0]);
+ } else {
+ throw new Error("Invalid groupName argument");
+ }
+}
+
+var Group = function () {
+ function Group(name) {
+ _classCallCheck(this, Group);
+
+ this.name = name;
+ this._vars = {};
+ }
+
+ _createClass(Group, [{
+ key: "var",
+ value: function _var(name) {
+ if (!name || typeof name !== "string") {
+ throw new Error("Invalid var name");
+ }
+
+ if (!this._vars.hasOwnProperty(name)) this._vars[name] = new _var3.default(this, name);
+ return this._vars[name];
+ }
+ }, {
+ key: "has",
+ value: function has(name) {
+ if (!name || typeof name !== "string") {
+ throw new Error("Invalid var name");
+ }
+
+ return this._vars.hasOwnProperty(name);
+ }
+ }]);
+
+ return Group;
+}();
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./var":12}],5:[function(require,module,exports){
+(function (global){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _group = require("./group");
+
+var _group2 = _interopRequireDefault(_group);
+
+var _selection = require("./selection");
+
+var _filter = require("./filter");
+
+var _input = require("./input");
+
+require("./input_selectize");
+
+require("./input_checkboxgroup");
+
+require("./input_slider");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var defaultGroup = (0, _group2.default)("default");
+
+function var_(name) {
+ return defaultGroup.var(name);
+}
+
+function has(name) {
+ return defaultGroup.has(name);
+}
+
+if (global.Shiny) {
+ global.Shiny.addCustomMessageHandler("update-client-value", function (message) {
+ if (typeof message.group === "string") {
+ (0, _group2.default)(message.group).var(message.name).set(message.value);
+ } else {
+ var_(message.name).set(message.value);
+ }
+ });
+}
+
+var crosstalk = {
+ group: _group2.default,
+ var: var_,
+ has: has,
+ SelectionHandle: _selection.SelectionHandle,
+ FilterHandle: _filter.FilterHandle,
+ bind: _input.bind
+};
+
+/**
+ * @namespace crosstalk
+ */
+exports.default = crosstalk;
+
+global.crosstalk = crosstalk;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(require,module,exports){
+(function (global){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.register = register;
+exports.bind = bind;
+var $ = global.jQuery;
+
+var bindings = {};
+
+function register(reg) {
+ bindings[reg.className] = reg;
+ if (global.document && global.document.readyState !== "complete") {
+ $(function () {
+ bind();
+ });
+ } else if (global.document) {
+ setTimeout(bind, 100);
+ }
+}
+
+function bind() {
+ Object.keys(bindings).forEach(function (className) {
+ var binding = bindings[className];
+ $("." + binding.className).not(".crosstalk-input-bound").each(function (i, el) {
+ bindInstance(binding, el);
+ });
+ });
+}
+
+// Escape jQuery identifier
+function $escape(val) {
+ return val.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1");
+}
+
+function bindEl(el) {
+ var $el = $(el);
+ Object.keys(bindings).forEach(function (className) {
+ if ($el.hasClass(className) && !$el.hasClass("crosstalk-input-bound")) {
+ var binding = bindings[className];
+ bindInstance(binding, el);
+ }
+ });
+}
+
+function bindInstance(binding, el) {
+ var jsonEl = $(el).find("script[type='application/json'][data-for='" + $escape(el.id) + "']");
+ var data = JSON.parse(jsonEl[0].innerText);
+
+ var instance = binding.factory(el, data);
+ $(el).data("crosstalk-instance", instance);
+ $(el).addClass("crosstalk-input-bound");
+}
+
+if (global.Shiny) {
+ var inputBinding = new global.Shiny.InputBinding();
+ var _$ = global.jQuery;
+ _$.extend(inputBinding, {
+ find: function find(scope) {
+ return _$(scope).find(".crosstalk-input");
+ },
+ initialize: function initialize(el) {
+ if (!_$(el).hasClass("crosstalk-input-bound")) {
+ bindEl(el);
+ }
+ },
+ getId: function getId(el) {
+ return el.id;
+ },
+ getValue: function getValue(el) {},
+ setValue: function setValue(el, value) {},
+ receiveMessage: function receiveMessage(el, data) {},
+ subscribe: function subscribe(el, callback) {
+ _$(el).data("crosstalk-instance").resume();
+ },
+ unsubscribe: function unsubscribe(el) {
+ _$(el).data("crosstalk-instance").suspend();
+ }
+ });
+ global.Shiny.inputBindings.register(inputBinding, "crosstalk.inputBinding");
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{}],7:[function(require,module,exports){
+(function (global){
+"use strict";
+
+var _input = require("./input");
+
+var input = _interopRequireWildcard(_input);
+
+var _filter = require("./filter");
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var $ = global.jQuery;
+
+input.register({
+ className: "crosstalk-input-checkboxgroup",
+
+ factory: function factory(el, data) {
+ /*
+ * map: {"groupA": ["keyA", "keyB", ...], ...}
+ * group: "ct-groupname"
+ */
+ var ctHandle = new _filter.FilterHandle(data.group);
+
+ var lastKnownKeys = void 0;
+ var $el = $(el);
+ $el.on("change", "input[type='checkbox']", function () {
+ var checked = $el.find("input[type='checkbox']:checked");
+ if (checked.length === 0) {
+ lastKnownKeys = null;
+ ctHandle.clear();
+ } else {
+ var keys = {};
+ checked.each(function () {
+ data.map[this.value].forEach(function (key) {
+ keys[key] = true;
+ });
+ });
+ var keyArray = Object.keys(keys);
+ keyArray.sort();
+ lastKnownKeys = keyArray;
+ ctHandle.set(keyArray);
+ }
+ });
+
+ return {
+ suspend: function suspend() {
+ ctHandle.clear();
+ },
+ resume: function resume() {
+ if (lastKnownKeys) ctHandle.set(lastKnownKeys);
+ }
+ };
+ }
+});
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./filter":2,"./input":6}],8:[function(require,module,exports){
+(function (global){
+"use strict";
+
+var _input = require("./input");
+
+var input = _interopRequireWildcard(_input);
+
+var _util = require("./util");
+
+var util = _interopRequireWildcard(_util);
+
+var _filter = require("./filter");
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var $ = global.jQuery;
+
+input.register({
+ className: "crosstalk-input-select",
+
+ factory: function factory(el, data) {
+ /*
+ * items: {value: [...], label: [...]}
+ * map: {"groupA": ["keyA", "keyB", ...], ...}
+ * group: "ct-groupname"
+ */
+
+ var first = [{ value: "", label: "(All)" }];
+ var items = util.dataframeToD3(data.items);
+ var opts = {
+ options: first.concat(items),
+ valueField: "value",
+ labelField: "label",
+ searchField: "label"
+ };
+
+ var select = $(el).find("select")[0];
+
+ var selectize = $(select).selectize(opts)[0].selectize;
+
+ var ctHandle = new _filter.FilterHandle(data.group);
+
+ var lastKnownKeys = void 0;
+ selectize.on("change", function () {
+ if (selectize.items.length === 0) {
+ lastKnownKeys = null;
+ ctHandle.clear();
+ } else {
+ var keys = {};
+ selectize.items.forEach(function (group) {
+ data.map[group].forEach(function (key) {
+ keys[key] = true;
+ });
+ });
+ var keyArray = Object.keys(keys);
+ keyArray.sort();
+ lastKnownKeys = keyArray;
+ ctHandle.set(keyArray);
+ }
+ });
+
+ return {
+ suspend: function suspend() {
+ ctHandle.clear();
+ },
+ resume: function resume() {
+ if (lastKnownKeys) ctHandle.set(lastKnownKeys);
+ }
+ };
+ }
+});
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./filter":2,"./input":6,"./util":11}],9:[function(require,module,exports){
+(function (global){
+"use strict";
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var _input = require("./input");
+
+var input = _interopRequireWildcard(_input);
+
+var _filter = require("./filter");
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var $ = global.jQuery;
+var strftime = global.strftime;
+
+input.register({
+ className: "crosstalk-input-slider",
+
+ factory: function factory(el, data) {
+ /*
+ * map: {"groupA": ["keyA", "keyB", ...], ...}
+ * group: "ct-groupname"
+ */
+ var ctHandle = new _filter.FilterHandle(data.group);
+
+ var opts = {};
+ var $el = $(el).find("input");
+ var dataType = $el.data("data-type");
+ var timeFormat = $el.data("time-format");
+ var round = $el.data("round");
+ var timeFormatter = void 0;
+
+ // Set up formatting functions
+ if (dataType === "date") {
+ timeFormatter = strftime.utc();
+ opts.prettify = function (num) {
+ return timeFormatter(timeFormat, new Date(num));
+ };
+ } else if (dataType === "datetime") {
+ var timezone = $el.data("timezone");
+ if (timezone) timeFormatter = strftime.timezone(timezone);else timeFormatter = strftime;
+
+ opts.prettify = function (num) {
+ return timeFormatter(timeFormat, new Date(num));
+ };
+ } else if (dataType === "number") {
+ if (typeof round !== "undefined") opts.prettify = function (num) {
+ var factor = Math.pow(10, round);
+ return Math.round(num * factor) / factor;
+ };
+ }
+
+ $el.ionRangeSlider(opts);
+
+ function getValue() {
+ var result = $el.data("ionRangeSlider").result;
+
+ // Function for converting numeric value from slider to appropriate type.
+ var convert = void 0;
+ var dataType = $el.data("data-type");
+ if (dataType === "date") {
+ convert = function convert(val) {
+ return formatDateUTC(new Date(+val));
+ };
+ } else if (dataType === "datetime") {
+ convert = function convert(val) {
+ // Convert ms to s
+ return +val / 1000;
+ };
+ } else {
+ convert = function convert(val) {
+ return +val;
+ };
+ }
+
+ if ($el.data("ionRangeSlider").options.type === "double") {
+ return [convert(result.from), convert(result.to)];
+ } else {
+ return convert(result.from);
+ }
+ }
+
+ var lastKnownKeys = null;
+
+ $el.on("change.crosstalkSliderInput", function (event) {
+ if (!$el.data("updating") && !$el.data("animating")) {
+ var _getValue = getValue(),
+ _getValue2 = _slicedToArray(_getValue, 2),
+ from = _getValue2[0],
+ to = _getValue2[1];
+
+ var keys = [];
+ for (var i = 0; i < data.values.length; i++) {
+ var val = data.values[i];
+ if (val >= from && val <= to) {
+ keys.push(data.keys[i]);
+ }
+ }
+ keys.sort();
+ ctHandle.set(keys);
+ lastKnownKeys = keys;
+ }
+ });
+
+ // let $el = $(el);
+ // $el.on("change", "input[type="checkbox"]", function() {
+ // let checked = $el.find("input[type="checkbox"]:checked");
+ // if (checked.length === 0) {
+ // ctHandle.clear();
+ // } else {
+ // let keys = {};
+ // checked.each(function() {
+ // data.map[this.value].forEach(function(key) {
+ // keys[key] = true;
+ // });
+ // });
+ // let keyArray = Object.keys(keys);
+ // keyArray.sort();
+ // ctHandle.set(keyArray);
+ // }
+ // });
+
+ return {
+ suspend: function suspend() {
+ ctHandle.clear();
+ },
+ resume: function resume() {
+ if (lastKnownKeys) ctHandle.set(lastKnownKeys);
+ }
+ };
+ }
+});
+
+// Convert a number to a string with leading zeros
+function padZeros(n, digits) {
+ var str = n.toString();
+ while (str.length < digits) {
+ str = "0" + str;
+ }return str;
+}
+
+// Given a Date object, return a string in yyyy-mm-dd format, using the
+// UTC date. This may be a day off from the date in the local time zone.
+function formatDateUTC(date) {
+ if (date instanceof Date) {
+ return date.getUTCFullYear() + "-" + padZeros(date.getUTCMonth() + 1, 2) + "-" + padZeros(date.getUTCDate(), 2);
+ } else {
+ return null;
+ }
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./filter":2,"./input":6}],10:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.SelectionHandle = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _events = require("./events");
+
+var _events2 = _interopRequireDefault(_events);
+
+var _group = require("./group");
+
+var _group2 = _interopRequireDefault(_group);
+
+var _util = require("./util");
+
+var util = _interopRequireWildcard(_util);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * Use this class to read and write (and listen for changes to) the selection
+ * for a Crosstalk group. This is intended to be used for linked brushing.
+ *
+ * If two (or more) `SelectionHandle` instances in the same webpage share the
+ * same group name, they will share the same state. Setting the selection using
+ * one `SelectionHandle` instance will result in the `value` property instantly
+ * changing across the others, and `"change"` event listeners on all instances
+ * (including the one that initiated the sending) will fire.
+ *
+ * @param {string} [group] - The name of the Crosstalk group, or if none,
+ * null or undefined (or any other falsy value). This can be changed later
+ * via the [SelectionHandle#setGroup](#setGroup) method.
+ * @param {Object} [extraInfo] - An object whose properties will be copied to
+ * the event object whenever an event is emitted.
+ */
+var SelectionHandle = exports.SelectionHandle = function () {
+ function SelectionHandle() {
+ var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ var extraInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+
+ _classCallCheck(this, SelectionHandle);
+
+ this._eventRelay = new _events2.default();
+ this._emitter = new util.SubscriptionTracker(this._eventRelay);
+
+ // Name of the group we're currently tracking, if any. Can change over time.
+ this._group = null;
+ // The Var we're currently tracking, if any. Can change over time.
+ this._var = null;
+ // The event handler subscription we currently have on var.on("change").
+ this._varOnChangeSub = null;
+
+ this._extraInfo = util.extend({ sender: this }, extraInfo);
+
+ this.setGroup(group);
+ }
+
+ /**
+ * Changes the Crosstalk group membership of this SelectionHandle. The group
+ * being switched away from (if any) will not have its selection value
+ * modified as a result of calling `setGroup`, even if this handle was the
+ * most recent handle to set the selection of the group.
+ *
+ * The group being switched to (if any) will also not have its selection value
+ * modified as a result of calling `setGroup`. If you want to set the
+ * selection value of the new group, call `set` explicitly.
+ *
+ * @param {string} group - The name of the Crosstalk group, or null (or
+ * undefined) to clear the group.
+ */
+
+
+ _createClass(SelectionHandle, [{
+ key: "setGroup",
+ value: function setGroup(group) {
+ var _this = this;
+
+ // If group is unchanged, do nothing
+ if (this._group === group) return;
+ // Treat null, undefined, and other falsy values the same
+ if (!this._group && !group) return;
+
+ if (this._var) {
+ this._var.off("change", this._varOnChangeSub);
+ this._var = null;
+ this._varOnChangeSub = null;
+ }
+
+ this._group = group;
+
+ if (group) {
+ this._var = (0, _group2.default)(group).var("selection");
+ var sub = this._var.on("change", function (e) {
+ _this._eventRelay.trigger("change", e, _this);
+ });
+ this._varOnChangeSub = sub;
+ }
+ }
+
+ /**
+ * Retrieves the current selection for the group represented by this
+ * `SelectionHandle`.
+ *
+ * - If no selection is active, then this value will be falsy.
+ * - If a selection is active, but no data points are selected, then this
+ * value will be an empty array.
+ * - If a selection is active, and data points are selected, then the keys
+ * of the selected data points will be present in the array.
+ */
+
+ }, {
+ key: "_mergeExtraInfo",
+
+
+ /**
+ * Combines the given `extraInfo` (if any) with the handle's default
+ * `_extraInfo` (if any).
+ * @private
+ */
+ value: function _mergeExtraInfo(extraInfo) {
+ // Important incidental effect: shallow clone is returned
+ return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null);
+ }
+
+ /**
+ * Overwrites the current selection for the group, and raises the `"change"`
+ * event among all of the group's '`SelectionHandle` instances (including
+ * this one).
+ *
+ * @fires SelectionHandle#change
+ * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see
+ * {@link SelectionHandle#value}).
+ * @param {Object} [extraInfo] - Extra properties to be included on the event
+ * object that's passed to listeners (in addition to any options that were
+ * passed into the `SelectionHandle` constructor).
+ */
+
+ }, {
+ key: "set",
+ value: function set(selectedKeys, extraInfo) {
+ if (this._var) this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));
+ }
+
+ /**
+ * Overwrites the current selection for the group, and raises the `"change"`
+ * event among all of the group's '`SelectionHandle` instances (including
+ * this one).
+ *
+ * @fires SelectionHandle#change
+ * @param {Object} [extraInfo] - Extra properties to be included on the event
+ * object that's passed to listeners (in addition to any that were passed
+ * into the `SelectionHandle` constructor).
+ */
+
+ }, {
+ key: "clear",
+ value: function clear(extraInfo) {
+ if (this._var) this.set(void 0, this._mergeExtraInfo(extraInfo));
+ }
+
+ /**
+ * Subscribes to events on this `SelectionHandle`.
+ *
+ * @param {string} eventType - Indicates the type of events to listen to.
+ * Currently, only `"change"` is supported.
+ * @param {SelectionHandle~listener} listener - The callback function that
+ * will be invoked when the event occurs.
+ * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel
+ * this subscription.
+ */
+
+ }, {
+ key: "on",
+ value: function on(eventType, listener) {
+ return this._emitter.on(eventType, listener);
+ }
+
+ /**
+ * Cancels event subscriptions created by {@link SelectionHandle#on}.
+ *
+ * @param {string} eventType - The type of event to unsubscribe.
+ * @param {string|SelectionHandle~listener} listener - Either the callback
+ * function previously passed into {@link SelectionHandle#on}, or the
+ * string that was returned from {@link SelectionHandle#on}.
+ */
+
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ return this._emitter.off(eventType, listener);
+ }
+
+ /**
+ * Shuts down the `SelectionHandle` object.
+ *
+ * Removes all event listeners that were added through this handle.
+ */
+
+ }, {
+ key: "close",
+ value: function close() {
+ this._emitter.removeAllListeners();
+ this.setGroup(null);
+ }
+ }, {
+ key: "value",
+ get: function get() {
+ return this._var ? this._var.get() : null;
+ }
+ }]);
+
+ return SelectionHandle;
+}();
+
+/**
+ * @callback SelectionHandle~listener
+ * @param {Object} event - An object containing details of the event. For
+ * `"change"` events, this includes the properties `value` (the new
+ * value of the selection, or `undefined` if no selection is active),
+ * `oldValue` (the previous value of the selection), and `sender` (the
+ * `SelectionHandle` instance that made the change).
+ */
+
+/**
+ * @event SelectionHandle#change
+ * @type {object}
+ * @property {object} value - The new value of the selection, or `undefined`
+ * if no selection is active.
+ * @property {object} oldValue - The previous value of the selection.
+ * @property {SelectionHandle} sender - The `SelectionHandle` instance that
+ * changed the value.
+ */
+
+},{"./events":1,"./group":4,"./util":11}],11:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+exports.extend = extend;
+exports.checkSorted = checkSorted;
+exports.diffSortedLists = diffSortedLists;
+exports.dataframeToD3 = dataframeToD3;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function extend(target) {
+ for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ sources[_key - 1] = arguments[_key];
+ }
+
+ for (var i = 0; i < sources.length; i++) {
+ var src = sources[i];
+ if (typeof src === "undefined" || src === null) continue;
+
+ for (var key in src) {
+ if (src.hasOwnProperty(key)) {
+ target[key] = src[key];
+ }
+ }
+ }
+ return target;
+}
+
+function checkSorted(list) {
+ for (var i = 1; i < list.length; i++) {
+ if (list[i] <= list[i - 1]) {
+ throw new Error("List is not sorted or contains duplicate");
+ }
+ }
+}
+
+function diffSortedLists(a, b) {
+ var i_a = 0;
+ var i_b = 0;
+
+ if (!a) a = [];
+ if (!b) b = [];
+
+ var a_only = [];
+ var b_only = [];
+
+ checkSorted(a);
+ checkSorted(b);
+
+ while (i_a < a.length && i_b < b.length) {
+ if (a[i_a] === b[i_b]) {
+ i_a++;
+ i_b++;
+ } else if (a[i_a] < b[i_b]) {
+ a_only.push(a[i_a++]);
+ } else {
+ b_only.push(b[i_b++]);
+ }
+ }
+
+ if (i_a < a.length) a_only = a_only.concat(a.slice(i_a));
+ if (i_b < b.length) b_only = b_only.concat(b.slice(i_b));
+ return {
+ removed: a_only,
+ added: b_only
+ };
+}
+
+// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }
+// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]
+function dataframeToD3(df) {
+ var names = [];
+ var length = void 0;
+ for (var name in df) {
+ if (df.hasOwnProperty(name)) names.push(name);
+ if (_typeof(df[name]) !== "object" || typeof df[name].length === "undefined") {
+ throw new Error("All fields must be arrays");
+ } else if (typeof length !== "undefined" && length !== df[name].length) {
+ throw new Error("All fields must be arrays of the same length");
+ }
+ length = df[name].length;
+ }
+ var results = [];
+ var item = void 0;
+ for (var row = 0; row < length; row++) {
+ item = {};
+ for (var col = 0; col < names.length; col++) {
+ item[names[col]] = df[names[col]][row];
+ }
+ results.push(item);
+ }
+ return results;
+}
+
+/**
+ * Keeps track of all event listener additions/removals and lets all active
+ * listeners be removed with a single operation.
+ *
+ * @private
+ */
+
+var SubscriptionTracker = exports.SubscriptionTracker = function () {
+ function SubscriptionTracker(emitter) {
+ _classCallCheck(this, SubscriptionTracker);
+
+ this._emitter = emitter;
+ this._subs = {};
+ }
+
+ _createClass(SubscriptionTracker, [{
+ key: "on",
+ value: function on(eventType, listener) {
+ var sub = this._emitter.on(eventType, listener);
+ this._subs[sub] = eventType;
+ return sub;
+ }
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ var sub = this._emitter.off(eventType, listener);
+ if (sub) {
+ delete this._subs[sub];
+ }
+ return sub;
+ }
+ }, {
+ key: "removeAllListeners",
+ value: function removeAllListeners() {
+ var _this = this;
+
+ var current_subs = this._subs;
+ this._subs = {};
+ Object.keys(current_subs).forEach(function (sub) {
+ _this._emitter.off(current_subs[sub], sub);
+ });
+ }
+ }]);
+
+ return SubscriptionTracker;
+}();
+
+},{}],12:[function(require,module,exports){
+(function (global){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _events = require("./events");
+
+var _events2 = _interopRequireDefault(_events);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Var = function () {
+ function Var(group, name, /*optional*/value) {
+ _classCallCheck(this, Var);
+
+ this._group = group;
+ this._name = name;
+ this._value = value;
+ this._events = new _events2.default();
+ }
+
+ _createClass(Var, [{
+ key: "get",
+ value: function get() {
+ return this._value;
+ }
+ }, {
+ key: "set",
+ value: function set(value, /*optional*/event) {
+ if (this._value === value) {
+ // Do nothing; the value hasn't changed
+ return;
+ }
+ var oldValue = this._value;
+ this._value = value;
+ // Alert JavaScript listeners that the value has changed
+ var evt = {};
+ if (event && (typeof event === "undefined" ? "undefined" : _typeof(event)) === "object") {
+ for (var k in event) {
+ if (event.hasOwnProperty(k)) evt[k] = event[k];
+ }
+ }
+ evt.oldValue = oldValue;
+ evt.value = value;
+ this._events.trigger("change", evt, this);
+
+ // TODO: Make this extensible, to let arbitrary back-ends know that
+ // something has changed
+ if (global.Shiny && global.Shiny.onInputChange) {
+ global.Shiny.onInputChange(".clientValue-" + (this._group.name !== null ? this._group.name + "-" : "") + this._name, typeof value === "undefined" ? null : value);
+ }
+ }
+ }, {
+ key: "on",
+ value: function on(eventType, listener) {
+ return this._events.on(eventType, listener);
+ }
+ }, {
+ key: "off",
+ value: function off(eventType, listener) {
+ return this._events.off(eventType, listener);
+ }
+ }]);
+
+ return Var;
+}();
+
+exports.default = Var;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./events":1}]},{},[5])
+//# sourceMappingURL=crosstalk.js.map
diff --git a/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js.map b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js.map
new file mode 100644
index 00000000..cff94f08
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.js.map
@@ -0,0 +1,37 @@
+{
+ "version": 3,
+ "sources": [
+ "node_modules/browser-pack/_prelude.js",
+ "javascript/src/events.js",
+ "javascript/src/filter.js",
+ "javascript/src/filterset.js",
+ "javascript/src/group.js",
+ "javascript/src/index.js",
+ "javascript/src/input.js",
+ "javascript/src/input_checkboxgroup.js",
+ "javascript/src/input_selectize.js",
+ "javascript/src/input_slider.js",
+ "javascript/src/selection.js",
+ "javascript/src/util.js",
+ "javascript/src/var.js"
+ ],
+ "names": [],
+ "mappings": "AAAA;;;;;;;;;;;ICAqB,M;AACnB,oBAAc;AAAA;;AACZ,SAAK,MAAL,GAAc,EAAd;AACA,SAAK,IAAL,GAAY,CAAZ;AACD;;;;uBAEE,S,EAAW,Q,EAAU;AACtB,UAAI,OAAO,KAAK,MAAL,CAAY,SAAZ,CAAX;AACA,UAAI,CAAC,IAAL,EAAW;AACT,eAAO,KAAK,MAAL,CAAY,SAAZ,IAAyB,EAAhC;AACD;AACD,UAAI,MAAM,QAAS,KAAK,IAAL,EAAnB;AACA,WAAK,GAAL,IAAY,QAAZ;AACA,aAAO,GAAP;AACD;;AAED;;;;wBACI,S,EAAW,Q,EAAU;AACvB,UAAI,OAAO,KAAK,MAAL,CAAY,SAAZ,CAAX;AACA,UAAI,OAAO,QAAP,KAAqB,UAAzB,EAAqC;AACnC,aAAK,IAAI,GAAT,IAAgB,IAAhB,EAAsB;AACpB,cAAI,KAAK,cAAL,CAAoB,GAApB,CAAJ,EAA8B;AAC5B,gBAAI,KAAK,GAAL,MAAc,QAAlB,EAA4B;AAC1B,qBAAO,KAAK,GAAL,CAAP;AACA,qBAAO,GAAP;AACD;AACF;AACF;AACD,eAAO,KAAP;AACD,OAVD,MAUO,IAAI,OAAO,QAAP,KAAqB,QAAzB,EAAmC;AACxC,YAAI,QAAQ,KAAK,QAAL,CAAZ,EAA4B;AAC1B,iBAAO,KAAK,QAAL,CAAP;AACA,iBAAO,QAAP;AACD;AACD,eAAO,KAAP;AACD,OANM,MAMA;AACL,cAAM,IAAI,KAAJ,CAAU,8BAAV,CAAN;AACD;AACF;;;4BAEO,S,EAAW,G,EAAK,O,EAAS;AAC/B,UAAI,OAAO,KAAK,MAAL,CAAY,SAAZ,CAAX;AACA,WAAK,IAAI,GAAT,IAAgB,IAAhB,EAAsB;AACpB,YAAI,KAAK,cAAL,CAAoB,GAApB,CAAJ,EAA8B;AAC5B,eAAK,GAAL,EAAU,IAAV,CAAe,OAAf,EAAwB,GAAxB;AACD;AACF;AACF;;;;;;kBA/CkB,M;;;;;;;;;;;;ACArB;;;;AACA;;;;AACA;;;;AACA;;IAAY,I;;;;;;;;AAEZ,SAAS,YAAT,CAAsB,KAAtB,EAA6B;AAC3B,MAAI,QAAQ,MAAM,GAAN,CAAU,WAAV,CAAZ;AACA,MAAI,SAAS,MAAM,GAAN,EAAb;AACA,MAAI,CAAC,MAAL,EAAa;AACX,aAAS,yBAAT;AACA,UAAM,GAAN,CAAU,MAAV;AACD;AACD,SAAO,MAAP;AACD;;AAED,IAAI,KAAK,CAAT;AACA,SAAS,MAAT,GAAkB;AAChB,SAAO,IAAP;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;IAwBa,Y,WAAA,Y;AACX,wBAAY,KAAZ,EAAmB,SAAnB,EAA8B;AAAA;;AAC5B,SAAK,WAAL,GAAmB,sBAAnB;AACA,SAAK,QAAL,GAAgB,IAAI,KAAK,mBAAT,CAA6B,KAAK,WAAlC,CAAhB;;AAEA;AACA,SAAK,MAAL,GAAc,IAAd;AACA;AACA,SAAK,UAAL,GAAkB,IAAlB;AACA;AACA,SAAK,UAAL,GAAkB,IAAlB;AACA;AACA,SAAK,eAAL,GAAuB,IAAvB;;AAEA,SAAK,UAAL,GAAkB,KAAK,MAAL,CAAY,EAAE,QAAQ,IAAV,EAAZ,EAA8B,SAA9B,CAAlB;;AAEA,SAAK,GAAL,GAAW,WAAW,QAAtB;;AAEA,SAAK,QAAL,CAAc,KAAd;AACD;;AAED;;;;;;;;;;;;;;6BAUS,K,EAAO;AAAA;;AACd;AACA,UAAI,KAAK,MAAL,KAAgB,KAApB,EACE;AACF;AACA,UAAI,CAAC,KAAK,MAAN,IAAgB,CAAC,KAArB,EACE;;AAEF,UAAI,KAAK,UAAT,EAAqB;AACnB,aAAK,UAAL,CAAgB,GAAhB,CAAoB,QAApB,EAA8B,KAAK,eAAnC;AACA,aAAK,KAAL;AACA,aAAK,eAAL,GAAuB,IAAvB;AACA,aAAK,UAAL,GAAkB,IAAlB;AACA,aAAK,UAAL,GAAkB,IAAlB;AACD;;AAED,WAAK,MAAL,GAAc,KAAd;;AAEA,UAAI,KAAJ,EAAW;AACT,gBAAQ,qBAAI,KAAJ,CAAR;AACA,aAAK,UAAL,GAAkB,aAAa,KAAb,CAAlB;AACA,aAAK,UAAL,GAAkB,qBAAI,KAAJ,EAAW,GAAX,CAAe,QAAf,CAAlB;AACA,YAAI,MAAM,KAAK,UAAL,CAAgB,EAAhB,CAAmB,QAAnB,EAA6B,UAAC,CAAD,EAAO;AAC5C,gBAAK,WAAL,CAAiB,OAAjB,CAAyB,QAAzB,EAAmC,CAAnC;AACD,SAFS,CAAV;AAGA,aAAK,eAAL,GAAuB,GAAvB;AACD;AACF;;AAED;;;;;;;;oCAKgB,S,EAAW;AACzB,aAAO,KAAK,MAAL,CAAY,EAAZ,EACL,KAAK,UAAL,GAAkB,KAAK,UAAvB,GAAoC,IAD/B,EAEL,YAAY,SAAZ,GAAwB,IAFnB,CAAP;AAGD;;AAED;;;;;;;4BAIQ;AACN,WAAK,QAAL,CAAc,kBAAd;AACA,WAAK,KAAL;AACA,WAAK,QAAL,CAAc,IAAd;AACD;;AAED;;;;;;;;;;;;0BASM,S,EAAW;AACf,UAAI,CAAC,KAAK,UAAV,EACE;AACF,WAAK,UAAL,CAAgB,KAAhB,CAAsB,KAAK,GAA3B;AACA,WAAK,SAAL,CAAe,SAAf;AACD;;AAED;;;;;;;;;;;;;;;;;;;;wBAiBI,I,EAAM,S,EAAW;AACnB,UAAI,CAAC,KAAK,UAAV,EACE;AACF,WAAK,UAAL,CAAgB,MAAhB,CAAuB,KAAK,GAA5B,EAAiC,IAAjC;AACA,WAAK,SAAL,CAAe,SAAf;AACD;;AAED;;;;;;;;;;AASA;;;;;;;;;;uBAUG,S,EAAW,Q,EAAU;AACtB,aAAO,KAAK,QAAL,CAAc,EAAd,CAAiB,SAAjB,EAA4B,QAA5B,CAAP;AACD;;AAED;;;;;;;;;;;wBAQI,S,EAAW,Q,EAAU;AACvB,aAAO,KAAK,QAAL,CAAc,GAAd,CAAkB,SAAlB,EAA6B,QAA7B,CAAP;AACD;;;8BAES,S,EAAW;AACnB,UAAI,CAAC,KAAK,UAAV,EACE;AACF,WAAK,UAAL,CAAgB,GAAhB,CAAoB,KAAK,UAAL,CAAgB,KAApC,EAA2C,KAAK,eAAL,CAAqB,SAArB,CAA3C;AACD;;AAED;;;;;;;;;;;wBApCmB;AACjB,aAAO,KAAK,UAAL,GAAkB,KAAK,UAAL,CAAgB,KAAlC,GAA0C,IAAjD;AACD;;;;;;AA6CH;;;;;;;;;;;;;;;;;;;ACzNA;;;;AAEA,SAAS,iBAAT,CAA2B,CAA3B,EAA8B,CAA9B,EAAiC;AAC/B,MAAI,MAAM,CAAV,EAAa;AACX,WAAO,CAAP;AACD,GAFD,MAEO,IAAI,IAAI,CAAR,EAAW;AAChB,WAAO,CAAC,CAAR;AACD,GAFM,MAEA,IAAI,IAAI,CAAR,EAAW;AAChB,WAAO,CAAP;AACD;AACF;;AAED;;;;IAGqB,S;AACnB,uBAAc;AAAA;;AACZ,SAAK,KAAL;AACD;;;;4BAEO;AACN;AACA,WAAK,QAAL,GAAgB,EAAhB;AACA;AACA,WAAK,KAAL,GAAa,EAAb;AACA,WAAK,MAAL,GAAc,IAAd;AACA,WAAK,cAAL,GAAsB,CAAtB;AACD;;;2BAMM,Q,EAAU,I,EAAM;AACrB,UAAI,SAAS,IAAb,EAAmB;AACjB,eAAO,KAAK,KAAL,CAAW,CAAX,CAAP,CADiB,CACK;AACtB,aAAK,IAAL,CAAU,iBAAV;AACD;;AAJoB,6BAME,2BAAgB,KAAK,QAAL,CAAc,QAAd,CAAhB,EAAyC,IAAzC,CANF;AAAA,UAMhB,KANgB,oBAMhB,KANgB;AAAA,UAMT,OANS,oBAMT,OANS;;AAOrB,WAAK,QAAL,CAAc,QAAd,IAA0B,IAA1B;;AAEA,WAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,MAAM,MAA1B,EAAkC,GAAlC,EAAuC;AACrC,aAAK,KAAL,CAAW,MAAM,CAAN,CAAX,IAAuB,CAAC,KAAK,KAAL,CAAW,MAAM,CAAN,CAAX,KAAwB,CAAzB,IAA8B,CAArD;AACD;AACD,WAAK,IAAI,KAAI,CAAb,EAAgB,KAAI,QAAQ,MAA5B,EAAoC,IAApC,EAAyC;AACvC,aAAK,KAAL,CAAW,QAAQ,EAAR,CAAX;AACD;;AAED,WAAK,YAAL,CAAkB,IAAlB;AACD;;AAED;;;;;;;;mCAKmC;AAAA,UAAtB,IAAsB,uEAAf,KAAK,QAAU;;AACjC,UAAI,cAAc,OAAO,IAAP,CAAY,KAAK,QAAjB,EAA2B,MAA7C;AACA,UAAI,gBAAgB,CAApB,EAAuB;AACrB,aAAK,MAAL,GAAc,IAAd;AACD,OAFD,MAEO;AACL,aAAK,MAAL,GAAc,EAAd;AACA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,KAAK,MAAzB,EAAiC,GAAjC,EAAsC;AACpC,cAAI,QAAQ,KAAK,KAAL,CAAW,KAAK,CAAL,CAAX,CAAZ;AACA,cAAI,UAAU,WAAd,EAA2B;AACzB,iBAAK,MAAL,CAAY,IAAZ,CAAiB,KAAK,CAAL,CAAjB;AACD;AACF;AACF;AACF;;;0BAEK,Q,EAAU;AACd,UAAI,OAAO,KAAK,QAAL,CAAc,QAAd,CAAP,KAAoC,WAAxC,EAAqD;AACnD;AACD;;AAED,UAAI,OAAO,KAAK,QAAL,CAAc,QAAd,CAAX;AACA,UAAI,CAAC,IAAL,EAAW;AACT,eAAO,EAAP;AACD;;AAED,WAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,KAAK,MAAzB,EAAiC,GAAjC,EAAsC;AACpC,aAAK,KAAL,CAAW,KAAK,CAAL,CAAX;AACD;AACD,aAAO,KAAK,QAAL,CAAc,QAAd,CAAP;;AAEA,WAAK,YAAL;AACD;;;wBA3DW;AACV,aAAO,KAAK,MAAZ;AACD;;;wBA2Dc;AACb,UAAI,UAAU,OAAO,IAAP,CAAY,KAAK,KAAjB,CAAd;AACA,cAAQ,IAAR,CAAa,iBAAb;AACA,aAAO,OAAP;AACD;;;;;;kBA/EkB,S;;;;;;;;;;;;;;kBCRG,K;;AAPxB;;;;;;;;AAEA;AACA;AACA,OAAO,kBAAP,GAA4B,OAAO,kBAAP,IAA6B,EAAzD;AACA,IAAI,SAAS,OAAO,kBAApB;;AAEe,SAAS,KAAT,CAAe,SAAf,EAA0B;AACvC,MAAI,aAAa,OAAO,SAAP,KAAsB,QAAvC,EAAiD;AAC/C,QAAI,CAAC,OAAO,cAAP,CAAsB,SAAtB,CAAL,EAAuC;AACrC,aAAO,SAAP,IAAoB,IAAI,KAAJ,CAAU,SAAV,CAApB;AACD;AACD,WAAO,OAAO,SAAP,CAAP;AACD,GALD,MAKO,IAAI,QAAO,SAAP,yCAAO,SAAP,OAAsB,QAAtB,IAAkC,UAAU,KAA5C,IAAqD,UAAU,GAAnE,EAAwE;AAC7E;AACA,WAAO,SAAP;AACD,GAHM,MAGA,IAAI,MAAM,OAAN,CAAc,SAAd,KACP,UAAU,MAAV,IAAoB,CADb,IAEP,OAAO,UAAU,CAAV,CAAP,KAAyB,QAFtB,EAEgC;AACrC,WAAO,MAAM,UAAU,CAAV,CAAN,CAAP;AACD,GAJM,MAIA;AACL,UAAM,IAAI,KAAJ,CAAU,4BAAV,CAAN;AACD;AACF;;IAEK,K;AACJ,iBAAY,IAAZ,EAAkB;AAAA;;AAChB,SAAK,IAAL,GAAY,IAAZ;AACA,SAAK,KAAL,GAAa,EAAb;AACD;;;;yBAEG,I,EAAM;AACR,UAAI,CAAC,IAAD,IAAS,OAAO,IAAP,KAAiB,QAA9B,EAAwC;AACtC,cAAM,IAAI,KAAJ,CAAU,kBAAV,CAAN;AACD;;AAED,UAAI,CAAC,KAAK,KAAL,CAAW,cAAX,CAA0B,IAA1B,CAAL,EACE,KAAK,KAAL,CAAW,IAAX,IAAmB,kBAAQ,IAAR,EAAc,IAAd,CAAnB;AACF,aAAO,KAAK,KAAL,CAAW,IAAX,CAAP;AACD;;;wBAEG,I,EAAM;AACR,UAAI,CAAC,IAAD,IAAS,OAAO,IAAP,KAAiB,QAA9B,EAAwC;AACtC,cAAM,IAAI,KAAJ,CAAU,kBAAV,CAAN;AACD;;AAED,aAAO,KAAK,KAAL,CAAW,cAAX,CAA0B,IAA1B,CAAP;AACD;;;;;;;;;;;;;;;;AC/CH;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAM,eAAe,qBAAM,SAAN,CAArB;;AAEA,SAAS,IAAT,CAAc,IAAd,EAAoB;AAClB,SAAO,aAAa,GAAb,CAAiB,IAAjB,CAAP;AACD;;AAED,SAAS,GAAT,CAAa,IAAb,EAAmB;AACjB,SAAO,aAAa,GAAb,CAAiB,IAAjB,CAAP;AACD;;AAED,IAAI,OAAO,KAAX,EAAkB;AAChB,SAAO,KAAP,CAAa,uBAAb,CAAqC,qBAArC,EAA4D,UAAS,OAAT,EAAkB;AAC5E,QAAI,OAAO,QAAQ,KAAf,KAA0B,QAA9B,EAAwC;AACtC,2BAAM,QAAQ,KAAd,EAAqB,GAArB,CAAyB,QAAQ,IAAjC,EAAuC,GAAvC,CAA2C,QAAQ,KAAnD;AACD,KAFD,MAEO;AACL,WAAK,QAAQ,IAAb,EAAmB,GAAnB,CAAuB,QAAQ,KAA/B;AACD;AACF,GAND;AAOD;;AAED,IAAM,YAAY;AAChB,wBADgB;AAEhB,OAAK,IAFW;AAGhB,OAAK,GAHW;AAIhB,6CAJgB;AAKhB,oCALgB;AAMhB;AANgB,CAAlB;;AASA;;;kBAGe,S;;AACf,OAAO,SAAP,GAAmB,SAAnB;;;;;;;;;;;QCrCgB,Q,GAAA,Q;QAWA,I,GAAA,I;AAfhB,IAAI,IAAI,OAAO,MAAf;;AAEA,IAAI,WAAW,EAAf;;AAEO,SAAS,QAAT,CAAkB,GAAlB,EAAuB;AAC5B,WAAS,IAAI,SAAb,IAA0B,GAA1B;AACA,MAAI,OAAO,QAAP,IAAmB,OAAO,QAAP,CAAgB,UAAhB,KAA+B,UAAtD,EAAkE;AAChE,MAAE,YAAM;AACN;AACD,KAFD;AAGD,GAJD,MAIO,IAAI,OAAO,QAAX,EAAqB;AAC1B,eAAW,IAAX,EAAiB,GAAjB;AACD;AACF;;AAEM,SAAS,IAAT,GAAgB;AACrB,SAAO,IAAP,CAAY,QAAZ,EAAsB,OAAtB,CAA8B,UAAS,SAAT,EAAoB;AAChD,QAAI,UAAU,SAAS,SAAT,CAAd;AACA,MAAE,MAAM,QAAQ,SAAhB,EAA2B,GAA3B,CAA+B,wBAA/B,EAAyD,IAAzD,CAA8D,UAAS,CAAT,EAAY,EAAZ,EAAgB;AAC5E,mBAAa,OAAb,EAAsB,EAAtB;AACD,KAFD;AAGD,GALD;AAMD;;AAED;AACA,SAAS,OAAT,CAAiB,GAAjB,EAAsB;AACpB,SAAO,IAAI,OAAJ,CAAY,uCAAZ,EAAqD,MAArD,CAAP;AACD;;AAED,SAAS,MAAT,CAAgB,EAAhB,EAAoB;AAClB,MAAI,MAAM,EAAE,EAAF,CAAV;AACA,SAAO,IAAP,CAAY,QAAZ,EAAsB,OAAtB,CAA8B,UAAS,SAAT,EAAoB;AAChD,QAAI,IAAI,QAAJ,CAAa,SAAb,KAA2B,CAAC,IAAI,QAAJ,CAAa,uBAAb,CAAhC,EAAuE;AACrE,UAAI,UAAU,SAAS,SAAT,CAAd;AACA,mBAAa,OAAb,EAAsB,EAAtB;AACD;AACF,GALD;AAMD;;AAED,SAAS,YAAT,CAAsB,OAAtB,EAA+B,EAA/B,EAAmC;AACjC,MAAI,SAAS,EAAE,EAAF,EAAM,IAAN,CAAW,+CAA+C,QAAQ,GAAG,EAAX,CAA/C,GAAgE,IAA3E,CAAb;AACA,MAAI,OAAO,KAAK,KAAL,CAAW,OAAO,CAAP,EAAU,SAArB,CAAX;;AAEA,MAAI,WAAW,QAAQ,OAAR,CAAgB,EAAhB,EAAoB,IAApB,CAAf;AACA,IAAE,EAAF,EAAM,IAAN,CAAW,oBAAX,EAAiC,QAAjC;AACA,IAAE,EAAF,EAAM,QAAN,CAAe,uBAAf;AACD;;AAED,IAAI,OAAO,KAAX,EAAkB;AAChB,MAAI,eAAe,IAAI,OAAO,KAAP,CAAa,YAAjB,EAAnB;AACA,MAAI,KAAI,OAAO,MAAf;AACA,KAAE,MAAF,CAAS,YAAT,EAAuB;AACrB,UAAM,cAAS,KAAT,EAAgB;AACpB,aAAO,GAAE,KAAF,EAAS,IAAT,CAAc,kBAAd,CAAP;AACD,KAHoB;AAIrB,gBAAY,oBAAS,EAAT,EAAa;AACvB,UAAI,CAAC,GAAE,EAAF,EAAM,QAAN,CAAe,uBAAf,CAAL,EAA8C;AAC5C,eAAO,EAAP;AACD;AACF,KARoB;AASrB,WAAO,eAAS,EAAT,EAAa;AAClB,aAAO,GAAG,EAAV;AACD,KAXoB;AAYrB,cAAU,kBAAS,EAAT,EAAa,CAEtB,CAdoB;AAerB,cAAU,kBAAS,EAAT,EAAa,KAAb,EAAoB,CAE7B,CAjBoB;AAkBrB,oBAAgB,wBAAS,EAAT,EAAa,IAAb,EAAmB,CAElC,CApBoB;AAqBrB,eAAW,mBAAS,EAAT,EAAa,QAAb,EAAuB;AAChC,SAAE,EAAF,EAAM,IAAN,CAAW,oBAAX,EAAiC,MAAjC;AACD,KAvBoB;AAwBrB,iBAAa,qBAAS,EAAT,EAAa;AACxB,SAAE,EAAF,EAAM,IAAN,CAAW,oBAAX,EAAiC,OAAjC;AACD;AA1BoB,GAAvB;AA4BA,SAAO,KAAP,CAAa,aAAb,CAA2B,QAA3B,CAAoC,YAApC,EAAkD,wBAAlD;AACD;;;;;;;;AChFD;;IAAY,K;;AACZ;;;;AAEA,IAAI,IAAI,OAAO,MAAf;;AAEA,MAAM,QAAN,CAAe;AACb,aAAW,+BADE;;AAGb,WAAS,iBAAS,EAAT,EAAa,IAAb,EAAmB;AAC1B;;;;AAIA,QAAI,WAAW,yBAAiB,KAAK,KAAtB,CAAf;;AAEA,QAAI,sBAAJ;AACA,QAAI,MAAM,EAAE,EAAF,CAAV;AACA,QAAI,EAAJ,CAAO,QAAP,EAAiB,wBAAjB,EAA2C,YAAW;AACpD,UAAI,UAAU,IAAI,IAAJ,CAAS,gCAAT,CAAd;AACA,UAAI,QAAQ,MAAR,KAAmB,CAAvB,EAA0B;AACxB,wBAAgB,IAAhB;AACA,iBAAS,KAAT;AACD,OAHD,MAGO;AACL,YAAI,OAAO,EAAX;AACA,gBAAQ,IAAR,CAAa,YAAW;AACtB,eAAK,GAAL,CAAS,KAAK,KAAd,EAAqB,OAArB,CAA6B,UAAS,GAAT,EAAc;AACzC,iBAAK,GAAL,IAAY,IAAZ;AACD,WAFD;AAGD,SAJD;AAKA,YAAI,WAAW,OAAO,IAAP,CAAY,IAAZ,CAAf;AACA,iBAAS,IAAT;AACA,wBAAgB,QAAhB;AACA,iBAAS,GAAT,CAAa,QAAb;AACD;AACF,KAjBD;;AAmBA,WAAO;AACL,eAAS,mBAAW;AAClB,iBAAS,KAAT;AACD,OAHI;AAIL,cAAQ,kBAAW;AACjB,YAAI,aAAJ,EACE,SAAS,GAAT,CAAa,aAAb;AACH;AAPI,KAAP;AASD;AAxCY,CAAf;;;;;;;;ACLA;;IAAY,K;;AACZ;;IAAY,I;;AACZ;;;;AAEA,IAAI,IAAI,OAAO,MAAf;;AAEA,MAAM,QAAN,CAAe;AACb,aAAW,wBADE;;AAGb,WAAS,iBAAS,EAAT,EAAa,IAAb,EAAmB;AAC1B;;;;;;AAMA,QAAI,QAAQ,CAAC,EAAC,OAAO,EAAR,EAAY,OAAO,OAAnB,EAAD,CAAZ;AACA,QAAI,QAAQ,KAAK,aAAL,CAAmB,KAAK,KAAxB,CAAZ;AACA,QAAI,OAAO;AACT,eAAS,MAAM,MAAN,CAAa,KAAb,CADA;AAET,kBAAY,OAFH;AAGT,kBAAY,OAHH;AAIT,mBAAa;AAJJ,KAAX;;AAOA,QAAI,SAAS,EAAE,EAAF,EAAM,IAAN,CAAW,QAAX,EAAqB,CAArB,CAAb;;AAEA,QAAI,YAAY,EAAE,MAAF,EAAU,SAAV,CAAoB,IAApB,EAA0B,CAA1B,EAA6B,SAA7C;;AAEA,QAAI,WAAW,yBAAiB,KAAK,KAAtB,CAAf;;AAEA,QAAI,sBAAJ;AACA,cAAU,EAAV,CAAa,QAAb,EAAuB,YAAW;AAChC,UAAI,UAAU,KAAV,CAAgB,MAAhB,KAA2B,CAA/B,EAAkC;AAChC,wBAAgB,IAAhB;AACA,iBAAS,KAAT;AACD,OAHD,MAGO;AACL,YAAI,OAAO,EAAX;AACA,kBAAU,KAAV,CAAgB,OAAhB,CAAwB,UAAS,KAAT,EAAgB;AACtC,eAAK,GAAL,CAAS,KAAT,EAAgB,OAAhB,CAAwB,UAAS,GAAT,EAAc;AACpC,iBAAK,GAAL,IAAY,IAAZ;AACD,WAFD;AAGD,SAJD;AAKA,YAAI,WAAW,OAAO,IAAP,CAAY,IAAZ,CAAf;AACA,iBAAS,IAAT;AACA,wBAAgB,QAAhB;AACA,iBAAS,GAAT,CAAa,QAAb;AACD;AACF,KAhBD;;AAkBA,WAAO;AACL,eAAS,mBAAW;AAClB,iBAAS,KAAT;AACD,OAHI;AAIL,cAAQ,kBAAW;AACjB,YAAI,aAAJ,EACE,SAAS,GAAT,CAAa,aAAb;AACH;AAPI,KAAP;AASD;AArDY,CAAf;;;;;;;;;;ACNA;;IAAY,K;;AACZ;;;;AAEA,IAAI,IAAI,OAAO,MAAf;AACA,IAAI,WAAW,OAAO,QAAtB;;AAEA,MAAM,QAAN,CAAe;AACb,aAAW,wBADE;;AAGb,WAAS,iBAAS,EAAT,EAAa,IAAb,EAAmB;AAC1B;;;;AAIA,QAAI,WAAW,yBAAiB,KAAK,KAAtB,CAAf;;AAEA,QAAI,OAAO,EAAX;AACA,QAAI,MAAM,EAAE,EAAF,EAAM,IAAN,CAAW,OAAX,CAAV;AACA,QAAI,WAAW,IAAI,IAAJ,CAAS,WAAT,CAAf;AACA,QAAI,aAAa,IAAI,IAAJ,CAAS,aAAT,CAAjB;AACA,QAAI,QAAQ,IAAI,IAAJ,CAAS,OAAT,CAAZ;AACA,QAAI,sBAAJ;;AAEA;AACA,QAAI,aAAa,MAAjB,EAAyB;AACvB,sBAAgB,SAAS,GAAT,EAAhB;AACA,WAAK,QAAL,GAAgB,UAAS,GAAT,EAAc;AAC5B,eAAO,cAAc,UAAd,EAA0B,IAAI,IAAJ,CAAS,GAAT,CAA1B,CAAP;AACD,OAFD;AAID,KAND,MAMO,IAAI,aAAa,UAAjB,EAA6B;AAClC,UAAI,WAAW,IAAI,IAAJ,CAAS,UAAT,CAAf;AACA,UAAI,QAAJ,EACE,gBAAgB,SAAS,QAAT,CAAkB,QAAlB,CAAhB,CADF,KAGE,gBAAgB,QAAhB;;AAEF,WAAK,QAAL,GAAgB,UAAS,GAAT,EAAc;AAC5B,eAAO,cAAc,UAAd,EAA0B,IAAI,IAAJ,CAAS,GAAT,CAA1B,CAAP;AACD,OAFD;AAGD,KAVM,MAUA,IAAI,aAAa,QAAjB,EAA2B;AAChC,UAAI,OAAO,KAAP,KAAiB,WAArB,EACE,KAAK,QAAL,GAAgB,UAAS,GAAT,EAAc;AAC5B,YAAI,SAAS,KAAK,GAAL,CAAS,EAAT,EAAa,KAAb,CAAb;AACA,eAAO,KAAK,KAAL,CAAW,MAAM,MAAjB,IAA2B,MAAlC;AACD,OAHD;AAIH;;AAED,QAAI,cAAJ,CAAmB,IAAnB;;AAEA,aAAS,QAAT,GAAoB;AAClB,UAAI,SAAS,IAAI,IAAJ,CAAS,gBAAT,EAA2B,MAAxC;;AAEA;AACA,UAAI,gBAAJ;AACA,UAAI,WAAW,IAAI,IAAJ,CAAS,WAAT,CAAf;AACA,UAAI,aAAa,MAAjB,EAAyB;AACvB,kBAAU,iBAAS,GAAT,EAAc;AACtB,iBAAO,cAAc,IAAI,IAAJ,CAAS,CAAC,GAAV,CAAd,CAAP;AACD,SAFD;AAGD,OAJD,MAIO,IAAI,aAAa,UAAjB,EAA6B;AAClC,kBAAU,iBAAS,GAAT,EAAc;AACtB;AACA,iBAAO,CAAC,GAAD,GAAO,IAAd;AACD,SAHD;AAID,OALM,MAKA;AACL,kBAAU,iBAAS,GAAT,EAAc;AAAE,iBAAO,CAAC,GAAR;AAAc,SAAxC;AACD;;AAED,UAAI,IAAI,IAAJ,CAAS,gBAAT,EAA2B,OAA3B,CAAmC,IAAnC,KAA4C,QAAhD,EAA0D;AACxD,eAAO,CAAC,QAAQ,OAAO,IAAf,CAAD,EAAuB,QAAQ,OAAO,EAAf,CAAvB,CAAP;AACD,OAFD,MAEO;AACL,eAAO,QAAQ,OAAO,IAAf,CAAP;AACD;AACF;;AAED,QAAI,gBAAgB,IAApB;;AAEA,QAAI,EAAJ,CAAO,6BAAP,EAAsC,UAAS,KAAT,EAAgB;AACpD,UAAI,CAAC,IAAI,IAAJ,CAAS,UAAT,CAAD,IAAyB,CAAC,IAAI,IAAJ,CAAS,WAAT,CAA9B,EAAqD;AAAA,wBAClC,UADkC;AAAA;AAAA,YAC9C,IAD8C;AAAA,YACxC,EADwC;;AAEnD,YAAI,OAAO,EAAX;AACA,aAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,KAAK,MAAL,CAAY,MAAhC,EAAwC,GAAxC,EAA6C;AAC3C,cAAI,MAAM,KAAK,MAAL,CAAY,CAAZ,CAAV;AACA,cAAI,OAAO,IAAP,IAAe,OAAO,EAA1B,EAA8B;AAC5B,iBAAK,IAAL,CAAU,KAAK,IAAL,CAAU,CAAV,CAAV;AACD;AACF;AACD,aAAK,IAAL;AACA,iBAAS,GAAT,CAAa,IAAb;AACA,wBAAgB,IAAhB;AACD;AACF,KAdD;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAO;AACL,eAAS,mBAAW;AAClB,iBAAS,KAAT;AACD,OAHI;AAIL,cAAQ,kBAAW;AACjB,YAAI,aAAJ,EACE,SAAS,GAAT,CAAa,aAAb;AACH;AAPI,KAAP;AASD;AApHY,CAAf;;AAwHA;AACA,SAAS,QAAT,CAAkB,CAAlB,EAAqB,MAArB,EAA6B;AAC3B,MAAI,MAAM,EAAE,QAAF,EAAV;AACA,SAAO,IAAI,MAAJ,GAAa,MAApB;AACE,UAAM,MAAM,GAAZ;AADF,GAEA,OAAO,GAAP;AACD;;AAED;AACA;AACA,SAAS,aAAT,CAAuB,IAAvB,EAA6B;AAC3B,MAAI,gBAAgB,IAApB,EAA0B;AACxB,WAAO,KAAK,cAAL,KAAwB,GAAxB,GACA,SAAS,KAAK,WAAL,KAAmB,CAA5B,EAA+B,CAA/B,CADA,GACoC,GADpC,GAEA,SAAS,KAAK,UAAL,EAAT,EAA4B,CAA5B,CAFP;AAID,GALD,MAKO;AACL,WAAO,IAAP;AACD;AACF;;;;;;;;;;;;;;ACjJD;;;;AACA;;;;AACA;;IAAY,I;;;;;;;;AAEZ;;;;;;;;;;;;;;;;IAgBa,e,WAAA,e;AAEX,6BAA4C;AAAA,QAAhC,KAAgC,uEAAxB,IAAwB;AAAA,QAAlB,SAAkB,uEAAN,IAAM;;AAAA;;AAC1C,SAAK,WAAL,GAAmB,sBAAnB;AACA,SAAK,QAAL,GAAgB,IAAI,KAAK,mBAAT,CAA6B,KAAK,WAAlC,CAAhB;;AAEA;AACA,SAAK,MAAL,GAAc,IAAd;AACA;AACA,SAAK,IAAL,GAAY,IAAZ;AACA;AACA,SAAK,eAAL,GAAuB,IAAvB;;AAEA,SAAK,UAAL,GAAkB,KAAK,MAAL,CAAY,EAAE,QAAQ,IAAV,EAAZ,EAA8B,SAA9B,CAAlB;;AAEA,SAAK,QAAL,CAAc,KAAd;AACD;;AAED;;;;;;;;;;;;;;;;;6BAaS,K,EAAO;AAAA;;AACd;AACA,UAAI,KAAK,MAAL,KAAgB,KAApB,EACE;AACF;AACA,UAAI,CAAC,KAAK,MAAN,IAAgB,CAAC,KAArB,EACE;;AAEF,UAAI,KAAK,IAAT,EAAe;AACb,aAAK,IAAL,CAAU,GAAV,CAAc,QAAd,EAAwB,KAAK,eAA7B;AACA,aAAK,IAAL,GAAY,IAAZ;AACA,aAAK,eAAL,GAAuB,IAAvB;AACD;;AAED,WAAK,MAAL,GAAc,KAAd;;AAEA,UAAI,KAAJ,EAAW;AACT,aAAK,IAAL,GAAY,qBAAI,KAAJ,EAAW,GAAX,CAAe,WAAf,CAAZ;AACA,YAAI,MAAM,KAAK,IAAL,CAAU,EAAV,CAAa,QAAb,EAAuB,UAAC,CAAD,EAAO;AACtC,gBAAK,WAAL,CAAiB,OAAjB,CAAyB,QAAzB,EAAmC,CAAnC;AACD,SAFS,CAAV;AAGA,aAAK,eAAL,GAAuB,GAAvB;AACD;AACF;;AAED;;;;;;;;;;;;;;;AAcA;;;;;oCAKgB,S,EAAW;AACzB;AACA,aAAO,KAAK,MAAL,CAAY,EAAZ,EACL,KAAK,UAAL,GAAkB,KAAK,UAAvB,GAAoC,IAD/B,EAEL,YAAY,SAAZ,GAAwB,IAFnB,CAAP;AAGD;;AAED;;;;;;;;;;;;;;;wBAYI,Y,EAAc,S,EAAW;AAC3B,UAAI,KAAK,IAAT,EACE,KAAK,IAAL,CAAU,GAAV,CAAc,YAAd,EAA4B,KAAK,eAAL,CAAqB,SAArB,CAA5B;AACH;;AAED;;;;;;;;;;;;;0BAUM,S,EAAW;AACf,UAAI,KAAK,IAAT,EACE,KAAK,GAAL,CAAS,KAAK,CAAd,EAAiB,KAAK,eAAL,CAAqB,SAArB,CAAjB;AACH;;AAED;;;;;;;;;;;;;uBAUG,S,EAAW,Q,EAAU;AACtB,aAAO,KAAK,QAAL,CAAc,EAAd,CAAiB,SAAjB,EAA4B,QAA5B,CAAP;AACD;;AAED;;;;;;;;;;;wBAQI,S,EAAW,Q,EAAU;AACvB,aAAO,KAAK,QAAL,CAAc,GAAd,CAAkB,SAAlB,EAA6B,QAA7B,CAAP;AACD;;AAED;;;;;;;;4BAKQ;AACN,WAAK,QAAL,CAAc,kBAAd;AACA,WAAK,QAAL,CAAc,IAAd;AACD;;;wBAlFW;AACV,aAAO,KAAK,IAAL,GAAY,KAAK,IAAL,CAAU,GAAV,EAAZ,GAA8B,IAArC;AACD;;;;;;AAmFH;;;;;;;;;AASA;;;;;;;;;;;;;;;;;;;;;QCpLgB,M,GAAA,M;QAeA,W,GAAA,W;QAQA,e,GAAA,e;QAoCA,a,GAAA,a;;;;AA3DT,SAAS,MAAT,CAAgB,MAAhB,EAAoC;AAAA,oCAAT,OAAS;AAAT,WAAS;AAAA;;AACzC,OAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,QAAQ,MAA5B,EAAoC,GAApC,EAAyC;AACvC,QAAI,MAAM,QAAQ,CAAR,CAAV;AACA,QAAI,OAAO,GAAP,KAAgB,WAAhB,IAA+B,QAAQ,IAA3C,EACE;;AAEF,SAAK,IAAI,GAAT,IAAgB,GAAhB,EAAqB;AACnB,UAAI,IAAI,cAAJ,CAAmB,GAAnB,CAAJ,EAA6B;AAC3B,eAAO,GAAP,IAAc,IAAI,GAAJ,CAAd;AACD;AACF;AACF;AACD,SAAO,MAAP;AACD;;AAEM,SAAS,WAAT,CAAqB,IAArB,EAA2B;AAChC,OAAK,IAAI,IAAI,CAAb,EAAgB,IAAI,KAAK,MAAzB,EAAiC,GAAjC,EAAsC;AACpC,QAAI,KAAK,CAAL,KAAW,KAAK,IAAE,CAAP,CAAf,EAA0B;AACxB,YAAM,IAAI,KAAJ,CAAU,0CAAV,CAAN;AACD;AACF;AACF;;AAEM,SAAS,eAAT,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B;AACpC,MAAI,MAAM,CAAV;AACA,MAAI,MAAM,CAAV;;AAEA,MAAI,CAAC,CAAL,EAAQ,IAAI,EAAJ;AACR,MAAI,CAAC,CAAL,EAAQ,IAAI,EAAJ;;AAER,MAAI,SAAS,EAAb;AACA,MAAI,SAAS,EAAb;;AAEA,cAAY,CAAZ;AACA,cAAY,CAAZ;;AAEA,SAAO,MAAM,EAAE,MAAR,IAAkB,MAAM,EAAE,MAAjC,EAAyC;AACvC,QAAI,EAAE,GAAF,MAAW,EAAE,GAAF,CAAf,EAAuB;AACrB;AACA;AACD,KAHD,MAGO,IAAI,EAAE,GAAF,IAAS,EAAE,GAAF,CAAb,EAAqB;AAC1B,aAAO,IAAP,CAAY,EAAE,KAAF,CAAZ;AACD,KAFM,MAEA;AACL,aAAO,IAAP,CAAY,EAAE,KAAF,CAAZ;AACD;AACF;;AAED,MAAI,MAAM,EAAE,MAAZ,EACE,SAAS,OAAO,MAAP,CAAc,EAAE,KAAF,CAAQ,GAAR,CAAd,CAAT;AACF,MAAI,MAAM,EAAE,MAAZ,EACE,SAAS,OAAO,MAAP,CAAc,EAAE,KAAF,CAAQ,GAAR,CAAd,CAAT;AACF,SAAO;AACL,aAAS,MADJ;AAEL,WAAO;AAFF,GAAP;AAID;;AAED;AACA;AACO,SAAS,aAAT,CAAuB,EAAvB,EAA2B;AAChC,MAAI,QAAQ,EAAZ;AACA,MAAI,eAAJ;AACA,OAAK,IAAI,IAAT,IAAiB,EAAjB,EAAqB;AACnB,QAAI,GAAG,cAAH,CAAkB,IAAlB,CAAJ,EACE,MAAM,IAAN,CAAW,IAAX;AACF,QAAI,QAAO,GAAG,IAAH,CAAP,MAAqB,QAArB,IAAiC,OAAO,GAAG,IAAH,EAAS,MAAhB,KAA4B,WAAjE,EAA8E;AAC5E,YAAM,IAAI,KAAJ,CAAU,2BAAV,CAAN;AACD,KAFD,MAEO,IAAI,OAAO,MAAP,KAAmB,WAAnB,IAAkC,WAAW,GAAG,IAAH,EAAS,MAA1D,EAAkE;AACvE,YAAM,IAAI,KAAJ,CAAU,8CAAV,CAAN;AACD;AACD,aAAS,GAAG,IAAH,EAAS,MAAlB;AACD;AACD,MAAI,UAAU,EAAd;AACA,MAAI,aAAJ;AACA,OAAK,IAAI,MAAM,CAAf,EAAkB,MAAM,MAAxB,EAAgC,KAAhC,EAAuC;AACrC,WAAO,EAAP;AACA,SAAK,IAAI,MAAM,CAAf,EAAkB,MAAM,MAAM,MAA9B,EAAsC,KAAtC,EAA6C;AAC3C,WAAK,MAAM,GAAN,CAAL,IAAmB,GAAG,MAAM,GAAN,CAAH,EAAe,GAAf,CAAnB;AACD;AACD,YAAQ,IAAR,CAAa,IAAb;AACD;AACD,SAAO,OAAP;AACD;;AAED;;;;;;;IAMa,mB,WAAA,mB;AACX,+BAAY,OAAZ,EAAqB;AAAA;;AACnB,SAAK,QAAL,GAAgB,OAAhB;AACA,SAAK,KAAL,GAAa,EAAb;AACD;;;;uBAEE,S,EAAW,Q,EAAU;AACtB,UAAI,MAAM,KAAK,QAAL,CAAc,EAAd,CAAiB,SAAjB,EAA4B,QAA5B,CAAV;AACA,WAAK,KAAL,CAAW,GAAX,IAAkB,SAAlB;AACA,aAAO,GAAP;AACD;;;wBAEG,S,EAAW,Q,EAAU;AACvB,UAAI,MAAM,KAAK,QAAL,CAAc,GAAd,CAAkB,SAAlB,EAA6B,QAA7B,CAAV;AACA,UAAI,GAAJ,EAAS;AACP,eAAO,KAAK,KAAL,CAAW,GAAX,CAAP;AACD;AACD,aAAO,GAAP;AACD;;;yCAEoB;AAAA;;AACnB,UAAI,eAAe,KAAK,KAAxB;AACA,WAAK,KAAL,GAAa,EAAb;AACA,aAAO,IAAP,CAAY,YAAZ,EAA0B,OAA1B,CAAkC,UAAC,GAAD,EAAS;AACzC,cAAK,QAAL,CAAc,GAAd,CAAkB,aAAa,GAAb,CAAlB,EAAqC,GAArC;AACD,OAFD;AAGD;;;;;;;;;;;;;;;;;;ACpHH;;;;;;;;IAEqB,G;AACnB,eAAY,KAAZ,EAAmB,IAAnB,EAAyB,YAAa,KAAtC,EAA6C;AAAA;;AAC3C,SAAK,MAAL,GAAc,KAAd;AACA,SAAK,KAAL,GAAa,IAAb;AACA,SAAK,MAAL,GAAc,KAAd;AACA,SAAK,OAAL,GAAe,sBAAf;AACD;;;;0BAEK;AACJ,aAAO,KAAK,MAAZ;AACD;;;wBAEG,K,EAAO,YAAa,K,EAAO;AAC7B,UAAI,KAAK,MAAL,KAAgB,KAApB,EAA2B;AACzB;AACA;AACD;AACD,UAAI,WAAW,KAAK,MAApB;AACA,WAAK,MAAL,GAAc,KAAd;AACA;AACA,UAAI,MAAM,EAAV;AACA,UAAI,SAAS,QAAO,KAAP,yCAAO,KAAP,OAAkB,QAA/B,EAAyC;AACvC,aAAK,IAAI,CAAT,IAAc,KAAd,EAAqB;AACnB,cAAI,MAAM,cAAN,CAAqB,CAArB,CAAJ,EACE,IAAI,CAAJ,IAAS,MAAM,CAAN,CAAT;AACH;AACF;AACD,UAAI,QAAJ,GAAe,QAAf;AACA,UAAI,KAAJ,GAAY,KAAZ;AACA,WAAK,OAAL,CAAa,OAAb,CAAqB,QAArB,EAA+B,GAA/B,EAAoC,IAApC;;AAEA;AACA;AACA,UAAI,OAAO,KAAP,IAAgB,OAAO,KAAP,CAAa,aAAjC,EAAgD;AAC9C,eAAO,KAAP,CAAa,aAAb,CACE,mBACG,KAAK,MAAL,CAAY,IAAZ,KAAqB,IAArB,GAA4B,KAAK,MAAL,CAAY,IAAZ,GAAmB,GAA/C,GAAqD,EADxD,IAEE,KAAK,KAHT,EAIE,OAAO,KAAP,KAAkB,WAAlB,GAAgC,IAAhC,GAAuC,KAJzC;AAMD;AACF;;;uBAEE,S,EAAW,Q,EAAU;AACtB,aAAO,KAAK,OAAL,CAAa,EAAb,CAAgB,SAAhB,EAA2B,QAA3B,CAAP;AACD;;;wBAEG,S,EAAW,Q,EAAU;AACvB,aAAO,KAAK,OAAL,CAAa,GAAb,CAAiB,SAAjB,EAA4B,QAA5B,CAAP;AACD;;;;;;kBAjDkB,G",
+ "file": "generated.js",
+ "sourceRoot": "",
+ "sourcesContent": [
+ "(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()",
+ "export default class Events {\n constructor() {\n this._types = {};\n this._seq = 0;\n }\n\n on(eventType, listener) {\n let subs = this._types[eventType];\n if (!subs) {\n subs = this._types[eventType] = {};\n }\n let sub = \"sub\" + (this._seq++);\n subs[sub] = listener;\n return sub;\n }\n\n // Returns false if no match, or string for sub name if matched\n off(eventType, listener) {\n let subs = this._types[eventType];\n if (typeof(listener) === \"function\") {\n for (let key in subs) {\n if (subs.hasOwnProperty(key)) {\n if (subs[key] === listener) {\n delete subs[key];\n return key;\n }\n }\n }\n return false;\n } else if (typeof(listener) === \"string\") {\n if (subs && subs[listener]) {\n delete subs[listener];\n return listener;\n }\n return false;\n } else {\n throw new Error(\"Unexpected type for listener\");\n }\n }\n\n trigger(eventType, arg, thisObj) {\n let subs = this._types[eventType];\n for (let key in subs) {\n if (subs.hasOwnProperty(key)) {\n subs[key].call(thisObj, arg);\n }\n }\n }\n}\n",
+ "import Events from \"./events\";\nimport FilterSet from \"./filterset\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\nfunction getFilterSet(group) {\n let fsVar = group.var(\"filterset\");\n let result = fsVar.get();\n if (!result) {\n result = new FilterSet();\n fsVar.set(result);\n }\n return result;\n}\n\nlet id = 1;\nfunction nextId() {\n return id++;\n}\n\n/**\n * Use this class to contribute to, and listen for changes to, the filter set\n * for the given group of widgets. Filter input controls should create one\n * `FilterHandle` and only call {@link FilterHandle#set}. Output widgets that\n * wish to displayed filtered data should create one `FilterHandle` and use\n * the {@link FilterHandle#filteredKeys} property and listen for change\n * events.\n *\n * If two (or more) `FilterHandle` instances in the same webpage share the\n * same group name, they will contribute to a single \"filter set\". Each\n * `FilterHandle` starts out with a `null` value, which means they take\n * nothing away from the set of data that should be shown. To make a\n * `FilterHandle` actually remove data from the filter set, set its value to\n * an array of keys which should be displayed. Crosstalk will aggregate the\n * various key arrays by finding their intersection; only keys that are\n * present in all non-null filter handles are considered part of the filter\n * set.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the {@link FilterHandle#setGroup} method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class FilterHandle {\n constructor(group, extraInfo) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The filterSet that we're tracking, if any. Can change over time.\n this._filterSet = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._filterVar = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this._id = \"filter\" + nextId();\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this FilterHandle. If `set()` was\n * previously called on this handle, switching groups will clear those keys\n * from the old group's filter set. These keys will not be applied to the new\n * group's filter set either. In other words, `setGroup()` effectively calls\n * `clear()` before switching groups.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._filterVar) {\n this._filterVar.off(\"change\", this._varOnChangeSub);\n this.clear();\n this._varOnChangeSub = null;\n this._filterVar = null;\n this._filterSet = null;\n }\n\n this._group = group;\n\n if (group) {\n group = grp(group);\n this._filterSet = getFilterSet(group);\n this._filterVar = grp(group).var(\"filter\");\n let sub = this._filterVar.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n",
+ "import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n",
+ "import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n",
+ "import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n",
+ "let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n",
+ "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n",
+ "import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n",
+ "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n",
+ "import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n",
+ "export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n",
+ "import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n"
+ ]
+} \ No newline at end of file
diff --git a/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js
new file mode 100644
index 00000000..b7ec0ac9
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js
@@ -0,0 +1,2 @@
+!function o(u,a,l){function s(n,e){if(!a[n]){if(!u[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(f)return f(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[n]={exports:{}};u[n][0].call(i.exports,function(e){var t=u[n][1][e];return s(t||e)},i,i.exports,o,u,a,l)}return a[n].exports}for(var f="function"==typeof require&&require,e=0;e<l.length;e++)s(l[e]);return s}({1:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}();var i=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._types={},this._seq=0}return r(e,[{key:"on",value:function(e,t){var n=this._types[e];n||(n=this._types[e]={});var r="sub"+this._seq++;return n[r]=t,r}},{key:"off",value:function(e,t){var n=this._types[e];if("function"==typeof t){for(var r in n)if(n.hasOwnProperty(r)&&n[r]===t)return delete n[r],r;return!1}if("string"==typeof t)return!(!n||!n[t])&&(delete n[t],t);throw new Error("Unexpected type for listener")}},{key:"trigger",value:function(e,t,n){var r=this._types[e];for(var i in r)r.hasOwnProperty(i)&&r[i].call(n,t)}}]),e}();n.default=i},{}],2:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.FilterHandle=void 0;var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=l(e("./events")),o=l(e("./filterset")),u=l(e("./group")),a=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(e("./util"));function l(e){return e&&e.__esModule?e:{default:e}}var s=1;n.FilterHandle=function(){function n(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),this._eventRelay=new i.default,this._emitter=new a.SubscriptionTracker(this._eventRelay),this._group=null,this._filterSet=null,this._filterVar=null,this._varOnChangeSub=null,this._extraInfo=a.extend({sender:this},t),this._id="filter"+s++,this.setGroup(e)}return r(n,[{key:"setGroup",value:function(e){var t,n,r=this;if(this._group!==e&&((this._group||e)&&(this._filterVar&&(this._filterVar.off("change",this._varOnChangeSub),this.clear(),this._varOnChangeSub=null,this._filterVar=null,this._filterSet=null),this._group=e))){e=(0,u.default)(e),this._filterSet=(t=e.var("filterset"),(n=t.get())||(n=new o.default,t.set(n)),n),this._filterVar=(0,u.default)(e).var("filter");var i=this._filterVar.on("change",function(e){r._eventRelay.trigger("change",e,r)});this._varOnChangeSub=i}}},{key:"_mergeExtraInfo",value:function(e){return a.extend({},this._extraInfo?this._extraInfo:null,e||null)}},{key:"close",value:function(){this._emitter.removeAllListeners(),this.clear(),this.setGroup(null)}},{key:"clear",value:function(e){this._filterSet&&(this._filterSet.clear(this._id),this._onChange(e))}},{key:"set",value:function(e,t){this._filterSet&&(this._filterSet.update(this._id,e),this._onChange(t))}},{key:"on",value:function(e,t){return this._emitter.on(e,t)}},{key:"off",value:function(e,t){return this._emitter.off(e,t)}},{key:"_onChange",value:function(e){this._filterSet&&this._filterVar.set(this._filterSet.value,this._mergeExtraInfo(e))}},{key:"filteredKeys",get:function(){return this._filterSet?this._filterSet.value:null}}]),n}()},{"./events":1,"./filterset":3,"./group":4,"./util":11}],3:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),a=e("./util");function l(e,t){return e===t?0:e<t?-1:t<e?1:void 0}var i=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.reset()}return r(e,[{key:"reset",value:function(){this._handles={},this._keys={},this._value=null,this._activeHandles=0}},{key:"update",value:function(e,t){null!==t&&(t=t.slice(0)).sort(l);var n=(0,a.diffSortedLists)(this._handles[e],t),r=n.added,i=n.removed;this._handles[e]=t;for(var o=0;o<r.length;o++)this._keys[r[o]]=(this._keys[r[o]]||0)+1;for(var u=0;u<i.length;u++)this._keys[i[u]]--;this._updateValue(t)}},{key:"_updateValue",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this._allKeys,t=Object.keys(this._handles).length;if(0===t)this._value=null;else{this._value=[];for(var n=0;n<e.length;n++){this._keys[e[n]]===t&&this._value.push(e[n])}}}},{key:"clear",value:function(e){if(void 0!==this._handles[e]){var t=this._handles[e];t||(t=[]);for(var n=0;n<t.length;n++)this._keys[t[n]]--;delete this._handles[e],this._updateValue()}}},{key:"value",get:function(){return this._value}},{key:"_allKeys",get:function(){var e=Object.keys(this._keys);return e.sort(l),e}}]),e}();n.default=i},{"./util":11}],4:[function(l,e,s){(function(e){"use strict";Object.defineProperty(s,"__esModule",{value:!0});var n=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};s.default=function e(t){{if(t&&"string"==typeof t)return u.hasOwnProperty(t)||(u[t]=new a(t)),u[t];if("object"===(void 0===t?"undefined":r(t))&&t._vars&&t.var)return t;if(Array.isArray(t)&&1==t.length&&"string"==typeof t[0])return e(t[0]);throw new Error("Invalid groupName argument")}};var t,i=l("./var"),o=(t=i)&&t.__esModule?t:{default:t};e.__crosstalk_groups=e.__crosstalk_groups||{};var u=e.__crosstalk_groups;var a=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.name=e,this._vars={}}return n(t,[{key:"var",value:function(e){if(!e||"string"!=typeof e)throw new Error("Invalid var name");return this._vars.hasOwnProperty(e)||(this._vars[e]=new o.default(this,e)),this._vars[e]}},{key:"has",value:function(e){if(!e||"string"!=typeof e)throw new Error("Invalid var name");return this._vars.hasOwnProperty(e)}}]),t}()}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./var":12}],5:[function(f,e,c){(function(e){"use strict";Object.defineProperty(c,"__esModule",{value:!0});var t,n=f("./group"),r=(t=n)&&t.__esModule?t:{default:t},i=f("./selection"),o=f("./filter"),u=f("./input");f("./input_selectize"),f("./input_checkboxgroup"),f("./input_slider");var a=(0,r.default)("default");function l(e){return a.var(e)}e.Shiny&&e.Shiny.addCustomMessageHandler("update-client-value",function(e){"string"==typeof e.group?(0,r.default)(e.group).var(e.name).set(e.value):l(e.name).set(e.value)});var s={group:r.default,var:l,has:function(e){return a.has(e)},SelectionHandle:i.SelectionHandle,FilterHandle:o.FilterHandle,bind:u.bind};c.default=s,e.crosstalk=s}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(e,t,a){(function(t){"use strict";Object.defineProperty(a,"__esModule",{value:!0}),a.register=function(e){r[e.className]=e,t.document&&"complete"!==t.document.readyState?o(function(){n()}):t.document&&setTimeout(n,100)},a.bind=n;var o=t.jQuery,r={};function n(){Object.keys(r).forEach(function(e){var n=r[e];o("."+n.className).not(".crosstalk-input-bound").each(function(e,t){i(n,t)})})}function i(e,t){var n=o(t).find("script[type='application/json'][data-for='"+t.id.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")+"']"),r=JSON.parse(n[0].innerText),i=e.factory(t,r);o(t).data("crosstalk-instance",i),o(t).addClass("crosstalk-input-bound")}if(t.Shiny){var e=new t.Shiny.InputBinding,u=t.jQuery;u.extend(e,{find:function(e){return u(e).find(".crosstalk-input")},initialize:function(e){var t,n;u(e).hasClass("crosstalk-input-bound")||(n=o(t=e),Object.keys(r).forEach(function(e){n.hasClass(e)&&!n.hasClass("crosstalk-input-bound")&&i(r[e],t)}))},getId:function(e){return e.id},getValue:function(e){},setValue:function(e,t){},receiveMessage:function(e,t){},subscribe:function(e,t){u(e).data("crosstalk-instance").resume()},unsubscribe:function(e){u(e).data("crosstalk-instance").suspend()}}),t.Shiny.inputBindings.register(e,"crosstalk.inputBinding")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(r,e,t){(function(e){"use strict";var t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(r("./input")),n=r("./filter");var a=e.jQuery;t.register({className:"crosstalk-input-checkboxgroup",factory:function(e,r){var i=new n.FilterHandle(r.group),o=void 0,u=a(e);return u.on("change","input[type='checkbox']",function(){var e=u.find("input[type='checkbox']:checked");if(0===e.length)o=null,i.clear();else{var t={};e.each(function(){r.map[this.value].forEach(function(e){t[e]=!0})});var n=Object.keys(t);n.sort(),o=n,i.set(n)}}),{suspend:function(){i.clear()},resume:function(){o&&i.set(o)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6}],8:[function(r,e,t){(function(e){"use strict";var t=n(r("./input")),l=n(r("./util")),s=r("./filter");function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var f=e.jQuery;t.register({className:"crosstalk-input-select",factory:function(e,n){var t=l.dataframeToD3(n.items),r={options:[{value:"",label:"(All)"}].concat(t),valueField:"value",labelField:"label",searchField:"label"},i=f(e).find("select")[0],o=f(i).selectize(r)[0].selectize,u=new s.FilterHandle(n.group),a=void 0;return o.on("change",function(){if(0===o.items.length)a=null,u.clear();else{var t={};o.items.forEach(function(e){n.map[e].forEach(function(e){t[e]=!0})});var e=Object.keys(t);e.sort(),a=e,u.set(e)}}),{suspend:function(){u.clear()},resume:function(){a&&u.set(a)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6,"./util":11}],9:[function(n,e,t){(function(e){"use strict";var d=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(n("./input")),a=n("./filter");var v=e.jQuery,p=e.strftime;function y(e,t){for(var n=e.toString();n.length<t;)n="0"+n;return n}t.register({className:"crosstalk-input-slider",factory:function(e,l){var s=new a.FilterHandle(l.group),t={},f=v(e).find("input"),n=f.data("data-type"),r=f.data("time-format"),i=f.data("round"),o=void 0;if("date"===n)o=p.utc(),t.prettify=function(e){return o(r,new Date(e))};else if("datetime"===n){var u=f.data("timezone");o=u?p.timezone(u):p,t.prettify=function(e){return o(r,new Date(e))}}else"number"===n&&void 0!==i&&(t.prettify=function(e){var t=Math.pow(10,i);return Math.round(e*t)/t});function c(){var e=f.data("ionRangeSlider").result,t=void 0,n=f.data("data-type");return t="date"===n?function(e){return(t=new Date(+e))instanceof Date?t.getUTCFullYear()+"-"+y(t.getUTCMonth()+1,2)+"-"+y(t.getUTCDate(),2):null;var t}:"datetime"===n?function(e){return+e/1e3}:function(e){return+e},"double"===f.data("ionRangeSlider").options.type?[t(e.from),t(e.to)]:t(e.from)}f.ionRangeSlider(t);var h=null;return f.on("change.crosstalkSliderInput",function(e){if(!f.data("updating")&&!f.data("animating")){for(var t=c(),n=d(t,2),r=n[0],i=n[1],o=[],u=0;u<l.values.length;u++){var a=l.values[u];r<=a&&a<=i&&o.push(l.keys[u])}o.sort(),s.set(o),h=o}}),{suspend:function(){s.clear()},resume:function(){h&&s.set(h)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.SelectionHandle=void 0;var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),i=a(e("./events")),o=a(e("./group")),u=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(e("./util"));function a(e){return e&&e.__esModule?e:{default:e}}n.SelectionHandle=function(){function n(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:null,t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),this._eventRelay=new i.default,this._emitter=new u.SubscriptionTracker(this._eventRelay),this._group=null,this._var=null,this._varOnChangeSub=null,this._extraInfo=u.extend({sender:this},t),this.setGroup(e)}return r(n,[{key:"setGroup",value:function(e){var t=this;if(this._group!==e&&(this._group||e)&&(this._var&&(this._var.off("change",this._varOnChangeSub),this._var=null,this._varOnChangeSub=null),this._group=e)){this._var=(0,o.default)(e).var("selection");var n=this._var.on("change",function(e){t._eventRelay.trigger("change",e,t)});this._varOnChangeSub=n}}},{key:"_mergeExtraInfo",value:function(e){return u.extend({},this._extraInfo?this._extraInfo:null,e||null)}},{key:"set",value:function(e,t){this._var&&this._var.set(e,this._mergeExtraInfo(t))}},{key:"clear",value:function(e){this._var&&this.set(void 0,this._mergeExtraInfo(e))}},{key:"on",value:function(e,t){return this._emitter.on(e,t)}},{key:"off",value:function(e,t){return this._emitter.off(e,t)}},{key:"close",value:function(){this._emitter.removeAllListeners(),this.setGroup(null)}},{key:"value",get:function(){return this._var?this._var.get():null}}]),n}()},{"./events":1,"./group":4,"./util":11}],11:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function u(e){for(var t=1;t<e.length;t++)if(e[t]<=e[t-1])throw new Error("List is not sorted or contains duplicate")}n.extend=function(e){for(var t=arguments.length,n=Array(1<t?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];for(var i=0;i<n.length;i++){var o=n[i];if(null!=o)for(var u in o)o.hasOwnProperty(u)&&(e[u]=o[u])}return e},n.checkSorted=u,n.diffSortedLists=function(e,t){var n=0,r=0;e||(e=[]);t||(t=[]);var i=[],o=[];u(e),u(t);for(;n<e.length&&r<t.length;)e[n]===t[r]?(n++,r++):e[n]<t[r]?i.push(e[n++]):o.push(t[r++]);n<e.length&&(i=i.concat(e.slice(n)));r<t.length&&(o=o.concat(t.slice(r)));return{removed:i,added:o}},n.dataframeToD3=function(e){var t=[],n=void 0;for(var r in e){if(e.hasOwnProperty(r)&&t.push(r),"object"!==l(e[r])||void 0===e[r].length)throw new Error("All fields must be arrays");if(void 0!==n&&n!==e[r].length)throw new Error("All fields must be arrays of the same length");n=e[r].length}for(var i=[],o=void 0,u=0;u<n;u++){o={};for(var a=0;a<t.length;a++)o[t[a]]=e[t[a]][u];i.push(o)}return i};n.SubscriptionTracker=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this._emitter=e,this._subs={}}return r(t,[{key:"on",value:function(e,t){var n=this._emitter.on(e,t);return this._subs[n]=e,n}},{key:"off",value:function(e,t){var n=this._emitter.off(e,t);return n&&delete this._subs[n],n}},{key:"removeAllListeners",value:function(){var t=this,n=this._subs;this._subs={},Object.keys(n).forEach(function(e){t._emitter.off(n[e],e)})}}]),t}()},{}],12:[function(a,e,l){(function(o){"use strict";Object.defineProperty(l,"__esModule",{value:!0});var e,u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),n=a("./events"),i=(e=n)&&e.__esModule?e:{default:e};var r=function(){function r(e,t,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this._group=e,this._name=t,this._value=n,this._events=new i.default}return t(r,[{key:"get",value:function(){return this._value}},{key:"set",value:function(e,t){if(this._value!==e){var n=this._value;this._value=e;var r={};if(t&&"object"===(void 0===t?"undefined":u(t)))for(var i in t)t.hasOwnProperty(i)&&(r[i]=t[i]);r.oldValue=n,r.value=e,this._events.trigger("change",r,this),o.Shiny&&o.Shiny.onInputChange&&o.Shiny.onInputChange(".clientValue-"+(null!==this._group.name?this._group.name+"-":"")+this._name,void 0===e?null:e)}}},{key:"on",value:function(e,t){return this._events.on(e,t)}},{key:"off",value:function(e,t){return this._events.off(e,t)}}]),r}();l.default=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./events":1}]},{},[5]);
+//# sourceMappingURL=crosstalk.min.js.map \ No newline at end of file
diff --git a/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js.map b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js.map
new file mode 100644
index 00000000..886ebeef
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/js/crosstalk.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/browser-pack/_prelude.js","javascript/src/events.js","javascript/src/filter.js","javascript/src/filterset.js","javascript/src/group.js","javascript/src/index.js","javascript/src/input.js","javascript/src/input_checkboxgroup.js","javascript/src/input_selectize.js","javascript/src/input_slider.js","javascript/src/selection.js","javascript/src/util.js","javascript/src/var.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","Events","_classCallCheck","this","_types","_seq","eventType","listener","subs","sub","key","hasOwnProperty","arg","thisObj","util","id","FilterHandle","group","extraInfo","_eventRelay","_events2","default","_emitter","SubscriptionTracker","_group","_filterSet","_filterVar","_varOnChangeSub","_extraInfo","extend","sender","_id","setGroup","fsVar","result","_this","off","clear","_group2","var","get","_filterset2","set","on","trigger","removeAllListeners","_onChange","keys","update","value","_mergeExtraInfo","_util","naturalComparator","b","FilterSet","reset","_handles","_keys","_value","_activeHandles","handleId","slice","sort","_diffSortedLists","diffSortedLists","added","removed","_i","_updateValue","arguments","undefined","_allKeys","handleCount","Object","push","allKeys","groupName","groups","Group","_typeof","_vars","Array","isArray","_var2","global","__crosstalk_groups","name","_var3","_selection","_filter","_input","defaultGroup","var_","Shiny","addCustomMessageHandler","message","crosstalk","has","SelectionHandle","bind","register","reg","bindings","className","document","readyState","$","setTimeout","jQuery","forEach","binding","not","each","el","bindInstance","jsonEl","find","replace","data","JSON","parse","innerText","instance","factory","addClass","inputBinding","InputBinding","_$","scope","initialize","$el","hasClass","getId","getValue","setValue","receiveMessage","subscribe","callback","resume","unsubscribe","suspend","inputBindings","input","ctHandle","lastKnownKeys","checked","map","keyArray","items","dataframeToD3","opts","options","label","concat","valueField","labelField","searchField","select","selectize","strftime","padZeros","digits","str","toString","dataType","timeFormat","round","timeFormatter","utc","prettify","num","Date","timezone","factor","Math","pow","convert","val","date","getUTCFullYear","getUTCMonth","getUTCDate","type","from","to","ionRangeSlider","event","_getValue","_getValue2","_slicedToArray","values","_var","selectedKeys","checkSorted","list","target","_len","sources","_key","src","i_a","i_b","a_only","b_only","df","names","results","item","row","col","emitter","_subs","current_subs","_events","Var","_name","oldValue","evt","k","onInputChange"],"mappings":"CAAA,SAAAA,EAAAC,EAAAC,EAAAC,GAAA,SAAAC,EAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,IAAAE,EAAA,mBAAAC,SAAAA,QAAA,IAAAF,GAAAC,EAAA,OAAAA,EAAAF,GAAA,GAAA,GAAAI,EAAA,OAAAA,EAAAJ,GAAA,GAAA,IAAAK,EAAA,IAAAC,MAAA,uBAAAN,EAAA,KAAA,MAAAK,EAAAE,KAAA,mBAAAF,EAAA,IAAAG,EAAAX,EAAAG,IAAAS,YAAAb,EAAAI,GAAA,GAAAU,KAAAF,EAAAC,QAAA,SAAAd,GAAA,IAAAE,EAAAD,EAAAI,GAAA,GAAAL,GAAA,OAAAI,EAAAF,GAAAF,IAAAa,EAAAA,EAAAC,QAAAd,EAAAC,EAAAC,EAAAC,GAAA,OAAAD,EAAAG,GAAAS,QAAA,IAAA,IAAAL,EAAA,mBAAAD,SAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAa,OAAAX,IAAAD,EAAAD,EAAAE,IAAA,OAAAD,EAAA,EAAAa,GAAA,SAAAT,EAAAU,EAAAJ,8TCAqBK,aACnB,SAAAA,iGAAcC,CAAAC,KAAAF,GACZE,KAAKC,UACLD,KAAKE,KAAO,uCAGXC,EAAWC,GACZ,IAAIC,EAAOL,KAAKC,OAAOE,GAClBE,IACHA,EAAOL,KAAKC,OAAOE,OAErB,IAAIG,EAAM,MAASN,KAAKE,OAExB,OADAG,EAAKC,GAAOF,EACLE,8BAILH,EAAWC,GACb,IAAIC,EAAOL,KAAKC,OAAOE,GACvB,GAAyB,mBAAdC,EAA0B,CACnC,IAAK,IAAIG,KAAOF,EACd,GAAIA,EAAKG,eAAeD,IAClBF,EAAKE,KAASH,EAEhB,cADOC,EAAKE,GACLA,EAIb,OAAO,EACF,GAAyB,iBAAdH,EAChB,SAAIC,IAAQA,EAAKD,aACRC,EAAKD,GACLA,GAIT,MAAM,IAAId,MAAM,gEAIZa,EAAWM,EAAKC,GACtB,IAAIL,EAAOL,KAAKC,OAAOE,GACvB,IAAK,IAAII,KAAOF,EACVA,EAAKG,eAAeD,IACtBF,EAAKE,GAAKb,KAAKgB,EAASD,sBA5CXX,2WCArBX,EAAA,iBACAA,EAAA,oBACAA,EAAA,YACYwB,4JAAZxB,EAAA,8DAYA,IAAIyB,EAAK,IA6BIC,wBACX,SAAAA,EAAYC,EAAOC,gGAAWhB,CAAAC,KAAAa,GAC5Bb,KAAKgB,YAAc,IAAAC,EAAAC,QACnBlB,KAAKmB,SAAW,IAAIR,EAAKS,oBAAoBpB,KAAKgB,aAGlDhB,KAAKqB,OAAS,KAEdrB,KAAKsB,WAAa,KAElBtB,KAAKuB,WAAa,KAElBvB,KAAKwB,gBAAkB,KAEvBxB,KAAKyB,WAAad,EAAKe,QAASC,OAAQ3B,MAAQe,GAEhDf,KAAK4B,IAAM,SA3CNhB,IA6CLZ,KAAK6B,SAASf,8CAaPA,GAAO,IArEZgB,EACAC,EAoEYC,EAAAhC,KAEd,GAAIA,KAAKqB,SAAWP,KAGfd,KAAKqB,QAAWP,KAGjBd,KAAKuB,aACPvB,KAAKuB,WAAWU,IAAI,SAAUjC,KAAKwB,iBACnCxB,KAAKkC,QACLlC,KAAKwB,gBAAkB,KACvBxB,KAAKuB,WAAa,KAClBvB,KAAKsB,WAAa,MAGpBtB,KAAKqB,OAASP,IAEH,CACTA,GAAQ,EAAAqB,EAAAjB,SAAIJ,GACZd,KAAKsB,YAzFLQ,EAyF+BhB,EAzFjBsB,IAAI,cAClBL,EAASD,EAAMO,SAEjBN,EAAS,IAAAO,EAAApB,QACTY,EAAMS,IAAIR,IAELA,GAoFH/B,KAAKuB,YAAa,EAAAY,EAAAjB,SAAIJ,GAAOsB,IAAI,UACjC,IAAI9B,EAAMN,KAAKuB,WAAWiB,GAAG,SAAU,SAAC7D,GACtCqD,EAAKhB,YAAYyB,QAAQ,SAAU9D,EAAnCqD,KAEFhC,KAAKwB,gBAAkBlB,2CASXS,GACd,OAAOJ,EAAKe,UACV1B,KAAKyB,WAAazB,KAAKyB,WAAa,KACpCV,GAAwB,sCAQ1Bf,KAAKmB,SAASuB,qBACd1C,KAAKkC,QACLlC,KAAK6B,SAAS,oCAYVd,GACCf,KAAKsB,aAEVtB,KAAKsB,WAAWY,MAAMlC,KAAK4B,KAC3B5B,KAAK2C,UAAU5B,gCAoBb6B,EAAM7B,GACHf,KAAKsB,aAEVtB,KAAKsB,WAAWuB,OAAO7C,KAAK4B,IAAKgB,GACjC5C,KAAK2C,UAAU5B,+BAsBdZ,EAAWC,GACZ,OAAOJ,KAAKmB,SAASqB,GAAGrC,EAAWC,+BAWjCD,EAAWC,GACb,OAAOJ,KAAKmB,SAASc,IAAI9B,EAAWC,qCAG5BW,GACHf,KAAKsB,YAEVtB,KAAKuB,WAAWgB,IAAIvC,KAAKsB,WAAWwB,MAAO9C,KAAK+C,gBAAgBhC,yCAhChE,OAAOf,KAAKsB,WAAatB,KAAKsB,WAAWwB,MAAQ,iZC3KrDE,EAAA7D,EAAA,UAEA,SAAS8D,EAAkB/D,EAAGgE,GAC5B,OAAIhE,IAAMgE,EACD,EACEhE,EAAIgE,GACL,EACKA,EAAJhE,EACF,OADF,MAQYiE,aACnB,SAAAA,iGAAcpD,CAAAC,KAAAmD,GACZnD,KAAKoD,kDAKLpD,KAAKqD,YAELrD,KAAKsD,SACLtD,KAAKuD,OAAS,KACdvD,KAAKwD,eAAiB,iCAOjBC,EAAUb,GACF,OAATA,IACFA,EAAOA,EAAKc,MAAM,IACbC,KAAKV,GAHS,IAAAW,GAME,EAAAZ,EAAAa,iBAAgB7D,KAAKqD,SAASI,GAAWb,GAA3DkB,EANgBF,EAMhBE,MAAOC,EANSH,EAMTG,QACZ/D,KAAKqD,SAASI,GAAYb,EAE1B,IAAK,IAAIxD,EAAI,EAAGA,EAAI0E,EAAMnE,OAAQP,IAChCY,KAAKsD,MAAMQ,EAAM1E,KAAOY,KAAKsD,MAAMQ,EAAM1E,KAAO,GAAK,EAEvD,IAAK,IAAI4E,EAAI,EAAGA,EAAID,EAAQpE,OAAQqE,IAClChE,KAAKsD,MAAMS,EAAQC,MAGrBhE,KAAKiE,aAAarB,0CAQe,IAAtBA,EAAsB,EAAAsB,UAAAvE,aAAAwE,IAAAD,UAAA,GAAAA,UAAA,GAAflE,KAAKoE,SACnBC,EAAcC,OAAO1B,KAAK5C,KAAKqD,UAAU1D,OAC7C,GAAoB,IAAhB0E,EACFrE,KAAKuD,OAAS,SACT,CACLvD,KAAKuD,UACL,IAAK,IAAInE,EAAI,EAAGA,EAAIwD,EAAKjD,OAAQP,IAAK,CACxBY,KAAKsD,MAAMV,EAAKxD,MACdiF,GACZrE,KAAKuD,OAAOgB,KAAK3B,EAAKxD,oCAMxBqE,GACJ,QAAwC,IAA7BzD,KAAKqD,SAASI,GAAzB,CAIA,IAAIb,EAAO5C,KAAKqD,SAASI,GACpBb,IACHA,MAGF,IAAK,IAAIxD,EAAI,EAAGA,EAAIwD,EAAKjD,OAAQP,IAC/BY,KAAKsD,MAAMV,EAAKxD,aAEXY,KAAKqD,SAASI,GAErBzD,KAAKiE,8CAzDL,OAAOjE,KAAKuD,wCA6DZ,IAAIiB,EAAUF,OAAO1B,KAAK5C,KAAKsD,OAE/B,OADAkB,EAAQb,KAAKV,GACNuB,qBA9EUrB,+jBCRN,SAASrC,EAAM2D,GAC5B,CAAA,GAAIA,GAAmC,iBAAfA,EAItB,OAHKC,EAAOlE,eAAeiE,KACzBC,EAAOD,GAAa,IAAIE,EAAMF,IAEzBC,EAAOD,GACT,GAA0B,iBAAtB,IAAOA,EAAP,YAAAG,EAAOH,KAA2BA,EAAUI,OAASJ,EAAUrC,IAExE,OAAOqC,EACF,GAAIK,MAAMC,QAAQN,IACD,GAApBA,EAAU9E,QACe,iBAAlB8E,EAAU,GACnB,OAAO3D,EAAM2D,EAAU,IAEvB,MAAM,IAAInF,MAAM,gCArBpB,MAAA0F,EAAA7F,EAAA,6CAIA8F,EAAOC,mBAAqBD,EAAOC,uBACnC,IAAIR,EAASO,EAAOC,uBAoBdP,aACJ,SAAAA,EAAYQ,gGAAMpF,CAAAC,KAAA2E,GAChB3E,KAAKmF,KAAOA,EACZnF,KAAK6E,+CAGHM,GACF,IAAKA,GAAyB,iBAAVA,EAClB,MAAM,IAAI7F,MAAM,oBAKlB,OAFKU,KAAK6E,MAAMrE,eAAe2E,KAC7BnF,KAAK6E,MAAMM,GAAQ,IAAAC,EAAAlE,QAAQlB,KAAMmF,IAC5BnF,KAAK6E,MAAMM,+BAGhBA,GACF,IAAKA,GAAyB,iBAAVA,EAClB,MAAM,IAAI7F,MAAM,oBAGlB,OAAOU,KAAK6E,MAAMrE,eAAe2E,2OC9CrC,MAAA9D,EAAAlC,EAAA,+CACAkG,EAAAlG,EAAA,eACAmG,EAAAnG,EAAA,YACAoG,EAAApG,EAAA,WACAA,EAAA,qBACAA,EAAA,yBACAA,EAAA,kBAEA,IAAMqG,GAAe,EAAArD,EAAAjB,SAAM,WAE3B,SAASuE,EAAKN,GACZ,OAAOK,EAAapD,IAAI+C,GAOtBF,EAAOS,OACTT,EAAOS,MAAMC,wBAAwB,sBAAuB,SAASC,GACrC,iBAAnBA,EAAQ9E,OACjB,EAAAqB,EAAAjB,SAAM0E,EAAQ9E,OAAOsB,IAAIwD,EAAQT,MAAM5C,IAAIqD,EAAQ9C,OAEnD2C,EAAKG,EAAQT,MAAM5C,IAAIqD,EAAQ9C,SAKrC,IAAM+C,GACJ/E,MAAAqB,EAAAjB,QACAkB,IAAKqD,EACLK,IAjBF,SAAaX,GACX,OAAOK,EAAaM,IAAIX,IAiBxBY,gBAAAV,EAAAU,gBACAlF,aAAAyE,EAAAzE,aACAmF,KAAAT,EAAAS,gBAMaH,EACfZ,EAAOY,UAAYA,iVCrCHI,SAAT,SAAkBC,GACvBC,EAASD,EAAIE,WAAaF,EACtBjB,EAAOoB,UAA2C,aAA/BpB,EAAOoB,SAASC,WACrCC,EAAE,WACAP,MAEOf,EAAOoB,UAChBG,WAAWR,EAAM,QAILA,KAAAA,EAfhB,IAAIO,EAAItB,EAAOwB,OAEXN,KAaG,SAASH,IACd1B,OAAO1B,KAAKuD,GAAUO,QAAQ,SAASN,GACrC,IAAIO,EAAUR,EAASC,GACvBG,EAAE,IAAMI,EAAQP,WAAWQ,IAAI,0BAA0BC,KAAK,SAASzH,EAAG0H,GACxEC,EAAaJ,EAASG,OAoB5B,SAASC,EAAaJ,EAASG,GAC7B,IAAIE,EAAST,EAAEO,GAAIG,KAAK,6CAAuDH,EAAGlG,GAdvEsG,QAAQ,wCAAyC,QAc4B,MACpFC,EAAOC,KAAKC,MAAML,EAAO,GAAGM,WAE5BC,EAAWZ,EAAQa,QAAQV,EAAIK,GACnCZ,EAAEO,GAAIK,KAAK,qBAAsBI,GACjChB,EAAEO,GAAIW,SAAS,yBAGjB,GAAIxC,EAAOS,MAAO,CAChB,IAAIgC,EAAe,IAAIzC,EAAOS,MAAMiC,aAChCC,EAAI3C,EAAOwB,OACfmB,EAAElG,OAAOgG,GACPT,KAAM,SAASY,GACb,OAAOD,EAAEC,GAAOZ,KAAK,qBAEvBa,WAAY,SAAShB,GA1BzB,IAAgBA,EACViB,EA0BKH,EAAEd,GAAIkB,SAAS,2BA1BpBD,EAAMxB,EADIO,EA4BDA,GA1BbxC,OAAO1B,KAAKuD,GAAUO,QAAQ,SAASN,GACjC2B,EAAIC,SAAS5B,KAAe2B,EAAIC,SAAS,0BAE3CjB,EADcZ,EAASC,GACDU,OA0BxBmB,MAAO,SAASnB,GACd,OAAOA,EAAGlG,IAEZsH,SAAU,SAASpB,KAGnBqB,SAAU,SAASrB,EAAIhE,KAGvBsF,eAAgB,SAAStB,EAAIK,KAG7BkB,UAAW,SAASvB,EAAIwB,GACtBV,EAAEd,GAAIK,KAAK,sBAAsBoB,UAEnCC,YAAa,SAAS1B,GACpBc,EAAEd,GAAIK,KAAK,sBAAsBsB,aAGrCxD,EAAOS,MAAMgD,cAAczC,SAASyB,EAAc,+LC/EpD,IAAYiB,4JAAZxJ,EAAA,YACAmG,EAAAnG,EAAA,YAEA,IAAIoH,EAAItB,EAAOwB,OAEfkC,EAAM1C,UACJG,UAAW,gCAEXoB,QAAS,SAASV,EAAIK,GAKpB,IAAIyB,EAAW,IAAAtD,EAAAzE,aAAiBsG,EAAKrG,OAEjC+H,OAAA,EACAd,EAAMxB,EAAEO,GAoBZ,OAnBAiB,EAAIvF,GAAG,SAAU,yBAA0B,WACzC,IAAIsG,EAAUf,EAAId,KAAK,kCACvB,GAAuB,IAAnB6B,EAAQnJ,OACVkJ,EAAgB,KAChBD,EAAS1G,YACJ,CACL,IAAIU,KACJkG,EAAQjC,KAAK,WACXM,EAAK4B,IAAI/I,KAAK8C,OAAO4D,QAAQ,SAASnG,GACpCqC,EAAKrC,IAAO,MAGhB,IAAIyI,EAAW1E,OAAO1B,KAAKA,GAC3BoG,EAASrF,OACTkF,EAAgBG,EAChBJ,EAASrG,IAAIyG,OAKfP,QAAS,WACPG,EAAS1G,SAEXqG,OAAQ,WACFM,GACFD,EAASrG,IAAIsG,oMC1CvB,IAAYF,IAAZxJ,EAAA,YACYwB,IAAZxB,EAAA,WACAmG,EAAAnG,EAAA,qKAEA,IAAIoH,EAAItB,EAAOwB,OAEfkC,EAAM1C,UACJG,UAAW,yBAEXoB,QAAS,SAASV,EAAIK,GAOpB,IACI8B,EAAQtI,EAAKuI,cAAc/B,EAAK8B,OAChCE,GACFC,UAHYtG,MAAO,GAAIuG,MAAO,UAGfC,OAAOL,GACtBM,WAAY,QACZC,WAAY,QACZC,YAAa,SAGXC,EAASnD,EAAEO,GAAIG,KAAK,UAAU,GAE9B0C,EAAYpD,EAAEmD,GAAQC,UAAUR,GAAM,GAAGQ,UAEzCf,EAAW,IAAAtD,EAAAzE,aAAiBsG,EAAKrG,OAEjC+H,OAAA,EAmBJ,OAlBAc,EAAUnH,GAAG,SAAU,WACrB,GAA+B,IAA3BmH,EAAUV,MAAMtJ,OAClBkJ,EAAgB,KAChBD,EAAS1G,YACJ,CACL,IAAIU,KACJ+G,EAAUV,MAAMvC,QAAQ,SAAS5F,GAC/BqG,EAAK4B,IAAIjI,GAAO4F,QAAQ,SAASnG,GAC/BqC,EAAKrC,IAAO,MAGhB,IAAIyI,EAAW1E,OAAO1B,KAAKA,GAC3BoG,EAASrF,OACTkF,EAAgBG,EAChBJ,EAASrG,IAAIyG,OAKfP,QAAS,WACPG,EAAS1G,SAEXqG,OAAQ,WACFM,GACFD,EAASrG,IAAIsG,kmBCxDXF,4JAAZxJ,EAAA,YACAmG,EAAAnG,EAAA,YAEA,IAAIoH,EAAItB,EAAOwB,OACXmD,EAAW3E,EAAO2E,SA2HtB,SAASC,EAAShL,EAAGiL,GAEnB,IADA,IAAIC,EAAMlL,EAAEmL,WACLD,EAAIpK,OAASmK,GAClBC,EAAM,IAAMA,EACd,OAAOA,EA7HTpB,EAAM1C,UACJG,UAAW,yBAEXoB,QAAS,SAASV,EAAIK,GAKpB,IAAIyB,EAAW,IAAAtD,EAAAzE,aAAiBsG,EAAKrG,OAEjCqI,KACApB,EAAMxB,EAAEO,GAAIG,KAAK,SACjBgD,EAAWlC,EAAIZ,KAAK,aACpB+C,EAAanC,EAAIZ,KAAK,eACtBgD,EAAQpC,EAAIZ,KAAK,SACjBiD,OAAA,EAGJ,GAAiB,SAAbH,EACFG,EAAgBR,EAASS,MACzBlB,EAAKmB,SAAW,SAASC,GACvB,OAAOH,EAAcF,EAAY,IAAIM,KAAKD,UAGvC,GAAiB,aAAbN,EAAyB,CAClC,IAAIQ,EAAW1C,EAAIZ,KAAK,YAEtBiD,EADEK,EACcb,EAASa,SAASA,GAElBb,EAElBT,EAAKmB,SAAW,SAASC,GACvB,OAAOH,EAAcF,EAAY,IAAIM,KAAKD,SAEtB,WAAbN,QACY,IAAVE,IACThB,EAAKmB,SAAW,SAASC,GACvB,IAAIG,EAASC,KAAKC,IAAI,GAAIT,GAC1B,OAAOQ,KAAKR,MAAMI,EAAMG,GAAUA,IAMxC,SAASxC,IACP,IAAInG,EAASgG,EAAIZ,KAAK,kBAAkBpF,OAGpC8I,OAAA,EACAZ,EAAWlC,EAAIZ,KAAK,aAcxB,OAZE0D,EADe,SAAbZ,EACQ,SAASa,GACjB,OA8EaC,EA9EQ,IAAIP,MAAMM,cA+EnBN,KACXO,EAAKC,iBAAmB,IACxBnB,EAASkB,EAAKE,cAAc,EAAG,GAAK,IACpCpB,EAASkB,EAAKG,aAAc,GAG5B,KAPX,IAAuBH,GA5EO,aAAbd,EACC,SAASa,GAEjB,OAAQA,EAAM,KAGN,SAASA,GAAO,OAAQA,GAGY,WAA5C/C,EAAIZ,KAAK,kBAAkBiC,QAAQ+B,MAC7BN,EAAQ9I,EAAOqJ,MAAOP,EAAQ9I,EAAOsJ,KAEtCR,EAAQ9I,EAAOqJ,MAxB1BrD,EAAIuD,eAAenC,GA4BnB,IAAIN,EAAgB,KAqCpB,OAnCAd,EAAIvF,GAAG,8BAA+B,SAAS+I,GAC7C,IAAKxD,EAAIZ,KAAK,cAAgBY,EAAIZ,KAAK,aAAc,CAGnD,IAHmD,IAAAqE,EAClCtD,IADkCuD,EAAAC,EAAAF,EAAA,GAC9CJ,EAD8CK,EAAA,GACxCJ,EADwCI,EAAA,GAE/C7I,KACKxD,EAAI,EAAGA,EAAI+H,EAAKwE,OAAOhM,OAAQP,IAAK,CAC3C,IAAI0L,EAAM3D,EAAKwE,OAAOvM,GACXgM,GAAPN,GAAeA,GAAOO,GACxBzI,EAAK2B,KAAK4C,EAAKvE,KAAKxD,IAGxBwD,EAAKe,OACLiF,EAASrG,IAAIK,GACbiG,EAAgBjG,MAwBlB6F,QAAS,WACPG,EAAS1G,SAEXqG,OAAQ,WACFM,GACFD,EAASrG,IAAIsG,+fCvHvB1J,EAAA,iBACAA,EAAA,YACYwB,4JAAZxB,EAAA,gEAkBa4G,2BAEX,SAAAA,IAA4C,IAAhCjF,EAAgC,EAAAoD,UAAAvE,aAAAwE,IAAAD,UAAA,GAAAA,UAAA,GAAxB,KAAMnD,EAAkB,EAAAmD,UAAAvE,aAAAwE,IAAAD,UAAA,GAAAA,UAAA,GAAN,kGAAMnE,CAAAC,KAAA+F,GAC1C/F,KAAKgB,YAAc,IAAAC,EAAAC,QACnBlB,KAAKmB,SAAW,IAAIR,EAAKS,oBAAoBpB,KAAKgB,aAGlDhB,KAAKqB,OAAS,KAEdrB,KAAK4L,KAAO,KAEZ5L,KAAKwB,gBAAkB,KAEvBxB,KAAKyB,WAAad,EAAKe,QAASC,OAAQ3B,MAAQe,GAEhDf,KAAK6B,SAASf,8CAgBPA,GAAO,IAAAkB,EAAAhC,KAEd,GAAIA,KAAKqB,SAAWP,IAGfd,KAAKqB,QAAWP,KAGjBd,KAAK4L,OACP5L,KAAK4L,KAAK3J,IAAI,SAAUjC,KAAKwB,iBAC7BxB,KAAK4L,KAAO,KACZ5L,KAAKwB,gBAAkB,MAGzBxB,KAAKqB,OAASP,GAEH,CACTd,KAAK4L,MAAO,EAAAzJ,EAAAjB,SAAIJ,GAAOsB,IAAI,aAC3B,IAAI9B,EAAMN,KAAK4L,KAAKpJ,GAAG,SAAU,SAAC7D,GAChCqD,EAAKhB,YAAYyB,QAAQ,SAAU9D,EAAnCqD,KAEFhC,KAAKwB,gBAAkBlB,2CAuBXS,GAEd,OAAOJ,EAAKe,UACV1B,KAAKyB,WAAazB,KAAKyB,WAAa,KACpCV,GAAwB,kCAexB8K,EAAc9K,GACZf,KAAK4L,MACP5L,KAAK4L,KAAKrJ,IAAIsJ,EAAc7L,KAAK+C,gBAAgBhC,kCAa/CA,GACAf,KAAK4L,MACP5L,KAAKuC,SAAI,EAAQvC,KAAK+C,gBAAgBhC,+BAavCZ,EAAWC,GACZ,OAAOJ,KAAKmB,SAASqB,GAAGrC,EAAWC,+BAWjCD,EAAWC,GACb,OAAOJ,KAAKmB,SAASc,IAAI9B,EAAWC,mCASpCJ,KAAKmB,SAASuB,qBACd1C,KAAK6B,SAAS,oCAhFd,OAAO7B,KAAK4L,KAAO5L,KAAK4L,KAAKvJ,MAAQ,8kBCxElC,SAASyJ,EAAYC,GAC1B,IAAK,IAAI3M,EAAI,EAAGA,EAAI2M,EAAKpM,OAAQP,IAC/B,GAAI2M,EAAK3M,IAAM2M,EAAK3M,EAAE,GACpB,MAAM,IAAIE,MAAM,8CAlBNoC,OAAT,SAAgBsK,GAAoB,IAAA,IAAAC,EAAA/H,UAAAvE,OAATuM,EAASpH,MAAA,EAAAmH,EAAAA,EAAA,EAAA,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAATD,EAASC,EAAA,GAAAjI,UAAAiI,GACzC,IAAK,IAAI/M,EAAI,EAAGA,EAAI8M,EAAQvM,OAAQP,IAAK,CACvC,IAAIgN,EAAMF,EAAQ9M,GAClB,GAAI,MAAOgN,EAGX,IAAK,IAAI7L,KAAO6L,EACVA,EAAI5L,eAAeD,KACrByL,EAAOzL,GAAO6L,EAAI7L,IAIxB,OAAOyL,KAGOF,YAAAA,IAQAjI,gBAAT,SAAyB3E,EAAGgE,GACjC,IAAImJ,EAAM,EACNC,EAAM,EAELpN,IAAGA,MACHgE,IAAGA,MAER,IAAIqJ,KACAC,KAEJV,EAAY5M,GACZ4M,EAAY5I,GAEZ,KAAOmJ,EAAMnN,EAAES,QAAU2M,EAAMpJ,EAAEvD,QAC3BT,EAAEmN,KAASnJ,EAAEoJ,IACfD,IACAC,KACSpN,EAAEmN,GAAOnJ,EAAEoJ,GACpBC,EAAOhI,KAAKrF,EAAEmN,MAEdG,EAAOjI,KAAKrB,EAAEoJ,MAIdD,EAAMnN,EAAES,SACV4M,EAASA,EAAOjD,OAAOpK,EAAEwE,MAAM2I,KAC7BC,EAAMpJ,EAAEvD,SACV6M,EAASA,EAAOlD,OAAOpG,EAAEQ,MAAM4I,KACjC,OACEvI,QAASwI,EACTzI,MAAO0I,MAMKtD,cAAT,SAAuBuD,GAC5B,IAAIC,KACA/M,OAAA,EACJ,IAAK,IAAIwF,KAAQsH,EAAI,CAGnB,GAFIA,EAAGjM,eAAe2E,IACpBuH,EAAMnI,KAAKY,GACY,WAArBP,EAAO6H,EAAGtH,UAAmD,IAArBsH,EAAGtH,GAAMxF,OACnD,MAAM,IAAIL,MAAM,6BACX,QAAuB,IAAZK,GAA2BA,IAAW8M,EAAGtH,GAAMxF,OAC/D,MAAM,IAAIL,MAAM,gDAElBK,EAAS8M,EAAGtH,GAAMxF,OAIpB,IAFA,IAAIgN,KACAC,OAAA,EACKC,EAAM,EAAGA,EAAMlN,EAAQkN,IAAO,CACrCD,KACA,IAAK,IAAIE,EAAM,EAAGA,EAAMJ,EAAM/M,OAAQmN,IACpCF,EAAKF,EAAMI,IAAQL,EAAGC,EAAMI,IAAMD,GAEpCF,EAAQpI,KAAKqI,GAEf,OAAOD,KASIvL,+BACX,SAAAA,EAAY2L,gGAAShN,CAAAC,KAAAoB,GACnBpB,KAAKmB,SAAW4L,EAChB/M,KAAKgN,8CAGJ7M,EAAWC,GACZ,IAAIE,EAAMN,KAAKmB,SAASqB,GAAGrC,EAAWC,GAEtC,OADAJ,KAAKgN,MAAM1M,GAAOH,EACXG,8BAGLH,EAAWC,GACb,IAAIE,EAAMN,KAAKmB,SAASc,IAAI9B,EAAWC,GAIvC,OAHIE,UACKN,KAAKgN,MAAM1M,GAEbA,+CAGY,IAAA0B,EAAAhC,KACfiN,EAAejN,KAAKgN,MACxBhN,KAAKgN,SACL1I,OAAO1B,KAAKqK,GAAcvG,QAAQ,SAACpG,GACjC0B,EAAKb,SAASc,IAAIgL,EAAa3M,GAAMA,yjBClH3C4M,EAAA/N,EAAA,oDAEqBgO,aACnB,SAAAA,EAAYrM,EAAOqE,EAAmBrC,gGAAO/C,CAAAC,KAAAmN,GAC3CnN,KAAKqB,OAASP,EACdd,KAAKoN,MAAQjI,EACbnF,KAAKuD,OAAST,EACd9C,KAAKkN,QAAU,IAAAjM,EAAAC,gDAIf,OAAOlB,KAAKuD,mCAGVT,EAAoByI,GACtB,GAAIvL,KAAKuD,SAAWT,EAApB,CAIA,IAAIuK,EAAWrN,KAAKuD,OACpBvD,KAAKuD,OAAST,EAEd,IAAIwK,KACJ,GAAI/B,GAA2B,iBAAlB,IAAOA,EAAP,YAAA3G,EAAO2G,IAClB,IAAK,IAAIgC,KAAKhC,EACRA,EAAM/K,eAAe+M,KACvBD,EAAIC,GAAKhC,EAAMgC,IAGrBD,EAAID,SAAWA,EACfC,EAAIxK,MAAQA,EACZ9C,KAAKkN,QAAQzK,QAAQ,SAAU6K,EAAKtN,MAIhCiF,EAAOS,OAAST,EAAOS,MAAM8H,eAC/BvI,EAAOS,MAAM8H,cACX,iBACwB,OAArBxN,KAAKqB,OAAO8D,KAAgBnF,KAAKqB,OAAO8D,KAAO,IAAM,IACtDnF,KAAKoN,WACW,IAAXtK,EAAyB,KAAOA,+BAK1C3C,EAAWC,GACZ,OAAOJ,KAAKkN,QAAQ1K,GAAGrC,EAAWC,+BAGhCD,EAAWC,GACb,OAAOJ,KAAKkN,QAAQjL,IAAI9B,EAAWC,sBAhDlB+M","file":"crosstalk.min.js","sourcesContent":["(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()","export default class Events {\n constructor() {\n this._types = {};\n this._seq = 0;\n }\n\n on(eventType, listener) {\n let subs = this._types[eventType];\n if (!subs) {\n subs = this._types[eventType] = {};\n }\n let sub = \"sub\" + (this._seq++);\n subs[sub] = listener;\n return sub;\n }\n\n // Returns false if no match, or string for sub name if matched\n off(eventType, listener) {\n let subs = this._types[eventType];\n if (typeof(listener) === \"function\") {\n for (let key in subs) {\n if (subs.hasOwnProperty(key)) {\n if (subs[key] === listener) {\n delete subs[key];\n return key;\n }\n }\n }\n return false;\n } else if (typeof(listener) === \"string\") {\n if (subs && subs[listener]) {\n delete subs[listener];\n return listener;\n }\n return false;\n } else {\n throw new Error(\"Unexpected type for listener\");\n }\n }\n\n trigger(eventType, arg, thisObj) {\n let subs = this._types[eventType];\n for (let key in subs) {\n if (subs.hasOwnProperty(key)) {\n subs[key].call(thisObj, arg);\n }\n }\n }\n}\n","import Events from \"./events\";\nimport FilterSet from \"./filterset\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\nfunction getFilterSet(group) {\n let fsVar = group.var(\"filterset\");\n let result = fsVar.get();\n if (!result) {\n result = new FilterSet();\n fsVar.set(result);\n }\n return result;\n}\n\nlet id = 1;\nfunction nextId() {\n return id++;\n}\n\n/**\n * Use this class to contribute to, and listen for changes to, the filter set\n * for the given group of widgets. Filter input controls should create one\n * `FilterHandle` and only call {@link FilterHandle#set}. Output widgets that\n * wish to displayed filtered data should create one `FilterHandle` and use\n * the {@link FilterHandle#filteredKeys} property and listen for change\n * events.\n *\n * If two (or more) `FilterHandle` instances in the same webpage share the\n * same group name, they will contribute to a single \"filter set\". Each\n * `FilterHandle` starts out with a `null` value, which means they take\n * nothing away from the set of data that should be shown. To make a\n * `FilterHandle` actually remove data from the filter set, set its value to\n * an array of keys which should be displayed. Crosstalk will aggregate the\n * various key arrays by finding their intersection; only keys that are\n * present in all non-null filter handles are considered part of the filter\n * set.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the {@link FilterHandle#setGroup} method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class FilterHandle {\n constructor(group, extraInfo) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The filterSet that we're tracking, if any. Can change over time.\n this._filterSet = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._filterVar = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this._id = \"filter\" + nextId();\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this FilterHandle. If `set()` was\n * previously called on this handle, switching groups will clear those keys\n * from the old group's filter set. These keys will not be applied to the new\n * group's filter set either. In other words, `setGroup()` effectively calls\n * `clear()` before switching groups.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._filterVar) {\n this._filterVar.off(\"change\", this._varOnChangeSub);\n this.clear();\n this._varOnChangeSub = null;\n this._filterVar = null;\n this._filterSet = null;\n }\n\n this._group = group;\n\n if (group) {\n group = grp(group);\n this._filterSet = getFilterSet(group);\n this._filterVar = grp(group).var(\"filter\");\n let sub = this._filterVar.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n","import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n","import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n","import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n","let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n","import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n","export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n","import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n"]} \ No newline at end of file
diff --git a/docs/coverage/lib/crosstalk-1.2.1/scss/crosstalk.scss b/docs/coverage/lib/crosstalk-1.2.1/scss/crosstalk.scss
new file mode 100644
index 00000000..35665616
--- /dev/null
+++ b/docs/coverage/lib/crosstalk-1.2.1/scss/crosstalk.scss
@@ -0,0 +1,75 @@
+/* Adjust margins outwards, so column contents line up with the edges of the
+ parent of container-fluid. */
+.container-fluid.crosstalk-bscols {
+ margin-left: -30px;
+ margin-right: -30px;
+ white-space: normal;
+}
+
+/* But don't adjust the margins outwards if we're directly under the body,
+ i.e. we were the top-level of something at the console. */
+body > .container-fluid.crosstalk-bscols {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column {
+ display: inline-block;
+ padding-right: 12px;
+ vertical-align: top;
+}
+
+@media only screen and (max-width:480px) {
+ .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column {
+ display: block;
+ padding-right: inherit;
+ }
+}
+
+/* Relevant BS3 styles to make filter_checkbox() look reasonable without Bootstrap */
+.crosstalk-input {
+ margin-bottom: 15px; /* a la .form-group */
+ .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px;
+ line-height: normal;
+ }
+ .checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+ .checkbox > label{
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: 400;
+ cursor: pointer;
+ }
+ .checkbox input[type="checkbox"],
+ .checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-top: 2px;
+ margin-left: -20px;
+ }
+ .checkbox + .checkbox {
+ margin-top: -5px;
+ }
+ .checkbox-inline {
+ position: relative;
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: 400;
+ vertical-align: middle;
+ cursor: pointer;
+ }
+ .checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+ }
+}
diff --git a/docs/coverage/lib/datatables-binding-0.33/datatables.js b/docs/coverage/lib/datatables-binding-0.33/datatables.js
new file mode 100644
index 00000000..765b53cb
--- /dev/null
+++ b/docs/coverage/lib/datatables-binding-0.33/datatables.js
@@ -0,0 +1,1539 @@
+(function() {
+
+// some helper functions: using a global object DTWidget so that it can be used
+// in JS() code, e.g. datatable(options = list(foo = JS('code'))); unlike R's
+// dynamic scoping, when 'code' is eval'ed, JavaScript does not know objects
+// from the "parent frame", e.g. JS('DTWidget') will not work unless it was made
+// a global object
+var DTWidget = {};
+
+// 123456666.7890 -> 123,456,666.7890
+var markInterval = function(d, digits, interval, mark, decMark, precision) {
+ x = precision ? d.toPrecision(digits) : d.toFixed(digits);
+ if (!/^-?[\d.]+$/.test(x)) return x;
+ var xv = x.split('.');
+ if (xv.length > 2) return x; // should have at most one decimal point
+ xv[0] = xv[0].replace(new RegExp('\\B(?=(\\d{' + interval + '})+(?!\\d))', 'g'), mark);
+ return xv.join(decMark);
+};
+
+DTWidget.formatCurrency = function(data, currency, digits, interval, mark, decMark, before, zeroPrint) {
+ var d = parseFloat(data);
+ if (isNaN(d)) return '';
+ if (zeroPrint !== null && d === 0.0) return zeroPrint;
+ var res = markInterval(d, digits, interval, mark, decMark);
+ res = before ? (/^-/.test(res) ? '-' + currency + res.replace(/^-/, '') : currency + res) :
+ res + currency;
+ return res;
+};
+
+DTWidget.formatString = function(data, prefix, suffix) {
+ var d = data;
+ if (d === null) return '';
+ return prefix + d + suffix;
+};
+
+DTWidget.formatPercentage = function(data, digits, interval, mark, decMark, zeroPrint) {
+ var d = parseFloat(data);
+ if (isNaN(d)) return '';
+ if (zeroPrint !== null && d === 0.0) return zeroPrint;
+ return markInterval(d * 100, digits, interval, mark, decMark) + '%';
+};
+
+DTWidget.formatRound = function(data, digits, interval, mark, decMark, zeroPrint) {
+ var d = parseFloat(data);
+ if (isNaN(d)) return '';
+ if (zeroPrint !== null && d === 0.0) return zeroPrint;
+ return markInterval(d, digits, interval, mark, decMark);
+};
+
+DTWidget.formatSignif = function(data, digits, interval, mark, decMark, zeroPrint) {
+ var d = parseFloat(data);
+ if (isNaN(d)) return '';
+ if (zeroPrint !== null && d === 0.0) return zeroPrint;
+ return markInterval(d, digits, interval, mark, decMark, true);
+};
+
+DTWidget.formatDate = function(data, method, params) {
+ var d = data;
+ if (d === null) return '';
+ // (new Date('2015-10-28')).toDateString() may return 2015-10-27 because the
+ // actual time created could be like 'Tue Oct 27 2015 19:00:00 GMT-0500 (CDT)',
+ // i.e. the date-only string is treated as UTC time instead of local time
+ if ((method === 'toDateString' || method === 'toLocaleDateString') && /^\d{4,}\D\d{2}\D\d{2}$/.test(d)) {
+ d = d.split(/\D/);
+ d = new Date(d[0], d[1] - 1, d[2]);
+ } else {
+ d = new Date(d);
+ }
+ return d[method].apply(d, params);
+};
+
+window.DTWidget = DTWidget;
+
+// A helper function to update the properties of existing filters
+var setFilterProps = function(td, props) {
+ // Update enabled/disabled state
+ var $input = $(td).find('input').first();
+ var searchable = $input.data('searchable');
+ $input.prop('disabled', !searchable || props.disabled);
+
+ // Based on the filter type, set its new values
+ var type = td.getAttribute('data-type');
+ if (['factor', 'logical'].includes(type)) {
+ // Reformat the new dropdown options for use with selectize
+ var new_vals = props.params.options.map(function(item) {
+ return { text: item, value: item };
+ });
+
+ // Find the selectize object
+ var dropdown = $(td).find('.selectized').eq(0)[0].selectize;
+
+ // Note the current values
+ var old_vals = dropdown.getValue();
+
+ // Remove the existing values
+ dropdown.clearOptions();
+
+ // Add the new options
+ dropdown.addOption(new_vals);
+
+ // Preserve the existing values
+ dropdown.setValue(old_vals);
+
+ } else if (['number', 'integer', 'date', 'time'].includes(type)) {
+ // Apply internal scaling to new limits. Updating scale not yet implemented.
+ var slider = $(td).find('.noUi-target').eq(0);
+ var scale = Math.pow(10, Math.max(0, +slider.data('scale') || 0));
+ var new_vals = [props.params.min * scale, props.params.max * scale];
+
+ // Note what the new limits will be just for this filter
+ var new_lims = new_vals.slice();
+
+ // Determine the current values and limits
+ var old_vals = slider.val().map(Number);
+ var old_lims = slider.noUiSlider('options').range;
+ old_lims = [old_lims.min, old_lims.max];
+
+ // Preserve the current values if filters have been applied; otherwise, apply no filtering
+ if (old_vals[0] != old_lims[0]) {
+ new_vals[0] = Math.max(old_vals[0], new_vals[0]);
+ }
+
+ if (old_vals[1] != old_lims[1]) {
+ new_vals[1] = Math.min(old_vals[1], new_vals[1]);
+ }
+
+ // Update the endpoints of the slider
+ slider.noUiSlider({
+ start: new_vals,
+ range: {'min': new_lims[0], 'max': new_lims[1]}
+ }, true);
+ }
+};
+
+var transposeArray2D = function(a) {
+ return a.length === 0 ? a : HTMLWidgets.transposeArray2D(a);
+};
+
+var crosstalkPluginsInstalled = false;
+
+function maybeInstallCrosstalkPlugins() {
+ if (crosstalkPluginsInstalled)
+ return;
+ crosstalkPluginsInstalled = true;
+
+ $.fn.dataTable.ext.afnFiltering.push(
+ function(oSettings, aData, iDataIndex) {
+ var ctfilter = oSettings.nTable.ctfilter;
+ if (ctfilter && !ctfilter[iDataIndex])
+ return false;
+
+ var ctselect = oSettings.nTable.ctselect;
+ if (ctselect && !ctselect[iDataIndex])
+ return false;
+
+ return true;
+ }
+ );
+}
+
+HTMLWidgets.widget({
+ name: "datatables",
+ type: "output",
+ renderOnNullValue: true,
+ initialize: function(el, width, height) {
+ // in order that the type=number inputs return a number
+ $.valHooks.number = {
+ get: function(el) {
+ var value = parseFloat(el.value);
+ return isNaN(value) ? "" : value;
+ }
+ };
+ $(el).html('&nbsp;');
+ return {
+ data: null,
+ ctfilterHandle: new crosstalk.FilterHandle(),
+ ctfilterSubscription: null,
+ ctselectHandle: new crosstalk.SelectionHandle(),
+ ctselectSubscription: null
+ };
+ },
+ renderValue: function(el, data, instance) {
+ if (el.offsetWidth === 0 || el.offsetHeight === 0) {
+ instance.data = data;
+ return;
+ }
+ instance.data = null;
+ var $el = $(el);
+ $el.empty();
+
+ if (data === null) {
+ $el.append('&nbsp;');
+ // clear previous Shiny inputs (if any)
+ for (var i in instance.clearInputs) instance.clearInputs[i]();
+ instance.clearInputs = {};
+ return;
+ }
+
+ var crosstalkOptions = data.crosstalkOptions;
+ if (!crosstalkOptions) crosstalkOptions = {
+ 'key': null, 'group': null
+ };
+ if (crosstalkOptions.group) {
+ maybeInstallCrosstalkPlugins();
+ instance.ctfilterHandle.setGroup(crosstalkOptions.group);
+ instance.ctselectHandle.setGroup(crosstalkOptions.group);
+ }
+
+ // if we are in the viewer then we always want to fillContainer and
+ // and autoHideNavigation (unless the user has explicitly set these)
+ if (window.HTMLWidgets.viewerMode) {
+ if (!data.hasOwnProperty("fillContainer"))
+ data.fillContainer = true;
+ if (!data.hasOwnProperty("autoHideNavigation"))
+ data.autoHideNavigation = true;
+ }
+
+ // propagate fillContainer to instance (so we have it in resize)
+ instance.fillContainer = data.fillContainer;
+
+ var cells = data.data;
+
+ if (cells instanceof Array) cells = transposeArray2D(cells);
+
+ $el.append(data.container);
+ var $table = $el.find('table');
+ if (data.class) $table.addClass(data.class);
+ if (data.caption) $table.prepend(data.caption);
+
+ if (!data.selection) data.selection = {
+ mode: 'none', selected: null, target: 'row', selectable: null
+ };
+ if (HTMLWidgets.shinyMode && data.selection.mode !== 'none' &&
+ data.selection.target === 'row+column') {
+ if ($table.children('tfoot').length === 0) {
+ $table.append($('<tfoot>'));
+ $table.find('thead tr').clone().appendTo($table.find('tfoot'));
+ }
+ }
+
+ // column filters
+ var filterRow;
+ switch (data.filter) {
+ case 'top':
+ $table.children('thead').append(data.filterHTML);
+ filterRow = $table.find('thead tr:last td');
+ break;
+ case 'bottom':
+ if ($table.children('tfoot').length === 0) {
+ $table.append($('<tfoot>'));
+ }
+ $table.children('tfoot').prepend(data.filterHTML);
+ filterRow = $table.find('tfoot tr:first td');
+ break;
+ }
+
+ var options = { searchDelay: 1000 };
+ if (cells !== null) $.extend(options, {
+ data: cells
+ });
+
+ // options for fillContainer
+ var bootstrapActive = typeof($.fn.popover) != 'undefined';
+ if (instance.fillContainer) {
+
+ // force scrollX/scrollY and turn off autoWidth
+ options.scrollX = true;
+ options.scrollY = "100px"; // can be any value, we'll adjust below
+
+ // if we aren't paginating then move around the info/filter controls
+ // to save space at the bottom and rephrase the info callback
+ if (data.options.paging === false) {
+
+ // we know how to do this cleanly for bootstrap, not so much
+ // for other themes/layouts
+ if (bootstrapActive) {
+ options.dom = "<'row'<'col-sm-4'i><'col-sm-8'f>>" +
+ "<'row'<'col-sm-12'tr>>";
+ }
+
+ options.fnInfoCallback = function(oSettings, iStart, iEnd,
+ iMax, iTotal, sPre) {
+ return Number(iTotal).toLocaleString() + " records";
+ };
+ }
+ }
+
+ // auto hide navigation if requested
+ // Note, this only works on client-side processing mode as on server-side,
+ // cells (data.data) is null; In addition, we require the pageLength option
+ // being provided explicitly to enable this. Despite we may be able to deduce
+ // the default value of pageLength, it may complicate things so we'd rather
+ // put this responsiblity to users and warn them on the R side.
+ if (data.autoHideNavigation === true && data.options.paging !== false) {
+ // strip all nav if length >= cells
+ if ((cells instanceof Array) && data.options.pageLength >= cells.length)
+ options.dom = bootstrapActive ? "<'row'<'col-sm-12'tr>>" : "t";
+ // alternatively lean things out for flexdashboard mobile portrait
+ else if (bootstrapActive && window.FlexDashboard && window.FlexDashboard.isMobilePhone())
+ options.dom = "<'row'<'col-sm-12'f>>" +
+ "<'row'<'col-sm-12'tr>>" +
+ "<'row'<'col-sm-12'p>>";
+ }
+
+ $.extend(true, options, data.options || {});
+
+ var searchCols = options.searchCols;
+ if (searchCols) {
+ searchCols = searchCols.map(function(x) {
+ return x === null ? '' : x.search;
+ });
+ // FIXME: this means I don't respect the escapeRegex setting
+ delete options.searchCols;
+ }
+
+ // server-side processing?
+ var server = options.serverSide === true;
+
+ // use the dataSrc function to pre-process JSON data returned from R
+ var DT_rows_all = [], DT_rows_current = [];
+ if (server && HTMLWidgets.shinyMode && typeof options.ajax === 'object' &&
+ /^session\/[\da-z]+\/dataobj/.test(options.ajax.url) && !options.ajax.dataSrc) {
+ options.ajax.dataSrc = function(json) {
+ DT_rows_all = $.makeArray(json.DT_rows_all);
+ DT_rows_current = $.makeArray(json.DT_rows_current);
+ var data = json.data;
+ if (!colReorderEnabled()) return data;
+ var table = $table.DataTable(), order = table.colReorder.order(), flag = true, i, j, row;
+ for (i = 0; i < order.length; ++i) if (order[i] !== i) flag = false;
+ if (flag) return data;
+ for (i = 0; i < data.length; ++i) {
+ row = data[i].slice();
+ for (j = 0; j < order.length; ++j) data[i][j] = row[order[j]];
+ }
+ return data;
+ };
+ }
+
+ var thiz = this;
+ if (instance.fillContainer) $table.on('init.dt', function(e) {
+ thiz.fillAvailableHeight(el, $(el).innerHeight());
+ });
+ // If the page contains serveral datatables and one of which enables colReorder,
+ // the table.colReorder.order() function will exist but throws error when called.
+ // So it seems like the only way to know if colReorder is enabled or not is to
+ // check the options.
+ var colReorderEnabled = function() { return "colReorder" in options; };
+ var table = $table.DataTable(options);
+ $el.data('datatable', table);
+
+ if ('rowGroup' in options) {
+ // Maintain RowGroup dataSrc when columns are reordered (#1109)
+ table.on('column-reorder', function(e, settings, details) {
+ var oldDataSrc = table.rowGroup().dataSrc();
+ var newDataSrc = details.mapping[oldDataSrc];
+ table.rowGroup().dataSrc(newDataSrc);
+ });
+ }
+
+ // Unregister previous Crosstalk event subscriptions, if they exist
+ if (instance.ctfilterSubscription) {
+ instance.ctfilterHandle.off("change", instance.ctfilterSubscription);
+ instance.ctfilterSubscription = null;
+ }
+ if (instance.ctselectSubscription) {
+ instance.ctselectHandle.off("change", instance.ctselectSubscription);
+ instance.ctselectSubscription = null;
+ }
+
+ if (!crosstalkOptions.group) {
+ $table[0].ctfilter = null;
+ $table[0].ctselect = null;
+ } else {
+ var key = crosstalkOptions.key;
+ function keysToMatches(keys) {
+ if (!keys) {
+ return null;
+ } else {
+ var selectedKeys = {};
+ for (var i = 0; i < keys.length; i++) {
+ selectedKeys[keys[i]] = true;
+ }
+ var matches = {};
+ for (var j = 0; j < key.length; j++) {
+ if (selectedKeys[key[j]])
+ matches[j] = true;
+ }
+ return matches;
+ }
+ }
+
+ function applyCrosstalkFilter(e) {
+ $table[0].ctfilter = keysToMatches(e.value);
+ table.draw();
+ }
+ instance.ctfilterSubscription = instance.ctfilterHandle.on("change", applyCrosstalkFilter);
+ applyCrosstalkFilter({value: instance.ctfilterHandle.filteredKeys});
+
+ function applyCrosstalkSelection(e) {
+ if (e.sender !== instance.ctselectHandle) {
+ table
+ .rows('.' + selClass, {search: 'applied'})
+ .nodes()
+ .to$()
+ .removeClass(selClass);
+ if (selectedRows)
+ changeInput('rows_selected', selectedRows(), void 0, true);
+ }
+
+ if (e.sender !== instance.ctselectHandle && e.value && e.value.length) {
+ var matches = keysToMatches(e.value);
+
+ // persistent selection with plotly (& leaflet)
+ var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {};
+ if (ctOpts.persistent === true) {
+ var matches = $.extend(matches, $table[0].ctselect);
+ }
+
+ $table[0].ctselect = matches;
+ table.draw();
+ } else {
+ if ($table[0].ctselect) {
+ $table[0].ctselect = null;
+ table.draw();
+ }
+ }
+ }
+ instance.ctselectSubscription = instance.ctselectHandle.on("change", applyCrosstalkSelection);
+ // TODO: This next line doesn't seem to work when renderDataTable is used
+ applyCrosstalkSelection({value: instance.ctselectHandle.value});
+ }
+
+ var inArray = function(val, array) {
+ return $.inArray(val, $.makeArray(array)) > -1;
+ };
+
+ // search the i-th column
+ var searchColumn = function(i, value) {
+ var regex = false, ci = true;
+ if (options.search) {
+ regex = options.search.regex,
+ ci = options.search.caseInsensitive !== false;
+ }
+ // need to transpose the column index when colReorder is enabled
+ if (table.colReorder) i = table.colReorder.transpose(i);
+ return table.column(i).search(value, regex, !regex, ci);
+ };
+
+ if (data.filter !== 'none') {
+ if (!data.hasOwnProperty('filterSettings')) data.filterSettings = {};
+
+ filterRow.each(function(i, td) {
+
+ var $td = $(td), type = $td.data('type'), filter;
+ var $input = $td.children('div').first().children('input');
+ var disabled = $input.prop('disabled');
+ var searchable = table.settings()[0].aoColumns[i].bSearchable;
+ $input.prop('disabled', !searchable || disabled);
+ $input.data('searchable', searchable); // for updating later
+ $input.on('input blur', function() {
+ $input.next('span').toggle(Boolean($input.val()));
+ });
+ // Bootstrap sets pointer-events to none and we won't be able to click
+ // the clear button
+ $input.next('span').css('pointer-events', 'auto').hide().click(function() {
+ $(this).hide().prev('input').val('').trigger('input').focus();
+ });
+ var searchCol; // search string for this column
+ if (searchCols && searchCols[i]) {
+ searchCol = searchCols[i];
+ $input.val(searchCol).trigger('input');
+ }
+ var $x = $td.children('div').last();
+
+ // remove the overflow: hidden attribute of the scrollHead
+ // (otherwise the scrolling table body obscures the filters)
+ // The workaround and the discussion from
+ // https://github.com/rstudio/DT/issues/554#issuecomment-518007347
+ // Otherwise the filter selection will not be anchored to the values
+ // when the columns number is many and scrollX is enabled.
+ var scrollHead = $(el).find('.dataTables_scrollHead,.dataTables_scrollFoot');
+ var cssOverflowHead = scrollHead.css('overflow');
+ var scrollBody = $(el).find('.dataTables_scrollBody');
+ var cssOverflowBody = scrollBody.css('overflow');
+ var scrollTable = $(el).find('.dataTables_scroll');
+ var cssOverflowTable = scrollTable.css('overflow');
+ if (cssOverflowHead === 'hidden') {
+ $x.on('show hide', function(e) {
+ if (e.type === 'show') {
+ scrollHead.css('overflow', 'visible');
+ scrollBody.css('overflow', 'visible');
+ scrollTable.css('overflow-x', 'scroll');
+ } else {
+ scrollHead.css('overflow', cssOverflowHead);
+ scrollBody.css('overflow', cssOverflowBody);
+ scrollTable.css('overflow-x', cssOverflowTable);
+ }
+ });
+ $x.css('z-index', 25);
+ }
+
+ if (inArray(type, ['factor', 'logical'])) {
+ $input.on({
+ click: function() {
+ $input.parent().hide(); $x.show().trigger('show'); filter[0].selectize.focus();
+ },
+ input: function() {
+ var v1 = JSON.stringify(filter[0].selectize.getValue()), v2 = $input.val();
+ if (v1 === '[]') v1 = '';
+ if (v1 !== v2) filter[0].selectize.setValue(v2 === '' ? [] : JSON.parse(v2));
+ }
+ });
+ var $input2 = $x.children('select');
+ filter = $input2.selectize($.extend({
+ options: $input2.data('options').map(function(v, i) {
+ return ({text: v, value: v});
+ }),
+ plugins: ['remove_button'],
+ hideSelected: true,
+ onChange: function(value) {
+ if (value === null) value = []; // compatibility with jQuery 3.0
+ $input.val(value.length ? JSON.stringify(value) : '');
+ if (value.length) $input.trigger('input');
+ $input.attr('title', $input.val());
+ if (server) {
+ searchColumn(i, value.length ? JSON.stringify(value) : '').draw();
+ return;
+ }
+ // turn off filter if nothing selected
+ $td.data('filter', value.length > 0);
+ table.draw(); // redraw table, and filters will be applied
+ }
+ }, data.filterSettings.select));
+ filter[0].selectize.on('blur', function() {
+ $x.hide().trigger('hide'); $input.parent().show(); $input.trigger('blur');
+ });
+ filter.next('div').css('margin-bottom', 'auto');
+ } else if (type === 'character') {
+ var fun = function() {
+ searchColumn(i, $input.val()).draw();
+ };
+ // throttle searching for server-side processing
+ var throttledFun = $.fn.dataTable.util.throttle(fun, options.searchDelay);
+ $input.on('input', function(e, immediate) {
+ // always bypass throttling when immediate = true (via the updateSearch method)
+ (immediate || !server) ? fun() : throttledFun();
+ });
+ } else if (inArray(type, ['number', 'integer', 'date', 'time'])) {
+ var $x0 = $x;
+ $x = $x0.children('div').first();
+ $x0.css({
+ 'background-color': '#fff',
+ 'border': '1px #ddd solid',
+ 'border-radius': '4px',
+ 'padding': data.vertical ? '35px 20px': '20px 20px 10px 20px'
+ });
+ var $spans = $x0.children('span').css({
+ 'margin-top': data.vertical ? '0' : '10px',
+ 'white-space': 'nowrap'
+ });
+ var $span1 = $spans.first(), $span2 = $spans.last();
+ var r1 = +$x.data('min'), r2 = +$x.data('max');
+ // when the numbers are too small or have many decimal places, the
+ // slider may have numeric precision problems (#150)
+ var scale = Math.pow(10, Math.max(0, +$x.data('scale') || 0));
+ r1 = Math.round(r1 * scale); r2 = Math.round(r2 * scale);
+ var scaleBack = function(x, scale) {
+ if (scale === 1) return x;
+ var d = Math.round(Math.log(scale) / Math.log(10));
+ // to avoid problems like 3.423/100 -> 0.034230000000000003
+ return (x / scale).toFixed(d);
+ };
+ var slider_min = function() {
+ return filter.noUiSlider('options').range.min;
+ };
+ var slider_max = function() {
+ return filter.noUiSlider('options').range.max;
+ };
+ $input.on({
+ focus: function() {
+ $x0.show().trigger('show');
+ // first, make sure the slider div leaves at least 20px between
+ // the two (slider value) span's
+ $x0.width(Math.max(160, $span1.outerWidth() + $span2.outerWidth() + 20));
+ // then, if the input is really wide or slider is vertical,
+ // make the slider the same width as the input
+ if ($x0.outerWidth() < $input.outerWidth() || data.vertical) {
+ $x0.outerWidth($input.outerWidth());
+ }
+ // make sure the slider div does not reach beyond the right margin
+ if ($(window).width() < $x0.offset().left + $x0.width()) {
+ $x0.offset({
+ 'left': $input.offset().left + $input.outerWidth() - $x0.outerWidth()
+ });
+ }
+ },
+ blur: function() {
+ $x0.hide().trigger('hide');
+ },
+ input: function() {
+ if ($input.val() === '') filter.val([slider_min(), slider_max()]);
+ },
+ change: function() {
+ var v = $input.val().replace(/\s/g, '');
+ if (v === '') return;
+ v = v.split('...');
+ if (v.length !== 2) {
+ $input.parent().addClass('has-error');
+ return;
+ }
+ if (v[0] === '') v[0] = slider_min();
+ if (v[1] === '') v[1] = slider_max();
+ $input.parent().removeClass('has-error');
+ // treat date as UTC time at midnight
+ var strTime = function(x) {
+ var s = type === 'date' ? 'T00:00:00Z' : '';
+ var t = new Date(x + s).getTime();
+ // add 10 minutes to date since it does not hurt the date, and
+ // it helps avoid the tricky floating point arithmetic problems,
+ // e.g. sometimes the date may be a few milliseconds earlier
+ // than the midnight due to precision problems in noUiSlider
+ return type === 'date' ? t + 3600000 : t;
+ };
+ if (inArray(type, ['date', 'time'])) {
+ v[0] = strTime(v[0]);
+ v[1] = strTime(v[1]);
+ }
+ if (v[0] != slider_min()) v[0] *= scale;
+ if (v[1] != slider_max()) v[1] *= scale;
+ filter.val(v);
+ }
+ });
+ var formatDate = function(d) {
+ d = scaleBack(d, scale);
+ if (type === 'number') return d;
+ if (type === 'integer') return parseInt(d);
+ var x = new Date(+d);
+ if (type === 'date') {
+ var pad0 = function(x) {
+ return ('0' + x).substr(-2, 2);
+ };
+ return x.getUTCFullYear() + '-' + pad0(1 + x.getUTCMonth())
+ + '-' + pad0(x.getUTCDate());
+ } else {
+ return x.toISOString();
+ }
+ };
+ var opts = type === 'date' ? { step: 60 * 60 * 1000 } :
+ type === 'integer' ? { step: 1 } : {};
+
+ opts.orientation = data.vertical ? 'vertical': 'horizontal';
+ opts.direction = data.vertical ? 'rtl': 'ltr';
+
+ filter = $x.noUiSlider($.extend({
+ start: [r1, r2],
+ range: {min: r1, max: r2},
+ connect: true
+ }, opts, data.filterSettings.slider));
+ if (scale > 1) (function() {
+ var t1 = r1, t2 = r2;
+ var val = filter.val();
+ while (val[0] > r1 || val[1] < r2) {
+ if (val[0] > r1) {
+ t1 -= val[0] - r1;
+ }
+ if (val[1] < r2) {
+ t2 += r2 - val[1];
+ }
+ filter = $x.noUiSlider($.extend({
+ start: [t1, t2],
+ range: {min: t1, max: t2},
+ connect: true
+ }, opts, data.filterSettings.slider), true);
+ val = filter.val();
+ }
+ r1 = t1; r2 = t2;
+ })();
+ // format with active column renderer, if defined
+ var colDef = data.options.columnDefs.find(function(def) {
+ return (def.targets === i || inArray(i, def.targets)) && 'render' in def;
+ });
+ var updateSliderText = function(v1, v2) {
+ // we only know how to use function renderers
+ if (colDef && typeof colDef.render === 'function') {
+ var restore = function(v) {
+ v = scaleBack(v, scale);
+ return inArray(type, ['date', 'time']) ? new Date(+v) : v;
+ }
+ $span1.text(colDef.render(restore(v1), 'display'));
+ $span2.text(colDef.render(restore(v2), 'display'));
+ } else {
+ $span1.text(formatDate(v1));
+ $span2.text(formatDate(v2));
+ }
+ };
+ updateSliderText(r1, r2);
+ var updateSlider = function(e) {
+ var val = filter.val();
+ // turn off filter if in full range
+ $td.data('filter', val[0] > slider_min() || val[1] < slider_max());
+ var v1 = formatDate(val[0]), v2 = formatDate(val[1]), ival;
+ if ($td.data('filter')) {
+ ival = v1 + ' ... ' + v2;
+ $input.attr('title', ival).val(ival).trigger('input');
+ } else {
+ $input.attr('title', '').val('');
+ }
+ updateSliderText(val[0], val[1]);
+ if (e.type === 'slide') return; // no searching when sliding only
+ if (server) {
+ searchColumn(i, $td.data('filter') ? ival : '').draw();
+ return;
+ }
+ table.draw();
+ };
+ filter.on({
+ set: updateSlider,
+ slide: updateSlider
+ });
+ }
+
+ // server-side processing will be handled by R (or whatever server
+ // language you use); the following code is only needed for client-side
+ // processing
+ if (server) {
+ // if a search string has been pre-set, search now
+ if (searchCol) $input.trigger('input').trigger('change');
+ return;
+ }
+
+ var customFilter = function(settings, data, dataIndex) {
+ // there is no way to attach a search function to a specific table,
+ // and we need to make sure a global search function is not applied to
+ // all tables (i.e. a range filter in a previous table should not be
+ // applied to the current table); we use the settings object to
+ // determine if we want to perform searching on the current table,
+ // since settings.sTableId will be different to different tables
+ if (table.settings()[0] !== settings) return true;
+ // no filter on this column or no need to filter this column
+ if (typeof filter === 'undefined' || !$td.data('filter')) return true;
+
+ var r = filter.val(), v, r0, r1;
+ var i_data = function(i) {
+ if (!colReorderEnabled()) return i;
+ var order = table.colReorder.order(), k;
+ for (k = 0; k < order.length; ++k) if (order[k] === i) return k;
+ return i; // in theory it will never be here...
+ }
+ v = data[i_data(i)];
+ if (type === 'number' || type === 'integer') {
+ v = parseFloat(v);
+ // how to handle NaN? currently exclude these rows
+ if (isNaN(v)) return(false);
+ r0 = parseFloat(scaleBack(r[0], scale))
+ r1 = parseFloat(scaleBack(r[1], scale));
+ if (v >= r0 && v <= r1) return true;
+ } else if (type === 'date' || type === 'time') {
+ v = new Date(v);
+ r0 = new Date(r[0] / scale); r1 = new Date(r[1] / scale);
+ if (v >= r0 && v <= r1) return true;
+ } else if (type === 'factor') {
+ if (r.length === 0 || inArray(v, r)) return true;
+ } else if (type === 'logical') {
+ if (r.length === 0) return true;
+ if (inArray(v === '' ? 'na' : v, r)) return true;
+ }
+ return false;
+ };
+
+ $.fn.dataTable.ext.search.push(customFilter);
+
+ // search for the preset search strings if it is non-empty
+ if (searchCol) $input.trigger('input').trigger('change');
+
+ });
+
+ }
+
+ // highlight search keywords
+ var highlight = function() {
+ var body = $(table.table().body());
+ // removing the old highlighting first
+ body.unhighlight();
+
+ // don't highlight the "not found" row, so we get the rows using the api
+ if (table.rows({ filter: 'applied' }).data().length === 0) return;
+ // highlight global search keywords
+ body.highlight($.trim(table.search()).split(/\s+/));
+ // then highlight keywords from individual column filters
+ if (filterRow) filterRow.each(function(i, td) {
+ var $td = $(td), type = $td.data('type');
+ if (type !== 'character') return;
+ var $input = $td.children('div').first().children('input');
+ var column = table.column(i).nodes().to$(),
+ val = $.trim($input.val());
+ if (type !== 'character' || val === '') return;
+ column.highlight(val.split(/\s+/));
+ });
+ };
+
+ if (options.searchHighlight) {
+ table
+ .on('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth', highlight)
+ .on('destroy', function() {
+ // remove event handler
+ table.off('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth');
+ });
+
+ // Set the option for escaping regex characters in our search string. This will be used
+ // for all future matching.
+ jQuery.fn.highlight.options.escapeRegex = (!options.search || !options.search.regex);
+
+ // initial highlight for state saved conditions and initial states
+ highlight();
+ }
+
+ // run the callback function on the table instance
+ if (typeof data.callback === 'function') data.callback(table);
+
+ // double click to edit the cell, row, column, or all cells
+ if (data.editable) table.on('dblclick.dt', 'tbody td', function(e) {
+ // only bring up the editor when the cell itself is dbclicked, and ignore
+ // other dbclick events bubbled up (e.g. from the <input>)
+ if (e.target !== this) return;
+ var target = [], immediate = false;
+ switch (data.editable.target) {
+ case 'cell':
+ target = [this];
+ immediate = true; // edit will take effect immediately
+ break;
+ case 'row':
+ target = table.cells(table.cell(this).index().row, '*').nodes();
+ break;
+ case 'column':
+ target = table.cells('*', table.cell(this).index().column).nodes();
+ break;
+ case 'all':
+ target = table.cells().nodes();
+ break;
+ default:
+ throw 'The editable parameter must be "cell", "row", "column", or "all"';
+ }
+ var disableCols = data.editable.disable ? data.editable.disable.columns : null;
+ var numericCols = data.editable.numeric;
+ var areaCols = data.editable.area;
+ var dateCols = data.editable.date;
+ for (var i = 0; i < target.length; i++) {
+ (function(cell, current) {
+ var $cell = $(cell), html = $cell.html();
+ var _cell = table.cell(cell), value = _cell.data(), index = _cell.index().column;
+ var $input;
+ if (inArray(index, numericCols)) {
+ $input = $('<input type="number">');
+ } else if (inArray(index, areaCols)) {
+ $input = $('<textarea></textarea>');
+ } else if (inArray(index, dateCols)) {
+ $input = $('<input type="date">');
+ } else {
+ $input = $('<input type="text">');
+ }
+ if (!immediate) {
+ $cell.data('input', $input).data('html', html);
+ $input.attr('title', 'Hit Ctrl+Enter to finish editing, or Esc to cancel');
+ }
+ $input.val(value);
+ if (inArray(index, disableCols)) {
+ $input.attr('readonly', '').css('filter', 'invert(25%)');
+ }
+ $cell.empty().append($input);
+ if (cell === current) $input.focus();
+ $input.css('width', '100%');
+
+ if (immediate) $input.on('blur', function(e) {
+ var valueNew = $input.val();
+ if (valueNew !== value) {
+ _cell.data(valueNew);
+ if (HTMLWidgets.shinyMode) {
+ changeInput('cell_edit', [cellInfo(cell)], 'DT.cellInfo', null, {priority: 'event'});
+ }
+ // for server-side processing, users have to call replaceData() to update the table
+ if (!server) table.draw(false);
+ } else {
+ $cell.html(html);
+ }
+ }).on('keyup', function(e) {
+ // hit Escape to cancel editing
+ if (e.keyCode === 27) $input.trigger('blur');
+ });
+
+ // bulk edit (row, column, or all)
+ if (!immediate) $input.on('keyup', function(e) {
+ var removeInput = function($cell, restore) {
+ $cell.data('input').remove();
+ if (restore) $cell.html($cell.data('html'));
+ }
+ if (e.keyCode === 27) {
+ for (var i = 0; i < target.length; i++) {
+ removeInput($(target[i]), true);
+ }
+ } else if (e.keyCode === 13 && e.ctrlKey) {
+ // Ctrl + Enter
+ var cell, $cell, _cell, cellData = [];
+ for (var i = 0; i < target.length; i++) {
+ cell = target[i]; $cell = $(cell); _cell = table.cell(cell);
+ _cell.data($cell.data('input').val());
+ HTMLWidgets.shinyMode && cellData.push(cellInfo(cell));
+ removeInput($cell, false);
+ }
+ if (HTMLWidgets.shinyMode) {
+ changeInput('cell_edit', cellData, 'DT.cellInfo', null, {priority: "event"});
+ }
+ if (!server) table.draw(false);
+ }
+ });
+ })(target[i], this);
+ }
+ });
+
+ // interaction with shiny
+ if (!HTMLWidgets.shinyMode && !crosstalkOptions.group) return;
+
+ var methods = {};
+ var shinyData = {};
+
+ methods.updateCaption = function(caption) {
+ if (!caption) return;
+ $table.children('caption').replaceWith(caption);
+ }
+
+ // register clear functions to remove input values when the table is removed
+ instance.clearInputs = {};
+
+ var changeInput = function(id, value, type, noCrosstalk, opts) {
+ var event = id;
+ id = el.id + '_' + id;
+ if (type) id = id + ':' + type;
+ // do not update if the new value is the same as old value
+ if (event !== 'cell_edit' && !/_clicked$/.test(event) && shinyData.hasOwnProperty(id) && shinyData[id] === JSON.stringify(value))
+ return;
+ shinyData[id] = JSON.stringify(value);
+ if (HTMLWidgets.shinyMode && Shiny.setInputValue) {
+ Shiny.setInputValue(id, value, opts);
+ if (!instance.clearInputs[id]) instance.clearInputs[id] = function() {
+ Shiny.setInputValue(id, null);
+ }
+ }
+
+ // HACK
+ if (event === "rows_selected" && !noCrosstalk) {
+ if (crosstalkOptions.group) {
+ var keys = crosstalkOptions.key;
+ var selectedKeys = null;
+ if (value) {
+ selectedKeys = [];
+ for (var i = 0; i < value.length; i++) {
+ // The value array's contents use 1-based row numbers, so we must
+ // convert to 0-based before indexing into the keys array.
+ selectedKeys.push(keys[value[i] - 1]);
+ }
+ }
+ instance.ctselectHandle.set(selectedKeys);
+ }
+ }
+ };
+
+ var addOne = function(x) {
+ return x.map(function(i) { return 1 + i; });
+ };
+
+ var unique = function(x) {
+ var ux = [];
+ $.each(x, function(i, el){
+ if ($.inArray(el, ux) === -1) ux.push(el);
+ });
+ return ux;
+ }
+
+ // change the row index of a cell
+ var tweakCellIndex = function(cell) {
+ var info = cell.index();
+ // some cell may not be valid. e.g, #759
+ // when using the RowGroup extension, datatables will
+ // generate the row label and the cells are not part of
+ // the data thus contain no row/col info
+ if (info === undefined)
+ return {row: null, col: null};
+ if (server) {
+ info.row = DT_rows_current[info.row];
+ } else {
+ info.row += 1;
+ }
+ return {row: info.row, col: info.column};
+ }
+
+ var cleanSelectedValues = function() {
+ changeInput('rows_selected', []);
+ changeInput('columns_selected', []);
+ changeInput('cells_selected', transposeArray2D([]), 'shiny.matrix');
+ }
+ // #828 we should clean the selection on the server-side when the table reloads
+ cleanSelectedValues();
+
+ // a flag to indicates if select extension is initialized or not
+ var flagSelectExt = table.settings()[0]._select !== undefined;
+ // the Select extension should only be used in the client mode and
+ // when the selection.mode is set to none
+ if (data.selection.mode === 'none' && !server && flagSelectExt) {
+ var updateRowsSelected = function() {
+ var rows = table.rows({selected: true});
+ var selected = [];
+ $.each(rows.indexes().toArray(), function(i, v) {
+ selected.push(v + 1);
+ });
+ changeInput('rows_selected', selected);
+ }
+ var updateColsSelected = function() {
+ var columns = table.columns({selected: true});
+ changeInput('columns_selected', columns.indexes().toArray());
+ }
+ var updateCellsSelected = function() {
+ var cells = table.cells({selected: true});
+ var selected = [];
+ cells.every(function() {
+ var row = this.index().row;
+ var col = this.index().column;
+ selected = selected.concat([[row + 1, col]]);
+ });
+ changeInput('cells_selected', transposeArray2D(selected), 'shiny.matrix');
+ }
+ table.on('select deselect', function(e, dt, type, indexes) {
+ updateRowsSelected();
+ updateColsSelected();
+ updateCellsSelected();
+ })
+ updateRowsSelected();
+ updateColsSelected();
+ updateCellsSelected();
+ }
+
+ var selMode = data.selection.mode, selTarget = data.selection.target;
+ var selDisable = data.selection.selectable === false;
+ if (inArray(selMode, ['single', 'multiple'])) {
+ var selClass = inArray(data.style, ['bootstrap', 'bootstrap4']) ? 'active' : 'selected';
+ // selected1: row indices; selected2: column indices
+ var initSel = function(x) {
+ if (x === null || typeof x === 'boolean' || selTarget === 'cell') {
+ return {rows: [], cols: []};
+ } else if (selTarget === 'row') {
+ return {rows: $.makeArray(x), cols: []};
+ } else if (selTarget === 'column') {
+ return {rows: [], cols: $.makeArray(x)};
+ } else if (selTarget === 'row+column') {
+ return {rows: $.makeArray(x.rows), cols: $.makeArray(x.cols)};
+ }
+ }
+ var selected = data.selection.selected;
+ var selected1 = initSel(selected).rows, selected2 = initSel(selected).cols;
+ // selectable should contain either all positive or all non-positive values, not both
+ // positive values indicate "selectable" while non-positive values means "nonselectable"
+ // the assertion is performed on R side. (only column indicides could be zero which indicates
+ // the row name)
+ var selectable = data.selection.selectable;
+ var selectable1 = initSel(selectable).rows, selectable2 = initSel(selectable).cols;
+
+ // After users reorder the rows or filter the table, we cannot use the table index
+ // directly. Instead, we need this function to find out the rows between the two clicks.
+ // If user filter the table again between the start click and the end click, the behavior
+ // would be undefined, but it should not be a problem.
+ var shiftSelRowsIndex = function(start, end) {
+ var indexes = server ? DT_rows_all : table.rows({ search: 'applied' }).indexes().toArray();
+ start = indexes.indexOf(start); end = indexes.indexOf(end);
+ // if start is larger than end, we need to swap
+ if (start > end) {
+ var tmp = end; end = start; start = tmp;
+ }
+ return indexes.slice(start, end + 1);
+ }
+
+ var serverRowIndex = function(clientRowIndex) {
+ return server ? DT_rows_current[clientRowIndex] : clientRowIndex + 1;
+ }
+
+ // row, column, or cell selection
+ var lastClickedRow;
+ if (inArray(selTarget, ['row', 'row+column'])) {
+ // Get the current selected rows. It will also
+ // update the selected1's value based on the current row selection state
+ // Note we can't put this function inside selectRows() directly,
+ // the reason is method.selectRows() will override selected1's value but this
+ // function will add rows to selected1 (keep the existing selection), which is
+ // inconsistent with column and cell selection.
+ var selectedRows = function() {
+ var rows = table.rows('.' + selClass);
+ var idx = rows.indexes().toArray();
+ if (!server) {
+ selected1 = addOne(idx);
+ return selected1;
+ }
+ idx = idx.map(function(i) {
+ return DT_rows_current[i];
+ });
+ selected1 = selMode === 'multiple' ? unique(selected1.concat(idx)) : idx;
+ return selected1;
+ }
+ // Change selected1's value based on selectable1, then refresh the row state
+ var onlyKeepSelectableRows = function() {
+ if (selDisable) { // users can't select; useful when only want backend select
+ selected1 = [];
+ return;
+ }
+ if (selectable1.length === 0) return;
+ var nonselectable = selectable1[0] <= 0;
+ if (nonselectable) {
+ // should make selectable1 positive
+ selected1 = $(selected1).not(selectable1.map(function(i) { return -i; })).get();
+ } else {
+ selected1 = $(selected1).filter(selectable1).get();
+ }
+ }
+ // Change selected1's value based on selectable1, then
+ // refresh the row selection state according to values in selected1
+ var selectRows = function(ignoreSelectable) {
+ if (!ignoreSelectable) onlyKeepSelectableRows();
+ table.$('tr.' + selClass).removeClass(selClass);
+ if (selected1.length === 0) return;
+ if (server) {
+ table.rows({page: 'current'}).every(function() {
+ if (inArray(DT_rows_current[this.index()], selected1)) {
+ $(this.node()).addClass(selClass);
+ }
+ });
+ } else {
+ var selected0 = selected1.map(function(i) { return i - 1; });
+ $(table.rows(selected0).nodes()).addClass(selClass);
+ }
+ }
+ table.on('mousedown.dt', 'tbody tr', function(e) {
+ var $this = $(this), thisRow = table.row(this);
+ if (selMode === 'multiple') {
+ if (e.shiftKey && lastClickedRow !== undefined) {
+ // select or de-select depends on the last clicked row's status
+ var flagSel = !$this.hasClass(selClass);
+ var crtClickedRow = serverRowIndex(thisRow.index());
+ if (server) {
+ var rowsIndex = shiftSelRowsIndex(lastClickedRow, crtClickedRow);
+ // update current page's selClass
+ rowsIndex.map(function(i) {
+ var rowIndex = DT_rows_current.indexOf(i);
+ if (rowIndex >= 0) {
+ var row = table.row(rowIndex).nodes().to$();
+ var flagRowSel = !row.hasClass(selClass);
+ if (flagSel === flagRowSel) row.toggleClass(selClass);
+ }
+ });
+ // update selected1
+ if (flagSel) {
+ selected1 = unique(selected1.concat(rowsIndex));
+ } else {
+ selected1 = selected1.filter(function(index) {
+ return !inArray(index, rowsIndex);
+ });
+ }
+ } else {
+ // js starts from 0
+ shiftSelRowsIndex(lastClickedRow - 1, crtClickedRow - 1).map(function(value) {
+ var row = table.row(value).nodes().to$();
+ var flagRowSel = !row.hasClass(selClass);
+ if (flagSel === flagRowSel) row.toggleClass(selClass);
+ });
+ }
+ e.preventDefault();
+ } else {
+ $this.toggleClass(selClass);
+ }
+ } else {
+ if ($this.hasClass(selClass)) {
+ $this.removeClass(selClass);
+ } else {
+ table.$('tr.' + selClass).removeClass(selClass);
+ $this.addClass(selClass);
+ }
+ }
+ if (server && !$this.hasClass(selClass)) {
+ var id = DT_rows_current[thisRow.index()];
+ // remove id from selected1 since its class .selected has been removed
+ if (inArray(id, selected1)) selected1.splice($.inArray(id, selected1), 1);
+ }
+ selectedRows(); // update selected1's value based on selClass
+ selectRows(false); // only keep the selectable rows
+ changeInput('rows_selected', selected1);
+ changeInput('row_last_clicked', serverRowIndex(thisRow.index()), null, null, {priority: 'event'});
+ lastClickedRow = serverRowIndex(thisRow.index());
+ });
+ selectRows(false); // in case users have specified pre-selected rows
+ // restore selected rows after the table is redrawn (e.g. sort/search/page);
+ // client-side tables will preserve the selections automatically; for
+ // server-side tables, we have to *real* row indices are in `selected1`
+ changeInput('rows_selected', selected1);
+ if (server) table.on('draw.dt', function(e) { selectRows(false); });
+ methods.selectRows = function(selected, ignoreSelectable) {
+ selected1 = $.makeArray(selected);
+ selectRows(ignoreSelectable);
+ changeInput('rows_selected', selected1);
+ }
+ }
+
+ if (inArray(selTarget, ['column', 'row+column'])) {
+ if (selTarget === 'row+column') {
+ $(table.columns().footer()).css('cursor', 'pointer');
+ }
+ // update selected2's value based on selectable2
+ var onlyKeepSelectableCols = function() {
+ if (selDisable) { // users can't select; useful when only want backend select
+ selected2 = [];
+ return;
+ }
+ if (selectable2.length === 0) return;
+ var nonselectable = selectable2[0] <= 0;
+ if (nonselectable) {
+ // need to make selectable2 positive
+ selected2 = $(selected2).not(selectable2.map(function(i) { return -i; })).get();
+ } else {
+ selected2 = $(selected2).filter(selectable2).get();
+ }
+ }
+ // update selected2 and then
+ // refresh the col selection state according to values in selected2
+ var selectCols = function(ignoreSelectable) {
+ if (!ignoreSelectable) onlyKeepSelectableCols();
+ // if selected2 is not a valide index (e.g., larger than the column number)
+ // table.columns(selected2) will fail and result in a blank table
+ // this is different from the table.rows(), where the out-of-range indexes
+ // doesn't affect at all
+ selected2 = $(selected2).filter(table.columns().indexes()).get();
+ table.columns().nodes().flatten().to$().removeClass(selClass);
+ if (selected2.length > 0)
+ table.columns(selected2).nodes().flatten().to$().addClass(selClass);
+ }
+ var callback = function() {
+ var colIdx = selTarget === 'column' ? table.cell(this).index().column :
+ $.inArray(this, table.columns().footer()),
+ thisCol = $(table.column(colIdx).nodes());
+ if (colIdx === -1) return;
+ if (thisCol.hasClass(selClass)) {
+ thisCol.removeClass(selClass);
+ selected2.splice($.inArray(colIdx, selected2), 1);
+ } else {
+ if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass);
+ thisCol.addClass(selClass);
+ selected2 = selMode === 'single' ? [colIdx] : unique(selected2.concat([colIdx]));
+ }
+ selectCols(false); // update selected2 based on selectable
+ changeInput('columns_selected', selected2);
+ }
+ if (selTarget === 'column') {
+ $(table.table().body()).on('click.dt', 'td', callback);
+ } else {
+ $(table.table().footer()).on('click.dt', 'tr th', callback);
+ }
+ selectCols(false); // in case users have specified pre-selected columns
+ changeInput('columns_selected', selected2);
+ if (server) table.on('draw.dt', function(e) { selectCols(false); });
+ methods.selectColumns = function(selected, ignoreSelectable) {
+ selected2 = $.makeArray(selected);
+ selectCols(ignoreSelectable);
+ changeInput('columns_selected', selected2);
+ }
+ }
+
+ if (selTarget === 'cell') {
+ var selected3 = [], selectable3 = [];
+ if (selected !== null) selected3 = selected;
+ if (selectable !== null && typeof selectable !== 'boolean') selectable3 = selectable;
+ var findIndex = function(ij, sel) {
+ for (var i = 0; i < sel.length; i++) {
+ if (ij[0] === sel[i][0] && ij[1] === sel[i][1]) return i;
+ }
+ return -1;
+ }
+ // Change selected3's value based on selectable3, then refresh the cell state
+ var onlyKeepSelectableCells = function() {
+ if (selDisable) { // users can't select; useful when only want backend select
+ selected3 = [];
+ return;
+ }
+ if (selectable3.length === 0) return;
+ var nonselectable = selectable3[0][0] <= 0;
+ var out = [];
+ if (nonselectable) {
+ selected3.map(function(ij) {
+ // should make selectable3 positive
+ if (findIndex([-ij[0], -ij[1]], selectable3) === -1) { out.push(ij); }
+ });
+ } else {
+ selected3.map(function(ij) {
+ if (findIndex(ij, selectable3) > -1) { out.push(ij); }
+ });
+ }
+ selected3 = out;
+ }
+ // Change selected3's value based on selectable3, then
+ // refresh the cell selection state according to values in selected3
+ var selectCells = function(ignoreSelectable) {
+ if (!ignoreSelectable) onlyKeepSelectableCells();
+ table.$('td.' + selClass).removeClass(selClass);
+ if (selected3.length === 0) return;
+ if (server) {
+ table.cells({page: 'current'}).every(function() {
+ var info = tweakCellIndex(this);
+ if (findIndex([info.row, info.col], selected3) > -1)
+ $(this.node()).addClass(selClass);
+ });
+ } else {
+ selected3.map(function(ij) {
+ $(table.cell(ij[0] - 1, ij[1]).node()).addClass(selClass);
+ });
+ }
+ };
+ table.on('click.dt', 'tbody td', function() {
+ var $this = $(this), info = tweakCellIndex(table.cell(this));
+ if ($this.hasClass(selClass)) {
+ $this.removeClass(selClass);
+ selected3.splice(findIndex([info.row, info.col], selected3), 1);
+ } else {
+ if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass);
+ $this.addClass(selClass);
+ selected3 = selMode === 'single' ? [[info.row, info.col]] :
+ unique(selected3.concat([[info.row, info.col]]));
+ }
+ selectCells(false); // must call this to update selected3 based on selectable3
+ changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix');
+ });
+ selectCells(false); // in case users have specified pre-selected columns
+ changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix');
+
+ if (server) table.on('draw.dt', function(e) { selectCells(false); });
+ methods.selectCells = function(selected, ignoreSelectable) {
+ selected3 = selected ? selected : [];
+ selectCells(ignoreSelectable);
+ changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix');
+ }
+ }
+ }
+
+ // expose some table info to Shiny
+ var updateTableInfo = function(e, settings) {
+ // TODO: is anyone interested in the page info?
+ // changeInput('page_info', table.page.info());
+ var updateRowInfo = function(id, modifier) {
+ var idx;
+ if (server) {
+ idx = modifier.page === 'current' ? DT_rows_current : DT_rows_all;
+ } else {
+ var rows = table.rows($.extend({
+ search: 'applied',
+ page: 'all'
+ }, modifier));
+ idx = addOne(rows.indexes().toArray());
+ }
+ changeInput('rows' + '_' + id, idx);
+ };
+ updateRowInfo('current', {page: 'current'});
+ updateRowInfo('all', {});
+ }
+ table.on('draw.dt', updateTableInfo);
+ updateTableInfo();
+
+ // state info
+ table.on('draw.dt column-visibility.dt', function() {
+ changeInput('state', table.state());
+ });
+ changeInput('state', table.state());
+
+ // search info
+ var updateSearchInfo = function() {
+ changeInput('search', table.search());
+ if (filterRow) changeInput('search_columns', filterRow.toArray().map(function(td) {
+ return $(td).find('input').first().val();
+ }));
+ }
+ table.on('draw.dt', updateSearchInfo);
+ updateSearchInfo();
+
+ var cellInfo = function(thiz) {
+ var info = tweakCellIndex(table.cell(thiz));
+ info.value = table.cell(thiz).data();
+ return info;
+ }
+ // the current cell clicked on
+ table.on('click.dt', 'tbody td', function() {
+ changeInput('cell_clicked', cellInfo(this), null, null, {priority: 'event'});
+ })
+ changeInput('cell_clicked', {});
+
+ // do not trigger table selection when clicking on links unless they have classes
+ table.on('mousedown.dt', 'tbody td a', function(e) {
+ if (this.className === '') e.stopPropagation();
+ });
+
+ methods.addRow = function(data, rowname, resetPaging) {
+ var n = table.columns().indexes().length, d = n - data.length;
+ if (d === 1) {
+ data = rowname.concat(data)
+ } else if (d !== 0) {
+ console.log(data);
+ console.log(table.columns().indexes());
+ throw 'New data must be of the same length as current data (' + n + ')';
+ };
+ table.row.add(data).draw(resetPaging);
+ }
+
+ methods.updateSearch = function(keywords) {
+ if (keywords.global !== null)
+ $(table.table().container()).find('input[type=search]').first()
+ .val(keywords.global).trigger('input');
+ var columns = keywords.columns;
+ if (!filterRow || columns === null) return;
+ filterRow.toArray().map(function(td, i) {
+ var v = typeof columns === 'string' ? columns : columns[i];
+ if (typeof v === 'undefined') {
+ console.log('The search keyword for column ' + i + ' is undefined')
+ return;
+ }
+ // Update column search string and values on linked filter widgets.
+ // 'input' for factor and char filters, 'change' for numeric filters.
+ $(td).find('input').first().val(v).trigger('input', [true]).trigger('change');
+ });
+ table.draw();
+ }
+
+ methods.hideCols = function(hide, reset) {
+ if (reset) table.columns().visible(true, false);
+ table.columns(hide).visible(false);
+ }
+
+ methods.showCols = function(show, reset) {
+ if (reset) table.columns().visible(false, false);
+ table.columns(show).visible(true);
+ }
+
+ methods.colReorder = function(order, origOrder) {
+ table.colReorder.order(order, origOrder);
+ }
+
+ methods.selectPage = function(page) {
+ if (table.page.info().pages < page || page < 1) {
+ throw 'Selected page is out of range';
+ };
+ table.page(page - 1).draw(false);
+ }
+
+ methods.reloadData = function(resetPaging, clearSelection) {
+ // empty selections first if necessary
+ if (methods.selectRows && inArray('row', clearSelection)) methods.selectRows([]);
+ if (methods.selectColumns && inArray('column', clearSelection)) methods.selectColumns([]);
+ if (methods.selectCells && inArray('cell', clearSelection)) methods.selectCells([]);
+ table.ajax.reload(null, resetPaging);
+ }
+
+ // update table filters (set new limits of sliders)
+ methods.updateFilters = function(newProps) {
+ // loop through each filter in the filter row
+ filterRow.each(function(i, td) {
+ var k = i;
+ if (filterRow.length > newProps.length) {
+ if (i === 0) return; // first column is row names
+ k = i - 1;
+ }
+ // Update the filters to reflect the updated data.
+ // Allow "falsy" (e.g. NULL) to signify a no-op.
+ if (newProps[k]) {
+ setFilterProps(td, newProps[k]);
+ }
+ });
+ };
+
+ table.shinyMethods = methods;
+ },
+ resize: function(el, width, height, instance) {
+ if (instance.data) this.renderValue(el, instance.data, instance);
+
+ // dynamically adjust height if fillContainer = TRUE
+ if (instance.fillContainer)
+ this.fillAvailableHeight(el, height);
+
+ this.adjustWidth(el);
+ },
+
+ // dynamically set the scroll body to fill available height
+ // (used with fillContainer = TRUE)
+ fillAvailableHeight: function(el, availableHeight) {
+
+ // see how much of the table is occupied by header/footer elements
+ // and use that to compute a target scroll body height
+ var dtWrapper = $(el).find('div.dataTables_wrapper');
+ var dtScrollBody = $(el).find($('div.dataTables_scrollBody'));
+ var framingHeight = dtWrapper.innerHeight() - dtScrollBody.innerHeight();
+ var scrollBodyHeight = availableHeight - framingHeight;
+
+ // we need to set `max-height` to none as datatables library now sets this
+ // to a fixed height, disabling the ability to resize to fill the window,
+ // as it will be set to a fixed 100px under such circumstances, e.g., RStudio IDE,
+ // or FlexDashboard
+ // see https://github.com/rstudio/DT/issues/951#issuecomment-1026464509
+ dtScrollBody.css('max-height', 'none');
+ // set the height
+ dtScrollBody.height(scrollBodyHeight + 'px');
+ },
+
+ // adjust the width of columns; remove the hard-coded widths on table and the
+ // scroll header when scrollX/Y are enabled
+ adjustWidth: function(el) {
+ var $el = $(el), table = $el.data('datatable');
+ if (table) table.columns.adjust();
+ $el.find('.dataTables_scrollHeadInner').css('width', '')
+ .children('table').css('margin-left', '');
+ }
+});
+
+ if (!HTMLWidgets.shinyMode) return;
+
+ Shiny.addCustomMessageHandler('datatable-calls', function(data) {
+ var id = data.id;
+ var el = document.getElementById(id);
+ var table = el ? $(el).data('datatable') : null;
+ if (!table) {
+ console.log("Couldn't find table with id " + id);
+ return;
+ }
+
+ var methods = table.shinyMethods, call = data.call;
+ if (methods[call.method]) {
+ methods[call.method].apply(table, call.args);
+ } else {
+ console.log("Unknown method " + call.method);
+ }
+ });
+
+})();
diff --git a/docs/coverage/lib/datatables-css-0.0.0/datatables-crosstalk.css b/docs/coverage/lib/datatables-css-0.0.0/datatables-crosstalk.css
new file mode 100644
index 00000000..bd1159c8
--- /dev/null
+++ b/docs/coverage/lib/datatables-css-0.0.0/datatables-crosstalk.css
@@ -0,0 +1,32 @@
+.dt-crosstalk-fade {
+ opacity: 0.2;
+}
+
+html body div.DTS div.dataTables_scrollBody {
+ background: none;
+}
+
+
+/*
+Fix https://github.com/rstudio/DT/issues/563
+If the `table.display` is set to "block" (e.g., pkgdown), the browser will display
+datatable objects strangely. The search panel and the page buttons will still be
+in full-width but the table body will be "compact" and shorter.
+In therory, having this attributes will affect `dom="t"`
+with `display: block` users. But in reality, there should be no one.
+We may remove the below lines in the future if the upstream agree to have this there.
+See https://github.com/DataTables/DataTablesSrc/issues/160
+*/
+
+table.dataTable {
+ display: table;
+}
+
+
+/*
+When DTOutput(fill = TRUE), it receives a .html-fill-item class (via htmltools::bindFillRole()), which effectively amounts to `flex: 1 1 auto`. That's mostly fine, but the case where `fillContainer=TRUE`+`height:auto`+`flex-basis:auto` and the container (e.g., a bslib::card()) doesn't have a defined height is a bit problematic since the table wants to fit the parent but the parent wants to fit the table, which results pretty small table height (maybe because there is a minimum height somewhere?). It seems better in this case to impose a 400px height default for the table, which we can do by setting `flex-basis` to 400px (the table is still allowed to grow/shrink when the container has an opinionated height).
+*/
+
+.html-fill-container > .html-fill-item.datatables {
+ flex-basis: 400px;
+}
diff --git a/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.extra.css b/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.extra.css
new file mode 100644
index 00000000..b2dd141f
--- /dev/null
+++ b/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.extra.css
@@ -0,0 +1,28 @@
+/* Selected rows/cells */
+table.dataTable tr.selected td, table.dataTable td.selected {
+ background-color: #b0bed9 !important;
+}
+/* In case of scrollX/Y or FixedHeader */
+.dataTables_scrollBody .dataTables_sizing {
+ visibility: hidden;
+}
+
+/* The datatables' theme CSS file doesn't define
+the color but with white background. It leads to an issue that
+when the HTML's body color is set to 'white', the user can't
+see the text since the background is white. One case happens in the
+RStudio's IDE when inline viewing the DT table inside an Rmd file,
+if the IDE theme is set to "Cobalt".
+
+See https://github.com/rstudio/DT/issues/447 for more info
+
+This fixes should have little side-effects because all the other elements
+of the default theme use the #333 font color.
+
+TODO: The upstream may use relative colors for both the table background
+and the color. It means the table can display well without this patch
+then. At that time, we need to remove the below CSS attributes.
+*/
+div.datatables {
+ color: #333;
+}
diff --git a/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.min.css b/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.min.css
new file mode 100644
index 00000000..ad59f843
--- /dev/null
+++ b/docs/coverage/lib/dt-core-1.13.6/css/jquery.dataTables.min.css
@@ -0,0 +1 @@
+:root{--dt-row-selected: 13, 110, 253;--dt-row-selected-text: 255, 255, 255;--dt-row-selected-link: 9, 10, 11;--dt-row-stripe: 0, 0, 0;--dt-row-hover: 0, 0, 0;--dt-column-ordering: 0, 0, 0;--dt-html-background: white}:root.dark{--dt-html-background: rgb(33, 37, 41)}table.dataTable td.dt-control{text-align:center;cursor:pointer}table.dataTable td.dt-control:before{display:inline-block;color:rgba(0, 0, 0, 0.5);content:"►"}table.dataTable tr.dt-hasChild td.dt-control:before{content:"▼"}html.dark table.dataTable td.dt-control:before{color:rgba(255, 255, 255, 0.5)}html.dark table.dataTable tr.dt-hasChild td.dt-control:before{color:rgba(255, 255, 255, 0.5)}table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting_asc_disabled,table.dataTable thead>tr>th.sorting_desc_disabled,table.dataTable thead>tr>td.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting_asc_disabled,table.dataTable thead>tr>td.sorting_desc_disabled{cursor:pointer;position:relative;padding-right:26px}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after{position:absolute;display:block;opacity:.125;right:10px;line-height:9px;font-size:.8em}table.dataTable thead>tr>th.sorting:before,table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:before,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>th.sorting_desc_disabled:before,table.dataTable thead>tr>td.sorting:before,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:before,table.dataTable thead>tr>td.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:before{bottom:50%;content:"▲";content:"▲"/""}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>th.sorting_asc_disabled:after,table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc_disabled:after,table.dataTable thead>tr>td.sorting_desc_disabled:after{top:50%;content:"▼";content:"▼"/""}table.dataTable thead>tr>th.sorting_asc:before,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting_asc:before,table.dataTable thead>tr>td.sorting_desc:after{opacity:.6}table.dataTable thead>tr>th.sorting_desc_disabled:after,table.dataTable thead>tr>th.sorting_asc_disabled:before,table.dataTable thead>tr>td.sorting_desc_disabled:after,table.dataTable thead>tr>td.sorting_asc_disabled:before{display:none}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}div.dataTables_scrollBody>table.dataTable>thead>tr>th:before,div.dataTables_scrollBody>table.dataTable>thead>tr>th:after,div.dataTables_scrollBody>table.dataTable>thead>tr>td:before,div.dataTables_scrollBody>table.dataTable>thead>tr>td:after{display:none}div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:2px}div.dataTables_processing>div:last-child{position:relative;width:80px;height:15px;margin:1em auto}div.dataTables_processing>div:last-child>div{position:absolute;top:0;width:13px;height:13px;border-radius:50%;background:rgb(13, 110, 253);background:rgb(var(--dt-row-selected));animation-timing-function:cubic-bezier(0, 1, 1, 0)}div.dataTables_processing>div:last-child>div:nth-child(1){left:8px;animation:datatables-loader-1 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(2){left:8px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(3){left:32px;animation:datatables-loader-2 .6s infinite}div.dataTables_processing>div:last-child>div:nth-child(4){left:56px;animation:datatables-loader-3 .6s infinite}@keyframes datatables-loader-1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes datatables-loader-3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes datatables-loader-2{0%{transform:translate(0, 0)}100%{transform:translate(24px, 0)}}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th,table.dataTable thead td,table.dataTable tfoot th,table.dataTable tfoot td{text-align:left}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable>thead>tr>th,table.dataTable>thead>tr>td{padding:10px;border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable>thead>tr>th:active,table.dataTable>thead>tr>td:active{outline:none}table.dataTable>tfoot>tr>th,table.dataTable>tfoot>tr>td{padding:10px 10px 6px 10px;border-top:1px solid rgba(0, 0, 0, 0.3)}table.dataTable tbody tr{background-color:transparent}table.dataTable tbody tr.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.9);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.9);color:rgb(255, 255, 255);color:rgb(var(--dt-row-selected-text))}table.dataTable tbody tr.selected a{color:rgb(9, 10, 11);color:rgb(var(--dt-row-selected-link))}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border>tbody>tr>th,table.dataTable.row-border>tbody>tr>td,table.dataTable.display>tbody>tr>th,table.dataTable.display>tbody>tr>td{border-top:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.row-border>tbody>tr:first-child>th,table.dataTable.row-border>tbody>tr:first-child>td,table.dataTable.display>tbody>tr:first-child>th,table.dataTable.display>tbody>tr:first-child>td{border-top:none}table.dataTable.row-border>tbody>tr.selected+tr.selected>td,table.dataTable.display>tbody>tr.selected+tr.selected>td{border-top-color:#0262ef}table.dataTable.cell-border>tbody>tr>th,table.dataTable.cell-border>tbody>tr>td{border-top:1px solid rgba(0, 0, 0, 0.15);border-right:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border>tbody>tr>th:first-child,table.dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid rgba(0, 0, 0, 0.15)}table.dataTable.cell-border>tbody>tr:first-child>th,table.dataTable.cell-border>tbody>tr:first-child>td{border-top:none}table.dataTable.stripe>tbody>tr.odd>*,table.dataTable.display>tbody>tr.odd>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.023);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.023)}table.dataTable.stripe>tbody>tr.odd.selected>*,table.dataTable.display>tbody>tr.odd.selected>*{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.923);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.923)}table.dataTable.hover>tbody>tr:hover>*,table.dataTable.display>tbody>tr:hover>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.035);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.035)}table.dataTable.hover>tbody>tr.selected:hover>*,table.dataTable.display>tbody>tr.selected:hover>*{box-shadow:inset 0 0 0 9999px #0d6efd !important;box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 1) !important}table.dataTable.order-column>tbody tr>.sorting_1,table.dataTable.order-column>tbody tr>.sorting_2,table.dataTable.order-column>tbody tr>.sorting_3,table.dataTable.display>tbody tr>.sorting_1,table.dataTable.display>tbody tr>.sorting_2,table.dataTable.display>tbody tr>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.019)}table.dataTable.order-column>tbody tr.selected>.sorting_1,table.dataTable.order-column>tbody tr.selected>.sorting_2,table.dataTable.order-column>tbody tr.selected>.sorting_3,table.dataTable.display>tbody tr.selected>.sorting_1,table.dataTable.display>tbody tr.selected>.sorting_2,table.dataTable.display>tbody tr.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919)}table.dataTable.display>tbody>tr.odd>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.054);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.054)}table.dataTable.display>tbody>tr.odd>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.047);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.047)}table.dataTable.display>tbody>tr.odd>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.039);box-shadow:inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.039)}table.dataTable.display>tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.954);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.954)}table.dataTable.display>tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.947);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.947)}table.dataTable.display>tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.odd.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.939);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.939)}table.dataTable.display>tbody>tr.even>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.019);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.019)}table.dataTable.display>tbody>tr.even>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.011);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.011)}table.dataTable.display>tbody>tr.even>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.003);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.003)}table.dataTable.display>tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.919);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919)}table.dataTable.display>tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.911);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.911)}table.dataTable.display>tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe>tbody>tr.even.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.903);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.903)}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.082);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.082)}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.074);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.074)}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.062);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.062)}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.982);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.982)}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.974);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.974)}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{box-shadow:inset 0 0 0 9999px rgba(13, 110, 253, 0.962);box-shadow:inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.962)}table.dataTable.no-footer{border-bottom:1px solid rgba(0, 0, 0, 0.3)}table.dataTable.compact thead th,table.dataTable.compact thead td,table.dataTable.compact tfoot th,table.dataTable.compact tfoot td,table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_length select{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;color:inherit;padding:4px}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{border:1px solid #aaa;border-radius:3px;padding:5px;background-color:transparent;color:inherit;margin-left:3px}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;color:inherit !important;border:1px solid transparent;border-radius:2px;background:transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:inherit !important;border:1px solid rgba(0, 0, 0, 0.3);background-color:rgba(0, 0, 0, 0.05);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.05)), color-stop(100%, rgba(0, 0, 0, 0.05)));background:-webkit-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-moz-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-ms-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:-o-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%);background:linear-gradient(to bottom, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#111;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#0c0c0c;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:inherit}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid rgba(0, 0, 0, 0.3)}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}html.dark{--dt-row-hover: 255, 255, 255;--dt-row-stripe: 255, 255, 255;--dt-column-ordering: 255, 255, 255}html.dark table.dataTable>thead>tr>th,html.dark table.dataTable>thead>tr>td{border-bottom:1px solid rgb(89, 91, 94)}html.dark table.dataTable>thead>tr>th:active,html.dark table.dataTable>thead>tr>td:active{outline:none}html.dark table.dataTable>tfoot>tr>th,html.dark table.dataTable>tfoot>tr>td{border-top:1px solid rgb(89, 91, 94)}html.dark table.dataTable.row-border>tbody>tr>th,html.dark table.dataTable.row-border>tbody>tr>td,html.dark table.dataTable.display>tbody>tr>th,html.dark table.dataTable.display>tbody>tr>td{border-top:1px solid rgb(64, 67, 70)}html.dark table.dataTable.row-border>tbody>tr.selected+tr.selected>td,html.dark table.dataTable.display>tbody>tr.selected+tr.selected>td{border-top-color:#0257d5}html.dark table.dataTable.cell-border>tbody>tr>th,html.dark table.dataTable.cell-border>tbody>tr>td{border-top:1px solid rgb(64, 67, 70);border-right:1px solid rgb(64, 67, 70)}html.dark table.dataTable.cell-border>tbody>tr>th:first-child,html.dark table.dataTable.cell-border>tbody>tr>td:first-child{border-left:1px solid rgb(64, 67, 70)}html.dark .dataTables_wrapper .dataTables_filter input,html.dark .dataTables_wrapper .dataTables_length select{border:1px solid rgba(255, 255, 255, 0.2);background-color:var(--dt-html-background)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{border:1px solid rgb(89, 91, 94);background:rgba(255, 255, 255, 0.15)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{color:#666 !important}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button:hover{border:1px solid rgb(53, 53, 53);background:rgb(53, 53, 53)}html.dark .dataTables_wrapper .dataTables_paginate .paginate_button:active{background:#3a3a3a}
diff --git a/docs/coverage/lib/dt-core-1.13.6/js/jquery.dataTables.min.js b/docs/coverage/lib/dt-core-1.13.6/js/jquery.dataTables.min.js
new file mode 100644
index 00000000..f786b0da
--- /dev/null
+++ b/docs/coverage/lib/dt-core-1.13.6/js/jquery.dataTables.min.js
@@ -0,0 +1,4 @@
+/*! DataTables 1.13.6
+ * ©2008-2023 SpryMedia Ltd - datatables.net/license
+ */
+!function(n){"use strict";var a;"function"==typeof define&&define.amd?define(["jquery"],function(t){return n(t,window,document)}):"object"==typeof exports?(a=require("jquery"),"undefined"==typeof window?module.exports=function(t,e){return t=t||window,e=e||a(t),n(e,t,t.document)}:n(a,window,window.document)):window.DataTable=n(jQuery,window,document)}(function(P,j,v,H){"use strict";function d(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null}function l(t,e,n){var a=typeof t,r="string"==a;return"number"==a||"bigint"==a||!!h(t)||(e&&r&&(t=$(t,e)),n&&r&&(t=t.replace(q,"")),!isNaN(parseFloat(t))&&isFinite(t))}function a(t,e,n){var a;return!!h(t)||(h(a=t)||"string"==typeof a)&&!!l(t.replace(V,"").replace(/<script/i,""),e,n)||null}function m(t,e,n,a){var r=[],o=0,i=e.length;if(a!==H)for(;o<i;o++)t[e[o]][n]&&r.push(t[e[o]][n][a]);else for(;o<i;o++)r.push(t[e[o]][n]);return r}function f(t,e){var n,a=[];e===H?(e=0,n=t):(n=e,e=t);for(var r=e;r<n;r++)a.push(r);return a}function _(t){for(var e=[],n=0,a=t.length;n<a;n++)t[n]&&e.push(t[n]);return e}function s(t,e){return-1!==this.indexOf(t,e=e===H?0:e)}var p,e,t,w=function(t,v){if(w.factory(t,v))return w;if(this instanceof w)return P(t).DataTable(v);v=t,this.$=function(t,e){return this.api(!0).$(t,e)},this._=function(t,e){return this.api(!0).rows(t,e).data()},this.api=function(t){return new B(t?ge(this[p.iApiIndex]):this)},this.fnAddData=function(t,e){var n=this.api(!0),t=(Array.isArray(t)&&(Array.isArray(t[0])||P.isPlainObject(t[0]))?n.rows:n.row).add(t);return e!==H&&!e||n.draw(),t.flatten().toArray()},this.fnAdjustColumnSizing=function(t){var e=this.api(!0).columns.adjust(),n=e.settings()[0],a=n.oScroll;t===H||t?e.draw(!1):""===a.sX&&""===a.sY||Qt(n)},this.fnClearTable=function(t){var e=this.api(!0).clear();t!==H&&!t||e.draw()},this.fnClose=function(t){this.api(!0).row(t).child.hide()},this.fnDeleteRow=function(t,e,n){var a=this.api(!0),t=a.rows(t),r=t.settings()[0],o=r.aoData[t[0][0]];return t.remove(),e&&e.call(this,r,o),n!==H&&!n||a.draw(),o},this.fnDestroy=function(t){this.api(!0).destroy(t)},this.fnDraw=function(t){this.api(!0).draw(t)},this.fnFilter=function(t,e,n,a,r,o){var i=this.api(!0);(null===e||e===H?i:i.column(e)).search(t,n,a,o),i.draw()},this.fnGetData=function(t,e){var n,a=this.api(!0);return t!==H?(n=t.nodeName?t.nodeName.toLowerCase():"",e!==H||"td"==n||"th"==n?a.cell(t,e).data():a.row(t).data()||null):a.data().toArray()},this.fnGetNodes=function(t){var e=this.api(!0);return t!==H?e.row(t).node():e.rows().nodes().flatten().toArray()},this.fnGetPosition=function(t){var e=this.api(!0),n=t.nodeName.toUpperCase();return"TR"==n?e.row(t).index():"TD"==n||"TH"==n?[(n=e.cell(t).index()).row,n.columnVisible,n.column]:null},this.fnIsOpen=function(t){return this.api(!0).row(t).child.isShown()},this.fnOpen=function(t,e,n){return this.api(!0).row(t).child(e,n).show().child()[0]},this.fnPageChange=function(t,e){t=this.api(!0).page(t);e!==H&&!e||t.draw(!1)},this.fnSetColumnVis=function(t,e,n){t=this.api(!0).column(t).visible(e);n!==H&&!n||t.columns.adjust().draw()},this.fnSettings=function(){return ge(this[p.iApiIndex])},this.fnSort=function(t){this.api(!0).order(t).draw()},this.fnSortListener=function(t,e,n){this.api(!0).order.listener(t,e,n)},this.fnUpdate=function(t,e,n,a,r){var o=this.api(!0);return(n===H||null===n?o.row(e):o.cell(e,n)).data(t),r!==H&&!r||o.columns.adjust(),a!==H&&!a||o.draw(),0},this.fnVersionCheck=p.fnVersionCheck;var e,y=this,D=v===H,_=this.length;for(e in D&&(v={}),this.oApi=this.internal=p.internal,w.ext.internal)e&&(this[e]=$e(e));return this.each(function(){var r=1<_?be({},v,!0):v,o=0,t=this.getAttribute("id"),i=!1,e=w.defaults,l=P(this);if("table"!=this.nodeName.toLowerCase())W(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{K(e),Q(e.column),C(e,e,!0),C(e.column,e.column,!0),C(e,P.extend(r,l.data()),!0);for(var n=w.settings,o=0,s=n.length;o<s;o++){var a=n[o];if(a.nTable==this||a.nTHead&&a.nTHead.parentNode==this||a.nTFoot&&a.nTFoot.parentNode==this){var u=(r.bRetrieve!==H?r:e).bRetrieve,c=(r.bDestroy!==H?r:e).bDestroy;if(D||u)return a.oInstance;if(c){a.oInstance.fnDestroy();break}return void W(a,0,"Cannot reinitialise DataTable",3)}if(a.sTableId==this.id){n.splice(o,1);break}}null!==t&&""!==t||(t="DataTables_Table_"+w.ext._unique++,this.id=t);var f,d,h=P.extend(!0,{},w.models.oSettings,{sDestroyWidth:l[0].style.width,sInstance:t,sTableId:t}),p=(h.nTable=this,h.oApi=y.internal,h.oInit=r,n.push(h),h.oInstance=1===y.length?y:l.dataTable(),K(r),Z(r.oLanguage),r.aLengthMenu&&!r.iDisplayLength&&(r.iDisplayLength=(Array.isArray(r.aLengthMenu[0])?r.aLengthMenu[0]:r.aLengthMenu)[0]),r=be(P.extend(!0,{},e),r),F(h.oFeatures,r,["bPaginate","bLengthChange","bFilter","bSort","bSortMulti","bInfo","bProcessing","bAutoWidth","bSortClasses","bServerSide","bDeferRender"]),F(h,r,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]),F(h.oScroll,r,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]),F(h.oLanguage,r,"fnInfoCallback"),L(h,"aoDrawCallback",r.fnDrawCallback,"user"),L(h,"aoServerParams",r.fnServerParams,"user"),L(h,"aoStateSaveParams",r.fnStateSaveParams,"user"),L(h,"aoStateLoadParams",r.fnStateLoadParams,"user"),L(h,"aoStateLoaded",r.fnStateLoaded,"user"),L(h,"aoRowCallback",r.fnRowCallback,"user"),L(h,"aoRowCreatedCallback",r.fnCreatedRow,"user"),L(h,"aoHeaderCallback",r.fnHeaderCallback,"user"),L(h,"aoFooterCallback",r.fnFooterCallback,"user"),L(h,"aoInitComplete",r.fnInitComplete,"user"),L(h,"aoPreDrawCallback",r.fnPreDrawCallback,"user"),h.rowIdFn=A(r.rowId),tt(h),h.oClasses),g=(P.extend(p,w.ext.classes,r.oClasses),l.addClass(p.sTable),h.iInitDisplayStart===H&&(h.iInitDisplayStart=r.iDisplayStart,h._iDisplayStart=r.iDisplayStart),null!==r.iDeferLoading&&(h.bDeferLoading=!0,t=Array.isArray(r.iDeferLoading),h._iRecordsDisplay=t?r.iDeferLoading[0]:r.iDeferLoading,h._iRecordsTotal=t?r.iDeferLoading[1]:r.iDeferLoading),h.oLanguage),t=(P.extend(!0,g,r.oLanguage),g.sUrl?(P.ajax({dataType:"json",url:g.sUrl,success:function(t){C(e.oLanguage,t),Z(t),P.extend(!0,g,t,h.oInit.oLanguage),R(h,null,"i18n",[h]),Jt(h)},error:function(){Jt(h)}}),i=!0):R(h,null,"i18n",[h]),null===r.asStripeClasses&&(h.asStripeClasses=[p.sStripeOdd,p.sStripeEven]),h.asStripeClasses),b=l.children("tbody").find("tr").eq(0),m=(-1!==P.inArray(!0,P.map(t,function(t,e){return b.hasClass(t)}))&&(P("tbody tr",this).removeClass(t.join(" ")),h.asDestroyStripes=t.slice()),[]),t=this.getElementsByTagName("thead");if(0!==t.length&&(wt(h.aoHeader,t[0]),m=Ct(h)),null===r.aoColumns)for(f=[],o=0,s=m.length;o<s;o++)f.push(null);else f=r.aoColumns;for(o=0,s=f.length;o<s;o++)nt(h,m?m[o]:null);st(h,r.aoColumnDefs,f,function(t,e){at(h,t,e)}),b.length&&(d=function(t,e){return null!==t.getAttribute("data-"+e)?e:null},P(b[0]).children("th, td").each(function(t,e){var n,a=h.aoColumns[t];a||W(h,0,"Incorrect column count",18),a.mData===t&&(n=d(e,"sort")||d(e,"order"),e=d(e,"filter")||d(e,"search"),null===n&&null===e||(a.mData={_:t+".display",sort:null!==n?t+".@data-"+n:H,type:null!==n?t+".@data-"+n:H,filter:null!==e?t+".@data-"+e:H},a._isArrayHost=!0,at(h,t)))}));var S=h.oFeatures,t=function(){if(r.aaSorting===H){var t=h.aaSorting;for(o=0,s=t.length;o<s;o++)t[o][1]=h.aoColumns[o].asSorting[0]}ce(h),S.bSort&&L(h,"aoDrawCallback",function(){var t,n;h.bSorted&&(t=I(h),n={},P.each(t,function(t,e){n[e.src]=e.dir}),R(h,null,"order",[h,t,n]),le(h))}),L(h,"aoDrawCallback",function(){(h.bSorted||"ssp"===E(h)||S.bDeferRender)&&ce(h)},"sc");var e=l.children("caption").each(function(){this._captionSide=P(this).css("caption-side")}),n=l.children("thead"),a=(0===n.length&&(n=P("<thead/>").appendTo(l)),h.nTHead=n[0],l.children("tbody")),n=(0===a.length&&(a=P("<tbody/>").insertAfter(n)),h.nTBody=a[0],l.children("tfoot"));if(0===(n=0===n.length&&0<e.length&&(""!==h.oScroll.sX||""!==h.oScroll.sY)?P("<tfoot/>").appendTo(l):n).length||0===n.children().length?l.addClass(p.sNoFooter):0<n.length&&(h.nTFoot=n[0],wt(h.aoFooter,h.nTFoot)),r.aaData)for(o=0;o<r.aaData.length;o++)x(h,r.aaData[o]);else!h.bDeferLoading&&"dom"!=E(h)||ut(h,P(h.nTBody).children("tr"));h.aiDisplay=h.aiDisplayMaster.slice(),!(h.bInitialised=!0)===i&&Jt(h)};L(h,"aoDrawCallback",de,"state_save"),r.bStateSave?(S.bStateSave=!0,he(h,0,t)):t()}}),y=null,this},c={},U=/[\r\n\u2028]/g,V=/<.*?>/g,X=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,J=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^","-"].join("|\\")+")","g"),q=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,h=function(t){return!t||!0===t||"-"===t},$=function(t,e){return c[e]||(c[e]=new RegExp(Ot(e),"g")),"string"==typeof t&&"."!==e?t.replace(/\./g,"").replace(c[e],"."):t},N=function(t,e,n){var a=[],r=0,o=t.length;if(n!==H)for(;r<o;r++)t[r]&&t[r][e]&&a.push(t[r][e][n]);else for(;r<o;r++)t[r]&&a.push(t[r][e]);return a},G=function(t){if(!(t.length<2))for(var e=t.slice().sort(),n=e[0],a=1,r=e.length;a<r;a++){if(e[a]===n)return!1;n=e[a]}return!0},z=function(t){if(G(t))return t.slice();var e,n,a,r=[],o=t.length,i=0;t:for(n=0;n<o;n++){for(e=t[n],a=0;a<i;a++)if(r[a]===e)continue t;r.push(e),i++}return r},Y=function(t,e){if(Array.isArray(e))for(var n=0;n<e.length;n++)Y(t,e[n]);else t.push(e);return t};function i(n){var a,r,o={};P.each(n,function(t,e){(a=t.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(a[1]+" ")&&(r=t.replace(a[0],a[2].toLowerCase()),o[r]=t,"o"===a[1])&&i(n[t])}),n._hungarianMap=o}function C(n,a,r){var o;n._hungarianMap||i(n),P.each(a,function(t,e){(o=n._hungarianMap[t])===H||!r&&a[o]!==H||("o"===o.charAt(0)?(a[o]||(a[o]={}),P.extend(!0,a[o],a[t]),C(n[o],a[o],r)):a[o]=a[t])})}function Z(t){var e,n=w.defaults.oLanguage,a=n.sDecimal;a&&Me(a),t&&(e=t.sZeroRecords,!t.sEmptyTable&&e&&"No data available in table"===n.sEmptyTable&&F(t,t,"sZeroRecords","sEmptyTable"),!t.sLoadingRecords&&e&&"Loading..."===n.sLoadingRecords&&F(t,t,"sZeroRecords","sLoadingRecords"),t.sInfoThousands&&(t.sThousands=t.sInfoThousands),e=t.sDecimal)&&a!==e&&Me(e)}Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),Array.prototype.includes||(Array.prototype.includes=s),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),String.prototype.includes||(String.prototype.includes=s),w.util={throttle:function(a,t){var r,o,i=t!==H?t:200;return function(){var t=this,e=+new Date,n=arguments;r&&e<r+i?(clearTimeout(o),o=setTimeout(function(){r=H,a.apply(t,n)},i)):(r=e,a.apply(t,n))}},escapeRegex:function(t){return t.replace(J,"\\$1")},set:function(a){var d;return P.isPlainObject(a)?w.util.set(a._):null===a?function(){}:"function"==typeof a?function(t,e,n){a(t,"set",e,n)}:"string"!=typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("(")?function(t,e){t[a]=e}:(d=function(t,e,n){for(var a,r,o,i,l=dt(n),n=l[l.length-1],s=0,u=l.length-1;s<u;s++){if("__proto__"===l[s]||"constructor"===l[s])throw new Error("Cannot set prototype values");if(a=l[s].match(ft),r=l[s].match(g),a){if(l[s]=l[s].replace(ft,""),t[l[s]]=[],(a=l.slice()).splice(0,s+1),i=a.join("."),Array.isArray(e))for(var c=0,f=e.length;c<f;c++)d(o={},e[c],i),t[l[s]].push(o);else t[l[s]]=e;return}r&&(l[s]=l[s].replace(g,""),t=t[l[s]](e)),null!==t[l[s]]&&t[l[s]]!==H||(t[l[s]]={}),t=t[l[s]]}n.match(g)?t[n.replace(g,"")](e):t[n.replace(ft,"")]=e},function(t,e){return d(t,e,a)})},get:function(r){var o,d;return P.isPlainObject(r)?(o={},P.each(r,function(t,e){e&&(o[t]=w.util.get(e))}),function(t,e,n,a){var r=o[e]||o._;return r!==H?r(t,e,n,a):t}):null===r?function(t){return t}:"function"==typeof r?function(t,e,n,a){return r(t,e,n,a)}:"string"!=typeof r||-1===r.indexOf(".")&&-1===r.indexOf("[")&&-1===r.indexOf("(")?function(t,e){return t[r]}:(d=function(t,e,n){var a,r,o;if(""!==n)for(var i=dt(n),l=0,s=i.length;l<s;l++){if(f=i[l].match(ft),a=i[l].match(g),f){if(i[l]=i[l].replace(ft,""),""!==i[l]&&(t=t[i[l]]),r=[],i.splice(0,l+1),o=i.join("."),Array.isArray(t))for(var u=0,c=t.length;u<c;u++)r.push(d(t[u],e,o));var f=f[0].substring(1,f[0].length-1);t=""===f?r:r.join(f);break}if(a)i[l]=i[l].replace(g,""),t=t[i[l]]();else{if(null===t||null===t[i[l]])return null;if(t===H||t[i[l]]===H)return H;t=t[i[l]]}}return t},function(t,e){return d(t,e,r)})}};var r=function(t,e,n){t[e]!==H&&(t[n]=t[e])};function K(t){r(t,"ordering","bSort"),r(t,"orderMulti","bSortMulti"),r(t,"orderClasses","bSortClasses"),r(t,"orderCellsTop","bSortCellsTop"),r(t,"order","aaSorting"),r(t,"orderFixed","aaSortingFixed"),r(t,"paging","bPaginate"),r(t,"pagingType","sPaginationType"),r(t,"pageLength","iDisplayLength"),r(t,"searching","bFilter"),"boolean"==typeof t.sScrollX&&(t.sScrollX=t.sScrollX?"100%":""),"boolean"==typeof t.scrollX&&(t.scrollX=t.scrollX?"100%":"");var e=t.aoSearchCols;if(e)for(var n=0,a=e.length;n<a;n++)e[n]&&C(w.models.oSearch,e[n])}function Q(t){r(t,"orderable","bSortable"),r(t,"orderData","aDataSort"),r(t,"orderSequence","asSorting"),r(t,"orderDataType","sortDataType");var e=t.aDataSort;"number"!=typeof e||Array.isArray(e)||(t.aDataSort=[e])}function tt(t){var e,n,a,r;w.__browser||(w.__browser=e={},r=(a=(n=P("<div/>").css({position:"fixed",top:0,left:-1*P(j).scrollLeft(),height:1,width:1,overflow:"hidden"}).append(P("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(P("<div/>").css({width:"100%",height:10}))).appendTo("body")).children()).children(),e.barWidth=a[0].offsetWidth-a[0].clientWidth,e.bScrollOversize=100===r[0].offsetWidth&&100!==a[0].clientWidth,e.bScrollbarLeft=1!==Math.round(r.offset().left),e.bBounding=!!n[0].getBoundingClientRect().width,n.remove()),P.extend(t.oBrowser,w.__browser),t.oScroll.iBarWidth=w.__browser.barWidth}function et(t,e,n,a,r,o){var i,l=a,s=!1;for(n!==H&&(i=n,s=!0);l!==r;)t.hasOwnProperty(l)&&(i=s?e(i,t[l],l,t):t[l],s=!0,l+=o);return i}function nt(t,e){var n=w.defaults.column,a=t.aoColumns.length,n=P.extend({},w.models.oColumn,n,{nTh:e||v.createElement("th"),sTitle:n.sTitle||(e?e.innerHTML:""),aDataSort:n.aDataSort||[a],mData:n.mData||a,idx:a}),n=(t.aoColumns.push(n),t.aoPreSearchCols);n[a]=P.extend({},w.models.oSearch,n[a]),at(t,a,P(e).data())}function at(t,e,n){function a(t){return"string"==typeof t&&-1!==t.indexOf("@")}var e=t.aoColumns[e],r=t.oClasses,o=P(e.nTh),i=(!e.sWidthOrig&&(e.sWidthOrig=o.attr("width")||null,u=(o.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/))&&(e.sWidthOrig=u[1]),n!==H&&null!==n&&(Q(n),C(w.defaults.column,n,!0),n.mDataProp===H||n.mData||(n.mData=n.mDataProp),n.sType&&(e._sManualType=n.sType),n.className&&!n.sClass&&(n.sClass=n.className),n.sClass&&o.addClass(n.sClass),u=e.sClass,P.extend(e,n),F(e,n,"sWidth","sWidthOrig"),u!==e.sClass&&(e.sClass=u+" "+e.sClass),n.iDataSort!==H&&(e.aDataSort=[n.iDataSort]),F(e,n,"aDataSort"),e.ariaTitle||(e.ariaTitle=o.attr("aria-label"))),e.mData),l=A(i),s=e.mRender?A(e.mRender):null,u=(e._bAttrSrc=P.isPlainObject(i)&&(a(i.sort)||a(i.type)||a(i.filter)),e._setter=null,e.fnGetData=function(t,e,n){var a=l(t,e,H,n);return s&&e?s(a,e,t,n):a},e.fnSetData=function(t,e,n){return b(i)(t,e,n)},"number"==typeof i||e._isArrayHost||(t._rowReadObject=!0),t.oFeatures.bSort||(e.bSortable=!1,o.addClass(r.sSortableNone)),-1!==P.inArray("asc",e.asSorting)),n=-1!==P.inArray("desc",e.asSorting);e.bSortable&&(u||n)?u&&!n?(e.sSortingClass=r.sSortableAsc,e.sSortingClassJUI=r.sSortJUIAscAllowed):!u&&n?(e.sSortingClass=r.sSortableDesc,e.sSortingClassJUI=r.sSortJUIDescAllowed):(e.sSortingClass=r.sSortable,e.sSortingClassJUI=r.sSortJUI):(e.sSortingClass=r.sSortableNone,e.sSortingClassJUI="")}function O(t){if(!1!==t.oFeatures.bAutoWidth){var e=t.aoColumns;ee(t);for(var n=0,a=e.length;n<a;n++)e[n].nTh.style.width=e[n].sWidth}var r=t.oScroll;""===r.sY&&""===r.sX||Qt(t),R(t,null,"column-sizing",[t])}function rt(t,e){t=it(t,"bVisible");return"number"==typeof t[e]?t[e]:null}function ot(t,e){t=it(t,"bVisible"),e=P.inArray(e,t);return-1!==e?e:null}function T(t){var n=0;return P.each(t.aoColumns,function(t,e){e.bVisible&&"none"!==P(e.nTh).css("display")&&n++}),n}function it(t,n){var a=[];return P.map(t.aoColumns,function(t,e){t[n]&&a.push(e)}),a}function lt(t){for(var e,n,a,r,o,i,l,s=t.aoColumns,u=t.aoData,c=w.ext.type.detect,f=0,d=s.length;f<d;f++)if(l=[],!(o=s[f]).sType&&o._sManualType)o.sType=o._sManualType;else if(!o.sType){for(e=0,n=c.length;e<n;e++){for(a=0,r=u.length;a<r&&(l[a]===H&&(l[a]=S(t,a,f,"type")),(i=c[e](l[a],t))||e===c.length-1)&&("html"!==i||h(l[a]));a++);if(i){o.sType=i;break}}o.sType||(o.sType="string")}}function st(t,e,n,a){var r,o,i,l,s=t.aoColumns;if(e)for(r=e.length-1;0<=r;r--)for(var u,c=(u=e[r]).target!==H?u.target:u.targets!==H?u.targets:u.aTargets,f=0,d=(c=Array.isArray(c)?c:[c]).length;f<d;f++)if("number"==typeof c[f]&&0<=c[f]){for(;s.length<=c[f];)nt(t);a(c[f],u)}else if("number"==typeof c[f]&&c[f]<0)a(s.length+c[f],u);else if("string"==typeof c[f])for(i=0,l=s.length;i<l;i++)"_all"!=c[f]&&!P(s[i].nTh).hasClass(c[f])||a(i,u);if(n)for(r=0,o=n.length;r<o;r++)a(r,n[r])}function x(t,e,n,a){for(var r=t.aoData.length,o=P.extend(!0,{},w.models.oRow,{src:n?"dom":"data",idx:r}),i=(o._aData=e,t.aoData.push(o),t.aoColumns),l=0,s=i.length;l<s;l++)i[l].sType=null;t.aiDisplayMaster.push(r);e=t.rowIdFn(e);return e!==H&&(t.aIds[e]=o),!n&&t.oFeatures.bDeferRender||St(t,r,n,a),r}function ut(n,t){var a;return(t=t instanceof P?t:P(t)).map(function(t,e){return a=mt(n,e),x(n,a.data,e,a.cells)})}function S(t,e,n,a){"search"===a?a="filter":"order"===a&&(a="sort");var r=t.iDraw,o=t.aoColumns[n],i=t.aoData[e]._aData,l=o.sDefaultContent,s=o.fnGetData(i,a,{settings:t,row:e,col:n});if(s===H)return t.iDrawError!=r&&null===l&&(W(t,0,"Requested unknown parameter "+("function"==typeof o.mData?"{function}":"'"+o.mData+"'")+" for row "+e+", column "+n,4),t.iDrawError=r),l;if(s!==i&&null!==s||null===l||a===H){if("function"==typeof s)return s.call(i)}else s=l;return null===s&&"display"===a?"":"filter"===a&&(e=w.ext.type.search)[o.sType]?e[o.sType](s):s}function ct(t,e,n,a){var r=t.aoColumns[n],o=t.aoData[e]._aData;r.fnSetData(o,a,{settings:t,row:e,col:n})}var ft=/\[.*?\]$/,g=/\(\)$/;function dt(t){return P.map(t.match(/(\\.|[^\.])+/g)||[""],function(t){return t.replace(/\\\./g,".")})}var A=w.util.get,b=w.util.set;function ht(t){return N(t.aoData,"_aData")}function pt(t){t.aoData.length=0,t.aiDisplayMaster.length=0,t.aiDisplay.length=0,t.aIds={}}function gt(t,e,n){for(var a=-1,r=0,o=t.length;r<o;r++)t[r]==e?a=r:t[r]>e&&t[r]--;-1!=a&&n===H&&t.splice(a,1)}function bt(n,a,t,e){function r(t,e){for(;t.childNodes.length;)t.removeChild(t.firstChild);t.innerHTML=S(n,a,e,"display")}var o,i,l=n.aoData[a];if("dom"!==t&&(t&&"auto"!==t||"dom"!==l.src)){var s=l.anCells;if(s)if(e!==H)r(s[e],e);else for(o=0,i=s.length;o<i;o++)r(s[o],o)}else l._aData=mt(n,l,e,e===H?H:l._aData).data;l._aSortData=null,l._aFilterData=null;var u=n.aoColumns;if(e!==H)u[e].sType=null;else{for(o=0,i=u.length;o<i;o++)u[o].sType=null;vt(n,l)}}function mt(t,e,n,a){function r(t,e){var n;"string"==typeof t&&-1!==(n=t.indexOf("@"))&&(n=t.substring(n+1),b(t)(a,e.getAttribute(n)))}function o(t){n!==H&&n!==f||(l=d[f],s=t.innerHTML.trim(),l&&l._bAttrSrc?(b(l.mData._)(a,s),r(l.mData.sort,t),r(l.mData.type,t),r(l.mData.filter,t)):h?(l._setter||(l._setter=b(l.mData)),l._setter(a,s)):a[f]=s),f++}var i,l,s,u=[],c=e.firstChild,f=0,d=t.aoColumns,h=t._rowReadObject;a=a!==H?a:h?{}:[];if(c)for(;c;)"TD"!=(i=c.nodeName.toUpperCase())&&"TH"!=i||(o(c),u.push(c)),c=c.nextSibling;else for(var p=0,g=(u=e.anCells).length;p<g;p++)o(u[p]);var e=e.firstChild?e:e.nTr;return e&&(e=e.getAttribute("id"))&&b(t.rowId)(a,e),{data:a,cells:u}}function St(t,e,n,a){var r,o,i,l,s,u,c=t.aoData[e],f=c._aData,d=[];if(null===c.nTr){for(r=n||v.createElement("tr"),c.nTr=r,c.anCells=d,r._DT_RowIndex=e,vt(t,c),l=0,s=t.aoColumns.length;l<s;l++)i=t.aoColumns[l],(o=(u=!n)?v.createElement(i.sCellType):a[l])||W(t,0,"Incorrect column count",18),o._DT_CellIndex={row:e,column:l},d.push(o),!u&&(!i.mRender&&i.mData===l||P.isPlainObject(i.mData)&&i.mData._===l+".display")||(o.innerHTML=S(t,e,l,"display")),i.sClass&&(o.className+=" "+i.sClass),i.bVisible&&!n?r.appendChild(o):!i.bVisible&&n&&o.parentNode.removeChild(o),i.fnCreatedCell&&i.fnCreatedCell.call(t.oInstance,o,S(t,e,l),f,e,l);R(t,"aoRowCreatedCallback",null,[r,f,e,d])}}function vt(t,e){var n=e.nTr,a=e._aData;n&&((t=t.rowIdFn(a))&&(n.id=t),a.DT_RowClass&&(t=a.DT_RowClass.split(" "),e.__rowc=e.__rowc?z(e.__rowc.concat(t)):t,P(n).removeClass(e.__rowc.join(" ")).addClass(a.DT_RowClass)),a.DT_RowAttr&&P(n).attr(a.DT_RowAttr),a.DT_RowData)&&P(n).data(a.DT_RowData)}function yt(t){var e,n,a,r=t.nTHead,o=t.nTFoot,i=0===P("th, td",r).length,l=t.oClasses,s=t.aoColumns;for(i&&(n=P("<tr/>").appendTo(r)),c=0,f=s.length;c<f;c++)a=s[c],e=P(a.nTh).addClass(a.sClass),i&&e.appendTo(n),t.oFeatures.bSort&&(e.addClass(a.sSortingClass),!1!==a.bSortable)&&(e.attr("tabindex",t.iTabIndex).attr("aria-controls",t.sTableId),ue(t,a.nTh,c)),a.sTitle!=e[0].innerHTML&&e.html(a.sTitle),ve(t,"header")(t,e,a,l);if(i&&wt(t.aoHeader,r),P(r).children("tr").children("th, td").addClass(l.sHeaderTH),P(o).children("tr").children("th, td").addClass(l.sFooterTH),null!==o)for(var u=t.aoFooter[0],c=0,f=u.length;c<f;c++)(a=s[c])?(a.nTf=u[c].cell,a.sClass&&P(a.nTf).addClass(a.sClass)):W(t,0,"Incorrect column count",18)}function Dt(t,e,n){var a,r,o,i,l,s,u,c,f,d=[],h=[],p=t.aoColumns.length;if(e){for(n===H&&(n=!1),a=0,r=e.length;a<r;a++){for(d[a]=e[a].slice(),d[a].nTr=e[a].nTr,o=p-1;0<=o;o--)t.aoColumns[o].bVisible||n||d[a].splice(o,1);h.push([])}for(a=0,r=d.length;a<r;a++){if(u=d[a].nTr)for(;s=u.firstChild;)u.removeChild(s);for(o=0,i=d[a].length;o<i;o++)if(f=c=1,h[a][o]===H){for(u.appendChild(d[a][o].cell),h[a][o]=1;d[a+c]!==H&&d[a][o].cell==d[a+c][o].cell;)h[a+c][o]=1,c++;for(;d[a][o+f]!==H&&d[a][o].cell==d[a][o+f].cell;){for(l=0;l<c;l++)h[a+l][o+f]=1;f++}P(d[a][o].cell).attr("rowspan",c).attr("colspan",f)}}}}function y(t,e){n="ssp"==E(s=t),(l=s.iInitDisplayStart)!==H&&-1!==l&&(s._iDisplayStart=!n&&l>=s.fnRecordsDisplay()?0:l,s.iInitDisplayStart=-1);var n=R(t,"aoPreDrawCallback","preDraw",[t]);if(-1!==P.inArray(!1,n))D(t,!1);else{var a=[],r=0,o=t.asStripeClasses,i=o.length,l=t.oLanguage,s="ssp"==E(t),u=t.aiDisplay,n=t._iDisplayStart,c=t.fnDisplayEnd();if(t.bDrawing=!0,t.bDeferLoading)t.bDeferLoading=!1,t.iDraw++,D(t,!1);else if(s){if(!t.bDestroying&&!e)return void xt(t)}else t.iDraw++;if(0!==u.length)for(var f=s?t.aoData.length:c,d=s?0:n;d<f;d++){var h,p=u[d],g=t.aoData[p],b=(null===g.nTr&&St(t,p),g.nTr);0!==i&&(h=o[r%i],g._sRowStripe!=h)&&(P(b).removeClass(g._sRowStripe).addClass(h),g._sRowStripe=h),R(t,"aoRowCallback",null,[b,g._aData,r,d,p]),a.push(b),r++}else{e=l.sZeroRecords;1==t.iDraw&&"ajax"==E(t)?e=l.sLoadingRecords:l.sEmptyTable&&0===t.fnRecordsTotal()&&(e=l.sEmptyTable),a[0]=P("<tr/>",{class:i?o[0]:""}).append(P("<td />",{valign:"top",colSpan:T(t),class:t.oClasses.sRowEmpty}).html(e))[0]}R(t,"aoHeaderCallback","header",[P(t.nTHead).children("tr")[0],ht(t),n,c,u]),R(t,"aoFooterCallback","footer",[P(t.nTFoot).children("tr")[0],ht(t),n,c,u]);s=P(t.nTBody);s.children().detach(),s.append(P(a)),R(t,"aoDrawCallback","draw",[t]),t.bSorted=!1,t.bFiltered=!1,t.bDrawing=!1}}function u(t,e){var n=t.oFeatures,a=n.bSort,n=n.bFilter;a&&ie(t),n?Rt(t,t.oPreviousSearch):t.aiDisplay=t.aiDisplayMaster.slice(),!0!==e&&(t._iDisplayStart=0),t._drawHold=e,y(t),t._drawHold=!1}function _t(t){for(var e,n,a,r,o,i,l,s=t.oClasses,u=P(t.nTable),u=P("<div/>").insertBefore(u),c=t.oFeatures,f=P("<div/>",{id:t.sTableId+"_wrapper",class:s.sWrapper+(t.nTFoot?"":" "+s.sNoFooter)}),d=(t.nHolding=u[0],t.nTableWrapper=f[0],t.nTableReinsertBefore=t.nTable.nextSibling,t.sDom.split("")),h=0;h<d.length;h++){if(e=null,"<"==(n=d[h])){if(a=P("<div/>")[0],"'"==(r=d[h+1])||'"'==r){for(o="",i=2;d[h+i]!=r;)o+=d[h+i],i++;"H"==o?o=s.sJUIHeader:"F"==o&&(o=s.sJUIFooter),-1!=o.indexOf(".")?(l=o.split("."),a.id=l[0].substr(1,l[0].length-1),a.className=l[1]):"#"==o.charAt(0)?a.id=o.substr(1,o.length-1):a.className=o,h+=i}f.append(a),f=P(a)}else if(">"==n)f=f.parent();else if("l"==n&&c.bPaginate&&c.bLengthChange)e=Gt(t);else if("f"==n&&c.bFilter)e=Lt(t);else if("r"==n&&c.bProcessing)e=Zt(t);else if("t"==n)e=Kt(t);else if("i"==n&&c.bInfo)e=Ut(t);else if("p"==n&&c.bPaginate)e=zt(t);else if(0!==w.ext.feature.length)for(var p=w.ext.feature,g=0,b=p.length;g<b;g++)if(n==p[g].cFeature){e=p[g].fnInit(t);break}e&&((l=t.aanFeatures)[n]||(l[n]=[]),l[n].push(e),f.append(e))}u.replaceWith(f),t.nHolding=null}function wt(t,e){var n,a,r,o,i,l,s,u,c,f,d=P(e).children("tr");for(t.splice(0,t.length),r=0,l=d.length;r<l;r++)t.push([]);for(r=0,l=d.length;r<l;r++)for(a=(n=d[r]).firstChild;a;){if("TD"==a.nodeName.toUpperCase()||"TH"==a.nodeName.toUpperCase())for(u=(u=+a.getAttribute("colspan"))&&0!=u&&1!=u?u:1,c=(c=+a.getAttribute("rowspan"))&&0!=c&&1!=c?c:1,s=function(t,e,n){for(var a=t[e];a[n];)n++;return n}(t,r,0),f=1==u,i=0;i<u;i++)for(o=0;o<c;o++)t[r+o][s+i]={cell:a,unique:f},t[r+o].nTr=n;a=a.nextSibling}}function Ct(t,e,n){var a=[];n||(n=t.aoHeader,e&&wt(n=[],e));for(var r=0,o=n.length;r<o;r++)for(var i=0,l=n[r].length;i<l;i++)!n[r][i].unique||a[i]&&t.bSortCellsTop||(a[i]=n[r][i].cell);return a}function Tt(r,t,n){function e(t){var e=r.jqXHR?r.jqXHR.status:null;(null===t||"number"==typeof e&&204==e)&&Ft(r,t={},[]),(e=t.error||t.sError)&&W(r,0,e),r.json=t,R(r,null,"xhr",[r,t,r.jqXHR]),n(t)}R(r,"aoServerParams","serverParams",[t]),t&&Array.isArray(t)&&(a={},o=/(.*?)\[\]$/,P.each(t,function(t,e){var n=e.name.match(o);n?(n=n[0],a[n]||(a[n]=[]),a[n].push(e.value)):a[e.name]=e.value}),t=a);var a,o,i,l=r.ajax,s=r.oInstance,u=(P.isPlainObject(l)&&l.data&&(u="function"==typeof(i=l.data)?i(t,r):i,t="function"==typeof i&&u?u:P.extend(!0,t,u),delete l.data),{data:t,success:e,dataType:"json",cache:!1,type:r.sServerMethod,error:function(t,e,n){var a=R(r,null,"xhr",[r,null,r.jqXHR]);-1===P.inArray(!0,a)&&("parsererror"==e?W(r,0,"Invalid JSON response",1):4===t.readyState&&W(r,0,"Ajax error",7)),D(r,!1)}});r.oAjaxData=t,R(r,null,"preXhr",[r,t]),r.fnServerData?r.fnServerData.call(s,r.sAjaxSource,P.map(t,function(t,e){return{name:e,value:t}}),e,r):r.sAjaxSource||"string"==typeof l?r.jqXHR=P.ajax(P.extend(u,{url:l||r.sAjaxSource})):"function"==typeof l?r.jqXHR=l.call(s,t,e,r):(r.jqXHR=P.ajax(P.extend(u,l)),l.data=i)}function xt(e){e.iDraw++,D(e,!0);var n=e._drawHold;Tt(e,At(e),function(t){e._drawHold=n,It(e,t),e._drawHold=!1})}function At(t){for(var e,n,a,r=t.aoColumns,o=r.length,i=t.oFeatures,l=t.oPreviousSearch,s=t.aoPreSearchCols,u=[],c=I(t),f=t._iDisplayStart,d=!1!==i.bPaginate?t._iDisplayLength:-1,h=function(t,e){u.push({name:t,value:e})},p=(h("sEcho",t.iDraw),h("iColumns",o),h("sColumns",N(r,"sName").join(",")),h("iDisplayStart",f),h("iDisplayLength",d),{draw:t.iDraw,columns:[],order:[],start:f,length:d,search:{value:l.sSearch,regex:l.bRegex}}),g=0;g<o;g++)n=r[g],a=s[g],e="function"==typeof n.mData?"function":n.mData,p.columns.push({data:e,name:n.sName,searchable:n.bSearchable,orderable:n.bSortable,search:{value:a.sSearch,regex:a.bRegex}}),h("mDataProp_"+g,e),i.bFilter&&(h("sSearch_"+g,a.sSearch),h("bRegex_"+g,a.bRegex),h("bSearchable_"+g,n.bSearchable)),i.bSort&&h("bSortable_"+g,n.bSortable);i.bFilter&&(h("sSearch",l.sSearch),h("bRegex",l.bRegex)),i.bSort&&(P.each(c,function(t,e){p.order.push({column:e.col,dir:e.dir}),h("iSortCol_"+t,e.col),h("sSortDir_"+t,e.dir)}),h("iSortingCols",c.length));f=w.ext.legacy.ajax;return null===f?t.sAjaxSource?u:p:f?u:p}function It(t,n){function e(t,e){return n[t]!==H?n[t]:n[e]}var a=Ft(t,n),r=e("sEcho","draw"),o=e("iTotalRecords","recordsTotal"),i=e("iTotalDisplayRecords","recordsFiltered");if(r!==H){if(+r<t.iDraw)return;t.iDraw=+r}a=a||[],pt(t),t._iRecordsTotal=parseInt(o,10),t._iRecordsDisplay=parseInt(i,10);for(var l=0,s=a.length;l<s;l++)x(t,a[l]);t.aiDisplay=t.aiDisplayMaster.slice(),y(t,!0),t._bInitComplete||qt(t,n),D(t,!1)}function Ft(t,e,n){t=P.isPlainObject(t.ajax)&&t.ajax.dataSrc!==H?t.ajax.dataSrc:t.sAjaxDataProp;if(!n)return"data"===t?e.aaData||e[t]:""!==t?A(t)(e):e;b(t)(e,n)}function Lt(n){function e(t){i.f;var e=this.value||"";o.return&&"Enter"!==t.key||e!=o.sSearch&&(Rt(n,{sSearch:e,bRegex:o.bRegex,bSmart:o.bSmart,bCaseInsensitive:o.bCaseInsensitive,return:o.return}),n._iDisplayStart=0,y(n))}var t=n.oClasses,a=n.sTableId,r=n.oLanguage,o=n.oPreviousSearch,i=n.aanFeatures,l='<input type="search" class="'+t.sFilterInput+'"/>',s=(s=r.sSearch).match(/_INPUT_/)?s.replace("_INPUT_",l):s+l,l=P("<div/>",{id:i.f?null:a+"_filter",class:t.sFilter}).append(P("<label/>").append(s)),t=null!==n.searchDelay?n.searchDelay:"ssp"===E(n)?400:0,u=P("input",l).val(o.sSearch).attr("placeholder",r.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",t?ne(e,t):e).on("mouseup.DT",function(t){setTimeout(function(){e.call(u[0],t)},10)}).on("keypress.DT",function(t){if(13==t.keyCode)return!1}).attr("aria-controls",a);return P(n.nTable).on("search.dt.DT",function(t,e){if(n===e)try{u[0]!==v.activeElement&&u.val(o.sSearch)}catch(t){}}),l[0]}function Rt(t,e,n){function a(t){o.sSearch=t.sSearch,o.bRegex=t.bRegex,o.bSmart=t.bSmart,o.bCaseInsensitive=t.bCaseInsensitive,o.return=t.return}function r(t){return t.bEscapeRegex!==H?!t.bEscapeRegex:t.bRegex}var o=t.oPreviousSearch,i=t.aoPreSearchCols;if(lt(t),"ssp"!=E(t)){Ht(t,e.sSearch,n,r(e),e.bSmart,e.bCaseInsensitive),a(e);for(var l=0;l<i.length;l++)jt(t,i[l].sSearch,l,r(i[l]),i[l].bSmart,i[l].bCaseInsensitive);Pt(t)}else a(e);t.bFiltered=!0,R(t,null,"search",[t])}function Pt(t){for(var e,n,a=w.ext.search,r=t.aiDisplay,o=0,i=a.length;o<i;o++){for(var l=[],s=0,u=r.length;s<u;s++)n=r[s],e=t.aoData[n],a[o](t,e._aFilterData,n,e._aData,s)&&l.push(n);r.length=0,P.merge(r,l)}}function jt(t,e,n,a,r,o){if(""!==e){for(var i,l=[],s=t.aiDisplay,u=Nt(e,a,r,o),c=0;c<s.length;c++)i=t.aoData[s[c]]._aFilterData[n],u.test(i)&&l.push(s[c]);t.aiDisplay=l}}function Ht(t,e,n,a,r,o){var i,l,s,u=Nt(e,a,r,o),r=t.oPreviousSearch.sSearch,o=t.aiDisplayMaster,c=[];if(0!==w.ext.search.length&&(n=!0),l=Wt(t),e.length<=0)t.aiDisplay=o.slice();else{for((l||n||a||r.length>e.length||0!==e.indexOf(r)||t.bSorted)&&(t.aiDisplay=o.slice()),i=t.aiDisplay,s=0;s<i.length;s++)u.test(t.aoData[i[s]]._sFilterRow)&&c.push(i[s]);t.aiDisplay=c}}function Nt(t,e,n,a){return t=e?t:Ot(t),n&&(t="^(?=.*?"+P.map(t.match(/["\u201C][^"\u201D]+["\u201D]|[^ ]+/g)||[""],function(t){var e;return'"'===t.charAt(0)?t=(e=t.match(/^"(.*)"$/))?e[1]:t:"“"===t.charAt(0)&&(t=(e=t.match(/^\u201C(.*)\u201D$/))?e[1]:t),t.replace('"',"")}).join(")(?=.*?")+").*$"),new RegExp(t,a?"i":"")}var Ot=w.util.escapeRegex,kt=P("<div>")[0],Mt=kt.textContent!==H;function Wt(t){for(var e,n,a,r,o,i=t.aoColumns,l=!1,s=0,u=t.aoData.length;s<u;s++)if(!(o=t.aoData[s])._aFilterData){for(a=[],e=0,n=i.length;e<n;e++)i[e].bSearchable?"string"!=typeof(r=null===(r=S(t,s,e,"filter"))?"":r)&&r.toString&&(r=r.toString()):r="",r.indexOf&&-1!==r.indexOf("&")&&(kt.innerHTML=r,r=Mt?kt.textContent:kt.innerText),r.replace&&(r=r.replace(/[\r\n\u2028]/g,"")),a.push(r);o._aFilterData=a,o._sFilterRow=a.join(" "),l=!0}return l}function Et(t){return{search:t.sSearch,smart:t.bSmart,regex:t.bRegex,caseInsensitive:t.bCaseInsensitive}}function Bt(t){return{sSearch:t.search,bSmart:t.smart,bRegex:t.regex,bCaseInsensitive:t.caseInsensitive}}function Ut(t){var e=t.sTableId,n=t.aanFeatures.i,a=P("<div/>",{class:t.oClasses.sInfo,id:n?null:e+"_info"});return n||(t.aoDrawCallback.push({fn:Vt,sName:"information"}),a.attr("role","status").attr("aria-live","polite"),P(t.nTable).attr("aria-describedby",e+"_info")),a[0]}function Vt(t){var e,n,a,r,o,i,l=t.aanFeatures.i;0!==l.length&&(i=t.oLanguage,e=t._iDisplayStart+1,n=t.fnDisplayEnd(),a=t.fnRecordsTotal(),o=(r=t.fnRecordsDisplay())?i.sInfo:i.sInfoEmpty,r!==a&&(o+=" "+i.sInfoFiltered),o=Xt(t,o+=i.sInfoPostFix),null!==(i=i.fnInfoCallback)&&(o=i.call(t.oInstance,t,e,n,a,r,o)),P(l).html(o))}function Xt(t,e){var n=t.fnFormatNumber,a=t._iDisplayStart+1,r=t._iDisplayLength,o=t.fnRecordsDisplay(),i=-1===r;return e.replace(/_START_/g,n.call(t,a)).replace(/_END_/g,n.call(t,t.fnDisplayEnd())).replace(/_MAX_/g,n.call(t,t.fnRecordsTotal())).replace(/_TOTAL_/g,n.call(t,o)).replace(/_PAGE_/g,n.call(t,i?1:Math.ceil(a/r))).replace(/_PAGES_/g,n.call(t,i?1:Math.ceil(o/r)))}function Jt(n){var a,t,e,r=n.iInitDisplayStart,o=n.aoColumns,i=n.oFeatures,l=n.bDeferLoading;if(n.bInitialised){for(_t(n),yt(n),Dt(n,n.aoHeader),Dt(n,n.aoFooter),D(n,!0),i.bAutoWidth&&ee(n),a=0,t=o.length;a<t;a++)(e=o[a]).sWidth&&(e.nTh.style.width=M(e.sWidth));R(n,null,"preInit",[n]),u(n);i=E(n);"ssp"==i&&!l||("ajax"==i?Tt(n,[],function(t){var e=Ft(n,t);for(a=0;a<e.length;a++)x(n,e[a]);n.iInitDisplayStart=r,u(n),D(n,!1),qt(n,t)}):(D(n,!1),qt(n)))}else setTimeout(function(){Jt(n)},200)}function qt(t,e){t._bInitComplete=!0,(e||t.oInit.aaData)&&O(t),R(t,null,"plugin-init",[t,e]),R(t,"aoInitComplete","init",[t,e])}function $t(t,e){e=parseInt(e,10);t._iDisplayLength=e,Se(t),R(t,null,"length",[t,e])}function Gt(a){for(var t=a.oClasses,e=a.sTableId,n=a.aLengthMenu,r=Array.isArray(n[0]),o=r?n[0]:n,i=r?n[1]:n,l=P("<select/>",{name:e+"_length","aria-controls":e,class:t.sLengthSelect}),s=0,u=o.length;s<u;s++)l[0][s]=new Option("number"==typeof i[s]?a.fnFormatNumber(i[s]):i[s],o[s]);var c=P("<div><label/></div>").addClass(t.sLength);return a.aanFeatures.l||(c[0].id=e+"_length"),c.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",l[0].outerHTML)),P("select",c).val(a._iDisplayLength).on("change.DT",function(t){$t(a,P(this).val()),y(a)}),P(a.nTable).on("length.dt.DT",function(t,e,n){a===e&&P("select",c).val(n)}),c[0]}function zt(t){function c(t){y(t)}var e=t.sPaginationType,f=w.ext.pager[e],d="function"==typeof f,e=P("<div/>").addClass(t.oClasses.sPaging+e)[0],h=t.aanFeatures;return d||f.fnInit(t,e,c),h.p||(e.id=t.sTableId+"_paginate",t.aoDrawCallback.push({fn:function(t){if(d)for(var e=t._iDisplayStart,n=t._iDisplayLength,a=t.fnRecordsDisplay(),r=-1===n,o=r?0:Math.ceil(e/n),i=r?1:Math.ceil(a/n),l=f(o,i),s=0,u=h.p.length;s<u;s++)ve(t,"pageButton")(t,h.p[s],s,l,o,i);else f.fnUpdate(t,c)},sName:"pagination"})),e}function Yt(t,e,n){var a=t._iDisplayStart,r=t._iDisplayLength,o=t.fnRecordsDisplay(),o=(0===o||-1===r?a=0:"number"==typeof e?o<(a=e*r)&&(a=0):"first"==e?a=0:"previous"==e?(a=0<=r?a-r:0)<0&&(a=0):"next"==e?a+r<o&&(a+=r):"last"==e?a=Math.floor((o-1)/r)*r:W(t,0,"Unknown paging action: "+e,5),t._iDisplayStart!==a);return t._iDisplayStart=a,o?(R(t,null,"page",[t]),n&&y(t)):R(t,null,"page-nc",[t]),o}function Zt(t){return P("<div/>",{id:t.aanFeatures.r?null:t.sTableId+"_processing",class:t.oClasses.sProcessing,role:"status"}).html(t.oLanguage.sProcessing).append("<div><div></div><div></div><div></div><div></div></div>").insertBefore(t.nTable)[0]}function D(t,e){t.oFeatures.bProcessing&&P(t.aanFeatures.r).css("display",e?"block":"none"),R(t,null,"processing",[t,e])}function Kt(t){var e,n,a,r,o,i,l,s,u,c,f,d,h=P(t.nTable),p=t.oScroll;return""===p.sX&&""===p.sY?t.nTable:(e=p.sX,n=p.sY,a=t.oClasses,o=(r=h.children("caption")).length?r[0]._captionSide:null,s=P(h[0].cloneNode(!1)),i=P(h[0].cloneNode(!1)),u=function(t){return t?M(t):null},(l=h.children("tfoot")).length||(l=null),s=P(f="<div/>",{class:a.sScrollWrapper}).append(P(f,{class:a.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:e?u(e):"100%"}).append(P(f,{class:a.sScrollHeadInner}).css({"box-sizing":"content-box",width:p.sXInner||"100%"}).append(s.removeAttr("id").css("margin-left",0).append("top"===o?r:null).append(h.children("thead"))))).append(P(f,{class:a.sScrollBody}).css({position:"relative",overflow:"auto",width:u(e)}).append(h)),l&&s.append(P(f,{class:a.sScrollFoot}).css({overflow:"hidden",border:0,width:e?u(e):"100%"}).append(P(f,{class:a.sScrollFootInner}).append(i.removeAttr("id").css("margin-left",0).append("bottom"===o?r:null).append(h.children("tfoot"))))),u=s.children(),c=u[0],f=u[1],d=l?u[2]:null,e&&P(f).on("scroll.DT",function(t){var e=this.scrollLeft;c.scrollLeft=e,l&&(d.scrollLeft=e)}),P(f).css("max-height",n),p.bCollapse||P(f).css("height",n),t.nScrollHead=c,t.nScrollBody=f,t.nScrollFoot=d,t.aoDrawCallback.push({fn:Qt,sName:"scrolling"}),s[0])}function Qt(n){function t(t){(t=t.style).paddingTop="0",t.paddingBottom="0",t.borderTopWidth="0",t.borderBottomWidth="0",t.height=0}var e,a,r,o,i,l=n.oScroll,s=l.sX,u=l.sXInner,c=l.sY,l=l.iBarWidth,f=P(n.nScrollHead),d=f[0].style,h=f.children("div"),p=h[0].style,h=h.children("table"),g=n.nScrollBody,b=P(g),m=g.style,S=P(n.nScrollFoot).children("div"),v=S.children("table"),y=P(n.nTHead),D=P(n.nTable),_=D[0],w=_.style,C=n.nTFoot?P(n.nTFoot):null,T=n.oBrowser,x=T.bScrollOversize,A=(N(n.aoColumns,"nTh"),[]),I=[],F=[],L=[],R=g.scrollHeight>g.clientHeight;n.scrollBarVis!==R&&n.scrollBarVis!==H?(n.scrollBarVis=R,O(n)):(n.scrollBarVis=R,D.children("thead, tfoot").remove(),C&&(R=C.clone().prependTo(D),i=C.find("tr"),a=R.find("tr"),R.find("[id]").removeAttr("id")),R=y.clone().prependTo(D),y=y.find("tr"),e=R.find("tr"),R.find("th, td").removeAttr("tabindex"),R.find("[id]").removeAttr("id"),s||(m.width="100%",f[0].style.width="100%"),P.each(Ct(n,R),function(t,e){r=rt(n,t),e.style.width=n.aoColumns[r].sWidth}),C&&k(function(t){t.style.width=""},a),f=D.outerWidth(),""===s?(w.width="100%",x&&(D.find("tbody").height()>g.offsetHeight||"scroll"==b.css("overflow-y"))&&(w.width=M(D.outerWidth()-l)),f=D.outerWidth()):""!==u&&(w.width=M(u),f=D.outerWidth()),k(t,e),k(function(t){var e=j.getComputedStyle?j.getComputedStyle(t).width:M(P(t).width());F.push(t.innerHTML),A.push(e)},e),k(function(t,e){t.style.width=A[e]},y),P(e).css("height",0),C&&(k(t,a),k(function(t){L.push(t.innerHTML),I.push(M(P(t).css("width")))},a),k(function(t,e){t.style.width=I[e]},i),P(a).height(0)),k(function(t,e){t.innerHTML='<div class="dataTables_sizing">'+F[e]+"</div>",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=A[e]},e),C&&k(function(t,e){t.innerHTML='<div class="dataTables_sizing">'+L[e]+"</div>",t.childNodes[0].style.height="0",t.childNodes[0].style.overflow="hidden",t.style.width=I[e]},a),Math.round(D.outerWidth())<Math.round(f)?(o=g.scrollHeight>g.offsetHeight||"scroll"==b.css("overflow-y")?f+l:f,x&&(g.scrollHeight>g.offsetHeight||"scroll"==b.css("overflow-y"))&&(w.width=M(o-l)),""!==s&&""===u||W(n,1,"Possible column misalignment",6)):o="100%",m.width=M(o),d.width=M(o),C&&(n.nScrollFoot.style.width=M(o)),c||x&&(m.height=M(_.offsetHeight+l)),R=D.outerWidth(),h[0].style.width=M(R),p.width=M(R),y=D.height()>g.clientHeight||"scroll"==b.css("overflow-y"),p[i="padding"+(T.bScrollbarLeft?"Left":"Right")]=y?l+"px":"0px",C&&(v[0].style.width=M(R),S[0].style.width=M(R),S[0].style[i]=y?l+"px":"0px"),D.children("colgroup").insertBefore(D.children("thead")),b.trigger("scroll"),!n.bSorted&&!n.bFiltered||n._drawHold||(g.scrollTop=0))}function k(t,e,n){for(var a,r,o=0,i=0,l=e.length;i<l;){for(a=e[i].firstChild,r=n?n[i].firstChild:null;a;)1===a.nodeType&&(n?t(a,r,o):t(a,o),o++),a=a.nextSibling,r=n?r.nextSibling:null;i++}}var te=/<.*?>/g;function ee(t){var e,n,a=t.nTable,r=t.aoColumns,o=t.oScroll,i=o.sY,l=o.sX,o=o.sXInner,s=r.length,u=it(t,"bVisible"),c=P("th",t.nTHead),f=a.getAttribute("width"),d=a.parentNode,h=!1,p=t.oBrowser,g=p.bScrollOversize,b=a.style.width;for(b&&-1!==b.indexOf("%")&&(f=b),D=0;D<u.length;D++)null!==(e=r[u[D]]).sWidth&&(e.sWidth=ae(e.sWidthOrig,d),h=!0);if(g||!h&&!l&&!i&&s==T(t)&&s==c.length)for(D=0;D<s;D++){var m=rt(t,D);null!==m&&(r[m].sWidth=M(c.eq(D).width()))}else{var b=P(a).clone().css("visibility","hidden").removeAttr("id"),S=(b.find("tbody tr").remove(),P("<tr/>").appendTo(b.find("tbody")));for(b.find("thead, tfoot").remove(),b.append(P(t.nTHead).clone()).append(P(t.nTFoot).clone()),b.find("tfoot th, tfoot td").css("width",""),c=Ct(t,b.find("thead")[0]),D=0;D<u.length;D++)e=r[u[D]],c[D].style.width=null!==e.sWidthOrig&&""!==e.sWidthOrig?M(e.sWidthOrig):"",e.sWidthOrig&&l&&P(c[D]).append(P("<div/>").css({width:e.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(t.aoData.length)for(D=0;D<u.length;D++)e=r[n=u[D]],P(re(t,n)).clone(!1).append(e.sContentPadding).appendTo(S);P("[name]",b).removeAttr("name");for(var v=P("<div/>").css(l||i?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(b).appendTo(d),y=(l&&o?b.width(o):l?(b.css("width","auto"),b.removeAttr("width"),b.width()<d.clientWidth&&f&&b.width(d.clientWidth)):i?b.width(d.clientWidth):f&&b.width(f),0),D=0;D<u.length;D++){var _=P(c[D]),w=_.outerWidth()-_.width(),_=p.bBounding?Math.ceil(c[D].getBoundingClientRect().width):_.outerWidth();y+=_,r[u[D]].sWidth=M(_-w)}a.style.width=M(y),v.remove()}f&&(a.style.width=M(f)),!f&&!l||t._reszEvt||(o=function(){P(j).on("resize.DT-"+t.sInstance,ne(function(){O(t)}))},g?setTimeout(o,1e3):o(),t._reszEvt=!0)}var ne=w.util.throttle;function ae(t,e){return t?(e=(t=P("<div/>").css("width",M(t)).appendTo(e||v.body))[0].offsetWidth,t.remove(),e):0}function re(t,e){var n,a=oe(t,e);return a<0?null:(n=t.aoData[a]).nTr?n.anCells[e]:P("<td/>").html(S(t,a,e,"display"))[0]}function oe(t,e){for(var n,a=-1,r=-1,o=0,i=t.aoData.length;o<i;o++)(n=(n=(n=S(t,o,e,"display")+"").replace(te,"")).replace(/&nbsp;/g," ")).length>a&&(a=n.length,r=o);return r}function M(t){return null===t?"0px":"number"==typeof t?t<0?"0px":t+"px":t.match(/\d$/)?t+"px":t}function I(t){function e(t){t.length&&!Array.isArray(t[0])?h.push(t):P.merge(h,t)}var n,a,r,o,i,l,s,u=[],c=t.aoColumns,f=t.aaSortingFixed,d=P.isPlainObject(f),h=[];for(Array.isArray(f)&&e(f),d&&f.pre&&e(f.pre),e(t.aaSorting),d&&f.post&&e(f.post),n=0;n<h.length;n++)for(r=(o=c[s=h[n][a=0]].aDataSort).length;a<r;a++)l=c[i=o[a]].sType||"string",h[n]._idx===H&&(h[n]._idx=P.inArray(h[n][1],c[i].asSorting)),u.push({src:s,col:i,dir:h[n][1],index:h[n]._idx,type:l,formatter:w.ext.type.order[l+"-pre"]});return u}function ie(t){var e,n,a,r,c,f=[],u=w.ext.type.order,d=t.aoData,o=(t.aoColumns,0),i=t.aiDisplayMaster;for(lt(t),e=0,n=(c=I(t)).length;e<n;e++)(r=c[e]).formatter&&o++,fe(t,r.col);if("ssp"!=E(t)&&0!==c.length){for(e=0,a=i.length;e<a;e++)f[i[e]]=e;o===c.length?i.sort(function(t,e){for(var n,a,r,o,i=c.length,l=d[t]._aSortData,s=d[e]._aSortData,u=0;u<i;u++)if(0!=(r=(n=l[(o=c[u]).col])<(a=s[o.col])?-1:a<n?1:0))return"asc"===o.dir?r:-r;return(n=f[t])<(a=f[e])?-1:a<n?1:0}):i.sort(function(t,e){for(var n,a,r,o=c.length,i=d[t]._aSortData,l=d[e]._aSortData,s=0;s<o;s++)if(n=i[(r=c[s]).col],a=l[r.col],0!==(r=(u[r.type+"-"+r.dir]||u["string-"+r.dir])(n,a)))return r;return(n=f[t])<(a=f[e])?-1:a<n?1:0})}t.bSorted=!0}function le(t){for(var e=t.aoColumns,n=I(t),a=t.oLanguage.oAria,r=0,o=e.length;r<o;r++){var i=e[r],l=i.asSorting,s=i.ariaTitle||i.sTitle.replace(/<.*?>/g,""),u=i.nTh;u.removeAttribute("aria-sort"),i=i.bSortable?s+("asc"===(0<n.length&&n[0].col==r&&(u.setAttribute("aria-sort","asc"==n[0].dir?"ascending":"descending"),l[n[0].index+1])||l[0])?a.sSortAscending:a.sSortDescending):s,u.setAttribute("aria-label",i)}}function se(t,e,n,a){function r(t,e){var n=t._idx;return(n=n===H?P.inArray(t[1],s):n)+1<s.length?n+1:e?null:0}var o,i=t.aoColumns[e],l=t.aaSorting,s=i.asSorting;"number"==typeof l[0]&&(l=t.aaSorting=[l]),n&&t.oFeatures.bSortMulti?-1!==(i=P.inArray(e,N(l,"0")))?null===(o=null===(o=r(l[i],!0))&&1===l.length?0:o)?l.splice(i,1):(l[i][1]=s[o],l[i]._idx=o):(l.push([e,s[0],0]),l[l.length-1]._idx=0):l.length&&l[0][0]==e?(o=r(l[0]),l.length=1,l[0][1]=s[o],l[0]._idx=o):(l.length=0,l.push([e,s[0]]),l[0]._idx=0),u(t),"function"==typeof a&&a(t)}function ue(e,t,n,a){var r=e.aoColumns[n];me(t,{},function(t){!1!==r.bSortable&&(e.oFeatures.bProcessing?(D(e,!0),setTimeout(function(){se(e,n,t.shiftKey,a),"ssp"!==E(e)&&D(e,!1)},0)):se(e,n,t.shiftKey,a))})}function ce(t){var e,n,a,r=t.aLastSort,o=t.oClasses.sSortColumn,i=I(t),l=t.oFeatures;if(l.bSort&&l.bSortClasses){for(e=0,n=r.length;e<n;e++)a=r[e].src,P(N(t.aoData,"anCells",a)).removeClass(o+(e<2?e+1:3));for(e=0,n=i.length;e<n;e++)a=i[e].src,P(N(t.aoData,"anCells",a)).addClass(o+(e<2?e+1:3))}t.aLastSort=i}function fe(t,e){for(var n,a,r,o=t.aoColumns[e],i=w.ext.order[o.sSortDataType],l=(i&&(n=i.call(t.oInstance,t,e,ot(t,e))),w.ext.type.order[o.sType+"-pre"]),s=0,u=t.aoData.length;s<u;s++)(a=t.aoData[s])._aSortData||(a._aSortData=[]),a._aSortData[e]&&!i||(r=i?n[s]:S(t,s,e,"sort"),a._aSortData[e]=l?l(r):r)}function de(n){var t;n._bLoadingState||(t={time:+new Date,start:n._iDisplayStart,length:n._iDisplayLength,order:P.extend(!0,[],n.aaSorting),search:Et(n.oPreviousSearch),columns:P.map(n.aoColumns,function(t,e){return{visible:t.bVisible,search:Et(n.aoPreSearchCols[e])}})},n.oSavedState=t,R(n,"aoStateSaveParams","stateSaveParams",[n,t]),n.oFeatures.bStateSave&&!n.bDestroying&&n.fnStateSaveCallback.call(n.oInstance,n,t))}function he(e,t,n){var a;if(e.oFeatures.bStateSave)return(a=e.fnStateLoadCallback.call(e.oInstance,e,function(t){pe(e,t,n)}))!==H&&pe(e,a,n),!0;n()}function pe(n,t,e){var a,r,o=n.aoColumns,i=(n._bLoadingState=!0,n._bInitComplete?new w.Api(n):null);if(t&&t.time){var l=R(n,"aoStateLoadParams","stateLoadParams",[n,t]);if(-1!==P.inArray(!1,l))n._bLoadingState=!1;else{l=n.iStateDuration;if(0<l&&t.time<+new Date-1e3*l)n._bLoadingState=!1;else if(t.columns&&o.length!==t.columns.length)n._bLoadingState=!1;else{if(n.oLoadedState=P.extend(!0,{},t),t.length!==H&&(i?i.page.len(t.length):n._iDisplayLength=t.length),t.start!==H&&(null===i?(n._iDisplayStart=t.start,n.iInitDisplayStart=t.start):Yt(n,t.start/n._iDisplayLength)),t.order!==H&&(n.aaSorting=[],P.each(t.order,function(t,e){n.aaSorting.push(e[0]>=o.length?[0,e[1]]:e)})),t.search!==H&&P.extend(n.oPreviousSearch,Bt(t.search)),t.columns){for(a=0,r=t.columns.length;a<r;a++){var s=t.columns[a];s.visible!==H&&(i?i.column(a).visible(s.visible,!1):o[a].bVisible=s.visible),s.search!==H&&P.extend(n.aoPreSearchCols[a],Bt(s.search))}i&&i.columns.adjust()}n._bLoadingState=!1,R(n,"aoStateLoaded","stateLoaded",[n,t])}}}else n._bLoadingState=!1;e()}function ge(t){var e=w.settings,t=P.inArray(t,N(e,"nTable"));return-1!==t?e[t]:null}function W(t,e,n,a){if(n="DataTables warning: "+(t?"table id="+t.sTableId+" - ":"")+n,a&&(n+=". For more information about this error, please see http://datatables.net/tn/"+a),e)j.console&&console.log&&console.log(n);else{e=w.ext,e=e.sErrMode||e.errMode;if(t&&R(t,null,"error",[t,a,n]),"alert"==e)alert(n);else{if("throw"==e)throw new Error(n);"function"==typeof e&&e(t,a,n)}}}function F(n,a,t,e){Array.isArray(t)?P.each(t,function(t,e){Array.isArray(e)?F(n,a,e[0],e[1]):F(n,a,e)}):(e===H&&(e=t),a[t]!==H&&(n[e]=a[t]))}function be(t,e,n){var a,r;for(r in e)e.hasOwnProperty(r)&&(a=e[r],P.isPlainObject(a)?(P.isPlainObject(t[r])||(t[r]={}),P.extend(!0,t[r],a)):n&&"data"!==r&&"aaData"!==r&&Array.isArray(a)?t[r]=a.slice():t[r]=a);return t}function me(e,t,n){P(e).on("click.DT",t,function(t){P(e).trigger("blur"),n(t)}).on("keypress.DT",t,function(t){13===t.which&&(t.preventDefault(),n(t))}).on("selectstart.DT",function(){return!1})}function L(t,e,n,a){n&&t[e].push({fn:n,sName:a})}function R(n,t,e,a){var r=[];return t&&(r=P.map(n[t].slice().reverse(),function(t,e){return t.fn.apply(n.oInstance,a)})),null!==e&&(t=P.Event(e+".dt"),(e=P(n.nTable)).trigger(t,a),0===e.parents("body").length&&P("body").trigger(t,a),r.push(t.result)),r}function Se(t){var e=t._iDisplayStart,n=t.fnDisplayEnd(),a=t._iDisplayLength;n<=e&&(e=n-a),e-=e%a,t._iDisplayStart=e=-1===a||e<0?0:e}function ve(t,e){var t=t.renderer,n=w.ext.renderer[e];return P.isPlainObject(t)&&t[e]?n[t[e]]||n._:"string"==typeof t&&n[t]||n._}function E(t){return t.oFeatures.bServerSide?"ssp":t.ajax||t.sAjaxSource?"ajax":"dom"}function ye(t,n){var a;return Array.isArray(t)?P.map(t,function(t){return ye(t,n)}):"number"==typeof t?[n[t]]:(a=P.map(n,function(t,e){return t.nTable}),P(a).filter(t).map(function(t){var e=P.inArray(this,a);return n[e]}).toArray())}function De(r,o,t){var e,n;t&&(e=new B(r)).one("draw",function(){t(e.ajax.json())}),"ssp"==E(r)?u(r,o):(D(r,!0),(n=r.jqXHR)&&4!==n.readyState&&n.abort(),Tt(r,[],function(t){pt(r);for(var e=Ft(r,t),n=0,a=e.length;n<a;n++)x(r,e[n]);u(r,o),D(r,!1)}))}function _e(t,e,n,a,r){for(var o,i,l,s,u=[],c=typeof e,f=0,d=(e=e&&"string"!=c&&"function"!=c&&e.length!==H?e:[e]).length;f<d;f++)for(l=0,s=(i=e[f]&&e[f].split&&!e[f].match(/[\[\(:]/)?e[f].split(","):[e[f]]).length;l<s;l++)(o=n("string"==typeof i[l]?i[l].trim():i[l]))&&o.length&&(u=u.concat(o));var h=p.selector[t];if(h.length)for(f=0,d=h.length;f<d;f++)u=h[f](a,r,u);return z(u)}function we(t){return(t=t||{}).filter&&t.search===H&&(t.search=t.filter),P.extend({search:"none",order:"current",page:"all"},t)}function Ce(t){for(var e=0,n=t.length;e<n;e++)if(0<t[e].length)return t[0]=t[e],t[0].length=1,t.length=1,t.context=[t.context[e]],t;return t.length=0,t}function Te(o,t,e,n){function i(t,e){var n;if(Array.isArray(t)||t instanceof P)for(var a=0,r=t.length;a<r;a++)i(t[a],e);else t.nodeName&&"tr"===t.nodeName.toLowerCase()?l.push(t):(n=P("<tr><td></td></tr>").addClass(e),P("td",n).addClass(e).html(t)[0].colSpan=T(o),l.push(n[0]))}var l=[];i(e,n),t._details&&t._details.detach(),t._details=P(l),t._detailsShow&&t._details.insertAfter(t.nTr)}function xe(t,e){var n=t.context;if(n.length&&t.length){var a=n[0].aoData[t[0]];if(a._details){(a._detailsShow=e)?(a._details.insertAfter(a.nTr),P(a.nTr).addClass("dt-hasChild")):(a._details.detach(),P(a.nTr).removeClass("dt-hasChild")),R(n[0],null,"childRow",[e,t.row(t[0])]);var s=n[0],r=new B(s),a=".dt.DT_details",e="draw"+a,t="column-sizing"+a,a="destroy"+a,u=s.aoData;if(r.off(e+" "+t+" "+a),N(u,"_details").length>0){r.on(e,function(t,e){if(s!==e)return;r.rows({page:"current"}).eq(0).each(function(t){var e=u[t];if(e._detailsShow)e._details.insertAfter(e.nTr)})});r.on(t,function(t,e,n,a){if(s!==e)return;var r,o=T(e);for(var i=0,l=u.length;i<l;i++){r=u[i];if(r._details)r._details.children("td[colspan]").attr("colspan",o)}});r.on(a,function(t,e){if(s!==e)return;for(var n=0,a=u.length;n<a;n++)if(u[n]._details)Re(r,n)})}Le(n)}}}function Ae(t,e,n,a,r){for(var o=[],i=0,l=r.length;i<l;i++)o.push(S(t,r[i],e));return o}var Ie=[],o=Array.prototype,B=function(t,e){if(!(this instanceof B))return new B(t,e);function n(t){var e,n,a,r;t=t,a=w.settings,r=P.map(a,function(t,e){return t.nTable}),(t=t?t.nTable&&t.oApi?[t]:t.nodeName&&"table"===t.nodeName.toLowerCase()?-1!==(e=P.inArray(t,r))?[a[e]]:null:t&&"function"==typeof t.settings?t.settings().toArray():("string"==typeof t?n=P(t):t instanceof P&&(n=t),n?n.map(function(t){return-1!==(e=P.inArray(this,r))?a[e]:null}).toArray():void 0):[])&&o.push.apply(o,t)}var o=[];if(Array.isArray(t))for(var a=0,r=t.length;a<r;a++)n(t[a]);else n(t);this.context=z(o),e&&P.merge(this,e),this.selector={rows:null,cols:null,opts:null},B.extend(this,this,Ie)},Fe=(w.Api=B,P.extend(B.prototype,{any:function(){return 0!==this.count()},concat:o.concat,context:[],count:function(){return this.flatten().length},each:function(t){for(var e=0,n=this.length;e<n;e++)t.call(this,this[e],e,this);return this},eq:function(t){var e=this.context;return e.length>t?new B(e[t],this[t]):null},filter:function(t){var e=[];if(o.filter)e=o.filter.call(this,t,this);else for(var n=0,a=this.length;n<a;n++)t.call(this,this[n],n,this)&&e.push(this[n]);return new B(this.context,e)},flatten:function(){var t=[];return new B(this.context,t.concat.apply(t,this.toArray()))},join:o.join,indexOf:o.indexOf||function(t,e){for(var n=e||0,a=this.length;n<a;n++)if(this[n]===t)return n;return-1},iterator:function(t,e,n,a){var r,o,i,l,s,u,c,f,d=[],h=this.context,p=this.selector;for("string"==typeof t&&(a=n,n=e,e=t,t=!1),o=0,i=h.length;o<i;o++){var g=new B(h[o]);if("table"===e)(r=n.call(g,h[o],o))!==H&&d.push(r);else if("columns"===e||"rows"===e)(r=n.call(g,h[o],this[o],o))!==H&&d.push(r);else if("column"===e||"column-rows"===e||"row"===e||"cell"===e)for(c=this[o],"column-rows"===e&&(u=Fe(h[o],p.opts)),l=0,s=c.length;l<s;l++)f=c[l],(r="cell"===e?n.call(g,h[o],f.row,f.column,o,l):n.call(g,h[o],f,o,l,u))!==H&&d.push(r)}return d.length||a?((t=(a=new B(h,t?d.concat.apply([],d):d)).selector).rows=p.rows,t.cols=p.cols,t.opts=p.opts,a):this},lastIndexOf:o.lastIndexOf||function(t,e){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(t){var e=[];if(o.map)e=o.map.call(this,t,this);else for(var n=0,a=this.length;n<a;n++)e.push(t.call(this,this[n],n));return new B(this.context,e)},pluck:function(t){var e=w.util.get(t);return this.map(function(t){return e(t)})},pop:o.pop,push:o.push,reduce:o.reduce||function(t,e){return et(this,t,e,0,this.length,1)},reduceRight:o.reduceRight||function(t,e){return et(this,t,e,this.length-1,-1,-1)},reverse:o.reverse,selector:null,shift:o.shift,slice:function(){return new B(this.context,this)},sort:o.sort,splice:o.splice,toArray:function(){return o.slice.call(this)},to$:function(){return P(this)},toJQuery:function(){return P(this)},unique:function(){return new B(this.context,z(this))},unshift:o.unshift}),B.extend=function(t,e,n){if(n.length&&e&&(e instanceof B||e.__dt_wrapper))for(var a,r=0,o=n.length;r<o;r++)e[(a=n[r]).name]="function"===a.type?function(e,n,a){return function(){var t=n.apply(e,arguments);return B.extend(t,t,a.methodExt),t}}(t,a.val,a):"object"===a.type?{}:a.val,e[a.name].__dt_wrapper=!0,B.extend(t,e[a.name],a.propExt)},B.register=e=function(t,e){if(Array.isArray(t))for(var n=0,a=t.length;n<a;n++)B.register(t[n],e);else for(var r=t.split("."),o=Ie,i=0,l=r.length;i<l;i++){var s,u,c=function(t,e){for(var n=0,a=t.length;n<a;n++)if(t[n].name===e)return t[n];return null}(o,u=(s=-1!==r[i].indexOf("()"))?r[i].replace("()",""):r[i]);c||o.push(c={name:u,val:{},methodExt:[],propExt:[],type:"object"}),i===l-1?(c.val=e,c.type="function"==typeof e?"function":P.isPlainObject(e)?"object":"other"):o=s?c.methodExt:c.propExt}},B.registerPlural=t=function(t,e,n){B.register(t,n),B.register(e,function(){var t=n.apply(this,arguments);return t===this?this:t instanceof B?t.length?Array.isArray(t[0])?new B(t.context,t[0]):t[0]:H:t})},e("tables()",function(t){return t!==H&&null!==t?new B(ye(t,this.context)):this}),e("table()",function(t){var t=this.tables(t),e=t.context;return e.length?new B(e[0]):t}),t("tables().nodes()","table().node()",function(){return this.iterator("table",function(t){return t.nTable},1)}),t("tables().body()","table().body()",function(){return this.iterator("table",function(t){return t.nTBody},1)}),t("tables().header()","table().header()",function(){return this.iterator("table",function(t){return t.nTHead},1)}),t("tables().footer()","table().footer()",function(){return this.iterator("table",function(t){return t.nTFoot},1)}),t("tables().containers()","table().container()",function(){return this.iterator("table",function(t){return t.nTableWrapper},1)}),e("draw()",function(e){return this.iterator("table",function(t){"page"===e?y(t):u(t,!1===(e="string"==typeof e?"full-hold"!==e:e))})}),e("page()",function(e){return e===H?this.page.info().page:this.iterator("table",function(t){Yt(t,e)})}),e("page.info()",function(t){var e,n,a,r,o;return 0===this.context.length?H:(n=(e=this.context[0])._iDisplayStart,a=e.oFeatures.bPaginate?e._iDisplayLength:-1,r=e.fnRecordsDisplay(),{page:(o=-1===a)?0:Math.floor(n/a),pages:o?1:Math.ceil(r/a),start:n,end:e.fnDisplayEnd(),length:a,recordsTotal:e.fnRecordsTotal(),recordsDisplay:r,serverSide:"ssp"===E(e)})}),e("page.len()",function(e){return e===H?0!==this.context.length?this.context[0]._iDisplayLength:H:this.iterator("table",function(t){$t(t,e)})}),e("ajax.json()",function(){var t=this.context;if(0<t.length)return t[0].json}),e("ajax.params()",function(){var t=this.context;if(0<t.length)return t[0].oAjaxData}),e("ajax.reload()",function(e,n){return this.iterator("table",function(t){De(t,!1===n,e)})}),e("ajax.url()",function(e){var t=this.context;return e===H?0===t.length?H:(t=t[0]).ajax?P.isPlainObject(t.ajax)?t.ajax.url:t.ajax:t.sAjaxSource:this.iterator("table",function(t){P.isPlainObject(t.ajax)?t.ajax.url=e:t.ajax=e})}),e("ajax.url().load()",function(e,n){return this.iterator("table",function(t){De(t,!1===n,e)})}),function(t,e){var n,a=[],r=t.aiDisplay,o=t.aiDisplayMaster,i=e.search,l=e.order,e=e.page;if("ssp"==E(t))return"removed"===i?[]:f(0,o.length);if("current"==e)for(u=t._iDisplayStart,c=t.fnDisplayEnd();u<c;u++)a.push(r[u]);else if("current"==l||"applied"==l){if("none"==i)a=o.slice();else if("applied"==i)a=r.slice();else if("removed"==i){for(var s={},u=0,c=r.length;u<c;u++)s[r[u]]=null;a=P.map(o,function(t){return s.hasOwnProperty(t)?null:t})}}else if("index"==l||"original"==l)for(u=0,c=t.aoData.length;u<c;u++)("none"==i||-1===(n=P.inArray(u,r))&&"removed"==i||0<=n&&"applied"==i)&&a.push(u);return a}),Le=(e("rows()",function(e,n){e===H?e="":P.isPlainObject(e)&&(n=e,e=""),n=we(n);var t=this.iterator("table",function(t){return _e("row",e,function(n){var t=d(n),a=r.aoData;if(null!==t&&!o)return[t];if(i=i||Fe(r,o),null!==t&&-1!==P.inArray(t,i))return[t];if(null===n||n===H||""===n)return i;if("function"==typeof n)return P.map(i,function(t){var e=a[t];return n(t,e._aData,e.nTr)?t:null});if(n.nodeName)return t=n._DT_RowIndex,e=n._DT_CellIndex,t!==H?a[t]&&a[t].nTr===n?[t]:[]:e?a[e.row]&&a[e.row].nTr===n.parentNode?[e.row]:[]:(t=P(n).closest("*[data-dt-row]")).length?[t.data("dt-row")]:[];if("string"==typeof n&&"#"===n.charAt(0)){var e=r.aIds[n.replace(/^#/,"")];if(e!==H)return[e.idx]}t=_(m(r.aoData,i,"nTr"));return P(t).filter(n).map(function(){return this._DT_RowIndex}).toArray()},r=t,o=n);var r,o,i},1);return t.selector.rows=e,t.selector.opts=n,t}),e("rows().nodes()",function(){return this.iterator("row",function(t,e){return t.aoData[e].nTr||H},1)}),e("rows().data()",function(){return this.iterator(!0,"rows",function(t,e){return m(t.aoData,e,"_aData")},1)}),t("rows().cache()","row().cache()",function(n){return this.iterator("row",function(t,e){t=t.aoData[e];return"search"===n?t._aFilterData:t._aSortData},1)}),t("rows().invalidate()","row().invalidate()",function(n){return this.iterator("row",function(t,e){bt(t,e,n)})}),t("rows().indexes()","row().index()",function(){return this.iterator("row",function(t,e){return e},1)}),t("rows().ids()","row().id()",function(t){for(var e=[],n=this.context,a=0,r=n.length;a<r;a++)for(var o=0,i=this[a].length;o<i;o++){var l=n[a].rowIdFn(n[a].aoData[this[a][o]]._aData);e.push((!0===t?"#":"")+l)}return new B(n,e)}),t("rows().remove()","row().remove()",function(){var f=this;return this.iterator("row",function(t,e,n){var a,r,o,i,l,s,u=t.aoData,c=u[e];for(u.splice(e,1),a=0,r=u.length;a<r;a++)if(s=(l=u[a]).anCells,null!==l.nTr&&(l.nTr._DT_RowIndex=a),null!==s)for(o=0,i=s.length;o<i;o++)s[o]._DT_CellIndex.row=a;gt(t.aiDisplayMaster,e),gt(t.aiDisplay,e),gt(f[n],e,!1),0<t._iRecordsDisplay&&t._iRecordsDisplay--,Se(t);n=t.rowIdFn(c._aData);n!==H&&delete t.aIds[n]}),this.iterator("table",function(t){for(var e=0,n=t.aoData.length;e<n;e++)t.aoData[e].idx=e}),this}),e("rows.add()",function(o){var t=this.iterator("table",function(t){for(var e,n=[],a=0,r=o.length;a<r;a++)(e=o[a]).nodeName&&"TR"===e.nodeName.toUpperCase()?n.push(ut(t,e)[0]):n.push(x(t,e));return n},1),e=this.rows(-1);return e.pop(),P.merge(e,t),e}),e("row()",function(t,e){return Ce(this.rows(t,e))}),e("row().data()",function(t){var e,n=this.context;return t===H?n.length&&this.length?n[0].aoData[this[0]]._aData:H:((e=n[0].aoData[this[0]])._aData=t,Array.isArray(t)&&e.nTr&&e.nTr.id&&b(n[0].rowId)(t,e.nTr.id),bt(n[0],this[0],"data"),this)}),e("row().node()",function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]].nTr||null}),e("row.add()",function(e){e instanceof P&&e.length&&(e=e[0]);var t=this.iterator("table",function(t){return e.nodeName&&"TR"===e.nodeName.toUpperCase()?ut(t,e)[0]:x(t,e)});return this.row(t[0])}),P(v).on("plugin-init.dt",function(t,e){var n=new B(e),a="on-plugin-init",r="stateSaveParams."+a,o="destroy. "+a,a=(n.on(r,function(t,e,n){for(var a=e.rowIdFn,r=e.aoData,o=[],i=0;i<r.length;i++)r[i]._detailsShow&&o.push("#"+a(r[i]._aData));n.childRows=o}),n.on(o,function(){n.off(r+" "+o)}),n.state.loaded());a&&a.childRows&&n.rows(P.map(a.childRows,function(t){return t.replace(/:/g,"\\:")})).every(function(){R(e,null,"requestChild",[this])})}),w.util.throttle(function(t){de(t[0])},500)),Re=function(t,e){var n=t.context;n.length&&(e=n[0].aoData[e!==H?e:t[0]])&&e._details&&(e._details.remove(),e._detailsShow=H,e._details=H,P(e.nTr).removeClass("dt-hasChild"),Le(n))},Pe="row().child",je=Pe+"()",He=(e(je,function(t,e){var n=this.context;return t===H?n.length&&this.length?n[0].aoData[this[0]]._details:H:(!0===t?this.child.show():!1===t?Re(this):n.length&&this.length&&Te(n[0],n[0].aoData[this[0]],t,e),this)}),e([Pe+".show()",je+".show()"],function(t){return xe(this,!0),this}),e([Pe+".hide()",je+".hide()"],function(){return xe(this,!1),this}),e([Pe+".remove()",je+".remove()"],function(){return Re(this),this}),e(Pe+".isShown()",function(){var t=this.context;return t.length&&this.length&&t[0].aoData[this[0]]._detailsShow||!1}),/^([^:]+):(name|visIdx|visible)$/),Ne=(e("columns()",function(n,a){n===H?n="":P.isPlainObject(n)&&(a=n,n=""),a=we(a);var t=this.iterator("table",function(t){return e=n,l=a,s=(i=t).aoColumns,u=N(s,"sName"),c=N(s,"nTh"),_e("column",e,function(n){var a,t=d(n);if(""===n)return f(s.length);if(null!==t)return[0<=t?t:s.length+t];if("function"==typeof n)return a=Fe(i,l),P.map(s,function(t,e){return n(e,Ae(i,e,0,0,a),c[e])?e:null});var r="string"==typeof n?n.match(He):"";if(r)switch(r[2]){case"visIdx":case"visible":var e,o=parseInt(r[1],10);return o<0?[(e=P.map(s,function(t,e){return t.bVisible?e:null}))[e.length+o]]:[rt(i,o)];case"name":return P.map(u,function(t,e){return t===r[1]?e:null});default:return[]}return n.nodeName&&n._DT_CellIndex?[n._DT_CellIndex.column]:(t=P(c).filter(n).map(function(){return P.inArray(this,c)}).toArray()).length||!n.nodeName?t:(t=P(n).closest("*[data-dt-column]")).length?[t.data("dt-column")]:[]},i,l);var i,e,l,s,u,c},1);return t.selector.cols=n,t.selector.opts=a,t}),t("columns().header()","column().header()",function(t,e){return this.iterator("column",function(t,e){return t.aoColumns[e].nTh},1)}),t("columns().footer()","column().footer()",function(t,e){return this.iterator("column",function(t,e){return t.aoColumns[e].nTf},1)}),t("columns().data()","column().data()",function(){return this.iterator("column-rows",Ae,1)}),t("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(t,e){return t.aoColumns[e].mData},1)}),t("columns().cache()","column().cache()",function(o){return this.iterator("column-rows",function(t,e,n,a,r){return m(t.aoData,r,"search"===o?"_aFilterData":"_aSortData",e)},1)}),t("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(t,e,n,a,r){return m(t.aoData,r,"anCells",e)},1)}),t("columns().visible()","column().visible()",function(f,n){var e=this,t=this.iterator("column",function(t,e){if(f===H)return t.aoColumns[e].bVisible;var n,a,r=e,e=f,o=t.aoColumns,i=o[r],l=t.aoData;if(e===H)i.bVisible;else if(i.bVisible!==e){if(e)for(var s=P.inArray(!0,N(o,"bVisible"),r+1),u=0,c=l.length;u<c;u++)a=l[u].nTr,n=l[u].anCells,a&&a.insertBefore(n[r],n[s]||null);else P(N(t.aoData,"anCells",r)).detach();i.bVisible=e}});return f!==H&&this.iterator("table",function(t){Dt(t,t.aoHeader),Dt(t,t.aoFooter),t.aiDisplay.length||P(t.nTBody).find("td[colspan]").attr("colspan",T(t)),de(t),e.iterator("column",function(t,e){R(t,null,"column-visibility",[t,e,f,n])}),n!==H&&!n||e.columns.adjust()}),t}),t("columns().indexes()","column().index()",function(n){return this.iterator("column",function(t,e){return"visible"===n?ot(t,e):e},1)}),e("columns.adjust()",function(){return this.iterator("table",function(t){O(t)},1)}),e("column.index()",function(t,e){var n;if(0!==this.context.length)return n=this.context[0],"fromVisible"===t||"toData"===t?rt(n,e):"fromData"===t||"toVisible"===t?ot(n,e):void 0}),e("column()",function(t,e){return Ce(this.columns(t,e))}),e("cells()",function(g,t,b){var a,r,o,i,l,s,e;return P.isPlainObject(g)&&(g.row===H?(b=g,g=null):(b=t,t=null)),P.isPlainObject(t)&&(b=t,t=null),null===t||t===H?this.iterator("table",function(t){return a=t,t=g,e=we(b),f=a.aoData,d=Fe(a,e),n=_(m(f,d,"anCells")),h=P(Y([],n)),p=a.aoColumns.length,_e("cell",t,function(t){var e,n="function"==typeof t;if(null===t||t===H||n){for(o=[],i=0,l=d.length;i<l;i++)for(r=d[i],s=0;s<p;s++)u={row:r,column:s},(!n||(c=f[r],t(u,S(a,r,s),c.anCells?c.anCells[s]:null)))&&o.push(u);return o}return P.isPlainObject(t)?t.column!==H&&t.row!==H&&-1!==P.inArray(t.row,d)?[t]:[]:(e=h.filter(t).map(function(t,e){return{row:e._DT_CellIndex.row,column:e._DT_CellIndex.column}}).toArray()).length||!t.nodeName?e:(c=P(t).closest("*[data-dt-row]")).length?[{row:c.data("dt-row"),column:c.data("dt-column")}]:[]},a,e);var a,e,r,o,i,l,s,u,c,f,d,n,h,p}):(e=b?{page:b.page,order:b.order,search:b.search}:{},a=this.columns(t,e),r=this.rows(g,e),e=this.iterator("table",function(t,e){var n=[];for(o=0,i=r[e].length;o<i;o++)for(l=0,s=a[e].length;l<s;l++)n.push({row:r[e][o],column:a[e][l]});return n},1),e=b&&b.selected?this.cells(e,b):e,P.extend(e.selector,{cols:t,rows:g,opts:b}),e)}),t("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(t,e,n){t=t.aoData[e];return t&&t.anCells?t.anCells[n]:H},1)}),e("cells().data()",function(){return this.iterator("cell",function(t,e,n){return S(t,e,n)},1)}),t("cells().cache()","cell().cache()",function(a){return a="search"===a?"_aFilterData":"_aSortData",this.iterator("cell",function(t,e,n){return t.aoData[e][a][n]},1)}),t("cells().render()","cell().render()",function(a){return this.iterator("cell",function(t,e,n){return S(t,e,n,a)},1)}),t("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(t,e,n){return{row:e,column:n,columnVisible:ot(t,n)}},1)}),t("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(t,e,n){bt(t,e,a,n)})}),e("cell()",function(t,e,n){return Ce(this.cells(t,e,n))}),e("cell().data()",function(t){var e=this.context,n=this[0];return t===H?e.length&&n.length?S(e[0],n[0].row,n[0].column):H:(ct(e[0],n[0].row,n[0].column,t),bt(e[0],n[0].row,"data",n[0].column),this)}),e("order()",function(e,t){var n=this.context;return e===H?0!==n.length?n[0].aaSorting:H:("number"==typeof e?e=[[e,t]]:e.length&&!Array.isArray(e[0])&&(e=Array.prototype.slice.call(arguments)),this.iterator("table",function(t){t.aaSorting=e.slice()}))}),e("order.listener()",function(e,n,a){return this.iterator("table",function(t){ue(t,e,n,a)})}),e("order.fixed()",function(e){var t;return e?this.iterator("table",function(t){t.aaSortingFixed=P.extend(!0,{},e)}):(t=(t=this.context).length?t[0].aaSortingFixed:H,Array.isArray(t)?{pre:t}:t)}),e(["columns().order()","column().order()"],function(a){var r=this;return this.iterator("table",function(t,e){var n=[];P.each(r[e],function(t,e){n.push([e,a])}),t.aaSorting=n})}),e("search()",function(e,n,a,r){var t=this.context;return e===H?0!==t.length?t[0].oPreviousSearch.sSearch:H:this.iterator("table",function(t){t.oFeatures.bFilter&&Rt(t,P.extend({},t.oPreviousSearch,{sSearch:e+"",bRegex:null!==n&&n,bSmart:null===a||a,bCaseInsensitive:null===r||r}),1)})}),t("columns().search()","column().search()",function(a,r,o,i){return this.iterator("column",function(t,e){var n=t.aoPreSearchCols;if(a===H)return n[e].sSearch;t.oFeatures.bFilter&&(P.extend(n[e],{sSearch:a+"",bRegex:null!==r&&r,bSmart:null===o||o,bCaseInsensitive:null===i||i}),Rt(t,t.oPreviousSearch,1))})}),e("state()",function(){return this.context.length?this.context[0].oSavedState:null}),e("state.clear()",function(){return this.iterator("table",function(t){t.fnStateSaveCallback.call(t.oInstance,t,{})})}),e("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null}),e("state.save()",function(){return this.iterator("table",function(t){de(t)})}),w.use=function(t,e){"lib"===e||t.fn?P=t:"win"==e||t.document?v=(j=t).document:"datetime"!==e&&"DateTime"!==t.type||(w.DateTime=t)},w.factory=function(t,e){var n=!1;return t&&t.document&&(v=(j=t).document),e&&e.fn&&e.fn.jquery&&(P=e,n=!0),n},w.versionCheck=w.fnVersionCheck=function(t){for(var e,n,a=w.version.split("."),r=t.split("."),o=0,i=r.length;o<i;o++)if((e=parseInt(a[o],10)||0)!==(n=parseInt(r[o],10)||0))return n<e;return!0},w.isDataTable=w.fnIsDataTable=function(t){var r=P(t).get(0),o=!1;return t instanceof w.Api||(P.each(w.settings,function(t,e){var n=e.nScrollHead?P("table",e.nScrollHead)[0]:null,a=e.nScrollFoot?P("table",e.nScrollFoot)[0]:null;e.nTable!==r&&n!==r&&a!==r||(o=!0)}),o)},w.tables=w.fnTables=function(e){var t=!1,n=(P.isPlainObject(e)&&(t=e.api,e=e.visible),P.map(w.settings,function(t){if(!e||P(t.nTable).is(":visible"))return t.nTable}));return t?new B(n):n},w.camelToHungarian=C,e("$()",function(t,e){e=this.rows(e).nodes(),e=P(e);return P([].concat(e.filter(t).toArray(),e.find(t).toArray()))}),P.each(["on","one","off"],function(t,n){e(n+"()",function(){var t=Array.prototype.slice.call(arguments),e=(t[0]=P.map(t[0].split(/\s/),function(t){return t.match(/\.dt\b/)?t:t+".dt"}).join(" "),P(this.tables().nodes()));return e[n].apply(e,t),this})}),e("clear()",function(){return this.iterator("table",function(t){pt(t)})}),e("settings()",function(){return new B(this.context,this.context)}),e("init()",function(){var t=this.context;return t.length?t[0].oInit:null}),e("data()",function(){return this.iterator("table",function(t){return N(t.aoData,"_aData")}).flatten()}),e("destroy()",function(c){return c=c||!1,this.iterator("table",function(e){var n,t=e.oClasses,a=e.nTable,r=e.nTBody,o=e.nTHead,i=e.nTFoot,l=P(a),r=P(r),s=P(e.nTableWrapper),u=P.map(e.aoData,function(t){return t.nTr}),i=(e.bDestroying=!0,R(e,"aoDestroyCallback","destroy",[e]),c||new B(e).columns().visible(!0),s.off(".DT").find(":not(tbody *)").off(".DT"),P(j).off(".DT-"+e.sInstance),a!=o.parentNode&&(l.children("thead").detach(),l.append(o)),i&&a!=i.parentNode&&(l.children("tfoot").detach(),l.append(i)),e.aaSorting=[],e.aaSortingFixed=[],ce(e),P(u).removeClass(e.asStripeClasses.join(" ")),P("th, td",o).removeClass(t.sSortable+" "+t.sSortableAsc+" "+t.sSortableDesc+" "+t.sSortableNone),r.children().detach(),r.append(u),e.nTableWrapper.parentNode),o=c?"remove":"detach",u=(l[o](),s[o](),!c&&i&&(i.insertBefore(a,e.nTableReinsertBefore),l.css("width",e.sDestroyWidth).removeClass(t.sTable),n=e.asDestroyStripes.length)&&r.children().each(function(t){P(this).addClass(e.asDestroyStripes[t%n])}),P.inArray(e,w.settings));-1!==u&&w.settings.splice(u,1)})}),P.each(["column","row","cell"],function(t,s){e(s+"s().every()",function(o){var i=this.selector.opts,l=this;return this.iterator(s,function(t,e,n,a,r){o.call(l[s](e,"cell"===s?n:i,"cell"===s?i:H),e,n,a,r)})})}),e("i18n()",function(t,e,n){var a=this.context[0],t=A(t)(a.oLanguage);return t===H&&(t=e),"string"==typeof(t=n!==H&&P.isPlainObject(t)?t[n]!==H?t[n]:t._:t)?t.replace("%d",n):t}),w.version="1.13.6",w.settings=[],w.models={},w.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0,return:!1},w.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1},w.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null},w.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(t){try{return JSON.parse((-1===t.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+t.sInstance+"_"+location.pathname))}catch(t){return{}}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(t,e){try{(-1===t.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+t.sInstance+"_"+location.pathname,JSON.stringify(e))}catch(t){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:P.extend({},w.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"},i(w.defaults),w.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null},i(w.defaults.column),w.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,jqXHR:null,json:H,oAjaxData:H,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==E(this)?+this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==E(this)?+this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var t=this._iDisplayLength,e=this._iDisplayStart,n=e+t,a=this.aiDisplay.length,r=this.oFeatures,o=r.bPaginate;return r.bServerSide?!1===o||-1===t?e+a:Math.min(e+t,this._iRecordsDisplay):!o||a<n||-1===t?a:n},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null},w.ext=p={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:w.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:w.version},P.extend(p,{afnFiltering:p.search,aTypes:p.type.detect,ofnSearch:p.type.search,oSort:p.type.order,afnSortData:p.order,aoFeatures:p.feature,oApi:p.internal,oStdClasses:p.classes,oPagination:p.pager}),P.extend(w.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_desc_disabled",sSortableDesc:"sorting_asc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""}),w.ext.pager);function Oe(t,e){var n=[],a=Ne.numbers_length,r=Math.floor(a/2);return e<=a?n=f(0,e):t<=r?((n=f(0,a-2)).push("ellipsis"),n.push(e-1)):((e-1-r<=t?n=f(e-(a-2),e):((n=f(t-r+2,t+r-1)).push("ellipsis"),n.push(e-1),n)).splice(0,0,"ellipsis"),n.splice(0,0,0)),n.DT_el="span",n}P.extend(Ne,{simple:function(t,e){return["previous","next"]},full:function(t,e){return["first","previous","next","last"]},numbers:function(t,e){return[Oe(t,e)]},simple_numbers:function(t,e){return["previous",Oe(t,e),"next"]},full_numbers:function(t,e){return["first","previous",Oe(t,e),"next","last"]},first_last_numbers:function(t,e){return["first",Oe(t,e),"last"]},_numbers:Oe,numbers_length:7}),P.extend(!0,w.ext.renderer,{pageButton:{_:function(u,t,c,e,f,d){function h(t,e){for(var n,a=b.sPageButtonDisabled,r=function(t){Yt(u,t.data.action,!0)},o=0,i=e.length;o<i;o++)if(n=e[o],Array.isArray(n)){var l=P("<"+(n.DT_el||"div")+"/>").appendTo(t);h(l,n)}else{var s=!1;switch(p=null,g=n){case"ellipsis":t.append('<span class="ellipsis">&#x2026;</span>');break;case"first":p=m.sFirst,0===f&&(s=!0);break;case"previous":p=m.sPrevious,0===f&&(s=!0);break;case"next":p=m.sNext,0!==d&&f!==d-1||(s=!0);break;case"last":p=m.sLast,0!==d&&f!==d-1||(s=!0);break;default:p=u.fnFormatNumber(n+1),g=f===n?b.sPageButtonActive:""}null!==p&&(l=u.oInit.pagingTag||"a",s&&(g+=" "+a),me(P("<"+l+">",{class:b.sPageButton+" "+g,"aria-controls":u.sTableId,"aria-disabled":s?"true":null,"aria-label":S[n],role:"link","aria-current":g===b.sPageButtonActive?"page":null,"data-dt-idx":n,tabindex:s?-1:u.iTabIndex,id:0===c&&"string"==typeof n?u.sTableId+"_"+n:null}).html(p).appendTo(t),{action:n},r))}}var p,g,n,b=u.oClasses,m=u.oLanguage.oPaginate,S=u.oLanguage.oAria.paginate||{};try{n=P(t).find(v.activeElement).data("dt-idx")}catch(t){}h(P(t).empty(),e),n!==H&&P(t).find("[data-dt-idx="+n+"]").trigger("focus")}}}),P.extend(w.ext.type.detect,[function(t,e){e=e.oLanguage.sDecimal;return l(t,e)?"num"+e:null},function(t,e){var n;return(!t||t instanceof Date||X.test(t))&&(null!==(n=Date.parse(t))&&!isNaN(n)||h(t))?"date":null},function(t,e){e=e.oLanguage.sDecimal;return l(t,e,!0)?"num-fmt"+e:null},function(t,e){e=e.oLanguage.sDecimal;return a(t,e)?"html-num"+e:null},function(t,e){e=e.oLanguage.sDecimal;return a(t,e,!0)?"html-num-fmt"+e:null},function(t,e){return h(t)||"string"==typeof t&&-1!==t.indexOf("<")?"html":null}]),P.extend(w.ext.type.search,{html:function(t){return h(t)?t:"string"==typeof t?t.replace(U," ").replace(V,""):""},string:function(t){return!h(t)&&"string"==typeof t?t.replace(U," "):t}});function ke(t,e,n,a){var r;return 0===t||t&&"-"!==t?"number"==(r=typeof t)||"bigint"==r?t:+(t=(t=e?$(t,e):t).replace&&(n&&(t=t.replace(n,"")),a)?t.replace(a,""):t):-1/0}function Me(n){P.each({num:function(t){return ke(t,n)},"num-fmt":function(t){return ke(t,n,q)},"html-num":function(t){return ke(t,n,V)},"html-num-fmt":function(t){return ke(t,n,V,q)}},function(t,e){p.type.order[t+n+"-pre"]=e,t.match(/^html\-/)&&(p.type.search[t+n]=p.type.search.html)})}P.extend(p.type.order,{"date-pre":function(t){t=Date.parse(t);return isNaN(t)?-1/0:t},"html-pre":function(t){return h(t)?"":t.replace?t.replace(/<.*?>/g,"").toLowerCase():t+""},"string-pre":function(t){return h(t)?"":"string"==typeof t?t.toLowerCase():t.toString?t.toString():""},"string-asc":function(t,e){return t<e?-1:e<t?1:0},"string-desc":function(t,e){return t<e?1:e<t?-1:0}}),Me(""),P.extend(!0,w.ext.renderer,{header:{_:function(r,o,i,l){P(r.nTable).on("order.dt.DT",function(t,e,n,a){r===e&&(e=i.idx,o.removeClass(l.sSortAsc+" "+l.sSortDesc).addClass("asc"==a[e]?l.sSortAsc:"desc"==a[e]?l.sSortDesc:i.sSortingClass))})},jqueryui:function(r,o,i,l){P("<div/>").addClass(l.sSortJUIWrapper).append(o.contents()).append(P("<span/>").addClass(l.sSortIcon+" "+i.sSortingClassJUI)).appendTo(o),P(r.nTable).on("order.dt.DT",function(t,e,n,a){r===e&&(e=i.idx,o.removeClass(l.sSortAsc+" "+l.sSortDesc).addClass("asc"==a[e]?l.sSortAsc:"desc"==a[e]?l.sSortDesc:i.sSortingClass),o.find("span."+l.sSortIcon).removeClass(l.sSortJUIAsc+" "+l.sSortJUIDesc+" "+l.sSortJUI+" "+l.sSortJUIAscAllowed+" "+l.sSortJUIDescAllowed).addClass("asc"==a[e]?l.sSortJUIAsc:"desc"==a[e]?l.sSortJUIDesc:i.sSortingClassJUI))})}}});function We(t){return"string"==typeof(t=Array.isArray(t)?t.join(","):t)?t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):t}function Ee(t,e,n,a,r){return j.moment?t[e](r):j.luxon?t[n](r):a?t[a](r):t}var Be=!1;function Ue(t,e,n){var a;if(j.moment){if(!(a=j.moment.utc(t,e,n,!0)).isValid())return null}else if(j.luxon){if(!(a=e&&"string"==typeof t?j.luxon.DateTime.fromFormat(t,e):j.luxon.DateTime.fromISO(t)).isValid)return null;a.setLocale(n)}else e?(Be||alert("DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17"),Be=!0):a=new Date(t);return a}function Ve(s){return function(a,r,o,i){0===arguments.length?(o="en",a=r=null):1===arguments.length?(o="en",r=a,a=null):2===arguments.length&&(o=r,r=a,a=null);var l="datetime-"+r;return w.ext.type.order[l]||(w.ext.type.detect.unshift(function(t){return t===l&&l}),w.ext.type.order[l+"-asc"]=function(t,e){t=t.valueOf(),e=e.valueOf();return t===e?0:t<e?-1:1},w.ext.type.order[l+"-desc"]=function(t,e){t=t.valueOf(),e=e.valueOf();return t===e?0:e<t?-1:1}),function(t,e){var n;return null!==t&&t!==H||(t="--now"===i?(n=new Date,new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds()))):""),"type"===e?l:""===t?"sort"!==e?"":Ue("0000-01-01 00:00:00",null,o):!(null===r||a!==r||"sort"===e||"type"===e||t instanceof Date)||null===(n=Ue(t,a,o))?t:"sort"===e?n:(t=null===r?Ee(n,"toDate","toJSDate","")[s]():Ee(n,"format","toFormat","toISOString",r),"display"===e?We(t):t)}}}var Xe=",",Je=".";if(j.Intl!==H)try{for(var qe=(new Intl.NumberFormat).formatToParts(100000.1),n=0;n<qe.length;n++)"group"===qe[n].type?Xe=qe[n].value:"decimal"===qe[n].type&&(Je=qe[n].value)}catch(t){}function $e(e){return function(){var t=[ge(this[w.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return w.ext.internal[e].apply(this,t)}}return w.datetime=function(n,a){var r="datetime-detect-"+n;a=a||"en",w.ext.type.order[r]||(w.ext.type.detect.unshift(function(t){var e=Ue(t,n,a);return!(""!==t&&!e)&&r}),w.ext.type.order[r+"-pre"]=function(t){return Ue(t,n,a)||0})},w.render={date:Ve("toLocaleDateString"),datetime:Ve("toLocaleString"),time:Ve("toLocaleTimeString"),number:function(a,r,o,i,l){return null!==a&&a!==H||(a=Xe),null!==r&&r!==H||(r=Je),{display:function(t){if("number"!=typeof t&&"string"!=typeof t)return t;if(""===t||null===t)return t;var e=t<0?"-":"",n=parseFloat(t);if(isNaN(n))return We(t);n=n.toFixed(o),t=Math.abs(n);n=parseInt(t,10),t=o?r+(t-n).toFixed(o).substring(2):"";return(e=0===n&&0===parseFloat(t)?"":e)+(i||"")+n.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+t+(l||"")}}},text:function(){return{display:We,filter:We}}},P.extend(w.ext.internal,{_fnExternApiFunc:$e,_fnBuildAjax:Tt,_fnAjaxUpdate:xt,_fnAjaxParameters:At,_fnAjaxUpdateDraw:It,_fnAjaxDataSrc:Ft,_fnAddColumn:nt,_fnColumnOptions:at,_fnAdjustColumnSizing:O,_fnVisibleToColumnIndex:rt,_fnColumnIndexToVisible:ot,_fnVisbleColumns:T,_fnGetColumns:it,_fnColumnTypes:lt,_fnApplyColumnDefs:st,_fnHungarianMap:i,_fnCamelToHungarian:C,_fnLanguageCompat:Z,_fnBrowserDetect:tt,_fnAddData:x,_fnAddTr:ut,_fnNodeToDataIndex:function(t,e){return e._DT_RowIndex!==H?e._DT_RowIndex:null},_fnNodeToColumnIndex:function(t,e,n){return P.inArray(n,t.aoData[e].anCells)},_fnGetCellData:S,_fnSetCellData:ct,_fnSplitObjNotation:dt,_fnGetObjectDataFn:A,_fnSetObjectDataFn:b,_fnGetDataMaster:ht,_fnClearTable:pt,_fnDeleteIndex:gt,_fnInvalidate:bt,_fnGetRowElements:mt,_fnCreateTr:St,_fnBuildHead:yt,_fnDrawHead:Dt,_fnDraw:y,_fnReDraw:u,_fnAddOptionsHtml:_t,_fnDetectHeader:wt,_fnGetUniqueThs:Ct,_fnFeatureHtmlFilter:Lt,_fnFilterComplete:Rt,_fnFilterCustom:Pt,_fnFilterColumn:jt,_fnFilter:Ht,_fnFilterCreateSearch:Nt,_fnEscapeRegex:Ot,_fnFilterData:Wt,_fnFeatureHtmlInfo:Ut,_fnUpdateInfo:Vt,_fnInfoMacros:Xt,_fnInitialise:Jt,_fnInitComplete:qt,_fnLengthChange:$t,_fnFeatureHtmlLength:Gt,_fnFeatureHtmlPaginate:zt,_fnPageChange:Yt,_fnFeatureHtmlProcessing:Zt,_fnProcessingDisplay:D,_fnFeatureHtmlTable:Kt,_fnScrollDraw:Qt,_fnApplyToChildren:k,_fnCalculateColumnWidths:ee,_fnThrottle:ne,_fnConvertToWidth:ae,_fnGetWidestNode:re,_fnGetMaxLenString:oe,_fnStringToCss:M,_fnSortFlatten:I,_fnSort:ie,_fnSortAria:le,_fnSortListener:se,_fnSortAttachListener:ue,_fnSortingClasses:ce,_fnSortData:fe,_fnSaveState:de,_fnLoadState:he,_fnImplementState:pe,_fnSettingsFromNode:ge,_fnLog:W,_fnMap:F,_fnBindAction:me,_fnCallbackReg:L,_fnCallbackFire:R,_fnLengthOverflow:Se,_fnRenderer:ve,_fnDataSource:E,_fnRowAttributes:vt,_fnExtend:be,_fnCalculateEnd:function(){}}),((P.fn.dataTable=w).$=P).fn.dataTableSettings=w.settings,P.fn.dataTableExt=w.ext,P.fn.DataTable=function(t){return P(this).dataTable(t).api()},P.each(w,function(t,e){P.fn.DataTable[t]=e}),w}); \ No newline at end of file
diff --git a/docs/coverage/lib/highlight.js-6.2/LICENSE b/docs/coverage/lib/highlight.js-6.2/LICENSE
new file mode 100644
index 00000000..fe2f67b1
--- /dev/null
+++ b/docs/coverage/lib/highlight.js-6.2/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2006, Ivan Sagalaev
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of highlight.js nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/docs/coverage/lib/highlight.js-6.2/highlight.pack.js b/docs/coverage/lib/highlight.js-6.2/highlight.pack.js
new file mode 100644
index 00000000..6687e557
--- /dev/null
+++ b/docs/coverage/lib/highlight.js-6.2/highlight.pack.js
@@ -0,0 +1 @@
+var hljs=new function(){function m(p){return p.replace(/&/gm,"&amp;").replace(/</gm,"&lt;")}function f(r,q,p){return RegExp(q,"m"+(r.cI?"i":"")+(p?"g":""))}function b(r){for(var p=0;p<r.childNodes.length;p++){var q=r.childNodes[p];if(q.nodeName=="CODE"){return q}if(!(q.nodeType==3&&q.nodeValue.match(/\s+/))){break}}}function h(t,s){var p="";for(var r=0;r<t.childNodes.length;r++){if(t.childNodes[r].nodeType==3){var q=t.childNodes[r].nodeValue;if(s){q=q.replace(/\n/g,"")}p+=q}else{if(t.childNodes[r].nodeName=="BR"){p+="\n"}else{p+=h(t.childNodes[r])}}}if(/MSIE [678]/.test(navigator.userAgent)){p=p.replace(/\r/g,"\n")}return p}function a(s){var r=s.className.split(/\s+/);r=r.concat(s.parentNode.className.split(/\s+/));for(var q=0;q<r.length;q++){var p=r[q].replace(/^language-/,"");if(e[p]){return p}}}function c(q){var p=[];(function(s,t){for(var r=0;r<s.childNodes.length;r++){if(s.childNodes[r].nodeType==3){t+=s.childNodes[r].nodeValue.length}else{if(s.childNodes[r].nodeName=="BR"){t+=1}else{if(s.childNodes[r].nodeType==1){p.push({event:"start",offset:t,node:s.childNodes[r]});t=arguments.callee(s.childNodes[r],t);p.push({event:"stop",offset:t,node:s.childNodes[r]})}}}}return t})(q,0);return p}function k(y,w,x){var q=0;var z="";var s=[];function u(){if(y.length&&w.length){if(y[0].offset!=w[0].offset){return(y[0].offset<w[0].offset)?y:w}else{return w[0].event=="start"?y:w}}else{return y.length?y:w}}function t(D){var A="<"+D.nodeName.toLowerCase();for(var B=0;B<D.attributes.length;B++){var C=D.attributes[B];A+=" "+C.nodeName.toLowerCase();if(C.value!==undefined&&C.value!==false&&C.value!==null){A+='="'+m(C.value)+'"'}}return A+">"}while(y.length||w.length){var v=u().splice(0,1)[0];z+=m(x.substr(q,v.offset-q));q=v.offset;if(v.event=="start"){z+=t(v.node);s.push(v.node)}else{if(v.event=="stop"){var p,r=s.length;do{r--;p=s[r];z+=("</"+p.nodeName.toLowerCase()+">")}while(p!=v.node);s.splice(r,1);while(r<s.length){z+=t(s[r]);r++}}}}return z+m(x.substr(q))}function j(){function q(x,y,v){if(x.compiled){return}var u;var s=[];if(x.k){x.lR=f(y,x.l||hljs.IR,true);for(var w in x.k){if(!x.k.hasOwnProperty(w)){continue}if(x.k[w] instanceof Object){u=x.k[w]}else{u=x.k;w="keyword"}for(var r in u){if(!u.hasOwnProperty(r)){continue}x.k[r]=[w,u[r]];s.push(r)}}}if(!v){if(x.bWK){x.b="\\b("+s.join("|")+")\\s"}x.bR=f(y,x.b?x.b:"\\B|\\b");if(!x.e&&!x.eW){x.e="\\B|\\b"}if(x.e){x.eR=f(y,x.e)}}if(x.i){x.iR=f(y,x.i)}if(x.r===undefined){x.r=1}if(!x.c){x.c=[]}x.compiled=true;for(var t=0;t<x.c.length;t++){if(x.c[t]=="self"){x.c[t]=x}q(x.c[t],y,false)}if(x.starts){q(x.starts,y,false)}}for(var p in e){if(!e.hasOwnProperty(p)){continue}q(e[p].dM,e[p],true)}}function d(B,C){if(!j.called){j();j.called=true}function q(r,M){for(var L=0;L<M.c.length;L++){if((M.c[L].bR.exec(r)||[null])[0]==r){return M.c[L]}}}function v(L,r){if(D[L].e&&D[L].eR.test(r)){return 1}if(D[L].eW){var M=v(L-1,r);return M?M+1:0}return 0}function w(r,L){return L.i&&L.iR.test(r)}function K(N,O){var M=[];for(var L=0;L<N.c.length;L++){M.push(N.c[L].b)}var r=D.length-1;do{if(D[r].e){M.push(D[r].e)}r--}while(D[r+1].eW);if(N.i){M.push(N.i)}return f(O,M.join("|"),true)}function p(M,L){var N=D[D.length-1];if(!N.t){N.t=K(N,E)}N.t.lastIndex=L;var r=N.t.exec(M);return r?[M.substr(L,r.index-L),r[0],false]:[M.substr(L),"",true]}function z(N,r){var L=E.cI?r[0].toLowerCase():r[0];var M=N.k[L];if(M&&M instanceof Array){return M}return false}function F(L,P){L=m(L);if(!P.k){return L}var r="";var O=0;P.lR.lastIndex=0;var M=P.lR.exec(L);while(M){r+=L.substr(O,M.index-O);var N=z(P,M);if(N){x+=N[1];r+='<span class="'+N[0]+'">'+M[0]+"</span>"}else{r+=M[0]}O=P.lR.lastIndex;M=P.lR.exec(L)}return r+L.substr(O,L.length-O)}function J(L,M){if(M.sL&&e[M.sL]){var r=d(M.sL,L);x+=r.keyword_count;return r.value}else{return F(L,M)}}function I(M,r){var L=M.cN?'<span class="'+M.cN+'">':"";if(M.rB){y+=L;M.buffer=""}else{if(M.eB){y+=m(r)+L;M.buffer=""}else{y+=L;M.buffer=r}}D.push(M);A+=M.r}function G(N,M,Q){var R=D[D.length-1];if(Q){y+=J(R.buffer+N,R);return false}var P=q(M,R);if(P){y+=J(R.buffer+N,R);I(P,M);return P.rB}var L=v(D.length-1,M);if(L){var O=R.cN?"</span>":"";if(R.rE){y+=J(R.buffer+N,R)+O}else{if(R.eE){y+=J(R.buffer+N,R)+O+m(M)}else{y+=J(R.buffer+N+M,R)+O}}while(L>1){O=D[D.length-2].cN?"</span>":"";y+=O;L--;D.length--}var r=D[D.length-1];D.length--;D[D.length-1].buffer="";if(r.starts){I(r.starts,"")}return R.rE}if(w(M,R)){throw"Illegal"}}var E=e[B];var D=[E.dM];var A=0;var x=0;var y="";try{var s,u=0;E.dM.buffer="";do{s=p(C,u);var t=G(s[0],s[1],s[2]);u+=s[0].length;if(!t){u+=s[1].length}}while(!s[2]);if(D.length>1){throw"Illegal"}return{r:A,keyword_count:x,value:y}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:m(C)}}else{throw H}}}function g(t){var p={keyword_count:0,r:0,value:m(t)};var r=p;for(var q in e){if(!e.hasOwnProperty(q)){continue}var s=d(q,t);s.language=q;if(s.keyword_count+s.r>r.keyword_count+r.r){r=s}if(s.keyword_count+s.r>p.keyword_count+p.r){r=p;p=s}}if(r.language){p.second_best=r}return p}function i(r,q,p){if(q){r=r.replace(/^((<[^>]+>|\t)+)/gm,function(t,w,v,u){return w.replace(/\t/g,q)})}if(p){r=r.replace(/\n/g,"<br>")}return r}function n(t,w,r){var x=h(t,r);var v=a(t);var y,s;if(v){y=d(v,x)}else{return}var q=c(t);if(q.length){s=document.createElement("pre");s.innerHTML=y.value;y.value=k(q,c(s),x)}y.value=i(y.value,w,r);var u=t.className;if(!u.match("(\\s|^)(language-)?"+v+"(\\s|$)")){u=u?(u+" "+v):v}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){s=t.parentNode;var p=document.createElement("div");p.innerHTML="<pre><code>"+y.value+"</code></pre>";t=p.firstChild.firstChild;p.firstChild.cN=s.cN;s.parentNode.replaceChild(p.firstChild,s)}else{t.innerHTML=y.value}t.className=u;t.result={language:v,kw:y.keyword_count,re:y.r};if(y.second_best){t.second_best={language:y.second_best.language,kw:y.second_best.keyword_count,re:y.second_best.r}}}function o(){if(o.called){return}o.called=true;var r=document.getElementsByTagName("pre");for(var p=0;p<r.length;p++){var q=b(r[p]);if(q){n(q,hljs.tabReplace)}}}function l(){if(window.addEventListener){window.addEventListener("DOMContentLoaded",o,false);window.addEventListener("load",o,false)}else{if(window.attachEvent){window.attachEvent("onload",o)}else{window.onload=o}}}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=n;this.initHighlighting=o;this.initHighlightingOnLoad=l;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.ER="(?![\\s\\S])";this.BE={b:"\\\\.",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(r,s){var p={};for(var q in r){p[q]=r[q]}if(s){for(var q in s){p[q]=s[q]}}return p}}();hljs.LANGUAGES.css=function(){var a={cN:"function",b:hljs.IR+"\\(",e:"\\)",c:[{eW:true,eE:true,c:[hljs.NM,hljs.ASM,hljs.QSM]}]};return{cI:true,dM:{i:"[=/|']",c:[hljs.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:{"font-face":1,page:1}},{cN:"at_rule",b:"@",e:"[{;]",eE:true,k:{"import":1,page:1,media:1,charset:1},c:[a,hljs.ASM,hljs.QSM,hljs.NM]},{cN:"tag",b:hljs.IR,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[hljs.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[a,hljs.NM,hljs.QSM,hljs.ASM,hljs.CBLCLM,{cN:"hexcolor",b:"\\#[0-9A-F]+"},{cN:"important",b:"!important"}]}}]}]}]}}}();hljs.LANGUAGES.javascript={dM:{k:{keyword:{"in":1,"if":1,"for":1,"while":1,"finally":1,"var":1,"new":1,"function":1,"do":1,"return":1,"void":1,"else":1,"break":1,"catch":1,"instanceof":1,"with":1,"throw":1,"case":1,"default":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1},literal:{"true":1,"false":1,"null":1}},c:[hljs.ASM,hljs.QSM,hljs.CLCM,hljs.CBLCLM,hljs.CNM,{b:"("+hljs.RSR+"|\\b(case|return|throw)\\b)\\s*",k:{"return":1,"throw":1,"case":1},c:[hljs.CLCM,hljs.CBLCLM,{cN:"regexp",b:"/",e:"/[gim]*",c:[{b:"\\\\/"}]}],r:0},{cN:"function",bWK:true,e:"{",k:{"function":1},c:[{cN:"title",b:"[A-Za-z$_][0-9A-Za-z$_]*"},{cN:"params",b:"\\(",e:"\\)",c:[hljs.ASM,hljs.QSM,hljs.CLCM,hljs.CBLCLM]}]}]}};hljs.LANGUAGES.r={dM:{c:[hljs.HCM,{cN:"number",b:"\\b0[xX][0-9a-fA-F]+[Li]?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+(?:[eE][+\\-]?\\d*)?L\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+\\.(?!\\d)(?:i\\b)?",e:hljs.IMMEDIATE_RE,r:1},{cN:"number",b:"\\b\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"keyword",b:"(?:tryCatch|library|setGeneric|setGroupGeneric)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\.",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\d+(?![\\w.])",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\b(?:function)",e:hljs.IMMEDIATE_RE,r:2},{cN:"keyword",b:"(?:if|in|break|next|repeat|else|for|return|switch|while|try|stop|warning|require|attach|detach|source|setMethod|setClass)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"literal",b:"(?:NA|NA_integer_|NA_real_|NA_character_|NA_complex_)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"literal",b:"(?:NULL|TRUE|FALSE|T|F|Inf|NaN)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"identifier",b:"[a-zA-Z.][a-zA-Z0-9._]*\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"<\\-(?!\\s*\\d)",e:hljs.IMMEDIATE_RE,r:2},{cN:"operator",b:"\\->|<\\-",e:hljs.IMMEDIATE_RE,r:1},{cN:"operator",b:"%%|~",e:hljs.IMMEDIATE_RE},{cN:"operator",b:">=|<=|==|!=|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||\\$|:",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"%",e:"%",i:"\\n",r:1},{cN:"identifier",b:"`",e:"`",r:0},{cN:"string",b:'"',e:'"',c:[hljs.BE],r:0},{cN:"string",b:"'",e:"'",c:[hljs.BE],r:0},{cN:"paren",b:"[[({\\])}]",e:hljs.IMMEDIATE_RE,r:0}]}};hljs.LANGUAGES.xml=function(){var b="[A-Za-z0-9\\._:-]+";var a={eW:true,c:[{cN:"attribute",b:b,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,dM:{c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:{style:1}},c:[a],starts:{cN:"css",e:"</style>",rE:true,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:{script:1}},c:[a],starts:{cN:"javascript",e:"<\/script>",rE:true,sL:"javascript"}},{cN:"vbscript",b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ />]+"},a]}]}}}();
diff --git a/docs/coverage/lib/highlight.js-6.2/rstudio.css b/docs/coverage/lib/highlight.js-6.2/rstudio.css
new file mode 100644
index 00000000..58de9a9a
--- /dev/null
+++ b/docs/coverage/lib/highlight.js-6.2/rstudio.css
@@ -0,0 +1,81 @@
+code {
+ line-height: 150%;
+}
+
+pre .operator,
+pre .paren {
+ color: rgb(104, 118, 135)
+}
+
+pre .literal {
+ color: rgb(88, 72, 246)
+}
+
+pre .number {
+ color: rgb(0, 0, 205);
+}
+
+pre .comment {
+ color: rgb(76, 136, 107);
+ font-style: italic;
+}
+
+pre .keyword,
+pre .id {
+ color: rgb(0, 0, 255);
+}
+
+pre .identifier {
+ color: rgb(0, 0, 0);
+}
+
+pre .string,
+pre .attribute {
+ color: rgb(3, 106, 7);
+}
+
+pre .doctype {
+ color: rgb(104, 104, 92);
+}
+
+pre .tag,
+pre .title {
+ color: rgb(4, 29, 140);
+}
+
+pre .value {
+ color: rgb(13, 105, 18);
+}
+
+.language-xml .attribute {
+ color: rgb(0, 0, 0);
+}
+
+.language-css .attribute {
+ color: rgb(110, 124, 219);
+}
+
+.language-css .value {
+ color: rgb(23, 149, 30);
+}
+
+.language-css .number,
+.language-css .hexcolor {
+ color: rgb(7, 27, 201);
+}
+
+.language-css .function {
+ color: rgb(61, 77, 113);
+}
+
+.language-css .tag {
+ color: rgb(195, 13, 25);
+}
+
+.language-css .class {
+ color: rgb(53, 132, 148);
+}
+
+.language-css .pseudo {
+ color: rgb(13, 105, 18);
+}
diff --git a/docs/coverage/lib/htmltools-fill-0.5.8.1/fill.css b/docs/coverage/lib/htmltools-fill-0.5.8.1/fill.css
new file mode 100644
index 00000000..841ea9d5
--- /dev/null
+++ b/docs/coverage/lib/htmltools-fill-0.5.8.1/fill.css
@@ -0,0 +1,21 @@
+@layer htmltools {
+ .html-fill-container {
+ display: flex;
+ flex-direction: column;
+ /* Prevent the container from expanding vertically or horizontally beyond its
+ parent's constraints. */
+ min-height: 0;
+ min-width: 0;
+ }
+ .html-fill-container > .html-fill-item {
+ /* Fill items can grow and shrink freely within
+ available vertical space in fillable container */
+ flex: 1 1 auto;
+ min-height: 0;
+ min-width: 0;
+ }
+ .html-fill-container > :not(.html-fill-item) {
+ /* Prevent shrinking or growing of non-fill items */
+ flex: 0 0 auto;
+ }
+}
diff --git a/docs/coverage/lib/htmlwidgets-1.6.4/htmlwidgets.js b/docs/coverage/lib/htmlwidgets-1.6.4/htmlwidgets.js
new file mode 100644
index 00000000..1067d029
--- /dev/null
+++ b/docs/coverage/lib/htmlwidgets-1.6.4/htmlwidgets.js
@@ -0,0 +1,901 @@
+(function() {
+ // If window.HTMLWidgets is already defined, then use it; otherwise create a
+ // new object. This allows preceding code to set options that affect the
+ // initialization process (though none currently exist).
+ window.HTMLWidgets = window.HTMLWidgets || {};
+
+ // See if we're running in a viewer pane. If not, we're in a web browser.
+ var viewerMode = window.HTMLWidgets.viewerMode =
+ /\bviewer_pane=1\b/.test(window.location);
+
+ // See if we're running in Shiny mode. If not, it's a static document.
+ // Note that static widgets can appear in both Shiny and static modes, but
+ // obviously, Shiny widgets can only appear in Shiny apps/documents.
+ var shinyMode = window.HTMLWidgets.shinyMode =
+ typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings;
+
+ // We can't count on jQuery being available, so we implement our own
+ // version if necessary.
+ function querySelectorAll(scope, selector) {
+ if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) {
+ return scope.find(selector);
+ }
+ if (scope.querySelectorAll) {
+ return scope.querySelectorAll(selector);
+ }
+ }
+
+ function asArray(value) {
+ if (value === null)
+ return [];
+ if ($.isArray(value))
+ return value;
+ return [value];
+ }
+
+ // Implement jQuery's extend
+ function extend(target /*, ... */) {
+ if (arguments.length == 1) {
+ return target;
+ }
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var prop in source) {
+ if (source.hasOwnProperty(prop)) {
+ target[prop] = source[prop];
+ }
+ }
+ }
+ return target;
+ }
+
+ // IE8 doesn't support Array.forEach.
+ function forEach(values, callback, thisArg) {
+ if (values.forEach) {
+ values.forEach(callback, thisArg);
+ } else {
+ for (var i = 0; i < values.length; i++) {
+ callback.call(thisArg, values[i], i, values);
+ }
+ }
+ }
+
+ // Replaces the specified method with the return value of funcSource.
+ //
+ // Note that funcSource should not BE the new method, it should be a function
+ // that RETURNS the new method. funcSource receives a single argument that is
+ // the overridden method, it can be called from the new method. The overridden
+ // method can be called like a regular function, it has the target permanently
+ // bound to it so "this" will work correctly.
+ function overrideMethod(target, methodName, funcSource) {
+ var superFunc = target[methodName] || function() {};
+ var superFuncBound = function() {
+ return superFunc.apply(target, arguments);
+ };
+ target[methodName] = funcSource(superFuncBound);
+ }
+
+ // Add a method to delegator that, when invoked, calls
+ // delegatee.methodName. If there is no such method on
+ // the delegatee, but there was one on delegator before
+ // delegateMethod was called, then the original version
+ // is invoked instead.
+ // For example:
+ //
+ // var a = {
+ // method1: function() { console.log('a1'); }
+ // method2: function() { console.log('a2'); }
+ // };
+ // var b = {
+ // method1: function() { console.log('b1'); }
+ // };
+ // delegateMethod(a, b, "method1");
+ // delegateMethod(a, b, "method2");
+ // a.method1();
+ // a.method2();
+ //
+ // The output would be "b1", "a2".
+ function delegateMethod(delegator, delegatee, methodName) {
+ var inherited = delegator[methodName];
+ delegator[methodName] = function() {
+ var target = delegatee;
+ var method = delegatee[methodName];
+
+ // The method doesn't exist on the delegatee. Instead,
+ // call the method on the delegator, if it exists.
+ if (!method) {
+ target = delegator;
+ method = inherited;
+ }
+
+ if (method) {
+ return method.apply(target, arguments);
+ }
+ };
+ }
+
+ // Implement a vague facsimilie of jQuery's data method
+ function elementData(el, name, value) {
+ if (arguments.length == 2) {
+ return el["htmlwidget_data_" + name];
+ } else if (arguments.length == 3) {
+ el["htmlwidget_data_" + name] = value;
+ return el;
+ } else {
+ throw new Error("Wrong number of arguments for elementData: " +
+ arguments.length);
+ }
+ }
+
+ // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
+ function escapeRegExp(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ }
+
+ function hasClass(el, className) {
+ var re = new RegExp("\\b" + escapeRegExp(className) + "\\b");
+ return re.test(el.className);
+ }
+
+ // elements - array (or array-like object) of HTML elements
+ // className - class name to test for
+ // include - if true, only return elements with given className;
+ // if false, only return elements *without* given className
+ function filterByClass(elements, className, include) {
+ var results = [];
+ for (var i = 0; i < elements.length; i++) {
+ if (hasClass(elements[i], className) == include)
+ results.push(elements[i]);
+ }
+ return results;
+ }
+
+ function on(obj, eventName, func) {
+ if (obj.addEventListener) {
+ obj.addEventListener(eventName, func, false);
+ } else if (obj.attachEvent) {
+ obj.attachEvent(eventName, func);
+ }
+ }
+
+ function off(obj, eventName, func) {
+ if (obj.removeEventListener)
+ obj.removeEventListener(eventName, func, false);
+ else if (obj.detachEvent) {
+ obj.detachEvent(eventName, func);
+ }
+ }
+
+ // Translate array of values to top/right/bottom/left, as usual with
+ // the "padding" CSS property
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/padding
+ function unpackPadding(value) {
+ if (typeof(value) === "number")
+ value = [value];
+ if (value.length === 1) {
+ return {top: value[0], right: value[0], bottom: value[0], left: value[0]};
+ }
+ if (value.length === 2) {
+ return {top: value[0], right: value[1], bottom: value[0], left: value[1]};
+ }
+ if (value.length === 3) {
+ return {top: value[0], right: value[1], bottom: value[2], left: value[1]};
+ }
+ if (value.length === 4) {
+ return {top: value[0], right: value[1], bottom: value[2], left: value[3]};
+ }
+ }
+
+ // Convert an unpacked padding object to a CSS value
+ function paddingToCss(paddingObj) {
+ return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px";
+ }
+
+ // Makes a number suitable for CSS
+ function px(x) {
+ if (typeof(x) === "number")
+ return x + "px";
+ else
+ return x;
+ }
+
+ // Retrieves runtime widget sizing information for an element.
+ // The return value is either null, or an object with fill, padding,
+ // defaultWidth, defaultHeight fields.
+ function sizingPolicy(el) {
+ var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']");
+ if (!sizingEl)
+ return null;
+ var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}");
+ if (viewerMode) {
+ return sp.viewer;
+ } else {
+ return sp.browser;
+ }
+ }
+
+ // @param tasks Array of strings (or falsy value, in which case no-op).
+ // Each element must be a valid JavaScript expression that yields a
+ // function. Or, can be an array of objects with "code" and "data"
+ // properties; in this case, the "code" property should be a string
+ // of JS that's an expr that yields a function, and "data" should be
+ // an object that will be added as an additional argument when that
+ // function is called.
+ // @param target The object that will be "this" for each function
+ // execution.
+ // @param args Array of arguments to be passed to the functions. (The
+ // same arguments will be passed to all functions.)
+ function evalAndRun(tasks, target, args) {
+ if (tasks) {
+ forEach(tasks, function(task) {
+ var theseArgs = args;
+ if (typeof(task) === "object") {
+ theseArgs = theseArgs.concat([task.data]);
+ task = task.code;
+ }
+ var taskFunc = tryEval(task);
+ if (typeof(taskFunc) !== "function") {
+ throw new Error("Task must be a function! Source:\n" + task);
+ }
+ taskFunc.apply(target, theseArgs);
+ });
+ }
+ }
+
+ // Attempt eval() both with and without enclosing in parentheses.
+ // Note that enclosing coerces a function declaration into
+ // an expression that eval() can parse
+ // (otherwise, a SyntaxError is thrown)
+ function tryEval(code) {
+ var result = null;
+ try {
+ result = eval("(" + code + ")");
+ } catch(error) {
+ if (!(error instanceof SyntaxError)) {
+ throw error;
+ }
+ try {
+ result = eval(code);
+ } catch(e) {
+ if (e instanceof SyntaxError) {
+ throw error;
+ } else {
+ throw e;
+ }
+ }
+ }
+ return result;
+ }
+
+ function initSizing(el) {
+ var sizing = sizingPolicy(el);
+ if (!sizing)
+ return;
+
+ var cel = document.getElementById("htmlwidget_container");
+ if (!cel)
+ return;
+
+ if (typeof(sizing.padding) !== "undefined") {
+ document.body.style.margin = "0";
+ document.body.style.padding = paddingToCss(unpackPadding(sizing.padding));
+ }
+
+ if (sizing.fill) {
+ document.body.style.overflow = "hidden";
+ document.body.style.width = "100%";
+ document.body.style.height = "100%";
+ document.documentElement.style.width = "100%";
+ document.documentElement.style.height = "100%";
+ cel.style.position = "absolute";
+ var pad = unpackPadding(sizing.padding);
+ cel.style.top = pad.top + "px";
+ cel.style.right = pad.right + "px";
+ cel.style.bottom = pad.bottom + "px";
+ cel.style.left = pad.left + "px";
+ el.style.width = "100%";
+ el.style.height = "100%";
+
+ return {
+ getWidth: function() { return cel.getBoundingClientRect().width; },
+ getHeight: function() { return cel.getBoundingClientRect().height; }
+ };
+
+ } else {
+ el.style.width = px(sizing.width);
+ el.style.height = px(sizing.height);
+
+ return {
+ getWidth: function() { return cel.getBoundingClientRect().width; },
+ getHeight: function() { return cel.getBoundingClientRect().height; }
+ };
+ }
+ }
+
+ // Default implementations for methods
+ var defaults = {
+ find: function(scope) {
+ return querySelectorAll(scope, "." + this.name);
+ },
+ renderError: function(el, err) {
+ var $el = $(el);
+
+ this.clearError(el);
+
+ // Add all these error classes, as Shiny does
+ var errClass = "shiny-output-error";
+ if (err.type !== null) {
+ // use the classes of the error condition as CSS class names
+ errClass = errClass + " " + $.map(asArray(err.type), function(type) {
+ return errClass + "-" + type;
+ }).join(" ");
+ }
+ errClass = errClass + " htmlwidgets-error";
+
+ // Is el inline or block? If inline or inline-block, just display:none it
+ // and add an inline error.
+ var display = $el.css("display");
+ $el.data("restore-display-mode", display);
+
+ if (display === "inline" || display === "inline-block") {
+ $el.hide();
+ if (err.message !== "") {
+ var errorSpan = $("<span>").addClass(errClass);
+ errorSpan.text(err.message);
+ $el.after(errorSpan);
+ }
+ } else if (display === "block") {
+ // If block, add an error just after the el, set visibility:none on the
+ // el, and position the error to be on top of the el.
+ // Mark it with a unique ID and CSS class so we can remove it later.
+ $el.css("visibility", "hidden");
+ if (err.message !== "") {
+ var errorDiv = $("<div>").addClass(errClass).css("position", "absolute")
+ .css("top", el.offsetTop)
+ .css("left", el.offsetLeft)
+ // setting width can push out the page size, forcing otherwise
+ // unnecessary scrollbars to appear and making it impossible for
+ // the element to shrink; so use max-width instead
+ .css("maxWidth", el.offsetWidth)
+ .css("height", el.offsetHeight);
+ errorDiv.text(err.message);
+ $el.after(errorDiv);
+
+ // Really dumb way to keep the size/position of the error in sync with
+ // the parent element as the window is resized or whatever.
+ var intId = setInterval(function() {
+ if (!errorDiv[0].parentElement) {
+ clearInterval(intId);
+ return;
+ }
+ errorDiv
+ .css("top", el.offsetTop)
+ .css("left", el.offsetLeft)
+ .css("maxWidth", el.offsetWidth)
+ .css("height", el.offsetHeight);
+ }, 500);
+ }
+ }
+ },
+ clearError: function(el) {
+ var $el = $(el);
+ var display = $el.data("restore-display-mode");
+ $el.data("restore-display-mode", null);
+
+ if (display === "inline" || display === "inline-block") {
+ if (display)
+ $el.css("display", display);
+ $(el.nextSibling).filter(".htmlwidgets-error").remove();
+ } else if (display === "block"){
+ $el.css("visibility", "inherit");
+ $(el.nextSibling).filter(".htmlwidgets-error").remove();
+ }
+ },
+ sizing: {}
+ };
+
+ // Called by widget bindings to register a new type of widget. The definition
+ // object can contain the following properties:
+ // - name (required) - A string indicating the binding name, which will be
+ // used by default as the CSS classname to look for.
+ // - initialize (optional) - A function(el) that will be called once per
+ // widget element; if a value is returned, it will be passed as the third
+ // value to renderValue.
+ // - renderValue (required) - A function(el, data, initValue) that will be
+ // called with data. Static contexts will cause this to be called once per
+ // element; Shiny apps will cause this to be called multiple times per
+ // element, as the data changes.
+ window.HTMLWidgets.widget = function(definition) {
+ if (!definition.name) {
+ throw new Error("Widget must have a name");
+ }
+ if (!definition.type) {
+ throw new Error("Widget must have a type");
+ }
+ // Currently we only support output widgets
+ if (definition.type !== "output") {
+ throw new Error("Unrecognized widget type '" + definition.type + "'");
+ }
+ // TODO: Verify that .name is a valid CSS classname
+
+ // Support new-style instance-bound definitions. Old-style class-bound
+ // definitions have one widget "object" per widget per type/class of
+ // widget; the renderValue and resize methods on such widget objects
+ // take el and instance arguments, because the widget object can't
+ // store them. New-style instance-bound definitions have one widget
+ // object per widget instance; the definition that's passed in doesn't
+ // provide renderValue or resize methods at all, just the single method
+ // factory(el, width, height)
+ // which returns an object that has renderValue(x) and resize(w, h).
+ // This enables a far more natural programming style for the widget
+ // author, who can store per-instance state using either OO-style
+ // instance fields or functional-style closure variables (I guess this
+ // is in contrast to what can only be called C-style pseudo-OO which is
+ // what we required before).
+ if (definition.factory) {
+ definition = createLegacyDefinitionAdapter(definition);
+ }
+
+ if (!definition.renderValue) {
+ throw new Error("Widget must have a renderValue function");
+ }
+
+ // For static rendering (non-Shiny), use a simple widget registration
+ // scheme. We also use this scheme for Shiny apps/documents that also
+ // contain static widgets.
+ window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || [];
+ // Merge defaults into the definition; don't mutate the original definition.
+ var staticBinding = extend({}, defaults, definition);
+ overrideMethod(staticBinding, "find", function(superfunc) {
+ return function(scope) {
+ var results = superfunc(scope);
+ // Filter out Shiny outputs, we only want the static kind
+ return filterByClass(results, "html-widget-output", false);
+ };
+ });
+ window.HTMLWidgets.widgets.push(staticBinding);
+
+ if (shinyMode) {
+ // Shiny is running. Register the definition with an output binding.
+ // The definition itself will not be the output binding, instead
+ // we will make an output binding object that delegates to the
+ // definition. This is because we foolishly used the same method
+ // name (renderValue) for htmlwidgets definition and Shiny bindings
+ // but they actually have quite different semantics (the Shiny
+ // bindings receive data that includes lots of metadata that it
+ // strips off before calling htmlwidgets renderValue). We can't
+ // just ignore the difference because in some widgets it's helpful
+ // to call this.renderValue() from inside of resize(), and if
+ // we're not delegating, then that call will go to the Shiny
+ // version instead of the htmlwidgets version.
+
+ // Merge defaults with definition, without mutating either.
+ var bindingDef = extend({}, defaults, definition);
+
+ // This object will be our actual Shiny binding.
+ var shinyBinding = new Shiny.OutputBinding();
+
+ // With a few exceptions, we'll want to simply use the bindingDef's
+ // version of methods if they are available, otherwise fall back to
+ // Shiny's defaults. NOTE: If Shiny's output bindings gain additional
+ // methods in the future, and we want them to be overrideable by
+ // HTMLWidget binding definitions, then we'll need to add them to this
+ // list.
+ delegateMethod(shinyBinding, bindingDef, "getId");
+ delegateMethod(shinyBinding, bindingDef, "onValueChange");
+ delegateMethod(shinyBinding, bindingDef, "onValueError");
+ delegateMethod(shinyBinding, bindingDef, "renderError");
+ delegateMethod(shinyBinding, bindingDef, "clearError");
+ delegateMethod(shinyBinding, bindingDef, "showProgress");
+
+ // The find, renderValue, and resize are handled differently, because we
+ // want to actually decorate the behavior of the bindingDef methods.
+
+ shinyBinding.find = function(scope) {
+ var results = bindingDef.find(scope);
+
+ // Only return elements that are Shiny outputs, not static ones
+ var dynamicResults = results.filter(".html-widget-output");
+
+ // It's possible that whatever caused Shiny to think there might be
+ // new dynamic outputs, also caused there to be new static outputs.
+ // Since there might be lots of different htmlwidgets bindings, we
+ // schedule execution for later--no need to staticRender multiple
+ // times.
+ if (results.length !== dynamicResults.length)
+ scheduleStaticRender();
+
+ return dynamicResults;
+ };
+
+ // Wrap renderValue to handle initialization, which unfortunately isn't
+ // supported natively by Shiny at the time of this writing.
+
+ shinyBinding.renderValue = function(el, data) {
+ Shiny.renderDependencies(data.deps);
+ // Resolve strings marked as javascript literals to objects
+ if (!(data.evals instanceof Array)) data.evals = [data.evals];
+ for (var i = 0; data.evals && i < data.evals.length; i++) {
+ window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]);
+ }
+ if (!bindingDef.renderOnNullValue) {
+ if (data.x === null) {
+ el.style.visibility = "hidden";
+ return;
+ } else {
+ el.style.visibility = "inherit";
+ }
+ }
+ if (!elementData(el, "initialized")) {
+ initSizing(el);
+
+ elementData(el, "initialized", true);
+ if (bindingDef.initialize) {
+ var rect = el.getBoundingClientRect();
+ var result = bindingDef.initialize(el, rect.width, rect.height);
+ elementData(el, "init_result", result);
+ }
+ }
+ bindingDef.renderValue(el, data.x, elementData(el, "init_result"));
+ evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]);
+ };
+
+ // Only override resize if bindingDef implements it
+ if (bindingDef.resize) {
+ shinyBinding.resize = function(el, width, height) {
+ // Shiny can call resize before initialize/renderValue have been
+ // called, which doesn't make sense for widgets.
+ if (elementData(el, "initialized")) {
+ bindingDef.resize(el, width, height, elementData(el, "init_result"));
+ }
+ };
+ }
+
+ Shiny.outputBindings.register(shinyBinding, bindingDef.name);
+ }
+ };
+
+ var scheduleStaticRenderTimerId = null;
+ function scheduleStaticRender() {
+ if (!scheduleStaticRenderTimerId) {
+ scheduleStaticRenderTimerId = setTimeout(function() {
+ scheduleStaticRenderTimerId = null;
+ window.HTMLWidgets.staticRender();
+ }, 1);
+ }
+ }
+
+ // Render static widgets after the document finishes loading
+ // Statically render all elements that are of this widget's class
+ window.HTMLWidgets.staticRender = function() {
+ var bindings = window.HTMLWidgets.widgets || [];
+ forEach(bindings, function(binding) {
+ var matches = binding.find(document.documentElement);
+ forEach(matches, function(el) {
+ var sizeObj = initSizing(el, binding);
+
+ var getSize = function(el) {
+ if (sizeObj) {
+ return {w: sizeObj.getWidth(), h: sizeObj.getHeight()}
+ } else {
+ var rect = el.getBoundingClientRect();
+ return {w: rect.width, h: rect.height}
+ }
+ };
+
+ if (hasClass(el, "html-widget-static-bound"))
+ return;
+ el.className = el.className + " html-widget-static-bound";
+
+ var initResult;
+ if (binding.initialize) {
+ var size = getSize(el);
+ initResult = binding.initialize(el, size.w, size.h);
+ elementData(el, "init_result", initResult);
+ }
+
+ if (binding.resize) {
+ var lastSize = getSize(el);
+ var resizeHandler = function(e) {
+ var size = getSize(el);
+ if (size.w === 0 && size.h === 0)
+ return;
+ if (size.w === lastSize.w && size.h === lastSize.h)
+ return;
+ lastSize = size;
+ binding.resize(el, size.w, size.h, initResult);
+ };
+
+ on(window, "resize", resizeHandler);
+
+ // This is needed for cases where we're running in a Shiny
+ // app, but the widget itself is not a Shiny output, but
+ // rather a simple static widget. One example of this is
+ // an rmarkdown document that has runtime:shiny and widget
+ // that isn't in a render function. Shiny only knows to
+ // call resize handlers for Shiny outputs, not for static
+ // widgets, so we do it ourselves.
+ if (window.jQuery) {
+ window.jQuery(document).on(
+ "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets",
+ resizeHandler
+ );
+ window.jQuery(document).on(
+ "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets",
+ resizeHandler
+ );
+ }
+
+ // This is needed for the specific case of ioslides, which
+ // flips slides between display:none and display:block.
+ // Ideally we would not have to have ioslide-specific code
+ // here, but rather have ioslides raise a generic event,
+ // but the rmarkdown package just went to CRAN so the
+ // window to getting that fixed may be long.
+ if (window.addEventListener) {
+ // It's OK to limit this to window.addEventListener
+ // browsers because ioslides itself only supports
+ // such browsers.
+ on(document, "slideenter", resizeHandler);
+ on(document, "slideleave", resizeHandler);
+ }
+ }
+
+ var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']");
+ if (scriptData) {
+ var data = JSON.parse(scriptData.textContent || scriptData.text);
+ // Resolve strings marked as javascript literals to objects
+ if (!(data.evals instanceof Array)) data.evals = [data.evals];
+ for (var k = 0; data.evals && k < data.evals.length; k++) {
+ window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]);
+ }
+ binding.renderValue(el, data.x, initResult);
+ evalAndRun(data.jsHooks.render, initResult, [el, data.x]);
+ }
+ });
+ });
+
+ invokePostRenderHandlers();
+ }
+
+
+ function has_jQuery3() {
+ if (!window.jQuery) {
+ return false;
+ }
+ var $version = window.jQuery.fn.jquery;
+ var $major_version = parseInt($version.split(".")[0]);
+ return $major_version >= 3;
+ }
+
+ /*
+ / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's
+ / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now
+ / really means $(setTimeout(fn)).
+ / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous
+ /
+ / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny
+ / one tick later than it did before, which means staticRender() is
+ / called renderValue() earlier than (advanced) widget authors might be expecting.
+ / https://github.com/rstudio/shiny/issues/2630
+ /
+ / For a concrete example, leaflet has some methods (e.g., updateBounds)
+ / which reference Shiny methods registered in initShiny (e.g., setInputValue).
+ / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to
+ / delay execution of those methods (until Shiny methods are ready)
+ / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268
+ /
+ / Ideally widget authors wouldn't need to use this setTimeout() hack that
+ / leaflet uses to call Shiny methods on a staticRender(). In the long run,
+ / the logic initShiny should be broken up so that method registration happens
+ / right away, but binding happens later.
+ */
+ function maybeStaticRenderLater() {
+ if (shinyMode && has_jQuery3()) {
+ window.jQuery(window.HTMLWidgets.staticRender);
+ } else {
+ window.HTMLWidgets.staticRender();
+ }
+ }
+
+ if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", function() {
+ document.removeEventListener("DOMContentLoaded", arguments.callee, false);
+ maybeStaticRenderLater();
+ }, false);
+ } else if (document.attachEvent) {
+ document.attachEvent("onreadystatechange", function() {
+ if (document.readyState === "complete") {
+ document.detachEvent("onreadystatechange", arguments.callee);
+ maybeStaticRenderLater();
+ }
+ });
+ }
+
+
+ window.HTMLWidgets.getAttachmentUrl = function(depname, key) {
+ // If no key, default to the first item
+ if (typeof(key) === "undefined")
+ key = 1;
+
+ var link = document.getElementById(depname + "-" + key + "-attachment");
+ if (!link) {
+ throw new Error("Attachment " + depname + "/" + key + " not found in document");
+ }
+ return link.getAttribute("href");
+ };
+
+ window.HTMLWidgets.dataframeToD3 = function(df) {
+ var names = [];
+ var length;
+ for (var name in df) {
+ if (df.hasOwnProperty(name))
+ names.push(name);
+ if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") {
+ throw new Error("All fields must be arrays");
+ } else if (typeof(length) !== "undefined" && length !== df[name].length) {
+ throw new Error("All fields must be arrays of the same length");
+ }
+ length = df[name].length;
+ }
+ var results = [];
+ var item;
+ for (var row = 0; row < length; row++) {
+ item = {};
+ for (var col = 0; col < names.length; col++) {
+ item[names[col]] = df[names[col]][row];
+ }
+ results.push(item);
+ }
+ return results;
+ };
+
+ window.HTMLWidgets.transposeArray2D = function(array) {
+ if (array.length === 0) return array;
+ var newArray = array[0].map(function(col, i) {
+ return array.map(function(row) {
+ return row[i]
+ })
+ });
+ return newArray;
+ };
+ // Split value at splitChar, but allow splitChar to be escaped
+ // using escapeChar. Any other characters escaped by escapeChar
+ // will be included as usual (including escapeChar itself).
+ function splitWithEscape(value, splitChar, escapeChar) {
+ var results = [];
+ var escapeMode = false;
+ var currentResult = "";
+ for (var pos = 0; pos < value.length; pos++) {
+ if (!escapeMode) {
+ if (value[pos] === splitChar) {
+ results.push(currentResult);
+ currentResult = "";
+ } else if (value[pos] === escapeChar) {
+ escapeMode = true;
+ } else {
+ currentResult += value[pos];
+ }
+ } else {
+ currentResult += value[pos];
+ escapeMode = false;
+ }
+ }
+ if (currentResult !== "") {
+ results.push(currentResult);
+ }
+ return results;
+ }
+ // Function authored by Yihui/JJ Allaire
+ window.HTMLWidgets.evaluateStringMember = function(o, member) {
+ var parts = splitWithEscape(member, '.', '\\');
+ for (var i = 0, l = parts.length; i < l; i++) {
+ var part = parts[i];
+ // part may be a character or 'numeric' member name
+ if (o !== null && typeof o === "object" && part in o) {
+ if (i == (l - 1)) { // if we are at the end of the line then evalulate
+ if (typeof o[part] === "string")
+ o[part] = tryEval(o[part]);
+ } else { // otherwise continue to next embedded object
+ o = o[part];
+ }
+ }
+ }
+ };
+
+ // Retrieve the HTMLWidget instance (i.e. the return value of an
+ // HTMLWidget binding's initialize() or factory() function)
+ // associated with an element, or null if none.
+ window.HTMLWidgets.getInstance = function(el) {
+ return elementData(el, "init_result");
+ };
+
+ // Finds the first element in the scope that matches the selector,
+ // and returns the HTMLWidget instance (i.e. the return value of
+ // an HTMLWidget binding's initialize() or factory() function)
+ // associated with that element, if any. If no element matches the
+ // selector, or the first matching element has no HTMLWidget
+ // instance associated with it, then null is returned.
+ //
+ // The scope argument is optional, and defaults to window.document.
+ window.HTMLWidgets.find = function(scope, selector) {
+ if (arguments.length == 1) {
+ selector = scope;
+ scope = document;
+ }
+
+ var el = scope.querySelector(selector);
+ if (el === null) {
+ return null;
+ } else {
+ return window.HTMLWidgets.getInstance(el);
+ }
+ };
+
+ // Finds all elements in the scope that match the selector, and
+ // returns the HTMLWidget instances (i.e. the return values of
+ // an HTMLWidget binding's initialize() or factory() function)
+ // associated with the elements, in an array. If elements that
+ // match the selector don't have an associated HTMLWidget
+ // instance, the returned array will contain nulls.
+ //
+ // The scope argument is optional, and defaults to window.document.
+ window.HTMLWidgets.findAll = function(scope, selector) {
+ if (arguments.length == 1) {
+ selector = scope;
+ scope = document;
+ }
+
+ var nodes = scope.querySelectorAll(selector);
+ var results = [];
+ for (var i = 0; i < nodes.length; i++) {
+ results.push(window.HTMLWidgets.getInstance(nodes[i]));
+ }
+ return results;
+ };
+
+ var postRenderHandlers = [];
+ function invokePostRenderHandlers() {
+ while (postRenderHandlers.length) {
+ var handler = postRenderHandlers.shift();
+ if (handler) {
+ handler();
+ }
+ }
+ }
+
+ // Register the given callback function to be invoked after the
+ // next time static widgets are rendered.
+ window.HTMLWidgets.addPostRenderHandler = function(callback) {
+ postRenderHandlers.push(callback);
+ };
+
+ // Takes a new-style instance-bound definition, and returns an
+ // old-style class-bound definition. This saves us from having
+ // to rewrite all the logic in this file to accomodate both
+ // types of definitions.
+ function createLegacyDefinitionAdapter(defn) {
+ var result = {
+ name: defn.name,
+ type: defn.type,
+ initialize: function(el, width, height) {
+ return defn.factory(el, width, height);
+ },
+ renderValue: function(el, x, instance) {
+ return instance.renderValue(x);
+ },
+ resize: function(el, width, height, instance) {
+ return instance.resize(width, height);
+ }
+ };
+
+ if (defn.find)
+ result.find = defn.find;
+ if (defn.renderError)
+ result.renderError = defn.renderError;
+ if (defn.clearError)
+ result.clearError = defn.clearError;
+
+ return result;
+ }
+})();
diff --git a/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.js b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.js
new file mode 100644
index 00000000..fc6c299b
--- /dev/null
+++ b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.js
@@ -0,0 +1,10881 @@
+/*!
+ * jQuery JavaScript Library v3.6.0
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright OpenJS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2021-03-02T17:08Z
+ */
+( function( global, factory ) {
+
+ "use strict";
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+ return arr.flat.call( array );
+} : function( array ) {
+ return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+ // Support: Chrome <=57, Firefox <=52
+ // In some browsers, typeof returns "function" for HTML <object> elements
+ // (i.e., `typeof document.createElement( "object" ) === "function"`).
+ // We don't want to classify *any* DOM node as a function.
+ // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
+ // Plus for old WebKit, typeof returns "function" for HTML collections
+ // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
+ return typeof obj === "function" && typeof obj.nodeType !== "number" &&
+ typeof obj.item !== "function";
+ };
+
+
+var isWindow = function isWindow( obj ) {
+ return obj != null && obj === obj.window;
+ };
+
+
+var document = window.document;
+
+
+
+ var preservedScriptAttributes = {
+ type: true,
+ src: true,
+ nonce: true,
+ noModule: true
+ };
+
+ function DOMEval( code, node, doc ) {
+ doc = doc || document;
+
+ var i, val,
+ script = doc.createElement( "script" );
+
+ script.text = code;
+ if ( node ) {
+ for ( i in preservedScriptAttributes ) {
+
+ // Support: Firefox 64+, Edge 18+
+ // Some browsers don't support the "nonce" property on scripts.
+ // On the other hand, just using `getAttribute` is not enough as
+ // the `nonce` attribute is reset to an empty string whenever it
+ // becomes browsing-context connected.
+ // See https://github.com/whatwg/html/issues/2369
+ // See https://html.spec.whatwg.org/#nonce-attributes
+ // The `node.getAttribute` check was added for the sake of
+ // `jQuery.globalEval` so that it can fake a nonce-containing node
+ // via an object.
+ val = node[ i ] || node.getAttribute && node.getAttribute( i );
+ if ( val ) {
+ script.setAttribute( i, val );
+ }
+ }
+ }
+ doc.head.appendChild( script ).parentNode.removeChild( script );
+ }
+
+
+function toType( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+
+ // Support: Android <=2.3 only (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call( obj ) ] || "object" :
+ typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+ version = "3.6.0",
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init( selector, context );
+ };
+
+jQuery.fn = jQuery.prototype = {
+
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function() {
+ return slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+
+ // Return all the elements in a clean array
+ if ( num == null ) {
+ return slice.call( this );
+ }
+
+ // Return just the one element from the set
+ return num < 0 ? this[ num + this.length ] : this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ each: function( callback ) {
+ return jQuery.each( this, callback );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map( this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ } ) );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ even: function() {
+ return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+ return ( i + 1 ) % 2;
+ } ) );
+ },
+
+ odd: function() {
+ return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+ return i % 2;
+ } ) );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor();
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[ 0 ] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // Skip the boolean and the target
+ target = arguments[ i ] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !isFunction( target ) ) {
+ target = {};
+ }
+
+ // Extend jQuery itself if only one argument is passed
+ if ( i === length ) {
+ target = this;
+ i--;
+ }
+
+ for ( ; i < length; i++ ) {
+
+ // Only deal with non-null/undefined values
+ if ( ( options = arguments[ i ] ) != null ) {
+
+ // Extend the base object
+ for ( name in options ) {
+ copy = options[ name ];
+
+ // Prevent Object.prototype pollution
+ // Prevent never-ending loop
+ if ( name === "__proto__" || target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+ ( copyIsArray = Array.isArray( copy ) ) ) ) {
+ src = target[ name ];
+
+ // Ensure proper type for the source value
+ if ( copyIsArray && !Array.isArray( src ) ) {
+ clone = [];
+ } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+ clone = {};
+ } else {
+ clone = src;
+ }
+ copyIsArray = false;
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend( {
+
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ noop: function() {},
+
+ isPlainObject: function( obj ) {
+ var proto, Ctor;
+
+ // Detect obvious negatives
+ // Use toString instead of jQuery.type to catch host objects
+ if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+ return false;
+ }
+
+ proto = getProto( obj );
+
+ // Objects with no prototype (e.g., `Object.create( null )`) are plain
+ if ( !proto ) {
+ return true;
+ }
+
+ // Objects with prototype are plain iff they were constructed by a global Object function
+ Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+ return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ // Evaluates a script in a provided context; falls back to the global one
+ // if not specified.
+ globalEval: function( code, options, doc ) {
+ DOMEval( code, { nonce: options && options.nonce }, doc );
+ },
+
+ each: function( obj, callback ) {
+ var length, i = 0;
+
+ if ( isArrayLike( obj ) ) {
+ length = obj.length;
+ for ( ; i < length; i++ ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArrayLike( Object( arr ) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, invert ) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ callbackInverse = !callback( elems[ i ], i );
+ if ( callbackInverse !== callbackExpect ) {
+ matches.push( elems[ i ] );
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var length, value,
+ i = 0,
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if ( isArrayLike( elems ) ) {
+ length = elems.length;
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return flat( ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+ jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+ function( _i, name ) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+ } );
+
+function isArrayLike( obj ) {
+
+ // Support: real iOS 8.2 only (not reproducible in simulator)
+ // `in` check used to prevent JIT error (gh-2145)
+ // hasOwn isn't used here due to false negatives
+ // regarding Nodelist length in IE
+ var length = !!obj && "length" in obj && obj.length,
+ type = toType( obj );
+
+ if ( isFunction( obj ) || isWindow( obj ) ) {
+ return false;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.6
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2021-02-16
+ */
+( function( window ) {
+var i,
+ support,
+ Expr,
+ getText,
+ isXML,
+ tokenize,
+ compile,
+ select,
+ outermostContext,
+ sortInput,
+ hasDuplicate,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + 1 * new Date(),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ nonnativeSelectorCache = createCache(),
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // Instance methods
+ hasOwn = ( {} ).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ pushNative = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+
+ // Use a stripped-down indexOf as it's faster than native
+ // https://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function( list, elem ) {
+ var i = 0,
+ len = list.length;
+ for ( ; i < len; i++ ) {
+ if ( list[ i ] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
+ "ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+
+ // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
+ identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
+ "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+
+ // "Attribute values must be CSS identifiers [capture 5]
+ // or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
+ whitespace + "*\\]",
+
+ pseudos = ":(" + identifier + ")(?:\\((" +
+
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+ // 1. quoted (capture 3; capture 4 or capture 5)
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+
+ // 2. simple (capture 6)
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+
+ // 3. anything else (capture 2)
+ ".*" +
+ ")\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp( whitespace + "+", "g" ),
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
+ whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
+ "*" ),
+ rdescend = new RegExp( whitespace + "|>" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + identifier + ")" ),
+ "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+ "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
+ whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
+ whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace +
+ "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+ "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rhtml = /HTML$/i,
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+
+ // CSS escapes
+ // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
+ funescape = function( escape, nonHex ) {
+ var high = "0x" + escape.slice( 1 ) - 0x10000;
+
+ return nonHex ?
+
+ // Strip the backslash prefix from a non-hex escape sequence
+ nonHex :
+
+ // Replace a hexadecimal escape sequence with the encoded Unicode code point
+ // Support: IE <=11+
+ // For values outside the Basic Multilingual Plane (BMP), manually construct a
+ // surrogate pair
+ high < 0 ?
+ String.fromCharCode( high + 0x10000 ) :
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ },
+
+ // CSS string/identifier serialization
+ // https://drafts.csswg.org/cssom/#common-serializing-idioms
+ rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+ fcssescape = function( ch, asCodePoint ) {
+ if ( asCodePoint ) {
+
+ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+ if ( ch === "\0" ) {
+ return "\uFFFD";
+ }
+
+ // Control characters and (dependent upon position) numbers get escaped as code points
+ return ch.slice( 0, -1 ) + "\\" +
+ ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+ }
+
+ // Other potentially-special ASCII characters get backslash-escaped
+ return "\\" + ch;
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function() {
+ setDocument();
+ },
+
+ inDisabledFieldset = addCombinator(
+ function( elem ) {
+ return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+ },
+ { dir: "parentNode", next: "legend" }
+ );
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ ( arr = slice.call( preferredDoc.childNodes ) ),
+ preferredDoc.childNodes
+ );
+
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ // eslint-disable-next-line no-unused-expressions
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ pushNative.apply( target, slice.call( els ) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+
+ // Can't trust NodeList.length
+ while ( ( target[ j++ ] = els[ i++ ] ) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var m, i, elem, nid, match, groups, newSelector,
+ newContext = context && context.ownerDocument,
+
+ // nodeType defaults to 9, since context defaults to document
+ nodeType = context ? context.nodeType : 9;
+
+ results = results || [];
+
+ // Return early from calls with invalid selector or context
+ if ( typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+ return results;
+ }
+
+ // Try to shortcut find operations (as opposed to filters) in HTML documents
+ if ( !seed ) {
+ setDocument( context );
+ context = context || document;
+
+ if ( documentIsHTML ) {
+
+ // If the selector is sufficiently simple, try using a "get*By*" DOM method
+ // (excepting DocumentFragment context, where the methods don't exist)
+ if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
+
+ // ID selector
+ if ( ( m = match[ 1 ] ) ) {
+
+ // Document context
+ if ( nodeType === 9 ) {
+ if ( ( elem = context.getElementById( m ) ) ) {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+
+ // Element context
+ } else {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( newContext && ( elem = newContext.getElementById( m ) ) &&
+ contains( context, elem ) &&
+ elem.id === m ) {
+
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Type selector
+ } else if ( match[ 2 ] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Class selector
+ } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
+ context.getElementsByClassName ) {
+
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // Take advantage of querySelectorAll
+ if ( support.qsa &&
+ !nonnativeSelectorCache[ selector + " " ] &&
+ ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
+
+ // Support: IE 8 only
+ // Exclude object elements
+ ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
+
+ newSelector = selector;
+ newContext = context;
+
+ // qSA considers elements outside a scoping root when evaluating child or
+ // descendant combinators, which is not what we want.
+ // In such cases, we work around the behavior by prefixing every selector in the
+ // list with an ID selector referencing the scope context.
+ // The technique has to be used as well when a leading combinator is used
+ // as such selectors are not recognized by querySelectorAll.
+ // Thanks to Andrew Dupont for this technique.
+ if ( nodeType === 1 &&
+ ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
+
+ // Expand context for sibling selectors
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+ context;
+
+ // We can use :scope instead of the ID hack if the browser
+ // supports it & if we're not changing the context.
+ if ( newContext !== context || !support.scope ) {
+
+ // Capture the context ID, setting it first if necessary
+ if ( ( nid = context.getAttribute( "id" ) ) ) {
+ nid = nid.replace( rcssescape, fcssescape );
+ } else {
+ context.setAttribute( "id", ( nid = expando ) );
+ }
+ }
+
+ // Prefix every selector in the list
+ groups = tokenize( selector );
+ i = groups.length;
+ while ( i-- ) {
+ groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
+ toSelector( groups[ i ] );
+ }
+ newSelector = groups.join( "," );
+ }
+
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch ( qsaError ) {
+ nonnativeSelectorCache( selector, true );
+ } finally {
+ if ( nid === expando ) {
+ context.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+function createCache() {
+ var keys = [];
+
+ function cache( key, value ) {
+
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if ( keys.push( key + " " ) > Expr.cacheLength ) {
+
+ // Only keep the most recent entries
+ delete cache[ keys.shift() ];
+ }
+ return ( cache[ key + " " ] = value );
+ }
+ return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+ fn[ expando ] = true;
+ return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+ var el = document.createElement( "fieldset" );
+
+ try {
+ return !!fn( el );
+ } catch ( e ) {
+ return false;
+ } finally {
+
+ // Remove from its parent by default
+ if ( el.parentNode ) {
+ el.parentNode.removeChild( el );
+ }
+
+ // release memory in IE
+ el = null;
+ }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+ var arr = attrs.split( "|" ),
+ i = arr.length;
+
+ while ( i-- ) {
+ Expr.attrHandle[ arr[ i ] ] = handler;
+ }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ a.sourceIndex - b.sourceIndex;
+
+ // Use IE sourceIndex if available on both nodes
+ if ( diff ) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if ( cur ) {
+ while ( ( cur = cur.nextSibling ) ) {
+ if ( cur === b ) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return ( name === "input" || name === "button" ) && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+ // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+ return function( elem ) {
+
+ // Only certain elements can match :enabled or :disabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+ if ( "form" in elem ) {
+
+ // Check for inherited disabledness on relevant non-disabled elements:
+ // * listed form-associated elements in a disabled fieldset
+ // https://html.spec.whatwg.org/multipage/forms.html#category-listed
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+ // * option elements in a disabled optgroup
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+ // All such elements have a "form" property.
+ if ( elem.parentNode && elem.disabled === false ) {
+
+ // Option elements defer to a parent optgroup if present
+ if ( "label" in elem ) {
+ if ( "label" in elem.parentNode ) {
+ return elem.parentNode.disabled === disabled;
+ } else {
+ return elem.disabled === disabled;
+ }
+ }
+
+ // Support: IE 6 - 11
+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+ return elem.isDisabled === disabled ||
+
+ // Where there is no isDisabled, check manually
+ /* jshint -W018 */
+ elem.isDisabled !== !disabled &&
+ inDisabledFieldset( elem ) === disabled;
+ }
+
+ return elem.disabled === disabled;
+
+ // Try to winnow out elements that can't be disabled before trusting the disabled property.
+ // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+ // even exist on them, let alone have a boolean value.
+ } else if ( "label" in elem ) {
+ return elem.disabled === disabled;
+ }
+
+ // Remaining elements are neither :enabled nor :disabled
+ return false;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+ return markFunction( function( argument ) {
+ argument = +argument;
+ return markFunction( function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
+ seed[ j ] = !( matches[ j ] = seed[ j ] );
+ }
+ }
+ } );
+ } );
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ var namespace = elem && elem.namespaceURI,
+ docElem = elem && ( elem.ownerDocument || elem ).documentElement;
+
+ // Support: IE <=8
+ // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+ // https://bugs.jquery.com/ticket/4833
+ return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var hasCompare, subWindow,
+ doc = node ? node.ownerDocument || node : preferredDoc;
+
+ // Return early if doc is invalid or already selected
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Update global variables
+ document = doc;
+ docElem = document.documentElement;
+ documentIsHTML = !isXML( document );
+
+ // Support: IE 9 - 11+, Edge 12 - 18+
+ // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( preferredDoc != document &&
+ ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
+
+ // Support: IE 11, Edge
+ if ( subWindow.addEventListener ) {
+ subWindow.addEventListener( "unload", unloadHandler, false );
+
+ // Support: IE 9 - 10 only
+ } else if ( subWindow.attachEvent ) {
+ subWindow.attachEvent( "onunload", unloadHandler );
+ }
+ }
+
+ // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
+ // Safari 4 - 5 only, Opera <=11.6 - 12.x only
+ // IE/Edge & older browsers don't support the :scope pseudo-class.
+ // Support: Safari 6.0 only
+ // Safari 6.0 supports :scope but it's an alias of :root there.
+ support.scope = assert( function( el ) {
+ docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
+ return typeof el.querySelectorAll !== "undefined" &&
+ !el.querySelectorAll( ":scope fieldset div" ).length;
+ } );
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
+ support.attributes = assert( function( el ) {
+ el.className = "i";
+ return !el.getAttribute( "className" );
+ } );
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert( function( el ) {
+ el.appendChild( document.createComment( "" ) );
+ return !el.getElementsByTagName( "*" ).length;
+ } );
+
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programmatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert( function( el ) {
+ docElem.appendChild( el ).id = expando;
+ return !document.getElementsByName || !document.getElementsByName( expando ).length;
+ } );
+
+ // ID filter and find
+ if ( support.getById ) {
+ Expr.filter[ "ID" ] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute( "id" ) === attrId;
+ };
+ };
+ Expr.find[ "ID" ] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var elem = context.getElementById( id );
+ return elem ? [ elem ] : [];
+ }
+ };
+ } else {
+ Expr.filter[ "ID" ] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== "undefined" &&
+ elem.getAttributeNode( "id" );
+ return node && node.value === attrId;
+ };
+ };
+
+ // Support: IE 6 - 7 only
+ // getElementById is not reliable as a find shortcut
+ Expr.find[ "ID" ] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var node, i, elems,
+ elem = context.getElementById( id );
+
+ if ( elem ) {
+
+ // Verify the id attribute
+ node = elem.getAttributeNode( "id" );
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+
+ // Fall back on getElementsByName
+ elems = context.getElementsByName( id );
+ i = 0;
+ while ( ( elem = elems[ i++ ] ) ) {
+ node = elem.getAttributeNode( "id" );
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+ }
+ }
+
+ return [];
+ }
+ };
+ }
+
+ // Tag
+ Expr.find[ "TAG" ] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( tag );
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if ( support.qsa ) {
+ return context.querySelectorAll( tag );
+ }
+ } :
+
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+ results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ while ( ( elem = results[ i++ ] ) ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+ return context.getElementsByClassName( className );
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See https://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
+
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert( function( el ) {
+
+ var input;
+
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // https://bugs.jquery.com/ticket/12359
+ docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+ "<select id='" + expando + "-\r\\' msallowcapture=''>" +
+ "<option selected=''></option></select>";
+
+ // Support: IE8, Opera 11-12.16
+ // Nothing should be selected when empty strings follow ^= or $= or *=
+ // The test attribute must be unknown in Opera but "safe" for WinRT
+ // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !el.querySelectorAll( "[selected]" ).length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+ rbuggyQSA.push( "~=" );
+ }
+
+ // Support: IE 11+, Edge 15 - 18+
+ // IE 11/Edge don't find elements on a `[name='']` query in some cases.
+ // Adding a temporary attribute to the document before the selection works
+ // around the issue.
+ // Interestingly, IE 10 & older don't seem to have the issue.
+ input = document.createElement( "input" );
+ input.setAttribute( "name", "" );
+ el.appendChild( input );
+ if ( !el.querySelectorAll( "[name='']" ).length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
+ whitespace + "*(?:''|\"\")" );
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if ( !el.querySelectorAll( ":checked" ).length ) {
+ rbuggyQSA.push( ":checked" );
+ }
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibling-combinator selector` fails
+ if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+ rbuggyQSA.push( ".#.+[+~]" );
+ }
+
+ // Support: Firefox <=3.6 - 5 only
+ // Old Firefox doesn't throw on a badly-escaped identifier.
+ el.querySelectorAll( "\\\f" );
+ rbuggyQSA.push( "[\\r\\n\\f]" );
+ } );
+
+ assert( function( el ) {
+ el.innerHTML = "<a href='' disabled='disabled'></a>" +
+ "<select disabled='disabled'><option/></select>";
+
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = document.createElement( "input" );
+ input.setAttribute( "type", "hidden" );
+ el.appendChild( input ).setAttribute( "name", "D" );
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if ( el.querySelectorAll( "[name=d]" ).length ) {
+ rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Support: IE9-11+
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
+ docElem.appendChild( el ).disabled = true;
+ if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Support: Opera 10 - 11 only
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ el.querySelectorAll( "*,:x" );
+ rbuggyQSA.push( ",.*:" );
+ } );
+ }
+
+ if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector ) ) ) ) {
+
+ assert( function( el ) {
+
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( el, "*" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( el, "[s!='']:x" );
+ rbuggyMatches.push( "!=", pseudos );
+ } );
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+ hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+ // Element contains another
+ // Purposefully self-exclusive
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test( docElem.contains ) ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ) );
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( ( b = b.parentNode ) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if ( compare ) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition( b ) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if ( compare & 1 ||
+ ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
+
+ // Choose the first element that is related to our preferred document
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( a == document || a.ownerDocument == preferredDoc &&
+ contains( preferredDoc, a ) ) {
+ return -1;
+ }
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( b == document || b.ownerDocument == preferredDoc &&
+ contains( preferredDoc, b ) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function( a, b ) {
+
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Parentless nodes are either documents or disconnected
+ if ( !aup || !bup ) {
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ /* eslint-disable eqeqeq */
+ return a == document ? -1 :
+ b == document ? 1 :
+ /* eslint-enable eqeqeq */
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( ( cur = cur.parentNode ) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( ( cur = cur.parentNode ) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[ i ] === bp[ i ] ) {
+ i++;
+ }
+
+ return i ?
+
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[ i ], bp[ i ] ) :
+
+ // Otherwise nodes in our document sort first
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ /* eslint-disable eqeqeq */
+ ap[ i ] == preferredDoc ? -1 :
+ bp[ i ] == preferredDoc ? 1 :
+ /* eslint-enable eqeqeq */
+ 0;
+ };
+
+ return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ setDocument( elem );
+
+ if ( support.matchesSelector && documentIsHTML &&
+ !nonnativeSelectorCache[ expr + " " ] &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch ( e ) {
+ nonnativeSelectorCache( expr, true );
+ }
+ }
+
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+
+ // Set document vars if needed
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( ( context.ownerDocument || context ) != document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+
+ // Set document vars if needed
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( ( elem.ownerDocument || elem ) != document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ ( val = elem.getAttributeNode( name ) ) && val.specified ?
+ val.value :
+ null;
+};
+
+Sizzle.escape = function( sel ) {
+ return ( sel + "" ).replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice( 0 );
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ while ( ( elem = results[ i++ ] ) ) {
+ if ( elem === results[ i ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ // Clear input after sorting to release objects
+ // See https://github.com/jquery/sizzle/pull/225
+ sortInput = null;
+
+ return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( !nodeType ) {
+
+ // If no nodeType, this is expected to be an array
+ while ( ( node = elem[ i++ ] ) ) {
+
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (jQuery #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[ 1 ] = match[ 1 ].replace( runescape, funescape );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
+ match[ 5 ] || "" ).replace( runescape, funescape );
+
+ if ( match[ 2 ] === "~=" ) {
+ match[ 3 ] = " " + match[ 3 ] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[ 1 ] = match[ 1 ].toLowerCase();
+
+ if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
+
+ // nth-* requires argument
+ if ( !match[ 3 ] ) {
+ Sizzle.error( match[ 0 ] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[ 4 ] = +( match[ 4 ] ?
+ match[ 5 ] + ( match[ 6 ] || 1 ) :
+ 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
+ match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[ 3 ] ) {
+ Sizzle.error( match[ 0 ] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var excess,
+ unquoted = !match[ 6 ] && match[ 2 ];
+
+ if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if ( match[ 3 ] ) {
+ match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
+
+ // Strip excess characters from unquoted arguments
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
+
+ // Get excess from tokenize (recursively)
+ ( excess = tokenize( unquoted, true ) ) &&
+
+ // advance to the next closing parenthesis
+ ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
+
+ // excess is a negative index
+ match[ 0 ] = match[ 0 ].slice( 0, excess );
+ match[ 2 ] = unquoted.slice( 0, excess );
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+
+ "TAG": function( nodeNameSelector ) {
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function() {
+ return true;
+ } :
+ function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ className + " " ];
+
+ return pattern ||
+ ( pattern = new RegExp( "(^|" + whitespace +
+ ")" + className + "(" + whitespace + "|$)" ) ) && classCache(
+ className, function( elem ) {
+ return pattern.test(
+ typeof elem.className === "string" && elem.className ||
+ typeof elem.getAttribute !== "undefined" &&
+ elem.getAttribute( "class" ) ||
+ ""
+ );
+ } );
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ /* eslint-disable max-len */
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ /* eslint-enable max-len */
+
+ };
+ },
+
+ "CHILD": function( type, what, _argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, _context, xml ) {
+ var cache, uniqueCache, outerCache, node, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType,
+ diff = false;
+
+ if ( parent ) {
+
+ // :(first|last|only)-(child|of-type)
+ if ( simple ) {
+ while ( dir ) {
+ node = elem;
+ while ( ( node = node[ dir ] ) ) {
+ if ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) {
+
+ return false;
+ }
+ }
+
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [ forward ? parent.firstChild : parent.lastChild ];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if ( forward && useCache ) {
+
+ // Seek `elem` from a previously-cached index
+
+ // ...in a gzip-friendly way
+ node = parent;
+ outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ ( outerCache[ node.uniqueID ] = {} );
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex && cache[ 2 ];
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+ while ( ( node = ++nodeIndex && node && node[ dir ] ||
+
+ // Fallback to seeking `elem` from the start
+ ( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+ // When found, cache indexes on `parent` and break
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
+ uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ } else {
+
+ // Use previously-cached element index if available
+ if ( useCache ) {
+
+ // ...in a gzip-friendly way
+ node = elem;
+ outerCache = node[ expando ] || ( node[ expando ] = {} );
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ ( outerCache[ node.uniqueID ] = {} );
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex;
+ }
+
+ // xml :nth-child(...)
+ // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ if ( diff === false ) {
+
+ // Use the same loop as above to seek `elem` from the start
+ while ( ( node = ++nodeIndex && node && node[ dir ] ||
+ ( diff = nodeIndex = 0 ) || start.pop() ) ) {
+
+ if ( ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) &&
+ ++diff ) {
+
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ outerCache = node[ expando ] ||
+ ( node[ expando ] = {} );
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ ( outerCache[ node.uniqueID ] = {} );
+
+ uniqueCache[ type ] = [ dirruns, diff ];
+ }
+
+ if ( node === elem ) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction( function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf( seed, matched[ i ] );
+ seed[ idx ] = !( matches[ idx ] = matched[ i ] );
+ }
+ } ) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+
+ // Potentially complex pseudos
+ "not": markFunction( function( selector ) {
+
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction( function( seed, matches, _context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( ( elem = unmatched[ i ] ) ) {
+ seed[ i ] = !( matches[ i ] = elem );
+ }
+ }
+ } ) :
+ function( elem, _context, xml ) {
+ input[ 0 ] = elem;
+ matcher( input, null, xml, results );
+
+ // Don't keep the element (issue #299)
+ input[ 0 ] = null;
+ return !results.pop();
+ };
+ } ),
+
+ "has": markFunction( function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ } ),
+
+ "contains": markFunction( function( text ) {
+ text = text.replace( runescape, funescape );
+ return function( elem ) {
+ return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
+ };
+ } ),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+
+ // lang value must be a valid identifier
+ if ( !ridentifier.test( lang || "" ) ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( ( elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
+ return false;
+ };
+ } ),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement &&
+ ( !document.hasFocus || document.hasFocus() ) &&
+ !!( elem.type || elem.href || ~elem.tabIndex );
+ },
+
+ // Boolean properties
+ "enabled": createDisabledPseudo( false ),
+ "disabled": createDisabledPseudo( true ),
+
+ "checked": function( elem ) {
+
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return ( nodeName === "input" && !!elem.checked ) ||
+ ( nodeName === "option" && !!elem.selected );
+ },
+
+ "selected": function( elem ) {
+
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ // eslint-disable-next-line no-unused-expressions
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeType < 6 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos[ "empty" ]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( ( attr = elem.getAttribute( "type" ) ) == null ||
+ attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo( function() {
+ return [ 0 ];
+ } ),
+
+ "last": createPositionalPseudo( function( _matchIndexes, length ) {
+ return [ length - 1 ];
+ } ),
+
+ "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ } ),
+
+ "even": createPositionalPseudo( function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ } ),
+
+ "odd": createPositionalPseudo( function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ } ),
+
+ "lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+ var i = argument < 0 ?
+ argument + length :
+ argument > length ?
+ length :
+ argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ } ),
+
+ "gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ } )
+ }
+};
+
+Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
+ if ( match ) {
+
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[ 0 ].length ) || soFar;
+ }
+ groups.push( ( tokens = [] ) );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( ( match = rcombinators.exec( soFar ) ) ) {
+ matched = match.shift();
+ tokens.push( {
+ value: matched,
+
+ // Cast descendant combinators to space
+ type: match[ 0 ].replace( rtrim, " " )
+ } );
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
+ ( match = preFilters[ type ]( match ) ) ) ) {
+ matched = match.shift();
+ tokens.push( {
+ value: matched,
+ type: type,
+ matches: match
+ } );
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[ i ].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ skip = combinator.next,
+ key = skip || dir,
+ checkNonElements = base && key === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( ( elem = elem[ dir ] ) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ return false;
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var oldCache, uniqueCache, outerCache,
+ newCache = [ dirruns, doneName ];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+ if ( xml ) {
+ while ( ( elem = elem[ dir ] ) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ if ( matcher( elem, context, xml ) ) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ( ( elem = elem[ dir ] ) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ outerCache = elem[ expando ] || ( elem[ expando ] = {} );
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ elem.uniqueID ] ||
+ ( outerCache[ elem.uniqueID ] = {} );
+
+ if ( skip && skip === elem.nodeName.toLowerCase() ) {
+ elem = elem[ dir ] || elem;
+ } else if ( ( oldCache = uniqueCache[ key ] ) &&
+ oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+ // Assign to newCache so results back-propagate to previous elements
+ return ( newCache[ 2 ] = oldCache[ 2 ] );
+ } else {
+
+ // Reuse newcache so results back-propagate to previous elements
+ uniqueCache[ key ] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[ i ]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[ 0 ];
+}
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[ i ], results );
+ }
+ return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( ( elem = unmatched[ i ] ) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction( function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts(
+ selector || "*",
+ context.nodeType ? [ context ] : context,
+ []
+ ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( ( elem = temp[ i ] ) ) {
+ matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( ( elem = matcherOut[ i ] ) ) {
+
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( ( matcherIn[ i ] = elem ) );
+ }
+ }
+ postFinder( null, ( matcherOut = [] ), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( ( elem = matcherOut[ i ] ) &&
+ ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
+
+ seed[ temp ] = !( results[ temp ] = elem );
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ } );
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[ 0 ].type ],
+ implicitRelative = leadingRelative || Expr.relative[ " " ],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ ( checkContext = context ).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
+ matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+ } else {
+ matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[ j ].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens
+ .slice( 0, i - 1 )
+ .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, outermost ) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
+
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
+ len = elems.length;
+
+ if ( outermost ) {
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ outermostContext = context == document || context || outermost;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Support: IE<9, Safari
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+ for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
+ if ( byElement && elem ) {
+ j = 0;
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( !context && elem.ownerDocument != document ) {
+ setDocument( elem );
+ xml = !documentIsHTML;
+ }
+ while ( ( matcher = elementMatchers[ j++ ] ) ) {
+ if ( matcher( elem, context || document, xml ) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+
+ // They will have gone through all possible matchers
+ if ( ( elem = !matcher && elem ) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // `i` is now the count of elements visited above, and adding it to `matchedCount`
+ // makes the latter nonnegative.
+ matchedCount += i;
+
+ // Apply set filters to unmatched elements
+ // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+ // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+ // no element matchers and no seed.
+ // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+ // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+ // numerically zero.
+ if ( bySet && i !== matchedCount ) {
+ j = 0;
+ while ( ( matcher = setMatchers[ j++ ] ) ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
+ setMatched[ i ] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ selector + " " ];
+
+ if ( !cached ) {
+
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !match ) {
+ match = tokenize( selector );
+ }
+ i = match.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( match[ i ] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache(
+ selector,
+ matcherFromGroupMatchers( elementMatchers, setMatchers )
+ );
+
+ // Save selector and tokenization
+ cached.selector = selector;
+ }
+ return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+ var i, tokens, token, type, find,
+ compiled = typeof selector === "function" && selector,
+ match = !seed && tokenize( ( selector = compiled.selector || selector ) );
+
+ results = results || [];
+
+ // Try to minimize operations if there is only one selector in the list and no seed
+ // (the latter of which guarantees us context)
+ if ( match.length === 1 ) {
+
+ // Reduce context if the leading compound selector is an ID
+ tokens = match[ 0 ] = match[ 0 ].slice( 0 );
+ if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
+
+ context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
+ .replace( runescape, funescape ), context ) || [] )[ 0 ];
+ if ( !context ) {
+ return results;
+
+ // Precompiled matchers will still verify ancestry, so step up a level
+ } else if ( compiled ) {
+ context = context.parentNode;
+ }
+
+ selector = selector.slice( tokens.shift().value.length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
+ while ( i-- ) {
+ token = tokens[ i ];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ ( type = token.type ) ] ) {
+ break;
+ }
+ if ( ( find = Expr.find[ type ] ) ) {
+
+ // Search, expanding context for leading sibling combinators
+ if ( ( seed = find(
+ token.matches[ 0 ].replace( runescape, funescape ),
+ rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
+ context
+ ) ) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && toSelector( tokens );
+ if ( !selector ) {
+ push.apply( results, seed );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function if one is not provided
+ // Provide `match` to avoid retokenization if we modified the selector above
+ ( compiled || compile( selector, match ) )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+ );
+ return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert( function( el ) {
+
+ // Should return 1, but returns 4 (following)
+ return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
+} );
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert( function( el ) {
+ el.innerHTML = "<a href='#'></a>";
+ return el.firstChild.getAttribute( "href" ) === "#";
+} ) ) {
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
+ if ( !isXML ) {
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+ }
+ } );
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert( function( el ) {
+ el.innerHTML = "<input/>";
+ el.firstChild.setAttribute( "value", "" );
+ return el.firstChild.getAttribute( "value" ) === "";
+} ) ) {
+ addHandle( "value", function( elem, _name, isXML ) {
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+ return elem.defaultValue;
+ }
+ } );
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert( function( el ) {
+ return el.getAttribute( "disabled" ) == null;
+} ) ) {
+ addHandle( booleans, function( elem, name, isXML ) {
+ var val;
+ if ( !isXML ) {
+ return elem[ name ] === true ? name.toLowerCase() :
+ ( val = elem.getAttributeNode( name ) ) && val.specified ?
+ val.value :
+ null;
+ }
+ } );
+}
+
+return Sizzle;
+
+} )( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+ var matched = [],
+ truncate = until !== undefined;
+
+ while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+};
+
+
+var siblings = function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+}
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ return !!qualifier.call( elem, i, elem ) !== not;
+ } );
+ }
+
+ // Single element
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ } );
+ }
+
+ // Arraylike of elements (jQuery, arguments, Array)
+ if ( typeof qualifier !== "string" ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+ } );
+ }
+
+ // Filtered directly for both simple and complex selectors
+ return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ if ( elems.length === 1 && elem.nodeType === 1 ) {
+ return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+ }
+
+ return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ } ) );
+};
+
+jQuery.fn.extend( {
+ find: function( selector ) {
+ var i, ret,
+ len = this.length,
+ self = this;
+
+ if ( typeof selector !== "string" ) {
+ return this.pushStack( jQuery( selector ).filter( function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ } ) );
+ }
+
+ ret = this.pushStack( [] );
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+ },
+ filter: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], false ) );
+ },
+ not: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], true ) );
+ },
+ is: function( selector ) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test( selector ) ?
+ jQuery( selector ) :
+ selector || [],
+ false
+ ).length;
+ }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ // Shortcut simple #id case for speed
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+ init = jQuery.fn.init = function( selector, context, root ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Method init() accepts an alternate rootjQuery
+ // so migrate can support jQuery.sub (gh-2101)
+ root = root || rootjQuery;
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector[ 0 ] === "<" &&
+ selector[ selector.length - 1 ] === ">" &&
+ selector.length >= 3 ) {
+
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && ( match[ 1 ] || !context ) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[ 1 ] ) {
+ context = context instanceof jQuery ? context[ 0 ] : context;
+
+ // Option to run scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge( this, jQuery.parseHTML(
+ match[ 1 ],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+
+ // Properties of context are called as methods if possible
+ if ( isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[ 2 ] );
+
+ if ( elem ) {
+
+ // Inject the element directly into the jQuery object
+ this[ 0 ] = elem;
+ this.length = 1;
+ }
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || root ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this[ 0 ] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( isFunction( selector ) ) {
+ return root.ready !== undefined ?
+ root.ready( selector ) :
+
+ // Execute immediately if ready is not present
+ selector( jQuery );
+ }
+
+ return jQuery.makeArray( selector, this );
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+ // Methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend( {
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter( function() {
+ var i = 0;
+ for ( ; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[ i ] ) ) {
+ return true;
+ }
+ }
+ } );
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ targets = typeof selectors !== "string" && jQuery( selectors );
+
+ // Positional selectors never match, since there's no _selection_ context
+ if ( !rneedsContext.test( selectors ) ) {
+ for ( ; i < l; i++ ) {
+ for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && ( targets ?
+ targets.index( cur ) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+ matched.push( cur );
+ break;
+ }
+ }
+ }
+ }
+
+ return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+ },
+
+ // Determine the position of an element within the set
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // Index in selector
+ if ( typeof elem === "string" ) {
+ return indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ add: function( selector, context ) {
+ return this.pushStack(
+ jQuery.uniqueSort(
+ jQuery.merge( this.get(), jQuery( selector, context ) )
+ )
+ );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ }
+} );
+
+function sibling( cur, dir ) {
+ while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+ return cur;
+}
+
+jQuery.each( {
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, _i, until ) {
+ return dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, _i, until ) {
+ return dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, _i, until ) {
+ return dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return siblings( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return siblings( elem.firstChild );
+ },
+ contents: function( elem ) {
+ if ( elem.contentDocument != null &&
+
+ // Support: IE 11+
+ // <object> elements with no `data` attribute has an object
+ // `contentDocument` with a `null` prototype.
+ getProto( elem.contentDocument ) ) {
+
+ return elem.contentDocument;
+ }
+
+ // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+ // Treat the template element as a regular one in browsers that
+ // don't support it.
+ if ( nodeName( elem, "template" ) ) {
+ elem = elem.content || elem;
+ }
+
+ return jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.uniqueSort( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+ var object = {};
+ jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+ object[ flag ] = true;
+ } );
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ createOptions( options ) :
+ jQuery.extend( {}, options );
+
+ var // Flag to know if list is currently firing
+ firing,
+
+ // Last fire value for non-forgettable lists
+ memory,
+
+ // Flag to know if list was already fired
+ fired,
+
+ // Flag to prevent firing
+ locked,
+
+ // Actual callback list
+ list = [],
+
+ // Queue of execution data for repeatable lists
+ queue = [],
+
+ // Index of currently firing callback (modified by add/remove as needed)
+ firingIndex = -1,
+
+ // Fire callbacks
+ fire = function() {
+
+ // Enforce single-firing
+ locked = locked || options.once;
+
+ // Execute callbacks for all pending executions,
+ // respecting firingIndex overrides and runtime changes
+ fired = firing = true;
+ for ( ; queue.length; firingIndex = -1 ) {
+ memory = queue.shift();
+ while ( ++firingIndex < list.length ) {
+
+ // Run callback and check for early termination
+ if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+ options.stopOnFalse ) {
+
+ // Jump to end and forget the data so .add doesn't re-fire
+ firingIndex = list.length;
+ memory = false;
+ }
+ }
+ }
+
+ // Forget the data if we're done with it
+ if ( !options.memory ) {
+ memory = false;
+ }
+
+ firing = false;
+
+ // Clean up if we're done firing for good
+ if ( locked ) {
+
+ // Keep an empty list if we have data for future add calls
+ if ( memory ) {
+ list = [];
+
+ // Otherwise, this object is spent
+ } else {
+ list = "";
+ }
+ }
+ },
+
+ // Actual Callbacks object
+ self = {
+
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+
+ // If we have memory from a past run, we should fire after adding
+ if ( memory && !firing ) {
+ firingIndex = list.length - 1;
+ queue.push( memory );
+ }
+
+ ( function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ if ( isFunction( arg ) ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+ // Inspect recursively
+ add( arg );
+ }
+ } );
+ } )( arguments );
+
+ if ( memory && !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Remove a callback from the list
+ remove: function() {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+
+ // Handle firing indexes
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ } );
+ return this;
+ },
+
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ?
+ jQuery.inArray( fn, list ) > -1 :
+ list.length > 0;
+ },
+
+ // Remove all callbacks from the list
+ empty: function() {
+ if ( list ) {
+ list = [];
+ }
+ return this;
+ },
+
+ // Disable .fire and .add
+ // Abort any current/pending executions
+ // Clear all callbacks and values
+ disable: function() {
+ locked = queue = [];
+ list = memory = "";
+ return this;
+ },
+ disabled: function() {
+ return !list;
+ },
+
+ // Disable .fire
+ // Also disable .add unless we have memory (since it would have no effect)
+ // Abort any pending executions
+ lock: function() {
+ locked = queue = [];
+ if ( !memory && !firing ) {
+ list = memory = "";
+ }
+ return this;
+ },
+ locked: function() {
+ return !!locked;
+ },
+
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( !locked ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ queue.push( args );
+ if ( !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+function Identity( v ) {
+ return v;
+}
+function Thrower( ex ) {
+ throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+ var method;
+
+ try {
+
+ // Check for promise aspect first to privilege synchronous behavior
+ if ( value && isFunction( ( method = value.promise ) ) ) {
+ method.call( value ).done( resolve ).fail( reject );
+
+ // Other thenables
+ } else if ( value && isFunction( ( method = value.then ) ) ) {
+ method.call( value, resolve, reject );
+
+ // Other non-thenables
+ } else {
+
+ // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+ // * false: [ value ].slice( 0 ) => resolve( value )
+ // * true: [ value ].slice( 1 ) => resolve()
+ resolve.apply( undefined, [ value ].slice( noValue ) );
+ }
+
+ // For Promises/A+, convert exceptions into rejections
+ // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+ // Deferred#then to conditionally suppress rejection.
+ } catch ( value ) {
+
+ // Support: Android 4.0 only
+ // Strict mode functions invoked without .call/.apply get global-object context
+ reject.apply( undefined, [ value ] );
+ }
+}
+
+jQuery.extend( {
+
+ Deferred: function( func ) {
+ var tuples = [
+
+ // action, add listener, callbacks,
+ // ... .then handlers, argument index, [final state]
+ [ "notify", "progress", jQuery.Callbacks( "memory" ),
+ jQuery.Callbacks( "memory" ), 2 ],
+ [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ "catch": function( fn ) {
+ return promise.then( null, fn );
+ },
+
+ // Keep pipe for back-compat
+ pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+
+ return jQuery.Deferred( function( newDefer ) {
+ jQuery.each( tuples, function( _i, tuple ) {
+
+ // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+ var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+ // deferred.progress(function() { bind to newDefer or newDefer.notify })
+ // deferred.done(function() { bind to newDefer or newDefer.resolve })
+ // deferred.fail(function() { bind to newDefer or newDefer.reject })
+ deferred[ tuple[ 1 ] ]( function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && isFunction( returned.promise ) ) {
+ returned.promise()
+ .progress( newDefer.notify )
+ .done( newDefer.resolve )
+ .fail( newDefer.reject );
+ } else {
+ newDefer[ tuple[ 0 ] + "With" ](
+ this,
+ fn ? [ returned ] : arguments
+ );
+ }
+ } );
+ } );
+ fns = null;
+ } ).promise();
+ },
+ then: function( onFulfilled, onRejected, onProgress ) {
+ var maxDepth = 0;
+ function resolve( depth, deferred, handler, special ) {
+ return function() {
+ var that = this,
+ args = arguments,
+ mightThrow = function() {
+ var returned, then;
+
+ // Support: Promises/A+ section 2.3.3.3.3
+ // https://promisesaplus.com/#point-59
+ // Ignore double-resolution attempts
+ if ( depth < maxDepth ) {
+ return;
+ }
+
+ returned = handler.apply( that, args );
+
+ // Support: Promises/A+ section 2.3.1
+ // https://promisesaplus.com/#point-48
+ if ( returned === deferred.promise() ) {
+ throw new TypeError( "Thenable self-resolution" );
+ }
+
+ // Support: Promises/A+ sections 2.3.3.1, 3.5
+ // https://promisesaplus.com/#point-54
+ // https://promisesaplus.com/#point-75
+ // Retrieve `then` only once
+ then = returned &&
+
+ // Support: Promises/A+ section 2.3.4
+ // https://promisesaplus.com/#point-64
+ // Only check objects and functions for thenability
+ ( typeof returned === "object" ||
+ typeof returned === "function" ) &&
+ returned.then;
+
+ // Handle a returned thenable
+ if ( isFunction( then ) ) {
+
+ // Special processors (notify) just wait for resolution
+ if ( special ) {
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special )
+ );
+
+ // Normal processors (resolve) also hook into progress
+ } else {
+
+ // ...and disregard older resolution values
+ maxDepth++;
+
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special ),
+ resolve( maxDepth, deferred, Identity,
+ deferred.notifyWith )
+ );
+ }
+
+ // Handle all other returned values
+ } else {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Identity ) {
+ that = undefined;
+ args = [ returned ];
+ }
+
+ // Process the value(s)
+ // Default process is resolve
+ ( special || deferred.resolveWith )( that, args );
+ }
+ },
+
+ // Only normal processors (resolve) catch and reject exceptions
+ process = special ?
+ mightThrow :
+ function() {
+ try {
+ mightThrow();
+ } catch ( e ) {
+
+ if ( jQuery.Deferred.exceptionHook ) {
+ jQuery.Deferred.exceptionHook( e,
+ process.stackTrace );
+ }
+
+ // Support: Promises/A+ section 2.3.3.3.4.1
+ // https://promisesaplus.com/#point-61
+ // Ignore post-resolution exceptions
+ if ( depth + 1 >= maxDepth ) {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Thrower ) {
+ that = undefined;
+ args = [ e ];
+ }
+
+ deferred.rejectWith( that, args );
+ }
+ }
+ };
+
+ // Support: Promises/A+ section 2.3.3.3.1
+ // https://promisesaplus.com/#point-57
+ // Re-resolve promises immediately to dodge false rejection from
+ // subsequent errors
+ if ( depth ) {
+ process();
+ } else {
+
+ // Call an optional hook to record the stack, in case of exception
+ // since it's otherwise lost when execution goes async
+ if ( jQuery.Deferred.getStackHook ) {
+ process.stackTrace = jQuery.Deferred.getStackHook();
+ }
+ window.setTimeout( process );
+ }
+ };
+ }
+
+ return jQuery.Deferred( function( newDefer ) {
+
+ // progress_handlers.add( ... )
+ tuples[ 0 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onProgress ) ?
+ onProgress :
+ Identity,
+ newDefer.notifyWith
+ )
+ );
+
+ // fulfilled_handlers.add( ... )
+ tuples[ 1 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onFulfilled ) ?
+ onFulfilled :
+ Identity
+ )
+ );
+
+ // rejected_handlers.add( ... )
+ tuples[ 2 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ isFunction( onRejected ) ?
+ onRejected :
+ Thrower
+ )
+ );
+ } ).promise();
+ },
+
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 5 ];
+
+ // promise.progress = list.add
+ // promise.done = list.add
+ // promise.fail = list.add
+ promise[ tuple[ 1 ] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(
+ function() {
+
+ // state = "resolved" (i.e., fulfilled)
+ // state = "rejected"
+ state = stateString;
+ },
+
+ // rejected_callbacks.disable
+ // fulfilled_callbacks.disable
+ tuples[ 3 - i ][ 2 ].disable,
+
+ // rejected_handlers.disable
+ // fulfilled_handlers.disable
+ tuples[ 3 - i ][ 3 ].disable,
+
+ // progress_callbacks.lock
+ tuples[ 0 ][ 2 ].lock,
+
+ // progress_handlers.lock
+ tuples[ 0 ][ 3 ].lock
+ );
+ }
+
+ // progress_handlers.fire
+ // fulfilled_handlers.fire
+ // rejected_handlers.fire
+ list.add( tuple[ 3 ].fire );
+
+ // deferred.notify = function() { deferred.notifyWith(...) }
+ // deferred.resolve = function() { deferred.resolveWith(...) }
+ // deferred.reject = function() { deferred.rejectWith(...) }
+ deferred[ tuple[ 0 ] ] = function() {
+ deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+ return this;
+ };
+
+ // deferred.notifyWith = list.fireWith
+ // deferred.resolveWith = list.fireWith
+ // deferred.rejectWith = list.fireWith
+ deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+ } );
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( singleValue ) {
+ var
+
+ // count of uncompleted subordinates
+ remaining = arguments.length,
+
+ // count of unprocessed arguments
+ i = remaining,
+
+ // subordinate fulfillment data
+ resolveContexts = Array( i ),
+ resolveValues = slice.call( arguments ),
+
+ // the primary Deferred
+ primary = jQuery.Deferred(),
+
+ // subordinate callback factory
+ updateFunc = function( i ) {
+ return function( value ) {
+ resolveContexts[ i ] = this;
+ resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+ if ( !( --remaining ) ) {
+ primary.resolveWith( resolveContexts, resolveValues );
+ }
+ };
+ };
+
+ // Single- and empty arguments are adopted like Promise.resolve
+ if ( remaining <= 1 ) {
+ adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
+ !remaining );
+
+ // Use .then() to unwrap secondary thenables (cf. gh-3000)
+ if ( primary.state() === "pending" ||
+ isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+ return primary.then();
+ }
+ }
+
+ // Multiple arguments are aggregated like Promise.all array elements
+ while ( i-- ) {
+ adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
+ }
+
+ return primary.promise();
+ }
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+ // Support: IE 8 - 9 only
+ // Console exists when dev tools are open, which can happen at any time
+ if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+ window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+ }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+ window.setTimeout( function() {
+ throw error;
+ } );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+ readyList
+ .then( fn )
+
+ // Wrap jQuery.readyException in a function so that the lookup
+ // happens at the time of error handling instead of callback
+ // registration.
+ .catch( function( error ) {
+ jQuery.readyException( error );
+ } );
+
+ return this;
+};
+
+jQuery.extend( {
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+ }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+ document.removeEventListener( "DOMContentLoaded", completed );
+ window.removeEventListener( "load", completed );
+ jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+ ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ window.setTimeout( jQuery.ready );
+
+} else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ len = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( toType( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ access( elems, fn, i, key[ i ], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, _key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < len; i++ ) {
+ fn(
+ elems[ i ], key, raw ?
+ value :
+ value.call( elems[ i ], i, fn( elems[ i ], key ) )
+ );
+ }
+ }
+ }
+
+ if ( chainable ) {
+ return elems;
+ }
+
+ // Gets
+ if ( bulk ) {
+ return fn.call( elems );
+ }
+
+ return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( _all, letter ) {
+ return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+ this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+ cache: function( owner ) {
+
+ // Check if the owner object already has a cache
+ var value = owner[ this.expando ];
+
+ // If not, create one
+ if ( !value ) {
+ value = {};
+
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return an empty object.
+ if ( acceptData( owner ) ) {
+
+ // If it is a node unlikely to be stringify-ed or looped over
+ // use plain assignment
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = value;
+
+ // Otherwise secure it in a non-enumerable property
+ // configurable must be true to allow the property to be
+ // deleted when data is removed
+ } else {
+ Object.defineProperty( owner, this.expando, {
+ value: value,
+ configurable: true
+ } );
+ }
+ }
+ }
+
+ return value;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ cache = this.cache( owner );
+
+ // Handle: [ owner, key, value ] args
+ // Always use camelCase key (gh-2257)
+ if ( typeof data === "string" ) {
+ cache[ camelCase( data ) ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+
+ // Copy the properties one-by-one to the cache object
+ for ( prop in data ) {
+ cache[ camelCase( prop ) ] = data[ prop ];
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ return key === undefined ?
+ this.cache( owner ) :
+
+ // Always use camelCase key (gh-2257)
+ owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+ },
+ access: function( owner, key, value ) {
+
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+ return this.get( owner, key );
+ }
+
+ // When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i,
+ cache = owner[ this.expando ];
+
+ if ( cache === undefined ) {
+ return;
+ }
+
+ if ( key !== undefined ) {
+
+ // Support array or space separated string of keys
+ if ( Array.isArray( key ) ) {
+
+ // If key is an array of keys...
+ // We always set camelCase keys, so remove that.
+ key = key.map( camelCase );
+ } else {
+ key = camelCase( key );
+
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ key = key in cache ?
+ [ key ] :
+ ( key.match( rnothtmlwhite ) || [] );
+ }
+
+ i = key.length;
+
+ while ( i-- ) {
+ delete cache[ key[ i ] ];
+ }
+ }
+
+ // Remove the expando if there's no more data
+ if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+ // Support: Chrome <=35 - 45
+ // Webkit & Blink performance suffers when deleting properties
+ // from DOM nodes, so set to undefined instead
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = undefined;
+ } else {
+ delete owner[ this.expando ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ var cache = owner[ this.expando ];
+ return cache !== undefined && !jQuery.isEmptyObject( cache );
+ }
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+ if ( data === "true" ) {
+ return true;
+ }
+
+ if ( data === "false" ) {
+ return false;
+ }
+
+ if ( data === "null" ) {
+ return null;
+ }
+
+ // Only convert to a number if it doesn't change the string
+ if ( data === +data + "" ) {
+ return +data;
+ }
+
+ if ( rbrace.test( data ) ) {
+ return JSON.parse( data );
+ }
+
+ return data;
+}
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = getData( data );
+ } catch ( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ dataUser.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+
+jQuery.extend( {
+ hasData: function( elem ) {
+ return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return dataUser.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ dataUser.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to dataPriv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return dataPriv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ dataPriv.remove( elem, name );
+ }
+} );
+
+jQuery.fn.extend( {
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[ 0 ],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = dataUser.get( elem );
+
+ if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+ i = attrs.length;
+ while ( i-- ) {
+
+ // Support: IE 11 only
+ // The attrs elements can be null (#14894)
+ if ( attrs[ i ] ) {
+ name = attrs[ i ].name;
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = camelCase( name.slice( 5 ) );
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ }
+ dataPriv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each( function() {
+ dataUser.set( this, key );
+ } );
+ }
+
+ return access( this, function( value ) {
+ var data;
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+
+ // Attempt to get data from the cache
+ // The key will always be camelCased in Data
+ data = dataUser.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each( function() {
+
+ // We always store the camelCased key
+ dataUser.set( this, key, value );
+ } );
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each( function() {
+ dataUser.remove( this, key );
+ } );
+ }
+} );
+
+
+jQuery.extend( {
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = dataPriv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || Array.isArray( data ) ) {
+ queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // Clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // Not public - generate a queueHooks object, or return the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+ empty: jQuery.Callbacks( "once memory" ).add( function() {
+ dataPriv.remove( elem, [ type + "queue", key ] );
+ } )
+ } );
+ }
+} );
+
+jQuery.fn.extend( {
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[ 0 ], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each( function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // Ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ } );
+ },
+ dequeue: function( type ) {
+ return this.each( function() {
+ jQuery.dequeue( this, type );
+ } );
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while ( i-- ) {
+ tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var documentElement = document.documentElement;
+
+
+
+ var isAttached = function( elem ) {
+ return jQuery.contains( elem.ownerDocument, elem );
+ },
+ composed = { composed: true };
+
+ // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
+ // Check attachment across shadow DOM boundaries when possible (gh-3504)
+ // Support: iOS 10.0-10.2 only
+ // Early iOS 10 versions support `attachShadow` but not `getRootNode`,
+ // leading to errors. We need to check for `getRootNode`.
+ if ( documentElement.getRootNode ) {
+ isAttached = function( elem ) {
+ return jQuery.contains( elem.ownerDocument, elem ) ||
+ elem.getRootNode( composed ) === elem.ownerDocument;
+ };
+ }
+var isHiddenWithinTree = function( elem, el ) {
+
+ // isHiddenWithinTree might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+
+ // Inline style trumps all
+ return elem.style.display === "none" ||
+ elem.style.display === "" &&
+
+ // Otherwise, check computed style
+ // Support: Firefox <=43 - 45
+ // Disconnected elements can have computed display: none, so first confirm that elem is
+ // in the document.
+ isAttached( elem ) &&
+
+ jQuery.css( elem, "display" ) === "none";
+ };
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+ var adjusted, scale,
+ maxIterations = 20,
+ currentValue = tween ?
+ function() {
+ return tween.cur();
+ } :
+ function() {
+ return jQuery.css( elem, prop, "" );
+ },
+ initial = currentValue(),
+ unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ initialInUnit = elem.nodeType &&
+ ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+ rcssNum.exec( jQuery.css( elem, prop ) );
+
+ if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+ // Support: Firefox <=54
+ // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+ initial = initial / 2;
+
+ // Trust units reported by jQuery.css
+ unit = unit || initialInUnit[ 3 ];
+
+ // Iteratively approximate from a nonzero starting point
+ initialInUnit = +initial || 1;
+
+ while ( maxIterations-- ) {
+
+ // Evaluate and update our best guess (doubling guesses that zero out).
+ // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+ jQuery.style( elem, prop, initialInUnit + unit );
+ if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+ maxIterations = 0;
+ }
+ initialInUnit = initialInUnit / scale;
+
+ }
+
+ initialInUnit = initialInUnit * 2;
+ jQuery.style( elem, prop, initialInUnit + unit );
+
+ // Make sure we update the tween properties later on
+ valueParts = valueParts || [];
+ }
+
+ if ( valueParts ) {
+ initialInUnit = +initialInUnit || +initial || 0;
+
+ // Apply relative offset (+=/-=) if specified
+ adjusted = valueParts[ 1 ] ?
+ initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+ +valueParts[ 2 ];
+ if ( tween ) {
+ tween.unit = unit;
+ tween.start = initialInUnit;
+ tween.end = adjusted;
+ }
+ }
+ return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+ var temp,
+ doc = elem.ownerDocument,
+ nodeName = elem.nodeName,
+ display = defaultDisplayMap[ nodeName ];
+
+ if ( display ) {
+ return display;
+ }
+
+ temp = doc.body.appendChild( doc.createElement( nodeName ) );
+ display = jQuery.css( temp, "display" );
+
+ temp.parentNode.removeChild( temp );
+
+ if ( display === "none" ) {
+ display = "block";
+ }
+ defaultDisplayMap[ nodeName ] = display;
+
+ return display;
+}
+
+function showHide( elements, show ) {
+ var display, elem,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ // Determine new display value for elements that need to change
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+
+ display = elem.style.display;
+ if ( show ) {
+
+ // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+ // check is required in this first loop unless we have a nonempty display value (either
+ // inline or about-to-be-restored)
+ if ( display === "none" ) {
+ values[ index ] = dataPriv.get( elem, "display" ) || null;
+ if ( !values[ index ] ) {
+ elem.style.display = "";
+ }
+ }
+ if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+ values[ index ] = getDefaultDisplay( elem );
+ }
+ } else {
+ if ( display !== "none" ) {
+ values[ index ] = "none";
+
+ // Remember what we're overwriting
+ dataPriv.set( elem, "display", display );
+ }
+ }
+ }
+
+ // Set the display of the elements in a second loop to avoid constant reflow
+ for ( index = 0; index < length; index++ ) {
+ if ( values[ index ] != null ) {
+ elements[ index ].style.display = values[ index ];
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend( {
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state ) {
+ if ( typeof state === "boolean" ) {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each( function() {
+ if ( isHiddenWithinTree( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ } );
+ }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+( function() {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild( document.createElement( "div" ) ),
+ input = document.createElement( "input" );
+
+ // Support: Android 4.0 - 4.3 only
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute( "type", "radio" );
+ input.setAttribute( "checked", "checked" );
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+
+ // Support: Android <=4.1 only
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE <=11 only
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+ // Support: IE <=9 only
+ // IE <=9 replaces <option> tags with their contents when inserted outside of
+ // the select element.
+ div.innerHTML = "<option></option>";
+ support.option = !!div.lastChild;
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+ // XHTML parsers do not magically insert elements in the
+ // same way that tag soup parsers do. So we cannot shorten
+ // this by omitting <tbody> or other required elements.
+ thead: [ 1, "<table>", "</table>" ],
+ col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+ _default: [ 0, "", "" ]
+};
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: IE <=9 only
+if ( !support.option ) {
+ wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
+}
+
+
+function getAll( context, tag ) {
+
+ // Support: IE <=9 - 11 only
+ // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+ var ret;
+
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ ret = context.getElementsByTagName( tag || "*" );
+
+ } else if ( typeof context.querySelectorAll !== "undefined" ) {
+ ret = context.querySelectorAll( tag || "*" );
+
+ } else {
+ ret = [];
+ }
+
+ if ( tag === undefined || tag && nodeName( context, tag ) ) {
+ return jQuery.merge( [ context ], ret );
+ }
+
+ return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+ var i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ dataPriv.set(
+ elems[ i ],
+ "globalEval",
+ !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+ var elem, tmp, tag, wrap, attached, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( toType( elem ) === "object" ) {
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+ // Convert non-html into a text node
+ } else if ( !rhtml.test( elem ) ) {
+ nodes.push( context.createTextNode( elem ) );
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+ // Descend through wrappers to the right content
+ j = wrap[ 0 ];
+ while ( j-- ) {
+ tmp = tmp.lastChild;
+ }
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ i = 0;
+ while ( ( elem = nodes[ i++ ] ) ) {
+
+ // Skip elements already in the context collection (trac-4087)
+ if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+ if ( ignored ) {
+ ignored.push( elem );
+ }
+ continue;
+ }
+
+ attached = isAttached( elem );
+
+ // Append to fragment
+ tmp = getAll( fragment.appendChild( elem ), "script" );
+
+ // Preserve script evaluation history
+ if ( attached ) {
+ setGlobalEval( tmp );
+ }
+
+ // Capture executables
+ if ( scripts ) {
+ j = 0;
+ while ( ( elem = tmp[ j++ ] ) ) {
+ if ( rscriptType.test( elem.type || "" ) ) {
+ scripts.push( elem );
+ }
+ }
+ }
+ }
+
+ return fragment;
+}
+
+
+var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+ return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
+// Support: IE <=9 only
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ on( elem, type, selector, data, types[ type ], one );
+ }
+ return elem;
+ }
+
+ if ( data == null && fn == null ) {
+
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return elem;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return elem.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ global: {},
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.get( elem );
+
+ // Only attach events to objects that accept data
+ if ( !acceptData( elem ) ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Ensure that invalid selectors throw exceptions at attach time
+ // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+ if ( selector ) {
+ jQuery.find.matchesSelector( documentElement, selector );
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !( events = elemData.events ) ) {
+ events = elemData.events = Object.create( null );
+ }
+ if ( !( eventHandle = elemData.handle ) ) {
+ eventHandle = elemData.handle = function( e ) {
+
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+ };
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if ( !type ) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend( {
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join( "." )
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ if ( !( handlers = events[ type ] ) ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener if the special events handler returns false
+ if ( !special.setup ||
+ special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+ if ( !elemData || !( events = elemData.events ) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[ type ] || [];
+ tmp = tmp[ 2 ] &&
+ new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while ( j-- ) {
+ handleObj = handlers[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector ||
+ selector === "**" && handleObj.selector ) ) {
+ handlers.splice( j, 1 );
+
+ if ( handleObj.selector ) {
+ handlers.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( origCount && !handlers.length ) {
+ if ( !special.teardown ||
+ special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove data and the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ dataPriv.remove( elem, "handle events" );
+ }
+ },
+
+ dispatch: function( nativeEvent ) {
+
+ var i, j, ret, matched, handleObj, handlerQueue,
+ args = new Array( arguments.length ),
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( nativeEvent ),
+
+ handlers = (
+ dataPriv.get( this, "events" ) || Object.create( null )
+ )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[ 0 ] = event;
+
+ for ( i = 1; i < arguments.length; i++ ) {
+ args[ i ] = arguments[ i ];
+ }
+
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( ( handleObj = matched.handlers[ j++ ] ) &&
+ !event.isImmediatePropagationStopped() ) {
+
+ // If the event is namespaced, then each handler is only invoked if it is
+ // specially universal or its namespaces are a superset of the event's.
+ if ( !event.rnamespace || handleObj.namespace === false ||
+ event.rnamespace.test( handleObj.namespace ) ) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+ handleObj.handler ).apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ if ( ( event.result = ret ) === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ handlers: function( event, handlers ) {
+ var i, handleObj, sel, matchedHandlers, matchedSelectors,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ if ( delegateCount &&
+
+ // Support: IE <=9
+ // Black-hole SVG <use> instance trees (trac-13180)
+ cur.nodeType &&
+
+ // Support: Firefox <=42
+ // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+ // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+ // Support: IE 11 only
+ // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+ !( event.type === "click" && event.button >= 1 ) ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't check non-elements (#13208)
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+ matchedHandlers = [];
+ matchedSelectors = {};
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if ( matchedSelectors[ sel ] === undefined ) {
+ matchedSelectors[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) > -1 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( matchedSelectors[ sel ] ) {
+ matchedHandlers.push( handleObj );
+ }
+ }
+ if ( matchedHandlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ cur = this;
+ if ( delegateCount < handlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+ }
+
+ return handlerQueue;
+ },
+
+ addProp: function( name, hook ) {
+ Object.defineProperty( jQuery.Event.prototype, name, {
+ enumerable: true,
+ configurable: true,
+
+ get: isFunction( hook ) ?
+ function() {
+ if ( this.originalEvent ) {
+ return hook( this.originalEvent );
+ }
+ } :
+ function() {
+ if ( this.originalEvent ) {
+ return this.originalEvent[ name ];
+ }
+ },
+
+ set: function( value ) {
+ Object.defineProperty( this, name, {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: value
+ } );
+ }
+ } );
+ },
+
+ fix: function( originalEvent ) {
+ return originalEvent[ jQuery.expando ] ?
+ originalEvent :
+ new jQuery.Event( originalEvent );
+ },
+
+ special: {
+ load: {
+
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ click: {
+
+ // Utilize native event to ensure correct state for checkable inputs
+ setup: function( data ) {
+
+ // For mutual compressibility with _default, replace `this` access with a local var.
+ // `|| data` is dead code meant only to preserve the variable through minification.
+ var el = this || data;
+
+ // Claim the first handler
+ if ( rcheckableType.test( el.type ) &&
+ el.click && nodeName( el, "input" ) ) {
+
+ // dataPriv.set( el, "click", ... )
+ leverageNative( el, "click", returnTrue );
+ }
+
+ // Return false to allow normal processing in the caller
+ return false;
+ },
+ trigger: function( data ) {
+
+ // For mutual compressibility with _default, replace `this` access with a local var.
+ // `|| data` is dead code meant only to preserve the variable through minification.
+ var el = this || data;
+
+ // Force setup before triggering a click
+ if ( rcheckableType.test( el.type ) &&
+ el.click && nodeName( el, "input" ) ) {
+
+ leverageNative( el, "click" );
+ }
+
+ // Return non-false to allow normal event-path propagation
+ return true;
+ },
+
+ // For cross-browser consistency, suppress native .click() on links
+ // Also prevent it if we're currently inside a leveraged native-event stack
+ _default: function( event ) {
+ var target = event.target;
+ return rcheckableType.test( target.type ) &&
+ target.click && nodeName( target, "input" ) &&
+ dataPriv.get( target, "click" ) ||
+ nodeName( target, "a" );
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function( event ) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if ( event.result !== undefined && event.originalEvent ) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ }
+};
+
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+ // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
+ if ( !expectSync ) {
+ if ( dataPriv.get( el, type ) === undefined ) {
+ jQuery.event.add( el, type, returnTrue );
+ }
+ return;
+ }
+
+ // Register the controller as a special universal handler for all event namespaces
+ dataPriv.set( el, type, false );
+ jQuery.event.add( el, type, {
+ namespace: false,
+ handler: function( event ) {
+ var notAsync, result,
+ saved = dataPriv.get( this, type );
+
+ if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+ // Interrupt processing of the outer synthetic .trigger()ed event
+ // Saved data should be false in such cases, but might be a leftover capture object
+ // from an async native handler (gh-4350)
+ if ( !saved.length ) {
+
+ // Store arguments for use when handling the inner native event
+ // There will always be at least one argument (an event object), so this array
+ // will not be confused with a leftover capture object.
+ saved = slice.call( arguments );
+ dataPriv.set( this, type, saved );
+
+ // Trigger the native event and capture its result
+ // Support: IE <=9 - 11+
+ // focus() and blur() are asynchronous
+ notAsync = expectSync( this, type );
+ this[ type ]();
+ result = dataPriv.get( this, type );
+ if ( saved !== result || notAsync ) {
+ dataPriv.set( this, type, false );
+ } else {
+ result = {};
+ }
+ if ( saved !== result ) {
+
+ // Cancel the outer synthetic event
+ event.stopImmediatePropagation();
+ event.preventDefault();
+
+ // Support: Chrome 86+
+ // In Chrome, if an element having a focusout handler is blurred by
+ // clicking outside of it, it invokes the handler synchronously. If
+ // that handler calls `.remove()` on the element, the data is cleared,
+ // leaving `result` undefined. We need to guard against this.
+ return result && result.value;
+ }
+
+ // If this is an inner synthetic event for an event with a bubbling surrogate
+ // (focus or blur), assume that the surrogate already propagated from triggering the
+ // native event and prevent that from happening again here.
+ // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
+ // bubbling surrogate propagates *after* the non-bubbling base), but that seems
+ // less bad than duplication.
+ } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
+ event.stopPropagation();
+ }
+
+ // If this is a native event triggered above, everything is now in order
+ // Fire an inner synthetic event with the original arguments
+ } else if ( saved.length ) {
+
+ // ...and capture the result
+ dataPriv.set( this, type, {
+ value: jQuery.event.trigger(
+
+ // Support: IE <=9 - 11+
+ // Extend with the prototype to reset the above stopImmediatePropagation()
+ jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
+ saved.slice( 1 ),
+ this
+ )
+ } );
+
+ // Abort handling of the native event
+ event.stopImmediatePropagation();
+ }
+ }
+ } );
+}
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+ // This "if" is needed for plain objects
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle );
+ }
+};
+
+jQuery.Event = function( src, props ) {
+
+ // Allow instantiation without the 'new' keyword
+ if ( !( this instanceof jQuery.Event ) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = src.defaultPrevented ||
+ src.defaultPrevented === undefined &&
+
+ // Support: Android <=2.3 only
+ src.returnValue === false ?
+ returnTrue :
+ returnFalse;
+
+ // Create target properties
+ // Support: Safari <=6 - 7 only
+ // Target should not be a text node (#504, #13143)
+ this.target = ( src.target && src.target.nodeType === 3 ) ?
+ src.target.parentNode :
+ src.target;
+
+ this.currentTarget = src.currentTarget;
+ this.relatedTarget = src.relatedTarget;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || Date.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ constructor: jQuery.Event,
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+ isSimulated: false,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function() {
+ var e = this.originalEvent;
+
+ this.isImmediatePropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopImmediatePropagation();
+ }
+
+ this.stopPropagation();
+ }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+ altKey: true,
+ bubbles: true,
+ cancelable: true,
+ changedTouches: true,
+ ctrlKey: true,
+ detail: true,
+ eventPhase: true,
+ metaKey: true,
+ pageX: true,
+ pageY: true,
+ shiftKey: true,
+ view: true,
+ "char": true,
+ code: true,
+ charCode: true,
+ key: true,
+ keyCode: true,
+ button: true,
+ buttons: true,
+ clientX: true,
+ clientY: true,
+ offsetX: true,
+ offsetY: true,
+ pointerId: true,
+ pointerType: true,
+ screenX: true,
+ screenY: true,
+ targetTouches: true,
+ toElement: true,
+ touches: true,
+ which: true
+}, jQuery.event.addProp );
+
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
+ jQuery.event.special[ type ] = {
+
+ // Utilize native event if possible so blur/focus sequence is correct
+ setup: function() {
+
+ // Claim the first handler
+ // dataPriv.set( this, "focus", ... )
+ // dataPriv.set( this, "blur", ... )
+ leverageNative( this, type, expectSync );
+
+ // Return false to allow normal processing in the caller
+ return false;
+ },
+ trigger: function() {
+
+ // Force setup before trigger
+ leverageNative( this, type );
+
+ // Return non-false to allow normal event-path propagation
+ return true;
+ },
+
+ // Suppress native focus or blur as it's already being fired
+ // in leverageNative.
+ _default: function() {
+ return true;
+ },
+
+ delegateType: delegateType
+ };
+} );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mouseenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+} );
+
+jQuery.fn.extend( {
+
+ on: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn );
+ },
+ one: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ?
+ handleObj.origType + "." + handleObj.namespace :
+ handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each( function() {
+ jQuery.event.remove( this, types, fn, selector );
+ } );
+ }
+} );
+
+
+var
+
+ // Support: IE <=10 - 11, Edge 12 - 13 only
+ // In IE/Edge using regex groups here causes severe slowdowns.
+ // See https://connect.microsoft.com/IE/feedback/details/1736512/
+ rnoInnerhtml = /<script|<style|<link/i,
+
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+ if ( nodeName( elem, "table" ) &&
+ nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+ return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
+ }
+
+ return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+ elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+ return elem;
+}
+function restoreScript( elem ) {
+ if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+ elem.type = elem.type.slice( 5 );
+ } else {
+ elem.removeAttribute( "type" );
+ }
+
+ return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+ var i, l, type, pdataOld, udataOld, udataCur, events;
+
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // 1. Copy private data: events, handlers, etc.
+ if ( dataPriv.hasData( src ) ) {
+ pdataOld = dataPriv.get( src );
+ events = pdataOld.events;
+
+ if ( events ) {
+ dataPriv.remove( dest, "handle events" );
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+ }
+
+ // 2. Copy user data
+ if ( dataUser.hasData( src ) ) {
+ udataOld = dataUser.access( src );
+ udataCur = jQuery.extend( {}, udataOld );
+
+ dataUser.set( dest, udataCur );
+ }
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+ var nodeName = dest.nodeName.toLowerCase();
+
+ // Fails to persist the checked state of a cloned checkbox or radio button.
+ if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+ dest.checked = src.checked;
+
+ // Fails to return the selected option to the default selected state when cloning options
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+ // Flatten any nested arrays
+ args = flat( args );
+
+ var fragment, first, scripts, hasScripts, node, doc,
+ i = 0,
+ l = collection.length,
+ iNoClone = l - 1,
+ value = args[ 0 ],
+ valueIsFunction = isFunction( value );
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( valueIsFunction ||
+ ( l > 1 && typeof value === "string" &&
+ !support.checkClone && rchecked.test( value ) ) ) {
+ return collection.each( function( index ) {
+ var self = collection.eq( index );
+ if ( valueIsFunction ) {
+ args[ 0 ] = value.call( this, index, self.html() );
+ }
+ domManip( self, args, callback, ignored );
+ } );
+ }
+
+ if ( l ) {
+ fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+ first = fragment.firstChild;
+
+ if ( fragment.childNodes.length === 1 ) {
+ fragment = first;
+ }
+
+ // Require either new content or an interest in ignored elements to invoke the callback
+ if ( first || ignored ) {
+ scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item
+ // instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for ( ; i < l; i++ ) {
+ node = fragment;
+
+ if ( i !== iNoClone ) {
+ node = jQuery.clone( node, true, true );
+
+ // Keep references to cloned scripts for later restoration
+ if ( hasScripts ) {
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( scripts, getAll( node, "script" ) );
+ }
+ }
+
+ callback.call( collection[ i ], node, i );
+ }
+
+ if ( hasScripts ) {
+ doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map( scripts, restoreScript );
+
+ // Evaluate executable scripts on first document insertion
+ for ( i = 0; i < hasScripts; i++ ) {
+ node = scripts[ i ];
+ if ( rscriptType.test( node.type || "" ) &&
+ !dataPriv.access( node, "globalEval" ) &&
+ jQuery.contains( doc, node ) ) {
+
+ if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) {
+
+ // Optional AJAX dependency, but won't run scripts if not present
+ if ( jQuery._evalUrl && !node.noModule ) {
+ jQuery._evalUrl( node.src, {
+ nonce: node.nonce || node.getAttribute( "nonce" )
+ }, doc );
+ }
+ } else {
+ DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return collection;
+}
+
+function remove( elem, selector, keepData ) {
+ var node,
+ nodes = selector ? jQuery.filter( selector, elem ) : elem,
+ i = 0;
+
+ for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+ if ( !keepData && node.nodeType === 1 ) {
+ jQuery.cleanData( getAll( node ) );
+ }
+
+ if ( node.parentNode ) {
+ if ( keepData && isAttached( node ) ) {
+ setGlobalEval( getAll( node, "script" ) );
+ }
+ node.parentNode.removeChild( node );
+ }
+ }
+
+ return elem;
+}
+
+jQuery.extend( {
+ htmlPrefilter: function( html ) {
+ return html;
+ },
+
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var i, l, srcElements, destElements,
+ clone = elem.cloneNode( true ),
+ inPage = isAttached( elem );
+
+ // Fix IE cloning issues
+ if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+ !jQuery.isXMLDoc( elem ) ) {
+
+ // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll( clone );
+ srcElements = getAll( elem );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ fixInput( srcElements[ i ], destElements[ i ] );
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ if ( deepDataAndEvents ) {
+ srcElements = srcElements || getAll( elem );
+ destElements = destElements || getAll( clone );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+ }
+ } else {
+ cloneCopyEvent( elem, clone );
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll( clone, "script" );
+ if ( destElements.length > 0 ) {
+ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ cleanData: function( elems ) {
+ var data, elem, type,
+ special = jQuery.event.special,
+ i = 0;
+
+ for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+ if ( acceptData( elem ) ) {
+ if ( ( data = elem[ dataPriv.expando ] ) ) {
+ if ( data.events ) {
+ for ( type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+
+ // Support: Chrome <=35 - 45+
+ // Assign undefined instead of using delete, see Data#remove
+ elem[ dataPriv.expando ] = undefined;
+ }
+ if ( elem[ dataUser.expando ] ) {
+
+ // Support: Chrome <=35 - 45+
+ // Assign undefined instead of using delete, see Data#remove
+ elem[ dataUser.expando ] = undefined;
+ }
+ }
+ }
+ }
+} );
+
+jQuery.fn.extend( {
+ detach: function( selector ) {
+ return remove( this, selector, true );
+ },
+
+ remove: function( selector ) {
+ return remove( this, selector );
+ },
+
+ text: function( value ) {
+ return access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().each( function() {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ this.textContent = value;
+ }
+ } );
+ }, null, value, arguments.length );
+ },
+
+ append: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.appendChild( elem );
+ }
+ } );
+ },
+
+ prepend: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.insertBefore( elem, target.firstChild );
+ }
+ } );
+ },
+
+ before: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this );
+ }
+ } );
+ },
+
+ after: function() {
+ return domManip( this, arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ }
+ } );
+ },
+
+ empty: function() {
+ var elem,
+ i = 0;
+
+ for ( ; ( elem = this[ i ] ) != null; i++ ) {
+ if ( elem.nodeType === 1 ) {
+
+ // Prevent memory leaks
+ jQuery.cleanData( getAll( elem, false ) );
+
+ // Remove any remaining nodes
+ elem.textContent = "";
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map( function() {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ } );
+ },
+
+ html: function( value ) {
+ return access( this, function( value ) {
+ var elem = this[ 0 ] || {},
+ i = 0,
+ l = this.length;
+
+ if ( value === undefined && elem.nodeType === 1 ) {
+ return elem.innerHTML;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+ value = jQuery.htmlPrefilter( value );
+
+ try {
+ for ( ; i < l; i++ ) {
+ elem = this[ i ] || {};
+
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem, false ) );
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch ( e ) {}
+ }
+
+ if ( elem ) {
+ this.empty().append( value );
+ }
+ }, null, value, arguments.length );
+ },
+
+ replaceWith: function() {
+ var ignored = [];
+
+ // Make the changes, replacing each non-ignored context element with the new content
+ return domManip( this, arguments, function( elem ) {
+ var parent = this.parentNode;
+
+ if ( jQuery.inArray( this, ignored ) < 0 ) {
+ jQuery.cleanData( getAll( this ) );
+ if ( parent ) {
+ parent.replaceChild( elem, this );
+ }
+ }
+
+ // Force callback invocation
+ }, ignored );
+ }
+} );
+
+jQuery.each( {
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ ret = [],
+ insert = jQuery( selector ),
+ last = insert.length - 1,
+ i = 0;
+
+ for ( ; i <= last; i++ ) {
+ elems = i === last ? this : this.clone( true );
+ jQuery( insert[ i ] )[ original ]( elems );
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // .get() because push.apply(_, arraylike) throws on ancient WebKit
+ push.apply( ret, elems.get() );
+ }
+
+ return this.pushStack( ret );
+ };
+} );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+ // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+ // IE throws on elements created in popups
+ // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+ var view = elem.ownerDocument.defaultView;
+
+ if ( !view || !view.opener ) {
+ view = window;
+ }
+
+ return view.getComputedStyle( elem );
+ };
+
+var swap = function( elem, options, callback ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.call( elem );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+};
+
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( function() {
+
+ // Executing both pixelPosition & boxSizingReliable tests require only one layout
+ // so they're executed at the same time to save the second computation.
+ function computeStyleTests() {
+
+ // This is a singleton, we need to execute it only once
+ if ( !div ) {
+ return;
+ }
+
+ container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+ "margin-top:1px;padding:0;border:0";
+ div.style.cssText =
+ "position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+ "margin:auto;border:1px;padding:1px;" +
+ "width:60%;top:1%";
+ documentElement.appendChild( container ).appendChild( div );
+
+ var divStyle = window.getComputedStyle( div );
+ pixelPositionVal = divStyle.top !== "1%";
+
+ // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+ reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+ // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+ // Some styles come back with percentage values, even though they shouldn't
+ div.style.right = "60%";
+ pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+ // Support: IE 9 - 11 only
+ // Detect misreporting of content dimensions for box-sizing:border-box elements
+ boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+ // Support: IE 9 only
+ // Detect overflow:scroll screwiness (gh-3699)
+ // Support: Chrome <=64
+ // Don't get tricked when zoom affects offsetWidth (gh-4029)
+ div.style.position = "absolute";
+ scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
+
+ documentElement.removeChild( container );
+
+ // Nullify the div so it wouldn't be stored in the memory and
+ // it will also be a sign that checks already performed
+ div = null;
+ }
+
+ function roundPixelMeasures( measure ) {
+ return Math.round( parseFloat( measure ) );
+ }
+
+ var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+ reliableTrDimensionsVal, reliableMarginLeftVal,
+ container = document.createElement( "div" ),
+ div = document.createElement( "div" );
+
+ // Finish early in limited (non-browser) environments
+ if ( !div.style ) {
+ return;
+ }
+
+ // Support: IE <=9 - 11 only
+ // Style of cloned element affects source element cloned (#8908)
+ div.style.backgroundClip = "content-box";
+ div.cloneNode( true ).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ jQuery.extend( support, {
+ boxSizingReliable: function() {
+ computeStyleTests();
+ return boxSizingReliableVal;
+ },
+ pixelBoxStyles: function() {
+ computeStyleTests();
+ return pixelBoxStylesVal;
+ },
+ pixelPosition: function() {
+ computeStyleTests();
+ return pixelPositionVal;
+ },
+ reliableMarginLeft: function() {
+ computeStyleTests();
+ return reliableMarginLeftVal;
+ },
+ scrollboxSize: function() {
+ computeStyleTests();
+ return scrollboxSizeVal;
+ },
+
+ // Support: IE 9 - 11+, Edge 15 - 18+
+ // IE/Edge misreport `getComputedStyle` of table rows with width/height
+ // set in CSS while `offset*` properties report correct values.
+ // Behavior in IE 9 is more subtle than in newer versions & it passes
+ // some versions of this test; make sure not to make it pass there!
+ //
+ // Support: Firefox 70+
+ // Only Firefox includes border widths
+ // in computed dimensions. (gh-4529)
+ reliableTrDimensions: function() {
+ var table, tr, trChild, trStyle;
+ if ( reliableTrDimensionsVal == null ) {
+ table = document.createElement( "table" );
+ tr = document.createElement( "tr" );
+ trChild = document.createElement( "div" );
+
+ table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
+ tr.style.cssText = "border:1px solid";
+
+ // Support: Chrome 86+
+ // Height set through cssText does not get applied.
+ // Computed height then comes back as 0.
+ tr.style.height = "1px";
+ trChild.style.height = "9px";
+
+ // Support: Android 8 Chrome 86+
+ // In our bodyBackground.html iframe,
+ // display for all div elements is set to "inline",
+ // which causes a problem only in Android 8 Chrome 86.
+ // Ensuring the div is display: block
+ // gets around this issue.
+ trChild.style.display = "block";
+
+ documentElement
+ .appendChild( table )
+ .appendChild( tr )
+ .appendChild( trChild );
+
+ trStyle = window.getComputedStyle( tr );
+ reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
+ parseInt( trStyle.borderTopWidth, 10 ) +
+ parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
+
+ documentElement.removeChild( table );
+ }
+ return reliableTrDimensionsVal;
+ }
+ } );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+ var width, minWidth, maxWidth, ret,
+
+ // Support: Firefox 51+
+ // Retrieving style before computed somehow
+ // fixes an issue with getting wrong values
+ // on detached elements
+ style = elem.style;
+
+ computed = computed || getStyles( elem );
+
+ // getPropertyValue is needed for:
+ // .css('filter') (IE 9 only, #12537)
+ // .css('--customProperty) (#3144)
+ if ( computed ) {
+ ret = computed.getPropertyValue( name ) || computed[ name ];
+
+ if ( ret === "" && !isAttached( elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Android Browser returns percentage for some values,
+ // but width seems to be reliably pixels.
+ // This is against the CSSOM draft spec:
+ // https://drafts.csswg.org/cssom/#resolved-values
+ if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret !== undefined ?
+
+ // Support: IE <=9 - 11 only
+ // IE returns zIndex value as an integer.
+ ret + "" :
+ ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+ // Define the hook, we'll check on the first run if it's really needed.
+ return {
+ get: function() {
+ if ( conditionFn() ) {
+
+ // Hook not needed (or it's not possible to use it due
+ // to missing dependency), remove it.
+ delete this.get;
+ return;
+ }
+
+ // Hook needed; redefine it so that the support test is not executed again.
+ return ( this.get = hookFn ).apply( this, arguments );
+ }
+ };
+}
+
+
+var cssPrefixes = [ "Webkit", "Moz", "ms" ],
+ emptyStyle = document.createElement( "div" ).style,
+ vendorProps = {};
+
+// Return a vendor-prefixed property or undefined
+function vendorPropName( name ) {
+
+ // Check for vendor prefixed names
+ var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+ i = cssPrefixes.length;
+
+ while ( i-- ) {
+ name = cssPrefixes[ i ] + capName;
+ if ( name in emptyStyle ) {
+ return name;
+ }
+ }
+}
+
+// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
+function finalPropName( name ) {
+ var final = jQuery.cssProps[ name ] || vendorProps[ name ];
+
+ if ( final ) {
+ return final;
+ }
+ if ( name in emptyStyle ) {
+ return name;
+ }
+ return vendorProps[ name ] = vendorPropName( name ) || name;
+}
+
+
+var
+
+ // Swappable if display is none or starts with table
+ // except "table", "table-cell", or "table-caption"
+ // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rcustomProp = /^--/,
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssNormalTransform = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ };
+
+function setPositiveNumber( _elem, value, subtract ) {
+
+ // Any relative (+/-) values have already been
+ // normalized at this point
+ var matches = rcssNum.exec( value );
+ return matches ?
+
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+ value;
+}
+
+function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+ var i = dimension === "width" ? 1 : 0,
+ extra = 0,
+ delta = 0;
+
+ // Adjustment may not be necessary
+ if ( box === ( isBorderBox ? "border" : "content" ) ) {
+ return 0;
+ }
+
+ for ( ; i < 4; i += 2 ) {
+
+ // Both box models exclude margin
+ if ( box === "margin" ) {
+ delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+ }
+
+ // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+ if ( !isBorderBox ) {
+
+ // Add padding
+ delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+ // For "border" or "margin", add border
+ if ( box !== "padding" ) {
+ delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+ // But still keep track of it otherwise
+ } else {
+ extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+
+ // If we get here with a border-box (content + padding + border), we're seeking "content" or
+ // "padding" or "margin"
+ } else {
+
+ // For "content", subtract padding
+ if ( box === "content" ) {
+ delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+ }
+
+ // For "content" or "padding", subtract border
+ if ( box !== "margin" ) {
+ delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ }
+ }
+
+ // Account for positive content-box scroll gutter when requested by providing computedVal
+ if ( !isBorderBox && computedVal >= 0 ) {
+
+ // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+ // Assuming integer scroll gutter, subtract the rest and round down
+ delta += Math.max( 0, Math.ceil(
+ elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+ computedVal -
+ delta -
+ extra -
+ 0.5
+
+ // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+ // Use an explicit zero to avoid NaN (gh-3964)
+ ) ) || 0;
+ }
+
+ return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+ // Start with computed style
+ var styles = getStyles( elem ),
+
+ // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
+ // Fake content-box until we know it's needed to know the true value.
+ boxSizingNeeded = !support.boxSizingReliable() || extra,
+ isBorderBox = boxSizingNeeded &&
+ jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ valueIsBorderBox = isBorderBox,
+
+ val = curCSS( elem, dimension, styles ),
+ offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
+
+ // Support: Firefox <=54
+ // Return a confounding non-pixel value or feign ignorance, as appropriate.
+ if ( rnumnonpx.test( val ) ) {
+ if ( !extra ) {
+ return val;
+ }
+ val = "auto";
+ }
+
+
+ // Support: IE 9 - 11 only
+ // Use offsetWidth/offsetHeight for when box sizing is unreliable.
+ // In those cases, the computed value can be trusted to be border-box.
+ if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+ // Support: IE 10 - 11+, Edge 15 - 18+
+ // IE/Edge misreport `getComputedStyle` of table rows with width/height
+ // set in CSS while `offset*` properties report correct values.
+ // Interestingly, in some cases IE 9 doesn't suffer from this issue.
+ !support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+ // Fall back to offsetWidth/offsetHeight when value is "auto"
+ // This happens for inline elements with no explicit setting (gh-3571)
+ val === "auto" ||
+
+ // Support: Android <=4.1 - 4.3 only
+ // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+ !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+ // Make sure the element is visible & connected
+ elem.getClientRects().length ) {
+
+ isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+ // Where available, offsetWidth/offsetHeight approximate border box dimensions.
+ // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
+ // retrieved value as a content box dimension.
+ valueIsBorderBox = offsetProp in elem;
+ if ( valueIsBorderBox ) {
+ val = elem[ offsetProp ];
+ }
+ }
+
+ // Normalize "" and auto
+ val = parseFloat( val ) || 0;
+
+ // Adjust for the element's box model
+ return ( val +
+ boxModelAdjustment(
+ elem,
+ dimension,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles,
+
+ // Provide the current computed size to request scroll gutter calculation (gh-3589)
+ val
+ )
+ ) + "px";
+}
+
+jQuery.extend( {
+
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity" );
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "animationIterationCount": true,
+ "columnCount": true,
+ "fillOpacity": true,
+ "flexGrow": true,
+ "flexShrink": true,
+ "fontWeight": true,
+ "gridArea": true,
+ "gridColumn": true,
+ "gridColumnEnd": true,
+ "gridColumnStart": true,
+ "gridRow": true,
+ "gridRowEnd": true,
+ "gridRowStart": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {},
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = camelCase( name ),
+ isCustomProp = rcustomProp.test( name ),
+ style = elem.style;
+
+ // Make sure that we're working with the right name. We don't
+ // want to query the value if it is a CSS custom property
+ // since they are user-defined.
+ if ( !isCustomProp ) {
+ name = finalPropName( origName );
+ }
+
+ // Gets hook for the prefixed version, then unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // Convert "+=" or "-=" to relative numbers (#7345)
+ if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+ value = adjustCSS( elem, name, ret );
+
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that null and NaN values aren't set (#7116)
+ if ( value == null || value !== value ) {
+ return;
+ }
+
+ // If a number was passed in, add the unit (except for certain CSS properties)
+ // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
+ // "px" to a few hardcoded values.
+ if ( type === "number" && !isCustomProp ) {
+ value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+ }
+
+ // background-* props affect original clone's values
+ if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+ style[ name ] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !( "set" in hooks ) ||
+ ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+ if ( isCustomProp ) {
+ style.setProperty( name, value );
+ } else {
+ style[ name ] = value;
+ }
+ }
+
+ } else {
+
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks &&
+ ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra, styles ) {
+ var val, num, hooks,
+ origName = camelCase( name ),
+ isCustomProp = rcustomProp.test( name );
+
+ // Make sure that we're working with the right name. We don't
+ // want to modify the value if it is a CSS custom property
+ // since they are user-defined.
+ if ( !isCustomProp ) {
+ name = finalPropName( origName );
+ }
+
+ // Try prefixed name followed by the unprefixed name
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks ) {
+ val = hooks.get( elem, true, extra );
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if ( val === undefined ) {
+ val = curCSS( elem, name, styles );
+ }
+
+ // Convert "normal" to computed value
+ if ( val === "normal" && name in cssNormalTransform ) {
+ val = cssNormalTransform[ name ];
+ }
+
+ // Make numeric if forced or a qualifier was provided and val looks numeric
+ if ( extra === "" || extra ) {
+ num = parseFloat( val );
+ return extra === true || isFinite( num ) ? num || 0 : val;
+ }
+
+ return val;
+ }
+} );
+
+jQuery.each( [ "height", "width" ], function( _i, dimension ) {
+ jQuery.cssHooks[ dimension ] = {
+ get: function( elem, computed, extra ) {
+ if ( computed ) {
+
+ // Certain elements can have dimension info if we invisibly show them
+ // but it must have a current display style that would benefit
+ return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+ // Support: Safari 8+
+ // Table columns in Safari have non-zero offsetWidth & zero
+ // getBoundingClientRect().width unless display is changed.
+ // Support: IE <=11 only
+ // Running getBoundingClientRect on a disconnected node
+ // in IE throws an error.
+ ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+ swap( elem, cssShow, function() {
+ return getWidthOrHeight( elem, dimension, extra );
+ } ) :
+ getWidthOrHeight( elem, dimension, extra );
+ }
+ },
+
+ set: function( elem, value, extra ) {
+ var matches,
+ styles = getStyles( elem ),
+
+ // Only read styles.position if the test has a chance to fail
+ // to avoid forcing a reflow.
+ scrollboxSizeBuggy = !support.scrollboxSize() &&
+ styles.position === "absolute",
+
+ // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
+ boxSizingNeeded = scrollboxSizeBuggy || extra,
+ isBorderBox = boxSizingNeeded &&
+ jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ subtract = extra ?
+ boxModelAdjustment(
+ elem,
+ dimension,
+ extra,
+ isBorderBox,
+ styles
+ ) :
+ 0;
+
+ // Account for unreliable border-box dimensions by comparing offset* to computed and
+ // faking a content-box to get border and padding (gh-3699)
+ if ( isBorderBox && scrollboxSizeBuggy ) {
+ subtract -= Math.ceil(
+ elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+ parseFloat( styles[ dimension ] ) -
+ boxModelAdjustment( elem, dimension, "border", false, styles ) -
+ 0.5
+ );
+ }
+
+ // Convert to pixels if value adjustment is needed
+ if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+ ( matches[ 3 ] || "px" ) !== "px" ) {
+
+ elem.style[ dimension ] = value;
+ value = jQuery.css( elem, dimension );
+ }
+
+ return setPositiveNumber( elem, value, subtract );
+ }
+ };
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+ function( elem, computed ) {
+ if ( computed ) {
+ return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+ elem.getBoundingClientRect().left -
+ swap( elem, { marginLeft: 0 }, function() {
+ return elem.getBoundingClientRect().left;
+ } )
+ ) + "px";
+ }
+ }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+ margin: "",
+ padding: "",
+ border: "Width"
+}, function( prefix, suffix ) {
+ jQuery.cssHooks[ prefix + suffix ] = {
+ expand: function( value ) {
+ var i = 0,
+ expanded = {},
+
+ // Assumes a single number if not a string
+ parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+ for ( ; i < 4; i++ ) {
+ expanded[ prefix + cssExpand[ i ] + suffix ] =
+ parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+ }
+
+ return expanded;
+ }
+ };
+
+ if ( prefix !== "margin" ) {
+ jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+ }
+} );
+
+jQuery.fn.extend( {
+ css: function( name, value ) {
+ return access( this, function( elem, name, value ) {
+ var styles, len,
+ map = {},
+ i = 0;
+
+ if ( Array.isArray( name ) ) {
+ styles = getStyles( elem );
+ len = name.length;
+
+ for ( ; i < len; i++ ) {
+ map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ }, name, value, arguments.length > 1 );
+ }
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+ return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+ constructor: Tween,
+ init: function( elem, options, prop, end, easing, unit ) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || jQuery.easing._default;
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+ },
+ cur: function() {
+ var hooks = Tween.propHooks[ this.prop ];
+
+ return hooks && hooks.get ?
+ hooks.get( this ) :
+ Tween.propHooks._default.get( this );
+ },
+ run: function( percent ) {
+ var eased,
+ hooks = Tween.propHooks[ this.prop ];
+
+ if ( this.options.duration ) {
+ this.pos = eased = jQuery.easing[ this.easing ](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ if ( hooks && hooks.set ) {
+ hooks.set( this );
+ } else {
+ Tween.propHooks._default.set( this );
+ }
+ return this;
+ }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+ _default: {
+ get: function( tween ) {
+ var result;
+
+ // Use a property on the element directly when it is not a DOM element,
+ // or when there is no matching style property that exists.
+ if ( tween.elem.nodeType !== 1 ||
+ tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+ return tween.elem[ tween.prop ];
+ }
+
+ // Passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails.
+ // Simple values such as "10px" are parsed to Float;
+ // complex values such as "rotate(1rad)" are returned as-is.
+ result = jQuery.css( tween.elem, tween.prop, "" );
+
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function( tween ) {
+
+ // Use step hook for back compat.
+ // Use cssHook if its there.
+ // Use .style if available and use plain properties where available.
+ if ( jQuery.fx.step[ tween.prop ] ) {
+ jQuery.fx.step[ tween.prop ]( tween );
+ } else if ( tween.elem.nodeType === 1 && (
+ jQuery.cssHooks[ tween.prop ] ||
+ tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
+ jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+ } else {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+ }
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function( tween ) {
+ if ( tween.elem.nodeType && tween.elem.parentNode ) {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+};
+
+jQuery.easing = {
+ linear: function( p ) {
+ return p;
+ },
+ swing: function( p ) {
+ return 0.5 - Math.cos( p * Math.PI ) / 2;
+ },
+ _default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+ fxNow, inProgress,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rrun = /queueHooks$/;
+
+function schedule() {
+ if ( inProgress ) {
+ if ( document.hidden === false && window.requestAnimationFrame ) {
+ window.requestAnimationFrame( schedule );
+ } else {
+ window.setTimeout( schedule, jQuery.fx.interval );
+ }
+
+ jQuery.fx.tick();
+ }
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ window.setTimeout( function() {
+ fxNow = undefined;
+ } );
+ return ( fxNow = Date.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+ var which,
+ i = 0,
+ attrs = { height: type };
+
+ // If we include width, step value is 1 to do all cssExpand values,
+ // otherwise step value is 2 to skip over Left and Right
+ includeWidth = includeWidth ? 1 : 0;
+ for ( ; i < 4; i += 2 - includeWidth ) {
+ which = cssExpand[ i ];
+ attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+ }
+
+ if ( includeWidth ) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+}
+
+function createTween( value, prop, animation ) {
+ var tween,
+ collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+ index = 0,
+ length = collection.length;
+ for ( ; index < length; index++ ) {
+ if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+ // We're done with this property
+ return tween;
+ }
+ }
+}
+
+function defaultPrefilter( elem, props, opts ) {
+ var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+ isBox = "width" in props || "height" in props,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHiddenWithinTree( elem ),
+ dataShow = dataPriv.get( elem, "fxshow" );
+
+ // Queue-skipping animations hijack the fx hooks
+ if ( !opts.queue ) {
+ hooks = jQuery._queueHooks( elem, "fx" );
+ if ( hooks.unqueued == null ) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function() {
+ if ( !hooks.unqueued ) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always( function() {
+
+ // Ensure the complete handler is called before this completes
+ anim.always( function() {
+ hooks.unqueued--;
+ if ( !jQuery.queue( elem, "fx" ).length ) {
+ hooks.empty.fire();
+ }
+ } );
+ } );
+ }
+
+ // Detect show/hide animations
+ for ( prop in props ) {
+ value = props[ prop ];
+ if ( rfxtypes.test( value ) ) {
+ delete props[ prop ];
+ toggle = toggle || value === "toggle";
+ if ( value === ( hidden ? "hide" : "show" ) ) {
+
+ // Pretend to be hidden if this is a "show" and
+ // there is still data from a stopped show/hide
+ if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+ hidden = true;
+
+ // Ignore all other no-op show/hide data
+ } else {
+ continue;
+ }
+ }
+ orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+ }
+ }
+
+ // Bail out if this is a no-op like .hide().hide()
+ propTween = !jQuery.isEmptyObject( props );
+ if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+ return;
+ }
+
+ // Restrict "overflow" and "display" styles during box animations
+ if ( isBox && elem.nodeType === 1 ) {
+
+ // Support: IE <=9 - 11, Edge 12 - 15
+ // Record all 3 overflow attributes because IE does not infer the shorthand
+ // from identically-valued overflowX and overflowY and Edge just mirrors
+ // the overflowX value there.
+ opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+ // Identify a display type, preferring old show/hide data over the CSS cascade
+ restoreDisplay = dataShow && dataShow.display;
+ if ( restoreDisplay == null ) {
+ restoreDisplay = dataPriv.get( elem, "display" );
+ }
+ display = jQuery.css( elem, "display" );
+ if ( display === "none" ) {
+ if ( restoreDisplay ) {
+ display = restoreDisplay;
+ } else {
+
+ // Get nonempty value(s) by temporarily forcing visibility
+ showHide( [ elem ], true );
+ restoreDisplay = elem.style.display || restoreDisplay;
+ display = jQuery.css( elem, "display" );
+ showHide( [ elem ] );
+ }
+ }
+
+ // Animate inline elements as inline-block
+ if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+ if ( jQuery.css( elem, "float" ) === "none" ) {
+
+ // Restore the original display value at the end of pure show/hide animations
+ if ( !propTween ) {
+ anim.done( function() {
+ style.display = restoreDisplay;
+ } );
+ if ( restoreDisplay == null ) {
+ display = style.display;
+ restoreDisplay = display === "none" ? "" : display;
+ }
+ }
+ style.display = "inline-block";
+ }
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ anim.always( function() {
+ style.overflow = opts.overflow[ 0 ];
+ style.overflowX = opts.overflow[ 1 ];
+ style.overflowY = opts.overflow[ 2 ];
+ } );
+ }
+
+ // Implement show/hide animations
+ propTween = false;
+ for ( prop in orig ) {
+
+ // General show/hide setup for this element animation
+ if ( !propTween ) {
+ if ( dataShow ) {
+ if ( "hidden" in dataShow ) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+ }
+
+ // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+ if ( toggle ) {
+ dataShow.hidden = !hidden;
+ }
+
+ // Show elements before animating them
+ if ( hidden ) {
+ showHide( [ elem ], true );
+ }
+
+ /* eslint-disable no-loop-func */
+
+ anim.done( function() {
+
+ /* eslint-enable no-loop-func */
+
+ // The final step of a "hide" animation is actually hiding the element
+ if ( !hidden ) {
+ showHide( [ elem ] );
+ }
+ dataPriv.remove( elem, "fxshow" );
+ for ( prop in orig ) {
+ jQuery.style( elem, prop, orig[ prop ] );
+ }
+ } );
+ }
+
+ // Per-property setup
+ propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+ if ( !( prop in dataShow ) ) {
+ dataShow[ prop ] = propTween.start;
+ if ( hidden ) {
+ propTween.end = propTween.start;
+ propTween.start = 0;
+ }
+ }
+ }
+}
+
+function propFilter( props, specialEasing ) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for ( index in props ) {
+ name = camelCase( index );
+ easing = specialEasing[ name ];
+ value = props[ index ];
+ if ( Array.isArray( value ) ) {
+ easing = value[ 1 ];
+ value = props[ index ] = value[ 0 ];
+ }
+
+ if ( index !== name ) {
+ props[ name ] = value;
+ delete props[ index ];
+ }
+
+ hooks = jQuery.cssHooks[ name ];
+ if ( hooks && "expand" in hooks ) {
+ value = hooks.expand( value );
+ delete props[ name ];
+
+ // Not quite $.extend, this won't overwrite existing keys.
+ // Reusing 'index' because we have the correct "name"
+ for ( index in value ) {
+ if ( !( index in props ) ) {
+ props[ index ] = value[ index ];
+ specialEasing[ index ] = easing;
+ }
+ }
+ } else {
+ specialEasing[ name ] = easing;
+ }
+ }
+}
+
+function Animation( elem, properties, options ) {
+ var result,
+ stopped,
+ index = 0,
+ length = Animation.prefilters.length,
+ deferred = jQuery.Deferred().always( function() {
+
+ // Don't match elem in the :animated selector
+ delete tick.elem;
+ } ),
+ tick = function() {
+ if ( stopped ) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+ // Support: Android 2.3 only
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for ( ; index < length; index++ ) {
+ animation.tweens[ index ].run( percent );
+ }
+
+ deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+ // If there's more to do, yield
+ if ( percent < 1 && length ) {
+ return remaining;
+ }
+
+ // If this was an empty animation, synthesize a final progress notification
+ if ( !length ) {
+ deferred.notifyWith( elem, [ animation, 1, 0 ] );
+ }
+
+ // Resolve the animation and report its conclusion
+ deferred.resolveWith( elem, [ animation ] );
+ return false;
+ },
+ animation = deferred.promise( {
+ elem: elem,
+ props: jQuery.extend( {}, properties ),
+ opts: jQuery.extend( true, {
+ specialEasing: {},
+ easing: jQuery.easing._default
+ }, options ),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function( prop, end ) {
+ var tween = jQuery.Tween( elem, animation.opts, prop, end,
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
+ animation.tweens.push( tween );
+ return tween;
+ },
+ stop: function( gotoEnd ) {
+ var index = 0,
+
+ // If we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if ( stopped ) {
+ return this;
+ }
+ stopped = true;
+ for ( ; index < length; index++ ) {
+ animation.tweens[ index ].run( 1 );
+ }
+
+ // Resolve when we played the last frame; otherwise, reject
+ if ( gotoEnd ) {
+ deferred.notifyWith( elem, [ animation, 1, 0 ] );
+ deferred.resolveWith( elem, [ animation, gotoEnd ] );
+ } else {
+ deferred.rejectWith( elem, [ animation, gotoEnd ] );
+ }
+ return this;
+ }
+ } ),
+ props = animation.props;
+
+ propFilter( props, animation.opts.specialEasing );
+
+ for ( ; index < length; index++ ) {
+ result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+ if ( result ) {
+ if ( isFunction( result.stop ) ) {
+ jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+ result.stop.bind( result );
+ }
+ return result;
+ }
+ }
+
+ jQuery.map( props, createTween, animation );
+
+ if ( isFunction( animation.opts.start ) ) {
+ animation.opts.start.call( elem, animation );
+ }
+
+ // Attach callbacks from options
+ animation
+ .progress( animation.opts.progress )
+ .done( animation.opts.done, animation.opts.complete )
+ .fail( animation.opts.fail )
+ .always( animation.opts.always );
+
+ jQuery.fx.timer(
+ jQuery.extend( tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ } )
+ );
+
+ return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+ tweeners: {
+ "*": [ function( prop, value ) {
+ var tween = this.createTween( prop, value );
+ adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+ return tween;
+ } ]
+ },
+
+ tweener: function( props, callback ) {
+ if ( isFunction( props ) ) {
+ callback = props;
+ props = [ "*" ];
+ } else {
+ props = props.match( rnothtmlwhite );
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for ( ; index < length; index++ ) {
+ prop = props[ index ];
+ Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+ Animation.tweeners[ prop ].unshift( callback );
+ }
+ },
+
+ prefilters: [ defaultPrefilter ],
+
+ prefilter: function( callback, prepend ) {
+ if ( prepend ) {
+ Animation.prefilters.unshift( callback );
+ } else {
+ Animation.prefilters.push( callback );
+ }
+ }
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+ complete: fn || !fn && easing ||
+ isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !isFunction( easing ) && easing
+ };
+
+ // Go to the end state if fx are off
+ if ( jQuery.fx.off ) {
+ opt.duration = 0;
+
+ } else {
+ if ( typeof opt.duration !== "number" ) {
+ if ( opt.duration in jQuery.fx.speeds ) {
+ opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+ } else {
+ opt.duration = jQuery.fx.speeds._default;
+ }
+ }
+ }
+
+ // Normalize opt.queue - true/undefined/null -> "fx"
+ if ( opt.queue == null || opt.queue === true ) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function() {
+ if ( isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue ) {
+ jQuery.dequeue( this, opt.queue );
+ }
+ };
+
+ return opt;
+};
+
+jQuery.fn.extend( {
+ fadeTo: function( speed, to, easing, callback ) {
+
+ // Show any hidden elements after setting opacity to 0
+ return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+ // Animate to the value specified
+ .end().animate( { opacity: to }, speed, easing, callback );
+ },
+ animate: function( prop, speed, easing, callback ) {
+ var empty = jQuery.isEmptyObject( prop ),
+ optall = jQuery.speed( speed, easing, callback ),
+ doAnimation = function() {
+
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+ // Empty animations, or finishing resolves immediately
+ if ( empty || dataPriv.get( this, "finish" ) ) {
+ anim.stop( true );
+ }
+ };
+
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each( doAnimation ) :
+ this.queue( optall.queue, doAnimation );
+ },
+ stop: function( type, clearQueue, gotoEnd ) {
+ var stopQueue = function( hooks ) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop( gotoEnd );
+ };
+
+ if ( typeof type !== "string" ) {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if ( clearQueue ) {
+ this.queue( type || "fx", [] );
+ }
+
+ return this.each( function() {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = dataPriv.get( this );
+
+ if ( index ) {
+ if ( data[ index ] && data[ index ].stop ) {
+ stopQueue( data[ index ] );
+ }
+ } else {
+ for ( index in data ) {
+ if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+ stopQueue( data[ index ] );
+ }
+ }
+ }
+
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this &&
+ ( type == null || timers[ index ].queue === type ) ) {
+
+ timers[ index ].anim.stop( gotoEnd );
+ dequeue = false;
+ timers.splice( index, 1 );
+ }
+ }
+
+ // Start the next in the queue if the last step wasn't forced.
+ // Timers currently will call their complete callbacks, which
+ // will dequeue but only if they were gotoEnd.
+ if ( dequeue || !gotoEnd ) {
+ jQuery.dequeue( this, type );
+ }
+ } );
+ },
+ finish: function( type ) {
+ if ( type !== false ) {
+ type = type || "fx";
+ }
+ return this.each( function() {
+ var index,
+ data = dataPriv.get( this ),
+ queue = data[ type + "queue" ],
+ hooks = data[ type + "queueHooks" ],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // Enable finishing flag on private data
+ data.finish = true;
+
+ // Empty the queue first
+ jQuery.queue( this, type, [] );
+
+ if ( hooks && hooks.stop ) {
+ hooks.stop.call( this, true );
+ }
+
+ // Look for any active animations, and finish them
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+ timers[ index ].anim.stop( true );
+ timers.splice( index, 1 );
+ }
+ }
+
+ // Look for any animations in the old queue and finish them
+ for ( index = 0; index < length; index++ ) {
+ if ( queue[ index ] && queue[ index ].finish ) {
+ queue[ index ].finish.call( this );
+ }
+ }
+
+ // Turn off finishing flag
+ delete data.finish;
+ } );
+ }
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
+ var cssFn = jQuery.fn[ name ];
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply( this, arguments ) :
+ this.animate( genFx( name, true ), speed, easing, callback );
+ };
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+ slideDown: genFx( "show" ),
+ slideUp: genFx( "hide" ),
+ slideToggle: genFx( "toggle" ),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+ var timer,
+ i = 0,
+ timers = jQuery.timers;
+
+ fxNow = Date.now();
+
+ for ( ; i < timers.length; i++ ) {
+ timer = timers[ i ];
+
+ // Run the timer and safely remove it when done (allowing for external removal)
+ if ( !timer() && timers[ i ] === timer ) {
+ timers.splice( i--, 1 );
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+ jQuery.timers.push( timer );
+ jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+ if ( inProgress ) {
+ return;
+ }
+
+ inProgress = true;
+ schedule();
+};
+
+jQuery.fx.stop = function() {
+ inProgress = null;
+};
+
+jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+
+ // Default speed
+ _default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = window.setTimeout( next, time );
+ hooks.stop = function() {
+ window.clearTimeout( timeout );
+ };
+ } );
+};
+
+
+( function() {
+ var input = document.createElement( "input" ),
+ select = document.createElement( "select" ),
+ opt = select.appendChild( document.createElement( "option" ) );
+
+ input.type = "checkbox";
+
+ // Support: Android <=4.3 only
+ // Default value for a checkbox should be "on"
+ support.checkOn = input.value !== "";
+
+ // Support: IE <=11 only
+ // Must access selectedIndex to make default options select
+ support.optSelected = opt.selected;
+
+ // Support: IE <=11 only
+ // An input loses its value after becoming a radio
+ input = document.createElement( "input" );
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+ attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+ attr: function( name, value ) {
+ return access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each( function() {
+ jQuery.removeAttr( this, name );
+ } );
+ }
+} );
+
+jQuery.extend( {
+ attr: function( elem, name, value ) {
+ var ret, hooks,
+ nType = elem.nodeType;
+
+ // Don't get/set attributes on text, comment and attribute nodes
+ if ( nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === "undefined" ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ // Attribute hooks are determined by the lowercase version
+ // Grab necessary hook if one is defined
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+ hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+ ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+ }
+
+ if ( value !== undefined ) {
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return;
+ }
+
+ if ( hooks && "set" in hooks &&
+ ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+ return ret;
+ }
+
+ elem.setAttribute( name, value + "" );
+ return value;
+ }
+
+ if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+ return ret;
+ }
+
+ ret = jQuery.find.attr( elem, name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ? undefined : ret;
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ if ( !support.radioValue && value === "radio" &&
+ nodeName( elem, "input" ) ) {
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var name,
+ i = 0,
+
+ // Attribute names can contain non-HTML whitespace characters
+ // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+ attrNames = value && value.match( rnothtmlwhite );
+
+ if ( attrNames && elem.nodeType === 1 ) {
+ while ( ( name = attrNames[ i++ ] ) ) {
+ elem.removeAttribute( name );
+ }
+ }
+ }
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+ set: function( elem, value, name ) {
+ if ( value === false ) {
+
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ elem.setAttribute( name, name );
+ }
+ return name;
+ }
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
+ var getter = attrHandle[ name ] || jQuery.find.attr;
+
+ attrHandle[ name ] = function( elem, name, isXML ) {
+ var ret, handle,
+ lowercaseName = name.toLowerCase();
+
+ if ( !isXML ) {
+
+ // Avoid an infinite loop by temporarily removing this function from the getter
+ handle = attrHandle[ lowercaseName ];
+ attrHandle[ lowercaseName ] = ret;
+ ret = getter( elem, name, isXML ) != null ?
+ lowercaseName :
+ null;
+ attrHandle[ lowercaseName ] = handle;
+ }
+ return ret;
+ };
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+ rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+ prop: function( name, value ) {
+ return access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ return this.each( function() {
+ delete this[ jQuery.propFix[ name ] || name ];
+ } );
+ }
+} );
+
+jQuery.extend( {
+ prop: function( elem, name, value ) {
+ var ret, hooks,
+ nType = elem.nodeType;
+
+ // Don't get/set properties on text, comment and attribute nodes
+ if ( nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks &&
+ ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+ return ret;
+ }
+
+ return ( elem[ name ] = value );
+ }
+
+ if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+ return ret;
+ }
+
+ return elem[ name ];
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+
+ // Support: IE <=9 - 11 only
+ // elem.tabIndex doesn't always return the
+ // correct value when it hasn't been explicitly set
+ // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ // Use proper attribute retrieval(#12072)
+ var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+ if ( tabindex ) {
+ return parseInt( tabindex, 10 );
+ }
+
+ if (
+ rfocusable.test( elem.nodeName ) ||
+ rclickable.test( elem.nodeName ) &&
+ elem.href
+ ) {
+ return 0;
+ }
+
+ return -1;
+ }
+ }
+ },
+
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ }
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+ jQuery.propHooks.selected = {
+ get: function( elem ) {
+
+ /* eslint no-unused-expressions: "off" */
+
+ var parent = elem.parentNode;
+ if ( parent && parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ return null;
+ },
+ set: function( elem ) {
+
+ /* eslint no-unused-expressions: "off" */
+
+ var parent = elem.parentNode;
+ if ( parent ) {
+ parent.selectedIndex;
+
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
+ };
+}
+
+jQuery.each( [
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+], function() {
+ jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+ // Strip and collapse whitespace according to HTML spec
+ // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+ function stripAndCollapse( value ) {
+ var tokens = value.match( rnothtmlwhite ) || [];
+ return tokens.join( " " );
+ }
+
+
+function getClass( elem ) {
+ return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+ if ( Array.isArray( value ) ) {
+ return value;
+ }
+ if ( typeof value === "string" ) {
+ return value.match( rnothtmlwhite ) || [];
+ }
+ return [];
+}
+
+jQuery.fn.extend( {
+ addClass: function( value ) {
+ var classes, elem, cur, curValue, clazz, j, finalValue,
+ i = 0;
+
+ if ( isFunction( value ) ) {
+ return this.each( function( j ) {
+ jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+ } );
+ }
+
+ classes = classesToArray( value );
+
+ if ( classes.length ) {
+ while ( ( elem = this[ i++ ] ) ) {
+ curValue = getClass( elem );
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+ if ( cur ) {
+ j = 0;
+ while ( ( clazz = classes[ j++ ] ) ) {
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+ cur += clazz + " ";
+ }
+ }
+
+ // Only assign if different to avoid unneeded rendering.
+ finalValue = stripAndCollapse( cur );
+ if ( curValue !== finalValue ) {
+ elem.setAttribute( "class", finalValue );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classes, elem, cur, curValue, clazz, j, finalValue,
+ i = 0;
+
+ if ( isFunction( value ) ) {
+ return this.each( function( j ) {
+ jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+ } );
+ }
+
+ if ( !arguments.length ) {
+ return this.attr( "class", "" );
+ }
+
+ classes = classesToArray( value );
+
+ if ( classes.length ) {
+ while ( ( elem = this[ i++ ] ) ) {
+ curValue = getClass( elem );
+
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+ if ( cur ) {
+ j = 0;
+ while ( ( clazz = classes[ j++ ] ) ) {
+
+ // Remove *all* instances
+ while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+ cur = cur.replace( " " + clazz + " ", " " );
+ }
+ }
+
+ // Only assign if different to avoid unneeded rendering.
+ finalValue = stripAndCollapse( cur );
+ if ( curValue !== finalValue ) {
+ elem.setAttribute( "class", finalValue );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isValidValue = type === "string" || Array.isArray( value );
+
+ if ( typeof stateVal === "boolean" && isValidValue ) {
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
+ }
+
+ if ( isFunction( value ) ) {
+ return this.each( function( i ) {
+ jQuery( this ).toggleClass(
+ value.call( this, i, getClass( this ), stateVal ),
+ stateVal
+ );
+ } );
+ }
+
+ return this.each( function() {
+ var className, i, self, classNames;
+
+ if ( isValidValue ) {
+
+ // Toggle individual class names
+ i = 0;
+ self = jQuery( this );
+ classNames = classesToArray( value );
+
+ while ( ( className = classNames[ i++ ] ) ) {
+
+ // Check each className given, space separated list
+ if ( self.hasClass( className ) ) {
+ self.removeClass( className );
+ } else {
+ self.addClass( className );
+ }
+ }
+
+ // Toggle whole class name
+ } else if ( value === undefined || type === "boolean" ) {
+ className = getClass( this );
+ if ( className ) {
+
+ // Store className if set
+ dataPriv.set( this, "__className__", className );
+ }
+
+ // If the element has a class name or if we're passed `false`,
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ if ( this.setAttribute ) {
+ this.setAttribute( "class",
+ className || value === false ?
+ "" :
+ dataPriv.get( this, "__className__" ) || ""
+ );
+ }
+ }
+ } );
+ },
+
+ hasClass: function( selector ) {
+ var className, elem,
+ i = 0;
+
+ className = " " + selector + " ";
+ while ( ( elem = this[ i++ ] ) ) {
+ if ( elem.nodeType === 1 &&
+ ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+ val: function( value ) {
+ var hooks, ret, valueIsFunction,
+ elem = this[ 0 ];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] ||
+ jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks &&
+ "get" in hooks &&
+ ( ret = hooks.get( elem, "value" ) ) !== undefined
+ ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ // Handle most common string cases
+ if ( typeof ret === "string" ) {
+ return ret.replace( rreturn, "" );
+ }
+
+ // Handle cases where value is null/undef or number
+ return ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ valueIsFunction = isFunction( value );
+
+ return this.each( function( i ) {
+ var val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( valueIsFunction ) {
+ val = value.call( this, i, jQuery( this ).val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+
+ } else if ( typeof val === "number" ) {
+ val += "";
+
+ } else if ( Array.isArray( val ) ) {
+ val = jQuery.map( val, function( value ) {
+ return value == null ? "" : value + "";
+ } );
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ } );
+ }
+} );
+
+jQuery.extend( {
+ valHooks: {
+ option: {
+ get: function( elem ) {
+
+ var val = jQuery.find.attr( elem, "value" );
+ return val != null ?
+ val :
+
+ // Support: IE <=10 - 11 only
+ // option.text throws exceptions (#14686, #14858)
+ // Strip and collapse whitespace
+ // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+ stripAndCollapse( jQuery.text( elem ) );
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, option, i,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one",
+ values = one ? null : [],
+ max = one ? index + 1 : options.length;
+
+ if ( index < 0 ) {
+ i = max;
+
+ } else {
+ i = one ? index : 0;
+ }
+
+ // Loop through all the selected options
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // Support: IE <=9 only
+ // IE8-9 doesn't update selected after form reset (#2551)
+ if ( ( option.selected || i === index ) &&
+
+ // Don't return options that are disabled or in a disabled optgroup
+ !option.disabled &&
+ ( !option.parentNode.disabled ||
+ !nodeName( option.parentNode, "optgroup" ) ) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray( value ),
+ i = options.length;
+
+ while ( i-- ) {
+ option = options[ i ];
+
+ /* eslint-disable no-cond-assign */
+
+ if ( option.selected =
+ jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+ ) {
+ optionSet = true;
+ }
+
+ /* eslint-enable no-cond-assign */
+ }
+
+ // Force browsers to behave consistently when non-matching value is set
+ if ( !optionSet ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ set: function( elem, value ) {
+ if ( Array.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+ }
+ }
+ };
+ if ( !support.checkOn ) {
+ jQuery.valHooks[ this ].get = function( elem ) {
+ return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+ };
+ }
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ stopPropagationCallback = function( e ) {
+ e.stopPropagation();
+ };
+
+jQuery.extend( jQuery.event, {
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+
+ var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+ eventPath = [ elem || document ],
+ type = hasOwn.call( event, "type" ) ? event.type : event,
+ namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+ cur = lastElement = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf( "." ) > -1 ) {
+
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split( "." );
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[ jQuery.expando ] ?
+ event :
+ new jQuery.Event( type, typeof event === "object" && event );
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join( "." );
+ event.rnamespace = event.namespace ?
+ new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [ event ] :
+ jQuery.makeArray( data, [ event ] );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ if ( !rfocusMorph.test( bubbleType + type ) ) {
+ cur = cur.parentNode;
+ }
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push( cur );
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( tmp === ( elem.ownerDocument || document ) ) {
+ eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+ lastElement = cur;
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
+ dataPriv.get( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Native handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && handle.apply && acceptData( cur ) ) {
+ event.result = handle.apply( cur, data );
+ if ( event.result === false ) {
+ event.preventDefault();
+ }
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( ( !special._default ||
+ special._default.apply( eventPath.pop(), data ) === false ) &&
+ acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name as the event.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ ontype ];
+
+ if ( tmp ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+
+ if ( event.isPropagationStopped() ) {
+ lastElement.addEventListener( type, stopPropagationCallback );
+ }
+
+ elem[ type ]();
+
+ if ( event.isPropagationStopped() ) {
+ lastElement.removeEventListener( type, stopPropagationCallback );
+ }
+
+ jQuery.event.triggered = undefined;
+
+ if ( tmp ) {
+ elem[ ontype ] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ // Piggyback on a donor event to simulate a different one
+ // Used only for `focus(in | out)` events
+ simulate: function( type, elem, event ) {
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true
+ }
+ );
+
+ jQuery.event.trigger( e, null, elem );
+ }
+
+} );
+
+jQuery.fn.extend( {
+
+ trigger: function( type, data ) {
+ return this.each( function() {
+ jQuery.event.trigger( type, data, this );
+ } );
+ },
+ triggerHandler: function( type, data ) {
+ var elem = this[ 0 ];
+ if ( elem ) {
+ return jQuery.event.trigger( type, data, elem, true );
+ }
+ }
+} );
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+ jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler on the document while someone wants focusin/focusout
+ var handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+
+ // Handle: regular nodes (via `this.ownerDocument`), window
+ // (via `this.document`) & document (via `this`).
+ var doc = this.ownerDocument || this.document || this,
+ attaches = dataPriv.access( doc, fix );
+
+ if ( !attaches ) {
+ doc.addEventListener( orig, handler, true );
+ }
+ dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+ },
+ teardown: function() {
+ var doc = this.ownerDocument || this.document || this,
+ attaches = dataPriv.access( doc, fix ) - 1;
+
+ if ( !attaches ) {
+ doc.removeEventListener( orig, handler, true );
+ dataPriv.remove( doc, fix );
+
+ } else {
+ dataPriv.access( doc, fix, attaches );
+ }
+ }
+ };
+ } );
+}
+var location = window.location;
+
+var nonce = { guid: Date.now() };
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+ var xml, parserErrorElem;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+
+ // Support: IE 9 - 11 only
+ // IE throws on parseFromString with invalid input.
+ try {
+ xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+ } catch ( e ) {}
+
+ parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
+ if ( !xml || parserErrorElem ) {
+ jQuery.error( "Invalid XML: " + (
+ parserErrorElem ?
+ jQuery.map( parserErrorElem.childNodes, function( el ) {
+ return el.textContent;
+ } ).join( "\n" ) :
+ data
+ ) );
+ }
+ return xml;
+};
+
+
+var
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+ var name;
+
+ if ( Array.isArray( obj ) ) {
+
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams(
+ prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+ v,
+ traditional,
+ add
+ );
+ }
+ } );
+
+ } else if ( !traditional && toType( obj ) === "object" ) {
+
+ // Serialize object item.
+ for ( name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+ var prefix,
+ s = [],
+ add = function( key, valueOrFunction ) {
+
+ // If value is a function, invoke it and use its return value
+ var value = isFunction( valueOrFunction ) ?
+ valueOrFunction() :
+ valueOrFunction;
+
+ s[ s.length ] = encodeURIComponent( key ) + "=" +
+ encodeURIComponent( value == null ? "" : value );
+ };
+
+ if ( a == null ) {
+ return "";
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ } );
+
+ } else {
+
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+ serializeArray: function() {
+ return this.map( function() {
+
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop( this, "elements" );
+ return elements ? jQuery.makeArray( elements ) : this;
+ } ).filter( function() {
+ var type = this.type;
+
+ // Use .is( ":disabled" ) so that fieldset[disabled] works
+ return this.name && !jQuery( this ).is( ":disabled" ) &&
+ rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+ ( this.checked || !rcheckableType.test( type ) );
+ } ).map( function( _i, elem ) {
+ var val = jQuery( this ).val();
+
+ if ( val == null ) {
+ return null;
+ }
+
+ if ( Array.isArray( val ) ) {
+ return jQuery.map( val, function( val ) {
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ } );
+ }
+
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ } ).get();
+ }
+} );
+
+
+var
+ r20 = /%20/g,
+ rhash = /#.*$/,
+ rantiCache = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat( "*" ),
+
+ // Anchor tag for parsing the document origin
+ originAnchor = document.createElement( "a" );
+
+originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+ if ( isFunction( func ) ) {
+
+ // For each dataType in the dataTypeExpression
+ while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+ // Prepend if requested
+ if ( dataType[ 0 ] === "+" ) {
+ dataType = dataType.slice( 1 ) || "*";
+ ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+ // Otherwise append
+ } else {
+ ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+ }
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect( dataType ) {
+ var selected;
+ inspected[ dataType ] = true;
+ jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+ var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+ if ( typeof dataTypeOrTransport === "string" &&
+ !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+ options.dataTypes.unshift( dataTypeOrTransport );
+ inspect( dataTypeOrTransport );
+ return false;
+ } else if ( seekingTransport ) {
+ return !( selected = dataTypeOrTransport );
+ }
+ } );
+ return selected;
+ }
+
+ return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for ( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+
+ return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var ct, type, finalDataType, firstDataType,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while ( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if ( dataTypes[ 1 ] ) {
+ for ( conv in s.converters ) {
+ converters[ conv.toLowerCase() ] = s.converters[ conv ];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while ( current ) {
+
+ if ( s.responseFields[ current ] ) {
+ jqXHR[ s.responseFields[ current ] ] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if ( !prev && isSuccess && s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if ( current ) {
+
+ // There's only work to do if current dataType is non-auto
+ if ( current === "*" ) {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Seek a direct converter
+ conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+ // If none found, seek a pair
+ if ( !conv ) {
+ for ( conv2 in converters ) {
+
+ // If conv2 outputs current
+ tmp = conv2.split( " " );
+ if ( tmp[ 1 ] === current ) {
+
+ // If prev can be converted to accepted input
+ conv = converters[ prev + " " + tmp[ 0 ] ] ||
+ converters[ "* " + tmp[ 0 ] ];
+ if ( conv ) {
+
+ // Condense equivalence converters
+ if ( conv === true ) {
+ conv = converters[ conv2 ];
+
+ // Otherwise, insert the intermediate dataType
+ } else if ( converters[ conv2 ] !== true ) {
+ current = tmp[ 0 ];
+ dataTypes.unshift( tmp[ 1 ] );
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if ( conv !== true ) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if ( conv && s.throws ) {
+ response = conv( response );
+ } else {
+ try {
+ response = conv( response );
+ } catch ( e ) {
+ return {
+ state: "parsererror",
+ error: conv ? e : "No conversion from " + prev + " to " + current
+ };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: location.href,
+ type: "GET",
+ isLocal: rlocalProtocol.test( location.protocol ),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /\bxml\b/,
+ html: /\bhtml/,
+ json: /\bjson\b/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": JSON.parse,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+ // Extending ajaxSettings
+ ajaxExtend( jQuery.ajaxSettings, target );
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var transport,
+
+ // URL without anti-cache param
+ cacheURL,
+
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+
+ // timeout handle
+ timeoutTimer,
+
+ // Url cleanup var
+ urlAnchor,
+
+ // Request state (becomes false upon send and true upon completion)
+ completed,
+
+ // To know if global events are to be dispatched
+ fireGlobals,
+
+ // Loop variable
+ i,
+
+ // uncached part of the url
+ uncached,
+
+ // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+
+ // Callbacks context
+ callbackContext = s.context || s,
+
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context &&
+ ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery( callbackContext ) :
+ jQuery.event,
+
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks( "once memory" ),
+
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+
+ // Default abort message
+ strAbort = "canceled",
+
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( completed ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+ responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
+ ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
+ .concat( match[ 2 ] );
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() + " " ];
+ }
+ return match == null ? null : match.join( ", " );
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return completed ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ if ( completed == null ) {
+ name = requestHeadersNames[ name.toLowerCase() ] =
+ requestHeadersNames[ name.toLowerCase() ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( completed == null ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function( map ) {
+ var code;
+ if ( map ) {
+ if ( completed ) {
+
+ // Execute the appropriate callbacks
+ jqXHR.always( map[ jqXHR.status ] );
+ } else {
+
+ // Lazy-add the new callbacks in a way that preserves old ones
+ for ( code in map ) {
+ statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+ }
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ var finalText = statusText || strAbort;
+ if ( transport ) {
+ transport.abort( finalText );
+ }
+ done( 0, finalText );
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise( jqXHR );
+
+ // Add protocol if not provided (prefilters might expect it)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || location.href ) + "" )
+ .replace( rprotocol, location.protocol + "//" );
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+ // A cross-domain request is in order when the origin doesn't match the current origin.
+ if ( s.crossDomain == null ) {
+ urlAnchor = document.createElement( "a" );
+
+ // Support: IE <=8 - 11, Edge 12 - 15
+ // IE throws exception on accessing the href property if url is malformed,
+ // e.g. http://example.com:80x/
+ try {
+ urlAnchor.href = s.url;
+
+ // Support: IE <=8 - 11 only
+ // Anchor's host property isn't correctly set when s.url is relative
+ urlAnchor.href = urlAnchor.href;
+ s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+ urlAnchor.protocol + "//" + urlAnchor.host;
+ } catch ( e ) {
+
+ // If there is an error parsing the URL, assume it is crossDomain,
+ // it can be rejected by the transport if it is invalid
+ s.crossDomain = true;
+ }
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefilter, stop there
+ if ( completed ) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+ fireGlobals = jQuery.event && s.global;
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ // Remove hash to simplify url manipulation
+ cacheURL = s.url.replace( rhash, "" );
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // Remember the hash so we can put it back
+ uncached = s.url.slice( cacheURL.length );
+
+ // If data is available and should be processed, append data to url
+ if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+ cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add or update anti-cache param if needed
+ if ( s.cache === false ) {
+ cacheURL = cacheURL.replace( rantiCache, "$1" );
+ uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
+ uncached;
+ }
+
+ // Put hash and anti-cache on the URL that will be requested (gh-1732)
+ s.url = cacheURL + uncached;
+
+ // Change '%20' to '+' if this is encoded form body content (gh-2658)
+ } else if ( s.data && s.processData &&
+ ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+ s.data = s.data.replace( r20, "+" );
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+ }
+ if ( jQuery.etag[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+ s.accepts[ s.dataTypes[ 0 ] ] +
+ ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend &&
+ ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // Aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ completeDeferred.add( s.complete );
+ jqXHR.done( s.success );
+ jqXHR.fail( s.error );
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+
+ // If request was aborted inside ajaxSend, stop there
+ if ( completed ) {
+ return jqXHR;
+ }
+
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = window.setTimeout( function() {
+ jqXHR.abort( "timeout" );
+ }, s.timeout );
+ }
+
+ try {
+ completed = false;
+ transport.send( requestHeaders, done );
+ } catch ( e ) {
+
+ // Rethrow post-completion exceptions
+ if ( completed ) {
+ throw e;
+ }
+
+ // Propagate others as results
+ done( -1, e );
+ }
+ }
+
+ // Callback for when everything is done
+ function done( status, nativeStatusText, responses, headers ) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Ignore repeat invocations
+ if ( completed ) {
+ return;
+ }
+
+ completed = true;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ window.clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if ( responses ) {
+ response = ajaxHandleResponses( s, jqXHR, responses );
+ }
+
+ // Use a noop converter for missing script but not if jsonp
+ if ( !isSuccess &&
+ jQuery.inArray( "script", s.dataTypes ) > -1 &&
+ jQuery.inArray( "json", s.dataTypes ) < 0 ) {
+ s.converters[ "text script" ] = function() {};
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+ // If successful, handle type chaining
+ if ( isSuccess ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ modified = jqXHR.getResponseHeader( "Last-Modified" );
+ if ( modified ) {
+ jQuery.lastModified[ cacheURL ] = modified;
+ }
+ modified = jqXHR.getResponseHeader( "etag" );
+ if ( modified ) {
+ jQuery.etag[ cacheURL ] = modified;
+ }
+ }
+
+ // if no content
+ if ( status === 204 || s.type === "HEAD" ) {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if ( status === 304 ) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+
+ // Extract error from statusText and normalize for non-aborts
+ error = statusText;
+ if ( status || !statusText ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ }
+} );
+
+jQuery.each( [ "get", "post" ], function( _i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+
+ // Shift arguments if data argument was omitted
+ if ( isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ // The url can be an options object (which then must have .url)
+ return jQuery.ajax( jQuery.extend( {
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ }, jQuery.isPlainObject( url ) && url ) );
+ };
+} );
+
+jQuery.ajaxPrefilter( function( s ) {
+ var i;
+ for ( i in s.headers ) {
+ if ( i.toLowerCase() === "content-type" ) {
+ s.contentType = s.headers[ i ] || "";
+ }
+ }
+} );
+
+
+jQuery._evalUrl = function( url, options, doc ) {
+ return jQuery.ajax( {
+ url: url,
+
+ // Make this explicit, since user can override this through ajaxSetup (#11264)
+ type: "GET",
+ dataType: "script",
+ cache: true,
+ async: false,
+ global: false,
+
+ // Only evaluate the response if it is successful (gh-4126)
+ // dataFilter is not invoked for failure responses, so using it instead
+ // of the default converter is kludgy but it works.
+ converters: {
+ "text script": function() {}
+ },
+ dataFilter: function( response ) {
+ jQuery.globalEval( response, options, doc );
+ }
+ } );
+};
+
+
+jQuery.fn.extend( {
+ wrapAll: function( html ) {
+ var wrap;
+
+ if ( this[ 0 ] ) {
+ if ( isFunction( html ) ) {
+ html = html.call( this[ 0 ] );
+ }
+
+ // The elements to wrap the target around
+ wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+ if ( this[ 0 ].parentNode ) {
+ wrap.insertBefore( this[ 0 ] );
+ }
+
+ wrap.map( function() {
+ var elem = this;
+
+ while ( elem.firstElementChild ) {
+ elem = elem.firstElementChild;
+ }
+
+ return elem;
+ } ).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( isFunction( html ) ) {
+ return this.each( function( i ) {
+ jQuery( this ).wrapInner( html.call( this, i ) );
+ } );
+ }
+
+ return this.each( function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ } );
+ },
+
+ wrap: function( html ) {
+ var htmlIsFunction = isFunction( html );
+
+ return this.each( function( i ) {
+ jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
+ } );
+ },
+
+ unwrap: function( selector ) {
+ this.parent( selector ).not( "body" ).each( function() {
+ jQuery( this ).replaceWith( this.childNodes );
+ } );
+ return this;
+ }
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+ return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+ return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+ // File protocol always yields status code 0, assume 200
+ 0: 200,
+
+ // Support: IE <=9 only
+ // #1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ },
+ xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+ var callback, errorCallback;
+
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( support.cors || xhrSupported && !options.crossDomain ) {
+ return {
+ send: function( headers, complete ) {
+ var i,
+ xhr = options.xhr();
+
+ xhr.open(
+ options.type,
+ options.url,
+ options.async,
+ options.username,
+ options.password
+ );
+
+ // Apply custom fields if provided
+ if ( options.xhrFields ) {
+ for ( i in options.xhrFields ) {
+ xhr[ i ] = options.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( options.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( options.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+ headers[ "X-Requested-With" ] = "XMLHttpRequest";
+ }
+
+ // Set headers
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+
+ // Callback
+ callback = function( type ) {
+ return function() {
+ if ( callback ) {
+ callback = errorCallback = xhr.onload =
+ xhr.onerror = xhr.onabort = xhr.ontimeout =
+ xhr.onreadystatechange = null;
+
+ if ( type === "abort" ) {
+ xhr.abort();
+ } else if ( type === "error" ) {
+
+ // Support: IE <=9 only
+ // On a manual native abort, IE9 throws
+ // errors on any property access that is not readyState
+ if ( typeof xhr.status !== "number" ) {
+ complete( 0, "error" );
+ } else {
+ complete(
+
+ // File: protocol always yields status 0; see #8605, #14207
+ xhr.status,
+ xhr.statusText
+ );
+ }
+ } else {
+ complete(
+ xhrSuccessStatus[ xhr.status ] || xhr.status,
+ xhr.statusText,
+
+ // Support: IE <=9 only
+ // IE9 has no XHR2 but throws on binary (trac-11426)
+ // For XHR2 non-text, let the caller handle it (gh-2498)
+ ( xhr.responseType || "text" ) !== "text" ||
+ typeof xhr.responseText !== "string" ?
+ { binary: xhr.response } :
+ { text: xhr.responseText },
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+
+ // Listen to events
+ xhr.onload = callback();
+ errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
+
+ // Support: IE 9 only
+ // Use onreadystatechange to replace onabort
+ // to handle uncaught aborts
+ if ( xhr.onabort !== undefined ) {
+ xhr.onabort = errorCallback;
+ } else {
+ xhr.onreadystatechange = function() {
+
+ // Check readyState before timeout as it changes
+ if ( xhr.readyState === 4 ) {
+
+ // Allow onerror to be called first,
+ // but that will not handle a native abort
+ // Also, save errorCallback to a variable
+ // as xhr.onerror cannot be accessed
+ window.setTimeout( function() {
+ if ( callback ) {
+ errorCallback();
+ }
+ } );
+ }
+ };
+ }
+
+ // Create the abort callback
+ callback = callback( "abort" );
+
+ try {
+
+ // Do send the request (this may raise an exception)
+ xhr.send( options.hasContent && options.data || null );
+ } catch ( e ) {
+
+ // #14683: Only rethrow if this hasn't been notified as an error yet
+ if ( callback ) {
+ throw e;
+ }
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+ if ( s.crossDomain ) {
+ s.contents.script = false;
+ }
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+ accepts: {
+ script: "text/javascript, application/javascript, " +
+ "application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /\b(?:java|ecma)script\b/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ }
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+ // This transport only deals with cross domain or forced-by-attrs requests
+ if ( s.crossDomain || s.scriptAttrs ) {
+ var script, callback;
+ return {
+ send: function( _, complete ) {
+ script = jQuery( "<script>" )
+ .attr( s.scriptAttrs || {} )
+ .prop( { charset: s.scriptCharset, src: s.url } )
+ .on( "load error", callback = function( evt ) {
+ script.remove();
+ callback = null;
+ if ( evt ) {
+ complete( evt.type === "error" ? 404 : 200, evt.type );
+ }
+ } );
+
+ // Use native DOM manipulation to avoid our domManip AJAX trickery
+ document.head.appendChild( script[ 0 ] );
+ },
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+} );
+
+
+
+
+var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
+ this[ callback ] = true;
+ return callback;
+ }
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+ "url" :
+ typeof s.data === "string" &&
+ ( s.contentType || "" )
+ .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+ rjsonp.test( s.data ) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if ( jsonProp ) {
+ s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+ } else if ( s.jsonp !== false ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters[ "script json" ] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( callbackName + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // Force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Install callback
+ overwritten = window[ callbackName ];
+ window[ callbackName ] = function() {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always( function() {
+
+ // If previous value didn't exist - remove it
+ if ( overwritten === undefined ) {
+ jQuery( window ).removeProp( callbackName );
+
+ // Otherwise restore preexisting value
+ } else {
+ window[ callbackName ] = overwritten;
+ }
+
+ // Save back as free
+ if ( s[ callbackName ] ) {
+
+ // Make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // Save the callback name for future use
+ oldCallbacks.push( callbackName );
+ }
+
+ // Call if it was a function and we have a response
+ if ( responseContainer && isFunction( overwritten ) ) {
+ overwritten( responseContainer[ 0 ] );
+ }
+
+ responseContainer = overwritten = undefined;
+ } );
+
+ // Delegate to script
+ return "script";
+ }
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+ var body = document.implementation.createHTMLDocument( "" ).body;
+ body.innerHTML = "<form></form><form></form>";
+ return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+ if ( typeof data !== "string" ) {
+ return [];
+ }
+ if ( typeof context === "boolean" ) {
+ keepScripts = context;
+ context = false;
+ }
+
+ var base, parsed, scripts;
+
+ if ( !context ) {
+
+ // Stop scripts or inline event handlers from being executed immediately
+ // by using document.implementation
+ if ( support.createHTMLDocument ) {
+ context = document.implementation.createHTMLDocument( "" );
+
+ // Set the base href for the created document
+ // so any parsed elements with URLs
+ // are based on the document's URL (gh-2965)
+ base = context.createElement( "base" );
+ base.href = document.location.href;
+ context.head.appendChild( base );
+ } else {
+ context = document;
+ }
+ }
+
+ parsed = rsingleTag.exec( data );
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if ( parsed ) {
+ return [ context.createElement( parsed[ 1 ] ) ];
+ }
+
+ parsed = buildFragment( [ data ], context, scripts );
+
+ if ( scripts && scripts.length ) {
+ jQuery( scripts ).remove();
+ }
+
+ return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+ var selector, type, response,
+ self = this,
+ off = url.indexOf( " " );
+
+ if ( off > -1 ) {
+ selector = stripAndCollapse( url.slice( off ) );
+ url = url.slice( 0, off );
+ }
+
+ // If it's a function
+ if ( isFunction( params ) ) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( params && typeof params === "object" ) {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if ( self.length > 0 ) {
+ jQuery.ajax( {
+ url: url,
+
+ // If "type" variable is undefined, then "GET" method will be used.
+ // Make value of this field explicit since
+ // user can override it through ajaxSetup method
+ type: type || "GET",
+ dataType: "html",
+ data: params
+ } ).done( function( responseText ) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html( selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+ // Otherwise use the full result
+ responseText );
+
+ // If the request succeeds, this function gets "data", "status", "jqXHR"
+ // but they are ignored because response was set above.
+ // If it fails, this function gets "jqXHR", "status", "error"
+ } ).always( callback && function( jqXHR, status ) {
+ self.each( function() {
+ callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+ } );
+ } );
+ }
+
+ return this;
+};
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+ return jQuery.grep( jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ } ).length;
+};
+
+
+
+
+jQuery.offset = {
+ setOffset: function( elem, options, i ) {
+ var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+ position = jQuery.css( elem, "position" ),
+ curElem = jQuery( elem ),
+ props = {};
+
+ // Set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ curOffset = curElem.offset();
+ curCSSTop = jQuery.css( elem, "top" );
+ curCSSLeft = jQuery.css( elem, "left" );
+ calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+ ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+ // Need to be able to calculate position if either
+ // top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( isFunction( options ) ) {
+
+ // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+ options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+ }
+
+ if ( options.top != null ) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if ( options.left != null ) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+jQuery.fn.extend( {
+
+ // offset() relates an element's border box to the document origin
+ offset: function( options ) {
+
+ // Preserve chaining for setter
+ if ( arguments.length ) {
+ return options === undefined ?
+ this :
+ this.each( function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ } );
+ }
+
+ var rect, win,
+ elem = this[ 0 ];
+
+ if ( !elem ) {
+ return;
+ }
+
+ // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+ // Support: IE <=11 only
+ // Running getBoundingClientRect on a
+ // disconnected node in IE throws an error
+ if ( !elem.getClientRects().length ) {
+ return { top: 0, left: 0 };
+ }
+
+ // Get document-relative position by adding viewport scroll to viewport-relative gBCR
+ rect = elem.getBoundingClientRect();
+ win = elem.ownerDocument.defaultView;
+ return {
+ top: rect.top + win.pageYOffset,
+ left: rect.left + win.pageXOffset
+ };
+ },
+
+ // position() relates an element's margin box to its offset parent's padding box
+ // This corresponds to the behavior of CSS absolute positioning
+ position: function() {
+ if ( !this[ 0 ] ) {
+ return;
+ }
+
+ var offsetParent, offset, doc,
+ elem = this[ 0 ],
+ parentOffset = { top: 0, left: 0 };
+
+ // position:fixed elements are offset from the viewport, which itself always has zero offset
+ if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+ // Assume position:fixed implies availability of getBoundingClientRect
+ offset = elem.getBoundingClientRect();
+
+ } else {
+ offset = this.offset();
+
+ // Account for the *real* offset parent, which can be the document or its root element
+ // when a statically positioned element is identified
+ doc = elem.ownerDocument;
+ offsetParent = elem.offsetParent || doc.documentElement;
+ while ( offsetParent &&
+ ( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+ jQuery.css( offsetParent, "position" ) === "static" ) {
+
+ offsetParent = offsetParent.parentNode;
+ }
+ if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+ // Incorporate borders into its offset, since they are outside its content origin
+ parentOffset = jQuery( offsetParent ).offset();
+ parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+ parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
+ }
+ }
+
+ // Subtract parent offsets and element margins
+ return {
+ top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+ left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+ };
+ },
+
+ // This method will return documentElement in the following cases:
+ // 1) For the element inside the iframe without offsetParent, this method will return
+ // documentElement of the parent window
+ // 2) For the hidden or detached element
+ // 3) For body or html element, i.e. in case of the html node - it will return itself
+ //
+ // but those exceptions were never presented as a real life use-cases
+ // and might be considered as more preferable results.
+ //
+ // This logic, however, is not guaranteed and can change at any point in the future
+ offsetParent: function() {
+ return this.map( function() {
+ var offsetParent = this.offsetParent;
+
+ while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ return offsetParent || documentElement;
+ } );
+ }
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+ var top = "pageYOffset" === prop;
+
+ jQuery.fn[ method ] = function( val ) {
+ return access( this, function( elem, method, val ) {
+
+ // Coalesce documents and windows
+ var win;
+ if ( isWindow( elem ) ) {
+ win = elem;
+ } else if ( elem.nodeType === 9 ) {
+ win = elem.defaultView;
+ }
+
+ if ( val === undefined ) {
+ return win ? win[ prop ] : elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : win.pageXOffset,
+ top ? val : win.pageYOffset
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length );
+ };
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( _i, prop ) {
+ jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+ function( elem, computed ) {
+ if ( computed ) {
+ computed = curCSS( elem, prop );
+
+ // If curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( computed ) ?
+ jQuery( elem ).position()[ prop ] + "px" :
+ computed;
+ }
+ }
+ );
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+ jQuery.each( {
+ padding: "inner" + name,
+ content: type,
+ "": "outer" + name
+ }, function( defaultExtra, funcName ) {
+
+ // Margin is only for outerHeight, outerWidth
+ jQuery.fn[ funcName ] = function( margin, value ) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return access( this, function( elem, type, value ) {
+ var doc;
+
+ if ( isWindow( elem ) ) {
+
+ // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+ return funcName.indexOf( "outer" ) === 0 ?
+ elem[ "inner" + name ] :
+ elem.document.documentElement[ "client" + name ];
+ }
+
+ // Get document width or height
+ if ( elem.nodeType === 9 ) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+ // whichever is greatest
+ return Math.max(
+ elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+ elem.body[ "offset" + name ], doc[ "offset" + name ],
+ doc[ "client" + name ]
+ );
+ }
+
+ return value === undefined ?
+
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css( elem, type, extra ) :
+
+ // Set width or height on the element
+ jQuery.style( elem, type, value, extra );
+ }, type, chainable ? margin : undefined, chainable );
+ };
+ } );
+} );
+
+
+jQuery.each( [
+ "ajaxStart",
+ "ajaxStop",
+ "ajaxComplete",
+ "ajaxError",
+ "ajaxSuccess",
+ "ajaxSend"
+], function( _i, type ) {
+ jQuery.fn[ type ] = function( fn ) {
+ return this.on( type, fn );
+ };
+} );
+
+
+
+
+jQuery.fn.extend( {
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ?
+ this.off( selector, "**" ) :
+ this.off( types, selector || "**", fn );
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+} );
+
+jQuery.each(
+ ( "blur focus focusin focusout resize scroll click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup contextmenu" ).split( " " ),
+ function( _i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+ }
+);
+
+
+
+
+// Support: Android <=4.0 only
+// Make sure we trim BOM and NBSP
+var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.proxy = function( fn, context ) {
+ var tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+};
+
+jQuery.holdReady = function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.isNumeric = function( obj ) {
+
+ // As of jQuery 3.0, isNumeric is limited to
+ // strings and numbers (primitives or objects)
+ // that can be coerced to finite numbers (gh-2662)
+ var type = jQuery.type( obj );
+ return ( type === "number" || type === "string" ) &&
+
+ // parseFloat NaNs numeric-cast false positives ("")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ !isNaN( obj - parseFloat( obj ) );
+};
+
+jQuery.trim = function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+};
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+ define( "jquery", [], function() {
+ return jQuery;
+ } );
+}
+
+
+
+
+var
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === "undefined" ) {
+ window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
diff --git a/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.js b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.js
new file mode 100644
index 00000000..c4c6022f
--- /dev/null
+++ b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.map b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.map
new file mode 100644
index 00000000..7d86eb16
--- /dev/null
+++ b/docs/coverage/lib/jquery-3.6.0/jquery-3.6.0.min.map
@@ -0,0 +1 @@
+{"version":3,"sources":["jquery-3.6.0.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","jQuery","selector","context","fn","init","isArrayLike","length","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","_matchIndexes","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_jQuery","_$","$","noConflict"],"mappings":";CAaA,SAAYA,EAAQC,GAEnB,aAEuB,iBAAXC,QAAiD,iBAAnBA,OAAOC,QAShDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,GAAQ,GACjB,SAAUK,GACT,IAAMA,EAAED,SACP,MAAM,IAAIE,MAAO,4CAElB,OAAOL,EAASI,IAGlBJ,EAASD,GAtBX,CA0BuB,oBAAXO,OAAyBA,OAASC,KAAM,SAAUD,EAAQE,GAMtE,aAEA,IAAIC,EAAM,GAENC,EAAWC,OAAOC,eAElBC,EAAQJ,EAAII,MAEZC,EAAOL,EAAIK,KAAO,SAAUC,GAC/B,OAAON,EAAIK,KAAKE,KAAMD,IACnB,SAAUA,GACb,OAAON,EAAIQ,OAAOC,MAAO,GAAIH,IAI1BI,EAAOV,EAAIU,KAEXC,EAAUX,EAAIW,QAEdC,EAAa,GAEbC,EAAWD,EAAWC,SAEtBC,EAASF,EAAWG,eAEpBC,EAAaF,EAAOD,SAEpBI,EAAuBD,EAAWT,KAAML,QAExCgB,EAAU,GAEVC,EAAa,SAAqBC,GASpC,MAAsB,mBAARA,GAA8C,iBAAjBA,EAAIC,UAC1B,mBAAbD,EAAIE,MAIVC,EAAW,SAAmBH,GAChC,OAAc,MAAPA,GAAeA,IAAQA,EAAIvB,QAIhCH,EAAWG,EAAOH,SAIjB8B,EAA4B,CAC/BC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,UAAU,GAGX,SAASC,EAASC,EAAMC,EAAMC,GAG7B,IAAIC,EAAGC,EACNC,GAHDH,EAAMA,GAAOtC,GAGC0C,cAAe,UAG7B,GADAD,EAAOE,KAAOP,EACTC,EACJ,IAAME,KAAKT,GAYVU,EAAMH,EAAME,IAAOF,EAAKO,cAAgBP,EAAKO,aAAcL,KAE1DE,EAAOI,aAAcN,EAAGC,GAI3BF,EAAIQ,KAAKC,YAAaN,GAASO,WAAWC,YAAaR,GAIzD,SAASS,EAAQxB,GAChB,OAAY,MAAPA,EACGA,EAAM,GAIQ,iBAARA,GAAmC,mBAARA,EACxCR,EAAYC,EAASN,KAAMa,KAAW,gBAC/BA,EAQT,IACCyB,EAAU,QAGVC,EAAS,SAAUC,EAAUC,GAI5B,OAAO,IAAIF,EAAOG,GAAGC,KAAMH,EAAUC,IA0VvC,SAASG,EAAa/B,GAMrB,IAAIgC,IAAWhC,GAAO,WAAYA,GAAOA,EAAIgC,OAC5C3B,EAAOmB,EAAQxB,GAEhB,OAAKD,EAAYC,KAASG,EAAUH,KAIpB,UAATK,GAA+B,IAAX2B,GACR,iBAAXA,GAAgC,EAATA,GAAgBA,EAAS,KAAOhC,GArWhE0B,EAAOG,GAAKH,EAAOO,UAAY,CAG9BC,OAAQT,EAERU,YAAaT,EAGbM,OAAQ,EAERI,QAAS,WACR,OAAOpD,EAAMG,KAAMT,OAKpB2D,IAAK,SAAUC,GAGd,OAAY,MAAPA,EACGtD,EAAMG,KAAMT,MAIb4D,EAAM,EAAI5D,KAAM4D,EAAM5D,KAAKsD,QAAWtD,KAAM4D,IAKpDC,UAAW,SAAUC,GAGpB,IAAIC,EAAMf,EAAOgB,MAAOhE,KAAKyD,cAAeK,GAM5C,OAHAC,EAAIE,WAAajE,KAGV+D,GAIRG,KAAM,SAAUC,GACf,OAAOnB,EAAOkB,KAAMlE,KAAMmE,IAG3BC,IAAK,SAAUD,GACd,OAAOnE,KAAK6D,UAAWb,EAAOoB,IAAKpE,KAAM,SAAUqE,EAAMlC,GACxD,OAAOgC,EAAS1D,KAAM4D,EAAMlC,EAAGkC,OAIjC/D,MAAO,WACN,OAAON,KAAK6D,UAAWvD,EAAMK,MAAOX,KAAMsE,aAG3CC,MAAO,WACN,OAAOvE,KAAKwE,GAAI,IAGjBC,KAAM,WACL,OAAOzE,KAAKwE,IAAK,IAGlBE,KAAM,WACL,OAAO1E,KAAK6D,UAAWb,EAAO2B,KAAM3E,KAAM,SAAU4E,EAAOzC,GAC1D,OAASA,EAAI,GAAM,MAIrB0C,IAAK,WACJ,OAAO7E,KAAK6D,UAAWb,EAAO2B,KAAM3E,KAAM,SAAU4E,EAAOzC,GAC1D,OAAOA,EAAI,MAIbqC,GAAI,SAAUrC,GACb,IAAI2C,EAAM9E,KAAKsD,OACdyB,GAAK5C,GAAMA,EAAI,EAAI2C,EAAM,GAC1B,OAAO9E,KAAK6D,UAAgB,GAALkB,GAAUA,EAAID,EAAM,CAAE9E,KAAM+E,IAAQ,KAG5DC,IAAK,WACJ,OAAOhF,KAAKiE,YAAcjE,KAAKyD,eAKhC7C,KAAMA,EACNqE,KAAM/E,EAAI+E,KACVC,OAAQhF,EAAIgF,QAGblC,EAAOmC,OAASnC,EAAOG,GAAGgC,OAAS,WAClC,IAAIC,EAASC,EAAMzD,EAAK0D,EAAMC,EAAaC,EAC1CC,EAASnB,UAAW,IAAO,GAC3BnC,EAAI,EACJmB,EAASgB,UAAUhB,OACnBoC,GAAO,EAsBR,IAnBuB,kBAAXD,IACXC,EAAOD,EAGPA,EAASnB,UAAWnC,IAAO,GAC3BA,KAIsB,iBAAXsD,GAAwBpE,EAAYoE,KAC/CA,EAAS,IAILtD,IAAMmB,IACVmC,EAASzF,KACTmC,KAGOA,EAAImB,EAAQnB,IAGnB,GAAqC,OAA9BiD,EAAUd,UAAWnC,IAG3B,IAAMkD,KAAQD,EACbE,EAAOF,EAASC,GAIF,cAATA,GAAwBI,IAAWH,IAKnCI,GAAQJ,IAAUtC,EAAO2C,cAAeL,KAC1CC,EAAcK,MAAMC,QAASP,MAC/B1D,EAAM6D,EAAQJ,GAIbG,EADID,IAAgBK,MAAMC,QAASjE,GAC3B,GACI2D,GAAgBvC,EAAO2C,cAAe/D,GAG1CA,EAFA,GAIT2D,GAAc,EAGdE,EAAQJ,GAASrC,EAAOmC,OAAQO,EAAMF,EAAOF,SAGzBQ,IAATR,IACXG,EAAQJ,GAASC,IAOrB,OAAOG,GAGRzC,EAAOmC,OAAQ,CAGdY,QAAS,UAAahD,EAAUiD,KAAKC,UAAWC,QAAS,MAAO,IAGhEC,SAAS,EAETC,MAAO,SAAUC,GAChB,MAAM,IAAIvG,MAAOuG,IAGlBC,KAAM,aAENX,cAAe,SAAUrE,GACxB,IAAIiF,EAAOC,EAIX,SAAMlF,GAAgC,oBAAzBP,EAASN,KAAMa,QAI5BiF,EAAQpG,EAAUmB,KASK,mBADvBkF,EAAOxF,EAAOP,KAAM8F,EAAO,gBAAmBA,EAAM9C,cACfvC,EAAWT,KAAM+F,KAAWrF,IAGlEsF,cAAe,SAAUnF,GACxB,IAAI+D,EAEJ,IAAMA,KAAQ/D,EACb,OAAO,EAER,OAAO,GAKRoF,WAAY,SAAU1E,EAAMoD,EAASlD,GACpCH,EAASC,EAAM,CAAEH,MAAOuD,GAAWA,EAAQvD,OAASK,IAGrDgC,KAAM,SAAU5C,EAAK6C,GACpB,IAAIb,EAAQnB,EAAI,EAEhB,GAAKkB,EAAa/B,IAEjB,IADAgC,EAAShC,EAAIgC,OACLnB,EAAImB,EAAQnB,IACnB,IAAgD,IAA3CgC,EAAS1D,KAAMa,EAAKa,GAAKA,EAAGb,EAAKa,IACrC,WAIF,IAAMA,KAAKb,EACV,IAAgD,IAA3C6C,EAAS1D,KAAMa,EAAKa,GAAKA,EAAGb,EAAKa,IACrC,MAKH,OAAOb,GAIRqF,UAAW,SAAUzG,EAAK0G,GACzB,IAAI7C,EAAM6C,GAAW,GAarB,OAXY,MAAP1G,IACCmD,EAAajD,OAAQF,IACzB8C,EAAOgB,MAAOD,EACE,iBAAR7D,EACN,CAAEA,GAAQA,GAGZU,EAAKH,KAAMsD,EAAK7D,IAIX6D,GAGR8C,QAAS,SAAUxC,EAAMnE,EAAKiC,GAC7B,OAAc,MAAPjC,GAAe,EAAIW,EAAQJ,KAAMP,EAAKmE,EAAMlC,IAKpD6B,MAAO,SAAUO,EAAOuC,GAKvB,IAJA,IAAIhC,GAAOgC,EAAOxD,OACjByB,EAAI,EACJ5C,EAAIoC,EAAMjB,OAEHyB,EAAID,EAAKC,IAChBR,EAAOpC,KAAQ2E,EAAQ/B,GAKxB,OAFAR,EAAMjB,OAASnB,EAERoC,GAGRI,KAAM,SAAUb,EAAOK,EAAU4C,GAShC,IARA,IACCC,EAAU,GACV7E,EAAI,EACJmB,EAASQ,EAAMR,OACf2D,GAAkBF,EAIX5E,EAAImB,EAAQnB,KACAgC,EAAUL,EAAO3B,GAAKA,KAChB8E,GACxBD,EAAQpG,KAAMkD,EAAO3B,IAIvB,OAAO6E,GAIR5C,IAAK,SAAUN,EAAOK,EAAU+C,GAC/B,IAAI5D,EAAQ6D,EACXhF,EAAI,EACJ4B,EAAM,GAGP,GAAKV,EAAaS,GAEjB,IADAR,EAASQ,EAAMR,OACPnB,EAAImB,EAAQnB,IAGL,OAFdgF,EAAQhD,EAAUL,EAAO3B,GAAKA,EAAG+E,KAGhCnD,EAAInD,KAAMuG,QAMZ,IAAMhF,KAAK2B,EAGI,OAFdqD,EAAQhD,EAAUL,EAAO3B,GAAKA,EAAG+E,KAGhCnD,EAAInD,KAAMuG,GAMb,OAAO5G,EAAMwD,IAIdqD,KAAM,EAINhG,QAASA,IAGa,mBAAXiG,SACXrE,EAAOG,GAAIkE,OAAOC,UAAapH,EAAKmH,OAAOC,WAI5CtE,EAAOkB,KAAM,uEAAuEqD,MAAO,KAC1F,SAAUC,EAAInC,GACbvE,EAAY,WAAauE,EAAO,KAAQA,EAAKoC,gBAmB/C,IAAIC,EAWJ,SAAY3H,GACZ,IAAIoC,EACHf,EACAuG,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACAxI,EACAyI,EACAC,EACAC,EACAC,EACAxB,EACAyB,EAGA1C,EAAU,SAAW,EAAI,IAAI2C,KAC7BC,EAAe5I,EAAOH,SACtBgJ,EAAU,EACVC,EAAO,EACPC,EAAaC,KACbC,EAAaD,KACbE,EAAgBF,KAChBG,EAAyBH,KACzBI,EAAY,SAAUC,EAAGC,GAIxB,OAHKD,IAAMC,IACVlB,GAAe,GAET,GAIRnH,EAAS,GAAOC,eAChBf,EAAM,GACNoJ,EAAMpJ,EAAIoJ,IACVC,EAAarJ,EAAIU,KACjBA,EAAOV,EAAIU,KACXN,EAAQJ,EAAII,MAIZO,EAAU,SAAU2I,EAAMnF,GAGzB,IAFA,IAAIlC,EAAI,EACP2C,EAAM0E,EAAKlG,OACJnB,EAAI2C,EAAK3C,IAChB,GAAKqH,EAAMrH,KAAQkC,EAClB,OAAOlC,EAGT,OAAQ,GAGTsH,EAAW,6HAMXC,EAAa,sBAGbC,EAAa,0BAA4BD,EACxC,0CAGDE,EAAa,MAAQF,EAAa,KAAOC,EAAa,OAASD,EAG9D,gBAAkBA,EAIlB,2DAA6DC,EAAa,OAC1ED,EAAa,OAEdG,EAAU,KAAOF,EAAa,wFAOAC,EAAa,eAO3CE,EAAc,IAAIC,OAAQL,EAAa,IAAK,KAC5CM,EAAQ,IAAID,OAAQ,IAAML,EAAa,8BACtCA,EAAa,KAAM,KAEpBO,EAAS,IAAIF,OAAQ,IAAML,EAAa,KAAOA,EAAa,KAC5DQ,EAAe,IAAIH,OAAQ,IAAML,EAAa,WAAaA,EAAa,IAAMA,EAC7E,KACDS,EAAW,IAAIJ,OAAQL,EAAa,MAEpCU,EAAU,IAAIL,OAAQF,GACtBQ,EAAc,IAAIN,OAAQ,IAAMJ,EAAa,KAE7CW,EAAY,CACXC,GAAM,IAAIR,OAAQ,MAAQJ,EAAa,KACvCa,MAAS,IAAIT,OAAQ,QAAUJ,EAAa,KAC5Cc,IAAO,IAAIV,OAAQ,KAAOJ,EAAa,SACvCe,KAAQ,IAAIX,OAAQ,IAAMH,GAC1Be,OAAU,IAAIZ,OAAQ,IAAMF,GAC5Be,MAAS,IAAIb,OAAQ,yDACpBL,EAAa,+BAAiCA,EAAa,cAC3DA,EAAa,aAAeA,EAAa,SAAU,KACpDmB,KAAQ,IAAId,OAAQ,OAASN,EAAW,KAAM,KAI9CqB,aAAgB,IAAIf,OAAQ,IAAML,EACjC,mDAAqDA,EACrD,mBAAqBA,EAAa,mBAAoB,MAGxDqB,EAAQ,SACRC,EAAU,sCACVC,EAAU,SAEVC,EAAU,yBAGVC,EAAa,mCAEbC,GAAW,OAIXC,GAAY,IAAItB,OAAQ,uBAAyBL,EAAa,uBAAwB,KACtF4B,GAAY,SAAUC,EAAQC,GAC7B,IAAIC,EAAO,KAAOF,EAAOjL,MAAO,GAAM,MAEtC,OAAOkL,IASNC,EAAO,EACNC,OAAOC,aAAcF,EAAO,OAC5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,SAK5DG,GAAa,sDACbC,GAAa,SAAUC,EAAIC,GAC1B,OAAKA,EAGQ,OAAPD,EACG,SAIDA,EAAGxL,MAAO,GAAI,GAAM,KAC1BwL,EAAGE,WAAYF,EAAGxI,OAAS,GAAIvC,SAAU,IAAO,IAI3C,KAAO+K,GAOfG,GAAgB,WACf7D,KAGD8D,GAAqBC,GACpB,SAAU9H,GACT,OAAyB,IAAlBA,EAAK+H,UAAqD,aAAhC/H,EAAKgI,SAAS5E,eAEhD,CAAE6E,IAAK,aAAcC,KAAM,WAI7B,IACC3L,EAAKD,MACFT,EAAMI,EAAMG,KAAMkI,EAAa6D,YACjC7D,EAAa6D,YAMdtM,EAAKyI,EAAa6D,WAAWlJ,QAAS/B,SACrC,MAAQkL,GACT7L,EAAO,CAAED,MAAOT,EAAIoD,OAGnB,SAAUmC,EAAQiH,GACjBnD,EAAW5I,MAAO8E,EAAQnF,EAAMG,KAAMiM,KAKvC,SAAUjH,EAAQiH,GACjB,IAAI3H,EAAIU,EAAOnC,OACdnB,EAAI,EAGL,MAAUsD,EAAQV,KAAQ2H,EAAKvK,MAC/BsD,EAAOnC,OAASyB,EAAI,IAKvB,SAAS2C,GAAQzE,EAAUC,EAAS0D,EAAS+F,GAC5C,IAAIC,EAAGzK,EAAGkC,EAAMwI,EAAKC,EAAOC,EAAQC,EACnCC,EAAa/J,GAAWA,EAAQgK,cAGhC3L,EAAW2B,EAAUA,EAAQ3B,SAAW,EAKzC,GAHAqF,EAAUA,GAAW,GAGI,iBAAb3D,IAA0BA,GACxB,IAAb1B,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,OAAOqF,EAIR,IAAM+F,IACLvE,EAAalF,GACbA,EAAUA,GAAWtD,EAEhB0I,GAAiB,CAIrB,GAAkB,KAAb/G,IAAqBuL,EAAQ3B,EAAWgC,KAAMlK,IAGlD,GAAO2J,EAAIE,EAAO,IAGjB,GAAkB,IAAbvL,EAAiB,CACrB,KAAO8C,EAAOnB,EAAQkK,eAAgBR,IAUrC,OAAOhG,EALP,GAAKvC,EAAKgJ,KAAOT,EAEhB,OADAhG,EAAQhG,KAAMyD,GACPuC,OAYT,GAAKqG,IAAgB5I,EAAO4I,EAAWG,eAAgBR,KACtDnE,EAAUvF,EAASmB,IACnBA,EAAKgJ,KAAOT,EAGZ,OADAhG,EAAQhG,KAAMyD,GACPuC,MAKH,CAAA,GAAKkG,EAAO,GAElB,OADAlM,EAAKD,MAAOiG,EAAS1D,EAAQoK,qBAAsBrK,IAC5C2D,EAGD,IAAOgG,EAAIE,EAAO,KAAS1L,EAAQmM,wBACzCrK,EAAQqK,uBAGR,OADA3M,EAAKD,MAAOiG,EAAS1D,EAAQqK,uBAAwBX,IAC9ChG,EAKT,GAAKxF,EAAQoM,MACXtE,EAAwBjG,EAAW,QACjCsF,IAAcA,EAAUkF,KAAMxK,MAIlB,IAAb1B,GAAqD,WAAnC2B,EAAQmJ,SAAS5E,eAA+B,CAYpE,GAVAuF,EAAc/J,EACdgK,EAAa/J,EASK,IAAb3B,IACF4I,EAASsD,KAAMxK,IAAciH,EAAauD,KAAMxK,IAAe,EAGjEgK,EAAa7B,GAASqC,KAAMxK,IAAcyK,GAAaxK,EAAQN,aAC9DM,KAImBA,GAAY9B,EAAQuM,SAGhCd,EAAM3J,EAAQV,aAAc,OAClCqK,EAAMA,EAAI3G,QAAS0F,GAAYC,IAE/B3I,EAAQT,aAAc,KAAQoK,EAAM9G,IAMtC5D,GADA4K,EAASjF,EAAU7E,IACRK,OACX,MAAQnB,IACP4K,EAAQ5K,IAAQ0K,EAAM,IAAMA,EAAM,UAAa,IAC9Ce,GAAYb,EAAQ5K,IAEtB6K,EAAcD,EAAOc,KAAM,KAG5B,IAIC,OAHAjN,EAAKD,MAAOiG,EACXqG,EAAWa,iBAAkBd,IAEvBpG,EACN,MAAQmH,GACT7E,EAAwBjG,GAAU,GACjC,QACI4J,IAAQ9G,GACZ7C,EAAQ8K,gBAAiB,QAQ9B,OAAOhG,EAAQ/E,EAASiD,QAAS8D,EAAO,MAAQ9G,EAAS0D,EAAS+F,GASnE,SAAS5D,KACR,IAAIkF,EAAO,GAYX,OAVA,SAASC,EAAOC,EAAKhH,GAQpB,OALK8G,EAAKrN,KAAMuN,EAAM,KAAQxG,EAAKyG,oBAG3BF,EAAOD,EAAKI,SAEXH,EAAOC,EAAM,KAAQhH,GAShC,SAASmH,GAAcnL,GAEtB,OADAA,EAAI4C,IAAY,EACT5C,EAOR,SAASoL,GAAQpL,GAChB,IAAIqL,EAAK5O,EAAS0C,cAAe,YAEjC,IACC,QAASa,EAAIqL,GACZ,MAAQ/B,GACT,OAAO,EACN,QAGI+B,EAAG5L,YACP4L,EAAG5L,WAAWC,YAAa2L,GAI5BA,EAAK,MASP,SAASC,GAAWC,EAAOC,GAC1B,IAAIzO,EAAMwO,EAAMnH,MAAO,KACtBpF,EAAIjC,EAAIoD,OAET,MAAQnB,IACPwF,EAAKiH,WAAY1O,EAAKiC,IAAQwM,EAUhC,SAASE,GAAczF,EAAGC,GACzB,IAAIyF,EAAMzF,GAAKD,EACd2F,EAAOD,GAAsB,IAAf1F,EAAE7H,UAAiC,IAAf8H,EAAE9H,UACnC6H,EAAE4F,YAAc3F,EAAE2F,YAGpB,GAAKD,EACJ,OAAOA,EAIR,GAAKD,EACJ,MAAUA,EAAMA,EAAIG,YACnB,GAAKH,IAAQzF,EACZ,OAAQ,EAKX,OAAOD,EAAI,GAAK,EAOjB,SAAS8F,GAAmBvN,GAC3B,OAAO,SAAU0C,GAEhB,MAAgB,UADLA,EAAKgI,SAAS5E,eACEpD,EAAK1C,OAASA,GAQ3C,SAASwN,GAAoBxN,GAC5B,OAAO,SAAU0C,GAChB,IAAIgB,EAAOhB,EAAKgI,SAAS5E,cACzB,OAAkB,UAATpC,GAA6B,WAATA,IAAuBhB,EAAK1C,OAASA,GAQpE,SAASyN,GAAsBhD,GAG9B,OAAO,SAAU/H,GAKhB,MAAK,SAAUA,EASTA,EAAKzB,aAAgC,IAAlByB,EAAK+H,SAGvB,UAAW/H,EACV,UAAWA,EAAKzB,WACbyB,EAAKzB,WAAWwJ,WAAaA,EAE7B/H,EAAK+H,WAAaA,EAMpB/H,EAAKgL,aAAejD,GAI1B/H,EAAKgL,cAAgBjD,GACrBF,GAAoB7H,KAAW+H,EAG1B/H,EAAK+H,WAAaA,EAKd,UAAW/H,GACfA,EAAK+H,WAAaA,GAY5B,SAASkD,GAAwBnM,GAChC,OAAOmL,GAAc,SAAUiB,GAE9B,OADAA,GAAYA,EACLjB,GAAc,SAAU3B,EAAM3F,GACpC,IAAIjC,EACHyK,EAAerM,EAAI,GAAIwJ,EAAKrJ,OAAQiM,GACpCpN,EAAIqN,EAAalM,OAGlB,MAAQnB,IACFwK,EAAQ5H,EAAIyK,EAAcrN,MAC9BwK,EAAM5H,KAASiC,EAASjC,GAAM4H,EAAM5H,SAYzC,SAAS2I,GAAaxK,GACrB,OAAOA,GAAmD,oBAAjCA,EAAQoK,sBAAwCpK,EAkrC1E,IAAMf,KA9qCNf,EAAUsG,GAAOtG,QAAU,GAO3ByG,EAAQH,GAAOG,MAAQ,SAAUxD,GAChC,IAAIoL,EAAYpL,GAAQA,EAAKqL,aAC5BrH,EAAUhE,IAAUA,EAAK6I,eAAiB7I,GAAOsL,gBAKlD,OAAQ5E,EAAM0C,KAAMgC,GAAapH,GAAWA,EAAQgE,UAAY,SAQjEjE,EAAcV,GAAOU,YAAc,SAAUnG,GAC5C,IAAI2N,EAAYC,EACf3N,EAAMD,EAAOA,EAAKiL,eAAiBjL,EAAO0G,EAO3C,OAAKzG,GAAOtC,GAA6B,IAAjBsC,EAAIX,UAAmBW,EAAIyN,kBAMnDtH,GADAzI,EAAWsC,GACQyN,gBACnBrH,GAAkBT,EAAOjI,GAQpB+I,GAAgB/I,IAClBiQ,EAAYjQ,EAASkQ,cAAiBD,EAAUE,MAAQF,IAGrDA,EAAUG,iBACdH,EAAUG,iBAAkB,SAAU/D,IAAe,GAG1C4D,EAAUI,aACrBJ,EAAUI,YAAa,WAAYhE,KASrC7K,EAAQuM,MAAQY,GAAQ,SAAUC,GAEjC,OADAnG,EAAQ1F,YAAa6L,GAAK7L,YAAa/C,EAAS0C,cAAe,QACzB,oBAAxBkM,EAAGV,mBACfU,EAAGV,iBAAkB,uBAAwBxK,SAShDlC,EAAQwI,WAAa2E,GAAQ,SAAUC,GAEtC,OADAA,EAAG0B,UAAY,KACP1B,EAAGhM,aAAc,eAO1BpB,EAAQkM,qBAAuBiB,GAAQ,SAAUC,GAEhD,OADAA,EAAG7L,YAAa/C,EAASuQ,cAAe,MAChC3B,EAAGlB,qBAAsB,KAAMhK,SAIxClC,EAAQmM,uBAAyBrC,EAAQuC,KAAM7N,EAAS2N,wBAMxDnM,EAAQgP,QAAU7B,GAAQ,SAAUC,GAEnC,OADAnG,EAAQ1F,YAAa6L,GAAKnB,GAAKtH,GACvBnG,EAASyQ,oBAAsBzQ,EAASyQ,kBAAmBtK,GAAUzC,SAIzElC,EAAQgP,SACZzI,EAAK2I,OAAa,GAAI,SAAUjD,GAC/B,IAAIkD,EAASlD,EAAGnH,QAASmF,GAAWC,IACpC,OAAO,SAAUjH,GAChB,OAAOA,EAAK7B,aAAc,QAAW+N,IAGvC5I,EAAK6I,KAAW,GAAI,SAAUnD,EAAInK,GACjC,GAAuC,oBAA3BA,EAAQkK,gBAAkC9E,EAAiB,CACtE,IAAIjE,EAAOnB,EAAQkK,eAAgBC,GACnC,OAAOhJ,EAAO,CAAEA,GAAS,OAI3BsD,EAAK2I,OAAa,GAAK,SAAUjD,GAChC,IAAIkD,EAASlD,EAAGnH,QAASmF,GAAWC,IACpC,OAAO,SAAUjH,GAChB,IAAIpC,EAAwC,oBAA1BoC,EAAKoM,kBACtBpM,EAAKoM,iBAAkB,MACxB,OAAOxO,GAAQA,EAAKkF,QAAUoJ,IAMhC5I,EAAK6I,KAAW,GAAI,SAAUnD,EAAInK,GACjC,GAAuC,oBAA3BA,EAAQkK,gBAAkC9E,EAAiB,CACtE,IAAIrG,EAAME,EAAG2B,EACZO,EAAOnB,EAAQkK,eAAgBC,GAEhC,GAAKhJ,EAAO,CAIX,IADApC,EAAOoC,EAAKoM,iBAAkB,QACjBxO,EAAKkF,QAAUkG,EAC3B,MAAO,CAAEhJ,GAIVP,EAAQZ,EAAQmN,kBAAmBhD,GACnClL,EAAI,EACJ,MAAUkC,EAAOP,EAAO3B,KAEvB,IADAF,EAAOoC,EAAKoM,iBAAkB,QACjBxO,EAAKkF,QAAUkG,EAC3B,MAAO,CAAEhJ,GAKZ,MAAO,MAMVsD,EAAK6I,KAAY,IAAIpP,EAAQkM,qBAC5B,SAAUoD,EAAKxN,GACd,MAA6C,oBAAjCA,EAAQoK,qBACZpK,EAAQoK,qBAAsBoD,GAG1BtP,EAAQoM,IACZtK,EAAQ4K,iBAAkB4C,QAD3B,GAKR,SAAUA,EAAKxN,GACd,IAAImB,EACHsM,EAAM,GACNxO,EAAI,EAGJyE,EAAU1D,EAAQoK,qBAAsBoD,GAGzC,GAAa,MAARA,EAAc,CAClB,MAAUrM,EAAOuC,EAASzE,KACF,IAAlBkC,EAAK9C,UACToP,EAAI/P,KAAMyD,GAIZ,OAAOsM,EAER,OAAO/J,GAITe,EAAK6I,KAAc,MAAIpP,EAAQmM,wBAA0B,SAAU2C,EAAWhN,GAC7E,GAA+C,oBAAnCA,EAAQqK,wBAA0CjF,EAC7D,OAAOpF,EAAQqK,uBAAwB2C,IAUzC1H,EAAgB,GAOhBD,EAAY,IAELnH,EAAQoM,IAAMtC,EAAQuC,KAAM7N,EAASkO,qBAI3CS,GAAQ,SAAUC,GAEjB,IAAIoC,EAOJvI,EAAQ1F,YAAa6L,GAAKqC,UAAY,UAAY9K,EAAU,qBAC1CA,EAAU,kEAOvByI,EAAGV,iBAAkB,wBAAyBxK,QAClDiF,EAAU3H,KAAM,SAAW8I,EAAa,gBAKnC8E,EAAGV,iBAAkB,cAAexK,QACzCiF,EAAU3H,KAAM,MAAQ8I,EAAa,aAAeD,EAAW,KAI1D+E,EAAGV,iBAAkB,QAAU/H,EAAU,MAAOzC,QACrDiF,EAAU3H,KAAM,OAQjBgQ,EAAQhR,EAAS0C,cAAe,UAC1BG,aAAc,OAAQ,IAC5B+L,EAAG7L,YAAaiO,GACVpC,EAAGV,iBAAkB,aAAcxK,QACxCiF,EAAU3H,KAAM,MAAQ8I,EAAa,QAAUA,EAAa,KAC3DA,EAAa,gBAMT8E,EAAGV,iBAAkB,YAAaxK,QACvCiF,EAAU3H,KAAM,YAMX4N,EAAGV,iBAAkB,KAAO/H,EAAU,MAAOzC,QAClDiF,EAAU3H,KAAM,YAKjB4N,EAAGV,iBAAkB,QACrBvF,EAAU3H,KAAM,iBAGjB2N,GAAQ,SAAUC,GACjBA,EAAGqC,UAAY,oFAKf,IAAID,EAAQhR,EAAS0C,cAAe,SACpCsO,EAAMnO,aAAc,OAAQ,UAC5B+L,EAAG7L,YAAaiO,GAAQnO,aAAc,OAAQ,KAIzC+L,EAAGV,iBAAkB,YAAaxK,QACtCiF,EAAU3H,KAAM,OAAS8I,EAAa,eAKW,IAA7C8E,EAAGV,iBAAkB,YAAaxK,QACtCiF,EAAU3H,KAAM,WAAY,aAK7ByH,EAAQ1F,YAAa6L,GAAKpC,UAAW,EACc,IAA9CoC,EAAGV,iBAAkB,aAAcxK,QACvCiF,EAAU3H,KAAM,WAAY,aAK7B4N,EAAGV,iBAAkB,QACrBvF,EAAU3H,KAAM,YAIXQ,EAAQ0P,gBAAkB5F,EAAQuC,KAAQzG,EAAUqB,EAAQrB,SAClEqB,EAAQ0I,uBACR1I,EAAQ2I,oBACR3I,EAAQ4I,kBACR5I,EAAQ6I,qBAER3C,GAAQ,SAAUC,GAIjBpN,EAAQ+P,kBAAoBnK,EAAQvG,KAAM+N,EAAI,KAI9CxH,EAAQvG,KAAM+N,EAAI,aAClBhG,EAAc5H,KAAM,KAAMiJ,KAI5BtB,EAAYA,EAAUjF,QAAU,IAAIyG,OAAQxB,EAAUsF,KAAM,MAC5DrF,EAAgBA,EAAclF,QAAU,IAAIyG,OAAQvB,EAAcqF,KAAM,MAIxE+B,EAAa1E,EAAQuC,KAAMpF,EAAQ+I,yBAKnC3I,EAAWmH,GAAc1E,EAAQuC,KAAMpF,EAAQI,UAC9C,SAAUW,EAAGC,GACZ,IAAIgI,EAAuB,IAAfjI,EAAE7H,SAAiB6H,EAAEuG,gBAAkBvG,EAClDkI,EAAMjI,GAAKA,EAAEzG,WACd,OAAOwG,IAAMkI,MAAWA,GAAwB,IAAjBA,EAAI/P,YAClC8P,EAAM5I,SACL4I,EAAM5I,SAAU6I,GAChBlI,EAAEgI,yBAA8D,GAAnChI,EAAEgI,wBAAyBE,MAG3D,SAAUlI,EAAGC,GACZ,GAAKA,EACJ,MAAUA,EAAIA,EAAEzG,WACf,GAAKyG,IAAMD,EACV,OAAO,EAIV,OAAO,GAOTD,EAAYyG,EACZ,SAAUxG,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAlB,GAAe,EACR,EAIR,IAAIoJ,GAAWnI,EAAEgI,yBAA2B/H,EAAE+H,wBAC9C,OAAKG,IAgBU,GAPfA,GAAYnI,EAAE8D,eAAiB9D,KAASC,EAAE6D,eAAiB7D,GAC1DD,EAAEgI,wBAAyB/H,GAG3B,KAIGjI,EAAQoQ,cAAgBnI,EAAE+H,wBAAyBhI,KAAQmI,EAOzDnI,GAAKxJ,GAAYwJ,EAAE8D,eAAiBvE,GACxCF,EAAUE,EAAcS,IAChB,EAOJC,GAAKzJ,GAAYyJ,EAAE6D,eAAiBvE,GACxCF,EAAUE,EAAcU,GACjB,EAIDnB,EACJrH,EAASqH,EAAWkB,GAAMvI,EAASqH,EAAWmB,GAChD,EAGe,EAAVkI,GAAe,EAAI,IAE3B,SAAUnI,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAlB,GAAe,EACR,EAGR,IAAI2G,EACH3M,EAAI,EACJsP,EAAMrI,EAAExG,WACR0O,EAAMjI,EAAEzG,WACR8O,EAAK,CAAEtI,GACPuI,EAAK,CAAEtI,GAGR,IAAMoI,IAAQH,EAMb,OAAOlI,GAAKxJ,GAAY,EACvByJ,GAAKzJ,EAAW,EAEhB6R,GAAO,EACPH,EAAM,EACNpJ,EACErH,EAASqH,EAAWkB,GAAMvI,EAASqH,EAAWmB,GAChD,EAGK,GAAKoI,IAAQH,EACnB,OAAOzC,GAAczF,EAAGC,GAIzByF,EAAM1F,EACN,MAAU0F,EAAMA,EAAIlM,WACnB8O,EAAGE,QAAS9C,GAEbA,EAAMzF,EACN,MAAUyF,EAAMA,EAAIlM,WACnB+O,EAAGC,QAAS9C,GAIb,MAAQ4C,EAAIvP,KAAQwP,EAAIxP,GACvBA,IAGD,OAAOA,EAGN0M,GAAc6C,EAAIvP,GAAKwP,EAAIxP,IAO3BuP,EAAIvP,IAAOwG,GAAgB,EAC3BgJ,EAAIxP,IAAOwG,EAAe,EAE1B,IAGK/I,GAGR8H,GAAOV,QAAU,SAAU6K,EAAMC,GAChC,OAAOpK,GAAQmK,EAAM,KAAM,KAAMC,IAGlCpK,GAAOoJ,gBAAkB,SAAUzM,EAAMwN,GAGxC,GAFAzJ,EAAa/D,GAERjD,EAAQ0P,iBAAmBxI,IAC9BY,EAAwB2I,EAAO,QAC7BrJ,IAAkBA,EAAciF,KAAMoE,OACtCtJ,IAAkBA,EAAUkF,KAAMoE,IAErC,IACC,IAAI9N,EAAMiD,EAAQvG,KAAM4D,EAAMwN,GAG9B,GAAK9N,GAAO3C,EAAQ+P,mBAInB9M,EAAKzE,UAAuC,KAA3ByE,EAAKzE,SAAS2B,SAC/B,OAAOwC,EAEP,MAAQ0I,GACTvD,EAAwB2I,GAAM,GAIhC,OAAyD,EAAlDnK,GAAQmK,EAAMjS,EAAU,KAAM,CAAEyE,IAASf,QAGjDoE,GAAOe,SAAW,SAAUvF,EAASmB,GAUpC,OAHOnB,EAAQgK,eAAiBhK,IAAatD,GAC5CwI,EAAalF,GAEPuF,EAAUvF,EAASmB,IAG3BqD,GAAOqK,KAAO,SAAU1N,EAAMgB,IAOtBhB,EAAK6I,eAAiB7I,IAAUzE,GACtCwI,EAAa/D,GAGd,IAAIlB,EAAKwE,EAAKiH,WAAYvJ,EAAKoC,eAG9BrF,EAAMe,GAAMnC,EAAOP,KAAMkH,EAAKiH,WAAYvJ,EAAKoC,eAC9CtE,EAAIkB,EAAMgB,GAAOiD,QACjBxC,EAEF,YAAeA,IAAR1D,EACNA,EACAhB,EAAQwI,aAAetB,EACtBjE,EAAK7B,aAAc6C,IACjBjD,EAAMiC,EAAKoM,iBAAkBpL,KAAYjD,EAAI4P,UAC9C5P,EAAI+E,MACJ,MAGJO,GAAO6D,OAAS,SAAU0G,GACzB,OAASA,EAAM,IAAK/L,QAAS0F,GAAYC,KAG1CnE,GAAOtB,MAAQ,SAAUC,GACxB,MAAM,IAAIvG,MAAO,0CAA4CuG,IAO9DqB,GAAOwK,WAAa,SAAUtL,GAC7B,IAAIvC,EACH8N,EAAa,GACbpN,EAAI,EACJ5C,EAAI,EAOL,GAJAgG,GAAgB/G,EAAQgR,iBACxBlK,GAAa9G,EAAQiR,YAAczL,EAAQtG,MAAO,GAClDsG,EAAQ3B,KAAMkE,GAEThB,EAAe,CACnB,MAAU9D,EAAOuC,EAASzE,KACpBkC,IAASuC,EAASzE,KACtB4C,EAAIoN,EAAWvR,KAAMuB,IAGvB,MAAQ4C,IACP6B,EAAQ1B,OAAQiN,EAAYpN,GAAK,GAQnC,OAFAmD,EAAY,KAELtB,GAORgB,EAAUF,GAAOE,QAAU,SAAUvD,GACpC,IAAIpC,EACH8B,EAAM,GACN5B,EAAI,EACJZ,EAAW8C,EAAK9C,SAEjB,GAAMA,GAQC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAIjE,GAAiC,iBAArB8C,EAAKiO,YAChB,OAAOjO,EAAKiO,YAIZ,IAAMjO,EAAOA,EAAKkO,WAAYlO,EAAMA,EAAOA,EAAK4K,YAC/ClL,GAAO6D,EAASvD,QAGZ,GAAkB,IAAb9C,GAA+B,IAAbA,EAC7B,OAAO8C,EAAKmO,eAnBZ,MAAUvQ,EAAOoC,EAAMlC,KAGtB4B,GAAO6D,EAAS3F,GAqBlB,OAAO8B,IAGR4D,EAAOD,GAAO+K,UAAY,CAGzBrE,YAAa,GAEbsE,aAAcpE,GAEdxB,MAAOxC,EAEPsE,WAAY,GAEZ4B,KAAM,GAENmC,SAAU,CACTC,IAAK,CAAEtG,IAAK,aAAc/H,OAAO,GACjCsO,IAAK,CAAEvG,IAAK,cACZwG,IAAK,CAAExG,IAAK,kBAAmB/H,OAAO,GACtCwO,IAAK,CAAEzG,IAAK,oBAGb0G,UAAW,CACVtI,KAAQ,SAAUoC,GAWjB,OAVAA,EAAO,GAAMA,EAAO,GAAI5G,QAASmF,GAAWC,IAG5CwB,EAAO,IAAQA,EAAO,IAAOA,EAAO,IACnCA,EAAO,IAAO,IAAK5G,QAASmF,GAAWC,IAEpB,OAAfwB,EAAO,KACXA,EAAO,GAAM,IAAMA,EAAO,GAAM,KAG1BA,EAAMxM,MAAO,EAAG,IAGxBsK,MAAS,SAAUkC,GAiClB,OArBAA,EAAO,GAAMA,EAAO,GAAIrF,cAEU,QAA7BqF,EAAO,GAAIxM,MAAO,EAAG,IAGnBwM,EAAO,IACZpF,GAAOtB,MAAO0G,EAAO,IAKtBA,EAAO,KAASA,EAAO,GACtBA,EAAO,IAAQA,EAAO,IAAO,GAC7B,GAAqB,SAAfA,EAAO,IAAiC,QAAfA,EAAO,KACvCA,EAAO,KAAWA,EAAO,GAAMA,EAAO,IAAwB,QAAfA,EAAO,KAG3CA,EAAO,IAClBpF,GAAOtB,MAAO0G,EAAO,IAGfA,GAGRnC,OAAU,SAAUmC,GACnB,IAAImG,EACHC,GAAYpG,EAAO,IAAOA,EAAO,GAElC,OAAKxC,EAAmB,MAAEmD,KAAMX,EAAO,IAC/B,MAIHA,EAAO,GACXA,EAAO,GAAMA,EAAO,IAAOA,EAAO,IAAO,GAG9BoG,GAAY9I,EAAQqD,KAAMyF,KAGnCD,EAASnL,EAAUoL,GAAU,MAG7BD,EAASC,EAASrS,QAAS,IAAKqS,EAAS5P,OAAS2P,GAAWC,EAAS5P,UAGxEwJ,EAAO,GAAMA,EAAO,GAAIxM,MAAO,EAAG2S,GAClCnG,EAAO,GAAMoG,EAAS5S,MAAO,EAAG2S,IAI1BnG,EAAMxM,MAAO,EAAG,MAIzBgQ,OAAQ,CAEP7F,IAAO,SAAU0I,GAChB,IAAI9G,EAAW8G,EAAiBjN,QAASmF,GAAWC,IAAY7D,cAChE,MAA4B,MAArB0L,EACN,WACC,OAAO,GAER,SAAU9O,GACT,OAAOA,EAAKgI,UAAYhI,EAAKgI,SAAS5E,gBAAkB4E,IAI3D7B,MAAS,SAAU0F,GAClB,IAAIkD,EAAUtK,EAAYoH,EAAY,KAEtC,OAAOkD,IACJA,EAAU,IAAIrJ,OAAQ,MAAQL,EAC/B,IAAMwG,EAAY,IAAMxG,EAAa,SAAaZ,EACjDoH,EAAW,SAAU7L,GACpB,OAAO+O,EAAQ3F,KACY,iBAAnBpJ,EAAK6L,WAA0B7L,EAAK6L,WACd,oBAAtB7L,EAAK7B,cACX6B,EAAK7B,aAAc,UACpB,OAKNkI,KAAQ,SAAUrF,EAAMgO,EAAUC,GACjC,OAAO,SAAUjP,GAChB,IAAIkP,EAAS7L,GAAOqK,KAAM1N,EAAMgB,GAEhC,OAAe,MAAVkO,EACgB,OAAbF,GAEFA,IAINE,GAAU,GAIU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAO1S,QAASyS,GAChC,OAAbD,EAAoBC,IAAoC,EAA3BC,EAAO1S,QAASyS,GAChC,OAAbD,EAAoBC,GAASC,EAAOjT,OAAQgT,EAAMhQ,UAAagQ,EAClD,OAAbD,GAA2F,GAArE,IAAME,EAAOrN,QAAS4D,EAAa,KAAQ,KAAMjJ,QAASyS,GACnE,OAAbD,IAAoBE,IAAWD,GAASC,EAAOjT,MAAO,EAAGgT,EAAMhQ,OAAS,KAAQgQ,EAAQ,QAO3F1I,MAAS,SAAUjJ,EAAM6R,EAAMC,EAAWlP,EAAOE,GAChD,IAAIiP,EAAgC,QAAvB/R,EAAKrB,MAAO,EAAG,GAC3BqT,EAA+B,SAArBhS,EAAKrB,OAAQ,GACvBsT,EAAkB,YAATJ,EAEV,OAAiB,IAAVjP,GAAwB,IAATE,EAGrB,SAAUJ,GACT,QAASA,EAAKzB,YAGf,SAAUyB,EAAMwP,EAAUC,GACzB,IAAI5F,EAAO6F,EAAaC,EAAY/R,EAAMgS,EAAWC,EACpD5H,EAAMoH,IAAWC,EAAU,cAAgB,kBAC3CQ,EAAS9P,EAAKzB,WACdyC,EAAOuO,GAAUvP,EAAKgI,SAAS5E,cAC/B2M,GAAYN,IAAQF,EACpB7E,GAAO,EAER,GAAKoF,EAAS,CAGb,GAAKT,EAAS,CACb,MAAQpH,EAAM,CACbrK,EAAOoC,EACP,MAAUpC,EAAOA,EAAMqK,GACtB,GAAKsH,EACJ3R,EAAKoK,SAAS5E,gBAAkBpC,EACd,IAAlBpD,EAAKV,SAEL,OAAO,EAKT2S,EAAQ5H,EAAe,SAAT3K,IAAoBuS,GAAS,cAE5C,OAAO,EAMR,GAHAA,EAAQ,CAAEP,EAAUQ,EAAO5B,WAAa4B,EAAOE,WAG1CV,GAAWS,EAAW,CAe1BrF,GADAkF,GADA/F,GAHA6F,GAJAC,GADA/R,EAAOkS,GACYpO,KAAe9D,EAAM8D,GAAY,KAI1B9D,EAAKqS,YAC5BN,EAAY/R,EAAKqS,UAAa,KAEZ3S,IAAU,IACZ,KAAQiH,GAAWsF,EAAO,KACzBA,EAAO,GAC3BjM,EAAOgS,GAAaE,EAAO3H,WAAYyH,GAEvC,MAAUhS,IAASgS,GAAahS,GAAQA,EAAMqK,KAG3CyC,EAAOkF,EAAY,IAAOC,EAAM5K,MAGlC,GAAuB,IAAlBrH,EAAKV,YAAoBwN,GAAQ9M,IAASoC,EAAO,CACrD0P,EAAapS,GAAS,CAAEiH,EAASqL,EAAWlF,GAC5C,YAyBF,GAlBKqF,IAaJrF,EADAkF,GADA/F,GAHA6F,GAJAC,GADA/R,EAAOoC,GACY0B,KAAe9D,EAAM8D,GAAY,KAI1B9D,EAAKqS,YAC5BN,EAAY/R,EAAKqS,UAAa,KAEZ3S,IAAU,IACZ,KAAQiH,GAAWsF,EAAO,KAMhC,IAATa,EAGJ,MAAU9M,IAASgS,GAAahS,GAAQA,EAAMqK,KAC3CyC,EAAOkF,EAAY,IAAOC,EAAM5K,MAElC,IAAOsK,EACN3R,EAAKoK,SAAS5E,gBAAkBpC,EACd,IAAlBpD,EAAKV,aACHwN,IAGGqF,KAMJL,GALAC,EAAa/R,EAAM8D,KAChB9D,EAAM8D,GAAY,KAIK9D,EAAKqS,YAC5BN,EAAY/R,EAAKqS,UAAa,KAEpB3S,GAAS,CAAEiH,EAASmG,IAG7B9M,IAASoC,GACb,MASL,OADA0K,GAAQtK,KACQF,GAAWwK,EAAOxK,GAAU,GAAqB,GAAhBwK,EAAOxK,KAK5DoG,OAAU,SAAU4J,EAAQhF,GAM3B,IAAIiF,EACHrR,EAAKwE,EAAKkC,QAAS0K,IAAY5M,EAAK8M,WAAYF,EAAO9M,gBACtDC,GAAOtB,MAAO,uBAAyBmO,GAKzC,OAAKpR,EAAI4C,GACD5C,EAAIoM,GAIK,EAAZpM,EAAGG,QACPkR,EAAO,CAAED,EAAQA,EAAQ,GAAIhF,GACtB5H,EAAK8M,WAAWxT,eAAgBsT,EAAO9M,eAC7C6G,GAAc,SAAU3B,EAAM3F,GAC7B,IAAI0N,EACHC,EAAUxR,EAAIwJ,EAAM4C,GACpBpN,EAAIwS,EAAQrR,OACb,MAAQnB,IAEPwK,EADA+H,EAAM7T,EAAS8L,EAAMgI,EAASxS,OACb6E,EAAS0N,GAAQC,EAASxS,MAG7C,SAAUkC,GACT,OAAOlB,EAAIkB,EAAM,EAAGmQ,KAIhBrR,IAIT0G,QAAS,CAGR+K,IAAOtG,GAAc,SAAUrL,GAK9B,IAAI2N,EAAQ,GACXhK,EAAU,GACViO,EAAU9M,EAAS9E,EAASiD,QAAS8D,EAAO,OAE7C,OAAO6K,EAAS9O,GACfuI,GAAc,SAAU3B,EAAM3F,EAAS6M,EAAUC,GAChD,IAAIzP,EACHyQ,EAAYD,EAASlI,EAAM,KAAMmH,EAAK,IACtC3R,EAAIwK,EAAKrJ,OAGV,MAAQnB,KACAkC,EAAOyQ,EAAW3S,MACxBwK,EAAMxK,KAAS6E,EAAS7E,GAAMkC,MAIjC,SAAUA,EAAMwP,EAAUC,GAMzB,OALAlD,EAAO,GAAMvM,EACbwQ,EAASjE,EAAO,KAAMkD,EAAKlN,GAG3BgK,EAAO,GAAM,MACLhK,EAAQ0C,SAInByL,IAAOzG,GAAc,SAAUrL,GAC9B,OAAO,SAAUoB,GAChB,OAAyC,EAAlCqD,GAAQzE,EAAUoB,GAAOf,UAIlCmF,SAAY6F,GAAc,SAAU/L,GAEnC,OADAA,EAAOA,EAAK2D,QAASmF,GAAWC,IACzB,SAAUjH,GAChB,OAAkE,GAAzDA,EAAKiO,aAAe1K,EAASvD,IAASxD,QAAS0B,MAW1DyS,KAAQ1G,GAAc,SAAU0G,GAO/B,OAJM3K,EAAYoD,KAAMuH,GAAQ,KAC/BtN,GAAOtB,MAAO,qBAAuB4O,GAEtCA,EAAOA,EAAK9O,QAASmF,GAAWC,IAAY7D,cACrC,SAAUpD,GAChB,IAAI4Q,EACJ,GACC,GAAOA,EAAW3M,EACjBjE,EAAK2Q,KACL3Q,EAAK7B,aAAc,aAAgB6B,EAAK7B,aAAc,QAGtD,OADAyS,EAAWA,EAASxN,iBACAuN,GAA2C,IAAnCC,EAASpU,QAASmU,EAAO,YAE3C3Q,EAAOA,EAAKzB,aAAkC,IAAlByB,EAAK9C,UAC7C,OAAO,KAKTkE,OAAU,SAAUpB,GACnB,IAAI6Q,EAAOnV,EAAOoV,UAAYpV,EAAOoV,SAASD,KAC9C,OAAOA,GAAQA,EAAK5U,MAAO,KAAQ+D,EAAKgJ,IAGzC+H,KAAQ,SAAU/Q,GACjB,OAAOA,IAASgE,GAGjBgN,MAAS,SAAUhR,GAClB,OAAOA,IAASzE,EAAS0V,iBACrB1V,EAAS2V,UAAY3V,EAAS2V,gBAC7BlR,EAAK1C,MAAQ0C,EAAKmR,OAASnR,EAAKoR,WAItCC,QAAWtG,IAAsB,GACjChD,SAAYgD,IAAsB,GAElCuG,QAAW,SAAUtR,GAIpB,IAAIgI,EAAWhI,EAAKgI,SAAS5E,cAC7B,MAAsB,UAAb4E,KAA0BhI,EAAKsR,SACxB,WAAbtJ,KAA2BhI,EAAKuR,UAGpCA,SAAY,SAAUvR,GASrB,OALKA,EAAKzB,YAETyB,EAAKzB,WAAWiT,eAGQ,IAAlBxR,EAAKuR,UAIbE,MAAS,SAAUzR,GAMlB,IAAMA,EAAOA,EAAKkO,WAAYlO,EAAMA,EAAOA,EAAK4K,YAC/C,GAAK5K,EAAK9C,SAAW,EACpB,OAAO,EAGT,OAAO,GAGR4S,OAAU,SAAU9P,GACnB,OAAQsD,EAAKkC,QAAiB,MAAGxF,IAIlC0R,OAAU,SAAU1R,GACnB,OAAO4G,EAAQwC,KAAMpJ,EAAKgI,WAG3BuE,MAAS,SAAUvM,GAClB,OAAO2G,EAAQyC,KAAMpJ,EAAKgI,WAG3B2J,OAAU,SAAU3R,GACnB,IAAIgB,EAAOhB,EAAKgI,SAAS5E,cACzB,MAAgB,UAATpC,GAAkC,WAAdhB,EAAK1C,MAA8B,WAAT0D,GAGtD9C,KAAQ,SAAU8B,GACjB,IAAI0N,EACJ,MAAuC,UAAhC1N,EAAKgI,SAAS5E,eACN,SAAdpD,EAAK1C,OAIuC,OAAxCoQ,EAAO1N,EAAK7B,aAAc,UACN,SAAvBuP,EAAKtK,gBAIRlD,MAAS+K,GAAwB,WAChC,MAAO,CAAE,KAGV7K,KAAQ6K,GAAwB,SAAU2G,EAAe3S,GACxD,MAAO,CAAEA,EAAS,KAGnBkB,GAAM8K,GAAwB,SAAU2G,EAAe3S,EAAQiM,GAC9D,MAAO,CAAEA,EAAW,EAAIA,EAAWjM,EAASiM,KAG7C7K,KAAQ4K,GAAwB,SAAUE,EAAclM,GAEvD,IADA,IAAInB,EAAI,EACAA,EAAImB,EAAQnB,GAAK,EACxBqN,EAAa5O,KAAMuB,GAEpB,OAAOqN,IAGR3K,IAAOyK,GAAwB,SAAUE,EAAclM,GAEtD,IADA,IAAInB,EAAI,EACAA,EAAImB,EAAQnB,GAAK,EACxBqN,EAAa5O,KAAMuB,GAEpB,OAAOqN,IAGR0G,GAAM5G,GAAwB,SAAUE,EAAclM,EAAQiM,GAM7D,IALA,IAAIpN,EAAIoN,EAAW,EAClBA,EAAWjM,EACAA,EAAXiM,EACCjM,EACAiM,EACa,KAALpN,GACTqN,EAAa5O,KAAMuB,GAEpB,OAAOqN,IAGR2G,GAAM7G,GAAwB,SAAUE,EAAclM,EAAQiM,GAE7D,IADA,IAAIpN,EAAIoN,EAAW,EAAIA,EAAWjM,EAASiM,IACjCpN,EAAImB,GACbkM,EAAa5O,KAAMuB,GAEpB,OAAOqN,OAKL3F,QAAe,IAAIlC,EAAKkC,QAAc,GAGhC,CAAEuM,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5E7O,EAAKkC,QAAS1H,GAAM+M,GAAmB/M,GAExC,IAAMA,IAAK,CAAEsU,QAAQ,EAAMC,OAAO,GACjC/O,EAAKkC,QAAS1H,GAAMgN,GAAoBhN,GAIzC,SAASsS,MA0ET,SAAS7G,GAAY+I,GAIpB,IAHA,IAAIxU,EAAI,EACP2C,EAAM6R,EAAOrT,OACbL,EAAW,GACJd,EAAI2C,EAAK3C,IAChBc,GAAY0T,EAAQxU,GAAIgF,MAEzB,OAAOlE,EAGR,SAASkJ,GAAe0I,EAAS+B,EAAYC,GAC5C,IAAIvK,EAAMsK,EAAWtK,IACpBwK,EAAOF,EAAWrK,KAClB4B,EAAM2I,GAAQxK,EACdyK,EAAmBF,GAAgB,eAAR1I,EAC3B6I,EAAWnO,IAEZ,OAAO+N,EAAWrS,MAGjB,SAAUF,EAAMnB,EAAS4Q,GACxB,MAAUzP,EAAOA,EAAMiI,GACtB,GAAuB,IAAlBjI,EAAK9C,UAAkBwV,EAC3B,OAAOlC,EAASxQ,EAAMnB,EAAS4Q,GAGjC,OAAO,GAIR,SAAUzP,EAAMnB,EAAS4Q,GACxB,IAAImD,EAAUlD,EAAaC,EAC1BkD,EAAW,CAAEtO,EAASoO,GAGvB,GAAKlD,GACJ,MAAUzP,EAAOA,EAAMiI,GACtB,IAAuB,IAAlBjI,EAAK9C,UAAkBwV,IACtBlC,EAASxQ,EAAMnB,EAAS4Q,GAC5B,OAAO,OAKV,MAAUzP,EAAOA,EAAMiI,GACtB,GAAuB,IAAlBjI,EAAK9C,UAAkBwV,EAQ3B,GAHAhD,GAJAC,EAAa3P,EAAM0B,KAAe1B,EAAM0B,GAAY,KAI1B1B,EAAKiQ,YAC5BN,EAAY3P,EAAKiQ,UAAa,IAE5BwC,GAAQA,IAASzS,EAAKgI,SAAS5E,cACnCpD,EAAOA,EAAMiI,IAASjI,MAChB,CAAA,IAAO4S,EAAWlD,EAAa5F,KACrC8I,EAAU,KAAQrO,GAAWqO,EAAU,KAAQD,EAG/C,OAASE,EAAU,GAAMD,EAAU,GAOnC,IAHAlD,EAAa5F,GAAQ+I,GAGJ,GAAMrC,EAASxQ,EAAMnB,EAAS4Q,GAC9C,OAAO,EAMZ,OAAO,GAIV,SAASqD,GAAgBC,GACxB,OAAyB,EAAlBA,EAAS9T,OACf,SAAUe,EAAMnB,EAAS4Q,GACxB,IAAI3R,EAAIiV,EAAS9T,OACjB,MAAQnB,IACP,IAAMiV,EAAUjV,GAAKkC,EAAMnB,EAAS4Q,GACnC,OAAO,EAGT,OAAO,GAERsD,EAAU,GAYZ,SAASC,GAAUvC,EAAW1Q,EAAKkM,EAAQpN,EAAS4Q,GAOnD,IANA,IAAIzP,EACHiT,EAAe,GACfnV,EAAI,EACJ2C,EAAMgQ,EAAUxR,OAChBiU,EAAgB,MAAPnT,EAEFjC,EAAI2C,EAAK3C,KACTkC,EAAOyQ,EAAW3S,MAClBmO,IAAUA,EAAQjM,EAAMnB,EAAS4Q,KACtCwD,EAAa1W,KAAMyD,GACdkT,GACJnT,EAAIxD,KAAMuB,KAMd,OAAOmV,EAGR,SAASE,GAAYxE,EAAW/P,EAAU4R,EAAS4C,EAAYC,EAAYC,GAO1E,OANKF,IAAeA,EAAY1R,KAC/B0R,EAAaD,GAAYC,IAErBC,IAAeA,EAAY3R,KAC/B2R,EAAaF,GAAYE,EAAYC,IAE/BrJ,GAAc,SAAU3B,EAAM/F,EAAS1D,EAAS4Q,GACtD,IAAI8D,EAAMzV,EAAGkC,EACZwT,EAAS,GACTC,EAAU,GACVC,EAAcnR,EAAQtD,OAGtBQ,EAAQ6I,GA5CX,SAA2B1J,EAAU+U,EAAUpR,GAG9C,IAFA,IAAIzE,EAAI,EACP2C,EAAMkT,EAAS1U,OACRnB,EAAI2C,EAAK3C,IAChBuF,GAAQzE,EAAU+U,EAAU7V,GAAKyE,GAElC,OAAOA,EAsCWqR,CACfhV,GAAY,IACZC,EAAQ3B,SAAW,CAAE2B,GAAYA,EACjC,IAIDgV,GAAYlF,IAAerG,GAAS1J,EAEnCa,EADAuT,GAAUvT,EAAO+T,EAAQ7E,EAAW9P,EAAS4Q,GAG9CqE,EAAatD,EAGZ6C,IAAgB/K,EAAOqG,EAAY+E,GAAeN,GAGjD,GAGA7Q,EACDsR,EAQF,GALKrD,GACJA,EAASqD,EAAWC,EAAYjV,EAAS4Q,GAIrC2D,EAAa,CACjBG,EAAOP,GAAUc,EAAYL,GAC7BL,EAAYG,EAAM,GAAI1U,EAAS4Q,GAG/B3R,EAAIyV,EAAKtU,OACT,MAAQnB,KACAkC,EAAOuT,EAAMzV,MACnBgW,EAAYL,EAAS3V,MAAW+V,EAAWJ,EAAS3V,IAAQkC,IAK/D,GAAKsI,GACJ,GAAK+K,GAAc1E,EAAY,CAC9B,GAAK0E,EAAa,CAGjBE,EAAO,GACPzV,EAAIgW,EAAW7U,OACf,MAAQnB,KACAkC,EAAO8T,EAAYhW,KAGzByV,EAAKhX,KAAQsX,EAAW/V,GAAMkC,GAGhCqT,EAAY,KAAQS,EAAa,GAAMP,EAAM9D,GAI9C3R,EAAIgW,EAAW7U,OACf,MAAQnB,KACAkC,EAAO8T,EAAYhW,MACsC,GAA7DyV,EAAOF,EAAa7W,EAAS8L,EAAMtI,GAASwT,EAAQ1V,MAEtDwK,EAAMiL,KAAYhR,EAASgR,GAASvT,UAOvC8T,EAAad,GACZc,IAAevR,EACduR,EAAWjT,OAAQ6S,EAAaI,EAAW7U,QAC3C6U,GAEGT,EACJA,EAAY,KAAM9Q,EAASuR,EAAYrE,GAEvClT,EAAKD,MAAOiG,EAASuR,KAMzB,SAASC,GAAmBzB,GAyB3B,IAxBA,IAAI0B,EAAcxD,EAAS9P,EAC1BD,EAAM6R,EAAOrT,OACbgV,EAAkB3Q,EAAKgL,SAAUgE,EAAQ,GAAIhV,MAC7C4W,EAAmBD,GAAmB3Q,EAAKgL,SAAU,KACrDxQ,EAAImW,EAAkB,EAAI,EAG1BE,EAAerM,GAAe,SAAU9H,GACvC,OAAOA,IAASgU,GACdE,GAAkB,GACrBE,EAAkBtM,GAAe,SAAU9H,GAC1C,OAAwC,EAAjCxD,EAASwX,EAAchU,IAC5BkU,GAAkB,GACrBnB,EAAW,CAAE,SAAU/S,EAAMnB,EAAS4Q,GACrC,IAAI/P,GAASuU,IAAqBxE,GAAO5Q,IAAY+E,MAClDoQ,EAAenV,GAAU3B,SAC1BiX,EAAcnU,EAAMnB,EAAS4Q,GAC7B2E,EAAiBpU,EAAMnB,EAAS4Q,IAIlC,OADAuE,EAAe,KACRtU,IAGD5B,EAAI2C,EAAK3C,IAChB,GAAO0S,EAAUlN,EAAKgL,SAAUgE,EAAQxU,GAAIR,MAC3CyV,EAAW,CAAEjL,GAAegL,GAAgBC,GAAYvC,QAClD,CAIN,IAHAA,EAAUlN,EAAK2I,OAAQqG,EAAQxU,GAAIR,MAAOhB,MAAO,KAAMgW,EAAQxU,GAAI6E,UAGrDjB,GAAY,CAIzB,IADAhB,IAAM5C,EACE4C,EAAID,EAAKC,IAChB,GAAK4C,EAAKgL,SAAUgE,EAAQ5R,GAAIpD,MAC/B,MAGF,OAAO6V,GACF,EAAJrV,GAASgV,GAAgBC,GACrB,EAAJjV,GAASyL,GAGT+I,EACErW,MAAO,EAAG6B,EAAI,GACdzB,OAAQ,CAAEyG,MAAgC,MAAzBwP,EAAQxU,EAAI,GAAIR,KAAe,IAAM,MACtDuE,QAAS8D,EAAO,MAClB6K,EACA1S,EAAI4C,GAAKqT,GAAmBzB,EAAOrW,MAAO6B,EAAG4C,IAC7CA,EAAID,GAAOsT,GAAqBzB,EAASA,EAAOrW,MAAOyE,IACvDA,EAAID,GAAO8I,GAAY+I,IAGzBS,EAASxW,KAAMiU,GAIjB,OAAOsC,GAAgBC,GAoTxB,OAtpBA3C,GAAWlR,UAAYoE,EAAK+Q,QAAU/Q,EAAKkC,QAC3ClC,EAAK8M,WAAa,IAAIA,GAEtB3M,EAAWJ,GAAOI,SAAW,SAAU7E,EAAU0V,GAChD,IAAIhE,EAAS7H,EAAO6J,EAAQhV,EAC3BiX,EAAO7L,EAAQ8L,EACfC,EAAS9P,EAAY/F,EAAW,KAEjC,GAAK6V,EACJ,OAAOH,EAAY,EAAIG,EAAOxY,MAAO,GAGtCsY,EAAQ3V,EACR8J,EAAS,GACT8L,EAAalR,EAAKqL,UAElB,MAAQ4F,EAAQ,CA2Bf,IAAMjX,KAxBAgT,KAAa7H,EAAQ7C,EAAOkD,KAAMyL,MAClC9L,IAGJ8L,EAAQA,EAAMtY,MAAOwM,EAAO,GAAIxJ,SAAYsV,GAE7C7L,EAAOnM,KAAQ+V,EAAS,KAGzBhC,GAAU,GAGH7H,EAAQ5C,EAAaiD,KAAMyL,MACjCjE,EAAU7H,EAAMuB,QAChBsI,EAAO/V,KAAM,CACZuG,MAAOwN,EAGPhT,KAAMmL,EAAO,GAAI5G,QAAS8D,EAAO,OAElC4O,EAAQA,EAAMtY,MAAOqU,EAAQrR,SAIhBqE,EAAK2I,SACXxD,EAAQxC,EAAW3I,GAAOwL,KAAMyL,KAAgBC,EAAYlX,MAChEmL,EAAQ+L,EAAYlX,GAAQmL,MAC9B6H,EAAU7H,EAAMuB,QAChBsI,EAAO/V,KAAM,CACZuG,MAAOwN,EACPhT,KAAMA,EACNqF,QAAS8F,IAEV8L,EAAQA,EAAMtY,MAAOqU,EAAQrR,SAI/B,IAAMqR,EACL,MAOF,OAAOgE,EACNC,EAAMtV,OACNsV,EACClR,GAAOtB,MAAOnD,GAGd+F,EAAY/F,EAAU8J,GAASzM,MAAO,IA4ZzCyH,EAAUL,GAAOK,QAAU,SAAU9E,EAAU6J,GAC9C,IAAI3K,EA9H8B4W,EAAiBC,EAC/CC,EACHC,EACAC,EA4HAH,EAAc,GACdD,EAAkB,GAClBD,EAAS7P,EAAehG,EAAW,KAEpC,IAAM6V,EAAS,CAGRhM,IACLA,EAAQhF,EAAU7E,IAEnBd,EAAI2K,EAAMxJ,OACV,MAAQnB,KACP2W,EAASV,GAAmBtL,EAAO3K,KACtB4D,GACZiT,EAAYpY,KAAMkY,GAElBC,EAAgBnY,KAAMkY,IAKxBA,EAAS7P,EACRhG,GArJgC8V,EAsJNA,EArJxBE,EAA6B,GADkBD,EAsJNA,GArJrB1V,OACvB4V,EAAqC,EAAzBH,EAAgBzV,OAC5B6V,EAAe,SAAUxM,EAAMzJ,EAAS4Q,EAAKlN,EAASwS,GACrD,IAAI/U,EAAMU,EAAG8P,EACZwE,EAAe,EACflX,EAAI,IACJ2S,EAAYnI,GAAQ,GACpB2M,EAAa,GACbC,EAAgBtR,EAGhBnE,EAAQ6I,GAAQuM,GAAavR,EAAK6I,KAAY,IAAG,IAAK4I,GAGtDI,EAAkB5Q,GAA4B,MAAjB2Q,EAAwB,EAAIvT,KAAKC,UAAY,GAC1EnB,EAAMhB,EAAMR,OAcb,IAZK8V,IAMJnR,EAAmB/E,GAAWtD,GAAYsD,GAAWkW,GAM9CjX,IAAM2C,GAAgC,OAAvBT,EAAOP,EAAO3B,IAAeA,IAAM,CACzD,GAAK+W,GAAa7U,EAAO,CACxBU,EAAI,EAME7B,GAAWmB,EAAK6I,eAAiBtN,IACtCwI,EAAa/D,GACbyP,GAAOxL,GAER,MAAUuM,EAAUkE,EAAiBhU,KACpC,GAAK8P,EAASxQ,EAAMnB,GAAWtD,EAAUkU,GAAQ,CAChDlN,EAAQhG,KAAMyD,GACd,MAGG+U,IACJxQ,EAAU4Q,GAKPP,KAGG5U,GAAQwQ,GAAWxQ,IACzBgV,IAII1M,GACJmI,EAAUlU,KAAMyD,IAgBnB,GATAgV,GAAgBlX,EASX8W,GAAS9W,IAAMkX,EAAe,CAClCtU,EAAI,EACJ,MAAU8P,EAAUmE,EAAajU,KAChC8P,EAASC,EAAWwE,EAAYpW,EAAS4Q,GAG1C,GAAKnH,EAAO,CAGX,GAAoB,EAAf0M,EACJ,MAAQlX,IACC2S,EAAW3S,IAAOmX,EAAYnX,KACrCmX,EAAYnX,GAAMmH,EAAI7I,KAAMmG,IAM/B0S,EAAajC,GAAUiC,GAIxB1Y,EAAKD,MAAOiG,EAAS0S,GAGhBF,IAAczM,GAA4B,EAApB2M,EAAWhW,QACG,EAAtC+V,EAAeL,EAAY1V,QAE7BoE,GAAOwK,WAAYtL,GAUrB,OALKwS,IACJxQ,EAAU4Q,EACVvR,EAAmBsR,GAGbzE,GAGFmE,EACN3K,GAAc6K,GACdA,KAgCOlW,SAAWA,EAEnB,OAAO6V,GAYR9Q,EAASN,GAAOM,OAAS,SAAU/E,EAAUC,EAAS0D,EAAS+F,GAC9D,IAAIxK,EAAGwU,EAAQ8C,EAAO9X,EAAM6O,EAC3BkJ,EAA+B,mBAAbzW,GAA2BA,EAC7C6J,GAASH,GAAQ7E,EAAY7E,EAAWyW,EAASzW,UAAYA,GAM9D,GAJA2D,EAAUA,GAAW,GAIC,IAAjBkG,EAAMxJ,OAAe,CAIzB,GAAqB,GADrBqT,EAAS7J,EAAO,GAAMA,EAAO,GAAIxM,MAAO,IAC5BgD,QAA+C,QAA/BmW,EAAQ9C,EAAQ,IAAMhV,MAC5B,IAArBuB,EAAQ3B,UAAkB+G,GAAkBX,EAAKgL,SAAUgE,EAAQ,GAAIhV,MAAS,CAIhF,KAFAuB,GAAYyE,EAAK6I,KAAW,GAAGiJ,EAAMzS,QAAS,GAC5Cd,QAASmF,GAAWC,IAAapI,IAAa,IAAM,IAErD,OAAO0D,EAGI8S,IACXxW,EAAUA,EAAQN,YAGnBK,EAAWA,EAAS3C,MAAOqW,EAAOtI,QAAQlH,MAAM7D,QAIjDnB,EAAImI,EAA0B,aAAEmD,KAAMxK,GAAa,EAAI0T,EAAOrT,OAC9D,MAAQnB,IAAM,CAIb,GAHAsX,EAAQ9C,EAAQxU,GAGXwF,EAAKgL,SAAYhR,EAAO8X,EAAM9X,MAClC,MAED,IAAO6O,EAAO7I,EAAK6I,KAAM7O,MAGjBgL,EAAO6D,EACbiJ,EAAMzS,QAAS,GAAId,QAASmF,GAAWC,IACvCF,GAASqC,KAAMkJ,EAAQ,GAAIhV,OAAU+L,GAAaxK,EAAQN,aACzDM,IACI,CAKL,GAFAyT,EAAOzR,OAAQ/C,EAAG,KAClBc,EAAW0J,EAAKrJ,QAAUsK,GAAY+I,IAGrC,OADA/V,EAAKD,MAAOiG,EAAS+F,GACd/F,EAGR,QAeJ,OAPE8S,GAAY3R,EAAS9E,EAAU6J,IAChCH,EACAzJ,GACCoF,EACD1B,GACC1D,GAAWkI,GAASqC,KAAMxK,IAAcyK,GAAaxK,EAAQN,aAAgBM,GAExE0D,GAMRxF,EAAQiR,WAAatM,EAAQwB,MAAO,IAAKtC,KAAMkE,GAAY0E,KAAM,MAAS9H,EAI1E3E,EAAQgR,mBAAqBjK,EAG7BC,IAIAhH,EAAQoQ,aAAejD,GAAQ,SAAUC,GAGxC,OAA4E,EAArEA,EAAG4C,wBAAyBxR,EAAS0C,cAAe,eAMtDiM,GAAQ,SAAUC,GAEvB,OADAA,EAAGqC,UAAY,mBACiC,MAAzCrC,EAAG+D,WAAW/P,aAAc,WAEnCiM,GAAW,yBAA0B,SAAUpK,EAAMgB,EAAMwC,GAC1D,IAAMA,EACL,OAAOxD,EAAK7B,aAAc6C,EAA6B,SAAvBA,EAAKoC,cAA2B,EAAI,KAOjErG,EAAQwI,YAAe2E,GAAQ,SAAUC,GAG9C,OAFAA,EAAGqC,UAAY,WACfrC,EAAG+D,WAAW9P,aAAc,QAAS,IACY,KAA1C+L,EAAG+D,WAAW/P,aAAc,YAEnCiM,GAAW,QAAS,SAAUpK,EAAMsV,EAAO9R,GAC1C,IAAMA,GAAyC,UAAhCxD,EAAKgI,SAAS5E,cAC5B,OAAOpD,EAAKuV,eAOTrL,GAAQ,SAAUC,GACvB,OAAwC,MAAjCA,EAAGhM,aAAc,eAExBiM,GAAWhF,EAAU,SAAUpF,EAAMgB,EAAMwC,GAC1C,IAAIzF,EACJ,IAAMyF,EACL,OAAwB,IAAjBxD,EAAMgB,GAAkBA,EAAKoC,eACjCrF,EAAMiC,EAAKoM,iBAAkBpL,KAAYjD,EAAI4P,UAC9C5P,EAAI+E,MACJ,OAKEO,GA14EP,CA44EK3H,GAILiD,EAAOwN,KAAO9I,EACd1E,EAAO6O,KAAOnK,EAAO+K,UAGrBzP,EAAO6O,KAAM,KAAQ7O,EAAO6O,KAAKhI,QACjC7G,EAAOkP,WAAalP,EAAO6W,OAASnS,EAAOwK,WAC3ClP,EAAOT,KAAOmF,EAAOE,QACrB5E,EAAO8W,SAAWpS,EAAOG,MACzB7E,EAAOyF,SAAWf,EAAOe,SACzBzF,EAAO+W,eAAiBrS,EAAO6D,OAK/B,IAAIe,EAAM,SAAUjI,EAAMiI,EAAK0N,GAC9B,IAAIrF,EAAU,GACbsF,OAAqBnU,IAAVkU,EAEZ,OAAU3V,EAAOA,EAAMiI,KAA6B,IAAlBjI,EAAK9C,SACtC,GAAuB,IAAlB8C,EAAK9C,SAAiB,CAC1B,GAAK0Y,GAAYjX,EAAQqB,GAAO6V,GAAIF,GACnC,MAEDrF,EAAQ/T,KAAMyD,GAGhB,OAAOsQ,GAIJwF,EAAW,SAAUC,EAAG/V,GAG3B,IAFA,IAAIsQ,EAAU,GAENyF,EAAGA,EAAIA,EAAEnL,YACI,IAAfmL,EAAE7Y,UAAkB6Y,IAAM/V,GAC9BsQ,EAAQ/T,KAAMwZ,GAIhB,OAAOzF,GAIJ0F,EAAgBrX,EAAO6O,KAAK/E,MAAMhC,aAItC,SAASuB,EAAUhI,EAAMgB,GAExB,OAAOhB,EAAKgI,UAAYhI,EAAKgI,SAAS5E,gBAAkBpC,EAAKoC,cAG9D,IAAI6S,EAAa,kEAKjB,SAASC,EAAQzI,EAAU0I,EAAW5F,GACrC,OAAKvT,EAAYmZ,GACTxX,EAAO2B,KAAMmN,EAAU,SAAUzN,EAAMlC,GAC7C,QAASqY,EAAU/Z,KAAM4D,EAAMlC,EAAGkC,KAAWuQ,IAK1C4F,EAAUjZ,SACPyB,EAAO2B,KAAMmN,EAAU,SAAUzN,GACvC,OAASA,IAASmW,IAAgB5F,IAKV,iBAAd4F,EACJxX,EAAO2B,KAAMmN,EAAU,SAAUzN,GACvC,OAA4C,EAAnCxD,EAAQJ,KAAM+Z,EAAWnW,KAAkBuQ,IAK/C5R,EAAOsN,OAAQkK,EAAW1I,EAAU8C,GAG5C5R,EAAOsN,OAAS,SAAUuB,EAAM/N,EAAO8Q,GACtC,IAAIvQ,EAAOP,EAAO,GAMlB,OAJK8Q,IACJ/C,EAAO,QAAUA,EAAO,KAGH,IAAjB/N,EAAMR,QAAkC,IAAlBe,EAAK9C,SACxByB,EAAOwN,KAAKM,gBAAiBzM,EAAMwN,GAAS,CAAExN,GAAS,GAGxDrB,EAAOwN,KAAKxJ,QAAS6K,EAAM7O,EAAO2B,KAAMb,EAAO,SAAUO,GAC/D,OAAyB,IAAlBA,EAAK9C,aAIdyB,EAAOG,GAAGgC,OAAQ,CACjBqL,KAAM,SAAUvN,GACf,IAAId,EAAG4B,EACNe,EAAM9E,KAAKsD,OACXmX,EAAOza,KAER,GAAyB,iBAAbiD,EACX,OAAOjD,KAAK6D,UAAWb,EAAQC,GAAWqN,OAAQ,WACjD,IAAMnO,EAAI,EAAGA,EAAI2C,EAAK3C,IACrB,GAAKa,EAAOyF,SAAUgS,EAAMtY,GAAKnC,MAChC,OAAO,KAQX,IAFA+D,EAAM/D,KAAK6D,UAAW,IAEhB1B,EAAI,EAAGA,EAAI2C,EAAK3C,IACrBa,EAAOwN,KAAMvN,EAAUwX,EAAMtY,GAAK4B,GAGnC,OAAa,EAANe,EAAU9B,EAAOkP,WAAYnO,GAAQA,GAE7CuM,OAAQ,SAAUrN,GACjB,OAAOjD,KAAK6D,UAAW0W,EAAQva,KAAMiD,GAAY,IAAI,KAEtD2R,IAAK,SAAU3R,GACd,OAAOjD,KAAK6D,UAAW0W,EAAQva,KAAMiD,GAAY,IAAI,KAEtDiX,GAAI,SAAUjX,GACb,QAASsX,EACRva,KAIoB,iBAAbiD,GAAyBoX,EAAc5M,KAAMxK,GACnDD,EAAQC,GACRA,GAAY,IACb,GACCK,UASJ,IAAIoX,EAMHvP,EAAa,uCAENnI,EAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAASkS,GACpD,IAAItI,EAAOzI,EAGX,IAAMpB,EACL,OAAOjD,KAQR,GAHAoV,EAAOA,GAAQsF,EAGU,iBAAbzX,EAAwB,CAanC,KAPC6J,EALsB,MAAlB7J,EAAU,IACsB,MAApCA,EAAUA,EAASK,OAAS,IACT,GAAnBL,EAASK,OAGD,CAAE,KAAML,EAAU,MAGlBkI,EAAWgC,KAAMlK,MAIV6J,EAAO,IAAQ5J,EA6CxB,OAAMA,GAAWA,EAAQM,QACtBN,GAAWkS,GAAO5E,KAAMvN,GAK1BjD,KAAKyD,YAAaP,GAAUsN,KAAMvN,GAhDzC,GAAK6J,EAAO,GAAM,CAYjB,GAXA5J,EAAUA,aAAmBF,EAASE,EAAS,GAAMA,EAIrDF,EAAOgB,MAAOhE,KAAMgD,EAAO2X,UAC1B7N,EAAO,GACP5J,GAAWA,EAAQ3B,SAAW2B,EAAQgK,eAAiBhK,EAAUtD,GACjE,IAII0a,EAAW7M,KAAMX,EAAO,KAAS9J,EAAO2C,cAAezC,GAC3D,IAAM4J,KAAS5J,EAGT7B,EAAYrB,KAAM8M,IACtB9M,KAAM8M,GAAS5J,EAAS4J,IAIxB9M,KAAK+R,KAAMjF,EAAO5J,EAAS4J,IAK9B,OAAO9M,KAYP,OARAqE,EAAOzE,EAASwN,eAAgBN,EAAO,OAKtC9M,KAAM,GAAMqE,EACZrE,KAAKsD,OAAS,GAERtD,KAcH,OAAKiD,EAAS1B,UACpBvB,KAAM,GAAMiD,EACZjD,KAAKsD,OAAS,EACPtD,MAIIqB,EAAY4B,QACD6C,IAAfsP,EAAKwF,MACXxF,EAAKwF,MAAO3X,GAGZA,EAAUD,GAGLA,EAAO2D,UAAW1D,EAAUjD,QAIhCuD,UAAYP,EAAOG,GAGxBuX,EAAa1X,EAAQpD,GAGrB,IAAIib,EAAe,iCAGlBC,EAAmB,CAClBC,UAAU,EACVC,UAAU,EACVzO,MAAM,EACN0O,MAAM,GAoFR,SAASC,EAASpM,EAAKxC,GACtB,OAAUwC,EAAMA,EAAKxC,KAA4B,IAAjBwC,EAAIvN,UACpC,OAAOuN,EAnFR9L,EAAOG,GAAGgC,OAAQ,CACjB4P,IAAK,SAAUtP,GACd,IAAI0V,EAAUnY,EAAQyC,EAAQzF,MAC7Bob,EAAID,EAAQ7X,OAEb,OAAOtD,KAAKsQ,OAAQ,WAEnB,IADA,IAAInO,EAAI,EACAA,EAAIiZ,EAAGjZ,IACd,GAAKa,EAAOyF,SAAUzI,KAAMmb,EAAShZ,IACpC,OAAO,KAMXkZ,QAAS,SAAU5I,EAAWvP,GAC7B,IAAI4L,EACH3M,EAAI,EACJiZ,EAAIpb,KAAKsD,OACTqR,EAAU,GACVwG,EAA+B,iBAAd1I,GAA0BzP,EAAQyP,GAGpD,IAAM4H,EAAc5M,KAAMgF,GACzB,KAAQtQ,EAAIiZ,EAAGjZ,IACd,IAAM2M,EAAM9O,KAAMmC,GAAK2M,GAAOA,IAAQ5L,EAAS4L,EAAMA,EAAIlM,WAGxD,GAAKkM,EAAIvN,SAAW,KAAQ4Z,GACH,EAAxBA,EAAQG,MAAOxM,GAGE,IAAjBA,EAAIvN,UACHyB,EAAOwN,KAAKM,gBAAiBhC,EAAK2D,IAAgB,CAEnDkC,EAAQ/T,KAAMkO,GACd,MAMJ,OAAO9O,KAAK6D,UAA4B,EAAjB8Q,EAAQrR,OAAaN,EAAOkP,WAAYyC,GAAYA,IAI5E2G,MAAO,SAAUjX,GAGhB,OAAMA,EAKe,iBAATA,EACJxD,EAAQJ,KAAMuC,EAAQqB,GAAQrE,KAAM,IAIrCa,EAAQJ,KAAMT,KAGpBqE,EAAKb,OAASa,EAAM,GAAMA,GAZjBrE,KAAM,IAAOA,KAAM,GAAI4C,WAAe5C,KAAKuE,QAAQgX,UAAUjY,QAAU,GAgBlFkY,IAAK,SAAUvY,EAAUC,GACxB,OAAOlD,KAAK6D,UACXb,EAAOkP,WACNlP,EAAOgB,MAAOhE,KAAK2D,MAAOX,EAAQC,EAAUC,OAK/CuY,QAAS,SAAUxY,GAClB,OAAOjD,KAAKwb,IAAiB,MAAZvY,EAChBjD,KAAKiE,WAAajE,KAAKiE,WAAWqM,OAAQrN,OAU7CD,EAAOkB,KAAM,CACZiQ,OAAQ,SAAU9P,GACjB,IAAI8P,EAAS9P,EAAKzB,WAClB,OAAOuR,GAA8B,KAApBA,EAAO5S,SAAkB4S,EAAS,MAEpDuH,QAAS,SAAUrX,GAClB,OAAOiI,EAAKjI,EAAM,eAEnBsX,aAAc,SAAUtX,EAAMmD,EAAIwS,GACjC,OAAO1N,EAAKjI,EAAM,aAAc2V,IAEjCzN,KAAM,SAAUlI,GACf,OAAO6W,EAAS7W,EAAM,gBAEvB4W,KAAM,SAAU5W,GACf,OAAO6W,EAAS7W,EAAM,oBAEvBuX,QAAS,SAAUvX,GAClB,OAAOiI,EAAKjI,EAAM,gBAEnBkX,QAAS,SAAUlX,GAClB,OAAOiI,EAAKjI,EAAM,oBAEnBwX,UAAW,SAAUxX,EAAMmD,EAAIwS,GAC9B,OAAO1N,EAAKjI,EAAM,cAAe2V,IAElC8B,UAAW,SAAUzX,EAAMmD,EAAIwS,GAC9B,OAAO1N,EAAKjI,EAAM,kBAAmB2V,IAEtCG,SAAU,SAAU9V,GACnB,OAAO8V,GAAY9V,EAAKzB,YAAc,IAAK2P,WAAYlO,IAExD0W,SAAU,SAAU1W,GACnB,OAAO8V,EAAU9V,EAAKkO,aAEvByI,SAAU,SAAU3W,GACnB,OAA6B,MAAxBA,EAAK0X,iBAKT5b,EAAUkE,EAAK0X,iBAER1X,EAAK0X,iBAMR1P,EAAUhI,EAAM,cACpBA,EAAOA,EAAK2X,SAAW3X,GAGjBrB,EAAOgB,MAAO,GAAIK,EAAKmI,eAE7B,SAAUnH,EAAMlC,GAClBH,EAAOG,GAAIkC,GAAS,SAAU2U,EAAO/W,GACpC,IAAI0R,EAAU3R,EAAOoB,IAAKpE,KAAMmD,EAAI6W,GAuBpC,MArB0B,UAArB3U,EAAK/E,OAAQ,KACjB2C,EAAW+W,GAGP/W,GAAgC,iBAAbA,IACvB0R,EAAU3R,EAAOsN,OAAQrN,EAAU0R,IAGjB,EAAd3U,KAAKsD,SAGHwX,EAAkBzV,IACvBrC,EAAOkP,WAAYyC,GAIfkG,EAAapN,KAAMpI,IACvBsP,EAAQsH,WAIHjc,KAAK6D,UAAW8Q,MAGzB,IAAIuH,EAAgB,oBAsOpB,SAASC,EAAUC,GAClB,OAAOA,EAER,SAASC,EAASC,GACjB,MAAMA,EAGP,SAASC,EAAYpV,EAAOqV,EAASC,EAAQC,GAC5C,IAAIC,EAEJ,IAGMxV,GAAS9F,EAAcsb,EAASxV,EAAMyV,SAC1CD,EAAOlc,KAAM0G,GAAQ0B,KAAM2T,GAAUK,KAAMJ,GAGhCtV,GAAS9F,EAAcsb,EAASxV,EAAM2V,MACjDH,EAAOlc,KAAM0G,EAAOqV,EAASC,GAQ7BD,EAAQ7b,WAAOmF,EAAW,CAAEqB,GAAQ7G,MAAOoc,IAM3C,MAAQvV,GAITsV,EAAO9b,WAAOmF,EAAW,CAAEqB,KAvO7BnE,EAAO+Z,UAAY,SAAU3X,GA9B7B,IAAwBA,EACnB4X,EAiCJ5X,EAA6B,iBAAZA,GAlCMA,EAmCPA,EAlCZ4X,EAAS,GACbha,EAAOkB,KAAMkB,EAAQ0H,MAAOoP,IAAmB,GAAI,SAAUe,EAAGC,GAC/DF,EAAQE,IAAS,IAEXF,GA+BNha,EAAOmC,OAAQ,GAAIC,GAEpB,IACC+X,EAGAC,EAGAC,EAGAC,EAGA9T,EAAO,GAGP+T,EAAQ,GAGRC,GAAe,EAGfC,EAAO,WAQN,IALAH,EAASA,GAAUlY,EAAQsY,KAI3BL,EAAQF,GAAS,EACTI,EAAMja,OAAQka,GAAe,EAAI,CACxCJ,EAASG,EAAMlP,QACf,QAAUmP,EAAchU,EAAKlG,QAGmC,IAA1DkG,EAAMgU,GAAc7c,MAAOyc,EAAQ,GAAKA,EAAQ,KACpDhY,EAAQuY,cAGRH,EAAchU,EAAKlG,OACnB8Z,GAAS,GAMNhY,EAAQgY,SACbA,GAAS,GAGVD,GAAS,EAGJG,IAIH9T,EADI4T,EACG,GAIA,KAMV3C,EAAO,CAGNe,IAAK,WA2BJ,OA1BKhS,IAGC4T,IAAWD,IACfK,EAAchU,EAAKlG,OAAS,EAC5Bia,EAAM3c,KAAMwc,IAGb,SAAW5B,EAAKhH,GACfxR,EAAOkB,KAAMsQ,EAAM,SAAUyI,EAAG/V,GAC1B7F,EAAY6F,GACV9B,EAAQyU,QAAWY,EAAK1F,IAAK7N,IAClCsC,EAAK5I,KAAMsG,GAEDA,GAAOA,EAAI5D,QAA4B,WAAlBR,EAAQoE,IAGxCsU,EAAKtU,KATR,CAYK5C,WAEA8Y,IAAWD,GACfM,KAGKzd,MAIR4d,OAAQ,WAYP,OAXA5a,EAAOkB,KAAMI,UAAW,SAAU2Y,EAAG/V,GACpC,IAAIoU,EACJ,OAA0D,GAAhDA,EAAQtY,EAAO6D,QAASK,EAAKsC,EAAM8R,IAC5C9R,EAAKtE,OAAQoW,EAAO,GAGfA,GAASkC,GACbA,MAIIxd,MAKR+U,IAAK,SAAU5R,GACd,OAAOA,GACwB,EAA9BH,EAAO6D,QAAS1D,EAAIqG,GACN,EAAdA,EAAKlG,QAIPwS,MAAO,WAIN,OAHKtM,IACJA,EAAO,IAEDxJ,MAMR6d,QAAS,WAGR,OAFAP,EAASC,EAAQ,GACjB/T,EAAO4T,EAAS,GACTpd,MAERoM,SAAU,WACT,OAAQ5C,GAMTsU,KAAM,WAKL,OAJAR,EAASC,EAAQ,GACXH,GAAWD,IAChB3T,EAAO4T,EAAS,IAEVpd,MAERsd,OAAQ,WACP,QAASA,GAIVS,SAAU,SAAU7a,EAASsR,GAS5B,OARM8I,IAEL9I,EAAO,CAAEtR,GADTsR,EAAOA,GAAQ,IACQlU,MAAQkU,EAAKlU,QAAUkU,GAC9C+I,EAAM3c,KAAM4T,GACN2I,GACLM,KAGKzd,MAIRyd,KAAM,WAEL,OADAhD,EAAKsD,SAAU/d,KAAMsE,WACdtE,MAIRqd,MAAO,WACN,QAASA,IAIZ,OAAO5C,GA4CRzX,EAAOmC,OAAQ,CAEd6Y,SAAU,SAAUC,GACnB,IAAIC,EAAS,CAIX,CAAE,SAAU,WAAYlb,EAAO+Z,UAAW,UACzC/Z,EAAO+Z,UAAW,UAAY,GAC/B,CAAE,UAAW,OAAQ/Z,EAAO+Z,UAAW,eACtC/Z,EAAO+Z,UAAW,eAAiB,EAAG,YACvC,CAAE,SAAU,OAAQ/Z,EAAO+Z,UAAW,eACrC/Z,EAAO+Z,UAAW,eAAiB,EAAG,aAExCoB,EAAQ,UACRvB,EAAU,CACTuB,MAAO,WACN,OAAOA,GAERC,OAAQ,WAEP,OADAC,EAASxV,KAAMvE,WAAYuY,KAAMvY,WAC1BtE,MAERse,QAAS,SAAUnb,GAClB,OAAOyZ,EAAQE,KAAM,KAAM3Z,IAI5Bob,KAAM,WACL,IAAIC,EAAMla,UAEV,OAAOtB,EAAOgb,SAAU,SAAUS,GACjCzb,EAAOkB,KAAMga,EAAQ,SAAU1W,EAAIkX,GAGlC,IAAIvb,EAAK9B,EAAYmd,EAAKE,EAAO,MAAWF,EAAKE,EAAO,IAKxDL,EAAUK,EAAO,IAAO,WACvB,IAAIC,EAAWxb,GAAMA,EAAGxC,MAAOX,KAAMsE,WAChCqa,GAAYtd,EAAYsd,EAAS/B,SACrC+B,EAAS/B,UACPgC,SAAUH,EAASI,QACnBhW,KAAM4V,EAASjC,SACfK,KAAM4B,EAAShC,QAEjBgC,EAAUC,EAAO,GAAM,QACtB1e,KACAmD,EAAK,CAAEwb,GAAara,eAKxBka,EAAM,OACH5B,WAELE,KAAM,SAAUgC,EAAaC,EAAYC,GACxC,IAAIC,EAAW,EACf,SAASzC,EAAS0C,EAAOb,EAAU1P,EAASwQ,GAC3C,OAAO,WACN,IAAIC,EAAOpf,KACVwU,EAAOlQ,UACP+a,EAAa,WACZ,IAAIV,EAAU7B,EAKd,KAAKoC,EAAQD,GAAb,CAQA,IAJAN,EAAWhQ,EAAQhO,MAAOye,EAAM5K,MAId6J,EAASzB,UAC1B,MAAM,IAAI0C,UAAW,4BAOtBxC,EAAO6B,IAKgB,iBAAbA,GACY,mBAAbA,IACRA,EAAS7B,KAGLzb,EAAYyb,GAGXqC,EACJrC,EAAKrc,KACJke,EACAnC,EAASyC,EAAUZ,EAAUlC,EAAUgD,GACvC3C,EAASyC,EAAUZ,EAAUhC,EAAS8C,KAOvCF,IAEAnC,EAAKrc,KACJke,EACAnC,EAASyC,EAAUZ,EAAUlC,EAAUgD,GACvC3C,EAASyC,EAAUZ,EAAUhC,EAAS8C,GACtC3C,EAASyC,EAAUZ,EAAUlC,EAC5BkC,EAASkB,eASP5Q,IAAYwN,IAChBiD,OAAOtZ,EACP0O,EAAO,CAAEmK,KAKRQ,GAAWd,EAASmB,aAAeJ,EAAM5K,MAK7CiL,EAAUN,EACTE,EACA,WACC,IACCA,IACC,MAAQ5S,GAEJzJ,EAAOgb,SAAS0B,eACpB1c,EAAOgb,SAAS0B,cAAejT,EAC9BgT,EAAQE,YAMQV,GAAbC,EAAQ,IAIPvQ,IAAY0N,IAChB+C,OAAOtZ,EACP0O,EAAO,CAAE/H,IAGV4R,EAASuB,WAAYR,EAAM5K,MAS3B0K,EACJO,KAKKzc,EAAOgb,SAAS6B,eACpBJ,EAAQE,WAAa3c,EAAOgb,SAAS6B,gBAEtC9f,EAAO+f,WAAYL,KAKtB,OAAOzc,EAAOgb,SAAU,SAAUS,GAGjCP,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACApd,EAAY2d,GACXA,EACA7C,EACDsC,EAASc,aAKXrB,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACApd,EAAYyd,GACXA,EACA3C,IAKH+B,EAAQ,GAAK,GAAI1C,IAChBgB,EACC,EACAiC,EACApd,EAAY0d,GACXA,EACA1C,MAGAO,WAKLA,QAAS,SAAUtb,GAClB,OAAc,MAAPA,EAAc0B,EAAOmC,OAAQ7D,EAAKsb,GAAYA,IAGvDyB,EAAW,GAkEZ,OA/DArb,EAAOkB,KAAMga,EAAQ,SAAU/b,EAAGuc,GACjC,IAAIlV,EAAOkV,EAAO,GACjBqB,EAAcrB,EAAO,GAKtB9B,EAAS8B,EAAO,IAAQlV,EAAKgS,IAGxBuE,GACJvW,EAAKgS,IACJ,WAIC2C,EAAQ4B,GAKT7B,EAAQ,EAAI/b,GAAK,GAAI0b,QAIrBK,EAAQ,EAAI/b,GAAK,GAAI0b,QAGrBK,EAAQ,GAAK,GAAIJ,KAGjBI,EAAQ,GAAK,GAAIJ,MAOnBtU,EAAKgS,IAAKkD,EAAO,GAAIjB,MAKrBY,EAAUK,EAAO,IAAQ,WAExB,OADAL,EAAUK,EAAO,GAAM,QAAU1e,OAASqe,OAAWvY,EAAY9F,KAAMsE,WAChEtE,MAMRqe,EAAUK,EAAO,GAAM,QAAWlV,EAAKuU,WAIxCnB,EAAQA,QAASyB,GAGZJ,GACJA,EAAKxd,KAAM4d,EAAUA,GAIfA,GAIR2B,KAAM,SAAUC,GACf,IAGCC,EAAY5b,UAAUhB,OAGtBnB,EAAI+d,EAGJC,EAAkBva,MAAOzD,GACzBie,EAAgB9f,EAAMG,KAAM6D,WAG5B+b,EAAUrd,EAAOgb,WAGjBsC,EAAa,SAAUne,GACtB,OAAO,SAAUgF,GAChBgZ,EAAiBhe,GAAMnC,KACvBogB,EAAeje,GAAyB,EAAnBmC,UAAUhB,OAAahD,EAAMG,KAAM6D,WAAc6C,IAC5D+Y,GACTG,EAAQb,YAAaW,EAAiBC,KAM1C,GAAKF,GAAa,IACjB3D,EAAY0D,EAAaI,EAAQxX,KAAMyX,EAAYne,IAAMqa,QAAS6D,EAAQ5D,QACxEyD,GAGuB,YAApBG,EAAQlC,SACZ9c,EAAY+e,EAAeje,IAAOie,EAAeje,GAAI2a,OAErD,OAAOuD,EAAQvD,OAKjB,MAAQ3a,IACPoa,EAAY6D,EAAeje,GAAKme,EAAYne,GAAKke,EAAQ5D,QAG1D,OAAO4D,EAAQzD,aAOjB,IAAI2D,EAAc,yDAElBvd,EAAOgb,SAAS0B,cAAgB,SAAUtZ,EAAOoa,GAI3CzgB,EAAO0gB,SAAW1gB,EAAO0gB,QAAQC,MAAQta,GAASma,EAAY9S,KAAMrH,EAAMf,OAC9EtF,EAAO0gB,QAAQC,KAAM,8BAAgCta,EAAMua,QAASva,EAAMoa,MAAOA,IAOnFxd,EAAO4d,eAAiB,SAAUxa,GACjCrG,EAAO+f,WAAY,WAClB,MAAM1Z,KAQR,IAAIya,EAAY7d,EAAOgb,WAkDvB,SAAS8C,IACRlhB,EAASmhB,oBAAqB,mBAAoBD,GAClD/gB,EAAOghB,oBAAqB,OAAQD,GACpC9d,EAAO4X,QAnDR5X,EAAOG,GAAGyX,MAAQ,SAAUzX,GAY3B,OAVA0d,EACE/D,KAAM3Z,GAKNmb,SAAO,SAAUlY,GACjBpD,EAAO4d,eAAgBxa,KAGlBpG,MAGRgD,EAAOmC,OAAQ,CAGdgB,SAAS,EAIT6a,UAAW,EAGXpG,MAAO,SAAUqG,KAGF,IAATA,IAAkBje,EAAOge,UAAYhe,EAAOmD,WAKjDnD,EAAOmD,SAAU,KAGZ8a,GAAsC,IAAnBje,EAAOge,WAK/BH,EAAUrB,YAAa5f,EAAU,CAAEoD,OAIrCA,EAAO4X,MAAMkC,KAAO+D,EAAU/D,KAaD,aAAxBld,EAASshB,YACa,YAAxBthB,EAASshB,aAA6BthB,EAAS+P,gBAAgBwR,SAGjEphB,EAAO+f,WAAY9c,EAAO4X,QAK1Bhb,EAASoQ,iBAAkB,mBAAoB8Q,GAG/C/gB,EAAOiQ,iBAAkB,OAAQ8Q,IAQlC,IAAIM,EAAS,SAAUtd,EAAOX,EAAIgL,EAAKhH,EAAOka,EAAWC,EAAUC,GAClE,IAAIpf,EAAI,EACP2C,EAAMhB,EAAMR,OACZke,EAAc,MAAPrT,EAGR,GAAuB,WAAlBrL,EAAQqL,GAEZ,IAAMhM,KADNkf,GAAY,EACDlT,EACViT,EAAQtd,EAAOX,EAAIhB,EAAGgM,EAAKhM,IAAK,EAAMmf,EAAUC,QAI3C,QAAezb,IAAVqB,IACXka,GAAY,EAENhgB,EAAY8F,KACjBoa,GAAM,GAGFC,IAGCD,GACJpe,EAAG1C,KAAMqD,EAAOqD,GAChBhE,EAAK,OAILqe,EAAOre,EACPA,EAAK,SAAUkB,EAAMod,EAAMta,GAC1B,OAAOqa,EAAK/gB,KAAMuC,EAAQqB,GAAQ8C,MAKhChE,GACJ,KAAQhB,EAAI2C,EAAK3C,IAChBgB,EACCW,EAAO3B,GAAKgM,EAAKoT,EAChBpa,EACAA,EAAM1G,KAAMqD,EAAO3B,GAAKA,EAAGgB,EAAIW,EAAO3B,GAAKgM,KAMhD,OAAKkT,EACGvd,EAIH0d,EACGre,EAAG1C,KAAMqD,GAGVgB,EAAM3B,EAAIW,EAAO,GAAKqK,GAAQmT,GAKlCI,EAAY,QACfC,EAAa,YAGd,SAASC,EAAYC,EAAMC,GAC1B,OAAOA,EAAOC,cAMf,SAASC,EAAWC,GACnB,OAAOA,EAAO/b,QAASwb,EAAW,OAAQxb,QAASyb,EAAYC,GAEhE,IAAIM,EAAa,SAAUC,GAQ1B,OAA0B,IAAnBA,EAAM5gB,UAAqC,IAAnB4gB,EAAM5gB,YAAsB4gB,EAAM5gB,UAMlE,SAAS6gB,IACRpiB,KAAK+F,QAAU/C,EAAO+C,QAAUqc,EAAKC,MAGtCD,EAAKC,IAAM,EAEXD,EAAK7e,UAAY,CAEhB2K,MAAO,SAAUiU,GAGhB,IAAIhb,EAAQgb,EAAOniB,KAAK+F,SA4BxB,OAzBMoB,IACLA,EAAQ,GAKH+a,EAAYC,KAIXA,EAAM5gB,SACV4gB,EAAOniB,KAAK+F,SAAYoB,EAMxB/G,OAAOkiB,eAAgBH,EAAOniB,KAAK+F,QAAS,CAC3CoB,MAAOA,EACPob,cAAc,MAMXpb,GAERqb,IAAK,SAAUL,EAAOM,EAAMtb,GAC3B,IAAIub,EACHxU,EAAQlO,KAAKkO,MAAOiU,GAIrB,GAAqB,iBAATM,EACXvU,EAAO8T,EAAWS,IAAWtb,OAM7B,IAAMub,KAAQD,EACbvU,EAAO8T,EAAWU,IAAWD,EAAMC,GAGrC,OAAOxU,GAERvK,IAAK,SAAUwe,EAAOhU,GACrB,YAAerI,IAARqI,EACNnO,KAAKkO,MAAOiU,GAGZA,EAAOniB,KAAK+F,UAAaoc,EAAOniB,KAAK+F,SAAWic,EAAW7T,KAE7DiT,OAAQ,SAAUe,EAAOhU,EAAKhH,GAa7B,YAAarB,IAARqI,GACCA,GAAsB,iBAARA,QAAgCrI,IAAVqB,EAElCnH,KAAK2D,IAAKwe,EAAOhU,IASzBnO,KAAKwiB,IAAKL,EAAOhU,EAAKhH,QAILrB,IAAVqB,EAAsBA,EAAQgH,IAEtCyP,OAAQ,SAAUuE,EAAOhU,GACxB,IAAIhM,EACH+L,EAAQiU,EAAOniB,KAAK+F,SAErB,QAAeD,IAAVoI,EAAL,CAIA,QAAapI,IAARqI,EAAoB,CAkBxBhM,GAXCgM,EAJIvI,MAAMC,QAASsI,GAIbA,EAAI/J,IAAK4d,IAEf7T,EAAM6T,EAAW7T,MAIJD,EACZ,CAAEC,GACAA,EAAIrB,MAAOoP,IAAmB,IAG1B5Y,OAER,MAAQnB,WACA+L,EAAOC,EAAKhM,UAKR2D,IAARqI,GAAqBnL,EAAOyD,cAAeyH,MAM1CiU,EAAM5gB,SACV4gB,EAAOniB,KAAK+F,cAAYD,SAEjBqc,EAAOniB,KAAK+F,YAItB4c,QAAS,SAAUR,GAClB,IAAIjU,EAAQiU,EAAOniB,KAAK+F,SACxB,YAAiBD,IAAVoI,IAAwBlL,EAAOyD,cAAeyH,KAGvD,IAAI0U,EAAW,IAAIR,EAEfS,EAAW,IAAIT,EAcfU,EAAS,gCACZC,EAAa,SA2Bd,SAASC,EAAU3e,EAAM8J,EAAKsU,GAC7B,IAAIpd,EA1Baod,EA8BjB,QAAc3c,IAAT2c,GAAwC,IAAlBpe,EAAK9C,SAI/B,GAHA8D,EAAO,QAAU8I,EAAIjI,QAAS6c,EAAY,OAAQtb,cAG7B,iBAFrBgb,EAAOpe,EAAK7B,aAAc6C,IAEM,CAC/B,IACCod,EAnCW,UADGA,EAoCEA,IA/BL,UAATA,IAIS,SAATA,EACG,KAIHA,KAAUA,EAAO,IACbA,EAGJK,EAAOrV,KAAMgV,GACVQ,KAAKC,MAAOT,GAGbA,GAeH,MAAQhW,IAGVoW,EAASL,IAAKne,EAAM8J,EAAKsU,QAEzBA,OAAO3c,EAGT,OAAO2c,EAGRzf,EAAOmC,OAAQ,CACdwd,QAAS,SAAUte,GAClB,OAAOwe,EAASF,QAASte,IAAUue,EAASD,QAASte,IAGtDoe,KAAM,SAAUpe,EAAMgB,EAAMod,GAC3B,OAAOI,EAASzB,OAAQ/c,EAAMgB,EAAMod,IAGrCU,WAAY,SAAU9e,EAAMgB,GAC3Bwd,EAASjF,OAAQvZ,EAAMgB,IAKxB+d,MAAO,SAAU/e,EAAMgB,EAAMod,GAC5B,OAAOG,EAASxB,OAAQ/c,EAAMgB,EAAMod,IAGrCY,YAAa,SAAUhf,EAAMgB,GAC5Bud,EAAShF,OAAQvZ,EAAMgB,MAIzBrC,EAAOG,GAAGgC,OAAQ,CACjBsd,KAAM,SAAUtU,EAAKhH,GACpB,IAAIhF,EAAGkD,EAAMod,EACZpe,EAAOrE,KAAM,GACb0O,EAAQrK,GAAQA,EAAKuF,WAGtB,QAAa9D,IAARqI,EAAoB,CACxB,GAAKnO,KAAKsD,SACTmf,EAAOI,EAASlf,IAAKU,GAEE,IAAlBA,EAAK9C,WAAmBqhB,EAASjf,IAAKU,EAAM,iBAAmB,CACnElC,EAAIuM,EAAMpL,OACV,MAAQnB,IAIFuM,EAAOvM,IAEsB,KADjCkD,EAAOqJ,EAAOvM,GAAIkD,MACRxE,QAAS,WAClBwE,EAAO2c,EAAW3c,EAAK/E,MAAO,IAC9B0iB,EAAU3e,EAAMgB,EAAMod,EAAMpd,KAI/Bud,EAASJ,IAAKne,EAAM,gBAAgB,GAItC,OAAOoe,EAIR,MAAoB,iBAARtU,EACJnO,KAAKkE,KAAM,WACjB2e,EAASL,IAAKxiB,KAAMmO,KAIfiT,EAAQphB,KAAM,SAAUmH,GAC9B,IAAIsb,EAOJ,GAAKpe,QAAkByB,IAAVqB,EAKZ,YAAcrB,KADd2c,EAAOI,EAASlf,IAAKU,EAAM8J,IAEnBsU,OAMM3c,KADd2c,EAAOO,EAAU3e,EAAM8J,IAEfsU,OAIR,EAIDziB,KAAKkE,KAAM,WAGV2e,EAASL,IAAKxiB,KAAMmO,EAAKhH,MAExB,KAAMA,EAA0B,EAAnB7C,UAAUhB,OAAY,MAAM,IAG7C6f,WAAY,SAAUhV,GACrB,OAAOnO,KAAKkE,KAAM,WACjB2e,EAASjF,OAAQ5d,KAAMmO,QAM1BnL,EAAOmC,OAAQ,CACdoY,MAAO,SAAUlZ,EAAM1C,EAAM8gB,GAC5B,IAAIlF,EAEJ,GAAKlZ,EAYJ,OAXA1C,GAASA,GAAQ,MAAS,QAC1B4b,EAAQqF,EAASjf,IAAKU,EAAM1C,GAGvB8gB,KACElF,GAAS3X,MAAMC,QAAS4c,GAC7BlF,EAAQqF,EAASxB,OAAQ/c,EAAM1C,EAAMqB,EAAO2D,UAAW8b,IAEvDlF,EAAM3c,KAAM6hB,IAGPlF,GAAS,IAIlB+F,QAAS,SAAUjf,EAAM1C,GACxBA,EAAOA,GAAQ,KAEf,IAAI4b,EAAQva,EAAOua,MAAOlZ,EAAM1C,GAC/B4hB,EAAchG,EAAMja,OACpBH,EAAKoa,EAAMlP,QACXmV,EAAQxgB,EAAOygB,YAAapf,EAAM1C,GAMvB,eAAPwB,IACJA,EAAKoa,EAAMlP,QACXkV,KAGIpgB,IAIU,OAATxB,GACJ4b,EAAM3L,QAAS,qBAIT4R,EAAME,KACbvgB,EAAG1C,KAAM4D,EApBF,WACNrB,EAAOsgB,QAASjf,EAAM1C,IAmBF6hB,KAGhBD,GAAeC,GACpBA,EAAM1N,MAAM2H,QAKdgG,YAAa,SAAUpf,EAAM1C,GAC5B,IAAIwM,EAAMxM,EAAO,aACjB,OAAOihB,EAASjf,IAAKU,EAAM8J,IAASyU,EAASxB,OAAQ/c,EAAM8J,EAAK,CAC/D2H,MAAO9S,EAAO+Z,UAAW,eAAgBvB,IAAK,WAC7CoH,EAAShF,OAAQvZ,EAAM,CAAE1C,EAAO,QAASwM,WAM7CnL,EAAOG,GAAGgC,OAAQ,CACjBoY,MAAO,SAAU5b,EAAM8gB,GACtB,IAAIkB,EAAS,EAQb,MANqB,iBAAThiB,IACX8gB,EAAO9gB,EACPA,EAAO,KACPgiB,KAGIrf,UAAUhB,OAASqgB,EAChB3gB,EAAOua,MAAOvd,KAAM,GAAK2B,QAGjBmE,IAAT2c,EACNziB,KACAA,KAAKkE,KAAM,WACV,IAAIqZ,EAAQva,EAAOua,MAAOvd,KAAM2B,EAAM8gB,GAGtCzf,EAAOygB,YAAazjB,KAAM2B,GAEZ,OAATA,GAAgC,eAAf4b,EAAO,IAC5Bva,EAAOsgB,QAAStjB,KAAM2B,MAI1B2hB,QAAS,SAAU3hB,GAClB,OAAO3B,KAAKkE,KAAM,WACjBlB,EAAOsgB,QAAStjB,KAAM2B,MAGxBiiB,WAAY,SAAUjiB,GACrB,OAAO3B,KAAKud,MAAO5b,GAAQ,KAAM,KAKlCib,QAAS,SAAUjb,EAAML,GACxB,IAAIqP,EACHkT,EAAQ,EACRC,EAAQ9gB,EAAOgb,WACflM,EAAW9R,KACXmC,EAAInC,KAAKsD,OACTkZ,EAAU,aACCqH,GACTC,EAAMtE,YAAa1N,EAAU,CAAEA,KAIb,iBAATnQ,IACXL,EAAMK,EACNA,OAAOmE,GAERnE,EAAOA,GAAQ,KAEf,MAAQQ,KACPwO,EAAMiS,EAASjf,IAAKmO,EAAU3P,GAAKR,EAAO,gBAC9BgP,EAAImF,QACf+N,IACAlT,EAAImF,MAAM0F,IAAKgB,IAIjB,OADAA,IACOsH,EAAMlH,QAAStb,MAGxB,IAAIyiB,GAAO,sCAA0CC,OAEjDC,GAAU,IAAIla,OAAQ,iBAAmBga,GAAO,cAAe,KAG/DG,GAAY,CAAE,MAAO,QAAS,SAAU,QAExCvU,GAAkB/P,EAAS+P,gBAI1BwU,GAAa,SAAU9f,GACzB,OAAOrB,EAAOyF,SAAUpE,EAAK6I,cAAe7I,IAE7C+f,GAAW,CAAEA,UAAU,GAOnBzU,GAAgB0U,cACpBF,GAAa,SAAU9f,GACtB,OAAOrB,EAAOyF,SAAUpE,EAAK6I,cAAe7I,IAC3CA,EAAKggB,YAAaD,MAAe/f,EAAK6I,gBAG1C,IAAIoX,GAAqB,SAAUjgB,EAAMmK,GAOvC,MAA8B,UAH9BnK,EAAOmK,GAAMnK,GAGDkgB,MAAMC,SACM,KAAvBngB,EAAKkgB,MAAMC,SAMXL,GAAY9f,IAEsB,SAAlCrB,EAAOyhB,IAAKpgB,EAAM,YAKrB,SAASqgB,GAAWrgB,EAAMqe,EAAMiC,EAAYC,GAC3C,IAAIC,EAAUC,EACbC,EAAgB,GAChBC,EAAeJ,EACd,WACC,OAAOA,EAAM9V,OAEd,WACC,OAAO9L,EAAOyhB,IAAKpgB,EAAMqe,EAAM,KAEjCuC,EAAUD,IACVE,EAAOP,GAAcA,EAAY,KAAS3hB,EAAOmiB,UAAWzC,GAAS,GAAK,MAG1E0C,EAAgB/gB,EAAK9C,WAClByB,EAAOmiB,UAAWzC,IAAmB,OAATwC,IAAkBD,IAChDhB,GAAQ9W,KAAMnK,EAAOyhB,IAAKpgB,EAAMqe,IAElC,GAAK0C,GAAiBA,EAAe,KAAQF,EAAO,CAInDD,GAAoB,EAGpBC,EAAOA,GAAQE,EAAe,GAG9BA,GAAiBH,GAAW,EAE5B,MAAQF,IAIP/hB,EAAOuhB,MAAOlgB,EAAMqe,EAAM0C,EAAgBF,IACnC,EAAIJ,IAAY,GAAMA,EAAQE,IAAiBC,GAAW,MAAW,IAC3EF,EAAgB,GAEjBK,GAAgCN,EAIjCM,GAAgC,EAChCpiB,EAAOuhB,MAAOlgB,EAAMqe,EAAM0C,EAAgBF,GAG1CP,EAAaA,GAAc,GAgB5B,OAbKA,IACJS,GAAiBA,IAAkBH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,IACrDA,EAAY,GACTC,IACJA,EAAMM,KAAOA,EACbN,EAAM1Q,MAAQkR,EACdR,EAAM5f,IAAM6f,IAGPA,EAIR,IAAIQ,GAAoB,GAyBxB,SAASC,GAAUxT,EAAUyT,GAO5B,IANA,IAAIf,EAASngB,EAxBcA,EACvBuT,EACH1V,EACAmK,EACAmY,EAqBAgB,EAAS,GACTlK,EAAQ,EACRhY,EAASwO,EAASxO,OAGXgY,EAAQhY,EAAQgY,KACvBjX,EAAOyN,EAAUwJ,IACNiJ,QAIXC,EAAUngB,EAAKkgB,MAAMC,QAChBe,GAKa,SAAZf,IACJgB,EAAQlK,GAAUsH,EAASjf,IAAKU,EAAM,YAAe,KAC/CmhB,EAAQlK,KACbjX,EAAKkgB,MAAMC,QAAU,KAGK,KAAvBngB,EAAKkgB,MAAMC,SAAkBF,GAAoBjgB,KACrDmhB,EAAQlK,IA7CVkJ,EAFAtiB,EADG0V,OAAAA,EACH1V,GAF0BmC,EAiDaA,GA/C5B6I,cACXb,EAAWhI,EAAKgI,UAChBmY,EAAUa,GAAmBhZ,MAM9BuL,EAAO1V,EAAIujB,KAAK9iB,YAAaT,EAAII,cAAe+J,IAChDmY,EAAUxhB,EAAOyhB,IAAK7M,EAAM,WAE5BA,EAAKhV,WAAWC,YAAa+U,GAEZ,SAAZ4M,IACJA,EAAU,SAEXa,GAAmBhZ,GAAamY,MAkCb,SAAZA,IACJgB,EAAQlK,GAAU,OAGlBsH,EAASJ,IAAKne,EAAM,UAAWmgB,KAMlC,IAAMlJ,EAAQ,EAAGA,EAAQhY,EAAQgY,IACR,MAAnBkK,EAAQlK,KACZxJ,EAAUwJ,GAAQiJ,MAAMC,QAAUgB,EAAQlK,IAI5C,OAAOxJ,EAGR9O,EAAOG,GAAGgC,OAAQ,CACjBogB,KAAM,WACL,OAAOD,GAAUtlB,MAAM,IAExB0lB,KAAM,WACL,OAAOJ,GAAUtlB,OAElB2lB,OAAQ,SAAUxH,GACjB,MAAsB,kBAAVA,EACJA,EAAQne,KAAKulB,OAASvlB,KAAK0lB,OAG5B1lB,KAAKkE,KAAM,WACZogB,GAAoBtkB,MACxBgD,EAAQhD,MAAOulB,OAEfviB,EAAQhD,MAAO0lB,YAKnB,IAUEE,GACAhV,GAXEiV,GAAiB,wBAEjBC,GAAW,iCAEXC,GAAc,qCAMhBH,GADchmB,EAASomB,yBACRrjB,YAAa/C,EAAS0C,cAAe,SACpDsO,GAAQhR,EAAS0C,cAAe,UAM3BG,aAAc,OAAQ,SAC5BmO,GAAMnO,aAAc,UAAW,WAC/BmO,GAAMnO,aAAc,OAAQ,KAE5BmjB,GAAIjjB,YAAaiO,IAIjBxP,EAAQ6kB,WAAaL,GAAIM,WAAW,GAAOA,WAAW,GAAO7R,UAAUsB,QAIvEiQ,GAAI/U,UAAY,yBAChBzP,EAAQ+kB,iBAAmBP,GAAIM,WAAW,GAAO7R,UAAUuF,aAK3DgM,GAAI/U,UAAY,oBAChBzP,EAAQglB,SAAWR,GAAIvR,UAKxB,IAAIgS,GAAU,CAKbC,MAAO,CAAE,EAAG,UAAW,YACvBC,IAAK,CAAE,EAAG,oBAAqB,uBAC/BC,GAAI,CAAE,EAAG,iBAAkB,oBAC3BC,GAAI,CAAE,EAAG,qBAAsB,yBAE/BC,SAAU,CAAE,EAAG,GAAI,KAYpB,SAASC,GAAQzjB,EAASwN,GAIzB,IAAI3M,EAYJ,OATCA,EAD4C,oBAAjCb,EAAQoK,qBACbpK,EAAQoK,qBAAsBoD,GAAO,KAEI,oBAA7BxN,EAAQ4K,iBACpB5K,EAAQ4K,iBAAkB4C,GAAO,KAGjC,QAGM5K,IAAR4K,GAAqBA,GAAOrE,EAAUnJ,EAASwN,GAC5C1N,EAAOgB,MAAO,CAAEd,GAAWa,GAG5BA,EAKR,SAAS6iB,GAAe9iB,EAAO+iB,GAI9B,IAHA,IAAI1kB,EAAI,EACPiZ,EAAItX,EAAMR,OAEHnB,EAAIiZ,EAAGjZ,IACdygB,EAASJ,IACR1e,EAAO3B,GACP,cACC0kB,GAAejE,EAASjf,IAAKkjB,EAAa1kB,GAAK,eA1CnDkkB,GAAQS,MAAQT,GAAQU,MAAQV,GAAQW,SAAWX,GAAQY,QAAUZ,GAAQC,MAC7ED,GAAQa,GAAKb,GAAQI,GAGfrlB,EAAQglB,SACbC,GAAQc,SAAWd,GAAQD,OAAS,CAAE,EAAG,+BAAgC,cA2C1E,IAAIrb,GAAQ,YAEZ,SAASqc,GAAetjB,EAAOZ,EAASmkB,EAASC,EAAWC,GAO3D,IANA,IAAIljB,EAAMsM,EAAKD,EAAK8W,EAAMC,EAAU1iB,EACnC2iB,EAAWxkB,EAAQ8iB,yBACnB2B,EAAQ,GACRxlB,EAAI,EACJiZ,EAAItX,EAAMR,OAEHnB,EAAIiZ,EAAGjZ,IAGd,IAFAkC,EAAOP,EAAO3B,KAEQ,IAATkC,EAGZ,GAAwB,WAAnBvB,EAAQuB,GAIZrB,EAAOgB,MAAO2jB,EAAOtjB,EAAK9C,SAAW,CAAE8C,GAASA,QAG1C,GAAM0G,GAAM0C,KAAMpJ,GAIlB,CACNsM,EAAMA,GAAO+W,EAAS/kB,YAAaO,EAAQZ,cAAe,QAG1DoO,GAAQoV,GAAS3Y,KAAM9I,IAAU,CAAE,GAAI,KAAQ,GAAIoD,cACnD+f,EAAOnB,GAAS3V,IAAS2V,GAAQK,SACjC/V,EAAIE,UAAY2W,EAAM,GAAMxkB,EAAO4kB,cAAevjB,GAASmjB,EAAM,GAGjEziB,EAAIyiB,EAAM,GACV,MAAQziB,IACP4L,EAAMA,EAAI0D,UAKXrR,EAAOgB,MAAO2jB,EAAOhX,EAAInE,aAGzBmE,EAAM+W,EAASnV,YAGXD,YAAc,QAzBlBqV,EAAM/mB,KAAMsC,EAAQ2kB,eAAgBxjB,IA+BvCqjB,EAASpV,YAAc,GAEvBnQ,EAAI,EACJ,MAAUkC,EAAOsjB,EAAOxlB,KAGvB,GAAKmlB,IAAkD,EAArCtkB,EAAO6D,QAASxC,EAAMijB,GAClCC,GACJA,EAAQ3mB,KAAMyD,QAgBhB,GAXAojB,EAAWtD,GAAY9f,GAGvBsM,EAAMgW,GAAQe,EAAS/kB,YAAa0B,GAAQ,UAGvCojB,GACJb,GAAejW,GAIX0W,EAAU,CACdtiB,EAAI,EACJ,MAAUV,EAAOsM,EAAK5L,KAChBghB,GAAYtY,KAAMpJ,EAAK1C,MAAQ,KACnC0lB,EAAQzmB,KAAMyD,GAMlB,OAAOqjB,EAIR,IAAII,GAAiB,sBAErB,SAASC,KACR,OAAO,EAGR,SAASC,KACR,OAAO,EASR,SAASC,GAAY5jB,EAAM1C,GAC1B,OAAS0C,IAMV,WACC,IACC,OAAOzE,EAAS0V,cACf,MAAQ4S,KATQC,KAAqC,UAATxmB,GAY/C,SAASymB,GAAI/jB,EAAMgkB,EAAOplB,EAAUwf,EAAMtf,EAAImlB,GAC7C,IAAIC,EAAQ5mB,EAGZ,GAAsB,iBAAV0mB,EAAqB,CAShC,IAAM1mB,IANmB,iBAAbsB,IAGXwf,EAAOA,GAAQxf,EACfA,OAAW6C,GAEEuiB,EACbD,GAAI/jB,EAAM1C,EAAMsB,EAAUwf,EAAM4F,EAAO1mB,GAAQ2mB,GAEhD,OAAOjkB,EAsBR,GAnBa,MAARoe,GAAsB,MAANtf,GAGpBA,EAAKF,EACLwf,EAAOxf,OAAW6C,GACD,MAAN3C,IACc,iBAAbF,GAGXE,EAAKsf,EACLA,OAAO3c,IAIP3C,EAAKsf,EACLA,EAAOxf,EACPA,OAAW6C,KAGD,IAAP3C,EACJA,EAAK6kB,QACC,IAAM7kB,EACZ,OAAOkB,EAeR,OAZa,IAARikB,IACJC,EAASplB,GACTA,EAAK,SAAUqlB,GAId,OADAxlB,IAASylB,IAAKD,GACPD,EAAO5nB,MAAOX,KAAMsE,aAIzB8C,KAAOmhB,EAAOnhB,OAAUmhB,EAAOnhB,KAAOpE,EAAOoE,SAE1C/C,EAAKH,KAAM,WACjBlB,EAAOwlB,MAAMhN,IAAKxb,KAAMqoB,EAAOllB,EAAIsf,EAAMxf,KA+a3C,SAASylB,GAAgBla,EAAI7M,EAAMsmB,GAG5BA,GAQNrF,EAASJ,IAAKhU,EAAI7M,GAAM,GACxBqB,EAAOwlB,MAAMhN,IAAKhN,EAAI7M,EAAM,CAC3B8N,WAAW,EACXd,QAAS,SAAU6Z,GAClB,IAAIG,EAAUpV,EACbqV,EAAQhG,EAASjf,IAAK3D,KAAM2B,GAE7B,GAAyB,EAAlB6mB,EAAMK,WAAmB7oB,KAAM2B,IAKrC,GAAMinB,EAAMtlB,QAuCEN,EAAOwlB,MAAMrJ,QAASxd,IAAU,IAAKmnB,cAClDN,EAAMO,uBArBN,GAdAH,EAAQtoB,EAAMG,KAAM6D,WACpBse,EAASJ,IAAKxiB,KAAM2B,EAAMinB,GAK1BD,EAAWV,EAAYjoB,KAAM2B,GAC7B3B,KAAM2B,KAEDinB,KADLrV,EAASqP,EAASjf,IAAK3D,KAAM2B,KACJgnB,EACxB/F,EAASJ,IAAKxiB,KAAM2B,GAAM,GAE1B4R,EAAS,GAELqV,IAAUrV,EAWd,OARAiV,EAAMQ,2BACNR,EAAMS,iBAOC1V,GAAUA,EAAOpM,WAefyhB,EAAMtlB,SAGjBsf,EAASJ,IAAKxiB,KAAM2B,EAAM,CACzBwF,MAAOnE,EAAOwlB,MAAMU,QAInBlmB,EAAOmC,OAAQyjB,EAAO,GAAK5lB,EAAOmmB,MAAM5lB,WACxCqlB,EAAMtoB,MAAO,GACbN,QAKFwoB,EAAMQ,qCA/E0BljB,IAA7B8c,EAASjf,IAAK6K,EAAI7M,IACtBqB,EAAOwlB,MAAMhN,IAAKhN,EAAI7M,EAAMomB,IA5a/B/kB,EAAOwlB,MAAQ,CAEdhpB,OAAQ,GAERgc,IAAK,SAAUnX,EAAMgkB,EAAO1Z,EAAS8T,EAAMxf,GAE1C,IAAImmB,EAAaC,EAAa1Y,EAC7B2Y,EAAQC,EAAGC,EACXrK,EAASsK,EAAU9nB,EAAM+nB,EAAYC,EACrCC,EAAWhH,EAASjf,IAAKU,GAG1B,GAAM6d,EAAY7d,GAAlB,CAKKsK,EAAQA,UAEZA,GADAya,EAAcza,GACQA,QACtB1L,EAAWmmB,EAAYnmB,UAKnBA,GACJD,EAAOwN,KAAKM,gBAAiBnB,GAAiB1M,GAIzC0L,EAAQvH,OACbuH,EAAQvH,KAAOpE,EAAOoE,SAIfkiB,EAASM,EAASN,UACzBA,EAASM,EAASN,OAASlpB,OAAOypB,OAAQ,QAEnCR,EAAcO,EAASE,UAC9BT,EAAcO,EAASE,OAAS,SAAUrd,GAIzC,MAAyB,oBAAXzJ,GAA0BA,EAAOwlB,MAAMuB,YAActd,EAAE9K,KACpEqB,EAAOwlB,MAAMwB,SAASrpB,MAAO0D,EAAMC,gBAAcwB,IAMpDyjB,GADAlB,GAAUA,GAAS,IAAKvb,MAAOoP,IAAmB,CAAE,KAC1C5Y,OACV,MAAQimB,IAEP5nB,EAAOgoB,GADPhZ,EAAMmX,GAAe3a,KAAMkb,EAAOkB,KAAS,IACpB,GACvBG,GAAe/Y,EAAK,IAAO,IAAKpJ,MAAO,KAAMtC,OAGvCtD,IAKNwd,EAAUnc,EAAOwlB,MAAMrJ,QAASxd,IAAU,GAG1CA,GAASsB,EAAWkc,EAAQ2J,aAAe3J,EAAQ8K,WAActoB,EAGjEwd,EAAUnc,EAAOwlB,MAAMrJ,QAASxd,IAAU,GAG1C6nB,EAAYxmB,EAAOmC,OAAQ,CAC1BxD,KAAMA,EACNgoB,SAAUA,EACVlH,KAAMA,EACN9T,QAASA,EACTvH,KAAMuH,EAAQvH,KACdnE,SAAUA,EACV6H,aAAc7H,GAAYD,EAAO6O,KAAK/E,MAAMhC,aAAa2C,KAAMxK,GAC/DwM,UAAWia,EAAW7b,KAAM,MAC1Bub,IAGKK,EAAWH,EAAQ3nB,OAC1B8nB,EAAWH,EAAQ3nB,GAAS,IACnBuoB,cAAgB,EAGnB/K,EAAQgL,QACiD,IAA9DhL,EAAQgL,MAAM1pB,KAAM4D,EAAMoe,EAAMiH,EAAYL,IAEvChlB,EAAK2L,kBACT3L,EAAK2L,iBAAkBrO,EAAM0nB,IAK3BlK,EAAQ3D,MACZ2D,EAAQ3D,IAAI/a,KAAM4D,EAAMmlB,GAElBA,EAAU7a,QAAQvH,OACvBoiB,EAAU7a,QAAQvH,KAAOuH,EAAQvH,OAK9BnE,EACJwmB,EAASvkB,OAAQukB,EAASS,gBAAiB,EAAGV,GAE9CC,EAAS7oB,KAAM4oB,GAIhBxmB,EAAOwlB,MAAMhpB,OAAQmC,IAAS,KAMhCic,OAAQ,SAAUvZ,EAAMgkB,EAAO1Z,EAAS1L,EAAUmnB,GAEjD,IAAIrlB,EAAGslB,EAAW1Z,EACjB2Y,EAAQC,EAAGC,EACXrK,EAASsK,EAAU9nB,EAAM+nB,EAAYC,EACrCC,EAAWhH,EAASD,QAASte,IAAUue,EAASjf,IAAKU,GAEtD,GAAMulB,IAAeN,EAASM,EAASN,QAAvC,CAMAC,GADAlB,GAAUA,GAAS,IAAKvb,MAAOoP,IAAmB,CAAE,KAC1C5Y,OACV,MAAQimB,IAMP,GAJA5nB,EAAOgoB,GADPhZ,EAAMmX,GAAe3a,KAAMkb,EAAOkB,KAAS,IACpB,GACvBG,GAAe/Y,EAAK,IAAO,IAAKpJ,MAAO,KAAMtC,OAGvCtD,EAAN,CAOAwd,EAAUnc,EAAOwlB,MAAMrJ,QAASxd,IAAU,GAE1C8nB,EAAWH,EADX3nB,GAASsB,EAAWkc,EAAQ2J,aAAe3J,EAAQ8K,WAActoB,IACpC,GAC7BgP,EAAMA,EAAK,IACV,IAAI5G,OAAQ,UAAY2f,EAAW7b,KAAM,iBAAoB,WAG9Dwc,EAAYtlB,EAAI0kB,EAASnmB,OACzB,MAAQyB,IACPykB,EAAYC,EAAU1kB,IAEfqlB,GAAeT,IAAaH,EAAUG,UACzChb,GAAWA,EAAQvH,OAASoiB,EAAUpiB,MACtCuJ,IAAOA,EAAIlD,KAAM+b,EAAU/Z,YAC3BxM,GAAYA,IAAaumB,EAAUvmB,WACxB,OAAbA,IAAqBumB,EAAUvmB,YAChCwmB,EAASvkB,OAAQH,EAAG,GAEfykB,EAAUvmB,UACdwmB,EAASS,gBAEL/K,EAAQvB,QACZuB,EAAQvB,OAAOnd,KAAM4D,EAAMmlB,IAOzBa,IAAcZ,EAASnmB,SACrB6b,EAAQmL,WACkD,IAA/DnL,EAAQmL,SAAS7pB,KAAM4D,EAAMqlB,EAAYE,EAASE,SAElD9mB,EAAOunB,YAAalmB,EAAM1C,EAAMioB,EAASE,eAGnCR,EAAQ3nB,SA1Cf,IAAMA,KAAQ2nB,EACbtmB,EAAOwlB,MAAM5K,OAAQvZ,EAAM1C,EAAO0mB,EAAOkB,GAAK5a,EAAS1L,GAAU,GA8C/DD,EAAOyD,cAAe6iB,IAC1B1G,EAAShF,OAAQvZ,EAAM,mBAIzB2lB,SAAU,SAAUQ,GAEnB,IAAIroB,EAAG4C,EAAGhB,EAAK4Q,EAAS6U,EAAWiB,EAClCjW,EAAO,IAAI5O,MAAOtB,UAAUhB,QAG5BklB,EAAQxlB,EAAOwlB,MAAMkC,IAAKF,GAE1Bf,GACC7G,EAASjf,IAAK3D,KAAM,WAAcI,OAAOypB,OAAQ,OAC/CrB,EAAM7mB,OAAU,GACnBwd,EAAUnc,EAAOwlB,MAAMrJ,QAASqJ,EAAM7mB,OAAU,GAKjD,IAFA6S,EAAM,GAAMgU,EAENrmB,EAAI,EAAGA,EAAImC,UAAUhB,OAAQnB,IAClCqS,EAAMrS,GAAMmC,UAAWnC,GAMxB,GAHAqmB,EAAMmC,eAAiB3qB,MAGlBmf,EAAQyL,cAA2D,IAA5CzL,EAAQyL,YAAYnqB,KAAMT,KAAMwoB,GAA5D,CAKAiC,EAAeznB,EAAOwlB,MAAMiB,SAAShpB,KAAMT,KAAMwoB,EAAOiB,GAGxDtnB,EAAI,EACJ,OAAUwS,EAAU8V,EAActoB,QAAYqmB,EAAMqC,uBAAyB,CAC5ErC,EAAMsC,cAAgBnW,EAAQtQ,KAE9BU,EAAI,EACJ,OAAUykB,EAAY7U,EAAQ8U,SAAU1kB,QACtCyjB,EAAMuC,gCAIDvC,EAAMwC,aAAsC,IAAxBxB,EAAU/Z,YACnC+Y,EAAMwC,WAAWvd,KAAM+b,EAAU/Z,aAEjC+Y,EAAMgB,UAAYA,EAClBhB,EAAM/F,KAAO+G,EAAU/G,UAKV3c,KAHb/B,IAAUf,EAAOwlB,MAAMrJ,QAASqK,EAAUG,WAAc,IAAKG,QAC5DN,EAAU7a,SAAUhO,MAAOgU,EAAQtQ,KAAMmQ,MAGT,KAAzBgU,EAAMjV,OAASxP,KACrBykB,EAAMS,iBACNT,EAAMO,oBAYX,OAJK5J,EAAQ8L,cACZ9L,EAAQ8L,aAAaxqB,KAAMT,KAAMwoB,GAG3BA,EAAMjV,SAGdkW,SAAU,SAAUjB,EAAOiB,GAC1B,IAAItnB,EAAGqnB,EAAWvX,EAAKiZ,EAAiBC,EACvCV,EAAe,GACfP,EAAgBT,EAASS,cACzBpb,EAAM0Z,EAAM/iB,OAGb,GAAKykB,GAIJpb,EAAIvN,YAOc,UAAfinB,EAAM7mB,MAAoC,GAAhB6mB,EAAMxS,QAEnC,KAAQlH,IAAQ9O,KAAM8O,EAAMA,EAAIlM,YAAc5C,KAI7C,GAAsB,IAAjB8O,EAAIvN,WAAoC,UAAfinB,EAAM7mB,OAAqC,IAAjBmN,EAAI1C,UAAsB,CAGjF,IAFA8e,EAAkB,GAClBC,EAAmB,GACbhpB,EAAI,EAAGA,EAAI+nB,EAAe/nB,SAME2D,IAA5BqlB,EAFLlZ,GAHAuX,EAAYC,EAAUtnB,IAGNc,SAAW,OAG1BkoB,EAAkBlZ,GAAQuX,EAAU1e,cACC,EAApC9H,EAAQiP,EAAKjS,MAAOsb,MAAOxM,GAC3B9L,EAAOwN,KAAMyB,EAAKjS,KAAM,KAAM,CAAE8O,IAAQxL,QAErC6nB,EAAkBlZ,IACtBiZ,EAAgBtqB,KAAM4oB,GAGnB0B,EAAgB5nB,QACpBmnB,EAAa7pB,KAAM,CAAEyD,KAAMyK,EAAK2a,SAAUyB,IAY9C,OALApc,EAAM9O,KACDkqB,EAAgBT,EAASnmB,QAC7BmnB,EAAa7pB,KAAM,CAAEyD,KAAMyK,EAAK2a,SAAUA,EAASnpB,MAAO4pB,KAGpDO,GAGRW,QAAS,SAAU/lB,EAAMgmB,GACxBjrB,OAAOkiB,eAAgBtf,EAAOmmB,MAAM5lB,UAAW8B,EAAM,CACpDimB,YAAY,EACZ/I,cAAc,EAEd5e,IAAKtC,EAAYgqB,GAChB,WACC,GAAKrrB,KAAKurB,cACT,OAAOF,EAAMrrB,KAAKurB,gBAGpB,WACC,GAAKvrB,KAAKurB,cACT,OAAOvrB,KAAKurB,cAAelmB,IAI9Bmd,IAAK,SAAUrb,GACd/G,OAAOkiB,eAAgBtiB,KAAMqF,EAAM,CAClCimB,YAAY,EACZ/I,cAAc,EACdiJ,UAAU,EACVrkB,MAAOA,QAMXujB,IAAK,SAAUa,GACd,OAAOA,EAAevoB,EAAO+C,SAC5BwlB,EACA,IAAIvoB,EAAOmmB,MAAOoC,IAGpBpM,QAAS,CACRsM,KAAM,CAGLC,UAAU,GAEXC,MAAO,CAGNxB,MAAO,SAAU1H,GAIhB,IAAIjU,EAAKxO,MAAQyiB,EAWjB,OARKoD,GAAepY,KAAMe,EAAG7M,OAC5B6M,EAAGmd,OAAStf,EAAUmC,EAAI,UAG1Bka,GAAgBla,EAAI,QAASuZ,KAIvB,GAERmB,QAAS,SAAUzG,GAIlB,IAAIjU,EAAKxO,MAAQyiB,EAUjB,OAPKoD,GAAepY,KAAMe,EAAG7M,OAC5B6M,EAAGmd,OAAStf,EAAUmC,EAAI,UAE1Bka,GAAgBla,EAAI,UAId,GAKRkY,SAAU,SAAU8B,GACnB,IAAI/iB,EAAS+iB,EAAM/iB,OACnB,OAAOogB,GAAepY,KAAMhI,EAAO9D,OAClC8D,EAAOkmB,OAAStf,EAAU5G,EAAQ,UAClCmd,EAASjf,IAAK8B,EAAQ,UACtB4G,EAAU5G,EAAQ,OAIrBmmB,aAAc,CACbX,aAAc,SAAUzC,QAID1iB,IAAjB0iB,EAAMjV,QAAwBiV,EAAM+C,gBACxC/C,EAAM+C,cAAcM,YAAcrD,EAAMjV,YAoG7CvQ,EAAOunB,YAAc,SAAUlmB,EAAM1C,EAAMmoB,GAGrCzlB,EAAK0c,qBACT1c,EAAK0c,oBAAqBpf,EAAMmoB,IAIlC9mB,EAAOmmB,MAAQ,SAAUvnB,EAAKkqB,GAG7B,KAAQ9rB,gBAAgBgD,EAAOmmB,OAC9B,OAAO,IAAInmB,EAAOmmB,MAAOvnB,EAAKkqB,GAI1BlqB,GAAOA,EAAID,MACf3B,KAAKurB,cAAgB3pB,EACrB5B,KAAK2B,KAAOC,EAAID,KAIhB3B,KAAK+rB,mBAAqBnqB,EAAIoqB,uBACHlmB,IAAzBlE,EAAIoqB,mBAGgB,IAApBpqB,EAAIiqB,YACL9D,GACAC,GAKDhoB,KAAKyF,OAAW7D,EAAI6D,QAAkC,IAAxB7D,EAAI6D,OAAOlE,SACxCK,EAAI6D,OAAO7C,WACXhB,EAAI6D,OAELzF,KAAK8qB,cAAgBlpB,EAAIkpB,cACzB9qB,KAAKisB,cAAgBrqB,EAAIqqB,eAIzBjsB,KAAK2B,KAAOC,EAIRkqB,GACJ9oB,EAAOmC,OAAQnF,KAAM8rB,GAItB9rB,KAAKksB,UAAYtqB,GAAOA,EAAIsqB,WAAaxjB,KAAKyjB,MAG9CnsB,KAAMgD,EAAO+C,UAAY,GAK1B/C,EAAOmmB,MAAM5lB,UAAY,CACxBE,YAAaT,EAAOmmB,MACpB4C,mBAAoB/D,GACpB6C,qBAAsB7C,GACtB+C,8BAA+B/C,GAC/BoE,aAAa,EAEbnD,eAAgB,WACf,IAAIxc,EAAIzM,KAAKurB,cAEbvrB,KAAK+rB,mBAAqBhE,GAErBtb,IAAMzM,KAAKosB,aACf3f,EAAEwc,kBAGJF,gBAAiB,WAChB,IAAItc,EAAIzM,KAAKurB,cAEbvrB,KAAK6qB,qBAAuB9C,GAEvBtb,IAAMzM,KAAKosB,aACf3f,EAAEsc,mBAGJC,yBAA0B,WACzB,IAAIvc,EAAIzM,KAAKurB,cAEbvrB,KAAK+qB,8BAAgChD,GAEhCtb,IAAMzM,KAAKosB,aACf3f,EAAEuc,2BAGHhpB,KAAK+oB,oBAKP/lB,EAAOkB,KAAM,CACZmoB,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZC,gBAAgB,EAChBC,SAAS,EACTC,QAAQ,EACRC,YAAY,EACZC,SAAS,EACTC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,QAAQ,EACRjrB,MAAM,EACNkrB,UAAU,EACV/e,KAAK,EACLgf,SAAS,EACTnX,QAAQ,EACRoX,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,WAAW,EACXC,aAAa,EACbC,SAAS,EACTC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,SAAS,EACTC,OAAO,GACLhrB,EAAOwlB,MAAM4C,SAEhBpoB,EAAOkB,KAAM,CAAEmR,MAAO,UAAW4Y,KAAM,YAAc,SAAUtsB,EAAMmnB,GACpE9lB,EAAOwlB,MAAMrJ,QAASxd,GAAS,CAG9BwoB,MAAO,WAQN,OAHAzB,GAAgB1oB,KAAM2B,EAAMsmB,KAGrB,GAERiB,QAAS,WAMR,OAHAR,GAAgB1oB,KAAM2B,IAGf,GAKR+kB,SAAU,WACT,OAAO,GAGRoC,aAAcA,KAYhB9lB,EAAOkB,KAAM,CACZgqB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cACZ,SAAUC,EAAM5D,GAClB1nB,EAAOwlB,MAAMrJ,QAASmP,GAAS,CAC9BxF,aAAc4B,EACdT,SAAUS,EAEVZ,OAAQ,SAAUtB,GACjB,IAAIzkB,EAEHwqB,EAAU/F,EAAMyD,cAChBzC,EAAYhB,EAAMgB,UASnB,OALM+E,IAAaA,IANTvuB,MAMgCgD,EAAOyF,SANvCzI,KAMyDuuB,MAClE/F,EAAM7mB,KAAO6nB,EAAUG,SACvB5lB,EAAMylB,EAAU7a,QAAQhO,MAAOX,KAAMsE,WACrCkkB,EAAM7mB,KAAO+oB,GAEP3mB,MAKVf,EAAOG,GAAGgC,OAAQ,CAEjBijB,GAAI,SAAUC,EAAOplB,EAAUwf,EAAMtf,GACpC,OAAOilB,GAAIpoB,KAAMqoB,EAAOplB,EAAUwf,EAAMtf,IAEzCmlB,IAAK,SAAUD,EAAOplB,EAAUwf,EAAMtf,GACrC,OAAOilB,GAAIpoB,KAAMqoB,EAAOplB,EAAUwf,EAAMtf,EAAI,IAE7CslB,IAAK,SAAUJ,EAAOplB,EAAUE,GAC/B,IAAIqmB,EAAW7nB,EACf,GAAK0mB,GAASA,EAAMY,gBAAkBZ,EAAMmB,UAW3C,OARAA,EAAYnB,EAAMmB,UAClBxmB,EAAQqlB,EAAMsC,gBAAiBlC,IAC9Be,EAAU/Z,UACT+Z,EAAUG,SAAW,IAAMH,EAAU/Z,UACrC+Z,EAAUG,SACXH,EAAUvmB,SACVumB,EAAU7a,SAEJ3O,KAER,GAAsB,iBAAVqoB,EAAqB,CAGhC,IAAM1mB,KAAQ0mB,EACbroB,KAAKyoB,IAAK9mB,EAAMsB,EAAUolB,EAAO1mB,IAElC,OAAO3B,KAWR,OATkB,IAAbiD,GAA0C,mBAAbA,IAGjCE,EAAKF,EACLA,OAAW6C,IAEA,IAAP3C,IACJA,EAAK6kB,IAEChoB,KAAKkE,KAAM,WACjBlB,EAAOwlB,MAAM5K,OAAQ5d,KAAMqoB,EAAOllB,EAAIF,QAMzC,IAKCurB,GAAe,wBAGfC,GAAW,oCACXC,GAAe,2CAGhB,SAASC,GAAoBtqB,EAAM2X,GAClC,OAAK3P,EAAUhI,EAAM,UACpBgI,EAA+B,KAArB2P,EAAQza,SAAkBya,EAAUA,EAAQzJ,WAAY,OAE3DvP,EAAQqB,GAAO0W,SAAU,SAAW,IAGrC1W,EAIR,SAASuqB,GAAevqB,GAEvB,OADAA,EAAK1C,MAAyC,OAAhC0C,EAAK7B,aAAc,SAAsB,IAAM6B,EAAK1C,KAC3D0C,EAER,SAASwqB,GAAexqB,GAOvB,MAN2C,WAApCA,EAAK1C,MAAQ,IAAKrB,MAAO,EAAG,GAClC+D,EAAK1C,KAAO0C,EAAK1C,KAAKrB,MAAO,GAE7B+D,EAAK2J,gBAAiB,QAGhB3J,EAGR,SAASyqB,GAAgBltB,EAAKmtB,GAC7B,IAAI5sB,EAAGiZ,EAAGzZ,EAAgBqtB,EAAUC,EAAU3F,EAE9C,GAAuB,IAAlByF,EAAKxtB,SAAV,CAKA,GAAKqhB,EAASD,QAAS/gB,KAEtB0nB,EADW1G,EAASjf,IAAK/B,GACP0nB,QAKjB,IAAM3nB,KAFNihB,EAAShF,OAAQmR,EAAM,iBAETzF,EACb,IAAMnnB,EAAI,EAAGiZ,EAAIkO,EAAQ3nB,GAAO2B,OAAQnB,EAAIiZ,EAAGjZ,IAC9Ca,EAAOwlB,MAAMhN,IAAKuT,EAAMptB,EAAM2nB,EAAQ3nB,GAAQQ,IAO7C0gB,EAASF,QAAS/gB,KACtBotB,EAAWnM,EAASzB,OAAQxf,GAC5BqtB,EAAWjsB,EAAOmC,OAAQ,GAAI6pB,GAE9BnM,EAASL,IAAKuM,EAAME,KAkBtB,SAASC,GAAUC,EAAY3a,EAAMrQ,EAAUojB,GAG9C/S,EAAOjU,EAAMiU,GAEb,IAAIkT,EAAUnjB,EAAO8iB,EAAS+H,EAAYntB,EAAMC,EAC/CC,EAAI,EACJiZ,EAAI+T,EAAW7rB,OACf+rB,EAAWjU,EAAI,EACfjU,EAAQqN,EAAM,GACd8a,EAAkBjuB,EAAY8F,GAG/B,GAAKmoB,GACG,EAAJlU,GAA0B,iBAAVjU,IAChB/F,EAAQ6kB,YAAcwI,GAAShhB,KAAMtG,GACxC,OAAOgoB,EAAWjrB,KAAM,SAAUoX,GACjC,IAAIb,EAAO0U,EAAW3qB,GAAI8W,GACrBgU,IACJ9a,EAAM,GAAMrN,EAAM1G,KAAMT,KAAMsb,EAAOb,EAAK8U,SAE3CL,GAAUzU,EAAMjG,EAAMrQ,EAAUojB,KAIlC,GAAKnM,IAEJ7W,GADAmjB,EAAWN,GAAe5S,EAAM2a,EAAY,GAAIjiB,eAAe,EAAOiiB,EAAY5H,IACjEhV,WAEmB,IAA/BmV,EAASlb,WAAWlJ,SACxBokB,EAAWnjB,GAIPA,GAASgjB,GAAU,CAOvB,IALA6H,GADA/H,EAAUrkB,EAAOoB,IAAKuiB,GAAQe,EAAU,UAAYkH,KAC/BtrB,OAKbnB,EAAIiZ,EAAGjZ,IACdF,EAAOylB,EAEFvlB,IAAMktB,IACVptB,EAAOe,EAAOwC,MAAOvD,GAAM,GAAM,GAG5BmtB,GAIJpsB,EAAOgB,MAAOqjB,EAASV,GAAQ1kB,EAAM,YAIvCkC,EAAS1D,KAAM0uB,EAAYhtB,GAAKF,EAAME,GAGvC,GAAKitB,EAOJ,IANAltB,EAAMmlB,EAASA,EAAQ/jB,OAAS,GAAI4J,cAGpClK,EAAOoB,IAAKijB,EAASwH,IAGf1sB,EAAI,EAAGA,EAAIitB,EAAYjtB,IAC5BF,EAAOolB,EAASllB,GACX4jB,GAAYtY,KAAMxL,EAAKN,MAAQ,MAClCihB,EAASxB,OAAQnf,EAAM,eACxBe,EAAOyF,SAAUvG,EAAKD,KAEjBA,EAAKL,KAA8C,YAArCK,EAAKN,MAAQ,IAAK8F,cAG/BzE,EAAOwsB,WAAavtB,EAAKH,UAC7BkB,EAAOwsB,SAAUvtB,EAAKL,IAAK,CAC1BC,MAAOI,EAAKJ,OAASI,EAAKO,aAAc,UACtCN,GAGJH,EAASE,EAAKqQ,YAAYpM,QAASwoB,GAAc,IAAMzsB,EAAMC,IAQnE,OAAOitB,EAGR,SAASvR,GAAQvZ,EAAMpB,EAAUwsB,GAKhC,IAJA,IAAIxtB,EACH0lB,EAAQ1kB,EAAWD,EAAOsN,OAAQrN,EAAUoB,GAASA,EACrDlC,EAAI,EAE4B,OAAvBF,EAAO0lB,EAAOxlB,IAAeA,IAChCstB,GAA8B,IAAlBxtB,EAAKV,UACtByB,EAAO0sB,UAAW/I,GAAQ1kB,IAGtBA,EAAKW,aACJ6sB,GAAYtL,GAAYliB,IAC5B2kB,GAAeD,GAAQ1kB,EAAM,WAE9BA,EAAKW,WAAWC,YAAaZ,IAI/B,OAAOoC,EAGRrB,EAAOmC,OAAQ,CACdyiB,cAAe,SAAU2H,GACxB,OAAOA,GAGR/pB,MAAO,SAAUnB,EAAMsrB,EAAeC,GACrC,IAAIztB,EAAGiZ,EAAGyU,EAAaC,EApINluB,EAAKmtB,EACnB1iB,EAoIF7G,EAAQnB,EAAK6hB,WAAW,GACxB6J,EAAS5L,GAAY9f,GAGtB,KAAMjD,EAAQ+kB,gBAAsC,IAAlB9hB,EAAK9C,UAAoC,KAAlB8C,EAAK9C,UAC3DyB,EAAO8W,SAAUzV,IAMnB,IAHAyrB,EAAenJ,GAAQnhB,GAGjBrD,EAAI,EAAGiZ,GAFbyU,EAAclJ,GAAQtiB,IAEOf,OAAQnB,EAAIiZ,EAAGjZ,IAhJ5BP,EAiJLiuB,EAAa1tB,GAjJH4sB,EAiJQe,EAAc3tB,QAhJzCkK,EAGc,WAHdA,EAAW0iB,EAAK1iB,SAAS5E,gBAGAoe,GAAepY,KAAM7L,EAAID,MACrDotB,EAAKpZ,QAAU/T,EAAI+T,QAGK,UAAbtJ,GAAqC,aAAbA,IACnC0iB,EAAKnV,aAAehY,EAAIgY,cA6IxB,GAAK+V,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAelJ,GAAQtiB,GACrCyrB,EAAeA,GAAgBnJ,GAAQnhB,GAEjCrD,EAAI,EAAGiZ,EAAIyU,EAAYvsB,OAAQnB,EAAIiZ,EAAGjZ,IAC3C2sB,GAAgBe,EAAa1tB,GAAK2tB,EAAc3tB,SAGjD2sB,GAAgBzqB,EAAMmB,GAWxB,OAL2B,GAD3BsqB,EAAenJ,GAAQnhB,EAAO,WACZlC,QACjBsjB,GAAekJ,GAAeC,GAAUpJ,GAAQtiB,EAAM,WAIhDmB,GAGRkqB,UAAW,SAAU5rB,GAKpB,IAJA,IAAI2e,EAAMpe,EAAM1C,EACfwd,EAAUnc,EAAOwlB,MAAMrJ,QACvBhd,EAAI,OAE6B2D,KAAxBzB,EAAOP,EAAO3B,IAAqBA,IAC5C,GAAK+f,EAAY7d,GAAS,CACzB,GAAOoe,EAAOpe,EAAMue,EAAS7c,SAAc,CAC1C,GAAK0c,EAAK6G,OACT,IAAM3nB,KAAQ8gB,EAAK6G,OACbnK,EAASxd,GACbqB,EAAOwlB,MAAM5K,OAAQvZ,EAAM1C,GAI3BqB,EAAOunB,YAAalmB,EAAM1C,EAAM8gB,EAAKqH,QAOxCzlB,EAAMue,EAAS7c,cAAYD,EAEvBzB,EAAMwe,EAAS9c,WAInB1B,EAAMwe,EAAS9c,cAAYD,OAOhC9C,EAAOG,GAAGgC,OAAQ,CACjB6qB,OAAQ,SAAU/sB,GACjB,OAAO2a,GAAQ5d,KAAMiD,GAAU,IAGhC2a,OAAQ,SAAU3a,GACjB,OAAO2a,GAAQ5d,KAAMiD,IAGtBV,KAAM,SAAU4E,GACf,OAAOia,EAAQphB,KAAM,SAAUmH,GAC9B,YAAiBrB,IAAVqB,EACNnE,EAAOT,KAAMvC,MACbA,KAAK8V,QAAQ5R,KAAM,WACK,IAAlBlE,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,WACxDvB,KAAKsS,YAAcnL,MAGpB,KAAMA,EAAO7C,UAAUhB,SAG3B2sB,OAAQ,WACP,OAAOf,GAAUlvB,KAAMsE,UAAW,SAAUD,GACpB,IAAlBrE,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,UAC3CotB,GAAoB3uB,KAAMqE,GAChC1B,YAAa0B,MAKvB6rB,QAAS,WACR,OAAOhB,GAAUlvB,KAAMsE,UAAW,SAAUD,GAC3C,GAAuB,IAAlBrE,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,SAAiB,CACzE,IAAIkE,EAASkpB,GAAoB3uB,KAAMqE,GACvCoB,EAAO0qB,aAAc9rB,EAAMoB,EAAO8M,gBAKrC6d,OAAQ,WACP,OAAOlB,GAAUlvB,KAAMsE,UAAW,SAAUD,GACtCrE,KAAK4C,YACT5C,KAAK4C,WAAWutB,aAAc9rB,EAAMrE,SAKvCqwB,MAAO,WACN,OAAOnB,GAAUlvB,KAAMsE,UAAW,SAAUD,GACtCrE,KAAK4C,YACT5C,KAAK4C,WAAWutB,aAAc9rB,EAAMrE,KAAKiP,gBAK5C6G,MAAO,WAIN,IAHA,IAAIzR,EACHlC,EAAI,EAE2B,OAAtBkC,EAAOrE,KAAMmC,IAAeA,IACd,IAAlBkC,EAAK9C,WAGTyB,EAAO0sB,UAAW/I,GAAQtiB,GAAM,IAGhCA,EAAKiO,YAAc,IAIrB,OAAOtS,MAGRwF,MAAO,SAAUmqB,EAAeC,GAI/B,OAHAD,EAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzD5vB,KAAKoE,IAAK,WAChB,OAAOpB,EAAOwC,MAAOxF,KAAM2vB,EAAeC,MAI5CL,KAAM,SAAUpoB,GACf,OAAOia,EAAQphB,KAAM,SAAUmH,GAC9B,IAAI9C,EAAOrE,KAAM,IAAO,GACvBmC,EAAI,EACJiZ,EAAIpb,KAAKsD,OAEV,QAAewC,IAAVqB,GAAyC,IAAlB9C,EAAK9C,SAChC,OAAO8C,EAAKwM,UAIb,GAAsB,iBAAV1J,IAAuBqnB,GAAa/gB,KAAMtG,KACpDkf,IAAWP,GAAS3Y,KAAMhG,IAAW,CAAE,GAAI,KAAQ,GAAIM,eAAkB,CAE1EN,EAAQnE,EAAO4kB,cAAezgB,GAE9B,IACC,KAAQhF,EAAIiZ,EAAGjZ,IAIS,KAHvBkC,EAAOrE,KAAMmC,IAAO,IAGVZ,WACTyB,EAAO0sB,UAAW/I,GAAQtiB,GAAM,IAChCA,EAAKwM,UAAY1J,GAInB9C,EAAO,EAGN,MAAQoI,KAGNpI,GACJrE,KAAK8V,QAAQma,OAAQ9oB,IAEpB,KAAMA,EAAO7C,UAAUhB,SAG3BgtB,YAAa,WACZ,IAAI/I,EAAU,GAGd,OAAO2H,GAAUlvB,KAAMsE,UAAW,SAAUD,GAC3C,IAAI8P,EAASnU,KAAK4C,WAEbI,EAAO6D,QAAS7G,KAAMunB,GAAY,IACtCvkB,EAAO0sB,UAAW/I,GAAQ3mB,OACrBmU,GACJA,EAAOoc,aAAclsB,EAAMrE,QAK3BunB,MAILvkB,EAAOkB,KAAM,CACZssB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,eACV,SAAUtrB,EAAMurB,GAClB5tB,EAAOG,GAAIkC,GAAS,SAAUpC,GAO7B,IANA,IAAIa,EACHC,EAAM,GACN8sB,EAAS7tB,EAAQC,GACjBwB,EAAOosB,EAAOvtB,OAAS,EACvBnB,EAAI,EAEGA,GAAKsC,EAAMtC,IAClB2B,EAAQ3B,IAAMsC,EAAOzE,KAAOA,KAAKwF,OAAO,GACxCxC,EAAQ6tB,EAAQ1uB,IAAOyuB,GAAY9sB,GAInClD,EAAKD,MAAOoD,EAAKD,EAAMH,OAGxB,OAAO3D,KAAK6D,UAAWE,MAGzB,IAAI+sB,GAAY,IAAI/mB,OAAQ,KAAOga,GAAO,kBAAmB,KAEzDgN,GAAY,SAAU1sB,GAKxB,IAAI2oB,EAAO3oB,EAAK6I,cAAc4C,YAM9B,OAJMkd,GAASA,EAAKgE,SACnBhE,EAAOjtB,GAGDitB,EAAKiE,iBAAkB5sB,IAG5B6sB,GAAO,SAAU7sB,EAAMe,EAASjB,GACnC,IAAIJ,EAAKsB,EACR8rB,EAAM,GAGP,IAAM9rB,KAAQD,EACb+rB,EAAK9rB,GAAShB,EAAKkgB,MAAOlf,GAC1BhB,EAAKkgB,MAAOlf,GAASD,EAASC,GAM/B,IAAMA,KAHNtB,EAAMI,EAAS1D,KAAM4D,GAGPe,EACbf,EAAKkgB,MAAOlf,GAAS8rB,EAAK9rB,GAG3B,OAAOtB,GAIJqtB,GAAY,IAAIrnB,OAAQma,GAAUrW,KAAM,KAAO,KAiJnD,SAASwjB,GAAQhtB,EAAMgB,EAAMisB,GAC5B,IAAIC,EAAOC,EAAUC,EAAU1tB,EAM9BwgB,EAAQlgB,EAAKkgB,MAqCd,OAnCA+M,EAAWA,GAAYP,GAAW1sB,MAQpB,MAFbN,EAAMutB,EAASI,iBAAkBrsB,IAAUisB,EAAUjsB,KAEjC8e,GAAY9f,KAC/BN,EAAMf,EAAOuhB,MAAOlgB,EAAMgB,KAQrBjE,EAAQuwB,kBAAoBb,GAAUrjB,KAAM1J,IAASqtB,GAAU3jB,KAAMpI,KAG1EksB,EAAQhN,EAAMgN,MACdC,EAAWjN,EAAMiN,SACjBC,EAAWlN,EAAMkN,SAGjBlN,EAAMiN,SAAWjN,EAAMkN,SAAWlN,EAAMgN,MAAQxtB,EAChDA,EAAMutB,EAASC,MAGfhN,EAAMgN,MAAQA,EACdhN,EAAMiN,SAAWA,EACjBjN,EAAMkN,SAAWA,SAIJ3rB,IAAR/B,EAINA,EAAM,GACNA,EAIF,SAAS6tB,GAAcC,EAAaC,GAGnC,MAAO,CACNnuB,IAAK,WACJ,IAAKkuB,IASL,OAAS7xB,KAAK2D,IAAMmuB,GAASnxB,MAAOX,KAAMsE,kBALlCtE,KAAK2D,OA3MhB,WAIC,SAASouB,IAGR,GAAMnM,EAAN,CAIAoM,EAAUzN,MAAM0N,QAAU,+EAE1BrM,EAAIrB,MAAM0N,QACT,4HAGDtiB,GAAgBhN,YAAaqvB,GAAYrvB,YAAaijB,GAEtD,IAAIsM,EAAWnyB,EAAOkxB,iBAAkBrL,GACxCuM,EAAoC,OAAjBD,EAASniB,IAG5BqiB,EAAsE,KAA9CC,EAAoBH,EAASI,YAIrD1M,EAAIrB,MAAMgO,MAAQ,MAClBC,EAA6D,KAAzCH,EAAoBH,EAASK,OAIjDE,EAAgE,KAAzCJ,EAAoBH,EAASX,OAMpD3L,EAAIrB,MAAMmO,SAAW,WACrBC,EAAiE,KAA9CN,EAAoBzM,EAAIgN,YAAc,GAEzDjjB,GAAgB9M,YAAamvB,GAI7BpM,EAAM,MAGP,SAASyM,EAAoBQ,GAC5B,OAAO7sB,KAAK8sB,MAAOC,WAAYF,IAGhC,IAAIV,EAAkBM,EAAsBE,EAAkBH,EAC7DQ,EAAyBZ,EACzBJ,EAAYpyB,EAAS0C,cAAe,OACpCsjB,EAAMhmB,EAAS0C,cAAe,OAGzBsjB,EAAIrB,QAMVqB,EAAIrB,MAAM0O,eAAiB,cAC3BrN,EAAIM,WAAW,GAAO3B,MAAM0O,eAAiB,GAC7C7xB,EAAQ8xB,gBAA+C,gBAA7BtN,EAAIrB,MAAM0O,eAEpCjwB,EAAOmC,OAAQ/D,EAAS,CACvB+xB,kBAAmB,WAElB,OADApB,IACOU,GAERd,eAAgB,WAEf,OADAI,IACOS,GAERY,cAAe,WAEd,OADArB,IACOI,GAERkB,mBAAoB,WAEnB,OADAtB,IACOK,GAERkB,cAAe,WAEd,OADAvB,IACOY,GAYRY,qBAAsB,WACrB,IAAIC,EAAOhN,EAAIiN,EAASC,EAmCxB,OAlCgC,MAA3BV,IACJQ,EAAQ5zB,EAAS0C,cAAe,SAChCkkB,EAAK5mB,EAAS0C,cAAe,MAC7BmxB,EAAU7zB,EAAS0C,cAAe,OAElCkxB,EAAMjP,MAAM0N,QAAU,2DACtBzL,EAAGjC,MAAM0N,QAAU,mBAKnBzL,EAAGjC,MAAMoP,OAAS,MAClBF,EAAQlP,MAAMoP,OAAS,MAQvBF,EAAQlP,MAAMC,QAAU,QAExB7U,GACEhN,YAAa6wB,GACb7wB,YAAa6jB,GACb7jB,YAAa8wB,GAEfC,EAAU3zB,EAAOkxB,iBAAkBzK,GACnCwM,EAA4BY,SAAUF,EAAQC,OAAQ,IACrDC,SAAUF,EAAQG,eAAgB,IAClCD,SAAUF,EAAQI,kBAAmB,MAAWtN,EAAGuN,aAEpDpkB,GAAgB9M,YAAa2wB,IAEvBR,MAvIV,GAsNA,IAAIgB,GAAc,CAAE,SAAU,MAAO,MACpCC,GAAar0B,EAAS0C,cAAe,OAAQiiB,MAC7C2P,GAAc,GAkBf,SAASC,GAAe9uB,GACvB,IAAI+uB,EAAQpxB,EAAOqxB,SAAUhvB,IAAU6uB,GAAa7uB,GAEpD,OAAK+uB,IAGA/uB,KAAQ4uB,GACL5uB,EAED6uB,GAAa7uB,GAxBrB,SAAyBA,GAGxB,IAAIivB,EAAUjvB,EAAM,GAAI0c,cAAgB1c,EAAK/E,MAAO,GACnD6B,EAAI6xB,GAAY1wB,OAEjB,MAAQnB,IAEP,IADAkD,EAAO2uB,GAAa7xB,GAAMmyB,KACbL,GACZ,OAAO5uB,EAeoBkvB,CAAgBlvB,IAAUA,GAIxD,IAKCmvB,GAAe,4BACfC,GAAc,MACdC,GAAU,CAAEhC,SAAU,WAAYiC,WAAY,SAAUnQ,QAAS,SACjEoQ,GAAqB,CACpBC,cAAe,IACfC,WAAY,OAGd,SAASC,GAAmBnwB,EAAOuC,EAAO6tB,GAIzC,IAAIhuB,EAAUid,GAAQ9W,KAAMhG,GAC5B,OAAOH,EAGNhB,KAAKivB,IAAK,EAAGjuB,EAAS,IAAQguB,GAAY,KAAUhuB,EAAS,IAAO,MACpEG,EAGF,SAAS+tB,GAAoB7wB,EAAM8wB,EAAWC,EAAKC,EAAaC,EAAQC,GACvE,IAAIpzB,EAAkB,UAAdgzB,EAAwB,EAAI,EACnCK,EAAQ,EACRC,EAAQ,EAGT,GAAKL,KAAUC,EAAc,SAAW,WACvC,OAAO,EAGR,KAAQlzB,EAAI,EAAGA,GAAK,EAGN,WAARizB,IACJK,GAASzyB,EAAOyhB,IAAKpgB,EAAM+wB,EAAMlR,GAAW/hB,IAAK,EAAMmzB,IAIlDD,GAmBQ,YAARD,IACJK,GAASzyB,EAAOyhB,IAAKpgB,EAAM,UAAY6f,GAAW/hB,IAAK,EAAMmzB,IAIjD,WAARF,IACJK,GAASzyB,EAAOyhB,IAAKpgB,EAAM,SAAW6f,GAAW/hB,GAAM,SAAS,EAAMmzB,MAtBvEG,GAASzyB,EAAOyhB,IAAKpgB,EAAM,UAAY6f,GAAW/hB,IAAK,EAAMmzB,GAGhD,YAARF,EACJK,GAASzyB,EAAOyhB,IAAKpgB,EAAM,SAAW6f,GAAW/hB,GAAM,SAAS,EAAMmzB,GAItEE,GAASxyB,EAAOyhB,IAAKpgB,EAAM,SAAW6f,GAAW/hB,GAAM,SAAS,EAAMmzB,IAoCzE,OAhBMD,GAA8B,GAAfE,IAIpBE,GAASzvB,KAAKivB,IAAK,EAAGjvB,KAAK0vB,KAC1BrxB,EAAM,SAAW8wB,EAAW,GAAIpT,cAAgBoT,EAAU70B,MAAO,IACjEi1B,EACAE,EACAD,EACA,MAIM,GAGDC,EAGR,SAASE,GAAkBtxB,EAAM8wB,EAAWK,GAG3C,IAAIF,EAASvE,GAAW1sB,GAKvBgxB,IADmBj0B,EAAQ+xB,qBAAuBqC,IAEE,eAAnDxyB,EAAOyhB,IAAKpgB,EAAM,aAAa,EAAOixB,GACvCM,EAAmBP,EAEnBjzB,EAAMivB,GAAQhtB,EAAM8wB,EAAWG,GAC/BO,EAAa,SAAWV,EAAW,GAAIpT,cAAgBoT,EAAU70B,MAAO,GAIzE,GAAKwwB,GAAUrjB,KAAMrL,GAAQ,CAC5B,IAAMozB,EACL,OAAOpzB,EAERA,EAAM,OAyCP,QAlCQhB,EAAQ+xB,qBAAuBkC,IAMrCj0B,EAAQmyB,wBAA0BlnB,EAAUhI,EAAM,OAI3C,SAARjC,IAIC2wB,WAAY3wB,IAA0D,WAAjDY,EAAOyhB,IAAKpgB,EAAM,WAAW,EAAOixB,KAG1DjxB,EAAKyxB,iBAAiBxyB,SAEtB+xB,EAAiE,eAAnDryB,EAAOyhB,IAAKpgB,EAAM,aAAa,EAAOixB,IAKpDM,EAAmBC,KAAcxxB,KAEhCjC,EAAMiC,EAAMwxB,MAKdzzB,EAAM2wB,WAAY3wB,IAAS,GAI1B8yB,GACC7wB,EACA8wB,EACAK,IAAWH,EAAc,SAAW,WACpCO,EACAN,EAGAlzB,GAEE,KA+SL,SAAS2zB,GAAO1xB,EAAMe,EAASsd,EAAM1d,EAAKgxB,GACzC,OAAO,IAAID,GAAMxyB,UAAUH,KAAMiB,EAAMe,EAASsd,EAAM1d,EAAKgxB,GA7S5DhzB,EAAOmC,OAAQ,CAId8wB,SAAU,CACTC,QAAS,CACRvyB,IAAK,SAAUU,EAAMitB,GACpB,GAAKA,EAAW,CAGf,IAAIvtB,EAAMstB,GAAQhtB,EAAM,WACxB,MAAe,KAARN,EAAa,IAAMA,MAO9BohB,UAAW,CACVgR,yBAA2B,EAC3BC,aAAe,EACfC,aAAe,EACfC,UAAY,EACZC,YAAc,EACdzB,YAAc,EACd0B,UAAY,EACZC,YAAc,EACdC,eAAiB,EACjBC,iBAAmB,EACnBC,SAAW,EACXC,YAAc,EACdC,cAAgB,EAChBC,YAAc,EACdb,SAAW,EACXc,OAAS,EACTC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVC,MAAQ,GAKT/C,SAAU,GAGV9P,MAAO,SAAUlgB,EAAMgB,EAAM8B,EAAOquB,GAGnC,GAAMnxB,GAA0B,IAAlBA,EAAK9C,UAAoC,IAAlB8C,EAAK9C,UAAmB8C,EAAKkgB,MAAlE,CAKA,IAAIxgB,EAAKpC,EAAM6hB,EACd6T,EAAWrV,EAAW3c,GACtBiyB,EAAe7C,GAAYhnB,KAAMpI,GACjCkf,EAAQlgB,EAAKkgB,MAad,GARM+S,IACLjyB,EAAO8uB,GAAekD,IAIvB7T,EAAQxgB,EAAOizB,SAAU5wB,IAAUrC,EAAOizB,SAAUoB,QAGrCvxB,IAAVqB,EA0CJ,OAAKqc,GAAS,QAASA,QACwB1d,KAA5C/B,EAAMyf,EAAM7f,IAAKU,GAAM,EAAOmxB,IAEzBzxB,EAIDwgB,EAAOlf,GA7CA,YAHd1D,SAAcwF,KAGcpD,EAAMkgB,GAAQ9W,KAAMhG,KAAapD,EAAK,KACjEoD,EAAQud,GAAWrgB,EAAMgB,EAAMtB,GAG/BpC,EAAO,UAIM,MAATwF,GAAiBA,GAAUA,IAOlB,WAATxF,GAAsB21B,IAC1BnwB,GAASpD,GAAOA,EAAK,KAASf,EAAOmiB,UAAWkS,GAAa,GAAK,OAI7Dj2B,EAAQ8xB,iBAA6B,KAAV/rB,GAAiD,IAAjC9B,EAAKxE,QAAS,gBAC9D0jB,EAAOlf,GAAS,WAIXme,GAAY,QAASA,QACsB1d,KAA9CqB,EAAQqc,EAAMhB,IAAKne,EAAM8C,EAAOquB,MAE7B8B,EACJ/S,EAAMgT,YAAalyB,EAAM8B,GAEzBod,EAAOlf,GAAS8B,MAkBpBsd,IAAK,SAAUpgB,EAAMgB,EAAMmwB,EAAOF,GACjC,IAAIlzB,EAAKwB,EAAK4f,EACb6T,EAAWrV,EAAW3c,GA6BvB,OA5BgBovB,GAAYhnB,KAAMpI,KAMjCA,EAAO8uB,GAAekD,KAIvB7T,EAAQxgB,EAAOizB,SAAU5wB,IAAUrC,EAAOizB,SAAUoB,KAGtC,QAAS7T,IACtBphB,EAAMohB,EAAM7f,IAAKU,GAAM,EAAMmxB,SAIjB1vB,IAAR1D,IACJA,EAAMivB,GAAQhtB,EAAMgB,EAAMiwB,IAId,WAARlzB,GAAoBiD,KAAQuvB,KAChCxyB,EAAMwyB,GAAoBvvB,IAIZ,KAAVmwB,GAAgBA,GACpB5xB,EAAMmvB,WAAY3wB,IACD,IAAVozB,GAAkBgC,SAAU5zB,GAAQA,GAAO,EAAIxB,GAGhDA,KAITY,EAAOkB,KAAM,CAAE,SAAU,SAAW,SAAUsD,EAAI2tB,GACjDnyB,EAAOizB,SAAUd,GAAc,CAC9BxxB,IAAK,SAAUU,EAAMitB,EAAUkE,GAC9B,GAAKlE,EAIJ,OAAOkD,GAAa/mB,KAAMzK,EAAOyhB,IAAKpgB,EAAM,aAQxCA,EAAKyxB,iBAAiBxyB,QAAWe,EAAKozB,wBAAwBlG,MAIjEoE,GAAkBtxB,EAAM8wB,EAAWK,GAHnCtE,GAAM7sB,EAAMqwB,GAAS,WACpB,OAAOiB,GAAkBtxB,EAAM8wB,EAAWK,MAM9ChT,IAAK,SAAUne,EAAM8C,EAAOquB,GAC3B,IAAIxuB,EACHsuB,EAASvE,GAAW1sB,GAIpBqzB,GAAsBt2B,EAAQkyB,iBACT,aAApBgC,EAAO5C,SAIR2C,GADkBqC,GAAsBlC,IAEY,eAAnDxyB,EAAOyhB,IAAKpgB,EAAM,aAAa,EAAOixB,GACvCN,EAAWQ,EACVN,GACC7wB,EACA8wB,EACAK,EACAH,EACAC,GAED,EAqBF,OAjBKD,GAAeqC,IACnB1C,GAAYhvB,KAAK0vB,KAChBrxB,EAAM,SAAW8wB,EAAW,GAAIpT,cAAgBoT,EAAU70B,MAAO,IACjEyyB,WAAYuC,EAAQH,IACpBD,GAAoB7wB,EAAM8wB,EAAW,UAAU,EAAOG,GACtD,KAKGN,IAAchuB,EAAUid,GAAQ9W,KAAMhG,KACb,QAA3BH,EAAS,IAAO,QAElB3C,EAAKkgB,MAAO4Q,GAAchuB,EAC1BA,EAAQnE,EAAOyhB,IAAKpgB,EAAM8wB,IAGpBJ,GAAmB1wB,EAAM8C,EAAO6tB,OAK1ChyB,EAAOizB,SAAS3D,WAAaV,GAAcxwB,EAAQiyB,mBAClD,SAAUhvB,EAAMitB,GACf,GAAKA,EACJ,OAASyB,WAAY1B,GAAQhtB,EAAM,gBAClCA,EAAKozB,wBAAwBE,KAC5BzG,GAAM7sB,EAAM,CAAEiuB,WAAY,GAAK,WAC9B,OAAOjuB,EAAKozB,wBAAwBE,QAEnC,OAMP30B,EAAOkB,KAAM,CACZ0zB,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUC,EAAQC,GACpBh1B,EAAOizB,SAAU8B,EAASC,GAAW,CACpCC,OAAQ,SAAU9wB,GAOjB,IANA,IAAIhF,EAAI,EACP+1B,EAAW,GAGXC,EAAyB,iBAAVhxB,EAAqBA,EAAMI,MAAO,KAAQ,CAAEJ,GAEpDhF,EAAI,EAAGA,IACd+1B,EAAUH,EAAS7T,GAAW/hB,GAAM61B,GACnCG,EAAOh2B,IAAOg2B,EAAOh2B,EAAI,IAAOg2B,EAAO,GAGzC,OAAOD,IAIO,WAAXH,IACJ/0B,EAAOizB,SAAU8B,EAASC,GAASxV,IAAMuS,MAI3C/xB,EAAOG,GAAGgC,OAAQ,CACjBsf,IAAK,SAAUpf,EAAM8B,GACpB,OAAOia,EAAQphB,KAAM,SAAUqE,EAAMgB,EAAM8B,GAC1C,IAAImuB,EAAQxwB,EACXV,EAAM,GACNjC,EAAI,EAEL,GAAKyD,MAAMC,QAASR,GAAS,CAI5B,IAHAiwB,EAASvE,GAAW1sB,GACpBS,EAAMO,EAAK/B,OAEHnB,EAAI2C,EAAK3C,IAChBiC,EAAKiB,EAAMlD,IAAQa,EAAOyhB,IAAKpgB,EAAMgB,EAAMlD,IAAK,EAAOmzB,GAGxD,OAAOlxB,EAGR,YAAiB0B,IAAVqB,EACNnE,EAAOuhB,MAAOlgB,EAAMgB,EAAM8B,GAC1BnE,EAAOyhB,IAAKpgB,EAAMgB,IACjBA,EAAM8B,EAA0B,EAAnB7C,UAAUhB,aAQ5BN,EAAO+yB,MAAQA,IAETxyB,UAAY,CACjBE,YAAasyB,GACb3yB,KAAM,SAAUiB,EAAMe,EAASsd,EAAM1d,EAAKgxB,EAAQ9Q,GACjDllB,KAAKqE,KAAOA,EACZrE,KAAK0iB,KAAOA,EACZ1iB,KAAKg2B,OAASA,GAAUhzB,EAAOgzB,OAAOtP,SACtC1mB,KAAKoF,QAAUA,EACfpF,KAAKkU,MAAQlU,KAAKmsB,IAAMnsB,KAAK8O,MAC7B9O,KAAKgF,IAAMA,EACXhF,KAAKklB,KAAOA,IAAUliB,EAAOmiB,UAAWzC,GAAS,GAAK,OAEvD5T,IAAK,WACJ,IAAI0U,EAAQuS,GAAMqC,UAAWp4B,KAAK0iB,MAElC,OAAOc,GAASA,EAAM7f,IACrB6f,EAAM7f,IAAK3D,MACX+1B,GAAMqC,UAAU1R,SAAS/iB,IAAK3D,OAEhCq4B,IAAK,SAAUC,GACd,IAAIC,EACH/U,EAAQuS,GAAMqC,UAAWp4B,KAAK0iB,MAoB/B,OAlBK1iB,KAAKoF,QAAQozB,SACjBx4B,KAAKy4B,IAAMF,EAAQv1B,EAAOgzB,OAAQh2B,KAAKg2B,QACtCsC,EAASt4B,KAAKoF,QAAQozB,SAAWF,EAAS,EAAG,EAAGt4B,KAAKoF,QAAQozB,UAG9Dx4B,KAAKy4B,IAAMF,EAAQD,EAEpBt4B,KAAKmsB,KAAQnsB,KAAKgF,IAAMhF,KAAKkU,OAAUqkB,EAAQv4B,KAAKkU,MAE/ClU,KAAKoF,QAAQszB,MACjB14B,KAAKoF,QAAQszB,KAAKj4B,KAAMT,KAAKqE,KAAMrE,KAAKmsB,IAAKnsB,MAGzCwjB,GAASA,EAAMhB,IACnBgB,EAAMhB,IAAKxiB,MAEX+1B,GAAMqC,UAAU1R,SAASlE,IAAKxiB,MAExBA,QAIOoD,KAAKG,UAAYwyB,GAAMxyB,WAEvCwyB,GAAMqC,UAAY,CACjB1R,SAAU,CACT/iB,IAAK,SAAUihB,GACd,IAAIrR,EAIJ,OAA6B,IAAxBqR,EAAMvgB,KAAK9C,UACa,MAA5BqjB,EAAMvgB,KAAMugB,EAAMlC,OAAoD,MAAlCkC,EAAMvgB,KAAKkgB,MAAOK,EAAMlC,MACrDkC,EAAMvgB,KAAMugB,EAAMlC,OAO1BnP,EAASvQ,EAAOyhB,IAAKG,EAAMvgB,KAAMugB,EAAMlC,KAAM,MAGhB,SAAXnP,EAAwBA,EAAJ,GAEvCiP,IAAK,SAAUoC,GAKT5hB,EAAO21B,GAAGD,KAAM9T,EAAMlC,MAC1B1f,EAAO21B,GAAGD,KAAM9T,EAAMlC,MAAQkC,GACK,IAAxBA,EAAMvgB,KAAK9C,WACtByB,EAAOizB,SAAUrR,EAAMlC,OAC6B,MAAnDkC,EAAMvgB,KAAKkgB,MAAO4P,GAAevP,EAAMlC,OAGxCkC,EAAMvgB,KAAMugB,EAAMlC,MAASkC,EAAMuH,IAFjCnpB,EAAOuhB,MAAOK,EAAMvgB,KAAMugB,EAAMlC,KAAMkC,EAAMuH,IAAMvH,EAAMM,UAU5C0T,UAAY7C,GAAMqC,UAAUS,WAAa,CACxDrW,IAAK,SAAUoC,GACTA,EAAMvgB,KAAK9C,UAAYqjB,EAAMvgB,KAAKzB,aACtCgiB,EAAMvgB,KAAMugB,EAAMlC,MAASkC,EAAMuH,OAKpCnpB,EAAOgzB,OAAS,CACf8C,OAAQ,SAAUC,GACjB,OAAOA,GAERC,MAAO,SAAUD,GAChB,MAAO,GAAM/yB,KAAKizB,IAAKF,EAAI/yB,KAAKkzB,IAAO,GAExCxS,SAAU,SAGX1jB,EAAO21B,GAAK5C,GAAMxyB,UAAUH,KAG5BJ,EAAO21B,GAAGD,KAAO,GAKjB,IACCS,GAAOC,GAmrBHxoB,GAEHyoB,GAprBDC,GAAW,yBACXC,GAAO,cAER,SAASC,KACHJ,MACqB,IAApBx5B,EAAS65B,QAAoB15B,EAAO25B,sBACxC35B,EAAO25B,sBAAuBF,IAE9Bz5B,EAAO+f,WAAY0Z,GAAUx2B,EAAO21B,GAAGgB,UAGxC32B,EAAO21B,GAAGiB,QAKZ,SAASC,KAIR,OAHA95B,EAAO+f,WAAY,WAClBqZ,QAAQrzB,IAEAqzB,GAAQzwB,KAAKyjB,MAIvB,SAAS2N,GAAOn4B,EAAMo4B,GACrB,IAAI/L,EACH7rB,EAAI,EACJuM,EAAQ,CAAEilB,OAAQhyB,GAKnB,IADAo4B,EAAeA,EAAe,EAAI,EAC1B53B,EAAI,EAAGA,GAAK,EAAI43B,EAEvBrrB,EAAO,UADPsf,EAAQ9J,GAAW/hB,KACSuM,EAAO,UAAYsf,GAAUrsB,EAO1D,OAJKo4B,IACJrrB,EAAMwnB,QAAUxnB,EAAM6iB,MAAQ5vB,GAGxB+M,EAGR,SAASsrB,GAAa7yB,EAAOub,EAAMuX,GAKlC,IAJA,IAAIrV,EACHuK,GAAe+K,GAAUC,SAAUzX,IAAU,IAAKhiB,OAAQw5B,GAAUC,SAAU,MAC9E7e,EAAQ,EACRhY,EAAS6rB,EAAW7rB,OACbgY,EAAQhY,EAAQgY,IACvB,GAAOsJ,EAAQuK,EAAY7T,GAAQ7a,KAAMw5B,EAAWvX,EAAMvb,GAGzD,OAAOyd,EAsNV,SAASsV,GAAW71B,EAAM+1B,EAAYh1B,GACrC,IAAImO,EACH8mB,EACA/e,EAAQ,EACRhY,EAAS42B,GAAUI,WAAWh3B,OAC9B+a,EAAWrb,EAAOgb,WAAWI,OAAQ,kBAG7Bwb,EAAKv1B,OAEbu1B,EAAO,WACN,GAAKS,EACJ,OAAO,EAYR,IAVA,IAAIE,EAAcpB,IAASU,KAC1B3Z,EAAYla,KAAKivB,IAAK,EAAGgF,EAAUO,UAAYP,EAAUzB,SAAW+B,GAKpEjC,EAAU,GADHpY,EAAY+Z,EAAUzB,UAAY,GAEzCld,EAAQ,EACRhY,EAAS22B,EAAUQ,OAAOn3B,OAEnBgY,EAAQhY,EAAQgY,IACvB2e,EAAUQ,OAAQnf,GAAQ+c,IAAKC,GAMhC,OAHAja,EAASkB,WAAYlb,EAAM,CAAE41B,EAAW3B,EAASpY,IAG5CoY,EAAU,GAAKh1B,EACZ4c,GAIF5c,GACL+a,EAASkB,WAAYlb,EAAM,CAAE41B,EAAW,EAAG,IAI5C5b,EAASmB,YAAanb,EAAM,CAAE41B,KACvB,IAERA,EAAY5b,EAASzB,QAAS,CAC7BvY,KAAMA,EACNynB,MAAO9oB,EAAOmC,OAAQ,GAAIi1B,GAC1BM,KAAM13B,EAAOmC,QAAQ,EAAM,CAC1Bw1B,cAAe,GACf3E,OAAQhzB,EAAOgzB,OAAOtP,UACpBthB,GACHw1B,mBAAoBR,EACpBS,gBAAiBz1B,EACjBo1B,UAAWrB,IAASU,KACpBrB,SAAUpzB,EAAQozB,SAClBiC,OAAQ,GACRT,YAAa,SAAUtX,EAAM1d,GAC5B,IAAI4f,EAAQ5hB,EAAO+yB,MAAO1xB,EAAM41B,EAAUS,KAAMhY,EAAM1d,EACrDi1B,EAAUS,KAAKC,cAAejY,IAAUuX,EAAUS,KAAK1E,QAExD,OADAiE,EAAUQ,OAAO75B,KAAMgkB,GAChBA,GAERlB,KAAM,SAAUoX,GACf,IAAIxf,EAAQ,EAIXhY,EAASw3B,EAAUb,EAAUQ,OAAOn3B,OAAS,EAC9C,GAAK+2B,EACJ,OAAOr6B,KAGR,IADAq6B,GAAU,EACF/e,EAAQhY,EAAQgY,IACvB2e,EAAUQ,OAAQnf,GAAQ+c,IAAK,GAUhC,OANKyC,GACJzc,EAASkB,WAAYlb,EAAM,CAAE41B,EAAW,EAAG,IAC3C5b,EAASmB,YAAanb,EAAM,CAAE41B,EAAWa,KAEzCzc,EAASuB,WAAYvb,EAAM,CAAE41B,EAAWa,IAElC96B,QAGT8rB,EAAQmO,EAAUnO,MAInB,KA/HD,SAAqBA,EAAO6O,GAC3B,IAAIrf,EAAOjW,EAAM2wB,EAAQ7uB,EAAOqc,EAGhC,IAAMlI,KAASwQ,EAed,GAbAkK,EAAS2E,EADTt1B,EAAO2c,EAAW1G,IAElBnU,EAAQ2kB,EAAOxQ,GACV1V,MAAMC,QAASsB,KACnB6uB,EAAS7uB,EAAO,GAChBA,EAAQ2kB,EAAOxQ,GAAUnU,EAAO,IAG5BmU,IAAUjW,IACdymB,EAAOzmB,GAAS8B,SACT2kB,EAAOxQ,KAGfkI,EAAQxgB,EAAOizB,SAAU5wB,KACX,WAAYme,EAMzB,IAAMlI,KALNnU,EAAQqc,EAAMyU,OAAQ9wB,UACf2kB,EAAOzmB,GAIC8B,EACNmU,KAASwQ,IAChBA,EAAOxQ,GAAUnU,EAAOmU,GACxBqf,EAAerf,GAAU0a,QAI3B2E,EAAet1B,GAAS2wB,EA6F1B+E,CAAYjP,EAAOmO,EAAUS,KAAKC,eAE1Brf,EAAQhY,EAAQgY,IAEvB,GADA/H,EAAS2mB,GAAUI,WAAYhf,GAAQ7a,KAAMw5B,EAAW51B,EAAMynB,EAAOmO,EAAUS,MAM9E,OAJKr5B,EAAYkS,EAAOmQ,QACvB1gB,EAAOygB,YAAawW,EAAU51B,KAAM41B,EAAUS,KAAKnd,OAAQmG,KAC1DnQ,EAAOmQ,KAAKsX,KAAMznB,IAEbA,EAyBT,OArBAvQ,EAAOoB,IAAK0nB,EAAOkO,GAAaC,GAE3B54B,EAAY44B,EAAUS,KAAKxmB,QAC/B+lB,EAAUS,KAAKxmB,MAAMzT,KAAM4D,EAAM41B,GAIlCA,EACErb,SAAUqb,EAAUS,KAAK9b,UACzB/V,KAAMoxB,EAAUS,KAAK7xB,KAAMoxB,EAAUS,KAAKO,UAC1Cpe,KAAMod,EAAUS,KAAK7d,MACrBuB,OAAQ6b,EAAUS,KAAKtc,QAEzBpb,EAAO21B,GAAGuC,MACTl4B,EAAOmC,OAAQy0B,EAAM,CACpBv1B,KAAMA,EACN82B,KAAMlB,EACN1c,MAAO0c,EAAUS,KAAKnd,SAIjB0c,EAGRj3B,EAAOk3B,UAAYl3B,EAAOmC,OAAQ+0B,GAAW,CAE5CC,SAAU,CACTiB,IAAK,CAAE,SAAU1Y,EAAMvb,GACtB,IAAIyd,EAAQ5kB,KAAKg6B,YAAatX,EAAMvb,GAEpC,OADAud,GAAWE,EAAMvgB,KAAMqe,EAAMuB,GAAQ9W,KAAMhG,GAASyd,GAC7CA,KAITyW,QAAS,SAAUvP,EAAO3nB,GACpB9C,EAAYyqB,IAChB3nB,EAAW2nB,EACXA,EAAQ,CAAE,MAEVA,EAAQA,EAAMhf,MAAOoP,GAOtB,IAJA,IAAIwG,EACHpH,EAAQ,EACRhY,EAASwoB,EAAMxoB,OAERgY,EAAQhY,EAAQgY,IACvBoH,EAAOoJ,EAAOxQ,GACd4e,GAAUC,SAAUzX,GAASwX,GAAUC,SAAUzX,IAAU,GAC3DwX,GAAUC,SAAUzX,GAAO9Q,QAASzN,IAItCm2B,WAAY,CA3Wb,SAA2Bj2B,EAAMynB,EAAO4O,GACvC,IAAIhY,EAAMvb,EAAOwe,EAAQnC,EAAO8X,EAASC,EAAWC,EAAgBhX,EACnEiX,EAAQ,UAAW3P,GAAS,WAAYA,EACxCqP,EAAOn7B,KACPsuB,EAAO,GACP/J,EAAQlgB,EAAKkgB,MACbkV,EAASp1B,EAAK9C,UAAY+iB,GAAoBjgB,GAC9Cq3B,EAAW9Y,EAASjf,IAAKU,EAAM,UA6BhC,IAAMqe,KA1BAgY,EAAKnd,QAEa,OADvBiG,EAAQxgB,EAAOygB,YAAapf,EAAM,OACvBs3B,WACVnY,EAAMmY,SAAW,EACjBL,EAAU9X,EAAM1N,MAAM2H,KACtB+F,EAAM1N,MAAM2H,KAAO,WACZ+F,EAAMmY,UACXL,MAIH9X,EAAMmY,WAENR,EAAK/c,OAAQ,WAGZ+c,EAAK/c,OAAQ,WACZoF,EAAMmY,WACA34B,EAAOua,MAAOlZ,EAAM,MAAOf,QAChCkgB,EAAM1N,MAAM2H,YAOFqO,EAEb,GADA3kB,EAAQ2kB,EAAOpJ,GACV4W,GAAS7rB,KAAMtG,GAAU,CAG7B,UAFO2kB,EAAOpJ,GACdiD,EAASA,GAAoB,WAAVxe,EACdA,KAAYsyB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAVtyB,IAAoBu0B,QAAiC51B,IAArB41B,EAAUhZ,GAK9C,SAJA+W,GAAS,EAOXnL,EAAM5L,GAASgZ,GAAYA,EAAUhZ,IAAU1f,EAAOuhB,MAAOlgB,EAAMqe,GAMrE,IADA6Y,GAAav4B,EAAOyD,cAAeqlB,MAChB9oB,EAAOyD,cAAe6nB,GA8DzC,IAAM5L,KAzDD+Y,GAA2B,IAAlBp3B,EAAK9C,WAMlBm5B,EAAKkB,SAAW,CAAErX,EAAMqX,SAAUrX,EAAMsX,UAAWtX,EAAMuX,WAIlC,OADvBN,EAAiBE,GAAYA,EAASlX,WAErCgX,EAAiB5Y,EAASjf,IAAKU,EAAM,YAGrB,UADjBmgB,EAAUxhB,EAAOyhB,IAAKpgB,EAAM,cAEtBm3B,EACJhX,EAAUgX,GAIVlW,GAAU,CAAEjhB,IAAQ,GACpBm3B,EAAiBn3B,EAAKkgB,MAAMC,SAAWgX,EACvChX,EAAUxhB,EAAOyhB,IAAKpgB,EAAM,WAC5BihB,GAAU,CAAEjhB,OAKG,WAAZmgB,GAAoC,iBAAZA,GAAgD,MAAlBgX,IACrB,SAAhCx4B,EAAOyhB,IAAKpgB,EAAM,WAGhBk3B,IACLJ,EAAKtyB,KAAM,WACV0b,EAAMC,QAAUgX,IAEM,MAAlBA,IACJhX,EAAUD,EAAMC,QAChBgX,EAA6B,SAAZhX,EAAqB,GAAKA,IAG7CD,EAAMC,QAAU,iBAKdkW,EAAKkB,WACTrX,EAAMqX,SAAW,SACjBT,EAAK/c,OAAQ,WACZmG,EAAMqX,SAAWlB,EAAKkB,SAAU,GAChCrX,EAAMsX,UAAYnB,EAAKkB,SAAU,GACjCrX,EAAMuX,UAAYpB,EAAKkB,SAAU,MAKnCL,GAAY,EACEjN,EAGPiN,IACAG,EACC,WAAYA,IAChBjC,EAASiC,EAASjC,QAGnBiC,EAAW9Y,EAASxB,OAAQ/c,EAAM,SAAU,CAAEmgB,QAASgX,IAInD7V,IACJ+V,EAASjC,QAAUA,GAIfA,GACJnU,GAAU,CAAEjhB,IAAQ,GAKrB82B,EAAKtyB,KAAM,WASV,IAAM6Z,KAJA+W,GACLnU,GAAU,CAAEjhB,IAEbue,EAAShF,OAAQvZ,EAAM,UACTiqB,EACbtrB,EAAOuhB,MAAOlgB,EAAMqe,EAAM4L,EAAM5L,OAMnC6Y,EAAYvB,GAAaP,EAASiC,EAAUhZ,GAAS,EAAGA,EAAMyY,GACtDzY,KAAQgZ,IACfA,EAAUhZ,GAAS6Y,EAAUrnB,MACxBulB,IACJ8B,EAAUv2B,IAAMu2B,EAAUrnB,MAC1BqnB,EAAUrnB,MAAQ,MAuMrB6nB,UAAW,SAAU53B,EAAU+rB,GACzBA,EACJgK,GAAUI,WAAW1oB,QAASzN,GAE9B+1B,GAAUI,WAAW15B,KAAMuD,MAK9BnB,EAAOg5B,MAAQ,SAAUA,EAAOhG,EAAQ7yB,GACvC,IAAIk2B,EAAM2C,GAA0B,iBAAVA,EAAqBh5B,EAAOmC,OAAQ,GAAI62B,GAAU,CAC3Ef,SAAU93B,IAAOA,GAAM6yB,GACtB30B,EAAY26B,IAAWA,EACxBxD,SAAUwD,EACVhG,OAAQ7yB,GAAM6yB,GAAUA,IAAW30B,EAAY20B,IAAYA,GAoC5D,OAhCKhzB,EAAO21B,GAAGlQ,IACd4Q,EAAIb,SAAW,EAGc,iBAAjBa,EAAIb,WACVa,EAAIb,YAAYx1B,EAAO21B,GAAGsD,OAC9B5C,EAAIb,SAAWx1B,EAAO21B,GAAGsD,OAAQ5C,EAAIb,UAGrCa,EAAIb,SAAWx1B,EAAO21B,GAAGsD,OAAOvV,UAMjB,MAAb2S,EAAI9b,QAA+B,IAAd8b,EAAI9b,QAC7B8b,EAAI9b,MAAQ,MAIb8b,EAAIlI,IAAMkI,EAAI4B,SAEd5B,EAAI4B,SAAW,WACT55B,EAAYg4B,EAAIlI,MACpBkI,EAAIlI,IAAI1wB,KAAMT,MAGVq5B,EAAI9b,OACRva,EAAOsgB,QAAStjB,KAAMq5B,EAAI9b,QAIrB8b,GAGRr2B,EAAOG,GAAGgC,OAAQ,CACjB+2B,OAAQ,SAAUF,EAAOG,EAAInG,EAAQ7xB,GAGpC,OAAOnE,KAAKsQ,OAAQgU,IAAqBG,IAAK,UAAW,GAAIc,OAG3DvgB,MAAMo3B,QAAS,CAAElG,QAASiG,GAAMH,EAAOhG,EAAQ7xB,IAElDi4B,QAAS,SAAU1Z,EAAMsZ,EAAOhG,EAAQ7xB,GACvC,IAAI2R,EAAQ9S,EAAOyD,cAAeic,GACjC2Z,EAASr5B,EAAOg5B,MAAOA,EAAOhG,EAAQ7xB,GACtCm4B,EAAc,WAGb,IAAInB,EAAOjB,GAAWl6B,KAAMgD,EAAOmC,OAAQ,GAAIud,GAAQ2Z,IAGlDvmB,GAAS8M,EAASjf,IAAK3D,KAAM,YACjCm7B,EAAKzX,MAAM,IAMd,OAFA4Y,EAAYC,OAASD,EAEdxmB,IAA0B,IAAjBumB,EAAO9e,MACtBvd,KAAKkE,KAAMo4B,GACXt8B,KAAKud,MAAO8e,EAAO9e,MAAO+e,IAE5B5Y,KAAM,SAAU/hB,EAAMiiB,EAAYkX,GACjC,IAAI0B,EAAY,SAAUhZ,GACzB,IAAIE,EAAOF,EAAME,YACVF,EAAME,KACbA,EAAMoX,IAYP,MATqB,iBAATn5B,IACXm5B,EAAUlX,EACVA,EAAajiB,EACbA,OAAOmE,GAEH8d,GACJ5jB,KAAKud,MAAO5b,GAAQ,KAAM,IAGpB3B,KAAKkE,KAAM,WACjB,IAAIof,GAAU,EACbhI,EAAgB,MAAR3Z,GAAgBA,EAAO,aAC/B86B,EAASz5B,EAAOy5B,OAChBha,EAAOG,EAASjf,IAAK3D,MAEtB,GAAKsb,EACCmH,EAAMnH,IAAWmH,EAAMnH,GAAQoI,MACnC8Y,EAAW/Z,EAAMnH,SAGlB,IAAMA,KAASmH,EACTA,EAAMnH,IAAWmH,EAAMnH,GAAQoI,MAAQ6V,GAAK9rB,KAAM6N,IACtDkhB,EAAW/Z,EAAMnH,IAKpB,IAAMA,EAAQmhB,EAAOn5B,OAAQgY,KACvBmhB,EAAQnhB,GAAQjX,OAASrE,MACnB,MAAR2B,GAAgB86B,EAAQnhB,GAAQiC,QAAU5b,IAE5C86B,EAAQnhB,GAAQ6f,KAAKzX,KAAMoX,GAC3BxX,GAAU,EACVmZ,EAAOv3B,OAAQoW,EAAO,KAOnBgI,GAAYwX,GAChB93B,EAAOsgB,QAAStjB,KAAM2B,MAIzB46B,OAAQ,SAAU56B,GAIjB,OAHc,IAATA,IACJA,EAAOA,GAAQ,MAET3B,KAAKkE,KAAM,WACjB,IAAIoX,EACHmH,EAAOG,EAASjf,IAAK3D,MACrBud,EAAQkF,EAAM9gB,EAAO,SACrB6hB,EAAQf,EAAM9gB,EAAO,cACrB86B,EAASz5B,EAAOy5B,OAChBn5B,EAASia,EAAQA,EAAMja,OAAS,EAajC,IAVAmf,EAAK8Z,QAAS,EAGdv5B,EAAOua,MAAOvd,KAAM2B,EAAM,IAErB6hB,GAASA,EAAME,MACnBF,EAAME,KAAKjjB,KAAMT,MAAM,GAIlBsb,EAAQmhB,EAAOn5B,OAAQgY,KACvBmhB,EAAQnhB,GAAQjX,OAASrE,MAAQy8B,EAAQnhB,GAAQiC,QAAU5b,IAC/D86B,EAAQnhB,GAAQ6f,KAAKzX,MAAM,GAC3B+Y,EAAOv3B,OAAQoW,EAAO,IAKxB,IAAMA,EAAQ,EAAGA,EAAQhY,EAAQgY,IAC3BiC,EAAOjC,IAAWiC,EAAOjC,GAAQihB,QACrChf,EAAOjC,GAAQihB,OAAO97B,KAAMT,aAKvByiB,EAAK8Z,YAKfv5B,EAAOkB,KAAM,CAAE,SAAU,OAAQ,QAAU,SAAUsD,EAAInC,GACxD,IAAIq3B,EAAQ15B,EAAOG,GAAIkC,GACvBrC,EAAOG,GAAIkC,GAAS,SAAU22B,EAAOhG,EAAQ7xB,GAC5C,OAAgB,MAAT63B,GAAkC,kBAAVA,EAC9BU,EAAM/7B,MAAOX,KAAMsE,WACnBtE,KAAKo8B,QAAStC,GAAOz0B,GAAM,GAAQ22B,EAAOhG,EAAQ7xB,MAKrDnB,EAAOkB,KAAM,CACZy4B,UAAW7C,GAAO,QAClB8C,QAAS9C,GAAO,QAChB+C,YAAa/C,GAAO,UACpBgD,OAAQ,CAAE5G,QAAS,QACnB6G,QAAS,CAAE7G,QAAS,QACpB8G,WAAY,CAAE9G,QAAS,WACrB,SAAU7wB,EAAMymB,GAClB9oB,EAAOG,GAAIkC,GAAS,SAAU22B,EAAOhG,EAAQ7xB,GAC5C,OAAOnE,KAAKo8B,QAAStQ,EAAOkQ,EAAOhG,EAAQ7xB,MAI7CnB,EAAOy5B,OAAS,GAChBz5B,EAAO21B,GAAGiB,KAAO,WAChB,IAAIsB,EACH/4B,EAAI,EACJs6B,EAASz5B,EAAOy5B,OAIjB,IAFAtD,GAAQzwB,KAAKyjB,MAELhqB,EAAIs6B,EAAOn5B,OAAQnB,KAC1B+4B,EAAQuB,EAAQt6B,OAGCs6B,EAAQt6B,KAAQ+4B,GAChCuB,EAAOv3B,OAAQ/C,IAAK,GAIhBs6B,EAAOn5B,QACZN,EAAO21B,GAAGjV,OAEXyV,QAAQrzB,GAGT9C,EAAO21B,GAAGuC,MAAQ,SAAUA,GAC3Bl4B,EAAOy5B,OAAO77B,KAAMs6B,GACpBl4B,EAAO21B,GAAGzkB,SAGXlR,EAAO21B,GAAGgB,SAAW,GACrB32B,EAAO21B,GAAGzkB,MAAQ,WACZklB,KAILA,IAAa,EACbI,OAGDx2B,EAAO21B,GAAGjV,KAAO,WAChB0V,GAAa,MAGdp2B,EAAO21B,GAAGsD,OAAS,CAClBgB,KAAM,IACNC,KAAM,IAGNxW,SAAU,KAMX1jB,EAAOG,GAAGg6B,MAAQ,SAAUC,EAAMz7B,GAIjC,OAHAy7B,EAAOp6B,EAAO21B,IAAK31B,EAAO21B,GAAGsD,OAAQmB,IAAiBA,EACtDz7B,EAAOA,GAAQ,KAER3B,KAAKud,MAAO5b,EAAM,SAAU4K,EAAMiX,GACxC,IAAI6Z,EAAUt9B,EAAO+f,WAAYvT,EAAM6wB,GACvC5Z,EAAME,KAAO,WACZ3jB,EAAOu9B,aAAcD,OAOnBzsB,GAAQhR,EAAS0C,cAAe,SAEnC+2B,GADSz5B,EAAS0C,cAAe,UACpBK,YAAa/C,EAAS0C,cAAe,WAEnDsO,GAAMjP,KAAO,WAIbP,EAAQm8B,QAA0B,KAAhB3sB,GAAMzJ,MAIxB/F,EAAQo8B,YAAcnE,GAAIzjB,UAI1BhF,GAAQhR,EAAS0C,cAAe,UAC1B6E,MAAQ,IACdyJ,GAAMjP,KAAO,QACbP,EAAQq8B,WAA6B,MAAhB7sB,GAAMzJ,MAI5B,IAAIu2B,GACH9uB,GAAa5L,EAAO6O,KAAKjD,WAE1B5L,EAAOG,GAAGgC,OAAQ,CACjB4M,KAAM,SAAU1M,EAAM8B,GACrB,OAAOia,EAAQphB,KAAMgD,EAAO+O,KAAM1M,EAAM8B,EAA0B,EAAnB7C,UAAUhB,SAG1Dq6B,WAAY,SAAUt4B,GACrB,OAAOrF,KAAKkE,KAAM,WACjBlB,EAAO26B,WAAY39B,KAAMqF,QAK5BrC,EAAOmC,OAAQ,CACd4M,KAAM,SAAU1N,EAAMgB,EAAM8B,GAC3B,IAAIpD,EAAKyf,EACRoa,EAAQv5B,EAAK9C,SAGd,GAAe,IAAVq8B,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,MAAkC,oBAAtBv5B,EAAK7B,aACTQ,EAAO0f,KAAMre,EAAMgB,EAAM8B,IAKlB,IAAVy2B,GAAgB56B,EAAO8W,SAAUzV,KACrCmf,EAAQxgB,EAAO66B,UAAWx4B,EAAKoC,iBAC5BzE,EAAO6O,KAAK/E,MAAMjC,KAAK4C,KAAMpI,GAASq4B,QAAW53B,SAGtCA,IAAVqB,EACW,OAAVA,OACJnE,EAAO26B,WAAYt5B,EAAMgB,GAIrBme,GAAS,QAASA,QACuB1d,KAA3C/B,EAAMyf,EAAMhB,IAAKne,EAAM8C,EAAO9B,IACzBtB,GAGRM,EAAK5B,aAAc4C,EAAM8B,EAAQ,IAC1BA,GAGHqc,GAAS,QAASA,GAA+C,QAApCzf,EAAMyf,EAAM7f,IAAKU,EAAMgB,IACjDtB,EAMM,OAHdA,EAAMf,EAAOwN,KAAKuB,KAAM1N,EAAMgB,SAGTS,EAAY/B,IAGlC85B,UAAW,CACVl8B,KAAM,CACL6gB,IAAK,SAAUne,EAAM8C,GACpB,IAAM/F,EAAQq8B,YAAwB,UAAVt2B,GAC3BkF,EAAUhI,EAAM,SAAY,CAC5B,IAAIjC,EAAMiC,EAAK8C,MAKf,OAJA9C,EAAK5B,aAAc,OAAQ0E,GACtB/E,IACJiC,EAAK8C,MAAQ/E,GAEP+E,MAMXw2B,WAAY,SAAUt5B,EAAM8C,GAC3B,IAAI9B,EACHlD,EAAI,EAIJ27B,EAAY32B,GAASA,EAAM2F,MAAOoP,GAEnC,GAAK4hB,GAA+B,IAAlBz5B,EAAK9C,SACtB,MAAU8D,EAAOy4B,EAAW37B,KAC3BkC,EAAK2J,gBAAiB3I,MAO1Bq4B,GAAW,CACVlb,IAAK,SAAUne,EAAM8C,EAAO9B,GAQ3B,OAPe,IAAV8B,EAGJnE,EAAO26B,WAAYt5B,EAAMgB,GAEzBhB,EAAK5B,aAAc4C,EAAMA,GAEnBA,IAITrC,EAAOkB,KAAMlB,EAAO6O,KAAK/E,MAAMjC,KAAKmZ,OAAOlX,MAAO,QAAU,SAAUtF,EAAInC,GACzE,IAAI04B,EAASnvB,GAAYvJ,IAAUrC,EAAOwN,KAAKuB,KAE/CnD,GAAYvJ,GAAS,SAAUhB,EAAMgB,EAAMwC,GAC1C,IAAI9D,EAAK+lB,EACRkU,EAAgB34B,EAAKoC,cAYtB,OAVMI,IAGLiiB,EAASlb,GAAYovB,GACrBpvB,GAAYovB,GAAkBj6B,EAC9BA,EAAqC,MAA/Bg6B,EAAQ15B,EAAMgB,EAAMwC,GACzBm2B,EACA,KACDpvB,GAAYovB,GAAkBlU,GAExB/lB,KAOT,IAAIk6B,GAAa,sCAChBC,GAAa,gBAyIb,SAASC,GAAkBh3B,GAE1B,OADaA,EAAM2F,MAAOoP,IAAmB,IAC/BrO,KAAM,KAItB,SAASuwB,GAAU/5B,GAClB,OAAOA,EAAK7B,cAAgB6B,EAAK7B,aAAc,UAAa,GAG7D,SAAS67B,GAAgBl3B,GACxB,OAAKvB,MAAMC,QAASsB,GACZA,EAEc,iBAAVA,GACJA,EAAM2F,MAAOoP,IAEd,GAxJRlZ,EAAOG,GAAGgC,OAAQ,CACjBud,KAAM,SAAUrd,EAAM8B,GACrB,OAAOia,EAAQphB,KAAMgD,EAAO0f,KAAMrd,EAAM8B,EAA0B,EAAnB7C,UAAUhB,SAG1Dg7B,WAAY,SAAUj5B,GACrB,OAAOrF,KAAKkE,KAAM,kBACVlE,KAAMgD,EAAOu7B,QAASl5B,IAAUA,QAK1CrC,EAAOmC,OAAQ,CACdud,KAAM,SAAUre,EAAMgB,EAAM8B,GAC3B,IAAIpD,EAAKyf,EACRoa,EAAQv5B,EAAK9C,SAGd,GAAe,IAAVq8B,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,OAPe,IAAVA,GAAgB56B,EAAO8W,SAAUzV,KAGrCgB,EAAOrC,EAAOu7B,QAASl5B,IAAUA,EACjCme,EAAQxgB,EAAOo1B,UAAW/yB,SAGZS,IAAVqB,EACCqc,GAAS,QAASA,QACuB1d,KAA3C/B,EAAMyf,EAAMhB,IAAKne,EAAM8C,EAAO9B,IACzBtB,EAGCM,EAAMgB,GAAS8B,EAGpBqc,GAAS,QAASA,GAA+C,QAApCzf,EAAMyf,EAAM7f,IAAKU,EAAMgB,IACjDtB,EAGDM,EAAMgB,IAGd+yB,UAAW,CACV3iB,SAAU,CACT9R,IAAK,SAAUU,GAOd,IAAIm6B,EAAWx7B,EAAOwN,KAAKuB,KAAM1N,EAAM,YAEvC,OAAKm6B,EACG5K,SAAU4K,EAAU,IAI3BP,GAAWxwB,KAAMpJ,EAAKgI,WACtB6xB,GAAWzwB,KAAMpJ,EAAKgI,WACtBhI,EAAKmR,KAEE,GAGA,KAKX+oB,QAAS,CACRE,MAAO,UACPC,QAAS,eAYLt9B,EAAQo8B,cACbx6B,EAAOo1B,UAAUxiB,SAAW,CAC3BjS,IAAK,SAAUU,GAId,IAAI8P,EAAS9P,EAAKzB,WAIlB,OAHKuR,GAAUA,EAAOvR,YACrBuR,EAAOvR,WAAWiT,cAEZ,MAER2M,IAAK,SAAUne,GAId,IAAI8P,EAAS9P,EAAKzB,WACbuR,IACJA,EAAO0B,cAEF1B,EAAOvR,YACXuR,EAAOvR,WAAWiT,kBAOvB7S,EAAOkB,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFlB,EAAOu7B,QAASv+B,KAAKyH,eAAkBzH,OA4BxCgD,EAAOG,GAAGgC,OAAQ,CACjBw5B,SAAU,SAAUx3B,GACnB,IAAIy3B,EAASv6B,EAAMyK,EAAK+vB,EAAUC,EAAO/5B,EAAGg6B,EAC3C58B,EAAI,EAEL,GAAKd,EAAY8F,GAChB,OAAOnH,KAAKkE,KAAM,SAAUa,GAC3B/B,EAAQhD,MAAO2+B,SAAUx3B,EAAM1G,KAAMT,KAAM+E,EAAGq5B,GAAUp+B,UAM1D,IAFA4+B,EAAUP,GAAgBl3B,IAEb7D,OACZ,MAAUe,EAAOrE,KAAMmC,KAItB,GAHA08B,EAAWT,GAAU/5B,GACrByK,EAAwB,IAAlBzK,EAAK9C,UAAoB,IAAM48B,GAAkBU,GAAa,IAEzD,CACV95B,EAAI,EACJ,MAAU+5B,EAAQF,EAAS75B,KACrB+J,EAAIjO,QAAS,IAAMi+B,EAAQ,KAAQ,IACvChwB,GAAOgwB,EAAQ,KAMZD,KADLE,EAAaZ,GAAkBrvB,KAE9BzK,EAAK5B,aAAc,QAASs8B,GAMhC,OAAO/+B,MAGRg/B,YAAa,SAAU73B,GACtB,IAAIy3B,EAASv6B,EAAMyK,EAAK+vB,EAAUC,EAAO/5B,EAAGg6B,EAC3C58B,EAAI,EAEL,GAAKd,EAAY8F,GAChB,OAAOnH,KAAKkE,KAAM,SAAUa,GAC3B/B,EAAQhD,MAAOg/B,YAAa73B,EAAM1G,KAAMT,KAAM+E,EAAGq5B,GAAUp+B,UAI7D,IAAMsE,UAAUhB,OACf,OAAOtD,KAAK+R,KAAM,QAAS,IAK5B,IAFA6sB,EAAUP,GAAgBl3B,IAEb7D,OACZ,MAAUe,EAAOrE,KAAMmC,KAMtB,GALA08B,EAAWT,GAAU/5B,GAGrByK,EAAwB,IAAlBzK,EAAK9C,UAAoB,IAAM48B,GAAkBU,GAAa,IAEzD,CACV95B,EAAI,EACJ,MAAU+5B,EAAQF,EAAS75B,KAG1B,OAA4C,EAApC+J,EAAIjO,QAAS,IAAMi+B,EAAQ,KAClChwB,EAAMA,EAAI5I,QAAS,IAAM44B,EAAQ,IAAK,KAMnCD,KADLE,EAAaZ,GAAkBrvB,KAE9BzK,EAAK5B,aAAc,QAASs8B,GAMhC,OAAO/+B,MAGRi/B,YAAa,SAAU93B,EAAO+3B,GAC7B,IAAIv9B,SAAcwF,EACjBg4B,EAAwB,WAATx9B,GAAqBiE,MAAMC,QAASsB,GAEpD,MAAyB,kBAAb+3B,GAA0BC,EAC9BD,EAAWl/B,KAAK2+B,SAAUx3B,GAAUnH,KAAKg/B,YAAa73B,GAGzD9F,EAAY8F,GACTnH,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,MAAOi/B,YACd93B,EAAM1G,KAAMT,KAAMmC,EAAGi8B,GAAUp+B,MAAQk/B,GACvCA,KAKIl/B,KAAKkE,KAAM,WACjB,IAAIgM,EAAW/N,EAAGsY,EAAM2kB,EAExB,GAAKD,EAAe,CAGnBh9B,EAAI,EACJsY,EAAOzX,EAAQhD,MACfo/B,EAAaf,GAAgBl3B,GAE7B,MAAU+I,EAAYkvB,EAAYj9B,KAG5BsY,EAAK4kB,SAAUnvB,GACnBuK,EAAKukB,YAAa9uB,GAElBuK,EAAKkkB,SAAUzuB,aAKIpK,IAAVqB,GAAgC,YAATxF,KAClCuO,EAAYkuB,GAAUp+B,QAIrB4iB,EAASJ,IAAKxiB,KAAM,gBAAiBkQ,GAOjClQ,KAAKyC,cACTzC,KAAKyC,aAAc,QAClByN,IAAuB,IAAV/I,EACZ,GACAyb,EAASjf,IAAK3D,KAAM,kBAAqB,QAO/Cq/B,SAAU,SAAUp8B,GACnB,IAAIiN,EAAW7L,EACdlC,EAAI,EAEL+N,EAAY,IAAMjN,EAAW,IAC7B,MAAUoB,EAAOrE,KAAMmC,KACtB,GAAuB,IAAlBkC,EAAK9C,WACoE,GAA3E,IAAM48B,GAAkBC,GAAU/5B,IAAW,KAAMxD,QAASqP,GAC9D,OAAO,EAIT,OAAO,KAOT,IAAIovB,GAAU,MAEdt8B,EAAOG,GAAGgC,OAAQ,CACjB/C,IAAK,SAAU+E,GACd,IAAIqc,EAAOzf,EAAKurB,EACfjrB,EAAOrE,KAAM,GAEd,OAAMsE,UAAUhB,QA0BhBgsB,EAAkBjuB,EAAY8F,GAEvBnH,KAAKkE,KAAM,SAAU/B,GAC3B,IAAIC,EAEmB,IAAlBpC,KAAKuB,WAWE,OANXa,EADIktB,EACEnoB,EAAM1G,KAAMT,KAAMmC,EAAGa,EAAQhD,MAAOoC,OAEpC+E,GAKN/E,EAAM,GAEoB,iBAARA,EAClBA,GAAO,GAEIwD,MAAMC,QAASzD,KAC1BA,EAAMY,EAAOoB,IAAKhC,EAAK,SAAU+E,GAChC,OAAgB,MAATA,EAAgB,GAAKA,EAAQ,OAItCqc,EAAQxgB,EAAOu8B,SAAUv/B,KAAK2B,OAAUqB,EAAOu8B,SAAUv/B,KAAKqM,SAAS5E,iBAGrD,QAAS+b,QAA+C1d,IAApC0d,EAAMhB,IAAKxiB,KAAMoC,EAAK,WAC3DpC,KAAKmH,MAAQ/E,OAzDTiC,GACJmf,EAAQxgB,EAAOu8B,SAAUl7B,EAAK1C,OAC7BqB,EAAOu8B,SAAUl7B,EAAKgI,SAAS5E,iBAG/B,QAAS+b,QACgC1d,KAAvC/B,EAAMyf,EAAM7f,IAAKU,EAAM,UAElBN,EAMY,iBAHpBA,EAAMM,EAAK8C,OAIHpD,EAAImC,QAASo5B,GAAS,IAIhB,MAAPv7B,EAAc,GAAKA,OAG3B,KAyCHf,EAAOmC,OAAQ,CACdo6B,SAAU,CACTnZ,OAAQ,CACPziB,IAAK,SAAUU,GAEd,IAAIjC,EAAMY,EAAOwN,KAAKuB,KAAM1N,EAAM,SAClC,OAAc,MAAPjC,EACNA,EAMA+7B,GAAkBn7B,EAAOT,KAAM8B,MAGlC2D,OAAQ,CACPrE,IAAK,SAAUU,GACd,IAAI8C,EAAOif,EAAQjkB,EAClBiD,EAAUf,EAAKe,QACfkW,EAAQjX,EAAKwR,cACbyS,EAAoB,eAAdjkB,EAAK1C,KACX6jB,EAAS8C,EAAM,KAAO,GACtB2M,EAAM3M,EAAMhN,EAAQ,EAAIlW,EAAQ9B,OAUjC,IAPCnB,EADImZ,EAAQ,EACR2Z,EAGA3M,EAAMhN,EAAQ,EAIXnZ,EAAI8yB,EAAK9yB,IAKhB,KAJAikB,EAAShhB,EAASjD,IAIJyT,UAAYzT,IAAMmZ,KAG7B8K,EAAOha,YACLga,EAAOxjB,WAAWwJ,WACnBC,EAAU+Z,EAAOxjB,WAAY,aAAiB,CAMjD,GAHAuE,EAAQnE,EAAQojB,GAAShkB,MAGpBkmB,EACJ,OAAOnhB,EAIRqe,EAAO5kB,KAAMuG,GAIf,OAAOqe,GAGRhD,IAAK,SAAUne,EAAM8C,GACpB,IAAIq4B,EAAWpZ,EACdhhB,EAAUf,EAAKe,QACfogB,EAASxiB,EAAO2D,UAAWQ,GAC3BhF,EAAIiD,EAAQ9B,OAEb,MAAQnB,MACPikB,EAAShhB,EAASjD,IAINyT,UACuD,EAAlE5S,EAAO6D,QAAS7D,EAAOu8B,SAASnZ,OAAOziB,IAAKyiB,GAAUZ,MAEtDga,GAAY,GAUd,OAHMA,IACLn7B,EAAKwR,eAAiB,GAEhB2P,OAOXxiB,EAAOkB,KAAM,CAAE,QAAS,YAAc,WACrClB,EAAOu8B,SAAUv/B,MAAS,CACzBwiB,IAAK,SAAUne,EAAM8C,GACpB,GAAKvB,MAAMC,QAASsB,GACnB,OAAS9C,EAAKsR,SAA2D,EAAjD3S,EAAO6D,QAAS7D,EAAQqB,GAAOjC,MAAO+E,KAI3D/F,EAAQm8B,UACbv6B,EAAOu8B,SAAUv/B,MAAO2D,IAAM,SAAUU,GACvC,OAAwC,OAAjCA,EAAK7B,aAAc,SAAqB,KAAO6B,EAAK8C,UAW9D/F,EAAQq+B,QAAU,cAAe1/B,EAGjC,IAAI2/B,GAAc,kCACjBC,GAA0B,SAAUlzB,GACnCA,EAAEsc,mBAGJ/lB,EAAOmC,OAAQnC,EAAOwlB,MAAO,CAE5BU,QAAS,SAAUV,EAAO/F,EAAMpe,EAAMu7B,GAErC,IAAIz9B,EAAG2M,EAAK6B,EAAKkvB,EAAYC,EAAQhW,EAAQ3K,EAAS4gB,EACrDC,EAAY,CAAE37B,GAAQzE,GACtB+B,EAAOX,EAAOP,KAAM+nB,EAAO,QAAWA,EAAM7mB,KAAO6mB,EACnDkB,EAAa1oB,EAAOP,KAAM+nB,EAAO,aAAgBA,EAAM/Y,UAAUlI,MAAO,KAAQ,GAKjF,GAHAuH,EAAMixB,EAAcpvB,EAAMtM,EAAOA,GAAQzE,EAGlB,IAAlByE,EAAK9C,UAAoC,IAAlB8C,EAAK9C,WAK5Bm+B,GAAYjyB,KAAM9L,EAAOqB,EAAOwlB,MAAMuB,cAIf,EAAvBpoB,EAAKd,QAAS,OAIlBc,GADA+nB,EAAa/nB,EAAK4F,MAAO,MACP8G,QAClBqb,EAAWzkB,QAEZ66B,EAASn+B,EAAKd,QAAS,KAAQ,GAAK,KAAOc,GAG3C6mB,EAAQA,EAAOxlB,EAAO+C,SACrByiB,EACA,IAAIxlB,EAAOmmB,MAAOxnB,EAAuB,iBAAV6mB,GAAsBA,IAGhDK,UAAY+W,EAAe,EAAI,EACrCpX,EAAM/Y,UAAYia,EAAW7b,KAAM,KACnC2a,EAAMwC,WAAaxC,EAAM/Y,UACxB,IAAI1F,OAAQ,UAAY2f,EAAW7b,KAAM,iBAAoB,WAC7D,KAGD2a,EAAMjV,YAASzN,EACT0iB,EAAM/iB,SACX+iB,EAAM/iB,OAASpB,GAIhBoe,EAAe,MAARA,EACN,CAAE+F,GACFxlB,EAAO2D,UAAW8b,EAAM,CAAE+F,IAG3BrJ,EAAUnc,EAAOwlB,MAAMrJ,QAASxd,IAAU,GACpCi+B,IAAgBzgB,EAAQ+J,UAAmD,IAAxC/J,EAAQ+J,QAAQvoB,MAAO0D,EAAMoe,IAAtE,CAMA,IAAMmd,IAAiBzgB,EAAQuM,WAAajqB,EAAU4C,GAAS,CAM9D,IAJAw7B,EAAa1gB,EAAQ2J,cAAgBnnB,EAC/B+9B,GAAYjyB,KAAMoyB,EAAal+B,KACpCmN,EAAMA,EAAIlM,YAEHkM,EAAKA,EAAMA,EAAIlM,WACtBo9B,EAAUp/B,KAAMkO,GAChB6B,EAAM7B,EAIF6B,KAAUtM,EAAK6I,eAAiBtN,IACpCogC,EAAUp/B,KAAM+P,EAAIb,aAAea,EAAIsvB,cAAgBlgC,GAKzDoC,EAAI,EACJ,OAAU2M,EAAMkxB,EAAW79B,QAAYqmB,EAAMqC,uBAC5CkV,EAAcjxB,EACd0Z,EAAM7mB,KAAW,EAAJQ,EACZ09B,EACA1gB,EAAQ8K,UAAYtoB,GAGrBmoB,GAAWlH,EAASjf,IAAKmL,EAAK,WAAc1O,OAAOypB,OAAQ,OAAUrB,EAAM7mB,OAC1EihB,EAASjf,IAAKmL,EAAK,YAEnBgb,EAAOnpB,MAAOmO,EAAK2T,IAIpBqH,EAASgW,GAAUhxB,EAAKgxB,KACThW,EAAOnpB,OAASuhB,EAAYpT,KAC1C0Z,EAAMjV,OAASuW,EAAOnpB,MAAOmO,EAAK2T,IACZ,IAAjB+F,EAAMjV,QACViV,EAAMS,kBA8CT,OA1CAT,EAAM7mB,KAAOA,EAGPi+B,GAAiBpX,EAAMuD,sBAEpB5M,EAAQuH,WACqC,IAApDvH,EAAQuH,SAAS/lB,MAAOq/B,EAAU12B,MAAOmZ,KACzCP,EAAY7d,IAIPy7B,GAAUz+B,EAAYgD,EAAM1C,MAAaF,EAAU4C,MAGvDsM,EAAMtM,EAAMy7B,MAGXz7B,EAAMy7B,GAAW,MAIlB98B,EAAOwlB,MAAMuB,UAAYpoB,EAEpB6mB,EAAMqC,wBACVkV,EAAY/vB,iBAAkBrO,EAAMg+B,IAGrCt7B,EAAM1C,KAED6mB,EAAMqC,wBACVkV,EAAYhf,oBAAqBpf,EAAMg+B,IAGxC38B,EAAOwlB,MAAMuB,eAAYjkB,EAEpB6K,IACJtM,EAAMy7B,GAAWnvB,IAMd6X,EAAMjV,SAKd2sB,SAAU,SAAUv+B,EAAM0C,EAAMmkB,GAC/B,IAAI/b,EAAIzJ,EAAOmC,OACd,IAAInC,EAAOmmB,MACXX,EACA,CACC7mB,KAAMA,EACNyqB,aAAa,IAIfppB,EAAOwlB,MAAMU,QAASzc,EAAG,KAAMpI,MAKjCrB,EAAOG,GAAGgC,OAAQ,CAEjB+jB,QAAS,SAAUvnB,EAAM8gB,GACxB,OAAOziB,KAAKkE,KAAM,WACjBlB,EAAOwlB,MAAMU,QAASvnB,EAAM8gB,EAAMziB,SAGpCmgC,eAAgB,SAAUx+B,EAAM8gB,GAC/B,IAAIpe,EAAOrE,KAAM,GACjB,GAAKqE,EACJ,OAAOrB,EAAOwlB,MAAMU,QAASvnB,EAAM8gB,EAAMpe,GAAM,MAc5CjD,EAAQq+B,SACbz8B,EAAOkB,KAAM,CAAEmR,MAAO,UAAW4Y,KAAM,YAAc,SAAUK,EAAM5D,GAGpE,IAAI/b,EAAU,SAAU6Z,GACvBxlB,EAAOwlB,MAAM0X,SAAUxV,EAAKlC,EAAM/iB,OAAQzC,EAAOwlB,MAAMkC,IAAKlC,KAG7DxlB,EAAOwlB,MAAMrJ,QAASuL,GAAQ,CAC7BP,MAAO,WAIN,IAAIjoB,EAAMlC,KAAKkN,eAAiBlN,KAAKJ,UAAYI,KAChDogC,EAAWxd,EAASxB,OAAQlf,EAAKwoB,GAE5B0V,GACLl+B,EAAI8N,iBAAkBse,EAAM3f,GAAS,GAEtCiU,EAASxB,OAAQlf,EAAKwoB,GAAO0V,GAAY,GAAM,IAEhD9V,SAAU,WACT,IAAIpoB,EAAMlC,KAAKkN,eAAiBlN,KAAKJ,UAAYI,KAChDogC,EAAWxd,EAASxB,OAAQlf,EAAKwoB,GAAQ,EAEpC0V,EAKLxd,EAASxB,OAAQlf,EAAKwoB,EAAK0V,IAJ3Bl+B,EAAI6e,oBAAqBuN,EAAM3f,GAAS,GACxCiU,EAAShF,OAAQ1b,EAAKwoB,QAS3B,IAAIvV,GAAWpV,EAAOoV,SAElBtT,GAAQ,CAAEuF,KAAMsB,KAAKyjB,OAErBkU,GAAS,KAKbr9B,EAAOs9B,SAAW,SAAU7d,GAC3B,IAAI3O,EAAKysB,EACT,IAAM9d,GAAwB,iBAATA,EACpB,OAAO,KAKR,IACC3O,GAAM,IAAM/T,EAAOygC,WAAcC,gBAAiBhe,EAAM,YACvD,MAAQhW,IAYV,OAVA8zB,EAAkBzsB,GAAOA,EAAIxG,qBAAsB,eAAiB,GAC9DwG,IAAOysB,GACZv9B,EAAOoD,MAAO,iBACbm6B,EACCv9B,EAAOoB,IAAKm8B,EAAgB/zB,WAAY,SAAUgC,GACjD,OAAOA,EAAG8D,cACPzE,KAAM,MACV4U,IAGI3O,GAIR,IACC4sB,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCAEhB,SAASC,GAAa/I,EAAQz2B,EAAKy/B,EAAavlB,GAC/C,IAAInW,EAEJ,GAAKO,MAAMC,QAASvE,GAGnB0B,EAAOkB,KAAM5C,EAAK,SAAUa,EAAGia,GACzB2kB,GAAeL,GAASjzB,KAAMsqB,GAGlCvc,EAAKuc,EAAQ3b,GAKb0kB,GACC/I,EAAS,KAAqB,iBAAN3b,GAAuB,MAALA,EAAYja,EAAI,IAAO,IACjEia,EACA2kB,EACAvlB,UAKG,GAAMulB,GAAiC,WAAlBj+B,EAAQxB,GAUnCka,EAAKuc,EAAQz2B,QAPb,IAAM+D,KAAQ/D,EACbw/B,GAAa/I,EAAS,IAAM1yB,EAAO,IAAK/D,EAAK+D,GAAQ07B,EAAavlB,GAYrExY,EAAOg+B,MAAQ,SAAU53B,EAAG23B,GAC3B,IAAIhJ,EACHkJ,EAAI,GACJzlB,EAAM,SAAUrN,EAAK+yB,GAGpB,IAAI/5B,EAAQ9F,EAAY6/B,GACvBA,IACAA,EAEDD,EAAGA,EAAE39B,QAAW69B,mBAAoBhzB,GAAQ,IAC3CgzB,mBAA6B,MAATh6B,EAAgB,GAAKA,IAG5C,GAAU,MAALiC,EACJ,MAAO,GAIR,GAAKxD,MAAMC,QAASuD,IAASA,EAAE5F,SAAWR,EAAO2C,cAAeyD,GAG/DpG,EAAOkB,KAAMkF,EAAG,WACfoS,EAAKxb,KAAKqF,KAAMrF,KAAKmH,cAOtB,IAAM4wB,KAAU3uB,EACf03B,GAAa/I,EAAQ3uB,EAAG2uB,GAAUgJ,EAAavlB,GAKjD,OAAOylB,EAAEpzB,KAAM,MAGhB7K,EAAOG,GAAGgC,OAAQ,CACjBi8B,UAAW,WACV,OAAOp+B,EAAOg+B,MAAOhhC,KAAKqhC,mBAE3BA,eAAgB,WACf,OAAOrhC,KAAKoE,IAAK,WAGhB,IAAI0N,EAAW9O,EAAO0f,KAAM1iB,KAAM,YAClC,OAAO8R,EAAW9O,EAAO2D,UAAWmL,GAAa9R,OAC9CsQ,OAAQ,WACX,IAAI3O,EAAO3B,KAAK2B,KAGhB,OAAO3B,KAAKqF,OAASrC,EAAQhD,MAAOka,GAAI,cACvC2mB,GAAapzB,KAAMzN,KAAKqM,YAAeu0B,GAAgBnzB,KAAM9L,KAC3D3B,KAAK2V,UAAYkQ,GAAepY,KAAM9L,MACtCyC,IAAK,SAAUoD,EAAInD,GACtB,IAAIjC,EAAMY,EAAQhD,MAAOoC,MAEzB,OAAY,MAAPA,EACG,KAGHwD,MAAMC,QAASzD,GACZY,EAAOoB,IAAKhC,EAAK,SAAUA,GACjC,MAAO,CAAEiD,KAAMhB,EAAKgB,KAAM8B,MAAO/E,EAAI8D,QAASy6B,GAAO,WAIhD,CAAEt7B,KAAMhB,EAAKgB,KAAM8B,MAAO/E,EAAI8D,QAASy6B,GAAO,WAClDh9B,SAKN,IACC29B,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAIXC,GAAa,iBACbC,GAAY,QAWZrH,GAAa,GAObsH,GAAa,GAGbC,GAAW,KAAKnhC,OAAQ,KAGxBohC,GAAeliC,EAAS0C,cAAe,KAKxC,SAASy/B,GAA6BC,GAGrC,OAAO,SAAUC,EAAoBhkB,GAED,iBAAvBgkB,IACXhkB,EAAOgkB,EACPA,EAAqB,KAGtB,IAAIC,EACH//B,EAAI,EACJggC,EAAYF,EAAmBx6B,cAAcqF,MAAOoP,IAAmB,GAExE,GAAK7a,EAAY4c,GAGhB,MAAUikB,EAAWC,EAAWhgC,KAGR,MAAlB+/B,EAAU,IACdA,EAAWA,EAAS5hC,MAAO,IAAO,KAChC0hC,EAAWE,GAAaF,EAAWE,IAAc,IAAKtwB,QAASqM,KAI/D+jB,EAAWE,GAAaF,EAAWE,IAAc,IAAKthC,KAAMqd,IAQnE,SAASmkB,GAA+BJ,EAAW58B,EAASy1B,EAAiBwH,GAE5E,IAAIC,EAAY,GACfC,EAAqBP,IAAcJ,GAEpC,SAASY,EAASN,GACjB,IAAItsB,EAcJ,OAbA0sB,EAAWJ,IAAa,EACxBl/B,EAAOkB,KAAM89B,EAAWE,IAAc,GAAI,SAAUjlB,EAAGwlB,GACtD,IAAIC,EAAsBD,EAAoBr9B,EAASy1B,EAAiBwH,GACxE,MAAoC,iBAAxBK,GACVH,GAAqBD,EAAWI,GAKtBH,IACD3sB,EAAW8sB,QADf,GAHNt9B,EAAQ+8B,UAAUvwB,QAAS8wB,GAC3BF,EAASE,IACF,KAKF9sB,EAGR,OAAO4sB,EAASp9B,EAAQ+8B,UAAW,MAAUG,EAAW,MAASE,EAAS,KAM3E,SAASG,GAAYl9B,EAAQ7D,GAC5B,IAAIuM,EAAKzI,EACRk9B,EAAc5/B,EAAO6/B,aAAaD,aAAe,GAElD,IAAMz0B,KAAOvM,OACQkE,IAAflE,EAAKuM,MACPy0B,EAAaz0B,GAAQ1I,EAAWC,IAAUA,EAAO,KAAUyI,GAAQvM,EAAKuM,IAO5E,OAJKzI,GACJ1C,EAAOmC,QAAQ,EAAMM,EAAQC,GAGvBD,EA/ERq8B,GAAatsB,KAAOL,GAASK,KAgP7BxS,EAAOmC,OAAQ,CAGd29B,OAAQ,EAGRC,aAAc,GACdC,KAAM,GAENH,aAAc,CACbI,IAAK9tB,GAASK,KACd7T,KAAM,MACNuhC,QAxRgB,4DAwRQz1B,KAAM0H,GAASguB,UACvC3jC,QAAQ,EACR4jC,aAAa,EACbC,OAAO,EACPC,YAAa,mDAcbC,QAAS,CACRnI,IAAKyG,GACLt/B,KAAM,aACNgtB,KAAM,YACNzb,IAAK,4BACL0vB,KAAM,qCAGPxoB,SAAU,CACTlH,IAAK,UACLyb,KAAM,SACNiU,KAAM,YAGPC,eAAgB,CACf3vB,IAAK,cACLvR,KAAM,eACNihC,KAAM,gBAKPE,WAAY,CAGXC,SAAUj4B,OAGVk4B,aAAa,EAGbC,YAAa5gB,KAAKC,MAGlB4gB,WAAY9gC,EAAOs9B,UAOpBsC,YAAa,CACZK,KAAK,EACL//B,SAAS,IAOX6gC,UAAW,SAAUt+B,EAAQu+B,GAC5B,OAAOA,EAGNrB,GAAYA,GAAYl9B,EAAQzC,EAAO6/B,cAAgBmB,GAGvDrB,GAAY3/B,EAAO6/B,aAAcp9B,IAGnCw+B,cAAelC,GAA6BzH,IAC5C4J,cAAenC,GAA6BH,IAG5CuC,KAAM,SAAUlB,EAAK79B,GAGA,iBAAR69B,IACX79B,EAAU69B,EACVA,OAAMn9B,GAIPV,EAAUA,GAAW,GAErB,IAAIg/B,EAGHC,EAGAC,EACAC,EAGAC,EAGAC,EAGA3jB,EAGA4jB,EAGAviC,EAGAwiC,EAGA1D,EAAIj+B,EAAO+gC,UAAW,GAAI3+B,GAG1Bw/B,EAAkB3D,EAAE/9B,SAAW+9B,EAG/B4D,EAAqB5D,EAAE/9B,UACpB0hC,EAAgBrjC,UAAYqjC,EAAgBphC,QAC9CR,EAAQ4hC,GACR5hC,EAAOwlB,MAGRnK,EAAWrb,EAAOgb,WAClB8mB,EAAmB9hC,EAAO+Z,UAAW,eAGrCgoB,EAAa9D,EAAE8D,YAAc,GAG7BC,EAAiB,GACjBC,EAAsB,GAGtBC,EAAW,WAGX7C,EAAQ,CACPnhB,WAAY,EAGZikB,kBAAmB,SAAUh3B,GAC5B,IAAIrB,EACJ,GAAKgU,EAAY,CAChB,IAAMyjB,EAAkB,CACvBA,EAAkB,GAClB,MAAUz3B,EAAQ20B,GAASt0B,KAAMm3B,GAChCC,EAAiBz3B,EAAO,GAAIrF,cAAgB,MACzC88B,EAAiBz3B,EAAO,GAAIrF,cAAgB,MAAS,IACrD/G,OAAQoM,EAAO,IAGpBA,EAAQy3B,EAAiBp2B,EAAI1G,cAAgB,KAE9C,OAAgB,MAATqF,EAAgB,KAAOA,EAAMe,KAAM,OAI3Cu3B,sBAAuB,WACtB,OAAOtkB,EAAYwjB,EAAwB,MAI5Ce,iBAAkB,SAAUhgC,EAAM8B,GAMjC,OALkB,MAAb2Z,IACJzb,EAAO4/B,EAAqB5/B,EAAKoC,eAChCw9B,EAAqB5/B,EAAKoC,gBAAmBpC,EAC9C2/B,EAAgB3/B,GAAS8B,GAEnBnH,MAIRslC,iBAAkB,SAAU3jC,GAI3B,OAHkB,MAAbmf,IACJmgB,EAAEsE,SAAW5jC,GAEP3B,MAIR+kC,WAAY,SAAU3gC,GACrB,IAAIpC,EACJ,GAAKoC,EACJ,GAAK0c,EAGJuhB,EAAMjkB,OAAQha,EAAKi+B,EAAMmD,cAIzB,IAAMxjC,KAAQoC,EACb2gC,EAAY/iC,GAAS,CAAE+iC,EAAY/iC,GAAQoC,EAAKpC,IAInD,OAAOhC,MAIRylC,MAAO,SAAUC,GAChB,IAAIC,EAAYD,GAAcR,EAK9B,OAJKd,GACJA,EAAUqB,MAAOE,GAElB98B,EAAM,EAAG88B,GACF3lC,OAoBV,GAfAqe,EAASzB,QAASylB,GAKlBpB,EAAEgC,MAAUA,GAAOhC,EAAEgC,KAAO9tB,GAASK,MAAS,IAC5CtP,QAASy7B,GAAWxsB,GAASguB,SAAW,MAG1ClC,EAAEt/B,KAAOyD,EAAQuX,QAAUvX,EAAQzD,MAAQs/B,EAAEtkB,QAAUskB,EAAEt/B,KAGzDs/B,EAAEkB,WAAclB,EAAEiB,UAAY,KAAMz6B,cAAcqF,MAAOoP,IAAmB,CAAE,IAGxD,MAAjB+kB,EAAE2E,YAAsB,CAC5BnB,EAAY7kC,EAAS0C,cAAe,KAKpC,IACCmiC,EAAUjvB,KAAOyrB,EAAEgC,IAInBwB,EAAUjvB,KAAOivB,EAAUjvB,KAC3ByrB,EAAE2E,YAAc9D,GAAaqB,SAAW,KAAOrB,GAAa+D,MAC3DpB,EAAUtB,SAAW,KAAOsB,EAAUoB,KACtC,MAAQp5B,GAITw0B,EAAE2E,aAAc,GAalB,GARK3E,EAAExe,MAAQwe,EAAEmC,aAAiC,iBAAXnC,EAAExe,OACxCwe,EAAExe,KAAOzf,EAAOg+B,MAAOC,EAAExe,KAAMwe,EAAEF,cAIlCqB,GAA+B9H,GAAY2G,EAAG77B,EAASi9B,GAGlDvhB,EACJ,OAAOuhB,EA8ER,IAAMlgC,KAzENuiC,EAAc1hC,EAAOwlB,OAASyY,EAAEzhC,SAGQ,GAApBwD,EAAO8/B,UAC1B9/B,EAAOwlB,MAAMU,QAAS,aAIvB+X,EAAEt/B,KAAOs/B,EAAEt/B,KAAKogB,cAGhBkf,EAAE6E,YAAcpE,GAAWj0B,KAAMwzB,EAAEt/B,MAKnC0iC,EAAWpD,EAAEgC,IAAI/8B,QAASq7B,GAAO,IAG3BN,EAAE6E,WAwBI7E,EAAExe,MAAQwe,EAAEmC,aACoD,KAAzEnC,EAAEqC,aAAe,IAAKziC,QAAS,uCACjCogC,EAAExe,KAAOwe,EAAExe,KAAKvc,QAASo7B,GAAK,OAvB9BqD,EAAW1D,EAAEgC,IAAI3iC,MAAO+jC,EAAS/gC,QAG5B29B,EAAExe,OAAUwe,EAAEmC,aAAiC,iBAAXnC,EAAExe,QAC1C4hB,IAAchE,GAAO5yB,KAAM42B,GAAa,IAAM,KAAQpD,EAAExe,YAGjDwe,EAAExe,OAIO,IAAZwe,EAAE/yB,QACNm2B,EAAWA,EAASn+B,QAASs7B,GAAY,MACzCmD,GAAatE,GAAO5yB,KAAM42B,GAAa,IAAM,KAAQ,KAASxiC,GAAMuF,OACnEu9B,GAIF1D,EAAEgC,IAAMoB,EAAWM,GASf1D,EAAE8E,aACD/iC,EAAO+/B,aAAcsB,IACzBhC,EAAMgD,iBAAkB,oBAAqBriC,EAAO+/B,aAAcsB,IAE9DrhC,EAAOggC,KAAMqB,IACjBhC,EAAMgD,iBAAkB,gBAAiBriC,EAAOggC,KAAMqB,MAKnDpD,EAAExe,MAAQwe,EAAE6E,aAAgC,IAAlB7E,EAAEqC,aAAyBl+B,EAAQk+B,cACjEjB,EAAMgD,iBAAkB,eAAgBpE,EAAEqC,aAI3CjB,EAAMgD,iBACL,SACApE,EAAEkB,UAAW,IAAOlB,EAAEsC,QAAStC,EAAEkB,UAAW,IAC3ClB,EAAEsC,QAAStC,EAAEkB,UAAW,KACA,MAArBlB,EAAEkB,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7DZ,EAAEsC,QAAS,MAIFtC,EAAE+E,QACZ3D,EAAMgD,iBAAkBljC,EAAG8+B,EAAE+E,QAAS7jC,IAIvC,GAAK8+B,EAAEgF,cAC+C,IAAnDhF,EAAEgF,WAAWxlC,KAAMmkC,EAAiBvC,EAAOpB,IAAiBngB,GAG9D,OAAOuhB,EAAMoD,QAed,GAXAP,EAAW,QAGXJ,EAAiBtpB,IAAKylB,EAAEhG,UACxBoH,EAAMx5B,KAAMo4B,EAAEiF,SACd7D,EAAMxlB,KAAMokB,EAAE76B,OAGdg+B,EAAYhC,GAA+BR,GAAYX,EAAG77B,EAASi9B,GAK5D,CASN,GARAA,EAAMnhB,WAAa,EAGdwjB,GACJG,EAAmB3b,QAAS,WAAY,CAAEmZ,EAAOpB,IAI7CngB,EACJ,OAAOuhB,EAIHpB,EAAEoC,OAAqB,EAAZpC,EAAE5D,UACjBmH,EAAezkC,EAAO+f,WAAY,WACjCuiB,EAAMoD,MAAO,YACXxE,EAAE5D,UAGN,IACCvc,GAAY,EACZsjB,EAAU+B,KAAMnB,EAAgBn8B,GAC/B,MAAQ4D,GAGT,GAAKqU,EACJ,MAAMrU,EAIP5D,GAAO,EAAG4D,SAhCX5D,GAAO,EAAG,gBAqCX,SAASA,EAAM28B,EAAQY,EAAkBC,EAAWL,GACnD,IAAIM,EAAWJ,EAAS9/B,EAAOmgC,EAAUC,EACxCd,EAAaU,EAGTtlB,IAILA,GAAY,EAGP0jB,GACJzkC,EAAOu9B,aAAckH,GAKtBJ,OAAYt+B,EAGZw+B,EAAwB0B,GAAW,GAGnC3D,EAAMnhB,WAAsB,EAATskB,EAAa,EAAI,EAGpCc,EAAsB,KAAVd,GAAiBA,EAAS,KAAkB,MAAXA,EAGxCa,IACJE,EA7lBJ,SAA8BtF,EAAGoB,EAAOgE,GAEvC,IAAII,EAAI9kC,EAAM+kC,EAAeC,EAC5B3rB,EAAWimB,EAAEjmB,SACbmnB,EAAYlB,EAAEkB,UAGf,MAA2B,MAAnBA,EAAW,GAClBA,EAAU9zB,aACEvI,IAAP2gC,IACJA,EAAKxF,EAAEsE,UAAYlD,EAAM8C,kBAAmB,iBAK9C,GAAKsB,EACJ,IAAM9kC,KAAQqZ,EACb,GAAKA,EAAUrZ,IAAUqZ,EAAUrZ,GAAO8L,KAAMg5B,GAAO,CACtDtE,EAAUvwB,QAASjQ,GACnB,MAMH,GAAKwgC,EAAW,KAAOkE,EACtBK,EAAgBvE,EAAW,OACrB,CAGN,IAAMxgC,KAAQ0kC,EAAY,CACzB,IAAMlE,EAAW,IAAOlB,EAAEyC,WAAY/hC,EAAO,IAAMwgC,EAAW,IAAQ,CACrEuE,EAAgB/kC,EAChB,MAEKglC,IACLA,EAAgBhlC,GAKlB+kC,EAAgBA,GAAiBC,EAMlC,GAAKD,EAIJ,OAHKA,IAAkBvE,EAAW,IACjCA,EAAUvwB,QAAS80B,GAEbL,EAAWK,GA0iBLE,CAAqB3F,EAAGoB,EAAOgE,KAIrCC,IACsC,EAA3CtjC,EAAO6D,QAAS,SAAUo6B,EAAEkB,YAC5Bn/B,EAAO6D,QAAS,OAAQo6B,EAAEkB,WAAc,IACxClB,EAAEyC,WAAY,eAAkB,cAIjC6C,EA9iBH,SAAsBtF,EAAGsF,EAAUlE,EAAOiE,GACzC,IAAIO,EAAOC,EAASC,EAAMp2B,EAAKsK,EAC9ByoB,EAAa,GAGbvB,EAAYlB,EAAEkB,UAAU7hC,QAGzB,GAAK6hC,EAAW,GACf,IAAM4E,KAAQ9F,EAAEyC,WACfA,EAAYqD,EAAKt/B,eAAkBw5B,EAAEyC,WAAYqD,GAInDD,EAAU3E,EAAU9zB,QAGpB,MAAQy4B,EAcP,GAZK7F,EAAEwC,eAAgBqD,KACtBzE,EAAOpB,EAAEwC,eAAgBqD,IAAcP,IAIlCtrB,GAAQqrB,GAAarF,EAAE+F,aAC5BT,EAAWtF,EAAE+F,WAAYT,EAAUtF,EAAEiB,WAGtCjnB,EAAO6rB,EACPA,EAAU3E,EAAU9zB,QAKnB,GAAiB,MAAZy4B,EAEJA,EAAU7rB,OAGJ,GAAc,MAATA,GAAgBA,IAAS6rB,EAAU,CAM9C,KAHAC,EAAOrD,EAAYzoB,EAAO,IAAM6rB,IAAapD,EAAY,KAAOoD,IAI/D,IAAMD,KAASnD,EAId,IADA/yB,EAAMk2B,EAAMt/B,MAAO,MACT,KAAQu/B,IAGjBC,EAAOrD,EAAYzoB,EAAO,IAAMtK,EAAK,KACpC+yB,EAAY,KAAO/yB,EAAK,KACb,EAGG,IAATo2B,EACJA,EAAOrD,EAAYmD,IAGgB,IAAxBnD,EAAYmD,KACvBC,EAAUn2B,EAAK,GACfwxB,EAAUvwB,QAASjB,EAAK,KAEzB,MAOJ,IAAc,IAATo2B,EAGJ,GAAKA,GAAQ9F,EAAEgG,UACdV,EAAWQ,EAAMR,QAEjB,IACCA,EAAWQ,EAAMR,GAChB,MAAQ95B,GACT,MAAO,CACN0R,MAAO,cACP/X,MAAO2gC,EAAOt6B,EAAI,sBAAwBwO,EAAO,OAAS6rB,IASjE,MAAO,CAAE3oB,MAAO,UAAWsE,KAAM8jB,GAidpBW,CAAajG,EAAGsF,EAAUlE,EAAOiE,GAGvCA,GAGCrF,EAAE8E,cACNS,EAAWnE,EAAM8C,kBAAmB,oBAEnCniC,EAAO+/B,aAAcsB,GAAamC,IAEnCA,EAAWnE,EAAM8C,kBAAmB,WAEnCniC,EAAOggC,KAAMqB,GAAamC,IAKZ,MAAXhB,GAA6B,SAAXvE,EAAEt/B,KACxB+jC,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAaa,EAASpoB,MACtB+nB,EAAUK,EAAS9jB,KAEnB6jB,IADAlgC,EAAQmgC,EAASngC,UAMlBA,EAAQs/B,GACHF,GAAWE,IACfA,EAAa,QACRF,EAAS,IACbA,EAAS,KAMZnD,EAAMmD,OAASA,EACfnD,EAAMqD,YAAeU,GAAoBV,GAAe,GAGnDY,EACJjoB,EAASmB,YAAaolB,EAAiB,CAAEsB,EAASR,EAAYrD,IAE9DhkB,EAASuB,WAAYglB,EAAiB,CAAEvC,EAAOqD,EAAYt/B,IAI5Di8B,EAAM0C,WAAYA,GAClBA,OAAaj/B,EAER4+B,GACJG,EAAmB3b,QAASod,EAAY,cAAgB,YACvD,CAAEjE,EAAOpB,EAAGqF,EAAYJ,EAAU9/B,IAIpC0+B,EAAiB/mB,SAAU6mB,EAAiB,CAAEvC,EAAOqD,IAEhDhB,IACJG,EAAmB3b,QAAS,eAAgB,CAAEmZ,EAAOpB,MAG3Cj+B,EAAO8/B,QAChB9/B,EAAOwlB,MAAMU,QAAS,cAKzB,OAAOmZ,GAGR8E,QAAS,SAAUlE,EAAKxgB,EAAMte,GAC7B,OAAOnB,EAAOW,IAAKs/B,EAAKxgB,EAAMte,EAAU,SAGzCijC,UAAW,SAAUnE,EAAK9+B,GACzB,OAAOnB,EAAOW,IAAKs/B,OAAKn9B,EAAW3B,EAAU,aAI/CnB,EAAOkB,KAAM,CAAE,MAAO,QAAU,SAAUsD,EAAImV,GAC7C3Z,EAAQ2Z,GAAW,SAAUsmB,EAAKxgB,EAAMte,EAAUxC,GAUjD,OAPKN,EAAYohB,KAChB9gB,EAAOA,GAAQwC,EACfA,EAAWse,EACXA,OAAO3c,GAID9C,EAAOmhC,KAAMnhC,EAAOmC,OAAQ,CAClC89B,IAAKA,EACLthC,KAAMgb,EACNulB,SAAUvgC,EACV8gB,KAAMA,EACNyjB,QAAS/hC,GACPnB,EAAO2C,cAAes9B,IAASA,OAIpCjgC,EAAOihC,cAAe,SAAUhD,GAC/B,IAAI9+B,EACJ,IAAMA,KAAK8+B,EAAE+E,QACa,iBAApB7jC,EAAEsF,gBACNw5B,EAAEqC,YAAcrC,EAAE+E,QAAS7jC,IAAO,MAMrCa,EAAOwsB,SAAW,SAAUyT,EAAK79B,EAASlD,GACzC,OAAOc,EAAOmhC,KAAM,CACnBlB,IAAKA,EAGLthC,KAAM,MACNugC,SAAU,SACVh0B,OAAO,EACPm1B,OAAO,EACP7jC,QAAQ,EAKRkkC,WAAY,CACX2D,cAAe,cAEhBL,WAAY,SAAUT,GACrBvjC,EAAO0D,WAAY6/B,EAAUnhC,EAASlD,OAMzCc,EAAOG,GAAGgC,OAAQ,CACjBmiC,QAAS,SAAU/X,GAClB,IAAI/H,EAyBJ,OAvBKxnB,KAAM,KACLqB,EAAYkuB,KAChBA,EAAOA,EAAK9uB,KAAMT,KAAM,KAIzBwnB,EAAOxkB,EAAQusB,EAAMvvB,KAAM,GAAIkN,eAAgB1I,GAAI,GAAIgB,OAAO,GAEzDxF,KAAM,GAAI4C,YACd4kB,EAAK2I,aAAcnwB,KAAM,IAG1BwnB,EAAKpjB,IAAK,WACT,IAAIC,EAAOrE,KAEX,MAAQqE,EAAKkjC,kBACZljC,EAAOA,EAAKkjC,kBAGb,OAAOljC,IACJ4rB,OAAQjwB,OAGNA,MAGRwnC,UAAW,SAAUjY,GACpB,OAAKluB,EAAYkuB,GACTvvB,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,MAAOwnC,UAAWjY,EAAK9uB,KAAMT,KAAMmC,MAItCnC,KAAKkE,KAAM,WACjB,IAAIuW,EAAOzX,EAAQhD,MAClBgb,EAAWP,EAAKO,WAEZA,EAAS1X,OACb0X,EAASssB,QAAS/X,GAGlB9U,EAAKwV,OAAQV,MAKhB/H,KAAM,SAAU+H,GACf,IAAIkY,EAAiBpmC,EAAYkuB,GAEjC,OAAOvvB,KAAKkE,KAAM,SAAU/B,GAC3Ba,EAAQhD,MAAOsnC,QAASG,EAAiBlY,EAAK9uB,KAAMT,KAAMmC,GAAMotB,MAIlEmY,OAAQ,SAAUzkC,GAIjB,OAHAjD,KAAKmU,OAAQlR,GAAW2R,IAAK,QAAS1Q,KAAM,WAC3ClB,EAAQhD,MAAOswB,YAAatwB,KAAKwM,cAE3BxM,QAKTgD,EAAO6O,KAAKhI,QAAQ4vB,OAAS,SAAUp1B,GACtC,OAAQrB,EAAO6O,KAAKhI,QAAQ89B,QAAStjC,IAEtCrB,EAAO6O,KAAKhI,QAAQ89B,QAAU,SAAUtjC,GACvC,SAAWA,EAAKuuB,aAAevuB,EAAK0vB,cAAgB1vB,EAAKyxB,iBAAiBxyB,SAM3EN,EAAO6/B,aAAa+E,IAAM,WACzB,IACC,OAAO,IAAI7nC,EAAO8nC,eACjB,MAAQp7B,MAGX,IAAIq7B,GAAmB,CAGrBC,EAAG,IAIHC,KAAM,KAEPC,GAAejlC,EAAO6/B,aAAa+E,MAEpCxmC,EAAQ8mC,OAASD,IAAkB,oBAAqBA,GACxD7mC,EAAQ+iC,KAAO8D,KAAiBA,GAEhCjlC,EAAOkhC,cAAe,SAAU9+B,GAC/B,IAAIjB,EAAUgkC,EAGd,GAAK/mC,EAAQ8mC,MAAQD,KAAiB7iC,EAAQwgC,YAC7C,MAAO,CACNO,KAAM,SAAUH,EAAS/K,GACxB,IAAI94B,EACHylC,EAAMxiC,EAAQwiC,MAWf,GATAA,EAAIQ,KACHhjC,EAAQzD,KACRyD,EAAQ69B,IACR79B,EAAQi+B,MACRj+B,EAAQijC,SACRjjC,EAAQmR,UAIJnR,EAAQkjC,UACZ,IAAMnmC,KAAKiD,EAAQkjC,UAClBV,EAAKzlC,GAAMiD,EAAQkjC,UAAWnmC,GAmBhC,IAAMA,KAdDiD,EAAQmgC,UAAYqC,EAAItC,kBAC5BsC,EAAItC,iBAAkBlgC,EAAQmgC,UAQzBngC,EAAQwgC,aAAgBI,EAAS,sBACtCA,EAAS,oBAAuB,kBAItBA,EACV4B,EAAIvC,iBAAkBljC,EAAG6jC,EAAS7jC,IAInCgC,EAAW,SAAUxC,GACpB,OAAO,WACDwC,IACJA,EAAWgkC,EAAgBP,EAAIW,OAC9BX,EAAIY,QAAUZ,EAAIa,QAAUb,EAAIc,UAC/Bd,EAAIe,mBAAqB,KAEb,UAAThnC,EACJimC,EAAInC,QACgB,UAAT9jC,EAKgB,iBAAfimC,EAAIpC,OACfvK,EAAU,EAAG,SAEbA,EAGC2M,EAAIpC,OACJoC,EAAIlC,YAINzK,EACC6M,GAAkBF,EAAIpC,SAAYoC,EAAIpC,OACtCoC,EAAIlC,WAK+B,UAAjCkC,EAAIgB,cAAgB,SACM,iBAArBhB,EAAIiB,aACV,CAAEC,OAAQlB,EAAIrB,UACd,CAAEhkC,KAAMqlC,EAAIiB,cACbjB,EAAIxC,4BAQTwC,EAAIW,OAASpkC,IACbgkC,EAAgBP,EAAIY,QAAUZ,EAAIc,UAAYvkC,EAAU,cAKnC2B,IAAhB8hC,EAAIa,QACRb,EAAIa,QAAUN,EAEdP,EAAIe,mBAAqB,WAGA,IAAnBf,EAAI1mB,YAMRnhB,EAAO+f,WAAY,WACb3b,GACJgkC,OAQLhkC,EAAWA,EAAU,SAErB,IAGCyjC,EAAIzB,KAAM/gC,EAAQ0gC,YAAc1gC,EAAQqd,MAAQ,MAC/C,MAAQhW,GAGT,GAAKtI,EACJ,MAAMsI,IAKTg5B,MAAO,WACDthC,GACJA,QAWLnB,EAAOihC,cAAe,SAAUhD,GAC1BA,EAAE2E,cACN3E,EAAEjmB,SAAS3Y,QAAS,KAKtBW,EAAO+gC,UAAW,CACjBR,QAAS,CACRlhC,OAAQ,6FAGT2Y,SAAU,CACT3Y,OAAQ,2BAETqhC,WAAY,CACX2D,cAAe,SAAU9kC,GAExB,OADAS,EAAO0D,WAAYnE,GACZA,MAMVS,EAAOihC,cAAe,SAAU,SAAUhD,QACxBn7B,IAAZm7B,EAAE/yB,QACN+yB,EAAE/yB,OAAQ,GAEN+yB,EAAE2E,cACN3E,EAAEt/B,KAAO,SAKXqB,EAAOkhC,cAAe,SAAU,SAAUjD,GAIxC,IAAI5+B,EAAQ8B,EADb,GAAK88B,EAAE2E,aAAe3E,EAAE8H,YAEvB,MAAO,CACN5C,KAAM,SAAUlpB,EAAGge,GAClB54B,EAASW,EAAQ,YACf+O,KAAMkvB,EAAE8H,aAAe,IACvBrmB,KAAM,CAAEsmB,QAAS/H,EAAEgI,cAAernC,IAAKq/B,EAAEgC,MACzC7a,GAAI,aAAcjkB,EAAW,SAAU+kC,GACvC7mC,EAAOub,SACPzZ,EAAW,KACN+kC,GACJjO,EAAuB,UAAbiO,EAAIvnC,KAAmB,IAAM,IAAKunC,EAAIvnC,QAKnD/B,EAAS8C,KAAKC,YAAaN,EAAQ,KAEpCojC,MAAO,WACDthC,GACJA,QAUL,IAqGKshB,GArGD0jB,GAAe,GAClBC,GAAS,oBAGVpmC,EAAO+gC,UAAW,CACjBsF,MAAO,WACPC,cAAe,WACd,IAAInlC,EAAWglC,GAAa7/B,OAAWtG,EAAO+C,QAAU,IAAQlE,GAAMuF,OAEtE,OADApH,KAAMmE,IAAa,EACZA,KAKTnB,EAAOihC,cAAe,aAAc,SAAUhD,EAAGsI,EAAkBlH,GAElE,IAAImH,EAAcC,EAAaC,EAC9BC,GAAuB,IAAZ1I,EAAEoI,QAAqBD,GAAO37B,KAAMwzB,EAAEgC,KAChD,MACkB,iBAAXhC,EAAExe,MAE6C,KADnDwe,EAAEqC,aAAe,IACjBziC,QAAS,sCACXuoC,GAAO37B,KAAMwzB,EAAExe,OAAU,QAI5B,GAAKknB,GAAiC,UAArB1I,EAAEkB,UAAW,GA8D7B,OA3DAqH,EAAevI,EAAEqI,cAAgBjoC,EAAY4/B,EAAEqI,eAC9CrI,EAAEqI,gBACFrI,EAAEqI,cAGEK,EACJ1I,EAAG0I,GAAa1I,EAAG0I,GAAWzjC,QAASkjC,GAAQ,KAAOI,IAC/B,IAAZvI,EAAEoI,QACbpI,EAAEgC,MAAS5C,GAAO5yB,KAAMwzB,EAAEgC,KAAQ,IAAM,KAAQhC,EAAEoI,MAAQ,IAAMG,GAIjEvI,EAAEyC,WAAY,eAAkB,WAI/B,OAHMgG,GACL1mC,EAAOoD,MAAOojC,EAAe,mBAEvBE,EAAmB,IAI3BzI,EAAEkB,UAAW,GAAM,OAGnBsH,EAAc1pC,EAAQypC,GACtBzpC,EAAQypC,GAAiB,WACxBE,EAAoBplC,WAIrB+9B,EAAMjkB,OAAQ,gBAGQtY,IAAhB2jC,EACJzmC,EAAQjD,GAASu+B,WAAYkL,GAI7BzpC,EAAQypC,GAAiBC,EAIrBxI,EAAGuI,KAGPvI,EAAEqI,cAAgBC,EAAiBD,cAGnCH,GAAavoC,KAAM4oC,IAIfE,GAAqBroC,EAAYooC,IACrCA,EAAaC,EAAmB,IAGjCA,EAAoBD,OAAc3jC,IAI5B,WAYT1E,EAAQwoC,qBACHnkB,GAAO7lB,EAASiqC,eAAeD,mBAAoB,IAAKnkB,MACvD5U,UAAY,6BACiB,IAA3B4U,GAAKjZ,WAAWlJ,QAQxBN,EAAO2X,UAAY,SAAU8H,EAAMvf,EAAS4mC,GAC3C,MAAqB,iBAATrnB,EACJ,IAEgB,kBAAZvf,IACX4mC,EAAc5mC,EACdA,GAAU,GAKLA,IAIA9B,EAAQwoC,qBAMZ/yB,GALA3T,EAAUtD,EAASiqC,eAAeD,mBAAoB,KAKvCtnC,cAAe,SACzBkT,KAAO5V,EAASuV,SAASK,KAC9BtS,EAAQR,KAAKC,YAAakU,IAE1B3T,EAAUtD,GAKZynB,GAAWyiB,GAAe,IAD1BC,EAASzvB,EAAWnN,KAAMsV,IAKlB,CAAEvf,EAAQZ,cAAeynC,EAAQ,MAGzCA,EAAS3iB,GAAe,CAAE3E,GAAQvf,EAASmkB,GAEtCA,GAAWA,EAAQ/jB,QACvBN,EAAQqkB,GAAUzJ,SAGZ5a,EAAOgB,MAAO,GAAI+lC,EAAOv9B,cAlChC,IAAIqK,EAAMkzB,EAAQ1iB,GAyCnBrkB,EAAOG,GAAGsoB,KAAO,SAAUwX,EAAK+G,EAAQ7lC,GACvC,IAAIlB,EAAUtB,EAAM4kC,EACnB9rB,EAAOza,KACPyoB,EAAMwa,EAAIpiC,QAAS,KAsDpB,OApDY,EAAP4nB,IACJxlB,EAAWk7B,GAAkB8E,EAAI3iC,MAAOmoB,IACxCwa,EAAMA,EAAI3iC,MAAO,EAAGmoB,IAIhBpnB,EAAY2oC,IAGhB7lC,EAAW6lC,EACXA,OAASlkC,GAGEkkC,GAA4B,iBAAXA,IAC5BroC,EAAO,QAIW,EAAd8Y,EAAKnX,QACTN,EAAOmhC,KAAM,CACZlB,IAAKA,EAKLthC,KAAMA,GAAQ,MACdugC,SAAU,OACVzf,KAAMunB,IACHnhC,KAAM,SAAUggC,GAGnBtC,EAAWjiC,UAEXmW,EAAK8U,KAAMtsB,EAIVD,EAAQ,SAAUitB,OAAQjtB,EAAO2X,UAAWkuB,IAAiBr4B,KAAMvN,GAGnE4lC,KAKEzqB,OAAQja,GAAY,SAAUk+B,EAAOmD,GACxC/qB,EAAKvW,KAAM,WACVC,EAASxD,MAAOX,KAAMumC,GAAY,CAAElE,EAAMwG,aAAcrD,EAAQnD,QAK5DriC,MAMRgD,EAAO6O,KAAKhI,QAAQogC,SAAW,SAAU5lC,GACxC,OAAOrB,EAAO2B,KAAM3B,EAAOy5B,OAAQ,SAAUt5B,GAC5C,OAAOkB,IAASlB,EAAGkB,OAChBf,QAMLN,EAAOknC,OAAS,CACfC,UAAW,SAAU9lC,EAAMe,EAASjD,GACnC,IAAIioC,EAAaC,EAASC,EAAWC,EAAQC,EAAWC,EACvD/X,EAAW1vB,EAAOyhB,IAAKpgB,EAAM,YAC7BqmC,EAAU1nC,EAAQqB,GAClBynB,EAAQ,GAGS,WAAb4G,IACJruB,EAAKkgB,MAAMmO,SAAW,YAGvB8X,EAAYE,EAAQR,SACpBI,EAAYtnC,EAAOyhB,IAAKpgB,EAAM,OAC9BomC,EAAaznC,EAAOyhB,IAAKpgB,EAAM,SACI,aAAbquB,GAAwC,UAAbA,KACA,GAA9C4X,EAAYG,GAAa5pC,QAAS,SAMpC0pC,GADAH,EAAcM,EAAQhY,YACD3iB,IACrBs6B,EAAUD,EAAYzS,OAGtB4S,EAASxX,WAAYuX,IAAe,EACpCD,EAAUtX,WAAY0X,IAAgB,GAGlCppC,EAAY+D,KAGhBA,EAAUA,EAAQ3E,KAAM4D,EAAMlC,EAAGa,EAAOmC,OAAQ,GAAIqlC,KAGjC,MAAfplC,EAAQ2K,MACZ+b,EAAM/b,IAAQ3K,EAAQ2K,IAAMy6B,EAAUz6B,IAAQw6B,GAE1B,MAAhBnlC,EAAQuyB,OACZ7L,EAAM6L,KAASvyB,EAAQuyB,KAAO6S,EAAU7S,KAAS0S,GAG7C,UAAWjlC,EACfA,EAAQulC,MAAMlqC,KAAM4D,EAAMynB,GAG1B4e,EAAQjmB,IAAKqH,KAKhB9oB,EAAOG,GAAGgC,OAAQ,CAGjB+kC,OAAQ,SAAU9kC,GAGjB,GAAKd,UAAUhB,OACd,YAAmBwC,IAAZV,EACNpF,KACAA,KAAKkE,KAAM,SAAU/B,GACpBa,EAAOknC,OAAOC,UAAWnqC,KAAMoF,EAASjD,KAI3C,IAAIyoC,EAAMC,EACTxmC,EAAOrE,KAAM,GAEd,OAAMqE,EAQAA,EAAKyxB,iBAAiBxyB,QAK5BsnC,EAAOvmC,EAAKozB,wBACZoT,EAAMxmC,EAAK6I,cAAc4C,YAClB,CACNC,IAAK66B,EAAK76B,IAAM86B,EAAIC,YACpBnT,KAAMiT,EAAKjT,KAAOkT,EAAIE,cARf,CAAEh7B,IAAK,EAAG4nB,KAAM,QATxB,GAuBDjF,SAAU,WACT,GAAM1yB,KAAM,GAAZ,CAIA,IAAIgrC,EAAcd,EAAQhoC,EACzBmC,EAAOrE,KAAM,GACbirC,EAAe,CAAEl7B,IAAK,EAAG4nB,KAAM,GAGhC,GAAwC,UAAnC30B,EAAOyhB,IAAKpgB,EAAM,YAGtB6lC,EAAS7lC,EAAKozB,4BAER,CACNyS,EAASlqC,KAAKkqC,SAIdhoC,EAAMmC,EAAK6I,cACX89B,EAAe3mC,EAAK2mC,cAAgB9oC,EAAIyN,gBACxC,MAAQq7B,IACLA,IAAiB9oC,EAAIujB,MAAQulB,IAAiB9oC,EAAIyN,kBACT,WAA3C3M,EAAOyhB,IAAKumB,EAAc,YAE1BA,EAAeA,EAAapoC,WAExBooC,GAAgBA,IAAiB3mC,GAAkC,IAA1B2mC,EAAazpC,YAG1D0pC,EAAejoC,EAAQgoC,GAAed,UACzBn6B,KAAO/M,EAAOyhB,IAAKumB,EAAc,kBAAkB,GAChEC,EAAatT,MAAQ30B,EAAOyhB,IAAKumB,EAAc,mBAAmB,IAKpE,MAAO,CACNj7B,IAAKm6B,EAAOn6B,IAAMk7B,EAAal7B,IAAM/M,EAAOyhB,IAAKpgB,EAAM,aAAa,GACpEszB,KAAMuS,EAAOvS,KAAOsT,EAAatT,KAAO30B,EAAOyhB,IAAKpgB,EAAM,cAAc,MAc1E2mC,aAAc,WACb,OAAOhrC,KAAKoE,IAAK,WAChB,IAAI4mC,EAAehrC,KAAKgrC,aAExB,MAAQA,GAA2D,WAA3ChoC,EAAOyhB,IAAKumB,EAAc,YACjDA,EAAeA,EAAaA,aAG7B,OAAOA,GAAgBr7B,QAM1B3M,EAAOkB,KAAM,CAAE20B,WAAY,cAAeD,UAAW,eAAiB,SAAUjc,EAAQ+F,GACvF,IAAI3S,EAAM,gBAAkB2S,EAE5B1f,EAAOG,GAAIwZ,GAAW,SAAUva,GAC/B,OAAOgf,EAAQphB,KAAM,SAAUqE,EAAMsY,EAAQva,GAG5C,IAAIyoC,EAOJ,GANKppC,EAAU4C,GACdwmC,EAAMxmC,EACuB,IAAlBA,EAAK9C,WAChBspC,EAAMxmC,EAAKyL,kBAGChK,IAAR1D,EACJ,OAAOyoC,EAAMA,EAAKnoB,GAASre,EAAMsY,GAG7BkuB,EACJA,EAAIK,SACFn7B,EAAY86B,EAAIE,YAAV3oC,EACP2N,EAAM3N,EAAMyoC,EAAIC,aAIjBzmC,EAAMsY,GAAWva,GAEhBua,EAAQva,EAAKkC,UAAUhB,WAU5BN,EAAOkB,KAAM,CAAE,MAAO,QAAU,SAAUsD,EAAIkb,GAC7C1f,EAAOizB,SAAUvT,GAASkP,GAAcxwB,EAAQgyB,cAC/C,SAAU/uB,EAAMitB,GACf,GAAKA,EAIJ,OAHAA,EAAWD,GAAQhtB,EAAMqe,GAGlBoO,GAAUrjB,KAAM6jB,GACtBtuB,EAAQqB,GAAOquB,WAAYhQ,GAAS,KACpC4O,MAQLtuB,EAAOkB,KAAM,CAAEinC,OAAQ,SAAUC,MAAO,SAAW,SAAU/lC,EAAM1D,GAClEqB,EAAOkB,KAAM,CACZ2zB,QAAS,QAAUxyB,EACnB2W,QAASra,EACT0pC,GAAI,QAAUhmC,GACZ,SAAUimC,EAAcC,GAG1BvoC,EAAOG,GAAIooC,GAAa,SAAU3T,EAAQzwB,GACzC,IAAIka,EAAY/c,UAAUhB,SAAYgoC,GAAkC,kBAAX1T,GAC5DpC,EAAQ8V,KAA6B,IAAX1T,IAA6B,IAAVzwB,EAAiB,SAAW,UAE1E,OAAOia,EAAQphB,KAAM,SAAUqE,EAAM1C,EAAMwF,GAC1C,IAAIjF,EAEJ,OAAKT,EAAU4C,GAGyB,IAAhCknC,EAAS1qC,QAAS,SACxBwD,EAAM,QAAUgB,GAChBhB,EAAKzE,SAAS+P,gBAAiB,SAAWtK,GAIrB,IAAlBhB,EAAK9C,UACTW,EAAMmC,EAAKsL,gBAIJ3J,KAAKivB,IACX5wB,EAAKohB,KAAM,SAAWpgB,GAAQnD,EAAK,SAAWmD,GAC9ChB,EAAKohB,KAAM,SAAWpgB,GAAQnD,EAAK,SAAWmD,GAC9CnD,EAAK,SAAWmD,UAIDS,IAAVqB,EAGNnE,EAAOyhB,IAAKpgB,EAAM1C,EAAM6zB,GAGxBxyB,EAAOuhB,MAAOlgB,EAAM1C,EAAMwF,EAAOquB,IAChC7zB,EAAM0f,EAAYuW,OAAS9xB,EAAWub,QAM5Cre,EAAOkB,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,YACE,SAAUsD,EAAI7F,GAChBqB,EAAOG,GAAIxB,GAAS,SAAUwB,GAC7B,OAAOnD,KAAKooB,GAAIzmB,EAAMwB,MAOxBH,EAAOG,GAAGgC,OAAQ,CAEjB61B,KAAM,SAAU3S,EAAO5F,EAAMtf,GAC5B,OAAOnD,KAAKooB,GAAIC,EAAO,KAAM5F,EAAMtf,IAEpCqoC,OAAQ,SAAUnjB,EAAOllB,GACxB,OAAOnD,KAAKyoB,IAAKJ,EAAO,KAAMllB,IAG/BsoC,SAAU,SAAUxoC,EAAUolB,EAAO5F,EAAMtf,GAC1C,OAAOnD,KAAKooB,GAAIC,EAAOplB,EAAUwf,EAAMtf,IAExCuoC,WAAY,SAAUzoC,EAAUolB,EAAOllB,GAGtC,OAA4B,IAArBmB,UAAUhB,OAChBtD,KAAKyoB,IAAKxlB,EAAU,MACpBjD,KAAKyoB,IAAKJ,EAAOplB,GAAY,KAAME,IAGrCwoC,MAAO,SAAUC,EAAQC,GACxB,OAAO7rC,KAAKkuB,WAAY0d,GAASzd,WAAY0d,GAASD,MAIxD5oC,EAAOkB,KACN,wLAE4DqD,MAAO,KACnE,SAAUC,EAAInC,GAGbrC,EAAOG,GAAIkC,GAAS,SAAUod,EAAMtf,GACnC,OAA0B,EAAnBmB,UAAUhB,OAChBtD,KAAKooB,GAAI/iB,EAAM,KAAMod,EAAMtf,GAC3BnD,KAAKkpB,QAAS7jB,MAUlB,IAAI2E,GAAQ,qCAMZhH,EAAO8oC,MAAQ,SAAU3oC,EAAID,GAC5B,IAAIyN,EAAK6D,EAAMs3B,EAUf,GARwB,iBAAZ5oC,IACXyN,EAAMxN,EAAID,GACVA,EAAUC,EACVA,EAAKwN,GAKAtP,EAAY8B,GAalB,OARAqR,EAAOlU,EAAMG,KAAM6D,UAAW,IAC9BwnC,EAAQ,WACP,OAAO3oC,EAAGxC,MAAOuC,GAAWlD,KAAMwU,EAAK9T,OAAQJ,EAAMG,KAAM6D,eAItD8C,KAAOjE,EAAGiE,KAAOjE,EAAGiE,MAAQpE,EAAOoE,OAElC0kC,GAGR9oC,EAAO+oC,UAAY,SAAUC,GACvBA,EACJhpC,EAAOge,YAEPhe,EAAO4X,OAAO,IAGhB5X,EAAO6C,QAAUD,MAAMC,QACvB7C,EAAOipC,UAAYhpB,KAAKC,MACxBlgB,EAAOqJ,SAAWA,EAClBrJ,EAAO3B,WAAaA,EACpB2B,EAAOvB,SAAWA,EAClBuB,EAAOgf,UAAYA,EACnBhf,EAAOrB,KAAOmB,EAEdE,EAAOmpB,IAAMzjB,KAAKyjB,IAElBnpB,EAAOkpC,UAAY,SAAU5qC,GAK5B,IAAIK,EAAOqB,EAAOrB,KAAML,GACxB,OAAkB,WAATK,GAA8B,WAATA,KAK5BwqC,MAAO7qC,EAAMyxB,WAAYzxB,KAG5B0B,EAAOopC,KAAO,SAAU7pC,GACvB,OAAe,MAARA,EACN,IACEA,EAAO,IAAK2D,QAAS8D,GAAO,KAkBT,mBAAXqiC,QAAyBA,OAAOC,KAC3CD,OAAQ,SAAU,GAAI,WACrB,OAAOrpC,IAOT,IAGCupC,GAAUxsC,EAAOiD,OAGjBwpC,GAAKzsC,EAAO0sC,EAwBb,OAtBAzpC,EAAO0pC,WAAa,SAAUhnC,GAS7B,OARK3F,EAAO0sC,IAAMzpC,IACjBjD,EAAO0sC,EAAID,IAGP9mC,GAAQ3F,EAAOiD,SAAWA,IAC9BjD,EAAOiD,OAASupC,IAGVvpC,GAMiB,oBAAb/C,IACXF,EAAOiD,OAASjD,EAAO0sC,EAAIzpC,GAMrBA","file":"jquery-3.6.0.min.js"} \ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index 2917f012..915a3243 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -5,115 +5,79 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-<meta name="description" content="Calculation routines based on the FOCUS Kinetics Report (2006,
- 2014). Includes a function for conveniently defining differential equation
- models, model solution based on eigenvalues if possible or using numerical
- solvers. If a C compiler (on windows: Rtools) is installed, differential
- equation models are solved using automatically generated C functions.
- Heteroscedasticity can be taken into account using variance by variable or
- two-component error models as described by Ranke and Meinecke (2018)
- &lt;doi:10.3390/environments6120124&gt;. Hierarchical degradation models can
- be fitted using nonlinear mixed-effects model packages as a back end as
- described by Ranke et al. (2021) &lt;doi:10.3390/environments8080071&gt;. Please
- note that no warranty is implied for correctness of results or fitness for a
- particular purpose.">
<title>Kinetic Evaluation of Chemical Degradation Data • mkin</title>
<script src="deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet">
-<script src="deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous">
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous">
-<!-- bootstrap-toc --><script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@v1.0.1/dist/bootstrap-toc.min.js" integrity="sha256-4veVQbu7//Lk5TSmc7YV48MxtMy98e26cf5MrgZYnwo=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="pkgdown.js"></script><meta property="og:title" content="Kinetic Evaluation of Chemical Degradation Data">
-<meta property="og:description" content="Calculation routines based on the FOCUS Kinetics Report (2006,
- 2014). Includes a function for conveniently defining differential equation
- models, model solution based on eigenvalues if possible or using numerical
- solvers. If a C compiler (on windows: Rtools) is installed, differential
- equation models are solved using automatically generated C functions.
- Heteroscedasticity can be taken into account using variance by variable or
- two-component error models as described by Ranke and Meinecke (2018)
- &lt;doi:10.3390/environments6120124&gt;. Hierarchical degradation models can
- be fitted using nonlinear mixed-effects model packages as a back end as
- described by Ranke et al. (2021) &lt;doi:10.3390/environments8080071&gt;. Please
- note that no warranty is implied for correctness of results or fitness for a
- particular purpose.">
-<!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]-->
+<script src="deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="pkgdown.js"></script><meta property="og:title" content="Kinetic Evaluation of Chemical Degradation Data">
+<meta name="description" content="Calculation routines based on the FOCUS Kinetics Report (2006, 2014). Includes a function for conveniently defining differential equation models, model solution based on eigenvalues if possible or using numerical solvers. If a C compiler (on windows: Rtools) is installed, differential equation models are solved using automatically generated C functions. Heteroscedasticity can be taken into account using variance by variable or two-component error models as described by Ranke and Meinecke (2018) &lt;doi:10.3390/environments6120124&gt;. Hierarchical degradation models can be fitted using nonlinear mixed-effects model packages as a back end as described by Ranke et al. (2021) &lt;doi:10.3390/environments8080071&gt;. Please note that no warranty is implied for correctness of results or fitness for a particular purpose.">
+<meta property="og:description" content="Calculation routines based on the FOCUS Kinetics Report (2006, 2014). Includes a function for conveniently defining differential equation models, model solution based on eigenvalues if possible or using numerical solvers. If a C compiler (on windows: Rtools) is installed, differential equation models are solved using automatically generated C functions. Heteroscedasticity can be taken into account using variance by variable or two-component error models as described by Ranke and Meinecke (2018) &lt;doi:10.3390/environments6120124&gt;. Hierarchical degradation models can be fitted using nonlinear mixed-effects model packages as a back end as described by Ranke et al. (2021) &lt;doi:10.3390/environments8080071&gt;. Please note that no warranty is implied for correctness of results or fitness for a particular purpose.">
</head>
<body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
-
- <nav class="navbar fixed-top navbar-default navbar-expand-lg bg-light"><div class="container">
-
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
<a class="navbar-brand me-2" href="index.html">mkin</a>
- <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.6</small>
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
<ul class="navbar-nav me-auto">
-<li class="nav-item">
- <a class="nav-link" href="reference/index.html">Reference</a>
-</li>
+<li class="nav-item"><a class="nav-link" href="reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
- <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-articles">Articles</a>
- <div class="dropdown-menu" aria-labelledby="dropdown-articles">
- <a class="dropdown-item" href="articles/mkin.html">Introduction to mkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6>
- <a class="dropdown-item" href="articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- <a class="dropdown-item" href="articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- <a class="dropdown-item" href="articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6>
- <a class="dropdown-item" href="articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a>
- <a class="dropdown-item" href="articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a>
- <a class="dropdown-item" href="articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a>
- <a class="dropdown-item" href="articles/web_only/multistart.html">Short demo of the multistart method</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Performance</h6>
- <a class="dropdown-item" href="articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- <a class="dropdown-item" href="articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- <a class="dropdown-item" href="articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6>
- <a class="dropdown-item" href="articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- <a class="dropdown-item" href="articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </div>
-</li>
-<li class="nav-item">
- <a class="nav-link" href="news/index.html">News</a>
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles">
+<li><a class="dropdown-item" href="articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul>
</li>
+<li class="nav-item"><a class="nav-link" href="coverage/coverage.html">Test coverage</a></li>
+<li class="nav-item"><a class="nav-link" href="news/index.html">News</a></li>
</ul>
-<form class="form-inline my-2 my-lg-0" role="search">
- <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="search.json" id="search-input" placeholder="Search for" autocomplete="off">
-</form>
-
- <ul class="navbar-nav">
-<li class="nav-item">
- <a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="github">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
+<ul class="navbar-nav">
+<li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="search.json">
+</form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
</ul>
</div>
-
+
</div>
</nav><div class="container template-home">
<div class="row">
<main id="main" class="col-md-9"><div class="section level1">
<div class="page-header"><h1 id="mkin">mkin<a class="anchor" aria-label="anchor" href="#mkin"></a>
</h1></div>
-<p><a href="https://cran.r-project.org/package=mkin" class="external-link"><img src="https://www.r-pkg.org/badges/version/mkin"></a> <a href="https://jranke.r-universe.dev/ui/#package:mkin" class="external-link"><img src="https://jranke.r-universe.dev/badges/mkin" alt="mkin status badge"></a> <a href="https://app.travis-ci.com/github/jranke/mkin" class="external-link"><img src="https://travis-ci.com/jranke/mkin.svg?branch=main" alt="Build Status"></a> <a href="https://app.codecov.io/gh/jranke/mkin" class="external-link"><img src="https://codecov.io/github/jranke/mkin/branch/main/graphs/badge.svg" alt="codecov"></a></p>
+<!-- badges: start -->
+
<p>The <a href="https://www.r-project.org" class="external-link">R</a> package <strong>mkin</strong> provides calculation routines for the analysis of chemical degradation data, including <b>m</b>ulticompartment <b>kin</b>etics as needed for modelling the formation and decline of transformation products, or if several degradation compartments are involved. It provides stable functionality for kinetic evaluations according to the FOCUS guidance (see below for details). In addition, it provides functionality to do hierarchical kinetics based on nonlinear mixed-effects models.</p>
<div class="section level2">
<h2 id="installation">Installation<a class="anchor" aria-label="anchor" href="#installation"></a>
@@ -288,21 +252,19 @@ Von Götz N, Nörtersheuser P, Richter O (1999) Population based analysis of pes
<footer><div class="pkgdown-footer-left">
- <p></p>
-<p>Developed by Johannes Ranke.</p>
+ <p>Developed by Johannes Ranke.</p>
</div>
<div class="pkgdown-footer-right">
- <p></p>
-<p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.7.</p>
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
</div>
</footer>
</div>
-
-
+
+
</body>
</html>
diff --git a/docs/news/index.html b/docs/news/index.html
index c034276a..eeb84a76 100644
--- a/docs/news/index.html
+++ b/docs/news/index.html
@@ -1,79 +1,78 @@
<!DOCTYPE html>
-<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Changelog • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- bootstrap-toc --><script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@v1.0.1/dist/bootstrap-toc.min.js" integrity="sha256-4veVQbu7//Lk5TSmc7YV48MxtMy98e26cf5MrgZYnwo=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Changelog"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]--></head><body>
+<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Changelog • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Changelog"></head><body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
-
- <nav class="navbar fixed-top navbar-default navbar-expand-lg bg-light"><div class="container">
-
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
<a class="navbar-brand me-2" href="../index.html">mkin</a>
- <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.6</small>
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
- <ul class="navbar-nav me-auto"><li class="nav-item">
- <a class="nav-link" href="../reference/index.html">Reference</a>
-</li>
+ <ul class="navbar-nav me-auto"><li class="nav-item"><a class="nav-link" href="../reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
- <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-articles">Articles</a>
- <div class="dropdown-menu" aria-labelledby="dropdown-articles">
- <a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6>
- <a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- <a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- <a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a>
- <a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a>
- <a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Performance</h6>
- <a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- <a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- <a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6>
- <a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- <a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </div>
-</li>
-<li class="active nav-item">
- <a class="nav-link" href="../news/index.html">News</a>
-</li>
- </ul><form class="form-inline my-2 my-lg-0" role="search">
- <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="../search.json" id="search-input" placeholder="Search for" autocomplete="off"></form>
-
- <ul class="navbar-nav"><li class="nav-item">
- <a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="github">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles"><li><a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul></li>
+<li class="nav-item"><a class="nav-link" href="../coverage/coverage.html">Test coverage</a></li>
+<li class="active nav-item"><a class="nav-link" href="../news/index.html">News</a></li>
+ </ul><ul class="navbar-nav"><li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json"></form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
</ul></div>
-
+
</div>
</nav><div class="container template-news">
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
- <img src="" class="logo" alt=""><h1>Changelog</h1>
+
+ <h1>Changelog</h1>
<small>Source: <a href="https://github.com/jranke/mkin/blob/HEAD/NEWS.md" class="external-link"><code>NEWS.md</code></a></small>
</div>
<div class="section level2">
-<h2 class="pkg-version" data-toc-text="1.2.6" id="mkin-126">mkin 1.2.6<a class="anchor" aria-label="anchor" href="#mkin-126"></a></h2>
+<h2 class="pkg-version" data-toc-text="1.2.9" id="mkin-129">mkin 1.2.9<a class="anchor" aria-label="anchor" href="#mkin-129"></a></h2>
+<ul><li>’R/create_deg_func.R: Make sure that no reversible reactions are specified in the case of two observed variables, as this is not supported</li>
+</ul></div>
+ <div class="section level2">
+<h2 class="pkg-version" data-toc-text="1.2.8" id="mkin-128-unreleased">mkin 1.2.8 (unreleased)<a class="anchor" aria-label="anchor" href="#mkin-128-unreleased"></a></h2>
+<ul><li>‘R/{mhmkin,status}.R’: Deal with ‘saem’ fits that fail when updating an ‘mhmkin’ object</li>
+</ul></div>
+ <div class="section level2">
+<h2 class="pkg-version" data-toc-text="1.2.7" id="mkin-127-unreleased">mkin 1.2.7 (unreleased)<a class="anchor" aria-label="anchor" href="#mkin-127-unreleased"></a></h2>
+<ul><li>‘R/illparms.R’: Fix a bug that prevented an ill-defined random effect to be found if there was only one random effect in the model. Also add a test for this.</li>
+</ul></div>
+ <div class="section level2">
+<h2 class="pkg-version" data-toc-text="1.2.6" id="mkin-126-2023-10-14">mkin 1.2.6 (2023-10-14)<a class="anchor" aria-label="anchor" href="#mkin-126-2023-10-14"></a></h2>
<ul><li>‘inst/rmarkdown/templates/hierarchical_kinetics/skeleton/skeleton.Rmd’: Fix an erroneous call to the ‘endpoints()’ function</li>
</ul></div>
<div class="section level2">
@@ -648,23 +647,23 @@
<li><p>Do not use 0 values at time zero for chi2 error level calculations. This is the way it is done in KinGUII and it makes sense. It does impact the chi2 error levels in the output. Generally they seem to be lower for metabolites now, presumably because the mean of the observed values is higher</p></li>
</ul><p>For a detailed list of changes to the mkin source please consult the commit history on <a href="http://github.com/jranke/mkin" class="external-link uri">http://github.com/jranke/mkin</a></p>
</div>
- </main><aside class="col-md-3"><nav id="toc"><h2>On this page</h2>
+ </main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
</nav></aside></div>
<footer><div class="pkgdown-footer-left">
- <p></p><p>Developed by Johannes Ranke.</p>
+ <p>Developed by Johannes Ranke.</p>
</div>
<div class="pkgdown-footer-right">
- <p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.7.</p>
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
</div>
</footer></div>
-
-
+
+
</body></html>
diff --git a/docs/reference/BIC.mmkin.html b/docs/reference/BIC.mmkin.html
new file mode 100644
index 00000000..191b50a5
--- /dev/null
+++ b/docs/reference/BIC.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/FOCUS_2006_A.html b/docs/reference/FOCUS_2006_A.html
new file mode 100644
index 00000000..76954866
--- /dev/null
+++ b/docs/reference/FOCUS_2006_A.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html">
+ </head>
+</html>
+
diff --git a/docs/reference/FOCUS_2006_B.html b/docs/reference/FOCUS_2006_B.html
new file mode 100644
index 00000000..76954866
--- /dev/null
+++ b/docs/reference/FOCUS_2006_B.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html">
+ </head>
+</html>
+
diff --git a/docs/reference/FOCUS_2006_C.html b/docs/reference/FOCUS_2006_C.html
new file mode 100644
index 00000000..76954866
--- /dev/null
+++ b/docs/reference/FOCUS_2006_C.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html">
+ </head>
+</html>
+
diff --git a/docs/reference/FOCUS_2006_D.html b/docs/reference/FOCUS_2006_D.html
new file mode 100644
index 00000000..76954866
--- /dev/null
+++ b/docs/reference/FOCUS_2006_D.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html">
+ </head>
+</html>
+
diff --git a/docs/reference/FOCUS_2006_E.html b/docs/reference/FOCUS_2006_E.html
new file mode 100644
index 00000000..76954866
--- /dev/null
+++ b/docs/reference/FOCUS_2006_E.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html">
+ </head>
+</html>
+
diff --git a/docs/reference/FOCUS_2006_F.html b/docs/reference/FOCUS_2006_F.html
new file mode 100644
index 00000000..76954866
--- /dev/null
+++ b/docs/reference/FOCUS_2006_F.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html">
+ </head>
+</html>
+
diff --git a/docs/reference/NAFTA_SOP_Appendix_B.html b/docs/reference/NAFTA_SOP_Appendix_B.html
new file mode 100644
index 00000000..0ba2fb91
--- /dev/null
+++ b/docs/reference/NAFTA_SOP_Appendix_B.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html">
+ </head>
+</html>
+
diff --git a/docs/reference/NAFTA_SOP_Appendix_D.html b/docs/reference/NAFTA_SOP_Appendix_D.html
new file mode 100644
index 00000000..0ba2fb91
--- /dev/null
+++ b/docs/reference/NAFTA_SOP_Appendix_D.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html">
+ </head>
+</html>
+
diff --git a/docs/reference/Rplot001.png b/docs/reference/Rplot001.png
index 5de2bdc7..17a35806 100644
--- a/docs/reference/Rplot001.png
+++ b/docs/reference/Rplot001.png
Binary files differ
diff --git a/docs/reference/[.mhmkin.html b/docs/reference/[.mhmkin.html
new file mode 100644
index 00000000..4be1ad9e
--- /dev/null
+++ b/docs/reference/[.mhmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mhmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mhmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/aw.mixed.mmkin.html b/docs/reference/aw.mixed.mmkin.html
new file mode 100644
index 00000000..9e9a4d03
--- /dev/null
+++ b/docs/reference/aw.mixed.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/aw.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/aw.html">
+ </head>
+</html>
+
diff --git a/docs/reference/aw.mkinfit.html b/docs/reference/aw.mkinfit.html
new file mode 100644
index 00000000..9e9a4d03
--- /dev/null
+++ b/docs/reference/aw.mkinfit.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/aw.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/aw.html">
+ </head>
+</html>
+
diff --git a/docs/reference/aw.mmkin.html b/docs/reference/aw.mmkin.html
new file mode 100644
index 00000000..9e9a4d03
--- /dev/null
+++ b/docs/reference/aw.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/aw.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/aw.html">
+ </head>
+</html>
+
diff --git a/docs/reference/aw.multistart.html b/docs/reference/aw.multistart.html
new file mode 100644
index 00000000..9e9a4d03
--- /dev/null
+++ b/docs/reference/aw.multistart.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/aw.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/aw.html">
+ </head>
+</html>
+
diff --git a/docs/reference/backtransform_odeparms.html b/docs/reference/backtransform_odeparms.html
new file mode 100644
index 00000000..6cbb805d
--- /dev/null
+++ b/docs/reference/backtransform_odeparms.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/best.default.html b/docs/reference/best.default.html
new file mode 100644
index 00000000..9700ef05
--- /dev/null
+++ b/docs/reference/best.default.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/multistart.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/multistart.html">
+ </head>
+</html>
+
diff --git a/docs/reference/best.html b/docs/reference/best.html
new file mode 100644
index 00000000..9700ef05
--- /dev/null
+++ b/docs/reference/best.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/multistart.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/multistart.html">
+ </head>
+</html>
+
diff --git a/docs/reference/check_failed.html b/docs/reference/check_failed.html
new file mode 100644
index 00000000..516e4967
--- /dev/null
+++ b/docs/reference/check_failed.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Check if fit within an mhmkin object failed — check_failed • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Check if fit within an mhmkin object failed — check_failed"><meta name="description" content="Check if fit within an mhmkin object failed"><meta property="og:description" content="Check if fit within an mhmkin object failed"></head><body>
+ <a href="#main" class="visually-hidden-focusable">Skip to contents</a>
+
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
+ <a class="navbar-brand me-2" href="../index.html">mkin</a>
+
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
+
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div id="navbar" class="collapse navbar-collapse ms-3">
+ <ul class="navbar-nav me-auto"><li class="active nav-item"><a class="nav-link" href="../reference/index.html">Reference</a></li>
+<li class="nav-item dropdown">
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles"><li><a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul></li>
+<li class="nav-item"><a class="nav-link" href="../coverage/coverage.html">Test coverage report</a></li>
+<li class="nav-item"><a class="nav-link" href="../news/index.html">News</a></li>
+ </ul><ul class="navbar-nav"><li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json"></form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
+ </ul></div>
+
+
+ </div>
+</nav><div class="container template-reference-topic">
+<div class="row">
+ <main id="main" class="col-md-9"><div class="page-header">
+
+ <h1>Check if fit within an mhmkin object failed</h1>
+ <small class="dont-index">Source: <a href="https://github.com/jranke/mkin/blob/HEAD/R/mhmkin.R" class="external-link"><code>R/mhmkin.R</code></a></small>
+ <div class="d-none name"><code>check_failed.Rd</code></div>
+ </div>
+
+ <div class="ref-description section level2">
+ <p>Check if fit within an mhmkin object failed</p>
+ </div>
+
+ <div class="section level2">
+ <h2 id="ref-usage">Usage<a class="anchor" aria-label="anchor" href="#ref-usage"></a></h2>
+ <div class="sourceCode"><pre class="sourceCode r"><code><span><span class="fu">check_failed</span><span class="op">(</span><span class="va">x</span><span class="op">)</span></span></code></pre></div>
+ </div>
+
+ <div class="section level2">
+ <h2 id="arguments">Arguments<a class="anchor" aria-label="anchor" href="#arguments"></a></h2>
+
+
+<dl><dt id="arg-x">x<a class="anchor" aria-label="anchor" href="#arg-x"></a></dt>
+<dd><p>The object to be checked</p></dd>
+
+</dl></div>
+
+ </main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
+ </nav></aside></div>
+
+
+ <footer><div class="pkgdown-footer-left">
+ <p>Developed by Johannes Ranke.</p>
+</div>
+
+<div class="pkgdown-footer-right">
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
+</div>
+
+ </footer></div>
+
+
+
+
+
+ </body></html>
+
diff --git a/docs/reference/ds_dfop.html b/docs/reference/ds_dfop.html
new file mode 100644
index 00000000..6b8c7d09
--- /dev/null
+++ b/docs/reference/ds_dfop.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html">
+ </head>
+</html>
+
diff --git a/docs/reference/ds_dfop_sfo.html b/docs/reference/ds_dfop_sfo.html
new file mode 100644
index 00000000..6b8c7d09
--- /dev/null
+++ b/docs/reference/ds_dfop_sfo.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html">
+ </head>
+</html>
+
diff --git a/docs/reference/ds_fomc.html b/docs/reference/ds_fomc.html
new file mode 100644
index 00000000..6b8c7d09
--- /dev/null
+++ b/docs/reference/ds_fomc.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html">
+ </head>
+</html>
+
diff --git a/docs/reference/ds_hs.html b/docs/reference/ds_hs.html
new file mode 100644
index 00000000..6b8c7d09
--- /dev/null
+++ b/docs/reference/ds_hs.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html">
+ </head>
+</html>
+
diff --git a/docs/reference/ds_sfo.html b/docs/reference/ds_sfo.html
new file mode 100644
index 00000000..6b8c7d09
--- /dev/null
+++ b/docs/reference/ds_sfo.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html">
+ </head>
+</html>
+
diff --git a/docs/reference/f_time_norm_focus.mkindsg.html b/docs/reference/f_time_norm_focus.mkindsg.html
new file mode 100644
index 00000000..f6530f49
--- /dev/null
+++ b/docs/reference/f_time_norm_focus.mkindsg.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html">
+ </head>
+</html>
+
diff --git a/docs/reference/f_time_norm_focus.numeric.html b/docs/reference/f_time_norm_focus.numeric.html
new file mode 100644
index 00000000..f6530f49
--- /dev/null
+++ b/docs/reference/f_time_norm_focus.numeric.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html">
+ </head>
+</html>
+
diff --git a/docs/reference/hierarchical_kinetics.html b/docs/reference/hierarchical_kinetics.html
index 5cc24e79..b44a6c99 100644
--- a/docs/reference/hierarchical_kinetics.html
+++ b/docs/reference/hierarchical_kinetics.html
@@ -1,88 +1,75 @@
<!DOCTYPE html>
-<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content='R markdown format for setting up hierarchical kinetics based on a template
+<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Hierarchical kinetics template — hierarchical_kinetics • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Hierarchical kinetics template — hierarchical_kinetics"><meta name="description" content='R markdown format for setting up hierarchical kinetics based on a template
provided with the mkin package. This format is based on rmarkdown::pdf_document.
Chunk options are adapted. Echoing R code from code chunks and caching are
turned on per default. character for prepending output from code chunks is
set to the empty string, code tidying is off, figure alignment defaults to
centering, and positioning of figures is set to "H", which means that
figures will not move around in the document, but stay where the user
-includes them.'><title>Hierarchical kinetics template — hierarchical_kinetics • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- bootstrap-toc --><script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@v1.0.1/dist/bootstrap-toc.min.js" integrity="sha256-4veVQbu7//Lk5TSmc7YV48MxtMy98e26cf5MrgZYnwo=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Hierarchical kinetics template — hierarchical_kinetics"><meta property="og:description" content='R markdown format for setting up hierarchical kinetics based on a template
+includes them.'><meta property="og:description" content='R markdown format for setting up hierarchical kinetics based on a template
provided with the mkin package. This format is based on rmarkdown::pdf_document.
Chunk options are adapted. Echoing R code from code chunks and caching are
turned on per default. character for prepending output from code chunks is
set to the empty string, code tidying is off, figure alignment defaults to
centering, and positioning of figures is set to "H", which means that
figures will not move around in the document, but stay where the user
-includes them.'><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]--></head><body>
+includes them.'></head><body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
-
- <nav class="navbar fixed-top navbar-default navbar-expand-lg bg-light"><div class="container">
-
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
<a class="navbar-brand me-2" href="../index.html">mkin</a>
- <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.6</small>
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
- <ul class="navbar-nav me-auto"><li class="active nav-item">
- <a class="nav-link" href="../reference/index.html">Reference</a>
-</li>
+ <ul class="navbar-nav me-auto"><li class="active nav-item"><a class="nav-link" href="../reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
- <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-articles">Articles</a>
- <div class="dropdown-menu" aria-labelledby="dropdown-articles">
- <a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6>
- <a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- <a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- <a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a>
- <a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a>
- <a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Performance</h6>
- <a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- <a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- <a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6>
- <a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- <a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </div>
-</li>
-<li class="nav-item">
- <a class="nav-link" href="../news/index.html">News</a>
-</li>
- </ul><form class="form-inline my-2 my-lg-0" role="search">
- <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="../search.json" id="search-input" placeholder="Search for" autocomplete="off"></form>
-
- <ul class="navbar-nav"><li class="nav-item">
- <a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="github">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles"><li><a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul></li>
+<li class="nav-item"><a class="nav-link" href="../coverage/coverage.html">Test coverage report</a></li>
+<li class="nav-item"><a class="nav-link" href="../news/index.html">News</a></li>
+ </ul><ul class="navbar-nav"><li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json"></form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
</ul></div>
-
+
</div>
</nav><div class="container template-reference-topic">
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
- <img src="" class="logo" alt=""><h1>Hierarchical kinetics template</h1>
+
+ <h1>Hierarchical kinetics template</h1>
<small class="dont-index">Source: <a href="https://github.com/jranke/mkin/blob/HEAD/R/hierarchical_kinetics.R" class="external-link"><code>R/hierarchical_kinetics.R</code></a></small>
<div class="d-none name"><code>hierarchical_kinetics.Rd</code></div>
</div>
@@ -105,22 +92,24 @@ includes them.</p>
<div class="section level2">
<h2 id="arguments">Arguments<a class="anchor" aria-label="anchor" href="#arguments"></a></h2>
- <dl><dt>...</dt>
+
+
+<dl><dt id="arg--">...<a class="anchor" aria-label="anchor" href="#arg--"></a></dt>
<dd><p>Arguments to <code><a href="https://pkgs.rstudio.com/rmarkdown/reference/pdf_document.html" class="external-link">rmarkdown::pdf_document</a></code></p></dd>
-<dt>keep_tex</dt>
-<dd><p>Keep the intermediate tex file used in the conversion to PDF</p></dd>
+<dt id="arg-keep-tex">keep_tex<a class="anchor" aria-label="anchor" href="#arg-keep-tex"></a></dt>
+<dd><p>Keep the intermediate tex file used in the conversion to PDF.
+Note that this argument does not control whether to keep the auxiliary
+files (e.g., <code class="file">.aux</code>) generated by LaTeX when compiling <code class="file">.tex</code> to
+<code class="file">.pdf</code>. To keep these files, you may set <code>options(tinytex.clean =
+FALSE)</code>.</p></dd>
</dl></div>
<div class="section level2">
<h2 id="value">Value<a class="anchor" aria-label="anchor" href="#value"></a></h2>
-
-
-<p>R Markdown output format to pass to
+ <p>R Markdown output format to pass to
<code><a href="https://pkgs.rstudio.com/rmarkdown/reference/render.html" class="external-link">render</a></code></p>
-
-
</div>
<div class="section level2">
<h2 id="details">Details<a class="anchor" aria-label="anchor" href="#details"></a></h2>
@@ -147,23 +136,23 @@ and then to run 'tinytex::tlmgr_install(c("float", "listing"))'.</p>
<span class="r-in"><span></span></span>
</code></pre></div>
</div>
- </main><aside class="col-md-3"><nav id="toc"><h2>On this page</h2>
+ </main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
</nav></aside></div>
<footer><div class="pkgdown-footer-left">
- <p></p><p>Developed by Johannes Ranke.</p>
+ <p>Developed by Johannes Ranke.</p>
</div>
<div class="pkgdown-footer-right">
- <p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.7.</p>
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
</div>
</footer></div>
-
-
+
+
</body></html>
diff --git a/docs/reference/html_listing.html b/docs/reference/html_listing.html
new file mode 100644
index 00000000..879363c3
--- /dev/null
+++ b/docs/reference/html_listing.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/summary_listing.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/summary_listing.html">
+ </head>
+</html>
+
diff --git a/docs/reference/illparms.mhmkin.html b/docs/reference/illparms.mhmkin.html
new file mode 100644
index 00000000..5c70c3f7
--- /dev/null
+++ b/docs/reference/illparms.mhmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/illparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/illparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/illparms.mkinfit.html b/docs/reference/illparms.mkinfit.html
new file mode 100644
index 00000000..5c70c3f7
--- /dev/null
+++ b/docs/reference/illparms.mkinfit.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/illparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/illparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/illparms.mmkin.html b/docs/reference/illparms.mmkin.html
new file mode 100644
index 00000000..5c70c3f7
--- /dev/null
+++ b/docs/reference/illparms.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/illparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/illparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/illparms.saem.mmkin.html b/docs/reference/illparms.saem.mmkin.html
new file mode 100644
index 00000000..5c70c3f7
--- /dev/null
+++ b/docs/reference/illparms.saem.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/illparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/illparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/index.html b/docs/reference/index.html
index d4a1b253..63e1e634 100644
--- a/docs/reference/index.html
+++ b/docs/reference/index.html
@@ -1,662 +1,735 @@
<!DOCTYPE html>
-<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Function reference • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- bootstrap-toc --><script src="https://cdn.jsdelivr.net/gh/afeld/bootstrap-toc@v1.0.1/dist/bootstrap-toc.min.js" integrity="sha256-4veVQbu7//Lk5TSmc7YV48MxtMy98e26cf5MrgZYnwo=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- search --><script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/6.4.6/fuse.js" integrity="sha512-zv6Ywkjyktsohkbp9bb45V6tEMoWhzFzXis+LrMehmJZZSys19Yxf1dopHx7WzIKxr5tK2dVcYmaCk2uqdjF4A==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/0.38.0/autocomplete.jquery.min.js" integrity="sha512-GU9ayf+66Xx2TmpxqJpliWbT5PiGYxpaG8rfnBEk1LL8l1KGkRShhngwdXK1UgqhAzWpZHSiYPc09/NwDQIGyg==" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/mark.min.js" integrity="sha512-5CYOlHXGh6QpOFA/TeTylKLWfB3ftPsde7AnmhuitiTX4K5SqCLBeKro6sPS8ilsz1Q4NRx3v8Ko2IBiszzdww==" crossorigin="anonymous"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Function reference"><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]--></head><body>
+<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Package index • mkin</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.2.2/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.2.2/bootstrap.bundle.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Package index"></head><body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
-
- <nav class="navbar fixed-top navbar-default navbar-expand-lg bg-light"><div class="container">
-
+
+ <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="default" aria-label="Site navigation"><div class="container">
+
<a class="navbar-brand me-2" href="../index.html">mkin</a>
- <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.6</small>
+ <small class="nav-text text-default me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Released version">1.2.9</small>
+
-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
- <ul class="navbar-nav me-auto"><li class="active nav-item">
- <a class="nav-link" href="../reference/index.html">Reference</a>
-</li>
+ <ul class="navbar-nav me-auto"><li class="active nav-item"><a class="nav-link" href="../reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
- <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" id="dropdown-articles">Articles</a>
- <div class="dropdown-menu" aria-labelledby="dropdown-articles">
- <a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6>
- <a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- <a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- <a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a>
- <a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a>
- <a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a>
- <a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a>
- <a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Performance</h6>
- <a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- <a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- <a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- <div class="dropdown-divider"></div>
- <h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6>
- <a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- <a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </div>
-</li>
-<li class="nav-item">
- <a class="nav-link" href="../news/index.html">News</a>
-</li>
- </ul><form class="form-inline my-2 my-lg-0" role="search">
- <input type="search" class="form-control me-sm-2" aria-label="Toggle navigation" name="search-input" data-search-index="../search.json" id="search-input" placeholder="Search for" autocomplete="off"></form>
-
- <ul class="navbar-nav"><li class="nav-item">
- <a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="github">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
+ <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
+ <ul class="dropdown-menu" aria-labelledby="dropdown-articles"><li><a class="dropdown-item" href="../articles/mkin.html">Introduction to mkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with (generalised) nonlinear least squares</h6></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a></li>
+ <li><a class="dropdown-item" href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Example evaluations with hierarchical models (nonlinear mixed-effects models)</h6></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_parent.html">Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_dmta_pathway.html">Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2023_mesotrione_parent.html">Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione</a></li>
+ <li><a class="dropdown-item" href="../articles/prebuilt/2022_cyan_pathway.html">Testing hierarchical pathway kinetics with residue data on cyantraniliprole</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/dimethenamid_2018.html">Comparison of saemix and nlme evaluations of dimethenamid data from 2018</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/multistart.html">Short demo of the multistart method</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Performance</h6></li>
+ <li><a class="dropdown-item" href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><h6 class="dropdown-header" data-toc-skip>Miscellaneous</h6></li>
+ <li><a class="dropdown-item" href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a></li>
+ <li><a class="dropdown-item" href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a></li>
+ </ul></li>
+<li class="nav-item"><a class="nav-link" href="../coverage/coverage.html">Test coverage</a></li>
+<li class="nav-item"><a class="nav-link" href="../news/index.html">News</a></li>
+ </ul><ul class="navbar-nav"><li class="nav-item"><form class="form-inline" role="search">
+ <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json"></form></li>
+<li class="nav-item"><a class="external-link nav-link" href="https://github.com/jranke/mkin/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
</ul></div>
-
+
</div>
</nav><div class="container template-reference-index">
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
- <img src="" class="logo" alt=""><h1>Function reference</h1>
+
+ <h1>Package index</h1>
</div>
<div class="section level2">
<h2 id="main-functions">Main functions<a class="anchor" aria-label="anchor" href="#main-functions"></a></h2>
-
- <p class="section-desc"></p><p>Essential functionality</p>
-
- </div><div id="" class="section level2">
-
-
-
+ <div class="section-desc"><p>Essential functionality</p></div>
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="mkinmod.html">mkinmod()</a></code> <code><a href="mkinmod.html">print(<i>&lt;mkinmod&gt;</i>)</a></code> <code><a href="mkinmod.html">mkinsub()</a></code>
+
+ <code><a href="mkinmod.html">mkinmod()</a></code> <code><a href="mkinmod.html">print(<i>&lt;mkinmod&gt;</i>)</a></code> <code><a href="mkinmod.html">mkinsub()</a></code>
+
</dt>
<dd>Function to set up a kinetic model with one or more state variables</dd>
</dl><dl><dt>
-
- <code><a href="mkinfit.html">mkinfit()</a></code>
+
+ <code><a href="mkinfit.html">mkinfit()</a></code>
+
</dt>
<dd>Fit a kinetic model to data with one or more state variables</dd>
</dl><dl><dt>
-
- <code><a href="mmkin.html">mmkin()</a></code> <code><a href="mmkin.html">print(<i>&lt;mmkin&gt;</i>)</a></code>
+
+ <code><a href="mmkin.html">mmkin()</a></code> <code><a href="mmkin.html">print(<i>&lt;mmkin&gt;</i>)</a></code>
+
</dt>
- <dd>Fit one or more kinetic models with one or more state variables to one or
-more datasets</dd>
+ <dd>Fit one or more kinetic models with one or more state variables to one or more datasets</dd>
</dl><dl><dt>
-
- <code><a href="mhmkin.html">mhmkin()</a></code> <code><a href="mhmkin.html">`[`(<i>&lt;mhmkin&gt;</i>)</a></code> <code><a href="mhmkin.html">print(<i>&lt;mhmkin&gt;</i>)</a></code>
+
+ <code><a href="mhmkin.html">mhmkin()</a></code> <code><a href="mhmkin.html">`[`(<i>&lt;mhmkin&gt;</i>)</a></code> <code><a href="mhmkin.html">print(<i>&lt;mhmkin&gt;</i>)</a></code>
+
</dt>
- <dd>Fit nonlinear mixed-effects models built from one or more kinetic
-degradation models and one or more error models</dd>
+ <dd>Fit nonlinear mixed-effects models built from one or more kinetic degradation models and one or more error models</dd>
</dl></div><div class="section level2">
<h2 id="generics">Generics<a class="anchor" aria-label="anchor" href="#generics"></a></h2>
-
- <p class="section-desc"></p><p>Generic functions introduced by the package</p>
-
- </div><div id="" class="section level2">
-
-
-
+ <div class="section-desc"><p>Generic functions introduced by the package</p></div>
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="parms.html">parms()</a></code>
+
+ <code><a href="parms.html">parms()</a></code>
+
</dt>
<dd>Extract model parameters</dd>
</dl><dl><dt>
-
- <code><a href="status.html">status()</a></code> <code><a href="status.html">print(<i>&lt;status.mmkin&gt;</i>)</a></code> <code><a href="status.html">print(<i>&lt;status.mhmkin&gt;</i>)</a></code>
+
+ <code><a href="status.html">status()</a></code> <code><a href="status.html">print(<i>&lt;status.mmkin&gt;</i>)</a></code> <code><a href="status.html">print(<i>&lt;status.mhmkin&gt;</i>)</a></code>
+
</dt>
<dd>Method to get status information for fit array objects</dd>
</dl><dl><dt>
-
- <code><a href="illparms.html">illparms()</a></code> <code><a href="illparms.html">print(<i>&lt;illparms.mkinfit&gt;</i>)</a></code> <code><a href="illparms.html">print(<i>&lt;illparms.mmkin&gt;</i>)</a></code> <code><a href="illparms.html">print(<i>&lt;illparms.saem.mmkin&gt;</i>)</a></code> <code><a href="illparms.html">print(<i>&lt;illparms.mhmkin&gt;</i>)</a></code>
+
+ <code><a href="illparms.html">illparms()</a></code> <code><a href="illparms.html">print(<i>&lt;illparms.mkinfit&gt;</i>)</a></code> <code><a href="illparms.html">print(<i>&lt;illparms.mmkin&gt;</i>)</a></code> <code><a href="illparms.html">print(<i>&lt;illparms.saem.mmkin&gt;</i>)</a></code> <code><a href="illparms.html">print(<i>&lt;illparms.mhmkin&gt;</i>)</a></code>
+
</dt>
<dd>Method to get the names of ill-defined parameters</dd>
</dl><dl><dt>
-
- <code><a href="endpoints.html">endpoints()</a></code>
+
+ <code><a href="endpoints.html">endpoints()</a></code>
+
</dt>
- <dd>Function to calculate endpoints for further use from kinetic models fitted
-with mkinfit</dd>
+ <dd>Function to calculate endpoints for further use from kinetic models fitted with mkinfit</dd>
</dl><dl><dt>
-
- <code><a href="aw.html">aw()</a></code>
+
+ <code><a href="aw.html">aw()</a></code>
+
</dt>
<dd>Calculate Akaike weights for model averaging</dd>
</dl></div><div class="section level2">
<h2 id="show-results">Show results<a class="anchor" aria-label="anchor" href="#show-results"></a></h2>
-
- <p class="section-desc"></p><p>Functions working with mkinfit objects</p>
-
- </div><div id="" class="section level2">
-
-
-
+ <div class="section-desc"><p>Functions working with mkinfit objects</p></div>
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="plot.mkinfit.html">plot(<i>&lt;mkinfit&gt;</i>)</a></code> <code><a href="plot.mkinfit.html">plot_sep()</a></code> <code><a href="plot.mkinfit.html">plot_res()</a></code> <code><a href="plot.mkinfit.html">plot_err()</a></code>
+
+ <code><a href="plot.mkinfit.html">plot(<i>&lt;mkinfit&gt;</i>)</a></code> <code><a href="plot.mkinfit.html">plot_sep()</a></code> <code><a href="plot.mkinfit.html">plot_res()</a></code> <code><a href="plot.mkinfit.html">plot_err()</a></code>
+
</dt>
<dd>Plot the observed data and the fitted model of an mkinfit object</dd>
</dl><dl><dt>
-
- <code><a href="summary.mkinfit.html">summary(<i>&lt;mkinfit&gt;</i>)</a></code> <code><a href="summary.mkinfit.html">print(<i>&lt;summary.mkinfit&gt;</i>)</a></code>
+
+ <code><a href="summary.mkinfit.html">summary(<i>&lt;mkinfit&gt;</i>)</a></code> <code><a href="summary.mkinfit.html">print(<i>&lt;summary.mkinfit&gt;</i>)</a></code>
+
</dt>
<dd>Summary method for class "mkinfit"</dd>
</dl><dl><dt>
-
- <code><a href="confint.mkinfit.html">confint(<i>&lt;mkinfit&gt;</i>)</a></code>
+
+ <code><a href="confint.mkinfit.html">confint(<i>&lt;mkinfit&gt;</i>)</a></code>
+
</dt>
<dd>Confidence intervals for parameters of mkinfit objects</dd>
</dl><dl><dt>
-
- <code><a href="update.mkinfit.html">update(<i>&lt;mkinfit&gt;</i>)</a></code>
+
+ <code><a href="update.mkinfit.html">update(<i>&lt;mkinfit&gt;</i>)</a></code>
+
</dt>
<dd>Update an mkinfit model with different arguments</dd>
</dl><dl><dt>
-
- <code><a href="lrtest.mkinfit.html">lrtest(<i>&lt;mkinfit&gt;</i>)</a></code> <code><a href="lrtest.mkinfit.html">lrtest(<i>&lt;mmkin&gt;</i>)</a></code>
+
+ <code><a href="lrtest.mkinfit.html">lrtest(<i>&lt;mkinfit&gt;</i>)</a></code> <code><a href="lrtest.mkinfit.html">lrtest(<i>&lt;mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Likelihood ratio test for mkinfit models</dd>
</dl><dl><dt>
-
- <code><a href="loftest.html">loftest()</a></code>
+
+ <code><a href="loftest.html">loftest()</a></code>
+
</dt>
<dd>Lack-of-fit test for models fitted to data with replicates</dd>
</dl><dl><dt>
-
- <code><a href="mkinerrmin.html">mkinerrmin()</a></code>
+
+ <code><a href="mkinerrmin.html">mkinerrmin()</a></code>
+
</dt>
<dd>Calculate the minimum error to assume in order to pass the variance test</dd>
</dl><dl><dt>
-
- <code><a href="CAKE_export.html">CAKE_export()</a></code>
+
+ <code><a href="CAKE_export.html">CAKE_export()</a></code>
+
</dt>
<dd>Export a list of datasets format to a CAKE study file</dd>
</dl></div><div class="section level2">
<h2 id="work-with-mmkin-objects">Work with mmkin objects<a class="anchor" aria-label="anchor" href="#work-with-mmkin-objects"></a></h2>
-
- <p class="section-desc"></p><p>Functions working with aggregated results</p>
-
- </div><div id="" class="section level2">
-
-
-
+ <div class="section-desc"><p>Functions working with aggregated results</p></div>
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="Extract.mmkin.html">`[`(<i>&lt;mmkin&gt;</i>)</a></code>
+
+ <code><a href="Extract.mmkin.html">`[`(<i>&lt;mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Subsetting method for mmkin objects</dd>
</dl><dl><dt>
-
- <code><a href="plot.mmkin.html">plot(<i>&lt;mmkin&gt;</i>)</a></code>
+
+ <code><a href="plot.mmkin.html">plot(<i>&lt;mmkin&gt;</i>)</a></code>
+
</dt>
- <dd>Plot model fits (observed and fitted) and the residuals for a row or column
-of an mmkin object</dd>
+ <dd>Plot model fits (observed and fitted) and the residuals for a row or column of an mmkin object</dd>
</dl><dl><dt>
-
- <code><a href="AIC.mmkin.html">AIC(<i>&lt;mmkin&gt;</i>)</a></code> <code><a href="AIC.mmkin.html">BIC(<i>&lt;mmkin&gt;</i>)</a></code>
+
+ <code><a href="AIC.mmkin.html">AIC(<i>&lt;mmkin&gt;</i>)</a></code> <code><a href="AIC.mmkin.html">BIC(<i>&lt;mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Calculate the AIC for a column of an mmkin object</dd>
</dl><dl><dt>
-
- <code><a href="summary.mmkin.html">summary(<i>&lt;mmkin&gt;</i>)</a></code> <code><a href="summary.mmkin.html">print(<i>&lt;summary.mmkin&gt;</i>)</a></code>
+
+ <code><a href="summary.mmkin.html">summary(<i>&lt;mmkin&gt;</i>)</a></code> <code><a href="summary.mmkin.html">print(<i>&lt;summary.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Summary method for class "mmkin"</dd>
</dl></div><div class="section level2">
<h2 id="mixed-models">Mixed models<a class="anchor" aria-label="anchor" href="#mixed-models"></a></h2>
-
- <p class="section-desc"></p><p>Create and work with nonlinear hierarchical models</p>
-
- </div><div id="" class="section level2">
-
-
-
+ <div class="section-desc"><p>Create and work with nonlinear hierarchical models</p></div>
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="hierarchical_kinetics.html">hierarchical_kinetics()</a></code>
+
+ <code><a href="hierarchical_kinetics.html">hierarchical_kinetics()</a></code>
+
</dt>
<dd>Hierarchical kinetics template</dd>
</dl><dl><dt>
-
- <code><a href="read_spreadsheet.html">read_spreadsheet()</a></code>
+
+ <code><a href="read_spreadsheet.html">read_spreadsheet()</a></code>
+
</dt>
<dd>Read datasets and relevant meta information from a spreadsheet file</dd>
</dl><dl><dt>
-
- <code><a href="nlme.mmkin.html">nlme(<i>&lt;mmkin&gt;</i>)</a></code> <code><a href="nlme.mmkin.html">print(<i>&lt;nlme.mmkin&gt;</i>)</a></code> <code><a href="nlme.mmkin.html">update(<i>&lt;nlme.mmkin&gt;</i>)</a></code>
+
+ <code><a href="nlme.mmkin.html">nlme(<i>&lt;mmkin&gt;</i>)</a></code> <code><a href="nlme.mmkin.html">print(<i>&lt;nlme.mmkin&gt;</i>)</a></code> <code><a href="nlme.mmkin.html">update(<i>&lt;nlme.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Create an nlme model for an mmkin row object</dd>
</dl><dl><dt>
-
- <code><a href="saem.html">saem()</a></code> <code><a href="saem.html">print(<i>&lt;saem.mmkin&gt;</i>)</a></code> <code><a href="saem.html">saemix_model()</a></code> <code><a href="saem.html">saemix_data()</a></code>
+
+ <code><a href="saem.html">saem()</a></code> <code><a href="saem.html">print(<i>&lt;saem.mmkin&gt;</i>)</a></code> <code><a href="saem.html">saemix_model()</a></code> <code><a href="saem.html">saemix_data()</a></code>
+
</dt>
<dd>Fit nonlinear mixed models with SAEM</dd>
</dl><dl><dt>
-
- <code><a href="mhmkin.html">mhmkin()</a></code> <code><a href="mhmkin.html">`[`(<i>&lt;mhmkin&gt;</i>)</a></code> <code><a href="mhmkin.html">print(<i>&lt;mhmkin&gt;</i>)</a></code>
+
+ <code><a href="mhmkin.html">mhmkin()</a></code> <code><a href="mhmkin.html">`[`(<i>&lt;mhmkin&gt;</i>)</a></code> <code><a href="mhmkin.html">print(<i>&lt;mhmkin&gt;</i>)</a></code>
+
</dt>
- <dd>Fit nonlinear mixed-effects models built from one or more kinetic
-degradation models and one or more error models</dd>
+ <dd>Fit nonlinear mixed-effects models built from one or more kinetic degradation models and one or more error models</dd>
</dl><dl><dt>
-
- <code><a href="plot.mixed.mmkin.html">plot(<i>&lt;mixed.mmkin&gt;</i>)</a></code>
+
+ <code><a href="plot.mixed.mmkin.html">plot(<i>&lt;mixed.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object</dd>
</dl><dl><dt>
-
- <code><a href="summary.nlme.mmkin.html">summary(<i>&lt;nlme.mmkin&gt;</i>)</a></code> <code><a href="summary.nlme.mmkin.html">print(<i>&lt;summary.nlme.mmkin&gt;</i>)</a></code>
+
+ <code><a href="summary.nlme.mmkin.html">summary(<i>&lt;nlme.mmkin&gt;</i>)</a></code> <code><a href="summary.nlme.mmkin.html">print(<i>&lt;summary.nlme.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Summary method for class "nlme.mmkin"</dd>
</dl><dl><dt>
-
- <code><a href="summary.saem.mmkin.html">summary(<i>&lt;saem.mmkin&gt;</i>)</a></code> <code><a href="summary.saem.mmkin.html">print(<i>&lt;summary.saem.mmkin&gt;</i>)</a></code>
+
+ <code><a href="summary.saem.mmkin.html">summary(<i>&lt;saem.mmkin&gt;</i>)</a></code> <code><a href="summary.saem.mmkin.html">print(<i>&lt;summary.saem.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Summary method for class "saem.mmkin"</dd>
</dl><dl><dt>
-
- <code><a href="anova.saem.mmkin.html">anova(<i>&lt;saem.mmkin&gt;</i>)</a></code>
+
+ <code><a href="anova.saem.mmkin.html">anova(<i>&lt;saem.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Anova method for saem.mmkin objects</dd>
</dl><dl><dt>
-
- <code><a href="logLik.saem.mmkin.html">logLik(<i>&lt;saem.mmkin&gt;</i>)</a></code>
+
+ <code><a href="logLik.saem.mmkin.html">logLik(<i>&lt;saem.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>logLik method for saem.mmkin objects</dd>
</dl><dl><dt>
-
- <code><a href="nlme.html">nlme_function()</a></code> <code><a href="nlme.html">nlme_data()</a></code>
+
+ <code><a href="nlme.html">nlme_function()</a></code> <code><a href="nlme.html">nlme_data()</a></code>
+
</dt>
<dd>Helper functions to create nlme models from mmkin row objects</dd>
</dl><dl><dt>
-
- <code><a href="get_deg_func.html">get_deg_func()</a></code>
+
+ <code><a href="get_deg_func.html">get_deg_func()</a></code>
+
</dt>
<dd>Retrieve a degradation function from the mmkin namespace</dd>
</dl><dl><dt>
-
- <code><a href="mixed.html">mixed()</a></code> <code><a href="mixed.html">print(<i>&lt;mixed.mmkin&gt;</i>)</a></code>
+
+ <code><a href="mixed.html">mixed()</a></code> <code><a href="mixed.html">print(<i>&lt;mixed.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Create a mixed effects model from an mmkin row object</dd>
</dl><dl><dt>
-
- <code><a href="reexports.html">reexports</a></code> <code><a href="reexports.html">intervals</a></code> <code><a href="reexports.html">lrtest</a></code> <code><a href="reexports.html">nlme</a></code>
+
+ <code><a href="reexports.html">reexports</a></code> <code><a href="reexports.html">intervals</a></code> <code><a href="reexports.html">lrtest</a></code> <code><a href="reexports.html">nlme</a></code>
+
</dt>
<dd>Objects exported from other packages</dd>
</dl><dl><dt>
-
- <code><a href="intervals.saem.mmkin.html">intervals(<i>&lt;saem.mmkin&gt;</i>)</a></code>
+
+ <code><a href="intervals.saem.mmkin.html">intervals(<i>&lt;saem.mmkin&gt;</i>)</a></code>
+
</dt>
<dd>Confidence intervals for parameters in saem.mmkin objects</dd>
</dl><dl><dt>
-
- <code><a href="multistart.html">multistart()</a></code> <code><a href="multistart.html">print(<i>&lt;multistart&gt;</i>)</a></code> <code><a href="multistart.html">best()</a></code> <code><a href="multistart.html">which.best()</a></code>
+
+ <code><a href="multistart.html">multistart()</a></code> <code><a href="multistart.html">print(<i>&lt;multistart&gt;</i>)</a></code> <code><a href="multistart.html">best()</a></code> <code><a href="multistart.html">which.best()</a></code>
+
</dt>
<dd>Perform a hierarchical model fit with multiple starting values</dd>
</dl><dl><dt>
-
- <code><a href="llhist.html">llhist()</a></code>
+
+ <code><a href="llhist.html">llhist()</a></code>
+
</dt>
<dd>Plot the distribution of log likelihoods from multistart objects</dd>
</dl><dl><dt>
-
- <code><a href="parplot.html">parplot()</a></code>
+
+ <code><a href="parplot.html">parplot()</a></code>
+
</dt>
<dd>Plot parameter variability of multistart objects</dd>
+ </dl><dl><dt>
+
+ <code><a href="check_failed.html">check_failed()</a></code>
+
+ </dt>
+ <dd>Check if fit within an mhmkin object failed</dd>
</dl></div><div class="section level2">
<h2 id="datasets-and-known-results">Datasets and known results<a class="anchor" aria-label="anchor" href="#datasets-and-known-results"></a></h2>
-
-
-
- </div><div id="" class="section level2">
-
-
-
+
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="ds_mixed.html">ds_mixed</a></code> <code><a href="ds_mixed.html">ds_sfo</a></code> <code><a href="ds_mixed.html">ds_fomc</a></code> <code><a href="ds_mixed.html">ds_dfop</a></code> <code><a href="ds_mixed.html">ds_hs</a></code> <code><a href="ds_mixed.html">ds_dfop_sfo</a></code>
+
+ <code><a href="ds_mixed.html">ds_mixed</a></code> <code><a href="ds_mixed.html">ds_sfo</a></code> <code><a href="ds_mixed.html">ds_fomc</a></code> <code><a href="ds_mixed.html">ds_dfop</a></code> <code><a href="ds_mixed.html">ds_hs</a></code> <code><a href="ds_mixed.html">ds_dfop_sfo</a></code>
+
</dt>
<dd>Synthetic data for hierarchical kinetic degradation models</dd>
</dl><dl><dt>
-
- <code><a href="D24_2014.html">D24_2014</a></code>
+
+ <code><a href="D24_2014.html">D24_2014</a></code>
+
</dt>
<dd>Aerobic soil degradation data on 2,4-D from the EU assessment in 2014</dd>
</dl><dl><dt>
-
- <code><a href="dimethenamid_2018.html">dimethenamid_2018</a></code>
+
+ <code><a href="dimethenamid_2018.html">dimethenamid_2018</a></code>
+
</dt>
<dd>Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018</dd>
</dl><dl><dt>
-
- <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_A</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_B</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_C</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_D</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_E</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_F</a></code>
+
+ <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_A</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_B</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_C</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_D</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_E</a></code> <code><a href="FOCUS_2006_datasets.html">FOCUS_2006_F</a></code>
+
</dt>
<dd>Datasets A to F from the FOCUS Kinetics report from 2006</dd>
</dl><dl><dt>
-
- <code><a href="FOCUS_2006_SFO_ref_A_to_F.html">FOCUS_2006_SFO_ref_A_to_F</a></code>
+
+ <code><a href="FOCUS_2006_SFO_ref_A_to_F.html">FOCUS_2006_SFO_ref_A_to_F</a></code>
+
</dt>
<dd>Results of fitting the SFO model to Datasets A to F of FOCUS (2006)</dd>
</dl><dl><dt>
-
- <code><a href="FOCUS_2006_FOMC_ref_A_to_F.html">FOCUS_2006_FOMC_ref_A_to_F</a></code>
+
+ <code><a href="FOCUS_2006_FOMC_ref_A_to_F.html">FOCUS_2006_FOMC_ref_A_to_F</a></code>
+
</dt>
<dd>Results of fitting the FOMC model to Datasets A to F of FOCUS (2006)</dd>
</dl><dl><dt>
-
- <code><a href="FOCUS_2006_HS_ref_A_to_F.html">FOCUS_2006_HS_ref_A_to_F</a></code>
+
+ <code><a href="FOCUS_2006_HS_ref_A_to_F.html">FOCUS_2006_HS_ref_A_to_F</a></code>
+
</dt>
<dd>Results of fitting the HS model to Datasets A to F of FOCUS (2006)</dd>
</dl><dl><dt>
-
- <code><a href="FOCUS_2006_DFOP_ref_A_to_B.html">FOCUS_2006_DFOP_ref_A_to_B</a></code>
+
+ <code><a href="FOCUS_2006_DFOP_ref_A_to_B.html">FOCUS_2006_DFOP_ref_A_to_B</a></code>
+
</dt>
<dd>Results of fitting the DFOP model to Datasets A to B of FOCUS (2006)</dd>
</dl><dl><dt>
-
- <code><a href="NAFTA_SOP_2015.html">NAFTA_SOP_Appendix_B</a></code> <code><a href="NAFTA_SOP_2015.html">NAFTA_SOP_Appendix_D</a></code>
+
+ <code><a href="NAFTA_SOP_2015.html">NAFTA_SOP_Appendix_B</a></code> <code><a href="NAFTA_SOP_2015.html">NAFTA_SOP_Appendix_D</a></code>
+
</dt>
<dd>Example datasets from the NAFTA SOP published 2015</dd>
</dl><dl><dt>
-
- <code><a href="NAFTA_SOP_Attachment.html">NAFTA_SOP_Attachment</a></code>
+
+ <code><a href="NAFTA_SOP_Attachment.html">NAFTA_SOP_Attachment</a></code>
+
</dt>
<dd>Example datasets from Attachment 1 to the NAFTA SOP published 2015</dd>
</dl><dl><dt>
-
- <code><a href="mccall81_245T.html">mccall81_245T</a></code>
+
+ <code><a href="mccall81_245T.html">mccall81_245T</a></code>
+
</dt>
<dd>Datasets on aerobic soil metabolism of 2,4,5-T in six soils</dd>
</dl><dl><dt>
-
- <code><a href="schaefer07_complex_case.html">schaefer07_complex_case</a></code>
+
+ <code><a href="schaefer07_complex_case.html">schaefer07_complex_case</a></code>
+
</dt>
<dd>Metabolism data set used for checking the software quality of KinGUI</dd>
</dl><dl><dt>
-
- <code><a href="synthetic_data_for_UBA_2014.html">synthetic_data_for_UBA_2014</a></code>
+
+ <code><a href="synthetic_data_for_UBA_2014.html">synthetic_data_for_UBA_2014</a></code>
+
</dt>
<dd>Synthetic datasets for one parent compound with two metabolites</dd>
</dl><dl><dt>
-
- <code><a href="experimental_data_for_UBA.html">experimental_data_for_UBA_2019</a></code>
+
+ <code><a href="experimental_data_for_UBA.html">experimental_data_for_UBA_2019</a></code>
+
</dt>
<dd>Experimental datasets used for development and testing of error models</dd>
</dl><dl><dt>
-
- <code><a href="test_data_from_UBA_2014.html">test_data_from_UBA_2014</a></code>
+
+ <code><a href="test_data_from_UBA_2014.html">test_data_from_UBA_2014</a></code>
+
</dt>
<dd>Three experimental datasets from two water sediment systems and one soil</dd>
</dl><dl><dt>
-
- <code><a href="focus_soil_moisture.html">focus_soil_moisture</a></code>
+
+ <code><a href="focus_soil_moisture.html">focus_soil_moisture</a></code>
+
</dt>
<dd>FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar</dd>
</dl><dl><dt>
-
- <code><a href="mkinds.html">print(<i>&lt;mkinds&gt;</i>)</a></code>
+
+ <code><a href="mkinds.html">print(<i>&lt;mkinds&gt;</i>)</a></code>
+
</dt>
<dd>A dataset class for mkin</dd>
</dl><dl><dt>
-
- <code><a href="mkindsg.html">print(<i>&lt;mkindsg&gt;</i>)</a></code>
+
+ <code><a href="mkindsg.html">print(<i>&lt;mkindsg&gt;</i>)</a></code>
+
</dt>
<dd>A class for dataset groups for mkin</dd>
</dl></div><div class="section level2">
<h2 id="nafta-guidance">NAFTA guidance<a class="anchor" aria-label="anchor" href="#nafta-guidance"></a></h2>
-
-
-
- </div><div id="" class="section level2">
-
-
-
+
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="nafta.html">nafta()</a></code> <code><a href="nafta.html">print(<i>&lt;nafta&gt;</i>)</a></code>
+
+ <code><a href="nafta.html">nafta()</a></code> <code><a href="nafta.html">print(<i>&lt;nafta&gt;</i>)</a></code>
+
</dt>
<dd>Evaluate parent kinetics using the NAFTA guidance</dd>
</dl><dl><dt>
-
- <code><a href="plot.nafta.html">plot(<i>&lt;nafta&gt;</i>)</a></code>
+
+ <code><a href="plot.nafta.html">plot(<i>&lt;nafta&gt;</i>)</a></code>
+
</dt>
<dd>Plot the results of the three models used in the NAFTA scheme.</dd>
</dl></div><div class="section level2">
<h2 id="utility-functions">Utility functions<a class="anchor" aria-label="anchor" href="#utility-functions"></a></h2>
-
-
-
- </div><div id="" class="section level2">
-
-
-
+
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="summary_listing.html">summary_listing()</a></code> <code><a href="summary_listing.html">tex_listing()</a></code> <code><a href="summary_listing.html">html_listing()</a></code>
+
+ <code><a href="summary_listing.html">summary_listing()</a></code> <code><a href="summary_listing.html">tex_listing()</a></code> <code><a href="summary_listing.html">html_listing()</a></code>
+
</dt>
<dd>Display the output of a summary function according to the output format</dd>
</dl><dl><dt>
-
- <code><a href="f_time_norm_focus.html">f_time_norm_focus()</a></code>
+
+ <code><a href="f_time_norm_focus.html">f_time_norm_focus()</a></code>
+
</dt>
<dd>Normalisation factors for aerobic soil degradation according to FOCUS guidance</dd>
</dl><dl><dt>
-
- <code><a href="set_nd_nq.html">set_nd_nq()</a></code> <code><a href="set_nd_nq.html">set_nd_nq_focus()</a></code>
+
+ <code><a href="set_nd_nq.html">set_nd_nq()</a></code> <code><a href="set_nd_nq.html">set_nd_nq_focus()</a></code>
+
</dt>
<dd>Set non-detects and unquantified values in residue series without replicates</dd>
</dl><dl><dt>
-
- <code><a href="max_twa_parent.html">max_twa_parent()</a></code> <code><a href="max_twa_parent.html">max_twa_sfo()</a></code> <code><a href="max_twa_parent.html">max_twa_fomc()</a></code> <code><a href="max_twa_parent.html">max_twa_dfop()</a></code> <code><a href="max_twa_parent.html">max_twa_hs()</a></code>
+
+ <code><a href="max_twa_parent.html">max_twa_parent()</a></code> <code><a href="max_twa_parent.html">max_twa_sfo()</a></code> <code><a href="max_twa_parent.html">max_twa_fomc()</a></code> <code><a href="max_twa_parent.html">max_twa_dfop()</a></code> <code><a href="max_twa_parent.html">max_twa_hs()</a></code>
+
</dt>
- <dd>Function to calculate maximum time weighted average concentrations from
-kinetic models fitted with mkinfit</dd>
+ <dd>Function to calculate maximum time weighted average concentrations from kinetic models fitted with mkinfit</dd>
</dl><dl><dt>
-
- <code><a href="mkin_wide_to_long.html">mkin_wide_to_long()</a></code>
+
+ <code><a href="mkin_wide_to_long.html">mkin_wide_to_long()</a></code>
+
</dt>
<dd>Convert a dataframe with observations over time into long format</dd>
</dl><dl><dt>
-
- <code><a href="mkin_long_to_wide.html">mkin_long_to_wide()</a></code>
+
+ <code><a href="mkin_long_to_wide.html">mkin_long_to_wide()</a></code>
+
</dt>
<dd>Convert a dataframe from long to wide format</dd>
</dl></div><div class="section level2">
<h2 id="helper-functions-mainly-used-internally">Helper functions mainly used internally<a class="anchor" aria-label="anchor" href="#helper-functions-mainly-used-internally"></a></h2>
-
-
-
- </div><div id="" class="section level2">
-
-
-
+
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="mkinpredict.html">mkinpredict()</a></code>
+
+ <code><a href="mkinpredict.html">mkinpredict()</a></code>
+
</dt>
<dd>Produce predictions from a kinetic model using specific parameters</dd>
</dl><dl><dt>
-
- <code><a href="transform_odeparms.html">transform_odeparms()</a></code> <code><a href="transform_odeparms.html">backtransform_odeparms()</a></code>
+
+ <code><a href="transform_odeparms.html">transform_odeparms()</a></code> <code><a href="transform_odeparms.html">backtransform_odeparms()</a></code>
+
</dt>
<dd>Functions to transform and backtransform kinetic parameters for fitting</dd>
</dl><dl><dt>
-
- <code><a href="ilr.html">ilr()</a></code> <code><a href="ilr.html">invilr()</a></code>
+
+ <code><a href="ilr.html">ilr()</a></code> <code><a href="ilr.html">invilr()</a></code>
+
</dt>
<dd>Function to perform isometric log-ratio transformation</dd>
</dl><dl><dt>
-
- <code><a href="logLik.mkinfit.html">logLik(<i>&lt;mkinfit&gt;</i>)</a></code>
+
+ <code><a href="logLik.mkinfit.html">logLik(<i>&lt;mkinfit&gt;</i>)</a></code>
+
</dt>
<dd>Calculated the log-likelihood of a fitted mkinfit object</dd>
</dl><dl><dt>
-
- <code><a href="residuals.mkinfit.html">residuals(<i>&lt;mkinfit&gt;</i>)</a></code>
+
+ <code><a href="residuals.mkinfit.html">residuals(<i>&lt;mkinfit&gt;</i>)</a></code>
+
</dt>
<dd>Extract residuals from an mkinfit model</dd>
</dl><dl><dt>
-
- <code><a href="nobs.mkinfit.html">nobs(<i>&lt;mkinfit&gt;</i>)</a></code>
+
+ <code><a href="nobs.mkinfit.html">nobs(<i>&lt;mkinfit&gt;</i>)</a></code>
+
</dt>
<dd>Number of observations on which an mkinfit object was fitted</dd>
</dl><dl><dt>
-
- <code><a href="mkinresplot.html">mkinresplot()</a></code>
+
+ <code><a href="mkinresplot.html">mkinresplot()</a></code>
+
</dt>
<dd>Function to plot residuals stored in an mkin object</dd>
</dl><dl><dt>
-
- <code><a href="mkinparplot.html">mkinparplot()</a></code>
+
+ <code><a href="mkinparplot.html">mkinparplot()</a></code>
+
</dt>
<dd>Function to plot the confidence intervals obtained using mkinfit</dd>
</dl><dl><dt>
-
- <code><a href="mkinerrplot.html">mkinerrplot()</a></code>
+
+ <code><a href="mkinerrplot.html">mkinerrplot()</a></code>
+
</dt>
<dd>Function to plot squared residuals and the error model for an mkin object</dd>
</dl><dl><dt>
-
- <code><a href="mean_degparms.html">mean_degparms()</a></code>
+
+ <code><a href="mean_degparms.html">mean_degparms()</a></code>
+
</dt>
<dd>Calculate mean degradation parameters for an mmkin row object</dd>
</dl><dl><dt>
-
- <code><a href="create_deg_func.html">create_deg_func()</a></code>
+
+ <code><a href="create_deg_func.html">create_deg_func()</a></code>
+
</dt>
<dd>Create degradation functions for known analytical solutions</dd>
</dl></div><div class="section level2">
<h2 id="analytical-solutions">Analytical solutions<a class="anchor" aria-label="anchor" href="#analytical-solutions"></a></h2>
-
- <p class="section-desc"></p><p>Parent only model solutions</p>
-
- </div><div id="" class="section level2">
-
-
-
+ <div class="section-desc"><p>Parent only model solutions</p></div>
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="SFO.solution.html">SFO.solution()</a></code>
+
+ <code><a href="SFO.solution.html">SFO.solution()</a></code>
+
</dt>
<dd>Single First-Order kinetics</dd>
</dl><dl><dt>
-
- <code><a href="FOMC.solution.html">FOMC.solution()</a></code>
+
+ <code><a href="FOMC.solution.html">FOMC.solution()</a></code>
+
</dt>
<dd>First-Order Multi-Compartment kinetics</dd>
</dl><dl><dt>
-
- <code><a href="DFOP.solution.html">DFOP.solution()</a></code>
+
+ <code><a href="DFOP.solution.html">DFOP.solution()</a></code>
+
</dt>
<dd>Double First-Order in Parallel kinetics</dd>
</dl><dl><dt>
-
- <code><a href="SFORB.solution.html">SFORB.solution()</a></code>
+
+ <code><a href="SFORB.solution.html">SFORB.solution()</a></code>
+
</dt>
<dd>Single First-Order Reversible Binding kinetics</dd>
</dl><dl><dt>
-
- <code><a href="HS.solution.html">HS.solution()</a></code>
+
+ <code><a href="HS.solution.html">HS.solution()</a></code>
+
</dt>
<dd>Hockey-Stick kinetics</dd>
</dl><dl><dt>
-
- <code><a href="IORE.solution.html">IORE.solution()</a></code>
+
+ <code><a href="IORE.solution.html">IORE.solution()</a></code>
+
</dt>
<dd>Indeterminate order rate equation kinetics</dd>
</dl><dl><dt>
-
- <code><a href="logistic.solution.html">logistic.solution()</a></code>
+
+ <code><a href="logistic.solution.html">logistic.solution()</a></code>
+
</dt>
<dd>Logistic kinetics</dd>
</dl></div><div class="section level2">
<h2 id="generate-synthetic-datasets">Generate synthetic datasets<a class="anchor" aria-label="anchor" href="#generate-synthetic-datasets"></a></h2>
-
-
-
- </div><div id="" class="section level2">
-
-
-
+
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="add_err.html">add_err()</a></code>
+
+ <code><a href="add_err.html">add_err()</a></code>
+
</dt>
<dd>Add normally distributed errors to simulated kinetic degradation data</dd>
</dl><dl><dt>
-
- <code><a href="sigma_twocomp.html">sigma_twocomp()</a></code>
+
+ <code><a href="sigma_twocomp.html">sigma_twocomp()</a></code>
+
</dt>
<dd>Two-component error model</dd>
</dl></div><div class="section level2">
<h2 id="deprecated-functions">Deprecated functions<a class="anchor" aria-label="anchor" href="#deprecated-functions"></a></h2>
-
- <p class="section-desc"></p><p>Functions that have been superseded</p>
-
- </div><div id="" class="section level2">
-
-
-
+ <div class="section-desc"><p>Functions that have been superseded</p></div>
+
+
+ </div><div class="section level2">
+
+
+
<dl><dt>
-
- <code><a href="mkinplot.html">mkinplot()</a></code>
+
+ <code><a href="mkinplot.html">mkinplot()</a></code>
+
</dt>
<dd>Plot the observed data and the fitted model of an mkinfit object</dd>
</dl></div>
- </main><aside class="col-md-3"><nav id="toc"><h2>On this page</h2>
+ </main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
</nav></aside></div>
<footer><div class="pkgdown-footer-left">
- <p></p><p>Developed by Johannes Ranke.</p>
+ <p>Developed by Johannes Ranke.</p>
</div>
<div class="pkgdown-footer-right">
- <p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.7.</p>
+ <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.</p>
</div>
</footer></div>
-
-
+
+
</body></html>
diff --git a/docs/reference/intervals.html b/docs/reference/intervals.html
new file mode 100644
index 00000000..ef2e29e9
--- /dev/null
+++ b/docs/reference/intervals.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/reexports.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/reexports.html">
+ </head>
+</html>
+
diff --git a/docs/reference/invilr.html b/docs/reference/invilr.html
new file mode 100644
index 00000000..53dd75ca
--- /dev/null
+++ b/docs/reference/invilr.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/ilr.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/ilr.html">
+ </head>
+</html>
+
diff --git a/docs/reference/loftest.mkinfit.html b/docs/reference/loftest.mkinfit.html
new file mode 100644
index 00000000..cd9934b8
--- /dev/null
+++ b/docs/reference/loftest.mkinfit.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/loftest.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/loftest.html">
+ </head>
+</html>
+
diff --git a/docs/reference/lrtest.html b/docs/reference/lrtest.html
new file mode 100644
index 00000000..ef2e29e9
--- /dev/null
+++ b/docs/reference/lrtest.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/reexports.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/reexports.html">
+ </head>
+</html>
+
diff --git a/docs/reference/lrtest.mmkin.html b/docs/reference/lrtest.mmkin.html
new file mode 100644
index 00000000..132a24ed
--- /dev/null
+++ b/docs/reference/lrtest.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html">
+ </head>
+</html>
+
diff --git a/docs/reference/max_twa_dfop.html b/docs/reference/max_twa_dfop.html
new file mode 100644
index 00000000..2b5bae2f
--- /dev/null
+++ b/docs/reference/max_twa_dfop.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html">
+ </head>
+</html>
+
diff --git a/docs/reference/max_twa_fomc.html b/docs/reference/max_twa_fomc.html
new file mode 100644
index 00000000..2b5bae2f
--- /dev/null
+++ b/docs/reference/max_twa_fomc.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html">
+ </head>
+</html>
+
diff --git a/docs/reference/max_twa_hs.html b/docs/reference/max_twa_hs.html
new file mode 100644
index 00000000..2b5bae2f
--- /dev/null
+++ b/docs/reference/max_twa_hs.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html">
+ </head>
+</html>
+
diff --git a/docs/reference/max_twa_sfo.html b/docs/reference/max_twa_sfo.html
new file mode 100644
index 00000000..2b5bae2f
--- /dev/null
+++ b/docs/reference/max_twa_sfo.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html">
+ </head>
+</html>
+
diff --git a/docs/reference/mhmkin.list.html b/docs/reference/mhmkin.list.html
new file mode 100644
index 00000000..4be1ad9e
--- /dev/null
+++ b/docs/reference/mhmkin.list.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mhmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mhmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/mhmkin.mmkin.html b/docs/reference/mhmkin.mmkin.html
new file mode 100644
index 00000000..4be1ad9e
--- /dev/null
+++ b/docs/reference/mhmkin.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mhmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mhmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/mixed.mmkin.html b/docs/reference/mixed.mmkin.html
new file mode 100644
index 00000000..6a5f7aef
--- /dev/null
+++ b/docs/reference/mixed.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mixed.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mixed.html">
+ </head>
+</html>
+
diff --git a/docs/reference/mkinpredict.mkinfit.html b/docs/reference/mkinpredict.mkinfit.html
new file mode 100644
index 00000000..3078db1d
--- /dev/null
+++ b/docs/reference/mkinpredict.mkinfit.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html">
+ </head>
+</html>
+
diff --git a/docs/reference/mkinpredict.mkinmod.html b/docs/reference/mkinpredict.mkinmod.html
new file mode 100644
index 00000000..3078db1d
--- /dev/null
+++ b/docs/reference/mkinpredict.mkinmod.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html">
+ </head>
+</html>
+
diff --git a/docs/reference/mkinsub.html b/docs/reference/mkinsub.html
index 77ee41f8..9c52fb21 100644
--- a/docs/reference/mkinsub.html
+++ b/docs/reference/mkinsub.html
@@ -1,234 +1,8 @@
-<!-- Generated by pkgdown: do not edit by hand -->
-<!DOCTYPE html>
-<html lang="en">
+<html>
<head>
- <meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-<title>Function to set up a kinetic submodel for one state variable — mkinsub • mkin</title>
-
-
-<!-- jquery -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
-<!-- Bootstrap -->
-
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous" />
-
-<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script>
-
-<!-- bootstrap-toc -->
-<link rel="stylesheet" href="../bootstrap-toc.css">
-<script src="../bootstrap-toc.js"></script>
-
-<!-- Font Awesome icons -->
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous" />
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous" />
-
-<!-- clipboard.js -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script>
-
-<!-- headroom.js -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script>
-
-<!-- pkgdown -->
-<link href="../pkgdown.css" rel="stylesheet">
-<script src="../pkgdown.js"></script>
-
-
-
-
-<meta property="og:title" content="Function to set up a kinetic submodel for one state variable — mkinsub" />
-<meta property="og:description" content="This is a convenience function to set up the lists used as arguments for
-mkinmod." />
-
-
-
-
-<!-- mathjax -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script>
-
-<!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]-->
-
-
-
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mkinmod.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mkinmod.html">
</head>
-
- <body data-spy="scroll" data-target="#toc">
- <div class="container template-reference-topic">
- <header>
- <div class="navbar navbar-default navbar-fixed-top" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <span class="navbar-brand">
- <a class="navbar-link" href="../index.html">mkin</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.9.50.3</span>
- </span>
- </div>
-
- <div id="navbar" class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li>
- <a href="../reference/index.html">Functions and data</a>
-</li>
-<li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
- Articles
-
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <li>
- <a href="../articles/mkin.html">Introduction to mkin</a>
- </li>
- <li>
- <a href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- </li>
- <li>
- <a href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- </li>
- <li>
- <a href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- </li>
- <li>
- <a href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- </li>
- <li>
- <a href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- </li>
- <li>
- <a href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </li>
- <li>
- <a href="../articles/web_only/benchmarks.html">Some benchmark timings</a>
- </li>
- </ul>
-</li>
-<li>
- <a href="../news/index.html">News</a>
-</li>
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li>
- <a href="https://github.com/jranke/mkin/">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div><!--/.container -->
-</div><!--/.navbar -->
-
-
-
- </header>
-
-<div class="row">
- <div class="col-md-9 contents">
- <div class="page-header">
- <h1>Function to set up a kinetic submodel for one state variable</h1>
- <small class="dont-index">Source: <a href='https://github.com/jranke/mkin/blob/master/R/mkinsub.R'><code>R/mkinsub.R</code></a></small>
- <div class="hidden name"><code>mkinsub.Rd</code></div>
- </div>
-
- <div class="ref-description">
- <p>This is a convenience function to set up the lists used as arguments for
-<code><a href='mkinmod.html'>mkinmod</a></code>.</p>
- </div>
-
- <pre class="usage"><span class='fu'>mkinsub</span><span class='op'>(</span><span class='va'>submodel</span>, to <span class='op'>=</span> <span class='cn'>NULL</span>, sink <span class='op'>=</span> <span class='cn'>TRUE</span>, full_name <span class='op'>=</span> <span class='cn'>NA</span><span class='op'>)</span></pre>
-
- <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a>Arguments</h2>
- <table class="ref-arguments">
- <colgroup><col class="name" /><col class="desc" /></colgroup>
- <tr>
- <th>submodel</th>
- <td><p>Character vector of length one to specify the submodel type.
-See <code><a href='mkinmod.html'>mkinmod</a></code> for the list of allowed submodel names.</p></td>
- </tr>
- <tr>
- <th>to</th>
- <td><p>Vector of the names of the state variable to which a
-transformation shall be included in the model.</p></td>
- </tr>
- <tr>
- <th>sink</th>
- <td><p>Should a pathway to sink be included in the model in addition to
-the pathways to other state variables?</p></td>
- </tr>
- <tr>
- <th>full_name</th>
- <td><p>An optional name to be used e.g. for plotting fits
-performed with the model. You can use non-ASCII characters here, but then
-your R code will not be portable, <em>i.e.</em> may produce unintended plot
-results on other operating systems or system configurations.</p></td>
- </tr>
- </table>
-
- <h2 class="hasAnchor" id="value"><a class="anchor" href="#value"></a>Value</h2>
-
- <p>A list for use with <code><a href='mkinmod.html'>mkinmod</a></code>.</p>
- <h2 class="hasAnchor" id="author"><a class="anchor" href="#author"></a>Author</h2>
-
- <p>Johannes Ranke</p>
-
- <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
- <pre class="examples"><div class='input'>
-<span class='co'># One parent compound, one metabolite, both single first order.</span>
-<span class='va'>SFO_SFO</span> <span class='op'>&lt;-</span> <span class='fu'><a href='mkinmod.html'>mkinmod</a></span><span class='op'>(</span>
- parent <span class='op'>=</span> <span class='fu'><a href='https://rdrr.io/r/base/list.html'>list</a></span><span class='op'>(</span>type <span class='op'>=</span> <span class='st'>"SFO"</span>, to <span class='op'>=</span> <span class='st'>"m1"</span><span class='op'>)</span>,
- m1 <span class='op'>=</span> <span class='fu'><a href='https://rdrr.io/r/base/list.html'>list</a></span><span class='op'>(</span>type <span class='op'>=</span> <span class='st'>"SFO"</span><span class='op'>)</span><span class='op'>)</span>
-</div><div class='output co'>#&gt; <span class='message'>Successfully compiled differential equation model from auto-generated C code.</span></div><div class='input'>
-<span class='co'># The same model using mkinsub</span>
-<span class='va'>SFO_SFO.2</span> <span class='op'>&lt;-</span> <span class='fu'><a href='mkinmod.html'>mkinmod</a></span><span class='op'>(</span>
- parent <span class='op'>=</span> <span class='fu'>mkinsub</span><span class='op'>(</span><span class='st'>"SFO"</span>, <span class='st'>"m1"</span><span class='op'>)</span>,
- m1 <span class='op'>=</span> <span class='fu'>mkinsub</span><span class='op'>(</span><span class='st'>"SFO"</span><span class='op'>)</span><span class='op'>)</span>
-</div><div class='output co'>#&gt; <span class='message'>Successfully compiled differential equation model from auto-generated C code.</span></div><div class='input'>
-<span class='co'># \dontrun{</span>
- <span class='co'># Now supplying full names</span>
- <span class='va'>SFO_SFO.2</span> <span class='op'>&lt;-</span> <span class='fu'><a href='mkinmod.html'>mkinmod</a></span><span class='op'>(</span>
- parent <span class='op'>=</span> <span class='fu'>mkinsub</span><span class='op'>(</span><span class='st'>"SFO"</span>, <span class='st'>"m1"</span>, full_name <span class='op'>=</span> <span class='st'>"Test compound"</span><span class='op'>)</span>,
- m1 <span class='op'>=</span> <span class='fu'>mkinsub</span><span class='op'>(</span><span class='st'>"SFO"</span>, full_name <span class='op'>=</span> <span class='st'>"Metabolite M1"</span><span class='op'>)</span><span class='op'>)</span>
-</div><div class='output co'>#&gt; <span class='message'>Successfully compiled differential equation model from auto-generated C code.</span></div><div class='input'> <span class='co'># }</span>
-</div></pre>
- </div>
- <div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
- <nav id="toc" data-toggle="toc" class="sticky-top">
- <h2 data-toc-skip>Contents</h2>
- </nav>
- </div>
-</div>
-
-
- <footer>
- <div class="copyright">
- <p>Developed by Johannes Ranke.</p>
-</div>
-
-<div class="pkgdown">
- <p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.6.1.</p>
-</div>
-
- </footer>
- </div>
-
-
-
-
- </body>
</html>
-
diff --git a/docs/reference/multistart.saem.mmkin.html b/docs/reference/multistart.saem.mmkin.html
new file mode 100644
index 00000000..9700ef05
--- /dev/null
+++ b/docs/reference/multistart.saem.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/multistart.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/multistart.html">
+ </head>
+</html>
+
diff --git a/docs/reference/nlme_data.html b/docs/reference/nlme_data.html
new file mode 100644
index 00000000..57c00862
--- /dev/null
+++ b/docs/reference/nlme_data.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/nlme.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/nlme.html">
+ </head>
+</html>
+
diff --git a/docs/reference/parms.mkinfit.html b/docs/reference/parms.mkinfit.html
new file mode 100644
index 00000000..49c3938c
--- /dev/null
+++ b/docs/reference/parms.mkinfit.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/parms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/parms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/parms.mmkin.html b/docs/reference/parms.mmkin.html
new file mode 100644
index 00000000..49c3938c
--- /dev/null
+++ b/docs/reference/parms.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/parms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/parms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/parms.multistart.html b/docs/reference/parms.multistart.html
new file mode 100644
index 00000000..49c3938c
--- /dev/null
+++ b/docs/reference/parms.multistart.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/parms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/parms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/parms.saem.mmkin.html b/docs/reference/parms.saem.mmkin.html
new file mode 100644
index 00000000..49c3938c
--- /dev/null
+++ b/docs/reference/parms.saem.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/parms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/parms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/parplot.multistart.saem.mmkin.html b/docs/reference/parplot.multistart.saem.mmkin.html
new file mode 100644
index 00000000..b22f2a6f
--- /dev/null
+++ b/docs/reference/parplot.multistart.saem.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/parplot.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/parplot.html">
+ </head>
+</html>
+
diff --git a/docs/reference/plot_err.html b/docs/reference/plot_err.html
new file mode 100644
index 00000000..a189b474
--- /dev/null
+++ b/docs/reference/plot_err.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html">
+ </head>
+</html>
+
diff --git a/docs/reference/plot_res.html b/docs/reference/plot_res.html
new file mode 100644
index 00000000..a189b474
--- /dev/null
+++ b/docs/reference/plot_res.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html">
+ </head>
+</html>
+
diff --git a/docs/reference/plot_sep.html b/docs/reference/plot_sep.html
new file mode 100644
index 00000000..a189b474
--- /dev/null
+++ b/docs/reference/plot_sep.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.illparms.mhmkin.html b/docs/reference/print.illparms.mhmkin.html
new file mode 100644
index 00000000..5c70c3f7
--- /dev/null
+++ b/docs/reference/print.illparms.mhmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/illparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/illparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.illparms.mkinfit.html b/docs/reference/print.illparms.mkinfit.html
new file mode 100644
index 00000000..5c70c3f7
--- /dev/null
+++ b/docs/reference/print.illparms.mkinfit.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/illparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/illparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.illparms.mmkin.html b/docs/reference/print.illparms.mmkin.html
new file mode 100644
index 00000000..5c70c3f7
--- /dev/null
+++ b/docs/reference/print.illparms.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/illparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/illparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.illparms.saem.mmkin.html b/docs/reference/print.illparms.saem.mmkin.html
new file mode 100644
index 00000000..5c70c3f7
--- /dev/null
+++ b/docs/reference/print.illparms.saem.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/illparms.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/illparms.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.mhmkin.html b/docs/reference/print.mhmkin.html
new file mode 100644
index 00000000..4be1ad9e
--- /dev/null
+++ b/docs/reference/print.mhmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mhmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mhmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.mixed.mmkin.html b/docs/reference/print.mixed.mmkin.html
new file mode 100644
index 00000000..6a5f7aef
--- /dev/null
+++ b/docs/reference/print.mixed.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mixed.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mixed.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.mkinds.html b/docs/reference/print.mkinds.html
index 7c7f6647..4055d42c 100644
--- a/docs/reference/print.mkinds.html
+++ b/docs/reference/print.mkinds.html
@@ -1,194 +1,8 @@
-<!-- Generated by pkgdown: do not edit by hand -->
-<!DOCTYPE html>
-<html lang="en">
+<html>
<head>
- <meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-<title>Print mkinds objects — print.mkinds • mkin</title>
-
-
-<!-- jquery -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
-<!-- Bootstrap -->
-
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous" />
-
-<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script>
-
-<!-- bootstrap-toc -->
-<link rel="stylesheet" href="../bootstrap-toc.css">
-<script src="../bootstrap-toc.js"></script>
-
-<!-- Font Awesome icons -->
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous" />
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous" />
-
-<!-- clipboard.js -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script>
-
-<!-- headroom.js -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script>
-
-<!-- pkgdown -->
-<link href="../pkgdown.css" rel="stylesheet">
-<script src="../pkgdown.js"></script>
-
-
-
-
-<meta property="og:title" content="Print mkinds objects — print.mkinds" />
-<meta property="og:description" content="Print mkinds objects" />
-
-
-
-
-<!-- mathjax -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script>
-
-<!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]-->
-
-
-
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mkinds.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mkinds.html">
</head>
-
- <body data-spy="scroll" data-target="#toc">
- <div class="container template-reference-topic">
- <header>
- <div class="navbar navbar-default navbar-fixed-top" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <span class="navbar-brand">
- <a class="navbar-link" href="../index.html">mkin</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.9.50.3</span>
- </span>
- </div>
-
- <div id="navbar" class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li>
- <a href="../reference/index.html">Functions and data</a>
-</li>
-<li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
- Articles
-
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <li>
- <a href="../articles/mkin.html">Introduction to mkin</a>
- </li>
- <li>
- <a href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- </li>
- <li>
- <a href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- </li>
- <li>
- <a href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- </li>
- <li>
- <a href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- </li>
- <li>
- <a href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- </li>
- <li>
- <a href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </li>
- <li>
- <a href="../articles/web_only/benchmarks.html">Some benchmark timings</a>
- </li>
- </ul>
-</li>
-<li>
- <a href="../news/index.html">News</a>
-</li>
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li>
- <a href="https://github.com/jranke/mkin/">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div><!--/.container -->
-</div><!--/.navbar -->
-
-
-
- </header>
-
-<div class="row">
- <div class="col-md-9 contents">
- <div class="page-header">
- <h1>Print mkinds objects</h1>
- <small class="dont-index">Source: <a href='https://github.com/jranke/mkin/blob/master/R/mkinds.R'><code>R/mkinds.R</code></a></small>
- <div class="hidden name"><code>print.mkinds.Rd</code></div>
- </div>
-
- <div class="ref-description">
- <p>Print mkinds objects</p>
- </div>
-
- <pre class="usage"><span class='co'># S3 method for mkinds</span>
-<span class='fu'><a href='https://rdrr.io/r/base/print.html'>print</a></span><span class='op'>(</span><span class='va'>x</span>, <span class='va'>...</span><span class='op'>)</span></pre>
-
- <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a>Arguments</h2>
- <table class="ref-arguments">
- <colgroup><col class="name" /><col class="desc" /></colgroup>
- <tr>
- <th>x</th>
- <td><p>An <code><a href='mkinds.html'>mkinds</a></code> object.</p></td>
- </tr>
- <tr>
- <th>...</th>
- <td><p>Not used.</p></td>
- </tr>
- </table>
-
-
- </div>
- <div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
- <nav id="toc" data-toggle="toc" class="sticky-top">
- <h2 data-toc-skip>Contents</h2>
- </nav>
- </div>
-</div>
-
-
- <footer>
- <div class="copyright">
- <p>Developed by Johannes Ranke.</p>
-</div>
-
-<div class="pkgdown">
- <p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.6.1.</p>
-</div>
-
- </footer>
- </div>
-
-
-
-
- </body>
</html>
-
diff --git a/docs/reference/print.mkindsg.html b/docs/reference/print.mkindsg.html
new file mode 100644
index 00000000..02429abf
--- /dev/null
+++ b/docs/reference/print.mkindsg.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mkindsg.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mkindsg.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.mkinmod.html b/docs/reference/print.mkinmod.html
index 6622decf..9c52fb21 100644
--- a/docs/reference/print.mkinmod.html
+++ b/docs/reference/print.mkinmod.html
@@ -1,214 +1,8 @@
-<!-- Generated by pkgdown: do not edit by hand -->
-<!DOCTYPE html>
-<html lang="en">
+<html>
<head>
- <meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-<title>Print mkinmod objects — print.mkinmod • mkin</title>
-
-
-<!-- jquery -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
-<!-- Bootstrap -->
-
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous" />
-
-<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script>
-
-<!-- bootstrap-toc -->
-<link rel="stylesheet" href="../bootstrap-toc.css">
-<script src="../bootstrap-toc.js"></script>
-
-<!-- Font Awesome icons -->
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous" />
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous" />
-
-<!-- clipboard.js -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script>
-
-<!-- headroom.js -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script>
-
-<!-- pkgdown -->
-<link href="../pkgdown.css" rel="stylesheet">
-<script src="../pkgdown.js"></script>
-
-
-
-
-<meta property="og:title" content="Print mkinmod objects — print.mkinmod" />
-<meta property="og:description" content="Print mkinmod objects in a way that the user finds his way to get to its
-components." />
-
-
-
-
-<!-- mathjax -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script>
-
-<!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]-->
-
-
-
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mkinmod.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mkinmod.html">
</head>
-
- <body data-spy="scroll" data-target="#toc">
- <div class="container template-reference-topic">
- <header>
- <div class="navbar navbar-default navbar-fixed-top" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <span class="navbar-brand">
- <a class="navbar-link" href="../index.html">mkin</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.9.50.2</span>
- </span>
- </div>
-
- <div id="navbar" class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li>
- <a href="../reference/index.html">Functions and data</a>
-</li>
-<li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
- Articles
-
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <li>
- <a href="../articles/mkin.html">Introduction to mkin</a>
- </li>
- <li>
- <a href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- </li>
- <li>
- <a href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- </li>
- <li>
- <a href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- </li>
- <li>
- <a href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- </li>
- <li>
- <a href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- </li>
- <li>
- <a href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </li>
- </ul>
-</li>
-<li>
- <a href="../news/index.html">News</a>
-</li>
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li>
- <a href="http://github.com/jranke/mkin/">
- <span class="fab fa fab fa-github fa-lg"></span>
-
- </a>
-</li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div><!--/.container -->
-</div><!--/.navbar -->
-
-
-
- </header>
-
-<div class="row">
- <div class="col-md-9 contents">
- <div class="page-header">
- <h1>Print mkinmod objects</h1>
- <small class="dont-index">Source: <a href='http://github.com/jranke/mkin/blob/master/R/mkinmod.R'><code>R/mkinmod.R</code></a></small>
- <div class="hidden name"><code>print.mkinmod.Rd</code></div>
- </div>
-
- <div class="ref-description">
- <p>Print mkinmod objects in a way that the user finds his way to get to its
-components.</p>
- </div>
-
- <pre class="usage"><span class='co'># S3 method for mkinmod</span>
-<span class='fu'><a href='https://rdrr.io/r/base/print.html'>print</a></span>(<span class='no'>x</span>, <span class='no'>...</span>)</pre>
-
- <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a>Arguments</h2>
- <table class="ref-arguments">
- <colgroup><col class="name" /><col class="desc" /></colgroup>
- <tr>
- <th>x</th>
- <td><p>An <code><a href='mkinmod.html'>mkinmod</a></code> object.</p></td>
- </tr>
- <tr>
- <th>...</th>
- <td><p>Not used.</p></td>
- </tr>
- </table>
-
-
- <h2 class="hasAnchor" id="examples"><a class="anchor" href="#examples"></a>Examples</h2>
- <pre class="examples"><div class='input'>
- <span class='no'>m_synth_SFO_lin</span> <span class='kw'>&lt;-</span> <span class='fu'><a href='mkinmod.html'>mkinmod</a></span>(<span class='kw'>parent</span> <span class='kw'>=</span> <span class='fu'><a href='https://rdrr.io/r/base/list.html'>list</a></span>(<span class='kw'>type</span> <span class='kw'>=</span> <span class='st'>"SFO"</span>, <span class='kw'>to</span> <span class='kw'>=</span> <span class='st'>"M1"</span>),
- <span class='kw'>M1</span> <span class='kw'>=</span> <span class='fu'><a href='https://rdrr.io/r/base/list.html'>list</a></span>(<span class='kw'>type</span> <span class='kw'>=</span> <span class='st'>"SFO"</span>, <span class='kw'>to</span> <span class='kw'>=</span> <span class='st'>"M2"</span>),
- <span class='kw'>M2</span> <span class='kw'>=</span> <span class='fu'><a href='https://rdrr.io/r/base/list.html'>list</a></span>(<span class='kw'>type</span> <span class='kw'>=</span> <span class='st'>"SFO"</span>), <span class='kw'>use_of_ff</span> <span class='kw'>=</span> <span class='st'>"max"</span>)</div><div class='output co'>#&gt; <span class='message'>Successfully compiled differential equation model from auto-generated C code.</span></div><div class='input'>
- <span class='fu'><a href='https://rdrr.io/r/base/print.html'>print</a></span>(<span class='no'>m_synth_SFO_lin</span>)</div><div class='output co'>#&gt; &lt;mkinmod&gt; model generated with
-#&gt; Use of formation fractions $use_of_ff: max
-#&gt; Specification $spec:
-#&gt; $parent
-#&gt; $type: SFO; $to: M1; $sink: TRUE
-#&gt; $M1
-#&gt; $type: SFO; $to: M2; $sink: TRUE
-#&gt; $M2
-#&gt; $type: SFO; $sink: TRUE
-#&gt; Coefficient matrix $coefmat available
-#&gt; Compiled model $cf available
-#&gt; Differential equations:
-#&gt; d_parent/dt = - k_parent * parent
-#&gt; d_M1/dt = + f_parent_to_M1 * k_parent * parent - k_M1 * M1
-#&gt; d_M2/dt = + f_M1_to_M2 * k_M1 * M1 - k_M2 * M2</div><div class='input'>
-</div></pre>
- </div>
- <div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
- <nav id="toc" data-toggle="toc" class="sticky-top">
- <h2 data-toc-skip>Contents</h2>
- </nav>
- </div>
-</div>
-
-
- <footer>
- <div class="copyright">
- <p>Developed by Johannes Ranke.</p>
-</div>
-
-<div class="pkgdown">
- <p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.5.1.</p>
-</div>
-
- </footer>
- </div>
-
-
-
-
- </body>
</html>
-
diff --git a/docs/reference/print.mmkin.html b/docs/reference/print.mmkin.html
index 0c094bfc..a15ee4df 100644
--- a/docs/reference/print.mmkin.html
+++ b/docs/reference/print.mmkin.html
@@ -1,194 +1,8 @@
-<!-- Generated by pkgdown: do not edit by hand -->
-<!DOCTYPE html>
-<html lang="en">
+<html>
<head>
- <meta charset="utf-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-<title>Print method for mmkin objects — print.mmkin • mkin</title>
-
-
-<!-- jquery -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
-<!-- Bootstrap -->
-
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous" />
-
-<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script>
-
-<!-- bootstrap-toc -->
-<link rel="stylesheet" href="../bootstrap-toc.css">
-<script src="../bootstrap-toc.js"></script>
-
-<!-- Font Awesome icons -->
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous" />
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous" />
-
-<!-- clipboard.js -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script>
-
-<!-- headroom.js -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script>
-
-<!-- pkgdown -->
-<link href="../pkgdown.css" rel="stylesheet">
-<script src="../pkgdown.js"></script>
-
-
-
-
-<meta property="og:title" content="Print method for mmkin objects — print.mmkin" />
-<meta property="og:description" content="Print method for mmkin objects" />
-
-
-
-
-<!-- mathjax -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script>
-
-<!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]-->
-
-
-
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/mmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/mmkin.html">
</head>
-
- <body data-spy="scroll" data-target="#toc">
- <div class="container template-reference-topic">
- <header>
- <div class="navbar navbar-default navbar-fixed-top" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <span class="navbar-brand">
- <a class="navbar-link" href="../index.html">mkin</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">1.0.0</span>
- </span>
- </div>
-
- <div id="navbar" class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li>
- <a href="../reference/index.html">Functions and data</a>
-</li>
-<li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
- Articles
-
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <li>
- <a href="../articles/mkin.html">Introduction to mkin</a>
- </li>
- <li>
- <a href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- </li>
- <li>
- <a href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- </li>
- <li>
- <a href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- </li>
- <li>
- <a href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- </li>
- <li>
- <a href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- </li>
- <li>
- <a href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </li>
- <li>
- <a href="../articles/web_only/benchmarks.html">Some benchmark timings</a>
- </li>
- </ul>
-</li>
-<li>
- <a href="../news/index.html">News</a>
-</li>
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li>
- <a href="https://github.com/jranke/mkin/">
- <span class="fab fa-github fa-lg"></span>
-
- </a>
-</li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div><!--/.container -->
-</div><!--/.navbar -->
-
-
-
- </header>
-
-<div class="row">
- <div class="col-md-9 contents">
- <div class="page-header">
- <h1>Print method for mmkin objects</h1>
- <small class="dont-index">Source: <a href='https://github.com/jranke/mkin/blob/master/R/mmkin.R'><code>R/mmkin.R</code></a></small>
- <div class="hidden name"><code>print.mmkin.Rd</code></div>
- </div>
-
- <div class="ref-description">
- <p>Print method for mmkin objects</p>
- </div>
-
- <pre class="usage"><span class='co'># S3 method for mmkin</span>
-<span class='fu'><a href='https://rdrr.io/r/base/print.html'>print</a></span><span class='op'>(</span><span class='va'>x</span>, <span class='va'>...</span><span class='op'>)</span></pre>
-
- <h2 class="hasAnchor" id="arguments"><a class="anchor" href="#arguments"></a>Arguments</h2>
- <table class="ref-arguments">
- <colgroup><col class="name" /><col class="desc" /></colgroup>
- <tr>
- <th>x</th>
- <td><p>An <a href='mmkin.html'>mmkin</a> object.</p></td>
- </tr>
- <tr>
- <th>...</th>
- <td><p>Not used.</p></td>
- </tr>
- </table>
-
-
- </div>
- <div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
- <nav id="toc" data-toggle="toc" class="sticky-top">
- <h2 data-toc-skip>Contents</h2>
- </nav>
- </div>
-</div>
-
-
- <footer>
- <div class="copyright">
- <p>Developed by Johannes Ranke.</p>
-</div>
-
-<div class="pkgdown">
- <p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.6.1.</p>
-</div>
-
- </footer>
- </div>
-
-
-
-
- </body>
</html>
-
diff --git a/docs/reference/print.multistart.html b/docs/reference/print.multistart.html
new file mode 100644
index 00000000..9700ef05
--- /dev/null
+++ b/docs/reference/print.multistart.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/multistart.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/multistart.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.nafta.html b/docs/reference/print.nafta.html
new file mode 100644
index 00000000..7d546151
--- /dev/null
+++ b/docs/reference/print.nafta.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/nafta.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/nafta.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.nlme.mmkin.html b/docs/reference/print.nlme.mmkin.html
new file mode 100644
index 00000000..dd383acd
--- /dev/null
+++ b/docs/reference/print.nlme.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.saem.mmkin.html b/docs/reference/print.saem.mmkin.html
new file mode 100644
index 00000000..65220667
--- /dev/null
+++ b/docs/reference/print.saem.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/saem.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/saem.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.status.mhmkin.html b/docs/reference/print.status.mhmkin.html
new file mode 100644
index 00000000..dc236170
--- /dev/null
+++ b/docs/reference/print.status.mhmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/status.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/status.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.status.mmkin.html b/docs/reference/print.status.mmkin.html
new file mode 100644
index 00000000..dc236170
--- /dev/null
+++ b/docs/reference/print.status.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/status.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/status.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.summary.mkinfit.html b/docs/reference/print.summary.mkinfit.html
new file mode 100644
index 00000000..9241f3cb
--- /dev/null
+++ b/docs/reference/print.summary.mkinfit.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.summary.mmkin.html b/docs/reference/print.summary.mmkin.html
new file mode 100644
index 00000000..b3607a52
--- /dev/null
+++ b/docs/reference/print.summary.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.summary.nlme.mmkin.html b/docs/reference/print.summary.nlme.mmkin.html
new file mode 100644
index 00000000..b23966af
--- /dev/null
+++ b/docs/reference/print.summary.nlme.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/print.summary.saem.mmkin.html b/docs/reference/print.summary.saem.mmkin.html
new file mode 100644
index 00000000..57cf3b97
--- /dev/null
+++ b/docs/reference/print.summary.saem.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/saem.mmkin.html b/docs/reference/saem.mmkin.html
new file mode 100644
index 00000000..65220667
--- /dev/null
+++ b/docs/reference/saem.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/saem.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/saem.html">
+ </head>
+</html>
+
diff --git a/docs/reference/saemix_data.html b/docs/reference/saemix_data.html
new file mode 100644
index 00000000..65220667
--- /dev/null
+++ b/docs/reference/saemix_data.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/saem.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/saem.html">
+ </head>
+</html>
+
diff --git a/docs/reference/saemix_model.html b/docs/reference/saemix_model.html
new file mode 100644
index 00000000..65220667
--- /dev/null
+++ b/docs/reference/saemix_model.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/saem.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/saem.html">
+ </head>
+</html>
+
diff --git a/docs/reference/schaefer07_complex_results.html b/docs/reference/schaefer07_complex_results.html
new file mode 100644
index 00000000..31797672
--- /dev/null
+++ b/docs/reference/schaefer07_complex_results.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html">
+ </head>
+</html>
+
diff --git a/docs/reference/set_nd_nq_focus.html b/docs/reference/set_nd_nq_focus.html
new file mode 100644
index 00000000..4a0d21cd
--- /dev/null
+++ b/docs/reference/set_nd_nq_focus.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html">
+ </head>
+</html>
+
diff --git a/docs/reference/status.mhmkin.html b/docs/reference/status.mhmkin.html
new file mode 100644
index 00000000..dc236170
--- /dev/null
+++ b/docs/reference/status.mhmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/status.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/status.html">
+ </head>
+</html>
+
diff --git a/docs/reference/status.mmkin.html b/docs/reference/status.mmkin.html
new file mode 100644
index 00000000..dc236170
--- /dev/null
+++ b/docs/reference/status.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/status.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/status.html">
+ </head>
+</html>
+
diff --git a/docs/reference/tex_listing.html b/docs/reference/tex_listing.html
index 4b8736c3..879363c3 100644
--- a/docs/reference/tex_listing.html
+++ b/docs/reference/tex_listing.html
@@ -1,143 +1,8 @@
-<!DOCTYPE html>
-<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Wrap the output of a summary function in tex listing environment — tex_listing • mkin</title><!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script><!-- Bootstrap --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous"><script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="../bootstrap-toc.css"><script src="../bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous"><!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="../pkgdown.css" rel="stylesheet"><script src="../pkgdown.js"></script><meta property="og:title" content="Wrap the output of a summary function in tex listing environment — tex_listing"><meta property="og:description" content='This function can be used in a R markdown code chunk with the chunk
-option results = "asis".'><!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
-<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-<![endif]--></head><body data-spy="scroll" data-target="#toc">
-
-
- <div class="container template-reference-topic">
- <header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <span class="navbar-brand">
- <a class="navbar-link" href="../index.html">mkin</a>
- <span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">1.2.0</span>
- </span>
- </div>
-
- <div id="navbar" class="navbar-collapse collapse">
- <ul class="nav navbar-nav"><li>
- <a href="../reference/index.html">Functions and data</a>
-</li>
-<li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Articles
-
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu"><li>
- <a href="../articles/mkin.html">Introduction to mkin</a>
- </li>
- <li>
- <a href="../articles/FOCUS_D.html">Example evaluation of FOCUS Example Dataset D</a>
- </li>
- <li>
- <a href="../articles/FOCUS_L.html">Example evaluation of FOCUS Laboratory Data L1 to L3</a>
- </li>
- <li>
- <a href="../articles/web_only/dimethenamid_2018.html">Example evaluations of dimethenamid data from 2018 with nonlinear mixed-effects models</a>
- </li>
- <li>
- <a href="../articles/web_only/multistart.html">Short demo of the multistart method</a>
- </li>
- <li>
- <a href="../articles/web_only/compiled_models.html">Performance benefit by using compiled model definitions in mkin</a>
- </li>
- <li>
- <a href="../articles/web_only/FOCUS_Z.html">Example evaluation of FOCUS Example Dataset Z</a>
- </li>
- <li>
- <a href="../articles/twa.html">Calculation of time weighted average concentrations with mkin</a>
- </li>
- <li>
- <a href="../articles/web_only/NAFTA_examples.html">Example evaluation of NAFTA SOP Attachment examples</a>
- </li>
- <li>
- <a href="../articles/web_only/benchmarks.html">Benchmark timings for mkin</a>
- </li>
- <li>
- <a href="../articles/web_only/saem_benchmarks.html">Benchmark timings for saem.mmkin</a>
- </li>
- </ul></li>
-<li>
- <a href="../news/index.html">News</a>
-</li>
- </ul><ul class="nav navbar-nav navbar-right"><li>
- <a href="https://github.com/jranke/mkin/" class="external-link">
- <span class="fab fa-github fa-lg"></span>
-
- </a>
-</li>
- </ul></div><!--/.nav-collapse -->
- </div><!--/.container -->
-</div><!--/.navbar -->
-
-
-
- </header><div class="row">
- <div class="col-md-9 contents">
- <div class="page-header">
- <h1>Wrap the output of a summary function in tex listing environment</h1>
- <small class="dont-index">Source: <a href="https://github.com/jranke/mkin/blob/HEAD/R/tex_listing.R" class="external-link"><code>R/tex_listing.R</code></a></small>
- <div class="hidden name"><code>tex_listing.Rd</code></div>
- </div>
-
- <div class="ref-description">
- <p>This function can be used in a R markdown code chunk with the chunk
-option <code>results = "asis"</code>.</p>
- </div>
-
- <div id="ref-usage">
- <div class="sourceCode"><pre class="sourceCode r"><code><span><span class="fu">tex_listing</span><span class="op">(</span><span class="va">object</span>, caption <span class="op">=</span> <span class="cn">NULL</span>, label <span class="op">=</span> <span class="cn">NULL</span>, clearpage <span class="op">=</span> <span class="cn">TRUE</span><span class="op">)</span></span></code></pre></div>
- </div>
-
- <div id="arguments">
- <h2>Arguments</h2>
- <dl><dt>object</dt>
-<dd><p>The object for which the summary is to be listed</p></dd>
-
-
-<dt>caption</dt>
-<dd><p>An optional caption</p></dd>
-
-
-<dt>label</dt>
-<dd><p>An optional label</p></dd>
-
-
-<dt>clearpage</dt>
-<dd><p>Should a new page be started after the listing?</p></dd>
-
-</dl></div>
-
- </div>
- <div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
- <nav id="toc" data-toggle="toc" class="sticky-top"><h2 data-toc-skip>Contents</h2>
- </nav></div>
-</div>
-
-
- <footer><div class="copyright">
- <p></p><p>Developed by Johannes Ranke.</p>
-</div>
-
-<div class="pkgdown">
- <p></p><p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.0.6.</p>
-</div>
-
- </footer></div>
-
-
-
-
-
-
- </body></html>
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/summary_listing.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/summary_listing.html">
+ </head>
+</html>
diff --git a/docs/reference/update.nlme.mmkin.html b/docs/reference/update.nlme.mmkin.html
new file mode 100644
index 00000000..dd383acd
--- /dev/null
+++ b/docs/reference/update.nlme.mmkin.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html">
+ </head>
+</html>
+
diff --git a/docs/reference/which.best.default.html b/docs/reference/which.best.default.html
new file mode 100644
index 00000000..9700ef05
--- /dev/null
+++ b/docs/reference/which.best.default.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/multistart.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/multistart.html">
+ </head>
+</html>
+
diff --git a/docs/reference/which.best.html b/docs/reference/which.best.html
new file mode 100644
index 00000000..9700ef05
--- /dev/null
+++ b/docs/reference/which.best.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0;URL=https://pkgdown.jrwb.de/mkin/reference/multistart.html" />
+ <meta name="robots" content="noindex">
+ <link rel="canonical" href="https://pkgdown.jrwb.de/mkin/reference/multistart.html">
+ </head>
+</html>
+
diff --git a/docs/search.json b/docs/search.json
index 23e2fc64..753d978d 100644
--- a/docs/search.json
+++ b/docs/search.json
@@ -1 +1 @@
-[{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"laboratory-data-l1","dir":"Articles","previous_headings":"","what":"Laboratory Data L1","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"following code defines example dataset L1 FOCUS kinetics report, p. 284: use assumptions simple first order (SFO), case declining rate constant time (FOMC) case two different phases kinetics (DFOP). detailed discussion models, please see FOCUS kinetics report. Since mkin version 0.9-32 (July 2014), can use shorthand notation like \"SFO\" parent degradation models. following two lines fit model produce summary report model fit. covers numerical analysis given FOCUS report. plot fit obtained plot function mkinfit objects. residual plot can easily obtained comparison, FOMC model fitted well, \\(\\chi^2\\) error level checked. get warning default optimisation algorithm Port converge, indication model overparameterised, .e. contains many parameters ill-defined consequence. fact, due higher number parameters, lower number degrees freedom fit, \\(\\chi^2\\) error level actually higher FOMC model (3.6%) SFO model (3.4%). Additionally, parameters log_alpha log_beta internally fitted model excessive confidence intervals, span 25 orders magnitude (!) backtransformed scale alpha beta. Also, t-test significant difference zero indicate significant difference, p-values greater 0.1, finally, parameter correlation log_alpha log_beta 1.000, clearly indicating model overparameterised. \\(\\chi^2\\) error levels reported Appendix 3 Appendix 7 FOCUS kinetics report rounded integer percentages partly deviate one percentage point results calculated mkin. reason known. However, mkin gives \\(\\chi^2\\) error levels kinfit package calculation routines kinfit package extensively compared results obtained KinGUI software, documented kinfit package vignette. KinGUI first widely used standard package field. Also, calculation \\(\\chi^2\\) error levels compared KinGUII, CAKE DegKin manager project sponsored German Umweltbundesamt (Ranke 2014).","code":"library(\"mkin\", quietly = TRUE) FOCUS_2006_L1 = data.frame( t = rep(c(0, 1, 2, 3, 5, 7, 14, 21, 30), each = 2), parent = c(88.3, 91.4, 85.6, 84.5, 78.9, 77.6, 72.0, 71.9, 50.3, 59.4, 47.0, 45.1, 27.7, 27.3, 10.0, 10.4, 2.9, 4.0)) FOCUS_2006_L1_mkin <- mkin_wide_to_long(FOCUS_2006_L1) m.L1.SFO <- mkinfit(\"SFO\", FOCUS_2006_L1_mkin, quiet = TRUE) summary(m.L1.SFO) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:13 2023 ## Date of summary: Thu Nov 16 04:20:13 2023 ## ## Equations: ## d_parent/dt = - k_parent * parent ## ## Model predictions using solution type analytical ## ## Fitted using 133 model solutions performed in 0.011 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 89.85 state ## k_parent 0.10 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 89.850000 -Inf Inf ## log_k_parent -2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 93.88778 96.5589 -43.94389 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 92.470 1.28200 89.740 95.200 ## log_k_parent -2.347 0.03763 -2.428 -2.267 ## sigma 2.780 0.46330 1.792 3.767 ## ## Parameter correlation: ## parent_0 log_k_parent sigma ## parent_0 1.000e+00 6.186e-01 -1.516e-09 ## log_k_parent 6.186e-01 1.000e+00 -3.124e-09 ## sigma -1.516e-09 -3.124e-09 1.000e+00 ## ## 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 92.47000 72.13 8.824e-21 89.74000 95.2000 ## k_parent 0.09561 26.57 2.487e-14 0.08824 0.1036 ## sigma 2.78000 6.00 1.216e-05 1.79200 3.7670 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 3.424 2 7 ## parent 3.424 2 7 ## ## Estimated disappearance times: ## DT50 DT90 ## parent 7.249 24.08 ## ## Data: ## time variable observed predicted residual ## 0 parent 88.3 92.471 -4.1710 ## 0 parent 91.4 92.471 -1.0710 ## 1 parent 85.6 84.039 1.5610 ## 1 parent 84.5 84.039 0.4610 ## 2 parent 78.9 76.376 2.5241 ## 2 parent 77.6 76.376 1.2241 ## 3 parent 72.0 69.412 2.5884 ## 3 parent 71.9 69.412 2.4884 ## 5 parent 50.3 57.330 -7.0301 ## 5 parent 59.4 57.330 2.0699 ## 7 parent 47.0 47.352 -0.3515 ## 7 parent 45.1 47.352 -2.2515 ## 14 parent 27.7 24.247 3.4528 ## 14 parent 27.3 24.247 3.0528 ## 21 parent 10.0 12.416 -2.4163 ## 21 parent 10.4 12.416 -2.0163 ## 30 parent 2.9 5.251 -2.3513 ## 30 parent 4.0 5.251 -1.2513 plot(m.L1.SFO, show_errmin = TRUE, main = \"FOCUS L1 - SFO\") mkinresplot(m.L1.SFO, ylab = \"Observed\", xlab = \"Time\") m.L1.FOMC <- mkinfit(\"FOMC\", FOCUS_2006_L1_mkin, quiet=TRUE) ## Warning in mkinfit(\"FOMC\", FOCUS_2006_L1_mkin, quiet = TRUE): Optimisation did not converge: ## false convergence (8) plot(m.L1.FOMC, show_errmin = TRUE, main = \"FOCUS L1 - FOMC\") summary(m.L1.FOMC, data = FALSE) ## Warning in sqrt(diag(covar)): NaNs produced ## Warning in sqrt(1/diag(V)): NaNs produced ## Warning in cov2cor(ans$covar): diag(.) had 0 or NA entries; non-finite result ## is doubtful ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:13 2023 ## Date of summary: Thu Nov 16 04:20:13 2023 ## ## Equations: ## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## ## Fitted using 342 model solutions performed in 0.023 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 89.85 state ## alpha 1.00 deparm ## beta 10.00 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 89.850000 -Inf Inf ## log_alpha 0.000000 -Inf Inf ## log_beta 2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## ## Warning(s): ## Optimisation did not converge: ## false convergence (8) ## ## Results: ## ## AIC BIC logLik ## 95.88782 99.44931 -43.94391 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 92.47 1.2820 89.720 95.220 ## log_alpha 13.20 NaN NaN NaN ## log_beta 15.54 NaN NaN NaN ## sigma 2.78 0.4607 1.792 3.768 ## ## Parameter correlation: ## parent_0 log_alpha log_beta sigma ## parent_0 1.000000 NaN NaN 0.000603 ## log_alpha NaN 1 NaN NaN ## log_beta NaN NaN 1 NaN ## sigma 0.000603 NaN NaN 1.000000 ## ## 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 9.247e+01 NA NA 89.720 95.220 ## alpha 5.386e+05 NA NA NA NA ## beta 5.633e+06 NA NA NA NA ## sigma 2.780e+00 NA NA 1.792 3.768 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 3.619 3 6 ## parent 3.619 3 6 ## ## Estimated disappearance times: ## DT50 DT90 DT50back ## parent 7.249 24.08 7.249"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"laboratory-data-l2","dir":"Articles","previous_headings":"","what":"Laboratory Data L2","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"following code defines example dataset L2 FOCUS kinetics report, p. 287:","code":"FOCUS_2006_L2 = data.frame( t = rep(c(0, 1, 3, 7, 14, 28), each = 2), parent = c(96.1, 91.8, 41.4, 38.7, 19.3, 22.3, 4.6, 4.6, 2.6, 1.2, 0.3, 0.6)) FOCUS_2006_L2_mkin <- mkin_wide_to_long(FOCUS_2006_L2)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"sfo-fit-for-l2","dir":"Articles","previous_headings":"Laboratory Data L2","what":"SFO fit for L2","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":", SFO model fitted result plotted. residual plot can obtained simply adding argument show_residuals plot command. \\(\\chi^2\\) error level 14% suggests model fit well. also obvious plots fit, included residual plot. FOCUS kinetics report, stated apparent systematic error observed residual plot measured DT90 (approximately day 5), underestimation beyond point. may add difficult judge random nature residuals just three samplings days 0, 1 3. Also, clear priori consistent underestimation approximate DT90 irrelevant. However, can rationalised fact FOCUS fate models generally implement SFO kinetics.","code":"m.L2.SFO <- mkinfit(\"SFO\", FOCUS_2006_L2_mkin, quiet=TRUE) plot(m.L2.SFO, show_residuals = TRUE, show_errmin = TRUE, main = \"FOCUS L2 - SFO\")"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"fomc-fit-for-l2","dir":"Articles","previous_headings":"Laboratory Data L2","what":"FOMC fit for L2","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"comparison, FOMC model fitted well, \\(\\chi^2\\) error level checked. error level \\(\\chi^2\\) test passes much lower case. Therefore, FOMC model provides better description data, less experimental error assumed order explain data.","code":"m.L2.FOMC <- mkinfit(\"FOMC\", FOCUS_2006_L2_mkin, quiet = TRUE) plot(m.L2.FOMC, show_residuals = TRUE, main = \"FOCUS L2 - FOMC\") summary(m.L2.FOMC, data = FALSE) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:13 2023 ## Date of summary: Thu Nov 16 04:20:14 2023 ## ## Equations: ## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## ## Fitted using 239 model solutions performed in 0.014 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 93.95 state ## alpha 1.00 deparm ## beta 10.00 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 93.950000 -Inf Inf ## log_alpha 0.000000 -Inf Inf ## log_beta 2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 61.78966 63.72928 -26.89483 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 93.7700 1.6130 90.05000 97.4900 ## log_alpha 0.3180 0.1559 -0.04149 0.6776 ## log_beta 0.2102 0.2493 -0.36460 0.7850 ## sigma 2.2760 0.4645 1.20500 3.3470 ## ## Parameter correlation: ## parent_0 log_alpha log_beta sigma ## parent_0 1.000e+00 -1.151e-01 -2.085e-01 -7.436e-09 ## log_alpha -1.151e-01 1.000e+00 9.741e-01 -1.617e-07 ## log_beta -2.085e-01 9.741e-01 1.000e+00 -1.386e-07 ## sigma -7.436e-09 -1.617e-07 -1.386e-07 1.000e+00 ## ## 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 93.770 58.120 4.267e-12 90.0500 97.490 ## alpha 1.374 6.414 1.030e-04 0.9594 1.969 ## beta 1.234 4.012 1.942e-03 0.6945 2.192 ## sigma 2.276 4.899 5.977e-04 1.2050 3.347 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 6.205 3 3 ## parent 6.205 3 3 ## ## Estimated disappearance times: ## DT50 DT90 DT50back ## parent 0.8092 5.356 1.612"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"dfop-fit-for-l2","dir":"Articles","previous_headings":"Laboratory Data L2","what":"DFOP fit for L2","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"Fitting four parameter DFOP model reduces \\(\\chi^2\\) error level. , DFOP model clearly best-fit model dataset L2 based chi^2 error level criterion.","code":"m.L2.DFOP <- mkinfit(\"DFOP\", FOCUS_2006_L2_mkin, quiet = TRUE) plot(m.L2.DFOP, show_residuals = TRUE, show_errmin = TRUE, main = \"FOCUS L2 - DFOP\") summary(m.L2.DFOP, data = FALSE) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:14 2023 ## Date of summary: Thu Nov 16 04:20:14 2023 ## ## 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 ## ## Model predictions using solution type analytical ## ## Fitted using 581 model solutions performed in 0.041 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 93.95 state ## k1 0.10 deparm ## k2 0.01 deparm ## g 0.50 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 93.950000 -Inf Inf ## log_k1 -2.302585 -Inf Inf ## log_k2 -4.605170 -Inf Inf ## g_qlogis 0.000000 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 52.36695 54.79148 -21.18347 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 93.950 9.998e-01 91.5900 96.3100 ## log_k1 3.113 1.849e+03 -4369.0000 4375.0000 ## log_k2 -1.088 6.285e-02 -1.2370 -0.9394 ## g_qlogis -0.399 9.946e-02 -0.6342 -0.1638 ## sigma 1.414 2.886e-01 0.7314 2.0960 ## ## Parameter correlation: ## parent_0 log_k1 log_k2 g_qlogis sigma ## parent_0 1.000e+00 6.763e-07 -8.944e-10 2.665e-01 -1.083e-09 ## log_k1 6.763e-07 1.000e+00 1.112e-04 -2.187e-04 -1.027e-05 ## log_k2 -8.944e-10 1.112e-04 1.000e+00 -7.903e-01 9.464e-09 ## g_qlogis 2.665e-01 -2.187e-04 -7.903e-01 1.000e+00 -1.532e-08 ## sigma -1.083e-09 -1.027e-05 9.464e-09 -1.532e-08 1.000e+00 ## ## 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 93.9500 9.397e+01 2.036e-12 91.5900 96.3100 ## k1 22.4900 5.533e-04 4.998e-01 0.0000 Inf ## k2 0.3369 1.591e+01 4.697e-07 0.2904 0.3909 ## g 0.4016 1.680e+01 3.238e-07 0.3466 0.4591 ## sigma 1.4140 4.899e+00 8.776e-04 0.7314 2.0960 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 2.53 4 2 ## parent 2.53 4 2 ## ## Estimated disappearance times: ## DT50 DT90 DT50back DT50_k1 DT50_k2 ## parent 0.5335 5.311 1.599 0.03083 2.058"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"laboratory-data-l3","dir":"Articles","previous_headings":"","what":"Laboratory Data L3","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"following code defines example dataset L3 FOCUS kinetics report, p. 290.","code":"FOCUS_2006_L3 = data.frame( t = c(0, 3, 7, 14, 30, 60, 91, 120), parent = c(97.8, 60, 51, 43, 35, 22, 15, 12)) FOCUS_2006_L3_mkin <- mkin_wide_to_long(FOCUS_2006_L3)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"fit-multiple-models","dir":"Articles","previous_headings":"Laboratory Data L3","what":"Fit multiple models","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"mkin version 0.9-39 (June 2015), can fit several models one datasets one call function mmkin. datasets passed list, case named list holding L3 dataset prepared . \\(\\chi^2\\) error level 21% well plot suggest SFO model fit well. FOMC model performs better, error level \\(\\chi^2\\) test passes 7%. Fitting four parameter DFOP model reduces \\(\\chi^2\\) error level considerably.","code":"# Only use one core here, not to offend the CRAN checks mm.L3 <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), cores = 1, list(\"FOCUS L3\" = FOCUS_2006_L3_mkin), quiet = TRUE) plot(mm.L3)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"accessing-mmkin-objects","dir":"Articles","previous_headings":"Laboratory Data L3","what":"Accessing mmkin objects","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"objects returned mmkin arranged like matrix, models row index datasets column index. can extract summary plot e.g. DFOP fit, using square brackets indexing result use summary plot functions working mkinfit objects. , look model plot, confidence intervals parameters correlation matrix suggest parameter estimates reliable, DFOP model can used best-fit model based \\(\\chi^2\\) error level criterion laboratory data L3. also example standard t-test parameter g_ilr misleading, tests significant difference zero. case, zero appears correct value parameter, confidence interval backtransformed parameter g quite narrow.","code":"summary(mm.L3[[\"DFOP\", 1]]) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:14 2023 ## Date of summary: Thu Nov 16 04:20:14 2023 ## ## 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 ## ## Model predictions using solution type analytical ## ## Fitted using 376 model solutions performed in 0.024 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 97.80 state ## k1 0.10 deparm ## k2 0.01 deparm ## g 0.50 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 97.800000 -Inf Inf ## log_k1 -2.302585 -Inf Inf ## log_k2 -4.605170 -Inf Inf ## g_qlogis 0.000000 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 32.97732 33.37453 -11.48866 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 97.7500 1.01900 94.5000 101.000000 ## log_k1 -0.6612 0.10050 -0.9812 -0.341300 ## log_k2 -4.2860 0.04322 -4.4230 -4.148000 ## g_qlogis -0.1739 0.05270 -0.3416 -0.006142 ## sigma 1.0170 0.25430 0.2079 1.827000 ## ## Parameter correlation: ## parent_0 log_k1 log_k2 g_qlogis sigma ## parent_0 1.000e+00 1.732e-01 2.282e-02 4.009e-01 -9.696e-08 ## log_k1 1.732e-01 1.000e+00 4.945e-01 -5.809e-01 7.148e-07 ## log_k2 2.282e-02 4.945e-01 1.000e+00 -6.812e-01 1.022e-06 ## g_qlogis 4.009e-01 -5.809e-01 -6.812e-01 1.000e+00 -7.930e-07 ## sigma -9.696e-08 7.148e-07 1.022e-06 -7.930e-07 1.000e+00 ## ## 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 97.75000 95.960 1.248e-06 94.50000 101.00000 ## k1 0.51620 9.947 1.081e-03 0.37490 0.71090 ## k2 0.01376 23.140 8.840e-05 0.01199 0.01579 ## g 0.45660 34.920 2.581e-05 0.41540 0.49850 ## sigma 1.01700 4.000 1.400e-02 0.20790 1.82700 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 2.225 4 4 ## parent 2.225 4 4 ## ## Estimated disappearance times: ## DT50 DT90 DT50back DT50_k1 DT50_k2 ## parent 7.464 123 37.03 1.343 50.37 ## ## Data: ## time variable observed predicted residual ## 0 parent 97.8 97.75 0.05396 ## 3 parent 60.0 60.45 -0.44933 ## 7 parent 51.0 49.44 1.56338 ## 14 parent 43.0 43.84 -0.83632 ## 30 parent 35.0 35.15 -0.14707 ## 60 parent 22.0 23.26 -1.25919 ## 91 parent 15.0 15.18 -0.18181 ## 120 parent 12.0 10.19 1.81395 plot(mm.L3[[\"DFOP\", 1]], show_errmin = TRUE)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"laboratory-data-l4","dir":"Articles","previous_headings":"","what":"Laboratory Data L4","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"following code defines example dataset L4 FOCUS kinetics report, p. 293: Fits SFO FOMC models, plots summaries produced : \\(\\chi^2\\) error level 3.3% well plot suggest SFO model fits well. error level \\(\\chi^2\\) test passes slightly lower FOMC model. However, difference appears negligible.","code":"FOCUS_2006_L4 = data.frame( t = c(0, 3, 7, 14, 30, 60, 91, 120), parent = c(96.6, 96.3, 94.3, 88.8, 74.9, 59.9, 53.5, 49.0)) FOCUS_2006_L4_mkin <- mkin_wide_to_long(FOCUS_2006_L4) # Only use one core here, not to offend the CRAN checks mm.L4 <- mmkin(c(\"SFO\", \"FOMC\"), cores = 1, list(\"FOCUS L4\" = FOCUS_2006_L4_mkin), quiet = TRUE) plot(mm.L4) summary(mm.L4[[\"SFO\", 1]], data = FALSE) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:14 2023 ## Date of summary: Thu Nov 16 04:20:15 2023 ## ## Equations: ## d_parent/dt = - k_parent * parent ## ## Model predictions using solution type analytical ## ## Fitted using 142 model solutions performed in 0.01 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 96.6 state ## k_parent 0.1 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 96.600000 -Inf Inf ## log_k_parent -2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 47.12133 47.35966 -20.56067 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 96.440 1.69900 92.070 100.800 ## log_k_parent -5.030 0.07059 -5.211 -4.848 ## sigma 3.162 0.79050 1.130 5.194 ## ## Parameter correlation: ## parent_0 log_k_parent sigma ## parent_0 1.000e+00 5.938e-01 3.430e-07 ## log_k_parent 5.938e-01 1.000e+00 5.885e-07 ## sigma 3.430e-07 5.885e-07 1.000e+00 ## ## 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 96.440000 56.77 1.604e-08 92.070000 1.008e+02 ## k_parent 0.006541 14.17 1.578e-05 0.005455 7.842e-03 ## sigma 3.162000 4.00 5.162e-03 1.130000 5.194e+00 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 3.287 2 6 ## parent 3.287 2 6 ## ## Estimated disappearance times: ## DT50 DT90 ## parent 106 352 summary(mm.L4[[\"FOMC\", 1]], data = FALSE) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:15 2023 ## Date of summary: Thu Nov 16 04:20:15 2023 ## ## Equations: ## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## ## Fitted using 224 model solutions performed in 0.014 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 96.6 state ## alpha 1.0 deparm ## beta 10.0 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 96.600000 -Inf Inf ## log_alpha 0.000000 -Inf Inf ## log_beta 2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 40.37255 40.69032 -16.18628 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 99.1400 1.2670 95.6300 102.7000 ## log_alpha -0.3506 0.2616 -1.0770 0.3756 ## log_beta 4.1740 0.3938 3.0810 5.2670 ## sigma 1.8300 0.4575 0.5598 3.1000 ## ## Parameter correlation: ## parent_0 log_alpha log_beta sigma ## parent_0 1.000e+00 -4.696e-01 -5.543e-01 -2.447e-07 ## log_alpha -4.696e-01 1.000e+00 9.889e-01 2.198e-08 ## log_beta -5.543e-01 9.889e-01 1.000e+00 4.923e-08 ## sigma -2.447e-07 2.198e-08 4.923e-08 1.000e+00 ## ## 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 99.1400 78.250 7.993e-08 95.6300 102.700 ## alpha 0.7042 3.823 9.365e-03 0.3407 1.456 ## beta 64.9800 2.540 3.201e-02 21.7800 193.900 ## sigma 1.8300 4.000 8.065e-03 0.5598 3.100 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 2.029 3 5 ## parent 2.029 3 5 ## ## Estimated disappearance times: ## DT50 DT90 DT50back ## parent 108.9 1644 494.9"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"abstract","dir":"Articles","previous_headings":"","what":"Abstract","title":"Short introduction to mkin","text":"regulatory evaluation chemical substances like plant protection products (pesticides), biocides chemicals, degradation data play important role. evaluation pesticide degradation experiments, detailed guidance developed, based nonlinear optimisation. R add-package mkin implements fitting models recommended guidance within R calculates statistical measures data series within one compartments, parent metabolites.","code":"library(\"mkin\", quietly = TRUE) # Define the kinetic model m_SFO_SFO_SFO <- mkinmod(parent = mkinsub(\"SFO\", \"M1\"), M1 = mkinsub(\"SFO\", \"M2\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) # Produce model predictions using some arbitrary parameters sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) d_SFO_SFO_SFO <- mkinpredict(m_SFO_SFO_SFO, c(k_parent = 0.03, f_parent_to_M1 = 0.5, k_M1 = log(2)/100, f_M1_to_M2 = 0.9, k_M2 = log(2)/50), c(parent = 100, M1 = 0, M2 = 0), sampling_times) # Generate a dataset by adding normally distributed errors with # standard deviation 3, for two replicates at each sampling time d_SFO_SFO_SFO_err <- add_err(d_SFO_SFO_SFO, reps = 2, sdfunc = function(x) 3, n = 1, seed = 123456789 ) # Fit the model to the dataset f_SFO_SFO_SFO <- mkinfit(m_SFO_SFO_SFO, d_SFO_SFO_SFO_err[[1]], quiet = TRUE) # Plot the results separately for parent and metabolites plot_sep(f_SFO_SFO_SFO, lpos = c(\"topright\", \"bottomright\", \"bottomright\"))"},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"background","dir":"Articles","previous_headings":"","what":"Background","title":"Short introduction to mkin","text":"mkin package (J. Ranke 2021) implements approach degradation kinetics recommended kinetics report provided FOrum Co-ordination pesticide fate models USe (FOCUS Work Group Degradation Kinetics 2006, 2014). covers data series describing decline one compound, data series transformation products (commonly termed metabolites) data series one compartment. possible include back reactions. Therefore, equilibrium reactions equilibrium partitioning can specified, although often leads overparameterisation model. first mkin code published 2010, commonly used tools fitting complex kinetic degradation models experimental data KinGUI (Schäfer et al. 2007), MATLAB based tool graphical user interface specifically tailored task included output proposed FOCUS Kinetics Workgroup, ModelMaker, general purpose compartment based tool providing infrastructure fitting dynamic simulation models based differential equations data. ‘mkin’ code first uploaded BerliOS development platform. taken , version control history imported R-Forge site (see e.g. initial commit 11 May 2010), code still updated. time, R package FME (Flexible Modelling Environment) (Soetaert Petzoldt 2010) already available, provided good basis developing package specifically tailored task. remaining challenge make easy possible users (including author vignette) specify system differential equations include output requested FOCUS guidance, \\(\\chi^2\\) error level defined guidance. Also, mkin introduced using analytical solutions parent kinetics improved optimization speed. Later, Eigenvalue based solutions introduced mkin case linear differential equations (.e. FOMC DFOP models used parent compound), greatly improving optimization speed cases. , become somehow obsolete, use compiled code described gives even faster execution times. possibility specify back-reactions biphasic model (SFORB) metabolites present mkin beginning.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"derived-software-tools","dir":"Articles","previous_headings":"Background","what":"Derived software tools","title":"Short introduction to mkin","text":"Soon publication mkin, two derived tools published, namely KinGUII (developed Bayer Crop Science) CAKE (commissioned Tessella Syngenta), added graphical user interface (GUI), added fitting iteratively reweighted least squares (IRLS) characterisation likely parameter distributions Markov Chain Monte Carlo (MCMC) sampling. CAKE focuses smooth use experience, sacrificing flexibility model definition, originally allowing two primary metabolites parallel. current version 3.4 CAKE released May 2020 uses scheme six metabolites flexible arrangement supports biphasic modelling metabolites, support back-reactions (non-instantaneous equilibria). KinGUI offers even flexible widget specifying complex kinetic models. Back-reactions (non-instantaneous equilibria) supported early , 2014, simple first-order models specified transformation products. Starting KinGUII version 2.1, biphasic modelling metabolites also available KinGUII. graphical user interface (GUI) recently brought decent degree maturity browser based GUI named gmkin. Please see documentation page manual information. comparison scope, usability numerical results obtained tools recently published Johannes Ranke, Wöltjen, Meinecke (2018).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"unique-features","dir":"Articles","previous_headings":"","what":"Unique features","title":"Short introduction to mkin","text":"Currently, main unique features available mkin speed increase using compiled code compiler present, parallel model fitting multicore machines using mmkin function, estimation parameter confidence intervals based transformed parameters (see ) possibility use two-component error model iteratively reweighted least squares fitting different variances variable introduced Gao et al. (2011) available mkin since version 0.9-22. release 0.9.49.5, IRLS algorithm complemented direct step-wise maximisation likelihood function, makes possible fit variance variable error model also two-component error model inspired error models developed analytical chemistry (Johannes Ranke Meinecke 2019).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"internal-parameter-transformations","dir":"Articles","previous_headings":"","what":"Internal parameter transformations","title":"Short introduction to mkin","text":"rate constants, log transformation used, proposed Bates Watts (1988, 77, 149). Approximate intervals constructed transformed rate constants (compare Bates Watts 1988, 135), .e. logarithms. Confidence intervals rate constants obtained using appropriate backtransformation using exponential function. first version mkin allowing specifying models using formation fractions, home-made reparameterisation used order ensure sum formation fractions exceed unity. method still used current version KinGUII (v2.1 April 2014), modification allows fixing pathway sink zero. CAKE uses penalties objective function order enforce constraint. 2012, alternative reparameterisation formation fractions proposed together René Lehmann (J. Ranke Lehmann 2012), based isometric logratio transformation (ILR). aim improve validity linear approximation objective function parameter estimation procedure well subsequent calculation parameter confidence intervals. current version mkin, logit transformation used parameters bound 0 1, g parameter DFOP model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"confidence-intervals-based-on-transformed-parameters","dir":"Articles","previous_headings":"Internal parameter transformations","what":"Confidence intervals based on transformed parameters","title":"Short introduction to mkin","text":"first attempt providing improved parameter confidence intervals introduced mkin 2013, confidence intervals obtained FME transformed parameters simply backtransformed one one yield asymmetric confidence intervals backtransformed parameters. However, 1:1 relation rate constants model transformed parameters fitted model, parameters obtained isometric logratio transformation calculated set formation fractions quantify paths compounds formed specific parent compound, 1:1 relation exists. Therefore, parameter confidence intervals formation fractions obtained method appear valid case single transformation product, currently logit transformation used formation fraction. confidence intervals obtained backtransformation cases 1:1 relation transformed original parameter exist considered author vignette accurate obtained using re-estimation Hessian matrix backtransformation, implemented FME package.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"parameter-t-test-based-on-untransformed-parameters","dir":"Articles","previous_headings":"Internal parameter transformations","what":"Parameter t-test based on untransformed parameters","title":"Short introduction to mkin","text":"standard output many nonlinear regression software packages includes results test significant difference zero parameters. test also recommended check validity rate constants FOCUS guidance (FOCUS Work Group Degradation Kinetics 2014, 96ff). argued precondition test, .e. normal distribution estimator parameters, fulfilled case nonlinear regression (J. Ranke Lehmann 2015). However, test commonly used industry, consultants national authorities order decide reliability parameter estimates, based FOCUS guidance mentioned . Therefore, results one-sided t-test included summary output mkin. reasonable test significant difference transformed parameters (e.g. \\(log(k)\\)) zero, t-test calculated based model definition parameter transformation, .e. similar way packages apply internal parameter transformation. note included mkin output, pointing fact t-test based unjustified assumption normal distribution parameter estimators.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"introduction","dir":"Articles > Prebuilt","previous_headings":"","what":"Introduction","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"purpose document test demonstrate nonlinear hierarchical models (NLHM) based parent degradation models SFO, FOMC, DFOP HS, serial formation two metabolites can fitted mkin package. assembled course work package 1.2 Project Number 173340 (Application nonlinear hierarchical models kinetic evaluation chemical degradation data) German Environment Agency carried 2022 2023. mkin package used version 1.2.6 currently development. newly introduced functionality used simplification excluding random effects set fits based related set fits reduced model, documentation starting parameters fit, starting parameters saem fits now listed summary. saemix package used backend fitting NLHM, also loaded make convergence plot function available. document processed knitr package, also provides kable function used improve display tabular data R markdown documents. parallel processing, parallel package used.","code":"library(mkin) library(knitr) library(saemix) library(parallel) n_cores <- detectCores() # We need to start a new cluster after defining a compiled model that is # saved as a DLL to the user directory, therefore we define a function # This is used again after defining the pathway model start_cluster <- function(n_cores) { if (Sys.info()[\"sysname\"] == \"Windows\") { ret <- makePSOCKcluster(n_cores) } else { ret <- makeForkCluster(n_cores) } return(ret) } cl <- start_cluster(n_cores)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"test-data","dir":"Articles > Prebuilt","previous_headings":"Introduction","what":"Test data","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"example data taken final addendum DAR 2014 distributed mkin package. Residue data time step normalisation factors read using function read_spreadsheet mkin package. function also performs time step normalisation. following tables show covariate data 5 datasets read spreadsheet file. Covariate data Dataset Nambsheim Dataset Tama Dataset Gross-Umstadt Dataset Sassafras Dataset Lleida","code":"data_file <- system.file( \"testdata\", \"cyantraniliprole_soil_efsa_2014.xlsx\", package = \"mkin\") cyan_ds <- read_spreadsheet(data_file, parent_only = FALSE) pH <- attr(cyan_ds, \"covariates\") kable(pH, caption = \"Covariate data\") for (ds_name in names(cyan_ds)) { print( kable(mkin_long_to_wide(cyan_ds[[ds_name]]), caption = paste(\"Dataset\", ds_name), booktabs = TRUE, row.names = FALSE)) cat(\"\\n\\\\clearpage\\n\") }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"parent-only-evaluations","dir":"Articles > Prebuilt","previous_headings":"","what":"Parent only evaluations","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"pathway fits long run times, evaluations parent data performed first, order determine hierarchical parent degradation model random effects degradation model parameters ill-defined. fits converged successfully. almost models, random effect initial concentration parent compound ill-defined. biexponential models DFOP SFORB, random effect one additional parameter ill-defined two-component error model used. Model comparison based AIC BIC indicates two-component error model preferable parent models exception DFOP. lowest AIC BIC values obtained FOMC model, followed SFORB DFOP.","code":"cyan_sep_const <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\", \"SFORB\", \"HS\"), cyan_ds, quiet = TRUE, cores = n_cores) cyan_sep_tc <- update(cyan_sep_const, error_model = \"tc\") cyan_saem_full <- mhmkin(list(cyan_sep_const, cyan_sep_tc)) status(cyan_saem_full) |> kable() illparms(cyan_saem_full) |> kable() anova(cyan_saem_full) |> kable(digits = 1) stopCluster(cl)"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"evaluations-with-pathway-established-previously","dir":"Articles > Prebuilt","previous_headings":"Pathway fits","what":"Evaluations with pathway established previously","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"test technical feasibility coupling relevant parent degradation models different transformation pathway models, list mkinmod models set . EU evaluation, parallel formation metabolites JCZ38 J9Z38 secondary formation metabolite JSE76 JCZ38 used. obtain suitable starting values NLHM fits, separate pathway fits performed datasets. separate fits converged successfully. biggest convergence problems seen using HS model constant variance. hierarchical pathway fits, random effects quantified corresponding parent data analyses excluded. code , output illparms function parent fits used argument no_random_effect mhmkin function. possibility introduced mkin version 1.2.2 currently development. status information individual fits shows fits completed successfully. matrix entries Fth FO indicate Fisher Information Matrix inverted fixed effects (theta) random effects (Omega), respectively. affected fits, ill-defined parameters determined using illparms function, relies Fisher Information Matrix. model comparison suggests pathway fits using DFOP SFORB parent compound provide best fit. two parent model, successful fits shown . Plots fits parent models shown Appendix. DFOP pathway fit two-component error SFORB pathway fit two-component error closer graphical analysis Figures shows residues transformation product JCZ38 soils Tama Nambsheim observed later time points strongly systematically underestimated.","code":"if (!dir.exists(\"cyan_dlls\")) dir.create(\"cyan_dlls\") cyan_path_1 <- list( sfo_path_1 = mkinmod( cyan = mkinsub(\"SFO\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"sfo_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE), fomc_path_1 = mkinmod( cyan = mkinsub(\"FOMC\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"fomc_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE), dfop_path_1 = mkinmod( cyan = mkinsub(\"DFOP\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"dfop_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE), sforb_path_1 = mkinmod( cyan = mkinsub(\"SFORB\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"sforb_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE), hs_path_1 = mkinmod( cyan = mkinsub(\"HS\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"hs_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE) ) cl_path_1 <- start_cluster(n_cores) f_sep_1_const <- mmkin( cyan_path_1, cyan_ds, error_model = \"const\", cluster = cl_path_1, quiet = TRUE) status(f_sep_1_const) |> kable() f_sep_1_tc <- update(f_sep_1_const, error_model = \"tc\") status(f_sep_1_tc) |> kable() f_saem_1 <- mhmkin(list(f_sep_1_const, f_sep_1_tc), no_random_effect = illparms(cyan_saem_full), cluster = cl_path_1) status(f_saem_1) |> kable() illparms(f_saem_1) |> kable() anova(f_saem_1) |> kable(digits = 1) plot(f_saem_1[[\"dfop_path_1\", \"tc\"]]) plot(f_saem_1[[\"sforb_path_1\", \"tc\"]]) stopCluster(cl_path_1)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"alternative-pathway-fits","dir":"Articles > Prebuilt","previous_headings":"Pathway fits","what":"Alternative pathway fits","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"improve fit JCZ38, back-reaction JSE76 JCZ38 introduced alternative version transformation pathway, analogy back-reaction K5A78 K5A77. pairs transformation products pairs organic acid corresponding amide (Addendum 2014, p. 109). FOMC provided best fit parent, biexponential models DFOP SFORB provided best initial pathway fits, three parent models used alternative pathway fits. Using constant variance, separate fits converge exception fits Sassafras soil data. Using two-component error model, separate fits converge exception alternative pathway fit DFOP used parent Sassafras dataset. hierarchical fits alternative pathway completed successfully. fits, random effects formation fractions pathways JCZ38 JSE76, reverse pathway JSE76 JCZ38 ill-defined. variants using biexponential models DFOP SFORB parent compound two-component error model give lowest AIC BIC values plotted . Compared original pathway, AIC BIC values indicate large improvement. confirmed plots, show metabolite JCZ38 fitted much better model. FOMC pathway fit two-component error, alternative pathway DFOP pathway fit two-component error, alternative pathway SFORB pathway fit two-component error, alternative pathway","code":"cyan_path_2 <- list( fomc_path_2 = mkinmod( cyan = mkinsub(\"FOMC\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\", \"JCZ38\"), name = \"fomc_path_2\", quiet = TRUE, dll_dir = \"cyan_dlls\", overwrite = TRUE ), dfop_path_2 = mkinmod( cyan = mkinsub(\"DFOP\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\", \"JCZ38\"), name = \"dfop_path_2\", quiet = TRUE, dll_dir = \"cyan_dlls\", overwrite = TRUE ), sforb_path_2 = mkinmod( cyan = mkinsub(\"SFORB\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\", \"JCZ38\"), name = \"sforb_path_2\", quiet = TRUE, dll_dir = \"cyan_dlls\", overwrite = TRUE ) ) cl_path_2 <- start_cluster(n_cores) f_sep_2_const <- mmkin( cyan_path_2, cyan_ds, error_model = \"const\", cluster = cl_path_2, quiet = TRUE) status(f_sep_2_const) |> kable() f_sep_2_tc <- update(f_sep_2_const, error_model = \"tc\") status(f_sep_2_tc) |> kable() f_saem_2 <- mhmkin(list(f_sep_2_const, f_sep_2_tc), no_random_effect = illparms(cyan_saem_full[2:4, ]), cluster = cl_path_2) status(f_saem_2) |> kable() illparms(f_saem_2) |> kable() anova(f_saem_2) |> kable(digits = 1) plot(f_saem_2[[\"fomc_path_2\", \"tc\"]]) plot(f_saem_2[[\"dfop_path_2\", \"tc\"]]) plot(f_saem_2[[\"sforb_path_2\", \"tc\"]])"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"refinement-of-alternative-pathway-fits","dir":"Articles > Prebuilt","previous_headings":"Pathway fits","what":"Refinement of alternative pathway fits","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"ill-defined random effects identified parent fits pathway fits, excluded final evaluations . purpose, list character vectors created can indexed row column indices, contains degradation parameter names random effects excluded hierarchical fits contained f_saem_2. exception FOMC pathway fit constant variance, updated fits completed successfully. However, Fisher Information Matrix fixed effects (Fth) inverted, confidence intervals optimised parameters available. AIC BIC values best fit (DFOP pathway fit two-component error) lower previous fits alternative pathway, practical value refined evaluations limited confidence intervals obtained.","code":"no_ranef <- matrix(list(), nrow = 3, ncol = 2, dimnames = dimnames(f_saem_2)) no_ranef[[\"fomc_path_2\", \"const\"]] <- c(\"log_beta\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"fomc_path_2\", \"tc\"]] <- c(\"cyan_0\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"dfop_path_2\", \"const\"]] <- c(\"cyan_0\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"dfop_path_2\", \"tc\"]] <- c(\"cyan_0\", \"log_k1\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"sforb_path_2\", \"const\"]] <- c(\"cyan_free_0\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"sforb_path_2\", \"tc\"]] <- c(\"cyan_free_0\", \"log_k_cyan_free_bound\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") clusterExport(cl_path_2, \"no_ranef\") f_saem_3 <- update(f_saem_2, no_random_effect = no_ranef, cluster = cl_path_2) status(f_saem_3) |> kable() illparms(f_saem_3) |> kable() anova(f_saem_3) |> kable(digits = 1) stopCluster(cl_path_2)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"conclusion","dir":"Articles > Prebuilt","previous_headings":"","what":"Conclusion","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"demonstrated relatively complex transformation pathway parallel formation two primary metabolites one secondary metabolite can fitted even data individual datasets quite different partly cover formation phase. run times pathway fits several hours, limiting practical feasibility iterative refinements based ill-defined parameters alternative checks parameter identifiability based multistart runs.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"acknowledgements","dir":"Articles > Prebuilt","previous_headings":"","what":"Acknowledgements","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"helpful comments Janina Wöltjen German Environment Agency gratefully acknowledged.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"plots-of-fits-that-were-not-refined-further","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Plots of fits that were not refined further","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"SFO pathway fit two-component error FOMC pathway fit two-component error HS pathway fit two-component error","code":"plot(f_saem_1[[\"sfo_path_1\", \"tc\"]]) plot(f_saem_1[[\"fomc_path_1\", \"tc\"]]) plot(f_saem_1[[\"sforb_path_1\", \"tc\"]])"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"pathway-1","dir":"Articles > Prebuilt","previous_headings":"Appendix > Hierarchical fit listings","what":"Pathway 1","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"Hierarchical SFO path 1 fit constant variance Hierarchical SFO path 1 fit two-component error Hierarchical FOMC path 1 fit constant variance Hierarchical FOMC path 1 fit two-component error Hierarchical DFOP path 1 fit constant variance Hierarchical DFOP path 1 fit two-component error Hierarchical SFORB path 1 fit constant variance Hierarchical SFORB path 1 fit two-component error Hierarchical HS path 1 fit constant variance","code":"saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:27:41 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - k_cyan * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * k_cyan * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * k_cyan * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 421.347 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_cyan log_k_JCZ38 log_k_J9Z38 log_k_JSE76 95.3304 -3.8459 -3.1305 -5.0678 -5.3196 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis 0.8158 23.5335 11.8774 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_cyan log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_0 4.797 0.0000 0.000 0.000 0.0000 log_k_cyan 0.000 0.9619 0.000 0.000 0.0000 log_k_JCZ38 0.000 0.0000 2.139 0.000 0.0000 log_k_J9Z38 0.000 0.0000 0.000 1.639 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.000 0.7894 f_cyan_ilr_1 0.000 0.0000 0.000 0.000 0.0000 f_cyan_ilr_2 0.000 0.0000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.000 0.0000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis cyan_0 0.0000 0.000 0.00 log_k_cyan 0.0000 0.000 0.00 log_k_JCZ38 0.0000 0.000 0.00 log_k_J9Z38 0.0000 0.000 0.00 log_k_JSE76 0.0000 0.000 0.00 f_cyan_ilr_1 0.7714 0.000 0.00 f_cyan_ilr_2 0.0000 9.247 0.00 f_JCZ38_qlogis 0.0000 0.000 16.61 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2693 2687 -1331 Optimised parameters: est. lower upper cyan_0 95.1279 9.354e+01 9.671e+01 log_k_cyan -3.8527 -4.367e+00 -3.338e+00 log_k_JCZ38 -3.0381 -4.187e+00 -1.889e+00 log_k_J9Z38 -5.0095 -5.623e+00 -4.396e+00 log_k_JSE76 -5.3357 -6.025e+00 -4.646e+00 f_cyan_ilr_1 0.8050 5.174e-01 1.093e+00 f_cyan_ilr_2 12.4820 -1.050e+06 1.051e+06 f_JCZ38_qlogis 1.2912 3.561e-01 2.226e+00 a.1 4.8393 NA NA SD.log_k_cyan 0.5840 NA NA SD.log_k_JCZ38 1.2740 NA NA SD.log_k_J9Z38 0.3172 NA NA SD.log_k_JSE76 0.5677 NA NA SD.f_cyan_ilr_1 0.2623 NA NA SD.f_cyan_ilr_2 1.3724 NA NA SD.f_JCZ38_qlogis 0.1464 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_cyan 0.5840 NA NA SD.log_k_JCZ38 1.2740 NA NA SD.log_k_J9Z38 0.3172 NA NA SD.log_k_JSE76 0.5677 NA NA SD.f_cyan_ilr_1 0.2623 NA NA SD.f_cyan_ilr_2 1.3724 NA NA SD.f_JCZ38_qlogis 0.1464 NA NA Variance model: est. lower upper a.1 4.839 NA NA Backtransformed parameters: est. lower upper cyan_0 95.127935 93.542456 96.713413 k_cyan 0.021221 0.012687 0.035497 k_JCZ38 0.047924 0.015189 0.151213 k_J9Z38 0.006674 0.003612 0.012332 k_JSE76 0.004817 0.002417 0.009601 f_cyan_to_JCZ38 0.757402 NA NA f_cyan_to_J9Z38 0.242597 NA NA f_JCZ38_to_JSE76 0.784347 0.588098 0.902582 Resulting formation fractions: ff cyan_JCZ38 7.574e-01 cyan_J9Z38 2.426e-01 cyan_sink 9.839e-08 JCZ38_JSE76 7.843e-01 JCZ38_sink 2.157e-01 Estimated disappearance times: DT50 DT90 cyan 32.66 108.50 JCZ38 14.46 48.05 J9Z38 103.86 345.00 JSE76 143.91 478.04 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:27:55 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - k_cyan * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * k_cyan * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * k_cyan * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 435.122 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_cyan log_k_JCZ38 log_k_J9Z38 log_k_JSE76 96.0039 -3.8907 -3.1276 -5.0069 -4.9367 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis 0.7937 22.3422 17.8932 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_cyan log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_0 4.859 0.000 0.00 0.00 0.0000 log_k_cyan 0.000 0.962 0.00 0.00 0.0000 log_k_JCZ38 0.000 0.000 2.04 0.00 0.0000 log_k_J9Z38 0.000 0.000 0.00 1.72 0.0000 log_k_JSE76 0.000 0.000 0.00 0.00 0.9076 f_cyan_ilr_1 0.000 0.000 0.00 0.00 0.0000 f_cyan_ilr_2 0.000 0.000 0.00 0.00 0.0000 f_JCZ38_qlogis 0.000 0.000 0.00 0.00 0.0000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis cyan_0 0.0000 0.000 0.00 log_k_cyan 0.0000 0.000 0.00 log_k_JCZ38 0.0000 0.000 0.00 log_k_J9Z38 0.0000 0.000 0.00 log_k_JSE76 0.0000 0.000 0.00 f_cyan_ilr_1 0.7598 0.000 0.00 f_cyan_ilr_2 0.0000 8.939 0.00 f_JCZ38_qlogis 0.0000 0.000 14.49 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2658 2651 -1312 Optimised parameters: est. lower upper cyan_0 94.81681 NA NA log_k_cyan -3.91558 NA NA log_k_JCZ38 -3.12715 NA NA log_k_J9Z38 -5.04840 NA NA log_k_JSE76 -5.10443 NA NA f_cyan_ilr_1 0.80760 NA NA f_cyan_ilr_2 48.66960 NA NA f_JCZ38_qlogis 3.03397 NA NA a.1 3.93879 NA NA b.1 0.08057 NA NA SD.log_k_cyan 0.58921 NA NA SD.log_k_JCZ38 1.29813 NA NA SD.log_k_J9Z38 0.68372 NA NA SD.log_k_JSE76 0.35128 NA NA SD.f_cyan_ilr_1 0.38352 NA NA SD.f_cyan_ilr_2 4.98884 NA NA SD.f_JCZ38_qlogis 1.75636 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_cyan 0.5892 NA NA SD.log_k_JCZ38 1.2981 NA NA SD.log_k_J9Z38 0.6837 NA NA SD.log_k_JSE76 0.3513 NA NA SD.f_cyan_ilr_1 0.3835 NA NA SD.f_cyan_ilr_2 4.9888 NA NA SD.f_JCZ38_qlogis 1.7564 NA NA Variance model: est. lower upper a.1 3.93879 NA NA b.1 0.08057 NA NA Backtransformed parameters: est. lower upper cyan_0 94.81681 NA NA k_cyan 0.01993 NA NA k_JCZ38 0.04384 NA NA k_J9Z38 0.00642 NA NA k_JSE76 0.00607 NA NA f_cyan_to_JCZ38 0.75807 NA NA f_cyan_to_J9Z38 0.24193 NA NA f_JCZ38_to_JSE76 0.95409 NA NA Resulting formation fractions: ff cyan_JCZ38 0.75807 cyan_J9Z38 0.24193 cyan_sink 0.00000 JCZ38_JSE76 0.95409 JCZ38_sink 0.04591 Estimated disappearance times: DT50 DT90 cyan 34.78 115.54 JCZ38 15.81 52.52 J9Z38 107.97 358.68 JSE76 114.20 379.35 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:28:33 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - (alpha/beta) * 1/((time/beta) + 1) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 473.357 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.2314 -3.3680 -5.1108 -5.9416 0.7144 f_cyan_ilr_2 f_JCZ38_qlogis log_alpha log_beta 7.0229 14.9234 -0.1791 2.9811 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.416 0.000 0.0 0.000 0.0000 log_k_JCZ38 0.000 2.439 0.0 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.7 0.000 0.0000 log_k_JSE76 0.000 0.000 0.0 1.856 0.0000 f_cyan_ilr_1 0.000 0.000 0.0 0.000 0.7164 f_cyan_ilr_2 0.000 0.000 0.0 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.0 0.000 0.0000 log_alpha 0.000 0.000 0.0 0.000 0.0000 log_beta 0.000 0.000 0.0 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_alpha log_beta cyan_0 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 11.57 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 18.81 0.0000 0.0000 log_alpha 0.00 0.00 0.4144 0.0000 log_beta 0.00 0.00 0.0000 0.5077 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2428 2421 -1196 Optimised parameters: est. lower upper cyan_0 101.1664 98.51265 103.8202 log_k_JCZ38 -3.3883 -4.78250 -1.9941 log_k_J9Z38 -5.3087 -5.91564 -4.7017 log_k_JSE76 -6.1313 -7.30061 -4.9619 f_cyan_ilr_1 0.7456 0.43782 1.0534 f_cyan_ilr_2 0.8181 0.24956 1.3866 f_JCZ38_qlogis 2.0467 0.61165 3.4817 log_alpha -0.2391 -0.62806 0.1499 log_beta 2.8739 2.67664 3.0711 a.1 3.4160 3.17960 3.6525 SD.cyan_0 2.4355 0.40399 4.4671 SD.log_k_JCZ38 1.5654 0.57311 2.5576 SD.log_k_J9Z38 0.4645 -0.06533 0.9943 SD.log_k_JSE76 0.9841 0.10738 1.8609 SD.f_cyan_ilr_1 0.3285 0.10546 0.5515 SD.f_cyan_ilr_2 0.2276 -0.38711 0.8424 SD.f_JCZ38_qlogis 0.8340 -0.20970 1.8777 SD.log_alpha 0.4250 0.16017 0.6898 Correlation: cyan_0 l__JCZ3 l__J9Z3 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 log_lph log_k_JCZ38 -0.0159 log_k_J9Z38 -0.0546 0.0080 log_k_JSE76 -0.0337 0.0016 0.0074 f_cyan_ilr_1 -0.0095 0.0194 -0.1573 0.0003 f_cyan_ilr_2 -0.2733 0.0799 0.3059 0.0263 0.0125 f_JCZ38_qlogis 0.0755 -0.0783 -0.0516 0.1222 -0.1155 -0.5231 log_alpha -0.0567 0.0120 0.0351 0.0189 0.0040 0.0829 -0.0502 log_beta -0.2980 0.0461 0.1382 0.0758 0.0209 0.4079 -0.2053 0.2759 Random effects: est. lower upper SD.cyan_0 2.4355 0.40399 4.4671 SD.log_k_JCZ38 1.5654 0.57311 2.5576 SD.log_k_J9Z38 0.4645 -0.06533 0.9943 SD.log_k_JSE76 0.9841 0.10738 1.8609 SD.f_cyan_ilr_1 0.3285 0.10546 0.5515 SD.f_cyan_ilr_2 0.2276 -0.38711 0.8424 SD.f_JCZ38_qlogis 0.8340 -0.20970 1.8777 SD.log_alpha 0.4250 0.16017 0.6898 Variance model: est. lower upper a.1 3.416 3.18 3.652 Backtransformed parameters: est. lower upper cyan_0 1.012e+02 9.851e+01 103.82023 k_JCZ38 3.377e-02 8.375e-03 0.13614 k_J9Z38 4.948e-03 2.697e-03 0.00908 k_JSE76 2.174e-03 6.751e-04 0.00700 f_cyan_to_JCZ38 6.389e-01 NA NA f_cyan_to_J9Z38 2.226e-01 NA NA f_JCZ38_to_JSE76 8.856e-01 6.483e-01 0.97016 alpha 7.873e-01 5.336e-01 1.16166 beta 1.771e+01 1.454e+01 21.56509 Resulting formation fractions: ff cyan_JCZ38 0.6389 cyan_J9Z38 0.2226 cyan_sink 0.1385 JCZ38_JSE76 0.8856 JCZ38_sink 0.1144 Estimated disappearance times: DT50 DT90 DT50back cyan 25.00 312.06 93.94 JCZ38 20.53 68.19 NA J9Z38 140.07 465.32 NA JSE76 318.86 1059.22 NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:28:46 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - (alpha/beta) * 1/((time/beta) + 1) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 486.031 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.13294 -3.32499 -5.09097 -5.93566 0.71359 f_cyan_ilr_2 f_JCZ38_qlogis log_alpha log_beta 10.30315 14.62272 -0.09633 3.10634 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.649 0.000 0.00 0.00 0.0000 log_k_JCZ38 0.000 2.319 0.00 0.00 0.0000 log_k_J9Z38 0.000 0.000 1.73 0.00 0.0000 log_k_JSE76 0.000 0.000 0.00 1.86 0.0000 f_cyan_ilr_1 0.000 0.000 0.00 0.00 0.7183 f_cyan_ilr_2 0.000 0.000 0.00 0.00 0.0000 f_JCZ38_qlogis 0.000 0.000 0.00 0.00 0.0000 log_alpha 0.000 0.000 0.00 0.00 0.0000 log_beta 0.000 0.000 0.00 0.00 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_alpha log_beta cyan_0 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 12.85 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 18.54 0.0000 0.0000 log_alpha 0.00 0.00 0.3142 0.0000 log_beta 0.00 0.00 0.0000 0.7333 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2424 2416 -1193 Optimised parameters: est. lower upper cyan_0 100.65667 NA NA log_k_JCZ38 -3.45782 NA NA log_k_J9Z38 -5.23476 NA NA log_k_JSE76 -5.71827 NA NA f_cyan_ilr_1 0.68389 NA NA f_cyan_ilr_2 0.61027 NA NA f_JCZ38_qlogis 116.27482 NA NA log_alpha -0.14484 NA NA log_beta 3.03220 NA NA a.1 3.11051 NA NA b.1 0.04508 NA NA SD.log_k_JCZ38 1.39961 NA NA SD.log_k_J9Z38 0.57920 NA NA SD.log_k_JSE76 0.68364 NA NA SD.f_cyan_ilr_1 0.31477 NA NA SD.f_cyan_ilr_2 0.37716 NA NA SD.f_JCZ38_qlogis 5.52695 NA NA SD.log_alpha 0.22823 NA NA SD.log_beta 0.39161 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.3996 NA NA SD.log_k_J9Z38 0.5792 NA NA SD.log_k_JSE76 0.6836 NA NA SD.f_cyan_ilr_1 0.3148 NA NA SD.f_cyan_ilr_2 0.3772 NA NA SD.f_JCZ38_qlogis 5.5270 NA NA SD.log_alpha 0.2282 NA NA SD.log_beta 0.3916 NA NA Variance model: est. lower upper a.1 3.11051 NA NA b.1 0.04508 NA NA Backtransformed parameters: est. lower upper cyan_0 1.007e+02 NA NA k_JCZ38 3.150e-02 NA NA k_J9Z38 5.328e-03 NA NA k_JSE76 3.285e-03 NA NA f_cyan_to_JCZ38 5.980e-01 NA NA f_cyan_to_J9Z38 2.273e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA alpha 8.652e-01 NA NA beta 2.074e+01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.5980 cyan_J9Z38 0.2273 cyan_sink 0.1746 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back cyan 25.48 276.2 83.15 JCZ38 22.01 73.1 NA J9Z38 130.09 432.2 NA JSE76 210.98 700.9 NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:29:15 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 514.477 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.0643 -3.4008 -5.0024 -5.8612 0.6855 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 g_qlogis 1.2366 13.6901 -1.8641 -4.5063 -0.6468 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 4.466 0.000 0.000 0.000 0.0000 log_k_JCZ38 0.000 2.382 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.595 0.000 0.0000 log_k_JSE76 0.000 0.000 0.000 1.245 0.0000 f_cyan_ilr_1 0.000 0.000 0.000 0.000 0.6852 f_cyan_ilr_2 0.000 0.000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 0.0000 log_k1 0.000 0.000 0.000 0.000 0.0000 log_k2 0.000 0.000 0.000 0.000 0.0000 g_qlogis 0.000 0.000 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 g_qlogis cyan_0 0.00 0.00 0.0000 0.0000 0.000 log_k_JCZ38 0.00 0.00 0.0000 0.0000 0.000 log_k_J9Z38 0.00 0.00 0.0000 0.0000 0.000 log_k_JSE76 0.00 0.00 0.0000 0.0000 0.000 f_cyan_ilr_1 0.00 0.00 0.0000 0.0000 0.000 f_cyan_ilr_2 1.28 0.00 0.0000 0.0000 0.000 f_JCZ38_qlogis 0.00 16.08 0.0000 0.0000 0.000 log_k1 0.00 0.00 0.9866 0.0000 0.000 log_k2 0.00 0.00 0.0000 0.5953 0.000 g_qlogis 0.00 0.00 0.0000 0.0000 1.583 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2403 2395 -1182 Optimised parameters: est. lower upper cyan_0 102.5565 NA NA log_k_JCZ38 -3.4729 NA NA log_k_J9Z38 -5.1533 NA NA log_k_JSE76 -5.6669 NA NA f_cyan_ilr_1 0.6665 NA NA f_cyan_ilr_2 0.5191 NA NA f_JCZ38_qlogis 37.0113 NA NA log_k1 -1.8497 NA NA log_k2 -4.4931 NA NA g_qlogis -0.6383 NA NA a.1 3.2397 NA NA SD.log_k_JCZ38 1.4286 NA NA SD.log_k_J9Z38 0.5312 NA NA SD.log_k_JSE76 0.6627 NA NA SD.f_cyan_ilr_1 0.3013 NA NA SD.f_cyan_ilr_2 0.2980 NA NA SD.f_JCZ38_qlogis 0.1637 NA NA SD.log_k1 0.5069 NA NA SD.log_k2 0.3828 NA NA SD.g_qlogis 0.8641 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.4286 NA NA SD.log_k_J9Z38 0.5312 NA NA SD.log_k_JSE76 0.6627 NA NA SD.f_cyan_ilr_1 0.3013 NA NA SD.f_cyan_ilr_2 0.2980 NA NA SD.f_JCZ38_qlogis 0.1637 NA NA SD.log_k1 0.5069 NA NA SD.log_k2 0.3828 NA NA SD.g_qlogis 0.8641 NA NA Variance model: est. lower upper a.1 3.24 NA NA Backtransformed parameters: est. lower upper cyan_0 1.026e+02 NA NA k_JCZ38 3.103e-02 NA NA k_J9Z38 5.780e-03 NA NA k_JSE76 3.459e-03 NA NA f_cyan_to_JCZ38 5.813e-01 NA NA f_cyan_to_J9Z38 2.265e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA k1 1.573e-01 NA NA k2 1.119e-02 NA NA g 3.456e-01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.5813 cyan_J9Z38 0.2265 cyan_sink 0.1922 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 25.23 167.94 50.55 4.407 61.97 JCZ38 22.34 74.22 NA NA NA J9Z38 119.92 398.36 NA NA NA JSE76 200.41 665.76 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:31:58 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 677.928 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.3964 -3.3626 -4.9792 -5.8727 0.6814 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 g_qlogis 6.8713 13.6901 -1.9222 -4.5035 -0.7172 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.317 0.000 0.000 0.000 0.0000 log_k_JCZ38 0.000 2.272 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.633 0.000 0.0000 log_k_JSE76 0.000 0.000 0.000 1.271 0.0000 f_cyan_ilr_1 0.000 0.000 0.000 0.000 0.6839 f_cyan_ilr_2 0.000 0.000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 0.0000 log_k1 0.000 0.000 0.000 0.000 0.0000 log_k2 0.000 0.000 0.000 0.000 0.0000 g_qlogis 0.000 0.000 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 g_qlogis cyan_0 0.00 0.00 0.0000 0.0000 0.000 log_k_JCZ38 0.00 0.00 0.0000 0.0000 0.000 log_k_J9Z38 0.00 0.00 0.0000 0.0000 0.000 log_k_JSE76 0.00 0.00 0.0000 0.0000 0.000 f_cyan_ilr_1 0.00 0.00 0.0000 0.0000 0.000 f_cyan_ilr_2 11.95 0.00 0.0000 0.0000 0.000 f_JCZ38_qlogis 0.00 16.08 0.0000 0.0000 0.000 log_k1 0.00 0.00 0.9496 0.0000 0.000 log_k2 0.00 0.00 0.0000 0.5846 0.000 g_qlogis 0.00 0.00 0.0000 0.0000 1.719 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2398 2390 -1179 Optimised parameters: est. lower upper cyan_0 100.69709 NA NA log_k_JCZ38 -3.46669 NA NA log_k_J9Z38 -5.05076 NA NA log_k_JSE76 -5.55558 NA NA f_cyan_ilr_1 0.66045 NA NA f_cyan_ilr_2 0.84275 NA NA f_JCZ38_qlogis 64.22404 NA NA log_k1 -2.17715 NA NA log_k2 -4.55002 NA NA g_qlogis -0.55920 NA NA a.1 2.95785 NA NA b.1 0.04456 NA NA SD.log_k_JCZ38 1.39881 NA NA SD.log_k_J9Z38 0.67788 NA NA SD.log_k_JSE76 0.52603 NA NA SD.f_cyan_ilr_1 0.32490 NA NA SD.f_cyan_ilr_2 0.53923 NA NA SD.f_JCZ38_qlogis 2.75576 NA NA SD.log_k2 0.30694 NA NA SD.g_qlogis 0.83619 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.3988 NA NA SD.log_k_J9Z38 0.6779 NA NA SD.log_k_JSE76 0.5260 NA NA SD.f_cyan_ilr_1 0.3249 NA NA SD.f_cyan_ilr_2 0.5392 NA NA SD.f_JCZ38_qlogis 2.7558 NA NA SD.log_k2 0.3069 NA NA SD.g_qlogis 0.8362 NA NA Variance model: est. lower upper a.1 2.95785 NA NA b.1 0.04456 NA NA Backtransformed parameters: est. lower upper cyan_0 1.007e+02 NA NA k_JCZ38 3.122e-02 NA NA k_J9Z38 6.404e-03 NA NA k_JSE76 3.866e-03 NA NA f_cyan_to_JCZ38 6.187e-01 NA NA f_cyan_to_J9Z38 2.431e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA k1 1.134e-01 NA NA k2 1.057e-02 NA NA g 3.637e-01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.6187 cyan_J9Z38 0.2431 cyan_sink 0.1382 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 26.35 175.12 52.72 6.114 65.6 JCZ38 22.20 73.75 NA NA NA J9Z38 108.23 359.53 NA NA NA JSE76 179.30 595.62 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:29:33 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 532.937 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 102.0643 -2.8987 -2.7077 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.4717 -3.4008 -5.0024 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -5.8613 0.6855 1.2366 f_JCZ38_qlogis 13.7395 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 4.466 0.0000 0.000 log_k_cyan_free 0.000 0.6158 0.000 log_k_cyan_free_bound 0.000 0.0000 1.463 log_k_cyan_bound_free 0.000 0.0000 0.000 log_k_JCZ38 0.000 0.0000 0.000 log_k_J9Z38 0.000 0.0000 0.000 log_k_JSE76 0.000 0.0000 0.000 f_cyan_ilr_1 0.000 0.0000 0.000 f_cyan_ilr_2 0.000 0.0000 0.000 f_JCZ38_qlogis 0.000 0.0000 0.000 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.000 0.000 0.000 log_k_cyan_free 0.000 0.000 0.000 0.000 log_k_cyan_free_bound 0.000 0.000 0.000 0.000 log_k_cyan_bound_free 1.058 0.000 0.000 0.000 log_k_JCZ38 0.000 2.382 0.000 0.000 log_k_J9Z38 0.000 0.000 1.595 0.000 log_k_JSE76 0.000 0.000 0.000 1.245 f_cyan_ilr_1 0.000 0.000 0.000 0.000 f_cyan_ilr_2 0.000 0.000 0.000 0.000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis cyan_free_0 0.0000 0.00 0.00 log_k_cyan_free 0.0000 0.00 0.00 log_k_cyan_free_bound 0.0000 0.00 0.00 log_k_cyan_bound_free 0.0000 0.00 0.00 log_k_JCZ38 0.0000 0.00 0.00 log_k_J9Z38 0.0000 0.00 0.00 log_k_JSE76 0.0000 0.00 0.00 f_cyan_ilr_1 0.6852 0.00 0.00 f_cyan_ilr_2 0.0000 1.28 0.00 f_JCZ38_qlogis 0.0000 0.00 16.13 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2401 2394 -1181 Optimised parameters: est. lower upper cyan_free_0 102.8136 NA NA log_k_cyan_free -2.7935 NA NA log_k_cyan_free_bound -2.5440 NA NA log_k_cyan_bound_free -3.4303 NA NA log_k_JCZ38 -3.5010 NA NA log_k_J9Z38 -5.1226 NA NA log_k_JSE76 -5.6314 NA NA f_cyan_ilr_1 0.6609 NA NA f_cyan_ilr_2 0.5085 NA NA f_JCZ38_qlogis 44.0153 NA NA a.1 3.2318 NA NA SD.log_k_cyan_free 0.3211 NA NA SD.log_k_cyan_free_bound 0.8408 NA NA SD.log_k_cyan_bound_free 0.5724 NA NA SD.log_k_JCZ38 1.4925 NA NA SD.log_k_J9Z38 0.5816 NA NA SD.log_k_JSE76 0.6037 NA NA SD.f_cyan_ilr_1 0.3115 NA NA SD.f_cyan_ilr_2 0.3436 NA NA SD.f_JCZ38_qlogis 4.8937 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_cyan_free 0.3211 NA NA SD.log_k_cyan_free_bound 0.8408 NA NA SD.log_k_cyan_bound_free 0.5724 NA NA SD.log_k_JCZ38 1.4925 NA NA SD.log_k_J9Z38 0.5816 NA NA SD.log_k_JSE76 0.6037 NA NA SD.f_cyan_ilr_1 0.3115 NA NA SD.f_cyan_ilr_2 0.3436 NA NA SD.f_JCZ38_qlogis 4.8937 NA NA Variance model: est. lower upper a.1 3.232 NA NA Backtransformed parameters: est. lower upper cyan_free_0 1.028e+02 NA NA k_cyan_free 6.120e-02 NA NA k_cyan_free_bound 7.855e-02 NA NA k_cyan_bound_free 3.238e-02 NA NA k_JCZ38 3.017e-02 NA NA k_J9Z38 5.961e-03 NA NA k_JSE76 3.584e-03 NA NA f_cyan_free_to_JCZ38 5.784e-01 NA NA f_cyan_free_to_J9Z38 2.271e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.15973 0.01241 0.33124 Resulting formation fractions: ff cyan_free_JCZ38 0.5784 cyan_free_J9Z38 0.2271 cyan_free_sink 0.1945 cyan_free 1.0000 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 24.51 153.18 46.11 4.34 55.87 JCZ38 22.98 76.33 NA NA NA J9Z38 116.28 386.29 NA NA NA JSE76 193.42 642.53 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:31:58 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 677.936 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 101.3964 -2.9881 -2.7949 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.4376 -3.3626 -4.9792 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -5.8727 0.6814 6.7399 f_JCZ38_qlogis 13.7395 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 5.317 0.0000 0.000 log_k_cyan_free 0.000 0.7301 0.000 log_k_cyan_free_bound 0.000 0.0000 1.384 log_k_cyan_bound_free 0.000 0.0000 0.000 log_k_JCZ38 0.000 0.0000 0.000 log_k_J9Z38 0.000 0.0000 0.000 log_k_JSE76 0.000 0.0000 0.000 f_cyan_ilr_1 0.000 0.0000 0.000 f_cyan_ilr_2 0.000 0.0000 0.000 f_JCZ38_qlogis 0.000 0.0000 0.000 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.000 0.000 0.000 log_k_cyan_free 0.000 0.000 0.000 0.000 log_k_cyan_free_bound 0.000 0.000 0.000 0.000 log_k_cyan_bound_free 1.109 0.000 0.000 0.000 log_k_JCZ38 0.000 2.272 0.000 0.000 log_k_J9Z38 0.000 0.000 1.633 0.000 log_k_JSE76 0.000 0.000 0.000 1.271 f_cyan_ilr_1 0.000 0.000 0.000 0.000 f_cyan_ilr_2 0.000 0.000 0.000 0.000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis cyan_free_0 0.0000 0.00 0.00 log_k_cyan_free 0.0000 0.00 0.00 log_k_cyan_free_bound 0.0000 0.00 0.00 log_k_cyan_bound_free 0.0000 0.00 0.00 log_k_JCZ38 0.0000 0.00 0.00 log_k_J9Z38 0.0000 0.00 0.00 log_k_JSE76 0.0000 0.00 0.00 f_cyan_ilr_1 0.6838 0.00 0.00 f_cyan_ilr_2 0.0000 11.69 0.00 f_JCZ38_qlogis 0.0000 0.00 16.13 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2400 2392 -1180 Optimised parameters: est. lower upper cyan_free_0 100.56004 NA NA log_k_cyan_free -3.12657 NA NA log_k_cyan_free_bound -3.16825 NA NA log_k_cyan_bound_free -3.66003 NA NA log_k_JCZ38 -3.47278 NA NA log_k_J9Z38 -5.06823 NA NA log_k_JSE76 -5.54327 NA NA f_cyan_ilr_1 0.66631 NA NA f_cyan_ilr_2 0.82898 NA NA f_JCZ38_qlogis 38.31115 NA NA a.1 2.98352 NA NA b.1 0.04388 NA NA SD.log_k_cyan_free 0.49145 NA NA SD.log_k_cyan_bound_free 0.27347 NA NA SD.log_k_JCZ38 1.41193 NA NA SD.log_k_J9Z38 0.66073 NA NA SD.log_k_JSE76 0.55885 NA NA SD.f_cyan_ilr_1 0.33020 NA NA SD.f_cyan_ilr_2 0.51367 NA NA SD.f_JCZ38_qlogis 5.52122 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_cyan_free 0.4914 NA NA SD.log_k_cyan_bound_free 0.2735 NA NA SD.log_k_JCZ38 1.4119 NA NA SD.log_k_J9Z38 0.6607 NA NA SD.log_k_JSE76 0.5589 NA NA SD.f_cyan_ilr_1 0.3302 NA NA SD.f_cyan_ilr_2 0.5137 NA NA SD.f_JCZ38_qlogis 5.5212 NA NA Variance model: est. lower upper a.1 2.98352 NA NA b.1 0.04388 NA NA Backtransformed parameters: est. lower upper cyan_free_0 1.006e+02 NA NA k_cyan_free 4.387e-02 NA NA k_cyan_free_bound 4.208e-02 NA NA k_cyan_bound_free 2.573e-02 NA NA k_JCZ38 3.103e-02 NA NA k_J9Z38 6.294e-03 NA NA k_JSE76 3.914e-03 NA NA f_cyan_free_to_JCZ38 6.188e-01 NA NA f_cyan_free_to_J9Z38 2.412e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.10044 0.01124 0.36580 Resulting formation fractions: ff cyan_free_JCZ38 0.6188 cyan_free_J9Z38 0.2412 cyan_free_sink 0.1400 cyan_free 1.0000 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 26.05 164.4 49.48 6.901 61.67 JCZ38 22.34 74.2 NA NA NA J9Z38 110.14 365.9 NA NA NA JSE76 177.11 588.3 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:29:18 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ifelse(time <= tb, k1, k2) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ifelse(time <= tb, k1, k2) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * ifelse(time <= tb, k1, k2) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 518.128 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.8845 -3.4495 -4.9355 -5.6040 0.6468 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 log_tb 1.2396 9.7220 -2.9079 -4.1810 1.7813 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.406 0.00 0.00 0.000 0.0000 log_k_JCZ38 0.000 2.33 0.00 0.000 0.0000 log_k_J9Z38 0.000 0.00 1.59 0.000 0.0000 log_k_JSE76 0.000 0.00 0.00 1.013 0.0000 f_cyan_ilr_1 0.000 0.00 0.00 0.000 0.6367 f_cyan_ilr_2 0.000 0.00 0.00 0.000 0.0000 f_JCZ38_qlogis 0.000 0.00 0.00 0.000 0.0000 log_k1 0.000 0.00 0.00 0.000 0.0000 log_k2 0.000 0.00 0.00 0.000 0.0000 log_tb 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 log_tb cyan_0 0.000 0.00 0.0000 0.0000 0.0000 log_k_JCZ38 0.000 0.00 0.0000 0.0000 0.0000 log_k_J9Z38 0.000 0.00 0.0000 0.0000 0.0000 log_k_JSE76 0.000 0.00 0.0000 0.0000 0.0000 f_cyan_ilr_1 0.000 0.00 0.0000 0.0000 0.0000 f_cyan_ilr_2 2.038 0.00 0.0000 0.0000 0.0000 f_JCZ38_qlogis 0.000 10.33 0.0000 0.0000 0.0000 log_k1 0.000 0.00 0.7006 0.0000 0.0000 log_k2 0.000 0.00 0.0000 0.8928 0.0000 log_tb 0.000 0.00 0.0000 0.0000 0.6773 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2427 2419 -1194 Optimised parameters: est. lower upper cyan_0 101.9660 1.005e+02 1.035e+02 log_k_JCZ38 -3.4698 -4.716e+00 -2.224e+00 log_k_J9Z38 -5.0947 -5.740e+00 -4.450e+00 log_k_JSE76 -5.5977 -6.321e+00 -4.875e+00 f_cyan_ilr_1 0.6595 3.734e-01 9.456e-01 f_cyan_ilr_2 0.5905 1.664e-01 1.015e+00 f_JCZ38_qlogis 25.8627 -4.224e+05 4.225e+05 log_k1 -3.0884 -3.453e+00 -2.723e+00 log_k2 -4.3877 -4.778e+00 -3.998e+00 log_tb 2.3057 1.715e+00 2.896e+00 a.1 3.3228 NA NA SD.log_k_JCZ38 1.4071 NA NA SD.log_k_J9Z38 0.5774 NA NA SD.log_k_JSE76 0.6214 NA NA SD.f_cyan_ilr_1 0.3058 NA NA SD.f_cyan_ilr_2 0.3470 NA NA SD.f_JCZ38_qlogis 0.0644 NA NA SD.log_k1 0.3994 NA NA SD.log_k2 0.4373 NA NA SD.log_tb 0.6419 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.4071 NA NA SD.log_k_J9Z38 0.5774 NA NA SD.log_k_JSE76 0.6214 NA NA SD.f_cyan_ilr_1 0.3058 NA NA SD.f_cyan_ilr_2 0.3470 NA NA SD.f_JCZ38_qlogis 0.0644 NA NA SD.log_k1 0.3994 NA NA SD.log_k2 0.4373 NA NA SD.log_tb 0.6419 NA NA Variance model: est. lower upper a.1 3.323 NA NA Backtransformed parameters: est. lower upper cyan_0 1.020e+02 1.005e+02 1.035e+02 k_JCZ38 3.112e-02 8.951e-03 1.082e-01 k_J9Z38 6.129e-03 3.216e-03 1.168e-02 k_JSE76 3.706e-03 1.798e-03 7.639e-03 f_cyan_to_JCZ38 5.890e-01 NA NA f_cyan_to_J9Z38 2.318e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 0.000e+00 1.000e+00 k1 4.558e-02 3.164e-02 6.565e-02 k2 1.243e-02 8.417e-03 1.835e-02 tb 1.003e+01 5.557e+00 1.811e+01 Resulting formation fractions: ff cyan_JCZ38 5.890e-01 cyan_J9Z38 2.318e-01 cyan_sink 1.793e-01 JCZ38_JSE76 1.000e+00 JCZ38_sink 5.861e-12 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 29.02 158.51 47.72 15.21 55.77 JCZ38 22.27 73.98 NA NA NA J9Z38 113.09 375.69 NA NA NA JSE76 187.01 621.23 NA NA NA"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"pathway-2","dir":"Articles > Prebuilt","previous_headings":"Appendix > Hierarchical fit listings","what":"Pathway 2","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"Hierarchical FOMC path 2 fit two-component error Hierarchical DFOP path 2 fit constant variance Hierarchical DFOP path 2 fit two-component error Hierarchical SFORB path 2 fit constant variance Hierarchical SFORB path 2 fit two-component error","code":"saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:40:28 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - (alpha/beta) * 1/((time/beta) + 1) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 499.317 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.4477 -1.8631 -5.1087 -2.5114 0.6826 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta 4.7944 15.9616 13.1566 -0.1564 2.9781 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 7.701 0.000 0.000 0.000 0.0000 log_k_JCZ38 0.000 1.448 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.724 0.000 0.0000 log_k_JSE76 0.000 0.000 0.000 3.659 0.0000 f_cyan_ilr_1 0.000 0.000 0.000 0.000 0.6356 f_cyan_ilr_2 0.000 0.000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 0.0000 f_JSE76_qlogis 0.000 0.000 0.000 0.000 0.0000 log_alpha 0.000 0.000 0.000 0.000 0.0000 log_beta 0.000 0.000 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta cyan_0 0.00 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 10.32 0.00 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 12.23 0.00 0.0000 0.0000 f_JSE76_qlogis 0.00 0.00 14.99 0.0000 0.0000 log_alpha 0.00 0.00 0.00 0.3924 0.0000 log_beta 0.00 0.00 0.00 0.0000 0.5639 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2249 2241 -1104 Optimised parameters: est. lower upper cyan_0 101.55265 9.920e+01 103.90593 log_k_JCZ38 -2.32302 -2.832e+00 -1.81416 log_k_J9Z38 -5.13082 -5.942e+00 -4.31990 log_k_JSE76 -3.01756 -4.262e+00 -1.77360 f_cyan_ilr_1 0.70850 3.657e-01 1.05135 f_cyan_ilr_2 0.95775 2.612e-01 1.65432 f_JCZ38_qlogis 3.86105 9.248e-01 6.79733 f_JSE76_qlogis 7.51583 -1.120e+02 127.03921 log_alpha -0.15308 -4.508e-01 0.14462 log_beta 2.99165 2.711e+00 3.27202 a.1 2.04034 1.811e+00 2.26968 b.1 0.06924 5.745e-02 0.08104 SD.log_k_JCZ38 0.50818 1.390e-01 0.87736 SD.log_k_J9Z38 0.86597 2.652e-01 1.46671 SD.log_k_JSE76 1.38092 4.864e-01 2.27541 SD.f_cyan_ilr_1 0.38204 1.354e-01 0.62864 SD.f_cyan_ilr_2 0.55129 7.198e-02 1.03060 SD.f_JCZ38_qlogis 1.88457 1.710e-02 3.75205 SD.f_JSE76_qlogis 2.64018 -2.450e+03 2455.27887 SD.log_alpha 0.31860 1.047e-01 0.53249 SD.log_beta 0.24195 1.273e-02 0.47117 Correlation: cyan_0 l__JCZ3 l__J9Z3 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 f_JSE76 log_k_JCZ38 -0.0235 log_k_J9Z38 -0.0442 0.0047 log_k_JSE76 -0.0023 0.0966 0.0006 f_cyan_ilr_1 -0.0032 0.0070 -0.0536 -0.0001 f_cyan_ilr_2 -0.5189 0.0452 0.1152 0.0013 -0.0304 f_JCZ38_qlogis 0.1088 -0.0848 -0.0240 0.0040 -0.0384 -0.2303 f_JSE76_qlogis -0.0545 0.1315 0.0195 0.0020 0.0252 0.1737 -0.5939 log_alpha -0.0445 0.0056 0.0261 0.0019 -0.0055 0.0586 -0.0239 -0.0284 log_beta -0.2388 0.0163 0.0566 0.0040 -0.0078 0.2183 -0.0714 -0.0332 log_lph log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta 0.2135 Random effects: est. lower upper SD.log_k_JCZ38 0.5082 1.390e-01 0.8774 SD.log_k_J9Z38 0.8660 2.652e-01 1.4667 SD.log_k_JSE76 1.3809 4.864e-01 2.2754 SD.f_cyan_ilr_1 0.3820 1.354e-01 0.6286 SD.f_cyan_ilr_2 0.5513 7.198e-02 1.0306 SD.f_JCZ38_qlogis 1.8846 1.710e-02 3.7520 SD.f_JSE76_qlogis 2.6402 -2.450e+03 2455.2789 SD.log_alpha 0.3186 1.047e-01 0.5325 SD.log_beta 0.2420 1.273e-02 0.4712 Variance model: est. lower upper a.1 2.04034 1.81101 2.26968 b.1 0.06924 0.05745 0.08104 Backtransformed parameters: est. lower upper cyan_0 1.016e+02 9.920e+01 103.9059 k_JCZ38 9.798e-02 5.890e-02 0.1630 k_J9Z38 5.912e-03 2.627e-03 0.0133 k_JSE76 4.892e-02 1.410e-02 0.1697 f_cyan_to_JCZ38 6.432e-01 NA NA f_cyan_to_J9Z38 2.362e-01 NA NA f_JCZ38_to_JSE76 9.794e-01 7.160e-01 0.9989 f_JSE76_to_JCZ38 9.995e-01 2.268e-49 1.0000 alpha 8.581e-01 6.371e-01 1.1556 beta 1.992e+01 1.505e+01 26.3646 Resulting formation fractions: ff cyan_JCZ38 0.6432301 cyan_J9Z38 0.2361657 cyan_sink 0.1206042 JCZ38_JSE76 0.9793879 JCZ38_sink 0.0206121 JSE76_JCZ38 0.9994559 JSE76_sink 0.0005441 Estimated disappearance times: DT50 DT90 DT50back cyan 24.759 271.61 81.76 JCZ38 7.075 23.50 NA J9Z38 117.249 389.49 NA JSE76 14.169 47.07 NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:41:25 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 555.724 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.4380 -2.3107 -5.3123 -3.7120 0.6757 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 1.1439 13.1194 12.3492 -1.9317 -4.4557 g_qlogis -0.5644 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 4.591 0.0000 0.000 0.0 0.0000 log_k_JCZ38 0.000 0.7966 0.000 0.0 0.0000 log_k_J9Z38 0.000 0.0000 1.561 0.0 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.8 0.0000 f_cyan_ilr_1 0.000 0.0000 0.000 0.0 0.6349 f_cyan_ilr_2 0.000 0.0000 0.000 0.0 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0 0.0000 f_JSE76_qlogis 0.000 0.0000 0.000 0.0 0.0000 log_k1 0.000 0.0000 0.000 0.0 0.0000 log_k2 0.000 0.0000 0.000 0.0 0.0000 g_qlogis 0.000 0.0000 0.000 0.0 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 cyan_0 0.000 0.00 0.00 0.000 0.0000 log_k_JCZ38 0.000 0.00 0.00 0.000 0.0000 log_k_J9Z38 0.000 0.00 0.00 0.000 0.0000 log_k_JSE76 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_1 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_2 1.797 0.00 0.00 0.000 0.0000 f_JCZ38_qlogis 0.000 13.86 0.00 0.000 0.0000 f_JSE76_qlogis 0.000 0.00 13.91 0.000 0.0000 log_k1 0.000 0.00 0.00 1.106 0.0000 log_k2 0.000 0.00 0.00 0.000 0.6141 g_qlogis 0.000 0.00 0.00 0.000 0.0000 g_qlogis cyan_0 0.000 log_k_JCZ38 0.000 log_k_J9Z38 0.000 log_k_JSE76 0.000 f_cyan_ilr_1 0.000 f_cyan_ilr_2 0.000 f_JCZ38_qlogis 0.000 f_JSE76_qlogis 0.000 log_k1 0.000 log_k2 0.000 g_qlogis 1.595 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2288 2280 -1122 Optimised parameters: est. lower upper cyan_0 102.7204 1.014e+02 1.040e+02 log_k_JCZ38 -2.8925 -4.044e+00 -1.741e+00 log_k_J9Z38 -5.1430 -5.828e+00 -4.457e+00 log_k_JSE76 -3.5577 -4.174e+00 -2.941e+00 f_cyan_ilr_1 0.6929 3.788e-01 1.007e+00 f_cyan_ilr_2 0.6066 5.342e-02 1.160e+00 f_JCZ38_qlogis 9.8071 -2.819e+03 2.838e+03 f_JSE76_qlogis 2.2229 5.684e-01 3.877e+00 log_k1 -1.9339 -2.609e+00 -1.258e+00 log_k2 -4.4709 -4.935e+00 -4.007e+00 g_qlogis -0.4987 -1.373e+00 3.757e-01 a.1 2.7368 2.545e+00 2.928e+00 SD.log_k_JCZ38 1.2747 4.577e-01 2.092e+00 SD.log_k_J9Z38 0.6758 1.418e-01 1.210e+00 SD.log_k_JSE76 0.5869 1.169e-01 1.057e+00 SD.f_cyan_ilr_1 0.3392 1.161e-01 5.622e-01 SD.f_cyan_ilr_2 0.4200 8.501e-02 7.550e-01 SD.f_JCZ38_qlogis 0.8511 -1.137e+06 1.137e+06 SD.f_JSE76_qlogis 0.3767 -5.238e-01 1.277e+00 SD.log_k1 0.7475 2.601e-01 1.235e+00 SD.log_k2 0.5179 1.837e-01 8.521e-01 SD.g_qlogis 0.9817 3.553e-01 1.608e+00 Correlation: cyan_0 l__JCZ3 l__J9Z3 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 f_JSE76 log_k_JCZ38 -0.0351 log_k_J9Z38 -0.0541 0.0043 log_k_JSE76 -0.0078 0.0900 -0.0014 f_cyan_ilr_1 -0.0249 0.0268 -0.0962 0.0000 f_cyan_ilr_2 -0.3560 0.0848 0.1545 -0.0022 0.0463 f_JCZ38_qlogis 0.2005 -0.1226 -0.0347 0.0514 -0.1840 -0.5906 f_JSE76_qlogis -0.1638 0.1307 0.0266 0.0001 0.1645 0.5181 -0.9297 log_k1 0.0881 -0.0071 0.0005 -0.0070 -0.0064 -0.0346 0.0316 -0.0341 log_k2 0.0238 -0.0003 0.0082 -0.0022 -0.0017 -0.0017 -0.0002 -0.0076 g_qlogis 0.0198 -0.0002 -0.0109 0.0034 0.0017 -0.0176 0.0044 0.0051 log_k1 log_k2 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 0.0276 g_qlogis -0.0283 -0.0309 Random effects: est. lower upper SD.log_k_JCZ38 1.2747 4.577e-01 2.092e+00 SD.log_k_J9Z38 0.6758 1.418e-01 1.210e+00 SD.log_k_JSE76 0.5869 1.169e-01 1.057e+00 SD.f_cyan_ilr_1 0.3392 1.161e-01 5.622e-01 SD.f_cyan_ilr_2 0.4200 8.501e-02 7.550e-01 SD.f_JCZ38_qlogis 0.8511 -1.137e+06 1.137e+06 SD.f_JSE76_qlogis 0.3767 -5.238e-01 1.277e+00 SD.log_k1 0.7475 2.601e-01 1.235e+00 SD.log_k2 0.5179 1.837e-01 8.521e-01 SD.g_qlogis 0.9817 3.553e-01 1.608e+00 Variance model: est. lower upper a.1 2.737 2.545 2.928 Backtransformed parameters: est. lower upper cyan_0 102.72037 1.014e+02 104.00464 k_JCZ38 0.05544 1.752e-02 0.17539 k_J9Z38 0.00584 2.942e-03 0.01159 k_JSE76 0.02850 1.539e-02 0.05279 f_cyan_to_JCZ38 0.59995 NA NA f_cyan_to_J9Z38 0.22519 NA NA f_JCZ38_to_JSE76 0.99994 0.000e+00 1.00000 f_JSE76_to_JCZ38 0.90229 6.384e-01 0.97971 k1 0.14459 7.357e-02 0.28414 k2 0.01144 7.192e-03 0.01819 g 0.37784 2.021e-01 0.59284 Resulting formation fractions: ff cyan_JCZ38 5.999e-01 cyan_J9Z38 2.252e-01 cyan_sink 1.749e-01 JCZ38_JSE76 9.999e-01 JCZ38_sink 5.506e-05 JSE76_JCZ38 9.023e-01 JSE76_sink 9.771e-02 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 21.93 159.83 48.11 4.794 60.6 JCZ38 12.50 41.53 NA NA NA J9Z38 118.69 394.27 NA NA NA JSE76 24.32 80.78 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:44:08 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 718.988 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.7393 -1.4493 -5.0118 -2.1269 0.6720 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 7.3362 13.4423 13.2659 -2.0061 -4.5527 g_qlogis -0.5806 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.604 0.00 0.000 0.000 0.0000 log_k_JCZ38 0.000 2.77 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.00 1.662 0.000 0.0000 log_k_JSE76 0.000 0.00 0.000 5.021 0.0000 f_cyan_ilr_1 0.000 0.00 0.000 0.000 0.6519 f_cyan_ilr_2 0.000 0.00 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.00 0.000 0.000 0.0000 f_JSE76_qlogis 0.000 0.00 0.000 0.000 0.0000 log_k1 0.000 0.00 0.000 0.000 0.0000 log_k2 0.000 0.00 0.000 0.000 0.0000 g_qlogis 0.000 0.00 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 cyan_0 0.00 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 13.37 0.00 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 14.21 0.00 0.0000 0.0000 f_JSE76_qlogis 0.00 0.00 14.58 0.0000 0.0000 log_k1 0.00 0.00 0.00 0.8453 0.0000 log_k2 0.00 0.00 0.00 0.0000 0.5969 g_qlogis 0.00 0.00 0.00 0.0000 0.0000 g_qlogis cyan_0 0.00 log_k_JCZ38 0.00 log_k_J9Z38 0.00 log_k_JSE76 0.00 f_cyan_ilr_1 0.00 f_cyan_ilr_2 0.00 f_JCZ38_qlogis 0.00 f_JSE76_qlogis 0.00 log_k1 0.00 log_k2 0.00 g_qlogis 1.69 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2234 2226 -1095 Optimised parameters: est. lower upper cyan_0 101.25496 99.14662 103.36331 log_k_JCZ38 -2.55593 -3.32972 -1.78215 log_k_J9Z38 -5.07103 -5.85423 -4.28783 log_k_JSE76 -3.25468 -4.17577 -2.33360 f_cyan_ilr_1 0.70139 0.35924 1.04355 f_cyan_ilr_2 1.07712 0.17789 1.97636 f_JCZ38_qlogis 3.57483 0.05990 7.08976 f_JSE76_qlogis 4.54884 -7.25628 16.35395 log_k1 -2.38201 -2.51639 -2.24763 log_k2 -4.66741 -4.91865 -4.41617 g_qlogis -0.28446 -1.14192 0.57300 a.1 2.05925 1.83267 2.28582 b.1 0.06172 0.05076 0.07268 SD.log_k_JCZ38 0.81137 0.25296 1.36977 SD.log_k_J9Z38 0.83542 0.25396 1.41689 SD.log_k_JSE76 0.97903 0.30100 1.65707 SD.f_cyan_ilr_1 0.37878 0.13374 0.62382 SD.f_cyan_ilr_2 0.67274 0.10102 1.24446 SD.f_JCZ38_qlogis 1.35327 -0.42361 3.13015 SD.f_JSE76_qlogis 1.43956 -19.15140 22.03052 SD.log_k2 0.25329 0.07521 0.43138 SD.g_qlogis 0.95167 0.35149 1.55184 Correlation: cyan_0 l__JCZ3 l__J9Z3 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 f_JSE76 log_k_JCZ38 -0.0265 log_k_J9Z38 -0.0392 0.0024 log_k_JSE76 0.0011 0.1220 -0.0016 f_cyan_ilr_1 -0.0161 0.0217 -0.0552 0.0034 f_cyan_ilr_2 -0.4718 0.0829 0.1102 0.0042 0.0095 f_JCZ38_qlogis 0.1609 -0.1318 -0.0277 0.0081 -0.1040 -0.4559 f_JSE76_qlogis -0.1289 0.1494 0.0219 0.0012 0.1004 0.4309 -0.8543 log_k1 0.2618 -0.0739 -0.0167 -0.0148 -0.0444 -0.2768 0.3518 -0.3818 log_k2 0.0603 -0.0217 0.0174 -0.0058 -0.0197 -0.0533 0.0923 -0.1281 g_qlogis 0.0362 0.0115 -0.0111 0.0040 0.0095 -0.0116 -0.0439 0.0651 log_k1 log_k2 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 0.3269 g_qlogis -0.1656 -0.0928 Random effects: est. lower upper SD.log_k_JCZ38 0.8114 0.25296 1.3698 SD.log_k_J9Z38 0.8354 0.25396 1.4169 SD.log_k_JSE76 0.9790 0.30100 1.6571 SD.f_cyan_ilr_1 0.3788 0.13374 0.6238 SD.f_cyan_ilr_2 0.6727 0.10102 1.2445 SD.f_JCZ38_qlogis 1.3533 -0.42361 3.1301 SD.f_JSE76_qlogis 1.4396 -19.15140 22.0305 SD.log_k2 0.2533 0.07521 0.4314 SD.g_qlogis 0.9517 0.35149 1.5518 Variance model: est. lower upper a.1 2.05925 1.83267 2.28582 b.1 0.06172 0.05076 0.07268 Backtransformed parameters: est. lower upper cyan_0 1.013e+02 9.915e+01 103.36331 k_JCZ38 7.762e-02 3.580e-02 0.16828 k_J9Z38 6.276e-03 2.868e-03 0.01373 k_JSE76 3.859e-02 1.536e-02 0.09695 f_cyan_to_JCZ38 6.520e-01 NA NA f_cyan_to_J9Z38 2.418e-01 NA NA f_JCZ38_to_JSE76 9.727e-01 5.150e-01 0.99917 f_JSE76_to_JCZ38 9.895e-01 7.052e-04 1.00000 k1 9.236e-02 8.075e-02 0.10565 k2 9.397e-03 7.309e-03 0.01208 g 4.294e-01 2.420e-01 0.63945 Resulting formation fractions: ff cyan_JCZ38 0.65203 cyan_J9Z38 0.24181 cyan_sink 0.10616 JCZ38_JSE76 0.97274 JCZ38_sink 0.02726 JSE76_JCZ38 0.98953 JSE76_sink 0.01047 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 24.26 185.34 55.79 7.504 73.77 JCZ38 8.93 29.66 NA NA NA J9Z38 110.45 366.89 NA NA NA JSE76 17.96 59.66 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:41:22 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 553.276 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 102.4395 -2.7673 -2.8942 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.6201 -2.3107 -5.3123 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -3.7120 0.6754 1.1448 f_JCZ38_qlogis f_JSE76_qlogis 14.8408 15.4734 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 4.589 0.0000 0.00 log_k_cyan_free 0.000 0.4849 0.00 log_k_cyan_free_bound 0.000 0.0000 1.62 log_k_cyan_bound_free 0.000 0.0000 0.00 log_k_JCZ38 0.000 0.0000 0.00 log_k_J9Z38 0.000 0.0000 0.00 log_k_JSE76 0.000 0.0000 0.00 f_cyan_ilr_1 0.000 0.0000 0.00 f_cyan_ilr_2 0.000 0.0000 0.00 f_JCZ38_qlogis 0.000 0.0000 0.00 f_JSE76_qlogis 0.000 0.0000 0.00 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.0000 0.000 0.0 log_k_cyan_free 0.000 0.0000 0.000 0.0 log_k_cyan_free_bound 0.000 0.0000 0.000 0.0 log_k_cyan_bound_free 1.197 0.0000 0.000 0.0 log_k_JCZ38 0.000 0.7966 0.000 0.0 log_k_J9Z38 0.000 0.0000 1.561 0.0 log_k_JSE76 0.000 0.0000 0.000 0.8 f_cyan_ilr_1 0.000 0.0000 0.000 0.0 f_cyan_ilr_2 0.000 0.0000 0.000 0.0 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0 f_JSE76_qlogis 0.000 0.0000 0.000 0.0 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis cyan_free_0 0.0000 0.000 0.0 0.00 log_k_cyan_free 0.0000 0.000 0.0 0.00 log_k_cyan_free_bound 0.0000 0.000 0.0 0.00 log_k_cyan_bound_free 0.0000 0.000 0.0 0.00 log_k_JCZ38 0.0000 0.000 0.0 0.00 log_k_J9Z38 0.0000 0.000 0.0 0.00 log_k_JSE76 0.0000 0.000 0.0 0.00 f_cyan_ilr_1 0.6349 0.000 0.0 0.00 f_cyan_ilr_2 0.0000 1.797 0.0 0.00 f_JCZ38_qlogis 0.0000 0.000 15.6 0.00 f_JSE76_qlogis 0.0000 0.000 0.0 17.52 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2283 2275 -1120 Optimised parameters: est. lower upper cyan_free_0 102.6517 101.40815 103.8952 log_k_cyan_free -2.8729 -3.18649 -2.5593 log_k_cyan_free_bound -2.7803 -3.60525 -1.9552 log_k_cyan_bound_free -3.5845 -4.16644 -3.0026 log_k_JCZ38 -2.3411 -2.89698 -1.7852 log_k_J9Z38 -5.2487 -6.01271 -4.4847 log_k_JSE76 -3.0259 -4.28274 -1.7690 f_cyan_ilr_1 0.7289 0.38214 1.0756 f_cyan_ilr_2 0.6891 0.18277 1.1954 f_JCZ38_qlogis 4.2162 0.47015 7.9622 f_JSE76_qlogis 5.8911 -20.19088 31.9730 a.1 2.7159 2.52587 2.9060 SD.log_k_cyan_free 0.3354 0.10979 0.5610 SD.log_k_cyan_free_bound 0.9061 0.30969 1.5025 SD.log_k_cyan_bound_free 0.6376 0.21229 1.0628 SD.log_k_JCZ38 0.5499 0.14533 0.9545 SD.log_k_J9Z38 0.7457 0.15106 1.3404 SD.log_k_JSE76 1.3822 0.47329 2.2912 SD.f_cyan_ilr_1 0.3820 0.13280 0.6313 SD.f_cyan_ilr_2 0.4317 0.06803 0.7953 SD.f_JCZ38_qlogis 1.8258 -0.25423 3.9059 SD.f_JSE76_qlogis 2.2348 -83.33679 87.8065 Correlation: cyn_f_0 lg_k_c_ lg_k_cyn_f_ lg_k_cyn_b_ l__JCZ3 l__J9Z3 log_k_cyan_free 0.1944 log_k_cyan_free_bound 0.0815 0.0814 log_k_cyan_bound_free 0.0106 0.0426 0.0585 log_k_JCZ38 -0.0231 -0.0106 -0.0089 -0.0051 log_k_J9Z38 -0.0457 -0.0108 0.0019 0.0129 0.0032 log_k_JSE76 -0.0054 -0.0024 -0.0017 -0.0005 0.1108 0.0009 f_cyan_ilr_1 0.0051 -0.0005 -0.0035 -0.0056 0.0131 -0.0967 f_cyan_ilr_2 -0.3182 -0.0771 -0.0309 -0.0038 0.0680 0.1643 f_JCZ38_qlogis 0.0834 0.0369 0.0302 0.0172 -0.1145 -0.0204 f_JSE76_qlogis -0.0553 -0.0365 -0.0441 -0.0414 0.1579 0.0175 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 log_k_cyan_free log_k_cyan_free_bound log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 -0.0002 f_cyan_ilr_2 0.0020 -0.0415 f_JCZ38_qlogis 0.0052 -0.0665 -0.3437 f_JSE76_qlogis 0.0066 0.0635 0.3491 -0.7487 Random effects: est. lower upper SD.log_k_cyan_free 0.3354 0.10979 0.5610 SD.log_k_cyan_free_bound 0.9061 0.30969 1.5025 SD.log_k_cyan_bound_free 0.6376 0.21229 1.0628 SD.log_k_JCZ38 0.5499 0.14533 0.9545 SD.log_k_J9Z38 0.7457 0.15106 1.3404 SD.log_k_JSE76 1.3822 0.47329 2.2912 SD.f_cyan_ilr_1 0.3820 0.13280 0.6313 SD.f_cyan_ilr_2 0.4317 0.06803 0.7953 SD.f_JCZ38_qlogis 1.8258 -0.25423 3.9059 SD.f_JSE76_qlogis 2.2348 -83.33679 87.8065 Variance model: est. lower upper a.1 2.716 2.526 2.906 Backtransformed parameters: est. lower upper cyan_free_0 1.027e+02 1.014e+02 103.89517 k_cyan_free 5.654e-02 4.132e-02 0.07736 k_cyan_free_bound 6.202e-02 2.718e-02 0.14153 k_cyan_bound_free 2.775e-02 1.551e-02 0.04966 k_JCZ38 9.622e-02 5.519e-02 0.16777 k_J9Z38 5.254e-03 2.447e-03 0.01128 k_JSE76 4.852e-02 1.380e-02 0.17051 f_cyan_free_to_JCZ38 6.197e-01 5.643e-01 0.84429 f_cyan_free_to_J9Z38 2.211e-01 5.643e-01 0.84429 f_JCZ38_to_JSE76 9.855e-01 6.154e-01 0.99965 f_JSE76_to_JCZ38 9.972e-01 1.703e-09 1.00000 Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.13466 0.01165 0.36490 Resulting formation fractions: ff cyan_free_JCZ38 0.619745 cyan_free_J9Z38 0.221083 cyan_free_sink 0.159172 cyan_free 1.000000 JCZ38_JSE76 0.985460 JCZ38_sink 0.014540 JSE76_JCZ38 0.997244 JSE76_sink 0.002756 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 23.293 158.67 47.77 5.147 59.5 JCZ38 7.203 23.93 NA NA NA J9Z38 131.918 438.22 NA NA NA JSE76 14.287 47.46 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:44:02 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 713.14 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 101.7511 -2.8370 -3.0162 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.6600 -2.2988 -5.3129 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -3.6991 0.6722 4.8596 f_JCZ38_qlogis f_JSE76_qlogis 13.4678 14.2149 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 5.629 0.000 0.000 log_k_cyan_free 0.000 0.446 0.000 log_k_cyan_free_bound 0.000 0.000 1.449 log_k_cyan_bound_free 0.000 0.000 0.000 log_k_JCZ38 0.000 0.000 0.000 log_k_J9Z38 0.000 0.000 0.000 log_k_JSE76 0.000 0.000 0.000 f_cyan_ilr_1 0.000 0.000 0.000 f_cyan_ilr_2 0.000 0.000 0.000 f_JCZ38_qlogis 0.000 0.000 0.000 f_JSE76_qlogis 0.000 0.000 0.000 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.0000 0.000 0.0000 log_k_cyan_free 0.000 0.0000 0.000 0.0000 log_k_cyan_free_bound 0.000 0.0000 0.000 0.0000 log_k_cyan_bound_free 1.213 0.0000 0.000 0.0000 log_k_JCZ38 0.000 0.7801 0.000 0.0000 log_k_J9Z38 0.000 0.0000 1.575 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.8078 f_cyan_ilr_1 0.000 0.0000 0.000 0.0000 f_cyan_ilr_2 0.000 0.0000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0000 f_JSE76_qlogis 0.000 0.0000 0.000 0.0000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis cyan_free_0 0.0000 0.000 0.00 0.00 log_k_cyan_free 0.0000 0.000 0.00 0.00 log_k_cyan_free_bound 0.0000 0.000 0.00 0.00 log_k_cyan_bound_free 0.0000 0.000 0.00 0.00 log_k_JCZ38 0.0000 0.000 0.00 0.00 log_k_J9Z38 0.0000 0.000 0.00 0.00 log_k_JSE76 0.0000 0.000 0.00 0.00 f_cyan_ilr_1 0.6518 0.000 0.00 0.00 f_cyan_ilr_2 0.0000 9.981 0.00 0.00 f_JCZ38_qlogis 0.0000 0.000 14.26 0.00 f_JSE76_qlogis 0.0000 0.000 0.00 16.17 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2240 2231 -1098 Optimised parameters: est. lower upper cyan_free_0 100.73014 9.873e+01 1.027e+02 log_k_cyan_free -3.19634 -3.641e+00 -2.752e+00 log_k_cyan_free_bound -3.43533 -3.674e+00 -3.197e+00 log_k_cyan_bound_free -3.83282 -4.163e+00 -3.503e+00 log_k_JCZ38 -2.51065 -3.225e+00 -1.796e+00 log_k_J9Z38 -5.02539 -5.825e+00 -4.226e+00 log_k_JSE76 -3.24777 -4.163e+00 -2.333e+00 f_cyan_ilr_1 0.70640 3.562e-01 1.057e+00 f_cyan_ilr_2 1.42704 3.170e-01 2.537e+00 f_JCZ38_qlogis 2.84779 1.042e+00 4.654e+00 f_JSE76_qlogis 8.63674 -6.407e+02 6.580e+02 a.1 2.07082 1.846e+00 2.296e+00 b.1 0.06227 5.120e-02 7.334e-02 SD.log_k_cyan_free 0.49674 1.865e-01 8.069e-01 SD.log_k_cyan_bound_free 0.28537 6.808e-02 5.027e-01 SD.log_k_JCZ38 0.74846 2.305e-01 1.266e+00 SD.log_k_J9Z38 0.86077 2.713e-01 1.450e+00 SD.log_k_JSE76 0.97613 3.030e-01 1.649e+00 SD.f_cyan_ilr_1 0.38994 1.382e-01 6.417e-01 SD.f_cyan_ilr_2 0.82869 3.917e-02 1.618e+00 SD.f_JCZ38_qlogis 1.05000 -2.809e-02 2.128e+00 SD.f_JSE76_qlogis 0.44681 -3.986e+05 3.986e+05 Correlation: cyn_f_0 lg_k_c_ lg_k_cyn_f_ lg_k_cyn_b_ l__JCZ3 l__J9Z3 log_k_cyan_free 0.0936 log_k_cyan_free_bound 0.1302 0.1627 log_k_cyan_bound_free 0.0029 0.0525 0.5181 log_k_JCZ38 -0.0116 -0.0077 -0.0430 -0.0236 log_k_J9Z38 -0.0192 -0.0077 -0.0048 0.0229 -0.0005 log_k_JSE76 0.0007 -0.0020 -0.0134 -0.0072 0.1225 -0.0016 f_cyan_ilr_1 -0.0118 -0.0027 -0.0132 -0.0118 0.0127 -0.0505 f_cyan_ilr_2 -0.4643 -0.0762 -0.1245 0.0137 0.0497 0.1003 f_JCZ38_qlogis 0.0710 0.0371 0.1826 0.0925 -0.0869 -0.0130 f_JSE76_qlogis -0.0367 -0.0270 -0.2274 -0.1865 0.1244 0.0098 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 log_k_cyan_free log_k_cyan_free_bound log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 0.0036 f_cyan_ilr_2 0.0050 -0.0201 f_JCZ38_qlogis 0.0142 -0.0529 -0.2698 f_JSE76_qlogis 0.0064 0.0345 0.2015 -0.7058 Random effects: est. lower upper SD.log_k_cyan_free 0.4967 1.865e-01 8.069e-01 SD.log_k_cyan_bound_free 0.2854 6.808e-02 5.027e-01 SD.log_k_JCZ38 0.7485 2.305e-01 1.266e+00 SD.log_k_J9Z38 0.8608 2.713e-01 1.450e+00 SD.log_k_JSE76 0.9761 3.030e-01 1.649e+00 SD.f_cyan_ilr_1 0.3899 1.382e-01 6.417e-01 SD.f_cyan_ilr_2 0.8287 3.917e-02 1.618e+00 SD.f_JCZ38_qlogis 1.0500 -2.809e-02 2.128e+00 SD.f_JSE76_qlogis 0.4468 -3.986e+05 3.986e+05 Variance model: est. lower upper a.1 2.07082 1.8458 2.29588 b.1 0.06227 0.0512 0.07334 Backtransformed parameters: est. lower upper cyan_free_0 1.007e+02 9.873e+01 102.72898 k_cyan_free 4.091e-02 2.623e-02 0.06382 k_cyan_free_bound 3.221e-02 2.537e-02 0.04090 k_cyan_bound_free 2.165e-02 1.557e-02 0.03011 k_JCZ38 8.122e-02 3.975e-02 0.16594 k_J9Z38 6.569e-03 2.954e-03 0.01461 k_JSE76 3.886e-02 1.556e-02 0.09703 f_cyan_free_to_JCZ38 6.785e-01 6.102e-01 0.97309 f_cyan_free_to_J9Z38 2.498e-01 6.102e-01 0.97309 f_JCZ38_to_JSE76 9.452e-01 7.392e-01 0.99056 f_JSE76_to_JCZ38 9.998e-01 5.580e-279 1.00000 Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.08426 0.01051 0.41220 Resulting formation fractions: ff cyan_free_JCZ38 0.6784541 cyan_free_J9Z38 0.2498405 cyan_free_sink 0.0717054 cyan_free 1.0000000 JCZ38_JSE76 0.9452043 JCZ38_sink 0.0547957 JSE76_JCZ38 0.9998226 JSE76_sink 0.0001774 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 25.237 168.51 50.73 8.226 65.95 JCZ38 8.535 28.35 NA NA NA J9Z38 105.517 350.52 NA NA NA JSE76 17.837 59.25 NA NA NA"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"pathway-2-refined-fits","dir":"Articles > Prebuilt","previous_headings":"Appendix > Hierarchical fit listings","what":"Pathway 2, refined fits","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"Hierarchical FOMC path 2 fit reduced random effects, two-component error Hierarchical DFOP path 2 fit reduced random effects, constant variance Hierarchical DFOP path 2 fit reduced random effects, two-component error Hierarchical SFORB path 2 fit reduced random effects, constant variance Hierarchical SFORB path 2 fit reduced random effects, two-component error","code":"saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:57:07 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - (alpha/beta) * 1/((time/beta) + 1) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 776.732 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.4477 -1.8631 -5.1087 -2.5114 0.6826 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta 4.7944 15.9616 13.1566 -0.1564 2.9781 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 7.701 0.000 0.000 0.000 0.0000 log_k_JCZ38 0.000 1.448 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.724 0.000 0.0000 log_k_JSE76 0.000 0.000 0.000 3.659 0.0000 f_cyan_ilr_1 0.000 0.000 0.000 0.000 0.6356 f_cyan_ilr_2 0.000 0.000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 0.0000 f_JSE76_qlogis 0.000 0.000 0.000 0.000 0.0000 log_alpha 0.000 0.000 0.000 0.000 0.0000 log_beta 0.000 0.000 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta cyan_0 0.00 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 10.32 0.00 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 12.23 0.00 0.0000 0.0000 f_JSE76_qlogis 0.00 0.00 14.99 0.0000 0.0000 log_alpha 0.00 0.00 0.00 0.3924 0.0000 log_beta 0.00 0.00 0.00 0.0000 0.5639 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2249 2242 -1106 Optimised parameters: est. lower upper cyan_0 101.24524 NA NA log_k_JCZ38 -2.85375 NA NA log_k_J9Z38 -5.07729 NA NA log_k_JSE76 -3.53511 NA NA f_cyan_ilr_1 0.67478 NA NA f_cyan_ilr_2 0.97152 NA NA f_JCZ38_qlogis 213.48001 NA NA f_JSE76_qlogis 2.02040 NA NA log_alpha -0.11041 NA NA log_beta 3.06575 NA NA a.1 2.05279 1.82393 2.28166 b.1 0.07116 0.05910 0.08322 SD.log_k_JCZ38 1.21713 0.44160 1.99266 SD.log_k_J9Z38 0.88268 0.27541 1.48995 SD.log_k_JSE76 0.59452 0.15005 1.03898 SD.f_cyan_ilr_1 0.35370 0.12409 0.58331 SD.f_cyan_ilr_2 0.78186 0.18547 1.37824 SD.log_alpha 0.27781 0.08168 0.47394 SD.log_beta 0.32608 0.06490 0.58726 Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.2171 0.44160 1.9927 SD.log_k_J9Z38 0.8827 0.27541 1.4900 SD.log_k_JSE76 0.5945 0.15005 1.0390 SD.f_cyan_ilr_1 0.3537 0.12409 0.5833 SD.f_cyan_ilr_2 0.7819 0.18547 1.3782 SD.log_alpha 0.2778 0.08168 0.4739 SD.log_beta 0.3261 0.06490 0.5873 Variance model: est. lower upper a.1 2.05279 1.8239 2.28166 b.1 0.07116 0.0591 0.08322 Backtransformed parameters: est. lower upper cyan_0 1.012e+02 NA NA k_JCZ38 5.763e-02 NA NA k_J9Z38 6.237e-03 NA NA k_JSE76 2.916e-02 NA NA f_cyan_to_JCZ38 6.354e-01 NA NA f_cyan_to_J9Z38 2.447e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA f_JSE76_to_JCZ38 8.829e-01 NA NA alpha 8.955e-01 NA NA beta 2.145e+01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.6354 cyan_J9Z38 0.2447 cyan_sink 0.1200 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 JSE76_JCZ38 0.8829 JSE76_sink 0.1171 Estimated disappearance times: DT50 DT90 DT50back cyan 25.07 259.21 78.03 JCZ38 12.03 39.96 NA J9Z38 111.14 369.19 NA JSE76 23.77 78.98 NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:58:51 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 880.94 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.4380 -2.3107 -5.3123 -3.7120 0.6757 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 1.1439 13.1194 12.3492 -1.9317 -4.4557 g_qlogis -0.5644 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 4.591 0.0000 0.000 0.0 0.0000 log_k_JCZ38 0.000 0.7966 0.000 0.0 0.0000 log_k_J9Z38 0.000 0.0000 1.561 0.0 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.8 0.0000 f_cyan_ilr_1 0.000 0.0000 0.000 0.0 0.6349 f_cyan_ilr_2 0.000 0.0000 0.000 0.0 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0 0.0000 f_JSE76_qlogis 0.000 0.0000 0.000 0.0 0.0000 log_k1 0.000 0.0000 0.000 0.0 0.0000 log_k2 0.000 0.0000 0.000 0.0 0.0000 g_qlogis 0.000 0.0000 0.000 0.0 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 cyan_0 0.000 0.00 0.00 0.000 0.0000 log_k_JCZ38 0.000 0.00 0.00 0.000 0.0000 log_k_J9Z38 0.000 0.00 0.00 0.000 0.0000 log_k_JSE76 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_1 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_2 1.797 0.00 0.00 0.000 0.0000 f_JCZ38_qlogis 0.000 13.86 0.00 0.000 0.0000 f_JSE76_qlogis 0.000 0.00 13.91 0.000 0.0000 log_k1 0.000 0.00 0.00 1.106 0.0000 log_k2 0.000 0.00 0.00 0.000 0.6141 g_qlogis 0.000 0.00 0.00 0.000 0.0000 g_qlogis cyan_0 0.000 log_k_JCZ38 0.000 log_k_J9Z38 0.000 log_k_JSE76 0.000 f_cyan_ilr_1 0.000 f_cyan_ilr_2 0.000 f_JCZ38_qlogis 0.000 f_JSE76_qlogis 0.000 log_k1 0.000 log_k2 0.000 g_qlogis 1.595 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2282 2274 -1121 Optimised parameters: est. lower upper cyan_0 102.6036 NA NA log_k_JCZ38 -2.9348 NA NA log_k_J9Z38 -5.1617 NA NA log_k_JSE76 -3.6396 NA NA f_cyan_ilr_1 0.6991 NA NA f_cyan_ilr_2 0.6341 NA NA f_JCZ38_qlogis 4232.3011 NA NA f_JSE76_qlogis 1.9658 NA NA log_k1 -1.9503 NA NA log_k2 -4.4745 NA NA g_qlogis -0.4967 NA NA a.1 2.7461 2.59274 2.8994 SD.log_k_JCZ38 1.3178 0.47602 2.1596 SD.log_k_J9Z38 0.7022 0.15061 1.2538 SD.log_k_JSE76 0.6566 0.15613 1.1570 SD.f_cyan_ilr_1 0.3409 0.11666 0.5652 SD.f_cyan_ilr_2 0.4385 0.09482 0.7821 SD.log_k1 0.7381 0.25599 1.2202 SD.log_k2 0.5133 0.18152 0.8450 SD.g_qlogis 0.9866 0.35681 1.6164 Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.3178 0.47602 2.1596 SD.log_k_J9Z38 0.7022 0.15061 1.2538 SD.log_k_JSE76 0.6566 0.15613 1.1570 SD.f_cyan_ilr_1 0.3409 0.11666 0.5652 SD.f_cyan_ilr_2 0.4385 0.09482 0.7821 SD.log_k1 0.7381 0.25599 1.2202 SD.log_k2 0.5133 0.18152 0.8450 SD.g_qlogis 0.9866 0.35681 1.6164 Variance model: est. lower upper a.1 2.746 2.593 2.899 Backtransformed parameters: est. lower upper cyan_0 1.026e+02 NA NA k_JCZ38 5.314e-02 NA NA k_J9Z38 5.732e-03 NA NA k_JSE76 2.626e-02 NA NA f_cyan_to_JCZ38 6.051e-01 NA NA f_cyan_to_J9Z38 2.251e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA f_JSE76_to_JCZ38 8.772e-01 NA NA k1 1.422e-01 NA NA k2 1.140e-02 NA NA g 3.783e-01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.6051 cyan_J9Z38 0.2251 cyan_sink 0.1698 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 JSE76_JCZ38 0.8772 JSE76_sink 0.1228 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 22.05 160.35 48.27 4.873 60.83 JCZ38 13.04 43.33 NA NA NA J9Z38 120.93 401.73 NA NA NA JSE76 26.39 87.68 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:58:58 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 887.853 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.7393 -1.4493 -5.0118 -2.1269 0.6720 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 7.3362 13.4423 13.2659 -2.0061 -4.5527 g_qlogis -0.5806 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.604 0.00 0.000 0.000 0.0000 log_k_JCZ38 0.000 2.77 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.00 1.662 0.000 0.0000 log_k_JSE76 0.000 0.00 0.000 5.021 0.0000 f_cyan_ilr_1 0.000 0.00 0.000 0.000 0.6519 f_cyan_ilr_2 0.000 0.00 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.00 0.000 0.000 0.0000 f_JSE76_qlogis 0.000 0.00 0.000 0.000 0.0000 log_k1 0.000 0.00 0.000 0.000 0.0000 log_k2 0.000 0.00 0.000 0.000 0.0000 g_qlogis 0.000 0.00 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 cyan_0 0.00 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 13.37 0.00 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 14.21 0.00 0.0000 0.0000 f_JSE76_qlogis 0.00 0.00 14.58 0.0000 0.0000 log_k1 0.00 0.00 0.00 0.8453 0.0000 log_k2 0.00 0.00 0.00 0.0000 0.5969 g_qlogis 0.00 0.00 0.00 0.0000 0.0000 g_qlogis cyan_0 0.00 log_k_JCZ38 0.00 log_k_J9Z38 0.00 log_k_JSE76 0.00 f_cyan_ilr_1 0.00 f_cyan_ilr_2 0.00 f_JCZ38_qlogis 0.00 f_JSE76_qlogis 0.00 log_k1 0.00 log_k2 0.00 g_qlogis 1.69 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2237 2229 -1099 Optimised parameters: est. lower upper cyan_0 101.00243 NA NA log_k_JCZ38 -2.80828 NA NA log_k_J9Z38 -5.04449 NA NA log_k_JSE76 -3.66981 NA NA f_cyan_ilr_1 0.72564 NA NA f_cyan_ilr_2 1.37978 NA NA f_JCZ38_qlogis 1.98726 NA NA f_JSE76_qlogis 414.80884 NA NA log_k1 -2.38601 NA NA log_k2 -4.63632 NA NA g_qlogis -0.33920 NA NA a.1 2.10837 1.88051 2.33623 b.1 0.06223 0.05108 0.07338 SD.log_k_JCZ38 1.30902 0.48128 2.13675 SD.log_k_J9Z38 0.83882 0.25790 1.41974 SD.log_k_JSE76 0.58104 0.14201 1.02008 SD.f_cyan_ilr_1 0.35421 0.12398 0.58443 SD.f_cyan_ilr_2 0.79373 0.12007 1.46740 SD.log_k2 0.27476 0.08557 0.46394 SD.g_qlogis 0.96170 0.35463 1.56878 Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.3090 0.48128 2.1367 SD.log_k_J9Z38 0.8388 0.25790 1.4197 SD.log_k_JSE76 0.5810 0.14201 1.0201 SD.f_cyan_ilr_1 0.3542 0.12398 0.5844 SD.f_cyan_ilr_2 0.7937 0.12007 1.4674 SD.log_k2 0.2748 0.08557 0.4639 SD.g_qlogis 0.9617 0.35463 1.5688 Variance model: est. lower upper a.1 2.10837 1.88051 2.33623 b.1 0.06223 0.05108 0.07338 Backtransformed parameters: est. lower upper cyan_0 1.010e+02 NA NA k_JCZ38 6.031e-02 NA NA k_J9Z38 6.445e-03 NA NA k_JSE76 2.548e-02 NA NA f_cyan_to_JCZ38 6.808e-01 NA NA f_cyan_to_J9Z38 2.440e-01 NA NA f_JCZ38_to_JSE76 8.795e-01 NA NA f_JSE76_to_JCZ38 1.000e+00 NA NA k1 9.200e-02 NA NA k2 9.693e-03 NA NA g 4.160e-01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.68081 cyan_J9Z38 0.24398 cyan_sink 0.07521 JCZ38_JSE76 0.87945 JCZ38_sink 0.12055 JSE76_JCZ38 1.00000 JSE76_sink 0.00000 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 25.00 182.05 54.8 7.535 71.51 JCZ38 11.49 38.18 NA NA NA J9Z38 107.55 357.28 NA NA NA JSE76 27.20 90.36 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:58:49 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 878.878 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 102.4395 -2.7673 -2.8942 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.6201 -2.3107 -5.3123 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -3.7120 0.6754 1.1448 f_JCZ38_qlogis f_JSE76_qlogis 14.8408 15.4734 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 4.589 0.0000 0.00 log_k_cyan_free 0.000 0.4849 0.00 log_k_cyan_free_bound 0.000 0.0000 1.62 log_k_cyan_bound_free 0.000 0.0000 0.00 log_k_JCZ38 0.000 0.0000 0.00 log_k_J9Z38 0.000 0.0000 0.00 log_k_JSE76 0.000 0.0000 0.00 f_cyan_ilr_1 0.000 0.0000 0.00 f_cyan_ilr_2 0.000 0.0000 0.00 f_JCZ38_qlogis 0.000 0.0000 0.00 f_JSE76_qlogis 0.000 0.0000 0.00 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.0000 0.000 0.0 log_k_cyan_free 0.000 0.0000 0.000 0.0 log_k_cyan_free_bound 0.000 0.0000 0.000 0.0 log_k_cyan_bound_free 1.197 0.0000 0.000 0.0 log_k_JCZ38 0.000 0.7966 0.000 0.0 log_k_J9Z38 0.000 0.0000 1.561 0.0 log_k_JSE76 0.000 0.0000 0.000 0.8 f_cyan_ilr_1 0.000 0.0000 0.000 0.0 f_cyan_ilr_2 0.000 0.0000 0.000 0.0 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0 f_JSE76_qlogis 0.000 0.0000 0.000 0.0 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis cyan_free_0 0.0000 0.000 0.0 0.00 log_k_cyan_free 0.0000 0.000 0.0 0.00 log_k_cyan_free_bound 0.0000 0.000 0.0 0.00 log_k_cyan_bound_free 0.0000 0.000 0.0 0.00 log_k_JCZ38 0.0000 0.000 0.0 0.00 log_k_J9Z38 0.0000 0.000 0.0 0.00 log_k_JSE76 0.0000 0.000 0.0 0.00 f_cyan_ilr_1 0.6349 0.000 0.0 0.00 f_cyan_ilr_2 0.0000 1.797 0.0 0.00 f_JCZ38_qlogis 0.0000 0.000 15.6 0.00 f_JSE76_qlogis 0.0000 0.000 0.0 17.52 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2280 2272 -1120 Optimised parameters: est. lower upper cyan_free_0 102.6532 NA NA log_k_cyan_free -2.8547 NA NA log_k_cyan_free_bound -2.7004 NA NA log_k_cyan_bound_free -3.5078 NA NA log_k_JCZ38 -2.9255 NA NA log_k_J9Z38 -5.1089 NA NA log_k_JSE76 -3.6263 NA NA f_cyan_ilr_1 0.6873 NA NA f_cyan_ilr_2 0.6498 NA NA f_JCZ38_qlogis 3624.2149 NA NA f_JSE76_qlogis 1.9991 NA NA a.1 2.7472 2.55559 2.9388 SD.log_k_cyan_free 0.3227 0.10296 0.5423 SD.log_k_cyan_free_bound 0.8757 0.29525 1.4562 SD.log_k_cyan_bound_free 0.6128 0.20220 1.0233 SD.log_k_JCZ38 1.3431 0.48474 2.2014 SD.log_k_J9Z38 0.6881 0.14714 1.2291 SD.log_k_JSE76 0.6461 0.15321 1.1390 SD.f_cyan_ilr_1 0.3361 0.11376 0.5585 SD.f_cyan_ilr_2 0.4286 0.08419 0.7730 Correlation is not available Random effects: est. lower upper SD.log_k_cyan_free 0.3227 0.10296 0.5423 SD.log_k_cyan_free_bound 0.8757 0.29525 1.4562 SD.log_k_cyan_bound_free 0.6128 0.20220 1.0233 SD.log_k_JCZ38 1.3431 0.48474 2.2014 SD.log_k_J9Z38 0.6881 0.14714 1.2291 SD.log_k_JSE76 0.6461 0.15321 1.1390 SD.f_cyan_ilr_1 0.3361 0.11376 0.5585 SD.f_cyan_ilr_2 0.4286 0.08419 0.7730 Variance model: est. lower upper a.1 2.747 2.556 2.939 Backtransformed parameters: est. lower upper cyan_free_0 1.027e+02 NA NA k_cyan_free 5.758e-02 NA NA k_cyan_free_bound 6.718e-02 NA NA k_cyan_bound_free 2.996e-02 NA NA k_JCZ38 5.364e-02 NA NA k_J9Z38 6.042e-03 NA NA k_JSE76 2.662e-02 NA NA f_cyan_free_to_JCZ38 6.039e-01 NA NA f_cyan_free_to_J9Z38 2.285e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA f_JSE76_to_JCZ38 8.807e-01 NA NA Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.1426 0.0121 0.3484 Resulting formation fractions: ff cyan_free_JCZ38 0.6039 cyan_free_J9Z38 0.2285 cyan_free_sink 0.1676 cyan_free 1.0000 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 JSE76_JCZ38 0.8807 JSE76_sink 0.1193 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 23.84 154.95 46.65 4.86 57.31 JCZ38 12.92 42.93 NA NA NA J9Z38 114.71 381.07 NA NA NA JSE76 26.04 86.51 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:10 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 899.539 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 101.7511 -2.8370 -3.0162 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.6600 -2.2988 -5.3129 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -3.6991 0.6722 4.8596 f_JCZ38_qlogis f_JSE76_qlogis 13.4678 14.2149 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 5.629 0.000 0.000 log_k_cyan_free 0.000 0.446 0.000 log_k_cyan_free_bound 0.000 0.000 1.449 log_k_cyan_bound_free 0.000 0.000 0.000 log_k_JCZ38 0.000 0.000 0.000 log_k_J9Z38 0.000 0.000 0.000 log_k_JSE76 0.000 0.000 0.000 f_cyan_ilr_1 0.000 0.000 0.000 f_cyan_ilr_2 0.000 0.000 0.000 f_JCZ38_qlogis 0.000 0.000 0.000 f_JSE76_qlogis 0.000 0.000 0.000 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.0000 0.000 0.0000 log_k_cyan_free 0.000 0.0000 0.000 0.0000 log_k_cyan_free_bound 0.000 0.0000 0.000 0.0000 log_k_cyan_bound_free 1.213 0.0000 0.000 0.0000 log_k_JCZ38 0.000 0.7801 0.000 0.0000 log_k_J9Z38 0.000 0.0000 1.575 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.8078 f_cyan_ilr_1 0.000 0.0000 0.000 0.0000 f_cyan_ilr_2 0.000 0.0000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0000 f_JSE76_qlogis 0.000 0.0000 0.000 0.0000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis cyan_free_0 0.0000 0.000 0.00 0.00 log_k_cyan_free 0.0000 0.000 0.00 0.00 log_k_cyan_free_bound 0.0000 0.000 0.00 0.00 log_k_cyan_bound_free 0.0000 0.000 0.00 0.00 log_k_JCZ38 0.0000 0.000 0.00 0.00 log_k_J9Z38 0.0000 0.000 0.00 0.00 log_k_JSE76 0.0000 0.000 0.00 0.00 f_cyan_ilr_1 0.6518 0.000 0.00 0.00 f_cyan_ilr_2 0.0000 9.981 0.00 0.00 f_JCZ38_qlogis 0.0000 0.000 14.26 0.00 f_JSE76_qlogis 0.0000 0.000 0.00 16.17 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2241 2233 -1101 Optimised parameters: est. lower upper cyan_free_0 100.95469 NA NA log_k_cyan_free -3.18706 NA NA log_k_cyan_free_bound -3.38455 NA NA log_k_cyan_bound_free -3.75788 NA NA log_k_JCZ38 -2.77024 NA NA log_k_J9Z38 -5.03665 NA NA log_k_JSE76 -3.60289 NA NA f_cyan_ilr_1 0.72263 NA NA f_cyan_ilr_2 1.45352 NA NA f_JCZ38_qlogis 2.00778 NA NA f_JSE76_qlogis 941.58570 NA NA a.1 2.11130 1.88299 2.33960 b.1 0.06299 0.05176 0.07421 SD.log_k_cyan_free 0.50098 0.18805 0.81390 SD.log_k_cyan_bound_free 0.31671 0.08467 0.54875 SD.log_k_JCZ38 1.25865 0.45932 2.05798 SD.log_k_J9Z38 0.86833 0.27222 1.46444 SD.log_k_JSE76 0.59325 0.14711 1.03940 SD.f_cyan_ilr_1 0.35705 0.12521 0.58890 SD.f_cyan_ilr_2 0.88541 0.13797 1.63286 Correlation is not available Random effects: est. lower upper SD.log_k_cyan_free 0.5010 0.18805 0.8139 SD.log_k_cyan_bound_free 0.3167 0.08467 0.5488 SD.log_k_JCZ38 1.2587 0.45932 2.0580 SD.log_k_J9Z38 0.8683 0.27222 1.4644 SD.log_k_JSE76 0.5933 0.14711 1.0394 SD.f_cyan_ilr_1 0.3571 0.12521 0.5889 SD.f_cyan_ilr_2 0.8854 0.13797 1.6329 Variance model: est. lower upper a.1 2.11130 1.88299 2.33960 b.1 0.06299 0.05176 0.07421 Backtransformed parameters: est. lower upper cyan_free_0 1.010e+02 NA NA k_cyan_free 4.129e-02 NA NA k_cyan_free_bound 3.389e-02 NA NA k_cyan_bound_free 2.333e-02 NA NA k_JCZ38 6.265e-02 NA NA k_J9Z38 6.495e-03 NA NA k_JSE76 2.724e-02 NA NA f_cyan_free_to_JCZ38 6.844e-01 NA NA f_cyan_free_to_J9Z38 2.463e-01 NA NA f_JCZ38_to_JSE76 8.816e-01 NA NA f_JSE76_to_JCZ38 1.000e+00 NA NA Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.08751 0.01101 0.39586 Resulting formation fractions: ff cyan_free_JCZ38 0.68444 cyan_free_J9Z38 0.24633 cyan_free_sink 0.06923 cyan_free 1.00000 JCZ38_JSE76 0.88161 JCZ38_sink 0.11839 JSE76_JCZ38 1.00000 JSE76_sink 0.00000 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 25.36 163.36 49.18 7.921 62.95 JCZ38 11.06 36.75 NA NA NA J9Z38 106.71 354.49 NA NA NA JSE76 25.44 84.51 NA NA NA"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"session-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Session info","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"","code":"R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] saemix_3.2 npde_3.3 knitr_1.42 mkin_1.2.6 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 cellranger_1.1.0 rprojroot_2.0.3 [13] jsonlite_1.8.4 processx_3.8.1 pkgbuild_1.4.0 deSolve_1.35 [17] DBI_1.1.3 mclust_6.0.0 ps_1.7.5 gridExtra_2.3 [21] purrr_1.0.1 fansi_1.0.4 scales_1.2.1 codetools_0.2-19 [25] textshaping_0.3.6 jquerylib_0.1.4 cli_3.6.1 crayon_1.5.2 [29] rlang_1.1.1 munsell_0.5.0 cachem_1.0.8 yaml_2.3.7 [33] inline_0.3.19 tools_4.3.2 memoise_2.0.1 dplyr_1.1.2 [37] colorspace_2.1-0 ggplot2_3.4.2 vctrs_0.6.2 R6_2.5.1 [41] zoo_1.8-12 lifecycle_1.0.3 stringr_1.5.0 fs_1.6.2 [45] MASS_7.3-60 ragg_1.2.5 callr_3.7.3 pkgconfig_2.0.3 [49] desc_1.4.2 pkgdown_2.0.7 bslib_0.4.2 pillar_1.9.0 [53] gtable_0.3.3 glue_1.6.2 systemfonts_1.0.4 highr_0.10 [57] xfun_0.39 tibble_3.2.1 lmtest_0.9-40 tidyselect_1.2.0 [61] htmltools_0.5.5 nlme_3.1-163 rmarkdown_2.21 compiler_4.3.2 [65] prettyunits_1.1.1 readxl_1.4.2"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"hardware-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hardware info","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"","code":"CPU model: AMD Ryzen 9 7950X 16-Core Processor MemTotal: 64927712 kB"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"introduction","dir":"Articles > Prebuilt","previous_headings":"","what":"Introduction","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"purpose document demonstrate nonlinear hierarchical models (NLHM) based parent degradation models SFO, FOMC, DFOP HS can fitted mkin package. assembled course work package 1.1 Project Number 173340 (Application nonlinear hierarchical models kinetic evaluation chemical degradation data) German Environment Agency carried 2022 2023. mkin package used version 1.2.6. contains test data functions used evaluations. saemix package used backend fitting NLHM, also loaded make convergence plot function available. document processed knitr package, also provides kable function used improve display tabular data R markdown documents. parallel processing, parallel package used.","code":"library(mkin) library(knitr) library(saemix) library(parallel) n_cores <- detectCores() if (Sys.info()[\"sysname\"] == \"Windows\") { cl <- makePSOCKcluster(n_cores) } else { cl <- makeForkCluster(n_cores) }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"data","dir":"Articles > Prebuilt","previous_headings":"","what":"Data","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"test data available mkin package object class mkindsg (mkin dataset group) identifier dimethenamid_2018. following preprocessing steps still necessary: data available enantiomer dimethenamid-P (DMTAP) renamed substance name data racemic mixture dimethenamid (DMTA). reason difference degradation behaviour identified EU risk assessment. data transformation products unnecessary columns discarded observation times dataset multiplied corresponding normalisation factor also available dataset, order make possible describe datasets single set parameters independent temperature Finally, datasets observed soil (Elliot 1 Elliot 2) combined, resulting dimethenamid (DMTA) data six soils. following commented R code performs preprocessing. following tables show 6 datasets. Dataset Calke Dataset Borstel Dataset Flaach Dataset BBA 2.2 Dataset BBA 2.3 Dataset Elliot","code":"# Apply a function to each of the seven datasets in the mkindsg object to create a list dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data # Get a dataset ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" # Rename DMTAP to DMTA ds_i <- subset(ds_i, name == \"DMTA\", c(\"name\", \"time\", \"value\")) # Select data ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] # Normalise time ds_i # Return the dataset }) # Use dataset titles as names for the list elements names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) # Combine data for Elliot soil to obtain a named list with six elements dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) # dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL for (ds_name in names(dmta_ds)) { print(kable(mkin_long_to_wide(dmta_ds[[ds_name]]), caption = paste(\"Dataset\", ds_name), label = paste0(\"tab:\", ds_name), booktabs = TRUE)) cat(\"\\n\\\\clearpage\\n\") }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"separate-evaluations","dir":"Articles > Prebuilt","previous_headings":"","what":"Separate evaluations","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"order obtain suitable starting parameters NLHM fits, separate fits four models data soil generated using mmkin function mkin package. first step, constant variance assumed. Convergence checked status function. table , OK indicates convergence, C indicates failure converge. separate fits constant variance converged, sole exception HS fit BBA 2.2 data. prepare fitting NLHM using two-component error model, separate fits updated assuming two-component error. Using two-component error model, one fit converge constant variance converge, non-SFO fits failed converge.","code":"deg_mods <- c(\"SFO\", \"FOMC\", \"DFOP\", \"HS\") f_sep_const <- mmkin( deg_mods, dmta_ds, error_model = \"const\", quiet = TRUE) status(f_sep_const) |> kable() f_sep_tc <- update(f_sep_const, error_model = \"tc\") status(f_sep_tc) |> kable()"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"hierarchichal-model-fits","dir":"Articles > Prebuilt","previous_headings":"","what":"Hierarchichal model fits","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"following code fits eight versions hierarchical models data, using SFO, FOMC, DFOP HS parent compound, using either constant variance two-component error error model. default parameter distribution model mkin allows variation degradation parameters across assumed population soils. words, degradation parameter associated random effect first step. mhmkin function makes possible fit eight versions parallel (given sufficient number computing cores available) save execution time. Convergence plots summaries fits shown appendix. output status function shows fits terminated successfully. AIC BIC values show biphasic models DFOP HS give best fits. DFOP model preferred , better mechanistic basis batch experiments constant incubation conditions. Also, shows lowest AIC BIC values first set fits combined two-component error model. Therefore, DFOP model selected refinements fits aim make model fully identifiable.","code":"f_saem <- mhmkin(list(f_sep_const, f_sep_tc), transformations = \"saemix\") status(f_saem) |> kable() anova(f_saem) |> kable(digits = 1)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"parameter-identifiability-based-on-the-fisher-information-matrix","dir":"Articles > Prebuilt","previous_headings":"Hierarchichal model fits","what":"Parameter identifiability based on the Fisher Information Matrix","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"Using illparms function, ill-defined statistical model parameters standard deviations degradation parameters population error model parameters can found. According illparms function, fitted standard deviation second kinetic rate constant k2 ill-defined DFOP fits. suggests different values obtained standard deviation using different starting values. thus identified overparameterisation addressed removing random effect k2 parameter model. resulting fit, checked whether still ill-defined parameters, case. , refined model compared previous best model. model without random effect k2 reduced version previous model. Therefore, models nested can compared using likelihood ratio test. achieved argument test = TRUE anova function. AIC BIC criteria lower removal ill-defined random effect k2. p value likelihood ratio test much greater 0.05, indicating model higher likelihood (model random effects degradation parameters f_saem[[\"DFOP\", \"tc\"]]) fit significantly better model lower likelihood (reduced model f_saem_dfop_tc_no_ranef_k2). Therefore, AIC, BIC likelihood ratio test suggest use reduced model. convergence fit checked visually. Convergence plot NLHM DFOP fit two-component error without random effect ‘k2’ parameters appear converged satisfactory degree. final fit plotted using plot method mkin package. Plot final NLHM DFOP fit Finally, summary report fit produced.","code":"illparms(f_saem) |> kable() f_saem_dfop_tc_no_ranef_k2 <- update(f_saem[[\"DFOP\", \"tc\"]], no_random_effect = \"k2\") illparms(f_saem_dfop_tc_no_ranef_k2) anova(f_saem[[\"DFOP\", \"tc\"]], f_saem_dfop_tc_no_ranef_k2, test = TRUE) |> kable(format.args = list(digits = 4)) plot(f_saem_dfop_tc_no_ranef_k2) summary(f_saem_dfop_tc_no_ranef_k2) saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:35 2023 Date of summary: Thu Nov 16 04:59:35 2023 Equations: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 4.4 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 k1 k2 g 98.71186 0.08675 0.01374 0.93491 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 g DMTA_0 98.71 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 g 0.00 0 0 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 663.7 661.8 -322.9 Optimised parameters: est. lower upper DMTA_0 98.256267 96.286112 100.22642 k1 0.064037 0.033281 0.09479 k2 0.008469 0.006002 0.01094 g 0.954167 0.914460 0.99387 a.1 1.061795 0.863943 1.25965 b.1 0.029550 0.022529 0.03657 SD.DMTA_0 2.068581 0.427706 3.70946 SD.k1 0.598285 0.258235 0.93833 SD.g 1.016689 0.360057 1.67332 Correlation: DMTA_0 k1 k2 k1 0.0213 k2 0.0541 0.0344 g -0.0521 -0.0286 -0.2744 Random effects: est. lower upper SD.DMTA_0 2.0686 0.4277 3.7095 SD.k1 0.5983 0.2582 0.9383 SD.g 1.0167 0.3601 1.6733 Variance model: est. lower upper a.1 1.06180 0.86394 1.25965 b.1 0.02955 0.02253 0.03657 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 11.45 41.32 12.44 10.82 81.85"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"alternative-check-of-parameter-identifiability","dir":"Articles > Prebuilt","previous_headings":"Hierarchichal model fits","what":"Alternative check of parameter identifiability","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"parameter check used illparms function based quadratic approximation likelihood surface near optimum, calculated using Fisher Information Matrix (FIM). alternative way check parameter identifiability (Duchesne et al. 2021) based multistart approach recently implemented mkin. graph shows boxplots parameters obtained 50 runs saem algorithm different parameter combinations, sampled range parameters obtained individual datasets fitted separately using nonlinear regression. Scaled parameters multistart runs, full model graph clearly confirms lack identifiability variance k2 full model. overparameterisation model also indicates lack identifiability variance parameter g. parameter boxplots multistart runs reduced model shown indicate runs give similar results, regardless starting parameters. Scaled parameters multistart runs, reduced model parameters top 25% fits shown (based feature introduced mkin 1.2.2 currently development), scatter even less shown . Scaled parameters multistart runs, reduced model, fits top 25% likelihood values","code":"f_saem_dfop_tc_multi <- multistart(f_saem[[\"DFOP\", \"tc\"]], n = 50, cores = 15) par(mar = c(6.1, 4.1, 2.1, 2.1)) parplot(f_saem_dfop_tc_multi, lpos = \"bottomright\", ylim = c(0.3, 10), las = 2) f_saem_dfop_tc_no_ranef_k2_multi <- multistart(f_saem_dfop_tc_no_ranef_k2, n = 50, cores = 15) par(mar = c(6.1, 4.1, 2.1, 2.1)) parplot(f_saem_dfop_tc_no_ranef_k2_multi, ylim = c(0.5, 2), las = 2, lpos = \"bottomright\") par(mar = c(6.1, 4.1, 2.1, 2.1)) parplot(f_saem_dfop_tc_no_ranef_k2_multi, ylim = c(0.5, 2), las = 2, llquant = 0.25, lpos = \"bottomright\")"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"conclusions","dir":"Articles > Prebuilt","previous_headings":"","what":"Conclusions","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"Fitting four parent degradation models SFO, FOMC, DFOP HS part hierarchical model fits two different error models normal distributions transformed degradation parameters works without technical problems. biphasic models DFOP HS gave best fit data, default parameter distribution model fully identifiable. Removing random effect second kinetic rate constant DFOP model resulted reduced model fully identifiable showed lowest values model selection criteria AIC BIC. reliability identification model parameters confirmed using multiple starting values.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"acknowledgements","dir":"Articles > Prebuilt","previous_headings":"","what":"Acknowledgements","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"helpful comments Janina Wöltjen German Environment Agency gratefully acknowledged.","code":""},{"path":[]},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"hierarchical-model-fit-listings","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hierarchical model fit listings","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"Hierarchical mkin fit SFO model error model const Hierarchical mkin fit SFO model error model tc Hierarchical mkin fit FOMC model error model const Hierarchical mkin fit FOMC model error model tc Hierarchical mkin fit DFOP model error model const Hierarchical mkin fit DFOP model error model tc Hierarchical mkin fit HS model error model const Hierarchical mkin fit HS model error model tc","code":"saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:26 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - k_DMTA * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 0.788 s Using 300, 100 iterations and 9 chains Variance model: Constant variance Starting values for degradation parameters: DMTA_0 k_DMTA 97.2953 0.0566 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k_DMTA DMTA_0 97.3 0 k_DMTA 0.0 1 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 796.3 795.3 -393.2 Optimised parameters: est. lower upper DMTA_0 97.28130 95.71113 98.8515 k_DMTA 0.05665 0.02909 0.0842 a.1 2.66442 2.35579 2.9731 SD.DMTA_0 1.54776 0.15447 2.9411 SD.k_DMTA 0.60690 0.26248 0.9513 Correlation: DMTA_0 k_DMTA 0.0168 Random effects: est. lower upper SD.DMTA_0 1.5478 0.1545 2.9411 SD.k_DMTA 0.6069 0.2625 0.9513 Variance model: est. lower upper a.1 2.664 2.356 2.973 Estimated disappearance times: DT50 DT90 DMTA 12.24 40.65 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:28 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - k_DMTA * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 2.428 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 k_DMTA 96.99175 0.05603 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k_DMTA DMTA_0 96.99 0 k_DMTA 0.00 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 798.3 797.1 -393.2 Optimised parameters: est. lower upper DMTA_0 97.271822 95.703157 98.84049 k_DMTA 0.056638 0.029110 0.08417 a.1 2.660081 2.230398 3.08976 b.1 0.001665 -0.006911 0.01024 SD.DMTA_0 1.545520 0.145035 2.94601 SD.k_DMTA 0.606422 0.262274 0.95057 Correlation: DMTA_0 k_DMTA 0.0169 Random effects: est. lower upper SD.DMTA_0 1.5455 0.1450 2.9460 SD.k_DMTA 0.6064 0.2623 0.9506 Variance model: est. lower upper a.1 2.660081 2.230398 3.08976 b.1 0.001665 -0.006911 0.01024 Estimated disappearance times: DT50 DT90 DMTA 12.24 40.65 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:27 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - (alpha/beta) * 1/((time/beta) + 1) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 1.28 s Using 300, 100 iterations and 9 chains Variance model: Constant variance Starting values for degradation parameters: DMTA_0 alpha beta 98.292 9.909 156.341 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 alpha beta DMTA_0 98.29 0 0 alpha 0.00 1 0 beta 0.00 0 1 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 734.2 732.7 -360.1 Optimised parameters: est. lower upper DMTA_0 98.3435 96.9033 99.784 alpha 7.2007 2.5889 11.812 beta 112.8745 34.8816 190.867 a.1 2.0459 1.8054 2.286 SD.DMTA_0 1.4795 0.2717 2.687 SD.alpha 0.6396 0.1509 1.128 SD.beta 0.6874 0.1587 1.216 Correlation: DMTA_0 alpha alpha -0.1125 beta -0.1227 0.3632 Random effects: est. lower upper SD.DMTA_0 1.4795 0.2717 2.687 SD.alpha 0.6396 0.1509 1.128 SD.beta 0.6874 0.1587 1.216 Variance model: est. lower upper a.1 2.046 1.805 2.286 Estimated disappearance times: DT50 DT90 DT50back DMTA 11.41 42.53 12.8 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:28 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - (alpha/beta) * 1/((time/beta) + 1) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 2.793 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 alpha beta 98.772 4.663 92.597 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 alpha beta DMTA_0 98.77 0 0 alpha 0.00 1 0 beta 0.00 0 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 720.7 719.1 -352.4 Optimised parameters: est. lower upper DMTA_0 99.10577 97.33296 100.87859 alpha 5.46260 2.52199 8.40321 beta 81.66080 30.46664 132.85497 a.1 1.50219 1.23601 1.76836 b.1 0.02893 0.02099 0.03687 SD.DMTA_0 1.61887 -0.03636 3.27411 SD.alpha 0.58145 0.17364 0.98925 SD.beta 0.68205 0.21108 1.15303 Correlation: DMTA_0 alpha alpha -0.1321 beta -0.1430 0.2467 Random effects: est. lower upper SD.DMTA_0 1.6189 -0.03636 3.2741 SD.alpha 0.5814 0.17364 0.9892 SD.beta 0.6821 0.21108 1.1530 Variance model: est. lower upper a.1 1.50219 1.23601 1.76836 b.1 0.02893 0.02099 0.03687 Estimated disappearance times: DT50 DT90 DT50back DMTA 11.05 42.81 12.89 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:27 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 1.752 s Using 300, 100 iterations and 9 chains Variance model: Constant variance Starting values for degradation parameters: DMTA_0 k1 k2 g 98.64383 0.09211 0.02999 0.76814 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 g DMTA_0 98.64 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 g 0.00 0 0 1 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 711.8 710 -346.9 Optimised parameters: est. lower upper DMTA_0 98.092481 96.573899 99.61106 k1 0.062499 0.030336 0.09466 k2 0.009065 -0.005133 0.02326 g 0.948967 0.862080 1.03586 a.1 1.821671 1.604774 2.03857 SD.DMTA_0 1.677785 0.472066 2.88350 SD.k1 0.634962 0.270788 0.99914 SD.k2 1.033498 -0.205994 2.27299 SD.g 1.710046 0.428642 2.99145 Correlation: DMTA_0 k1 k2 k1 0.0246 k2 0.0491 0.0953 g -0.0552 -0.0889 -0.4795 Random effects: est. lower upper SD.DMTA_0 1.678 0.4721 2.8835 SD.k1 0.635 0.2708 0.9991 SD.k2 1.033 -0.2060 2.2730 SD.g 1.710 0.4286 2.9914 Variance model: est. lower upper a.1 1.822 1.605 2.039 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 11.79 42.8 12.88 11.09 76.46 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:29 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 3.186 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 k1 k2 g 98.71186 0.08675 0.01374 0.93491 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 g DMTA_0 98.71 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 g 0.00 0 0 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 665.7 663.6 -322.9 Optimised parameters: est. lower upper DMTA_0 98.347470 96.380815 100.31413 k1 0.064524 0.034279 0.09477 k2 0.008304 0.005843 0.01076 g 0.952128 0.909578 0.99468 a.1 1.068907 0.868694 1.26912 b.1 0.029265 0.022262 0.03627 SD.DMTA_0 2.065796 0.428485 3.70311 SD.k1 0.583703 0.251796 0.91561 SD.k2 0.004167 -7.832168 7.84050 SD.g 1.064450 0.397476 1.73142 Correlation: DMTA_0 k1 k2 k1 0.0223 k2 0.0568 0.0394 g -0.0464 -0.0269 -0.2713 Random effects: est. lower upper SD.DMTA_0 2.065796 0.4285 3.7031 SD.k1 0.583703 0.2518 0.9156 SD.k2 0.004167 -7.8322 7.8405 SD.g 1.064450 0.3975 1.7314 Variance model: est. lower upper a.1 1.06891 0.86869 1.26912 b.1 0.02927 0.02226 0.03627 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 11.39 41.36 12.45 10.74 83.48 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:28 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - ifelse(time <= tb, k1, k2) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 2.28 s Using 300, 100 iterations and 9 chains Variance model: Constant variance Starting values for degradation parameters: DMTA_0 k1 k2 tb 97.82176 0.06931 0.02997 11.13945 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 tb DMTA_0 97.82 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 tb 0.00 0 0 1 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 714 712.1 -348 Optimised parameters: est. lower upper DMTA_0 98.16102 96.47747 99.84456 k1 0.07876 0.05261 0.10491 k2 0.02227 0.01706 0.02747 tb 13.99089 -7.40049 35.38228 a.1 1.82305 1.60700 2.03910 SD.DMTA_0 1.88413 0.56204 3.20622 SD.k1 0.34292 0.10482 0.58102 SD.k2 0.19851 0.01718 0.37985 SD.tb 1.68168 0.58064 2.78272 Correlation: DMTA_0 k1 k2 k1 0.0142 k2 0.0001 -0.0025 tb 0.0165 -0.1256 -0.0301 Random effects: est. lower upper SD.DMTA_0 1.8841 0.56204 3.2062 SD.k1 0.3429 0.10482 0.5810 SD.k2 0.1985 0.01718 0.3798 SD.tb 1.6817 0.58064 2.7827 Variance model: est. lower upper a.1 1.823 1.607 2.039 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 8.801 67.91 20.44 8.801 31.13 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:29 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - ifelse(time <= tb, k1, k2) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 3.658 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 k1 k2 tb 98.45190 0.07525 0.02576 19.19375 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 tb DMTA_0 98.45 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 tb 0.00 0 0 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 667.1 665 -323.6 Optimised parameters: est. lower upper DMTA_0 97.76571 95.81350 99.71791 k1 0.05855 0.03080 0.08630 k2 0.02337 0.01664 0.03010 tb 31.09638 29.38289 32.80987 a.1 1.08835 0.88590 1.29080 b.1 0.02964 0.02257 0.03671 SD.DMTA_0 2.04877 0.42607 3.67147 SD.k1 0.59166 0.25621 0.92711 SD.k2 0.30698 0.09561 0.51835 SD.tb 0.01274 -0.10914 0.13462 Correlation: DMTA_0 k1 k2 k1 0.0160 k2 -0.0070 -0.0024 tb -0.0668 -0.0103 -0.2013 Random effects: est. lower upper SD.DMTA_0 2.04877 0.42607 3.6715 SD.k1 0.59166 0.25621 0.9271 SD.k2 0.30698 0.09561 0.5183 SD.tb 0.01274 -0.10914 0.1346 Variance model: est. lower upper a.1 1.08835 0.88590 1.29080 b.1 0.02964 0.02257 0.03671 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 11.84 51.71 15.57 11.84 29.66"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"hierarchical-model-convergence-plots","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hierarchical model convergence plots","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"Convergence plot NLHM SFO fit constant variance Convergence plot NLHM SFO fit two-component error Convergence plot NLHM FOMC fit constant variance Convergence plot NLHM FOMC fit two-component error Convergence plot NLHM DFOP fit constant variance Convergence plot NLHM DFOP fit two-component error Convergence plot NLHM HS fit constant variance Convergence plot NLHM HS fit two-component error","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"session-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Session info","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"","code":"R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] saemix_3.2 npde_3.3 knitr_1.42 mkin_1.2.6 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 rprojroot_2.0.3 jsonlite_1.8.4 [13] DBI_1.1.3 mclust_6.0.0 gridExtra_2.3 purrr_1.0.1 [17] fansi_1.0.4 scales_1.2.1 codetools_0.2-19 textshaping_0.3.6 [21] jquerylib_0.1.4 cli_3.6.1 rlang_1.1.1 munsell_0.5.0 [25] cachem_1.0.8 yaml_2.3.7 tools_4.3.2 memoise_2.0.1 [29] dplyr_1.1.2 colorspace_2.1-0 ggplot2_3.4.2 vctrs_0.6.2 [33] R6_2.5.1 zoo_1.8-12 lifecycle_1.0.3 stringr_1.5.0 [37] fs_1.6.2 MASS_7.3-60 ragg_1.2.5 pkgconfig_2.0.3 [41] desc_1.4.2 pkgdown_2.0.7 bslib_0.4.2 pillar_1.9.0 [45] gtable_0.3.3 glue_1.6.2 systemfonts_1.0.4 highr_0.10 [49] xfun_0.39 tibble_3.2.1 lmtest_0.9-40 tidyselect_1.2.0 [53] htmltools_0.5.5 nlme_3.1-163 rmarkdown_2.21 compiler_4.3.2"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"hardware-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hardware info","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"","code":"CPU model: AMD Ryzen 9 7950X 16-Core Processor MemTotal: 64927712 kB"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"introduction","dir":"Articles > Prebuilt","previous_headings":"","what":"Introduction","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"purpose document test demonstrate nonlinear hierarchical models (NLHM) based parent degradation models SFO, FOMC, DFOP HS, parallel formation two metabolites can fitted mkin package. assembled course work package 1.2 Project Number 173340 (Application nonlinear hierarchical models kinetic evaluation chemical degradation data) German Environment Agency carried 2022 2023. mkin package used version 1.2.6, currently development. contains test data, functions used evaluations. saemix package used backend fitting NLHM, also loaded make convergence plot function available. document processed knitr package, also provides kable function used improve display tabular data R markdown documents. parallel processing, parallel package used.","code":"library(mkin) library(knitr) library(saemix) library(parallel) n_cores <- detectCores() # We need to start a new cluster after defining a compiled model that is # saved as a DLL to the user directory, therefore we define a function # This is used again after defining the pathway model start_cluster <- function(n_cores) { if (Sys.info()[\"sysname\"] == \"Windows\") { ret <- makePSOCKcluster(n_cores) } else { ret <- makeForkCluster(n_cores) } return(ret) }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"data","dir":"Articles > Prebuilt","previous_headings":"","what":"Data","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"test data available mkin package object class mkindsg (mkin dataset group) identifier dimethenamid_2018. following preprocessing steps done document. data available enantiomer dimethenamid-P (DMTAP) renamed substance name data racemic mixture dimethenamid (DMTA). reason difference degradation behaviour identified EU risk assessment. Unnecessary columns discarded observation times dataset multiplied corresponding normalisation factor also available dataset, order make possible describe datasets single set parameters independent temperature Finally, datasets observed soil (Elliot 1 Elliot 2) combined, resulting dimethenamid (DMTA) data six soils. following commented R code performs preprocessing. following tables show 6 datasets. Dataset Calke Dataset Borstel Dataset Flaach Dataset BBA 2.2 Dataset BBA 2.3 Dataset Elliot","code":"# Apply a function to each of the seven datasets in the mkindsg object to create a list dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data # Get a dataset ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" # Rename DMTAP to DMTA ds_i <- subset(ds_i, select = c(\"name\", \"time\", \"value\")) # Select data ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] # Normalise time ds_i # Return the dataset }) # Use dataset titles as names for the list elements names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) # Combine data for Elliot soil to obtain a named list with six elements dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) # dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL for (ds_name in names(dmta_ds)) { print( kable(mkin_long_to_wide(dmta_ds[[ds_name]]), caption = paste(\"Dataset\", ds_name), booktabs = TRUE, row.names = FALSE)) cat(\"\\n\\\\clearpage\\n\") }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"separate-evaluations","dir":"Articles > Prebuilt","previous_headings":"","what":"Separate evaluations","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"first step obtain suitable starting parameters NLHM fits, separate fits several variants pathway model used previously (Ranke et al. 2021), varying kinetic model parent compound. SFORB model often provides faster convergence DFOP model, can sometimes fitted DFOP model results errors, included set parent models tested . separate pathway fits SFO FOMC parent constant variance converged (status OK). fits DFOP SFORB parent converged well. fits HS parent converge default settings. two-component error model, set fits convergence problems slightly different, convergence problems appearing different data sets applying DFOP SFORB model additional convergence problems using FOMC model parent.","code":"if (!dir.exists(\"dmta_dlls\")) dir.create(\"dmta_dlls\") m_sfo_path_1 <- mkinmod( DMTA = mkinsub(\"SFO\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_sfo_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) m_fomc_path_1 <- mkinmod( DMTA = mkinsub(\"FOMC\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_fomc_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) m_dfop_path_1 <- mkinmod( DMTA = mkinsub(\"DFOP\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_dfop_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) m_sforb_path_1 <- mkinmod( DMTA = mkinsub(\"SFORB\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_sforb_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) m_hs_path_1 <- mkinmod( DMTA = mkinsub(\"HS\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_hs_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) cl <- start_cluster(n_cores) deg_mods_1 <- list( sfo_path_1 = m_sfo_path_1, fomc_path_1 = m_fomc_path_1, dfop_path_1 = m_dfop_path_1, sforb_path_1 = m_sforb_path_1, hs_path_1 = m_hs_path_1) sep_1_const <- mmkin( deg_mods_1, dmta_ds, error_model = \"const\", quiet = TRUE) status(sep_1_const) |> kable() sep_1_tc <- update(sep_1_const, error_model = \"tc\") status(sep_1_tc) |> kable()"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"hierarchichal-model-fits","dir":"Articles > Prebuilt","previous_headings":"","what":"Hierarchichal model fits","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"following code fits two sets corresponding hierarchical models data, one assuming constant variance, one assuming two-component error. run time fits around two hours five year old hardware. recent hardware upgrade fits complete less twenty minutes. According status function, fits terminated successfully. goodness--fit models compared, warning obtained, indicating likelihood pathway fit SFORB parent compound constant variance calculated importance sampling (method ‘’). default method AIC BIC comparisons based, variant included model comparison table. Comparing goodness--fit remaining models, HS model model two-component error provides best fit. However, batch experiments performed constant conditions experiments evaluated , reason assume discontinuity, SFORB model preferable mechanistic viewpoint. addition, information criteria AIC BIC similar HS SFORB. Therefore, SFORB model selected refinements.","code":"saem_1 <- mhmkin(list(sep_1_const, sep_1_tc)) status(saem_1) |> kable() anova(saem_1) |> kable(digits = 1)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"parameter-identifiability-based-on-the-fisher-information-matrix","dir":"Articles > Prebuilt","previous_headings":"Hierarchichal model fits","what":"Parameter identifiability based on the Fisher Information Matrix","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"Using illparms function, ill-defined statistical model parameters standard deviations degradation parameters population error model parameters can found. using constant variance, ill-defined variance parameters identified illparms function degradation models. using two-component error model, one ill-defined variance parameter variants except variant using DFOP parent compound. selected combination SFORB pathway model two-component error, random effect rate constant reversibly bound DMTA free DMTA (k_DMTA_bound_free) well-defined. Therefore, fit updated without assuming random effect parameter. expected, ill-defined parameters remain. model comparison shows reduced model preferable. convergence plot refined fit shown . parameters, example f_DMTA_ilr_1 f_DMTA_ilr_2, .e. two parameters determining formation fractions parallel formation three metabolites, movement parameters still visible second phase algorithm. However, amplitude movement range amplitude towards end first phase. Therefore, likely increase iterations improve parameter estimates much, proposed fit acceptable. numeric convergence criterion implemented saemix.","code":"illparms(saem_1) |> kable() saem_sforb_path_1_tc_reduced <- update(saem_1[[\"sforb_path_1\", \"tc\"]], no_random_effect = \"log_k_DMTA_bound_free\") illparms(saem_sforb_path_1_tc_reduced) anova(saem_1[[\"sforb_path_1\", \"tc\"]], saem_sforb_path_1_tc_reduced) |> kable(digits = 1) plot(saem_sforb_path_1_tc_reduced$so, plot.type = \"convergence\")"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"alternative-check-of-parameter-identifiability","dir":"Articles > Prebuilt","previous_headings":"Hierarchichal model fits","what":"Alternative check of parameter identifiability","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"alternative check parameter identifiability (Duchesne et al. 2021), multistart runs performed basis refined fit shown . 32 fits initiated, 17 terminated without error. reason wide variation starting parameters combination parameter variation used SAEM algorithm leads parameter combinations degradation model numerical integration routine cope . variation initial parameters, model fits take two times time original fit. Parameter boxplots multistart runs succeeded However, visual analysis boxplot parameters obtained successful fits confirms results sufficiently independent starting parameters, remaining ill-defined parameters.","code":"saem_sforb_path_1_tc_reduced_multi <- multistart(saem_sforb_path_1_tc_reduced, n = 32, cores = 10) print(saem_sforb_path_1_tc_reduced_multi) <multistart> object with 32 fits: E OK 7 25 OK: Fit terminated successfully E: Error par(mar = c(12.1, 4.1, 2.1, 2.1)) parplot(saem_sforb_path_1_tc_reduced_multi, ylim = c(0.5, 2), las = 2)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"plots-of-selected-fits","dir":"Articles > Prebuilt","previous_headings":"","what":"Plots of selected fits","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"SFORB pathway fits full reduced parameter distribution model shown . SFORB pathway fit two-component error SFORB pathway fit two-component error, reduced parameter model Plots remaining fits listings successful fits shown Appendix.","code":"plot(saem_1[[\"sforb_path_1\", \"tc\"]]) plot(saem_sforb_path_1_tc_reduced) stopCluster(cl)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"conclusions","dir":"Articles > Prebuilt","previous_headings":"","what":"Conclusions","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"Pathway fits SFO, FOMC, DFOP, SFORB HS models parent compound successfully performed.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"acknowledgements","dir":"Articles > Prebuilt","previous_headings":"","what":"Acknowledgements","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"helpful comments Janina Wöltjen German Environment Agency earlier versions document gratefully acknowledged.","code":""},{"path":[]},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"plots-of-hierarchical-fits-not-selected-for-refinement","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Plots of hierarchical fits not selected for refinement","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"SFO pathway fit two-component error FOMC pathway fit two-component error HS pathway fit two-component error","code":"plot(saem_1[[\"sfo_path_1\", \"tc\"]]) plot(saem_1[[\"fomc_path_1\", \"tc\"]]) plot(saem_1[[\"sforb_path_1\", \"tc\"]])"},{"path":[]},{"path":[]},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"session-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Session info","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"","code":"R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] saemix_3.2 npde_3.3 knitr_1.42 mkin_1.2.6 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 rprojroot_2.0.3 jsonlite_1.8.4 [13] processx_3.8.1 pkgbuild_1.4.0 deSolve_1.35 DBI_1.1.3 [17] mclust_6.0.0 ps_1.7.5 gridExtra_2.3 purrr_1.0.1 [21] fansi_1.0.4 scales_1.2.1 codetools_0.2-19 textshaping_0.3.6 [25] jquerylib_0.1.4 cli_3.6.1 crayon_1.5.2 rlang_1.1.1 [29] munsell_0.5.0 cachem_1.0.8 yaml_2.3.7 inline_0.3.19 [33] tools_4.3.2 memoise_2.0.1 dplyr_1.1.2 colorspace_2.1-0 [37] ggplot2_3.4.2 vctrs_0.6.2 R6_2.5.1 zoo_1.8-12 [41] lifecycle_1.0.3 stringr_1.5.0 fs_1.6.2 MASS_7.3-60 [45] ragg_1.2.5 callr_3.7.3 pkgconfig_2.0.3 desc_1.4.2 [49] pkgdown_2.0.7 bslib_0.4.2 pillar_1.9.0 gtable_0.3.3 [53] glue_1.6.2 systemfonts_1.0.4 highr_0.10 xfun_0.39 [57] tibble_3.2.1 lmtest_0.9-40 tidyselect_1.2.0 htmltools_0.5.5 [61] nlme_3.1-163 rmarkdown_2.21 compiler_4.3.2 prettyunits_1.1.1"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"hardware-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hardware info","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"","code":"CPU model: AMD Ryzen 9 7950X 16-Core Processor MemTotal: 64927712 kB"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"introduction","dir":"Articles > Prebuilt","previous_headings":"","what":"Introduction","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"purpose document test demonstrate nonlinear hierarchical models (NLHM) based parent degradation models SFO, FOMC, DFOP HS can fitted mkin package, also considering influence covariates like soil pH different degradation parameters. case studies, SFORB parameterisation biexponential decline shown advantages DFOP parameterisation, SFORB included list tested models well. mkin package used version 1.2.6, contains functions used evaluations. saemix package used backend fitting NLHM, also loaded make convergence plot function available. document processed knitr package, also provides kable function used improve display tabular data R markdown documents. parallel processing, parallel package used.","code":"library(mkin) library(knitr) library(saemix) library(parallel) n_cores <- detectCores() if (Sys.info()[\"sysname\"] == \"Windows\") { cl <- makePSOCKcluster(n_cores) } else { cl <- makeForkCluster(n_cores) }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"test-data","dir":"Articles > Prebuilt","previous_headings":"Introduction","what":"Test data","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"following tables show covariate data 18 datasets read spreadsheet file. Covariate data Dataset Richmond Dataset Richmond 2 Dataset ERTC Dataset Toulouse Dataset Picket Piece Dataset 721 Dataset 722 Dataset 723 Dataset 724 Dataset 725 Dataset 727 Dataset 728 Dataset 729 Dataset 730 Dataset 731 Dataset 732 Dataset 741 Dataset 742","code":"data_file <- system.file( \"testdata\", \"mesotrione_soil_efsa_2016.xlsx\", package = \"mkin\") meso_ds <- read_spreadsheet(data_file, parent_only = TRUE) pH <- attr(meso_ds, \"covariates\") kable(pH, caption = \"Covariate data\") for (ds_name in names(meso_ds)) { print( kable(mkin_long_to_wide(meso_ds[[ds_name]]), caption = paste(\"Dataset\", ds_name), booktabs = TRUE, row.names = FALSE)) }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"separate-evaluations","dir":"Articles > Prebuilt","previous_headings":"","what":"Separate evaluations","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"order obtain suitable starting parameters NLHM fits, separate fits five models data soil generated using mmkin function mkin package. first step, constant variance assumed. Convergence checked status function. tables , OK indicates convergence C indicates failure converge. separate fits constant variance converged, exception two FOMC fits, one SFORB fit one HS fit. two-component error model, set fits converge larger, convergence problems appearing number non-SFO fits.","code":"deg_mods <- c(\"SFO\", \"FOMC\", \"DFOP\", \"SFORB\", \"HS\") f_sep_const <- mmkin( deg_mods, meso_ds, error_model = \"const\", cluster = cl, quiet = TRUE) status(f_sep_const[, 1:5]) |> kable() status(f_sep_const[, 6:18]) |> kable() f_sep_tc <- update(f_sep_const, error_model = \"tc\") status(f_sep_tc[, 1:5]) |> kable() status(f_sep_tc[, 6:18]) |> kable()"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"hierarchical-model-fits-without-covariate-effect","dir":"Articles > Prebuilt","previous_headings":"","what":"Hierarchical model fits without covariate effect","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"following code fits hierarchical kinetic models ten combinations five different degradation models two different error models parallel. fits terminate without errors (status OK). model comparisons show fits constant variance consistently preferable corresponding fits two-component error data. confirmed fact parameter b.1 (relative standard deviation fits obtained saemix package), ill-defined fits. obtaining fits well-defined random effects, update set fits, excluding random effects ill-defined according illparms function. updated fits terminate without errors. ill-defined errors remain fits constant variance.","code":"f_saem_1 <- mhmkin(list(f_sep_const, f_sep_tc), cluster = cl) status(f_saem_1) |> kable() anova(f_saem_1) |> kable(digits = 1) illparms(f_saem_1) |> kable() f_saem_2 <- update(f_saem_1, no_random_effect = illparms(f_saem_1)) status(f_saem_2) |> kable() illparms(f_saem_2) |> kable()"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"hierarchical-model-fits-with-covariate-effect","dir":"Articles > Prebuilt","previous_headings":"","what":"Hierarchical model fits with covariate effect","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"following sections, hierarchical fits including model influence pH selected degradation parameters shown parent models. Constant variance selected error model based fits without covariate effects. Random effects ill-defined fits without pH influence excluded. potential influence soil pH included parameters well-defined random effect, experience shown parameters significant pH effect found.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"sfo","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"SFO","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"parameter showing pH influence table beta_pH(log_k_meso). confidence interval include zero, indicating influence soil pH log degradation rate constant significantly greater zero. comparison SFO fit without covariate effect confirms considering soil pH improves model, comparison AIC BIC likelihood ratio test. Endpoints model covariates default calculated median covariate values. quantile can adapted, specific covariate value can given shown .","code":"sfo_pH <- saem(f_sep_const[\"SFO\", ], no_random_effect = \"meso_0\", covariates = pH, covariate_models = list(log_k_meso ~ pH)) summary(sfo_pH)$confint_trans |> kable(digits = 2) anova(f_saem_2[[\"SFO\", \"const\"]], sfo_pH, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) f_saem_2[[\"SFO\", \"const\"]] 4 797.56 801.12 -394.78 sfo_pH 5 783.09 787.54 -386.54 16.473 1 4.934e-05 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 plot(sfo_pH) endpoints(sfo_pH) $covariates pH 50% 5.75 $distimes DT50 DT90 meso 18.52069 61.52441 endpoints(sfo_pH, covariate_quantile = 0.9) $covariates pH 90% 7.13 $distimes DT50 DT90 meso 8.237019 27.36278 endpoints(sfo_pH, covariates = c(pH = 7.0)) $covariates pH User 7 $distimes DT50 DT90 meso 8.89035 29.5331"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"fomc","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"FOMC","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"case SFO, confidence interval slope parameter (beta_pH(log_alpha)) quantifying influence soil pH include zero, model comparison clearly indicates model covariate influence preferable. However, random effect alpha well-defined inclusion covariate effect (confidence interval SD.log_alpha includes zero). Therefore, model updated without random effect, ill-defined parameters remain. Model comparison indicates including pH dependence significantly improves fit, reduced model covariate influence results preferable FOMC fit.","code":"fomc_pH <- saem(f_sep_const[\"FOMC\", ], no_random_effect = \"meso_0\", covariates = pH, covariate_models = list(log_alpha ~ pH)) summary(fomc_pH)$confint_trans |> kable(digits = 2) illparms(fomc_pH) [1] \"sd(log_alpha)\" fomc_pH_2 <- update(fomc_pH, no_random_effect = c(\"meso_0\", \"log_alpha\")) illparms(fomc_pH_2) anova(f_saem_2[[\"FOMC\", \"const\"]], fomc_pH, fomc_pH_2, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) f_saem_2[[\"FOMC\", \"const\"]] 5 783.25 787.71 -386.63 fomc_pH_2 6 767.49 772.83 -377.75 17.762 1 2.503e-05 *** fomc_pH 7 770.07 776.30 -378.04 0.000 1 1 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(fomc_pH_2)$confint_trans |> kable(digits = 2) plot(fomc_pH_2) endpoints(fomc_pH_2) $covariates pH 50% 5.75 $distimes DT50 DT90 DT50back meso 17.30248 82.91343 24.95943 endpoints(fomc_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $distimes DT50 DT90 DT50back meso 6.986239 27.02927 8.136621"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"dfop","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"DFOP","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"DFOP fits without covariate effects, random effects two degradation parameters (k2 g) identifiable. fit pH dependent degradation parameters obtained excluding random effects refined DFOP fit without covariate influence, including covariate models two identifiable parameters k2 g. corresponding parameters influence soil pH beta_pH(log_k2) influence soil pH k2, beta_pH(g_qlogis) influence g. Confidence intervals neither include zero, indicating significant difference zero. However, random effect g now ill-defined. fit updated without ill-defined random effect. Now, slope parameter pH effect g ill-defined. Therefore, another attempt made without corresponding covariate model. random effect g ill-defined, fit repeated without . ill-defined parameters remain, model comparison suggests previous model dfop_pH_2 two pH dependent parameters preferable, based information criteria well based likelihood ratio test. focussing parameter identifiability using test confidence interval includes zero, dfop_pH_4 still preferred model. However, kept mind parameter confidence intervals constructed using simple linearisation likelihood. confidence interval random effect g marginally includes zero, suggested acceptable, dfop_pH_2 can considered preferable model.","code":"summary(f_saem_2[[\"DFOP\", \"const\"]])$confint_trans |> kable(digits = 2) dfop_pH <- saem(f_sep_const[\"DFOP\", ], no_random_effect = c(\"meso_0\", \"log_k1\"), covariates = pH, covariate_models = list(log_k2 ~ pH, g_qlogis ~ pH)) summary(dfop_pH)$confint_trans |> kable(digits = 2) illparms(dfop_pH) [1] \"sd(g_qlogis)\" dfop_pH_2 <- update(dfop_pH, no_random_effect = c(\"meso_0\", \"log_k1\", \"g_qlogis\")) illparms(dfop_pH_2) [1] \"beta_pH(g_qlogis)\" dfop_pH_3 <- saem(f_sep_const[\"DFOP\", ], no_random_effect = c(\"meso_0\", \"log_k1\"), covariates = pH, covariate_models = list(log_k2 ~ pH)) illparms(dfop_pH_3) [1] \"sd(g_qlogis)\" dfop_pH_4 <- update(dfop_pH_3, no_random_effect = c(\"meso_0\", \"log_k1\", \"g_qlogis\")) illparms(dfop_pH_4) anova(f_saem_2[[\"DFOP\", \"const\"]], dfop_pH, dfop_pH_2, dfop_pH_3, dfop_pH_4) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik f_saem_2[[\"DFOP\", \"const\"]] 7 782.94 789.18 -384.47 dfop_pH_4 7 767.35 773.58 -376.68 dfop_pH_2 8 765.14 772.26 -374.57 dfop_pH_3 8 769.00 776.12 -376.50 dfop_pH 9 769.10 777.11 -375.55 anova(dfop_pH_2, dfop_pH_4, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) dfop_pH_4 7 767.35 773.58 -376.68 dfop_pH_2 8 765.14 772.26 -374.57 4.2153 1 0.04006 * --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 plot(dfop_pH_2) endpoints(dfop_pH_2) $covariates pH 50% 5.75 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 18.36876 73.51841 22.13125 4.191901 23.98672 endpoints(dfop_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 8.346428 28.34437 8.532507 4.191901 8.753618"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"sforb","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"SFORB","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"confidence interval beta_pH(log_k_meso_bound_free) includes zero, indicating influence soil pH k_meso_bound_free reliably quantified. Also, confidence interval random effect parameter (SD.log_k_meso_bound_free) includes zero. Using illparms function, ill-defined parameters can found conveniently. remove ill-defined parameters, second variant SFORB model pH influence fitted. ill-defined parameters remain. model comparison SFORB fits includes refined model without covariate effect, versions SFORB fit covariate effect. first model including pH influence preferable based information criteria likelihood ratio test. However, fully identifiable, second model selected.","code":"sforb_pH <- saem(f_sep_const[\"SFORB\", ], no_random_effect = c(\"meso_free_0\", \"log_k_meso_free_bound\"), covariates = pH, covariate_models = list(log_k_meso_free ~ pH, log_k_meso_bound_free ~ pH)) summary(sforb_pH)$confint_trans |> kable(digits = 2) illparms(sforb_pH) [1] \"sd(log_k_meso_bound_free)\" \"beta_pH(log_k_meso_bound_free)\" sforb_pH_2 <- update(sforb_pH, no_random_effect = c(\"meso_free_0\", \"log_k_meso_free_bound\", \"log_k_meso_bound_free\"), covariate_models = list(log_k_meso_free ~ pH)) illparms(sforb_pH_2) anova(f_saem_2[[\"SFORB\", \"const\"]], sforb_pH, sforb_pH_2, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) f_saem_2[[\"SFORB\", \"const\"]] 7 783.40 789.63 -384.70 sforb_pH_2 7 770.94 777.17 -378.47 12.4616 0 sforb_pH 9 768.81 776.83 -375.41 6.1258 2 0.04675 * --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(sforb_pH_2)$confint_trans |> kable(digits = 2) plot(sforb_pH_2) endpoints(sforb_pH_2) $covariates pH 50% 5.75 $ff meso_free 1 $SFORB meso_b1 meso_b2 meso_g 0.09735824 0.02631699 0.31602120 $distimes DT50 DT90 DT50back DT50_meso_b1 DT50_meso_b2 meso 16.86549 73.15824 22.02282 7.119554 26.33839 endpoints(sforb_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $ff meso_free 1 $SFORB meso_b1 meso_b2 meso_g 0.13315233 0.03795988 0.61186191 $distimes DT50 DT90 DT50back DT50_meso_b1 DT50_meso_b2 meso 7.932495 36.93311 11.11797 5.205671 18.26"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"hs","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"HS","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"According output illparms function, random effect break time tb reliably quantified, neither can influence soil pH tb. fit repeated without corresponding covariate model, ill-defined parameters remain. Model comparison confirms model preferable fit without covariate influence, also first version covariate influence.","code":"hs_pH <- saem(f_sep_const[\"HS\", ], no_random_effect = c(\"meso_0\"), covariates = pH, covariate_models = list(log_k1 ~ pH, log_k2 ~ pH, log_tb ~ pH)) summary(hs_pH)$confint_trans |> kable(digits = 2) illparms(hs_pH) [1] \"sd(log_tb)\" \"beta_pH(log_tb)\" hs_pH_2 <- update(hs_pH, covariate_models = list(log_k1 ~ pH, log_k2 ~ pH)) illparms(hs_pH_2) anova(f_saem_2[[\"HS\", \"const\"]], hs_pH, hs_pH_2, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) f_saem_2[[\"HS\", \"const\"]] 8 780.08 787.20 -382.04 hs_pH_2 10 766.47 775.37 -373.23 17.606 2 0.0001503 *** hs_pH 11 769.80 779.59 -373.90 0.000 1 1.0000000 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(hs_pH_2)$confint_trans |> kable(digits = 2) plot(hs_pH_2) endpoints(hs_pH_2) $covariates pH 50% 5.75 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 14.68725 82.45287 24.82079 14.68725 29.29299 endpoints(hs_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 8.298536 38.85371 11.69613 8.298536 15.71561"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"comparison-across-parent-models","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"Comparison across parent models","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"model reduction models pH influence, compared . DFOP model pH influence k2 g random effect k2 finally selected best fit. endpoints resulting model listed . Please refer Appendix detailed listing.","code":"anova(sfo_pH, fomc_pH_2, dfop_pH_2, dfop_pH_4, sforb_pH_2, hs_pH_2) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik sfo_pH 5 783.09 787.54 -386.54 fomc_pH_2 6 767.49 772.83 -377.75 dfop_pH_4 7 767.35 773.58 -376.68 sforb_pH_2 7 770.94 777.17 -378.47 dfop_pH_2 8 765.14 772.26 -374.57 hs_pH_2 10 766.47 775.37 -373.23 endpoints(dfop_pH_2) $covariates pH 50% 5.75 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 18.36876 73.51841 22.13125 4.191901 23.98672 endpoints(dfop_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 8.346428 28.34437 8.532507 4.191901 8.753618"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"conclusions","dir":"Articles > Prebuilt","previous_headings":"","what":"Conclusions","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"evaluations demonstrate covariate effects can included types parent degradation models. models can refined make fully identifiable.","code":""},{"path":[]},{"path":[]},{"path":[]},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"session-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Session info","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"","code":"R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] saemix_3.2 npde_3.3 knitr_1.42 mkin_1.2.6 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 rprojroot_2.0.3 jsonlite_1.8.4 [13] DBI_1.1.3 mclust_6.0.0 gridExtra_2.3 purrr_1.0.1 [17] fansi_1.0.4 scales_1.2.1 textshaping_0.3.6 jquerylib_0.1.4 [21] cli_3.6.1 rlang_1.1.1 munsell_0.5.0 cachem_1.0.8 [25] yaml_2.3.7 tools_4.3.2 memoise_2.0.1 dplyr_1.1.2 [29] colorspace_2.1-0 ggplot2_3.4.2 vctrs_0.6.2 R6_2.5.1 [33] zoo_1.8-12 lifecycle_1.0.3 stringr_1.5.0 fs_1.6.2 [37] MASS_7.3-60 ragg_1.2.5 pkgconfig_2.0.3 desc_1.4.2 [41] pkgdown_2.0.7 bslib_0.4.2 pillar_1.9.0 gtable_0.3.3 [45] glue_1.6.2 systemfonts_1.0.4 xfun_0.39 tibble_3.2.1 [49] lmtest_0.9-40 tidyselect_1.2.0 htmltools_0.5.5 nlme_3.1-163 [53] rmarkdown_2.21 compiler_4.3.2"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"hardware-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hardware info","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"","code":"CPU model: AMD Ryzen 9 7950X 16-Core Processor MemTotal: 64928100 kB"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html","id":"the-data","dir":"Articles > Web_only","previous_headings":"","what":"The data","title":"Example evaluation of FOCUS dataset Z","text":"following code defines example dataset Appendix 7 FOCUS kinetics report (FOCUS Work Group Degradation Kinetics 2014, 354).","code":"library(mkin, quietly = TRUE) LOD = 0.5 FOCUS_2006_Z = data.frame( t = c(0, 0.04, 0.125, 0.29, 0.54, 1, 2, 3, 4, 7, 10, 14, 21, 42, 61, 96, 124), Z0 = c(100, 81.7, 70.4, 51.1, 41.2, 6.6, 4.6, 3.9, 4.6, 4.3, 6.8, 2.9, 3.5, 5.3, 4.4, 1.2, 0.7), Z1 = c(0, 18.3, 29.6, 46.3, 55.1, 65.7, 39.1, 36, 15.3, 5.6, 1.1, 1.6, 0.6, 0.5 * LOD, NA, NA, NA), Z2 = c(0, NA, 0.5 * LOD, 2.6, 3.8, 15.3, 37.2, 31.7, 35.6, 14.5, 0.8, 2.1, 1.9, 0.5 * LOD, NA, NA, NA), Z3 = c(0, NA, NA, NA, NA, 0.5 * LOD, 9.2, 13.1, 22.3, 28.4, 32.5, 25.2, 17.2, 4.8, 4.5, 2.8, 4.4)) FOCUS_2006_Z_mkin <- mkin_wide_to_long(FOCUS_2006_Z)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html","id":"parent-and-one-metabolite","dir":"Articles > Web_only","previous_headings":"","what":"Parent and one metabolite","title":"Example evaluation of FOCUS dataset Z","text":"next step set models used kinetic analysis. simultaneous fit parent first metabolite usually straightforward, Step 1 (SFO parent ) skipped . start model 2a, formation decline metabolite Z1 pathway parent directly sink included (default mkin). obvious parameter summary (component summary), kinetic rate constant parent compound Z sink small t-test parameter suggests significantly different zero. suggests, agreement analysis FOCUS kinetics report, simplify model removing pathway sink. similar result can obtained formation fractions used model formulation: , ilr transformed formation fraction fitted model takes large value, backtransformed formation fraction parent Z Z1 practically unity. , covariance matrix used calculation confidence intervals returned model overparameterised. simplified model obtained removing pathway sink. following, use parameterisation formation fractions order able compare results FOCUS guidance, makes easier use parameters obtained previous fit adding metabolite. one transformation product Z0 pathway sink, formation fraction internally fixed unity.","code":"Z.2a <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\"), Z1 = mkinsub(\"SFO\")) ## Temporary DLL for differentials generated and loaded m.Z.2a <- mkinfit(Z.2a, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.2a, FOCUS_2006_Z_mkin, quiet = TRUE): Observations with ## value of zero were removed from the data plot_sep(m.Z.2a) summary(m.Z.2a, data = FALSE)$bpar ## Estimate se_notrans t value Pr(>t) Lower Upper ## Z0_0 97.01488 3.301084 29.3888 3.2971e-21 91.66556 102.3642 ## k_Z0 2.23601 0.207078 10.7979 3.3309e-11 1.95303 2.5600 ## k_Z1 0.48212 0.063265 7.6207 2.8154e-08 0.40341 0.5762 ## f_Z0_to_Z1 1.00000 0.094764 10.5525 5.3560e-11 0.00000 1.0000 ## sigma 4.80411 0.635638 7.5579 3.2592e-08 3.52677 6.0815 Z.2a.ff <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\"), Z1 = mkinsub(\"SFO\"), use_of_ff = \"max\") ## Temporary DLL for differentials generated and loaded m.Z.2a.ff <- mkinfit(Z.2a.ff, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.2a.ff, FOCUS_2006_Z_mkin, quiet = TRUE): Observations with ## value of zero were removed from the data plot_sep(m.Z.2a.ff) summary(m.Z.2a.ff, data = FALSE)$bpar ## Estimate se_notrans t value Pr(>t) Lower Upper ## Z0_0 97.01488 3.301084 29.3888 3.2971e-21 91.66556 102.3642 ## k_Z0 2.23601 0.207078 10.7979 3.3309e-11 1.95303 2.5600 ## k_Z1 0.48212 0.063265 7.6207 2.8154e-08 0.40341 0.5762 ## f_Z0_to_Z1 1.00000 0.094764 10.5525 5.3560e-11 0.00000 1.0000 ## sigma 4.80411 0.635638 7.5579 3.2592e-08 3.52677 6.0815 Z.3 <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\"), use_of_ff = \"max\") ## Temporary DLL for differentials generated and loaded m.Z.3 <- mkinfit(Z.3, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.3, FOCUS_2006_Z_mkin, quiet = TRUE): Observations with ## value of zero were removed from the data plot_sep(m.Z.3) summary(m.Z.3, data = FALSE)$bpar ## Estimate se_notrans t value Pr(>t) Lower Upper ## Z0_0 97.01488 2.597342 37.352 2.0106e-24 91.67597 102.3538 ## k_Z0 2.23601 0.146904 15.221 9.1477e-15 1.95354 2.5593 ## k_Z1 0.48212 0.041727 11.554 4.8268e-12 0.40355 0.5760 ## sigma 4.80411 0.620208 7.746 1.6110e-08 3.52925 6.0790"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html","id":"metabolites-z2-and-z3","dir":"Articles > Web_only","previous_headings":"","what":"Metabolites Z2 and Z3","title":"Example evaluation of FOCUS dataset Z","text":"suggested FOCUS report, pathway sink removed metabolite Z1 well next step. step appears questionable basis results, followed purpose comparison. Also, FOCUS report, assumed additional empirical evidence Z1 quickly exclusively hydrolyses Z2. Finally, metabolite Z3 added model. use optimised differential equation parameter values previous fit order accelerate optimization. fit corresponds final result chosen Appendix 7 FOCUS report. Confidence intervals returned mkin based internally transformed parameters, however.","code":"Z.5 <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\"), use_of_ff = \"max\") ## Temporary DLL for differentials generated and loaded m.Z.5 <- mkinfit(Z.5, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.5, FOCUS_2006_Z_mkin, quiet = TRUE): Observations with ## value of zero were removed from the data plot_sep(m.Z.5) Z.FOCUS <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\", \"Z3\"), Z3 = mkinsub(\"SFO\"), use_of_ff = \"max\") ## Temporary DLL for differentials generated and loaded m.Z.FOCUS <- mkinfit(Z.FOCUS, FOCUS_2006_Z_mkin, parms.ini = m.Z.5$bparms.ode, quiet = TRUE) ## Warning in mkinfit(Z.FOCUS, FOCUS_2006_Z_mkin, parms.ini = m.Z.5$bparms.ode, : ## Observations with value of zero were removed from the data ## Warning in mkinfit(Z.FOCUS, FOCUS_2006_Z_mkin, parms.ini = m.Z.5$bparms.ode, : Optimisation did not converge: ## false convergence (8) plot_sep(m.Z.FOCUS) summary(m.Z.FOCUS, data = FALSE)$bpar ## Estimate se_notrans t value Pr(>t) Lower Upper ## Z0_0 96.842440 1.994291 48.5598 4.0226e-42 92.830421 100.854459 ## k_Z0 2.215425 0.118457 18.7023 1.0404e-23 1.989490 2.467019 ## k_Z1 0.478307 0.028257 16.9272 6.2332e-22 0.424709 0.538669 ## k_Z2 0.451642 0.042139 10.7178 1.6304e-14 0.374348 0.544894 ## k_Z3 0.058692 0.015245 3.8499 1.7803e-04 0.034804 0.098975 ## f_Z2_to_Z3 0.471483 0.058348 8.0806 9.6585e-11 0.357720 0.588287 ## sigma 3.984431 0.383402 10.3923 4.5576e-14 3.213126 4.755737 endpoints(m.Z.FOCUS) ## $ff ## Z2_Z3 Z2_sink ## 0.47148 0.52852 ## ## $distimes ## DT50 DT90 ## Z0 0.31287 1.0393 ## Z1 1.44917 4.8140 ## Z2 1.53473 5.0983 ## Z3 11.80991 39.2317"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html","id":"using-the-sforb-model","dir":"Articles > Web_only","previous_headings":"","what":"Using the SFORB model","title":"Example evaluation of FOCUS dataset Z","text":"FOCUS report states, certain tailing time course metabolite Z3. Also, time course parent compound fitted well using SFO model, residues certain low level remain. Therefore, additional model offered , using single first-order reversible binding (SFORB) model metabolite Z3. expected, \\(\\chi^2\\) error level lower metabolite Z3 using model graphical fit Z3 improved. However, covariance matrix returned. Therefore, stepwise model building performed starting stage parent two metabolites, starting assumption model fit parent compound can improved using SFORB model. results much better representation behaviour parent compound Z0. Finally, Z3 added well. models appear overparameterised (covariance matrix returned) sink Z1 left models. error level fit, especially metabolite Z3, can improved SFORB model chosen metabolite, model capable representing tailing metabolite decline phase. summary view backtransformed parameters shows get confidence intervals due overparameterisation. optimized excessively small, seems reasonable fix zero. expected, residual plots Z0 Z3 random case SFO model shown . conclusion, model proposed best-fit model dataset Appendix 7 FOCUS report. graphical representation confidence intervals can finally obtained. endpoints obtained model clear degradation rate Z3 towards end experiment low DT50_Z3_b2 (second Eigenvalue system two differential equations representing SFORB system Z3, corresponding slower rate constant DFOP model) reported infinity. However, appears feature data.","code":"Z.mkin.1 <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\", \"Z3\"), Z3 = mkinsub(\"SFORB\")) ## Temporary DLL for differentials generated and loaded m.Z.mkin.1 <- mkinfit(Z.mkin.1, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.mkin.1, FOCUS_2006_Z_mkin, quiet = TRUE): Observations ## with value of zero were removed from the data plot_sep(m.Z.mkin.1) summary(m.Z.mkin.1, data = FALSE)$cov.unscaled ## NULL Z.mkin.3 <- mkinmod(Z0 = mkinsub(\"SFORB\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\")) ## Temporary DLL for differentials generated and loaded m.Z.mkin.3 <- mkinfit(Z.mkin.3, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.mkin.3, FOCUS_2006_Z_mkin, quiet = TRUE): Observations ## with value of zero were removed from the data plot_sep(m.Z.mkin.3) Z.mkin.4 <- mkinmod(Z0 = mkinsub(\"SFORB\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\", \"Z3\"), Z3 = mkinsub(\"SFO\")) ## Temporary DLL for differentials generated and loaded m.Z.mkin.4 <- mkinfit(Z.mkin.4, FOCUS_2006_Z_mkin, parms.ini = m.Z.mkin.3$bparms.ode, quiet = TRUE) ## Warning in mkinfit(Z.mkin.4, FOCUS_2006_Z_mkin, parms.ini = ## m.Z.mkin.3$bparms.ode, : Observations with value of zero were removed from the ## data plot_sep(m.Z.mkin.4) Z.mkin.5 <- mkinmod(Z0 = mkinsub(\"SFORB\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\", \"Z3\"), Z3 = mkinsub(\"SFORB\")) ## Temporary DLL for differentials generated and loaded m.Z.mkin.5 <- mkinfit(Z.mkin.5, FOCUS_2006_Z_mkin, parms.ini = m.Z.mkin.4$bparms.ode[1:4], quiet = TRUE) ## Warning in mkinfit(Z.mkin.5, FOCUS_2006_Z_mkin, parms.ini = ## m.Z.mkin.4$bparms.ode[1:4], : Observations with value of zero were removed from ## the data plot_sep(m.Z.mkin.5) m.Z.mkin.5a <- mkinfit(Z.mkin.5, FOCUS_2006_Z_mkin, parms.ini = c(m.Z.mkin.5$bparms.ode[1:7], k_Z3_bound_free = 0), fixed_parms = \"k_Z3_bound_free\", quiet = TRUE) ## Warning in mkinfit(Z.mkin.5, FOCUS_2006_Z_mkin, parms.ini = ## c(m.Z.mkin.5$bparms.ode[1:7], : Observations with value of zero were removed ## from the data plot_sep(m.Z.mkin.5a) mkinparplot(m.Z.mkin.5a) endpoints(m.Z.mkin.5a) ## $ff ## Z0_free Z2_Z3 Z2_sink Z3_free ## 1.00000 0.53656 0.46344 1.00000 ## ## $SFORB ## Z0_b1 Z0_b2 Z0_g Z3_b1 Z3_b2 Z3_g ## 2.4471342 0.0075124 0.9519866 0.0800071 0.0000000 0.9347816 ## ## $distimes ## DT50 DT90 DT50back DT50_Z0_b1 DT50_Z0_b2 DT50_Z3_b1 DT50_Z3_b2 ## Z0 0.3043 1.1848 0.35666 0.28325 92.267 NA NA ## Z1 1.5148 5.0320 NA NA NA NA NA ## Z2 1.6414 5.4526 NA NA NA NA NA ## Z3 NA NA NA NA NA 8.6636 Inf"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"introduction","dir":"Articles > Web_only","previous_headings":"","what":"Introduction","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"document, example evaluations provided Attachment 1 SOP US EPA using NAFTA guidance (US EPA 2015) repeated using mkin. original evaluations reported attachment performed using PestDF version 0.8.4. Note PestDF 0.8.13 version distributed US EPA website today (2019-02-26). datasets now distributed mkin package.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"examples-where-dfop-did-not-converge-with-pestdf-0-8-4","dir":"Articles > Web_only","previous_headings":"","what":"Examples where DFOP did not converge with PestDF 0.8.4","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"attachment 1, reported DFOP model converge datasets PestDF 0.8.4 used. four datasets, DFOP model can fitted mkin (see ). negative half-life given PestDF 0.8.4 fits appears result bug. results two models (SFO IORE) .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-5-upper-panel","dir":"Articles > Web_only","previous_headings":"Examples where DFOP did not converge with PestDF 0.8.4","what":"Example on page 5, upper panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p5a <- nafta(NAFTA_SOP_Attachment[[\"p5a\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p5a) print(p5a) ## Sums of squares: ## SFO IORE DFOP ## 465.21753 56.27506 32.06401 ## ## Critical sum of squares for checking the SFO model: ## [1] 64.4304 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 95.8401 4.67e-21 92.245 99.4357 ## k_parent 0.0102 3.92e-12 0.009 0.0117 ## sigma 4.8230 3.81e-06 3.214 6.4318 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 1.01e+02 NA 9.91e+01 1.02e+02 ## k__iore_parent 1.54e-05 NA 4.08e-06 5.84e-05 ## N_parent 2.57e+00 NA 2.25e+00 2.89e+00 ## sigma 1.68e+00 NA 1.12e+00 2.24e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.99e+01 1.41e-26 98.8116 101.0810 ## k1 2.67e-02 5.05e-06 0.0243 0.0295 ## k2 3.41e-12 5.00e-01 0.0000 Inf ## g 6.47e-01 3.67e-06 0.6248 0.6677 ## sigma 1.27e+00 8.91e-06 0.8395 1.6929 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 67.7 2.25e+02 6.77e+01 ## IORE 58.2 1.07e+03 3.22e+02 ## DFOP 55.5 3.70e+11 2.03e+11 ## ## Representative half-life: ## [1] 321.51"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-5-lower-panel","dir":"Articles > Web_only","previous_headings":"Examples where DFOP did not converge with PestDF 0.8.4","what":"Example on page 5, lower panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p5b <- nafta(NAFTA_SOP_Attachment[[\"p5b\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p5b) print(p5b) ## Sums of squares: ## SFO IORE DFOP ## 94.81123 10.10936 7.55871 ## ## Critical sum of squares for checking the SFO model: ## [1] 11.77879 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 96.497 2.32e-24 94.85271 98.14155 ## k_parent 0.008 3.42e-14 0.00737 0.00869 ## sigma 2.295 1.22e-05 1.47976 3.11036 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 9.85e+01 1.17e-28 9.79e+01 9.92e+01 ## k__iore_parent 1.53e-04 6.50e-03 7.21e-05 3.26e-04 ## N_parent 1.94e+00 5.88e-13 1.76e+00 2.12e+00 ## sigma 7.49e-01 1.63e-05 4.82e-01 1.02e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.84e+01 1.24e-27 97.8078 98.9187 ## k1 1.55e-02 4.10e-04 0.0143 0.0167 ## k2 9.07e-12 5.00e-01 0.0000 Inf ## g 6.89e-01 2.92e-03 0.6626 0.7142 ## sigma 6.48e-01 2.38e-05 0.4147 0.8813 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 86.6 2.88e+02 8.66e+01 ## IORE 85.5 7.17e+02 2.16e+02 ## DFOP 83.6 1.25e+11 7.64e+10 ## ## Representative half-life: ## [1] 215.87"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-6","dir":"Articles > Web_only","previous_headings":"Examples where DFOP did not converge with PestDF 0.8.4","what":"Example on page 6","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p6 <- nafta(NAFTA_SOP_Attachment[[\"p6\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p6) print(p6) ## Sums of squares: ## SFO IORE DFOP ## 188.45361 51.00699 42.46931 ## ## Critical sum of squares for checking the SFO model: ## [1] 58.39888 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 94.7759 7.29e-24 92.3478 97.2039 ## k_parent 0.0179 8.02e-16 0.0166 0.0194 ## sigma 3.0696 3.81e-06 2.0456 4.0936 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 97.12446 2.63e-26 95.62461 98.62431 ## k__iore_parent 0.00252 1.95e-03 0.00134 0.00472 ## N_parent 1.49587 4.07e-13 1.33896 1.65279 ## sigma 1.59698 5.05e-06 1.06169 2.13227 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.66e+01 1.57e-25 95.3476 97.8979 ## k1 2.55e-02 7.33e-06 0.0233 0.0278 ## k2 3.84e-11 5.00e-01 0.0000 Inf ## g 8.61e-01 7.55e-06 0.8314 0.8867 ## sigma 1.46e+00 6.93e-06 0.9661 1.9483 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 38.6 1.28e+02 3.86e+01 ## IORE 34.0 1.77e+02 5.32e+01 ## DFOP 34.1 8.50e+09 1.80e+10 ## ## Representative half-life: ## [1] 53.17"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-7","dir":"Articles > Web_only","previous_headings":"Examples where DFOP did not converge with PestDF 0.8.4","what":"Example on page 7","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p7 <- nafta(NAFTA_SOP_Attachment[[\"p7\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p7) print(p7) ## Sums of squares: ## SFO IORE DFOP ## 3661.661 3195.030 3174.145 ## ## Critical sum of squares for checking the SFO model: ## [1] 3334.194 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 96.41796 4.80e-53 93.32245 99.51347 ## k_parent 0.00735 7.64e-21 0.00641 0.00843 ## sigma 7.94557 1.83e-15 6.46713 9.42401 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 9.92e+01 NA 9.55e+01 1.03e+02 ## k__iore_parent 1.60e-05 NA 1.45e-07 1.77e-03 ## N_parent 2.45e+00 NA 1.35e+00 3.54e+00 ## sigma 7.42e+00 NA 6.04e+00 8.80e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.89e+01 9.44e-49 95.4640 102.2573 ## k1 1.81e-02 1.75e-01 0.0116 0.0281 ## k2 3.62e-10 5.00e-01 0.0000 Inf ## g 6.06e-01 2.19e-01 0.4826 0.7178 ## sigma 7.40e+00 2.97e-15 6.0201 8.7754 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 94.3 3.13e+02 9.43e+01 ## IORE 96.7 1.51e+03 4.55e+02 ## DFOP 96.4 3.79e+09 1.92e+09 ## ## Representative half-life: ## [1] 454.55"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-8","dir":"Articles > Web_only","previous_headings":"Examples where the representative half-life deviates from the observed DT50","what":"Example on page 8","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"dataset, IORE fit converge default starting values used mkin IORE model used. Therefore, lower value rate constant used .","code":"p8 <- nafta(NAFTA_SOP_Attachment[[\"p8\"]], parms.ini = c(k__iore_parent = 1e-3)) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p8) print(p8) ## Sums of squares: ## SFO IORE DFOP ## 1996.9408 444.9237 547.5616 ## ## Critical sum of squares for checking the SFO model: ## [1] 477.4924 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 88.16549 6.53e-29 83.37344 92.95754 ## k_parent 0.00803 1.67e-13 0.00674 0.00957 ## sigma 7.44786 4.17e-10 5.66209 9.23363 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 9.77e+01 7.03e-35 9.44e+01 1.01e+02 ## k__iore_parent 6.14e-05 3.20e-02 2.12e-05 1.78e-04 ## N_parent 2.27e+00 4.23e-18 2.00e+00 2.54e+00 ## sigma 3.52e+00 5.36e-10 2.67e+00 4.36e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 95.70619 8.99e-32 91.87941 99.53298 ## k1 0.02500 5.25e-04 0.01422 0.04394 ## k2 0.00273 6.84e-03 0.00125 0.00597 ## g 0.58835 2.84e-06 0.36595 0.77970 ## sigma 3.90001 6.94e-10 2.96260 4.83741 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 86.3 287 86.3 ## IORE 53.4 668 201.0 ## DFOP 55.6 517 253.0 ## ## Representative half-life: ## [1] 201.03"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-9-upper-panel","dir":"Articles > Web_only","previous_headings":"Examples where SFO was not selected for an abiotic study","what":"Example on page 9, upper panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"example, residuals SFO indicate lack fit model, even abiotic experiment, data suggest simple exponential decline.","code":"p9a <- nafta(NAFTA_SOP_Attachment[[\"p9a\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p9a) print(p9a) ## Sums of squares: ## SFO IORE DFOP ## 839.35238 88.57064 9.93363 ## ## Critical sum of squares for checking the SFO model: ## [1] 105.5678 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 88.1933 3.06e-12 79.9447 96.4419 ## k_parent 0.0409 2.07e-07 0.0324 0.0516 ## sigma 7.2429 3.92e-05 4.4768 10.0090 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 9.89e+01 1.12e-16 9.54e+01 1.02e+02 ## k__iore_parent 1.93e-05 1.13e-01 3.49e-06 1.06e-04 ## N_parent 2.91e+00 1.45e-09 2.50e+00 3.32e+00 ## sigma 2.35e+00 5.31e-05 1.45e+00 3.26e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.85e+01 2.54e-20 97.390 99.672 ## k1 1.38e-01 3.52e-05 0.131 0.146 ## k2 9.02e-13 5.00e-01 0.000 Inf ## g 6.52e-01 8.13e-06 0.642 0.661 ## sigma 7.88e-01 6.13e-02 0.481 1.095 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 16.9 5.63e+01 1.69e+01 ## IORE 11.6 3.37e+02 1.01e+02 ## DFOP 10.5 1.38e+12 7.68e+11 ## ## Representative half-life: ## [1] 101.43"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-9-lower-panel","dir":"Articles > Web_only","previous_headings":"Examples where SFO was not selected for an abiotic study","what":"Example on page 9, lower panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":", mkin gives longer slow DT50 DFOP model (17.8 days) PestDF (13.5 days). Presumably, related fact PestDF gives negative value proportion fast degradation 0 1, inclusive. parameter called f PestDF g mkin. mkin, restricted interval 0 1.","code":"p9b <- nafta(NAFTA_SOP_Attachment[[\"p9b\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p9b) print(p9b) ## Sums of squares: ## SFO IORE DFOP ## 35.64867 23.22334 35.64867 ## ## Critical sum of squares for checking the SFO model: ## [1] 28.54188 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 94.7123 2.15e-19 93.178 96.2464 ## k_parent 0.0389 4.47e-14 0.037 0.0408 ## sigma 1.5957 1.28e-04 0.932 2.2595 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 93.863 2.32e-18 92.4565 95.269 ## k__iore_parent 0.127 1.85e-02 0.0504 0.321 ## N_parent 0.711 1.88e-05 0.4843 0.937 ## sigma 1.288 1.76e-04 0.7456 1.830 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 94.7123 1.61e-16 93.1355 96.2891 ## k1 0.0389 1.08e-04 0.0266 0.0569 ## k2 0.0389 2.24e-04 0.0255 0.0592 ## g 0.5256 5.00e-01 0.0000 1.0000 ## sigma 1.5957 2.50e-04 0.9135 2.2779 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 17.8 59.2 17.8 ## IORE 18.4 49.2 14.8 ## DFOP 17.8 59.2 17.8 ## ## Representative half-life: ## [1] 14.8"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-10","dir":"Articles > Web_only","previous_headings":"Examples where SFO was not selected for an abiotic study","what":"Example on page 10","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":", value N given IORE model, data suggests faster decline towards end experiment, appears physically rather unlikely case photolysis study. seems PestDF constrain N values zero, thus slight difference IORE model parameters PestDF mkin.","code":"p10 <- nafta(NAFTA_SOP_Attachment[[\"p10\"]]) ## Warning in sqrt(diag(covar_notrans)): NaNs produced ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p10) print(p10) ## Sums of squares: ## SFO IORE DFOP ## 899.4089 336.4348 899.4089 ## ## Critical sum of squares for checking the SFO model: ## [1] 413.4841 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 101.7315 6.42e-11 91.9259 111.5371 ## k_parent 0.0495 1.70e-07 0.0404 0.0607 ## sigma 8.0152 1.28e-04 4.6813 11.3491 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 96.86 3.32e-12 90.848 102.863 ## k__iore_parent 2.96 7.91e-02 0.687 12.761 ## N_parent 0.00 5.00e-01 -0.372 0.372 ## sigma 4.90 1.77e-04 2.837 6.968 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 101.7315 1.41e-09 91.6534 111.810 ## k1 0.0495 3.04e-03 0.0188 0.131 ## k2 0.0495 4.92e-04 0.0197 0.124 ## g 0.4487 NaN 0.0000 1.000 ## sigma 8.0152 2.50e-04 4.5886 11.442 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 14.0 46.5 14.00 ## IORE 16.4 29.4 8.86 ## DFOP 14.0 46.5 14.00 ## ## Representative half-life: ## [1] 8.86"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-11","dir":"Articles > Web_only","previous_headings":"The DT50 was not observed during the study","what":"Example on page 11","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"case, DFOP fit reported PestDF resulted negative value slower rate constant, possible mkin. results agreement.","code":"p11 <- nafta(NAFTA_SOP_Attachment[[\"p11\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p11) print(p11) ## Sums of squares: ## SFO IORE DFOP ## 579.6805 204.7932 144.7783 ## ## Critical sum of squares for checking the SFO model: ## [1] 251.6944 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 96.15820 4.83e-13 90.24934 1.02e+02 ## k_parent 0.00321 4.71e-05 0.00222 4.64e-03 ## sigma 6.43473 1.28e-04 3.75822 9.11e+00 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 1.05e+02 NA 9.90e+01 1.10e+02 ## k__iore_parent 3.11e-17 NA 1.35e-20 7.18e-14 ## N_parent 8.36e+00 NA 6.62e+00 1.01e+01 ## sigma 3.82e+00 NA 2.21e+00 5.44e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 1.05e+02 9.47e-13 99.9990 109.1224 ## k1 4.41e-02 5.95e-03 0.0296 0.0658 ## k2 9.94e-13 5.00e-01 0.0000 Inf ## g 3.22e-01 1.45e-03 0.2814 0.3650 ## sigma 3.22e+00 3.52e-04 1.8410 4.5906 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 2.16e+02 7.18e+02 2.16e+02 ## IORE 9.73e+02 1.37e+08 4.11e+07 ## DFOP 3.07e+11 1.93e+12 6.98e+11 ## ## Representative half-life: ## [1] 41148169"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"n-is-less-than-1-and-the-dfop-rate-constants-are-like-the-sfo-rate-constant","dir":"Articles > Web_only","previous_headings":"","what":"N is less than 1 and the DFOP rate constants are like the SFO rate constant","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"following three examples, results obtained mkin reported PestDF. case page 10, N values 1 deemed unrealistic appear result overparameterisation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-12-upper-panel","dir":"Articles > Web_only","previous_headings":"N is less than 1 and the DFOP rate constants are like the SFO rate constant","what":"Example on page 12, upper panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p12a <- nafta(NAFTA_SOP_Attachment[[\"p12a\"]]) ## Warning in summary.mkinfit(x): Could not calculate correlation; no covariance ## matrix ## Warning in sqrt(diag(covar_notrans)): NaNs produced ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p12a) print(p12a) ## Sums of squares: ## SFO IORE DFOP ## 695.4440 220.0685 695.4440 ## ## Critical sum of squares for checking the SFO model: ## [1] 270.4679 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 100.521 8.75e-12 92.461 108.581 ## k_parent 0.124 3.61e-08 0.104 0.148 ## sigma 7.048 1.28e-04 4.116 9.980 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 96.823 NA NA NA ## k__iore_parent 2.436 NA NA NA ## N_parent 0.263 NA NA NA ## sigma 3.965 NA NA NA ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 100.521 2.74e-10 92.2366 108.805 ## k1 0.124 2.53e-05 0.0908 0.170 ## k2 0.124 2.52e-02 0.0456 0.339 ## g 0.793 NaN 0.0000 1.000 ## sigma 7.048 2.50e-04 4.0349 10.061 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 5.58 18.5 5.58 ## IORE 6.49 13.2 3.99 ## DFOP 5.58 18.5 5.58 ## ## Representative half-life: ## [1] 3.99"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-12-lower-panel","dir":"Articles > Web_only","previous_headings":"N is less than 1 and the DFOP rate constants are like the SFO rate constant","what":"Example on page 12, lower panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p12b <- nafta(NAFTA_SOP_Attachment[[\"p12b\"]]) ## Warning in sqrt(diag(covar)): NaNs produced ## Warning in qt(alpha/2, rdf): NaNs produced ## Warning in qt(1 - alpha/2, rdf): NaNs produced ## Warning in pt(abs(tval), rdf, lower.tail = FALSE): NaNs produced ## Warning in sqrt(1/diag(V)): NaNs produced ## Warning in cov2cor(ans$covar): diag(.) had 0 or NA entries; non-finite result ## is doubtful ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p12b) print(p12b) ## Sums of squares: ## SFO IORE DFOP ## 58.90242 19.06353 58.90242 ## ## Critical sum of squares for checking the SFO model: ## [1] 51.51756 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 97.6840 0.00039 85.9388 109.4292 ## k_parent 0.0589 0.00261 0.0431 0.0805 ## sigma 3.4323 0.04356 -1.2377 8.1023 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 95.523 0.0055 74.539157 116.51 ## k__iore_parent 0.333 0.1433 0.000717 154.57 ## N_parent 0.568 0.0677 -0.989464 2.13 ## sigma 1.953 0.0975 -5.893100 9.80 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 97.6840 NaN NaN NaN ## k1 0.0589 NaN NA NA ## k2 0.0589 NaN NA NA ## g 0.6473 NaN NA NA ## sigma 3.4323 NaN NaN NaN ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 11.8 39.1 11.80 ## IORE 12.9 31.4 9.46 ## DFOP 11.8 39.1 11.80 ## ## Representative half-life: ## [1] 9.46"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-13","dir":"Articles > Web_only","previous_headings":"N is less than 1 and the DFOP rate constants are like the SFO rate constant","what":"Example on page 13","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p13 <- nafta(NAFTA_SOP_Attachment[[\"p13\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p13) print(p13) ## Sums of squares: ## SFO IORE DFOP ## 174.5971 142.3951 174.5971 ## ## Critical sum of squares for checking the SFO model: ## [1] 172.131 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 92.73500 5.99e-17 89.61936 95.85065 ## k_parent 0.00258 2.42e-09 0.00223 0.00299 ## sigma 3.41172 7.07e-05 2.05455 4.76888 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 91.6016 6.34e-16 88.53086 94.672 ## k__iore_parent 0.0396 2.36e-01 0.00207 0.759 ## N_parent 0.3541 1.46e-01 -0.35153 1.060 ## sigma 3.0811 9.64e-05 1.84296 4.319 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 92.73500 NA 8.95e+01 95.92118 ## k1 0.00258 NA 4.18e-04 0.01592 ## k2 0.00258 NA 1.75e-03 0.00381 ## g 0.16452 NA 0.00e+00 1.00000 ## sigma 3.41172 NA 2.02e+00 4.79960 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 269 892 269 ## IORE 261 560 169 ## DFOP 269 892 269 ## ## Representative half-life: ## [1] 168.51"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"dt50-not-observed-in-the-study-and-dfop-problems-in-pestdf","dir":"Articles > Web_only","previous_headings":"","what":"DT50 not observed in the study and DFOP problems in PestDF","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"slower rate constant reported PestDF negative, physically realistic, possible mkin. fits give results mkin PestDF.","code":"p14 <- nafta(NAFTA_SOP_Attachment[[\"p14\"]]) ## Warning in sqrt(diag(covar)): NaNs produced ## Warning in sqrt(1/diag(V)): NaNs produced ## Warning in cov2cor(ans$covar): diag(.) had 0 or NA entries; non-finite result ## is doubtful ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p14) print(p14) ## Sums of squares: ## SFO IORE DFOP ## 48.43249 28.67746 27.26248 ## ## Critical sum of squares for checking the SFO model: ## [1] 32.83337 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 99.47124 2.06e-30 98.42254 1.01e+02 ## k_parent 0.00279 3.75e-15 0.00256 3.04e-03 ## sigma 1.55616 3.81e-06 1.03704 2.08e+00 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 1.00e+02 NA NaN NaN ## k__iore_parent 9.44e-08 NA NaN NaN ## N_parent 3.31e+00 NA NaN NaN ## sigma 1.20e+00 NA 0.796 1.6 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 1.00e+02 2.96e-28 99.40280 101.2768 ## k1 9.53e-03 1.20e-01 0.00638 0.0143 ## k2 5.21e-12 5.00e-01 0.00000 Inf ## g 3.98e-01 2.19e-01 0.30481 0.4998 ## sigma 1.17e+00 7.68e-06 0.77406 1.5610 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 2.48e+02 8.25e+02 2.48e+02 ## IORE 4.34e+02 2.22e+04 6.70e+03 ## DFOP 3.55e+10 3.44e+11 1.33e+11 ## ## Representative half-life: ## [1] 6697.44"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"n-is-less-than-1-and-dfop-fraction-parameter-is-below-zero","dir":"Articles > Web_only","previous_headings":"","what":"N is less than 1 and DFOP fraction parameter is below zero","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"mkin, IORE fit affected (deemed unrealistic), fraction parameter DFOP model restricted interval 0 1 mkin. SFO fits give results mkin PestDF.","code":"p15a <- nafta(NAFTA_SOP_Attachment[[\"p15a\"]]) ## Warning in sqrt(diag(covar)): NaNs produced ## Warning in sqrt(1/diag(V)): NaNs produced ## Warning in cov2cor(ans$covar): diag(.) had 0 or NA entries; non-finite result ## is doubtful ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p15a) print(p15a) ## Sums of squares: ## SFO IORE DFOP ## 245.5248 135.0132 245.5248 ## ## Critical sum of squares for checking the SFO model: ## [1] 165.9335 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 97.96751 2.00e-15 94.32049 101.615 ## k_parent 0.00952 4.93e-09 0.00824 0.011 ## sigma 4.18778 1.28e-04 2.44588 5.930 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 95.874 2.94e-15 92.937 98.811 ## k__iore_parent 0.629 2.11e-01 0.044 8.982 ## N_parent 0.000 5.00e-01 -0.642 0.642 ## sigma 3.105 1.78e-04 1.795 4.416 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 97.96751 2.85e-13 94.21913 101.7159 ## k1 0.00952 6.28e-02 0.00260 0.0349 ## k2 0.00952 1.27e-04 0.00652 0.0139 ## g 0.21241 5.00e-01 NA NA ## sigma 4.18778 2.50e-04 2.39747 5.9781 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 72.8 242 72.8 ## IORE 76.3 137 41.3 ## DFOP 72.8 242 72.8 ## ## Representative half-life: ## [1] 41.33 p15b <- nafta(NAFTA_SOP_Attachment[[\"p15b\"]]) ## Warning in summary.mkinfit(x): Could not calculate correlation; no covariance ## matrix ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p15b) print(p15b) ## Sums of squares: ## SFO IORE DFOP ## 106.91629 68.55574 106.91629 ## ## Critical sum of squares for checking the SFO model: ## [1] 84.25618 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 1.01e+02 3.06e-17 98.31594 1.03e+02 ## k_parent 4.86e-03 2.48e-10 0.00435 5.42e-03 ## sigma 2.76e+00 1.28e-04 1.61402 3.91e+00 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 99.83 1.81e-16 97.51348 102.14 ## k__iore_parent 0.38 3.22e-01 0.00352 41.05 ## N_parent 0.00 5.00e-01 -1.07696 1.08 ## sigma 2.21 2.57e-04 1.23245 3.19 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 1.01e+02 NA NA NA ## k1 4.86e-03 NA NA NA ## k2 4.86e-03 NA NA NA ## g 1.88e-01 NA NA NA ## sigma 2.76e+00 NA NA NA ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 143 474 143.0 ## IORE 131 236 71.2 ## DFOP 143 474 143.0 ## ## Representative half-life: ## [1] 71.18"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"the-dfop-fraction-parameter-is-greater-than-1","dir":"Articles > Web_only","previous_headings":"","what":"The DFOP fraction parameter is greater than 1","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"PestDF, DFOP fit seems stuck local minimum, mkin finds solution much lower \\(\\chi^2\\) error level. half-life slower rate constant DFOP model larger IORE derived half-life, NAFTA recommendation obtained mkin use DFOP representative half-life 8.9 days.","code":"p16 <- nafta(NAFTA_SOP_Attachment[[\"p16\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The representative half-life of the IORE model is longer than the one corresponding ## to the terminal degradation rate found with the DFOP model. ## The representative half-life obtained from the DFOP model may be used plot(p16) print(p16) ## Sums of squares: ## SFO IORE DFOP ## 3831.804 2062.008 1550.980 ## ## Critical sum of squares for checking the SFO model: ## [1] 2247.348 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 71.953 2.33e-13 60.509 83.40 ## k_parent 0.159 4.86e-05 0.102 0.25 ## sigma 11.302 1.25e-08 8.308 14.30 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 8.74e+01 2.48e-16 7.72e+01 97.52972 ## k__iore_parent 4.55e-04 2.16e-01 3.48e-05 0.00595 ## N_parent 2.70e+00 1.21e-08 1.99e+00 3.40046 ## sigma 8.29e+00 1.61e-08 6.09e+00 10.49062 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 88.5333 7.40e-18 79.9836 97.083 ## k1 18.8461 5.00e-01 0.0000 Inf ## k2 0.0776 1.41e-05 0.0518 0.116 ## g 0.4733 1.41e-09 0.3674 0.582 ## sigma 7.1902 2.11e-08 5.2785 9.102 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 4.35 14.4 4.35 ## IORE 1.48 32.1 9.67 ## DFOP 0.67 21.4 8.93 ## ## Representative half-life: ## [1] 8.93"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"conclusions","dir":"Articles > Web_only","previous_headings":"","what":"Conclusions","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"results obtained mkin deviate results obtained PestDF either cases one interpretive rules apply, .e. IORE parameter N less one DFOP k values obtained PestDF equal SFO k values, cases DFOP model converge, often lead negative rate constants returned PestDF. Therefore, mkin appears suitable kinetic evaluations according NAFTA guidance.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"test-cases","dir":"Articles > Web_only","previous_headings":"","what":"Test cases","title":"Benchmark timings for mkin","text":"Parent : One metabolite: Two metabolites, synthetic data:","code":"FOCUS_C <- FOCUS_2006_C FOCUS_D <- subset(FOCUS_2006_D, value != 0) parent_datasets <- list(FOCUS_C, FOCUS_D) t1 <- system.time(mmkin_bench(c(\"SFO\", \"FOMC\", \"DFOP\", \"HS\"), parent_datasets))[[\"elapsed\"]] t2 <- system.time(mmkin_bench(c(\"SFO\", \"FOMC\", \"DFOP\", \"HS\"), parent_datasets, error_model = \"tc\"))[[\"elapsed\"]] SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) FOMC_SFO <- mkinmod( parent = mkinsub(\"FOMC\", \"m1\"), m1 = mkinsub(\"SFO\")) DFOP_SFO <- mkinmod( parent = mkinsub(\"FOMC\", \"m1\"), # erroneously used FOMC twice, not fixed for consistency m1 = mkinsub(\"SFO\")) t3 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D)))[[\"elapsed\"]] t4 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D), error_model = \"tc\"))[[\"elapsed\"]] t5 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D), error_model = \"obs\"))[[\"elapsed\"]] m_synth_SFO_lin <- mkinmod(parent = mkinsub(\"SFO\", \"M1\"), M1 = mkinsub(\"SFO\", \"M2\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) m_synth_DFOP_par <- mkinmod(parent = mkinsub(\"DFOP\", c(\"M1\", \"M2\")), M1 = mkinsub(\"SFO\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) SFO_lin_a <- synthetic_data_for_UBA_2014[[1]]$data DFOP_par_c <- synthetic_data_for_UBA_2014[[12]]$data t6 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a)))[[\"elapsed\"]] t7 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c)))[[\"elapsed\"]] t8 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a), error_model = \"tc\"))[[\"elapsed\"]] t9 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c), error_model = \"tc\"))[[\"elapsed\"]] t10 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a), error_model = \"obs\"))[[\"elapsed\"]] t11 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c), error_model = \"obs\"))[[\"elapsed\"]]"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"results","dir":"Articles > Web_only","previous_headings":"","what":"Results","title":"Benchmark timings for mkin","text":"Benchmarks available error models shown. intended improving mkin, comparing CPUs operating systems. trademarks belong respective owners.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"parent-only","dir":"Articles > Web_only","previous_headings":"Results","what":"Parent only","title":"Benchmark timings for mkin","text":"Constant variance (t1) two-component error model (t2) four models fitted two datasets, .e. eight fits test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"one-metabolite","dir":"Articles > Web_only","previous_headings":"Results","what":"One metabolite","title":"Benchmark timings for mkin","text":"Constant variance (t3), two-component error model (t4), variance variable (t5) three models fitted one dataset, .e. three fits test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"two-metabolites","dir":"Articles > Web_only","previous_headings":"Results","what":"Two metabolites","title":"Benchmark timings for mkin","text":"Constant variance (t6 t7), two-component error model (t8 t9), variance variable (t10 t11) one model fitted one dataset, .e. one fit test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html","id":"how-to-benefit-from-compiled-models","dir":"Articles > Web_only","previous_headings":"","what":"How to benefit from compiled models","title":"Performance benefit by using compiled model definitions in mkin","text":"using mkin version equal greater 0.9-36 C compiler available, see message model compiled autogenerated C code defining model using mkinmod. Starting version 0.9.49.9, mkinmod() function checks presence compiler using previous versions, used Sys.(\"gcc\") check. Linux, need essential build tools like make gcc clang installed. Debian based linux distributions, pulled installing build-essential package. MacOS, use personally, reports compiler available default. Windows, need install Rtools path bin directory PATH variable. need modify PATH variable installing Rtools. Instead, recommend put line .Rprofile startup file. just text file R code executed R session starts. named .Rprofile located home directory, generally Documents folder. can check location home directory used R issuing","code":"pkgbuild::has_compiler() Sys.setenv(PATH = paste(\"C:/Rtools/bin\", Sys.getenv(\"PATH\"), sep=\";\")) Sys.getenv(\"HOME\")"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html","id":"comparison-with-other-solution-methods","dir":"Articles > Web_only","previous_headings":"","what":"Comparison with other solution methods","title":"Performance benefit by using compiled model definitions in mkin","text":"First, build simple degradation model parent compound one metabolite, remove zero values dataset. can compare performance Eigenvalue based solution compiled version R implementation differential equations using benchmark package. output code, warnings zero removed FOCUS D dataset suppressed. Since mkin version 0.9.49.11, analytical solution also implemented, included tests . see using compiled model factor 10 faster using deSolve without compiled code.","code":"library(\"mkin\", quietly = TRUE) SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) ## Temporary DLL for differentials generated and loaded FOCUS_D <- subset(FOCUS_2006_D, value != 0) if (require(rbenchmark)) { b.1 <- benchmark( \"deSolve, not compiled\" = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"deSolve\", use_compiled = FALSE, quiet = TRUE), \"Eigenvalue based\" = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"eigen\", quiet = TRUE), \"deSolve, compiled\" = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"deSolve\", quiet = TRUE), \"analytical\" = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"analytical\", use_compiled = FALSE, quiet = TRUE), replications = 1, order = \"relative\", columns = c(\"test\", \"replications\", \"relative\", \"elapsed\")) print(b.1) } else { print(\"R package rbenchmark is not available\") } ## test replications relative elapsed ## 4 analytical 1 1.000 0.109 ## 3 deSolve, compiled 1 1.284 0.140 ## 2 Eigenvalue based 1 1.670 0.182 ## 1 deSolve, not compiled 1 21.927 2.390"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html","id":"model-without-analytical-solution","dir":"Articles > Web_only","previous_headings":"","what":"Model without analytical solution","title":"Performance benefit by using compiled model definitions in mkin","text":"evaluation also taken example section mkinfit. analytical solution available system, now Eigenvalue based solution possible, deSolve using without compiled code available. get performance benefit factor 24 using version differential equation model compiled C code! vignette built mkin 1.2.6 ","code":"if (require(rbenchmark)) { FOMC_SFO <- mkinmod( parent = mkinsub(\"FOMC\", \"m1\"), m1 = mkinsub( \"SFO\")) b.2 <- benchmark( \"deSolve, not compiled\" = mkinfit(FOMC_SFO, FOCUS_D, use_compiled = FALSE, quiet = TRUE), \"deSolve, compiled\" = mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE), replications = 1, order = \"relative\", columns = c(\"test\", \"replications\", \"relative\", \"elapsed\")) print(b.2) factor_FOMC_SFO <- round(b.2[\"1\", \"relative\"]) } else { factor_FOMC_SFO <- NA print(\"R package benchmark is not available\") } ## Temporary DLL for differentials generated and loaded ## test replications relative elapsed ## 2 deSolve, compiled 1 1.000 0.181 ## 1 deSolve, not compiled 1 23.646 4.280 ## R version 4.3.2 (2023-10-31) ## Platform: x86_64-pc-linux-gnu (64-bit) ## Running under: Debian GNU/Linux 12 (bookworm) ## CPU model: AMD Ryzen 9 7950X 16-Core Processor"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"introduction","dir":"Articles > Web_only","previous_headings":"","what":"Introduction","title":"Example evaluations of the dimethenamid data from 2018","text":"first analysis data analysed presented recent journal article nonlinear mixed-effects models degradation kinetics (Ranke et al. 2021). analysis based nlme package development version saemix package unpublished time. Meanwhile, version 3.0 saemix package available CRAN repository. Also, turned error handling Borstel data mkin package time, leading duplication data points soil. dataset mkin package corrected, interface saemix mkin package updated use released version. vignette intended present date analysis data, using corrected dataset released versions mkin saemix.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"data","dir":"Articles > Web_only","previous_headings":"","what":"Data","title":"Example evaluations of the dimethenamid data from 2018","text":"Residue data forming basis endpoints derived conclusion peer review pesticide risk assessment dimethenamid-P published European Food Safety Authority (EFSA) 2018 (EFSA 2018) transcribed risk assessment report (Rapporteur Member State Germany, Co-Rapporteur Member State Bulgaria 2018) can downloaded Open EFSA repository https://open.efsa.europa.eu/study-inventory/EFSA-Q-2014-00716. data available mkin package. following code (hidden default, please use button right show ) treats data available racemic mixture dimethenamid (DMTA) enantiomer dimethenamid-P (DMTAP) way, difference degradation behaviour identified EU risk assessment. observation times dataset multiplied corresponding normalisation factor also available dataset, order make possible describe datasets single set parameters. Also, datasets observed soil merged, resulting dimethenamid (DMTA) data six soils.","code":"library(mkin, quietly = TRUE) dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] ds_i }) names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"parent-degradation","dir":"Articles > Web_only","previous_headings":"","what":"Parent degradation","title":"Example evaluations of the dimethenamid data from 2018","text":"evaluate observed degradation parent compound using simple exponential decline (SFO) biexponential decline (DFOP), using constant variance (const) two-component variance (tc) error models.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"separate-evaluations","dir":"Articles > Web_only","previous_headings":"Parent degradation","what":"Separate evaluations","title":"Example evaluations of the dimethenamid data from 2018","text":"first step, get visual impression fit different models, separate evaluations soil using mmkin function mkin package: plot individual SFO fits shown suggests least datasets degradation slows towards later time points, scatter residuals error smaller smaller values (panel right): Using biexponential decline (DFOP) results slightly random scatter residuals: population curve (bold line) plot results taking mean individual transformed parameters, .e. log k1 log k2, well logit g parameter DFOP model). , procedure result parameters represent degradation well, datasets fitted value k2 extremely close zero, leading log k2 value dominates average. alleviated rate constants pass t-test significant difference zero (untransformed scale) considered averaging: visually much satisfactory, average procedure introduce bias, results individual fits enter population curve weight. nonlinear mixed-effects models can help treating datasets equally fitting parameter distribution model together degradation model error model (see ). remaining trend residuals higher higher predicted residues reduced using two-component error model: However, note case using error model, fits Flaach BBA 2.3 datasets appear ill-defined, indicated fact converge:","code":"f_parent_mkin_const <- mmkin(c(\"SFO\", \"DFOP\"), dmta_ds, error_model = \"const\", quiet = TRUE) f_parent_mkin_tc <- mmkin(c(\"SFO\", \"DFOP\"), dmta_ds, error_model = \"tc\", quiet = TRUE) plot(mixed(f_parent_mkin_const[\"SFO\", ])) plot(mixed(f_parent_mkin_const[\"DFOP\", ])) plot(mixed(f_parent_mkin_const[\"DFOP\", ]), test_log_parms = TRUE) plot(mixed(f_parent_mkin_tc[\"DFOP\", ]), test_log_parms = TRUE) print(f_parent_mkin_tc[\"DFOP\", ]) <mmkin> object Status of individual fits: dataset model Calke Borstel Flaach BBA 2.2 BBA 2.3 Elliot DFOP OK OK OK OK C OK C: Optimisation did not converge: iteration limit reached without convergence (10) OK: No warnings"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"nonlinear-mixed-effects-models","dir":"Articles > Web_only","previous_headings":"Parent degradation","what":"Nonlinear mixed-effects models","title":"Example evaluations of the dimethenamid data from 2018","text":"Instead taking model selection decision individual fits, fit nonlinear mixed-effects models (using different fitting algorithms implemented different packages) model selection using available data time. order make sure decisions unduly influenced type algorithm used, implementation details use wrong control parameters, compare model selection results obtained different R packages, different algorithms checking control parameters.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"nlme","dir":"Articles > Web_only","previous_headings":"Parent degradation > Nonlinear mixed-effects models","what":"nlme","title":"Example evaluations of the dimethenamid data from 2018","text":"nlme package first R extension providing facilities fit nonlinear mixed-effects models. like model selection four combinations degradation models error models based AIC. However, fitting DFOP model constant variance using default control parameters results error, signalling maximum number 50 iterations reached, potentially indicating overparameterisation. Nevertheless, algorithm converges two-component error model used combination DFOP model. can explained fact smaller residues observed later sampling times get weight using two-component error model counteract tendency algorithm try parameter combinations unsuitable fitting data. Note certain degree overparameterisation also indicated warning obtained fitting DFOP two-component error model (‘false convergence’ ‘LME step’ iteration 3). However, warning occur later iterations, specifically last 5 iterations, can ignore warning. model comparison function nlme package can directly applied fits showing much lower AIC DFOP model fitted two-component error model. Also, likelihood ratio test indicates difference significant p-value 0.0001. addition fits, attempts also made include correlations random effects using log Cholesky parameterisation matrix specifying . code used attempts can made visible . SFO variants converge fast, additional parameters introduced lead convergence warnings DFOP model. model comparison clearly show adding correlations random effects improve fits. selected model (DFOP two-component error) fitted data assuming correlations random effects shown .","code":"library(nlme) f_parent_nlme_sfo_const <- nlme(f_parent_mkin_const[\"SFO\", ]) # f_parent_nlme_dfop_const <- nlme(f_parent_mkin_const[\"DFOP\", ]) f_parent_nlme_sfo_tc <- nlme(f_parent_mkin_tc[\"SFO\", ]) f_parent_nlme_dfop_tc <- nlme(f_parent_mkin_tc[\"DFOP\", ]) anova( f_parent_nlme_sfo_const, f_parent_nlme_sfo_tc, f_parent_nlme_dfop_tc ) Model df AIC BIC logLik Test L.Ratio p-value f_parent_nlme_sfo_const 1 5 796.60 811.82 -393.30 f_parent_nlme_sfo_tc 2 6 798.60 816.86 -393.30 1 vs 2 0.00 0.998 f_parent_nlme_dfop_tc 3 10 671.91 702.34 -325.95 2 vs 3 134.69 <.0001 f_parent_nlme_sfo_const_logchol <- nlme(f_parent_mkin_const[\"SFO\", ], random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k_DMTA ~ 1))) anova(f_parent_nlme_sfo_const, f_parent_nlme_sfo_const_logchol) f_parent_nlme_sfo_tc_logchol <- nlme(f_parent_mkin_tc[\"SFO\", ], random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k_DMTA ~ 1))) anova(f_parent_nlme_sfo_tc, f_parent_nlme_sfo_tc_logchol) f_parent_nlme_dfop_tc_logchol <- nlme(f_parent_mkin_const[\"DFOP\", ], random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1))) anova(f_parent_nlme_dfop_tc, f_parent_nlme_dfop_tc_logchol) plot(f_parent_nlme_dfop_tc)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"saemix","dir":"Articles > Web_only","previous_headings":"Parent degradation > Nonlinear mixed-effects models","what":"saemix","title":"Example evaluations of the dimethenamid data from 2018","text":"saemix package provided first Open Source implementation Stochastic Approximation Expectation Maximisation (SAEM) algorithm. SAEM fits degradation models can conveniently performed using interface saemix package available current development versions mkin package. corresponding SAEM fits four combinations degradation error models fitted . convergence criterion implemented saemix package, convergence plots need manually checked every fit. define control settings work well parent data fits shown vignette. convergence plot SFO model using constant variance shown . Obviously selected number iterations sufficient reach convergence. can also said SFO fit using two-component error model. fitting DFOP model constant variance (see ), parameter convergence unambiguous. parameters converge credible values, variance k2 (omega2.k2) converges small value. printout saem.mmkin model shows estimated standard deviation k2 across population soils (SD.k2) ill-defined, indicating overparameterisation model. DFOP model fitted two-component error model, also observe estimated variance k2 becomes small, ill-defined, illustrated excessive confidence interval SD.k2. Doubling number iterations first phase algorithm leads slightly lower likelihood, therefore slightly higher AIC BIC values. even iterations, algorithm stops error message. related variance k2 approximating zero submitted bug saemix package, algorithm converge case. alternative way fit DFOP combination two-component error model use model formulation transformed parameters used per default mkin. using option, convergence slower, eventually algorithm stops well error message. four combinations (SFO/const, SFO/tc, DFOP/const DFOP/tc) version increased iterations can compared using model comparison function saemix package: order check influence likelihood calculation algorithms implemented saemix, likelihood Gaussian quadrature added best fit, AIC values obtained three methods compared. AIC values based importance sampling Gaussian quadrature similar. Using linearisation known less accurate, still gives similar value. order illustrate comparison three method depends degree convergence obtained fit, comparison shown fit using defaults number iterations number MCMC chains. using OpenBlas linear algebra, large difference values obtained Gaussian quadrature, larger number iterations makes lot difference. using LAPACK version coming Debian Bullseye, AIC based Gaussian quadrature almost one obtained methods, also using defaults fit.","code":"library(saemix) saemix_control <- saemixControl(nbiter.saemix = c(800, 300), nb.chains = 15, print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) saemix_control_moreiter <- saemixControl(nbiter.saemix = c(1600, 300), nb.chains = 15, print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) saemix_control_10k <- saemixControl(nbiter.saemix = c(10000, 300), nb.chains = 15, print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) f_parent_saemix_sfo_const <- mkin::saem(f_parent_mkin_const[\"SFO\", ], quiet = TRUE, control = saemix_control, transformations = \"saemix\") plot(f_parent_saemix_sfo_const$so, plot.type = \"convergence\") f_parent_saemix_sfo_tc <- mkin::saem(f_parent_mkin_tc[\"SFO\", ], quiet = TRUE, control = saemix_control, transformations = \"saemix\") plot(f_parent_saemix_sfo_tc$so, plot.type = \"convergence\") f_parent_saemix_dfop_const <- mkin::saem(f_parent_mkin_const[\"DFOP\", ], quiet = TRUE, control = saemix_control, transformations = \"saemix\") plot(f_parent_saemix_dfop_const$so, plot.type = \"convergence\") print(f_parent_saemix_dfop_const) Kinetic nonlinear mixed-effects model fit by SAEM Structural model: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Likelihood computed by importance sampling AIC BIC logLik 706 704 -344 Fitted parameters: estimate lower upper DMTA_0 97.99583 96.50079 99.4909 k1 0.06377 0.03432 0.0932 k2 0.00848 0.00444 0.0125 g 0.95701 0.91313 1.0009 a.1 1.82141 1.60516 2.0377 SD.DMTA_0 1.64787 0.45729 2.8384 SD.k1 0.57439 0.24731 0.9015 SD.k2 0.03296 -2.50524 2.5712 SD.g 1.10266 0.32354 1.8818 f_parent_saemix_dfop_tc <- mkin::saem(f_parent_mkin_tc[\"DFOP\", ], quiet = TRUE, control = saemix_control, transformations = \"saemix\") f_parent_saemix_dfop_tc_moreiter <- mkin::saem(f_parent_mkin_tc[\"DFOP\", ], quiet = TRUE, control = saemix_control_moreiter, transformations = \"saemix\") plot(f_parent_saemix_dfop_tc$so, plot.type = \"convergence\") print(f_parent_saemix_dfop_tc) Kinetic nonlinear mixed-effects model fit by SAEM Structural model: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Likelihood computed by importance sampling AIC BIC logLik 666 664 -323 Fitted parameters: estimate lower upper DMTA_0 98.24165 96.29190 100.1914 k1 0.06421 0.03352 0.0949 k2 0.00866 0.00617 0.0111 g 0.95340 0.91218 0.9946 a.1 1.06463 0.86503 1.2642 b.1 0.02964 0.02259 0.0367 SD.DMTA_0 2.03611 0.40416 3.6681 SD.k1 0.59534 0.25692 0.9338 SD.k2 0.00042 -73.01372 73.0146 SD.g 1.04234 0.37189 1.7128 AIC_parent_saemix <- saemix::compare.saemix( f_parent_saemix_sfo_const$so, f_parent_saemix_sfo_tc$so, f_parent_saemix_dfop_const$so, f_parent_saemix_dfop_tc$so, f_parent_saemix_dfop_tc_moreiter$so) Likelihoods calculated by importance sampling rownames(AIC_parent_saemix) <- c( \"SFO const\", \"SFO tc\", \"DFOP const\", \"DFOP tc\", \"DFOP tc more iterations\") print(AIC_parent_saemix) AIC BIC SFO const 796.38 795.34 SFO tc 798.38 797.13 DFOP const 705.75 703.88 DFOP tc 665.67 663.59 DFOP tc more iterations 665.85 663.76 f_parent_saemix_dfop_tc$so <- saemix::llgq.saemix(f_parent_saemix_dfop_tc$so) AIC_parent_saemix_methods <- c( is = AIC(f_parent_saemix_dfop_tc$so, method = \"is\"), gq = AIC(f_parent_saemix_dfop_tc$so, method = \"gq\"), lin = AIC(f_parent_saemix_dfop_tc$so, method = \"lin\") ) print(AIC_parent_saemix_methods) is gq lin 665.67 665.74 665.13 f_parent_saemix_dfop_tc_defaults <- mkin::saem(f_parent_mkin_tc[\"DFOP\", ]) f_parent_saemix_dfop_tc_defaults$so <- saemix::llgq.saemix(f_parent_saemix_dfop_tc_defaults$so) AIC_parent_saemix_methods_defaults <- c( is = AIC(f_parent_saemix_dfop_tc_defaults$so, method = \"is\"), gq = AIC(f_parent_saemix_dfop_tc_defaults$so, method = \"gq\"), lin = AIC(f_parent_saemix_dfop_tc_defaults$so, method = \"lin\") ) print(AIC_parent_saemix_methods_defaults) is gq lin 670.09 669.37 671.29"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"comparison","dir":"Articles > Web_only","previous_headings":"Parent degradation","what":"Comparison","title":"Example evaluations of the dimethenamid data from 2018","text":"following table gives AIC values obtained backend packages using control parameters (800 iterations burn-, 300 iterations second phase, 15 chains).","code":"AIC_all <- data.frame( check.names = FALSE, \"Degradation model\" = c(\"SFO\", \"SFO\", \"DFOP\", \"DFOP\"), \"Error model\" = c(\"const\", \"tc\", \"const\", \"tc\"), nlme = c(AIC(f_parent_nlme_sfo_const), AIC(f_parent_nlme_sfo_tc), NA, AIC(f_parent_nlme_dfop_tc)), saemix_lin = sapply(list(f_parent_saemix_sfo_const$so, f_parent_saemix_sfo_tc$so, f_parent_saemix_dfop_const$so, f_parent_saemix_dfop_tc$so), AIC, method = \"lin\"), saemix_is = sapply(list(f_parent_saemix_sfo_const$so, f_parent_saemix_sfo_tc$so, f_parent_saemix_dfop_const$so, f_parent_saemix_dfop_tc$so), AIC, method = \"is\") ) kable(AIC_all)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"conclusion","dir":"Articles > Web_only","previous_headings":"","what":"Conclusion","title":"Example evaluations of the dimethenamid data from 2018","text":"detailed analysis dimethenamid dataset confirmed DFOP model provides appropriate description decline parent compound data. hand, closer inspection results revealed variability k2 parameter across population soils ill-defined. coincides observation parameter robustly quantified soils. Regarding regulatory use data, claimed improved characterisation mean parameter values across population obtained using nonlinear mixed-effects models presented . However, attempts quantify variability slower rate constant biphasic decline dimethenamid indicate data sufficient characterise variability satisfactory precision.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"session-info","dir":"Articles > Web_only","previous_headings":"","what":"Session Info","title":"Example evaluations of the dimethenamid data from 2018","text":"","code":"sessionInfo() R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=C LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] saemix_3.2 npde_3.3 nlme_3.1-163 mkin_1.2.6 knitr_1.42 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 rprojroot_2.0.3 jsonlite_1.8.4 [13] DBI_1.1.3 mclust_6.0.0 gridExtra_2.3 purrr_1.0.1 [17] fansi_1.0.4 scales_1.2.1 codetools_0.2-19 textshaping_0.3.6 [21] jquerylib_0.1.4 cli_3.6.1 rlang_1.1.1 munsell_0.5.0 [25] cachem_1.0.8 yaml_2.3.7 tools_4.3.2 parallel_4.3.2 [29] memoise_2.0.1 dplyr_1.1.2 colorspace_2.1-0 ggplot2_3.4.2 [33] vctrs_0.6.2 R6_2.5.1 zoo_1.8-12 lifecycle_1.0.3 [37] stringr_1.5.0 fs_1.6.2 MASS_7.3-60 ragg_1.2.5 [41] pkgconfig_2.0.3 desc_1.4.2 pkgdown_2.0.7 bslib_0.4.2 [45] pillar_1.9.0 gtable_0.3.3 glue_1.6.2 systemfonts_1.0.4 [49] highr_0.10 xfun_0.39 tibble_3.2.1 lmtest_0.9-40 [53] tidyselect_1.2.0 htmltools_0.5.5 rmarkdown_2.21 compiler_4.3.2"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"test-data","dir":"Articles > Web_only","previous_headings":"","what":"Test data","title":"Benchmark timings for saem.mmkin","text":"Please refer vignette dimethenamid_2018 explanation following preprocessing.","code":"dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] ds_i }) names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"parent-only","dir":"Articles > Web_only","previous_headings":"Test cases","what":"Parent only","title":"Benchmark timings for saem.mmkin","text":"model comparison suggests use SFORB model two-component error. comparison, keep DFOP model two-component error, competes SFORB biphasic curves. two models, random effects transformed parameters k2 k_DMTA_bound_free quantified.","code":"parent_mods <- c(\"SFO\", \"DFOP\", \"SFORB\", \"HS\") parent_sep_const <- mmkin(parent_mods, dmta_ds, quiet = TRUE, cores = n_cores) parent_sep_tc <- update(parent_sep_const, error_model = \"tc\") t1 <- system.time(sfo_const <- saem(parent_sep_const[\"SFO\", ]))[[\"elapsed\"]] t2 <- system.time(dfop_const <- saem(parent_sep_const[\"DFOP\", ]))[[\"elapsed\"]] t3 <- system.time(sforb_const <- saem(parent_sep_const[\"SFORB\", ]))[[\"elapsed\"]] t4 <- system.time(hs_const <- saem(parent_sep_const[\"HS\", ]))[[\"elapsed\"]] t5 <- system.time(sfo_tc <- saem(parent_sep_tc[\"SFO\", ]))[[\"elapsed\"]] t6 <- system.time(dfop_tc <- saem(parent_sep_tc[\"DFOP\", ]))[[\"elapsed\"]] t7 <- system.time(sforb_tc <- saem(parent_sep_tc[\"SFORB\", ]))[[\"elapsed\"]] t8 <- system.time(hs_tc <- saem(parent_sep_tc[\"HS\", ]))[[\"elapsed\"]] anova( sfo_const, dfop_const, sforb_const, hs_const, sfo_tc, dfop_tc, sforb_tc, hs_tc) |> kable(, digits = 1) illparms(dfop_tc) ## [1] \"sd(log_k2)\" illparms(sforb_tc) ## [1] \"sd(log_k_DMTA_bound_free)\""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"one-metabolite","dir":"Articles > Web_only","previous_headings":"Test cases","what":"One metabolite","title":"Benchmark timings for saem.mmkin","text":"remove parameters found ill-defined parent fits.","code":"one_met_mods <- list( DFOP_SFO = mkinmod( DMTA = mkinsub(\"DFOP\", \"M23\"), M23 = mkinsub(\"SFO\")), SFORB_SFO = mkinmod( DMTA = mkinsub(\"SFORB\", \"M23\"), M23 = mkinsub(\"SFO\"))) one_met_sep_const <- mmkin(one_met_mods, dmta_ds, error_model = \"const\", cores = n_cores, quiet = TRUE) one_met_sep_tc <- mmkin(one_met_mods, dmta_ds, error_model = \"tc\", cores = n_cores, quiet = TRUE) t9 <- system.time(dfop_sfo_tc <- saem(one_met_sep_tc[\"DFOP_SFO\", ], no_random_effect = \"log_k2\"))[[\"elapsed\"]] t10 <- system.time(sforb_sfo_tc <- saem(one_met_sep_tc[\"SFORB_SFO\", ], no_random_effect = \"log_k_DMTA_bound_free\"))[[\"elapsed\"]]"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"three-metabolites","dir":"Articles > Web_only","previous_headings":"Test cases","what":"Three metabolites","title":"Benchmark timings for saem.mmkin","text":"case three metabolites, keep SFORB model order limit time compiling vignette, fitting parallel may disturb benchmark. , include random effects ill-defined previous fits subsets degradation model.","code":"illparms(sforb_sfo_tc) three_met_mods <- list( SFORB_SFO3_plus = mkinmod( DMTA = mkinsub(\"SFORB\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE))) three_met_sep_tc <- mmkin(three_met_mods, dmta_ds, error_model = \"tc\", cores = n_cores, quiet = TRUE) t11 <- system.time(sforb_sfo3_plus_const <- saem(three_met_sep_tc[\"SFORB_SFO3_plus\", ], no_random_effect = \"log_k_DMTA_bound_free\"))[[\"elapsed\"]]"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"results","dir":"Articles > Web_only","previous_headings":"","what":"Results","title":"Benchmark timings for saem.mmkin","text":"Benchmarks available error models shown. intended improving mkin, comparing CPUs operating systems. trademarks belong respective owners.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"parent-only-1","dir":"Articles > Web_only","previous_headings":"Results","what":"Parent only","title":"Benchmark timings for saem.mmkin","text":"Constant variance SFO, DFOP, SFORB HS. Two-component error fits SFO, DFOP, SFORB HS.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"one-metabolite-1","dir":"Articles > Web_only","previous_headings":"Results","what":"One metabolite","title":"Benchmark timings for saem.mmkin","text":"Two-component error DFOP-SFO SFORB-SFO.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"three-metabolites-1","dir":"Articles > Web_only","previous_headings":"Results","what":"Three metabolites","title":"Benchmark timings for saem.mmkin","text":"Two-component error SFORB-SFO3-plus","code":""},{"path":"https://pkgdown.jrwb.de/mkin/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Johannes Ranke. Author, maintainer, copyright holder. Katrin Lindenberger. Contributor. contributed mkinresplot() René Lehmann. Contributor. ilr() invilr() Eurofins Regulatory AG. Copyright holder. copyright contributions JR 2012-2014","code":""},{"path":"https://pkgdown.jrwb.de/mkin/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Ranke J (2023). mkin: Kinetic Evaluation Chemical Degradation Data. R package version 1.2.6, https://pkgdown.jrwb.de/mkin/.","code":"@Manual{, title = {mkin: Kinetic Evaluation of Chemical Degradation Data}, author = {Johannes Ranke}, year = {2023}, note = {R package version 1.2.6}, url = {https://pkgdown.jrwb.de/mkin/}, }"},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"mkin","dir":"","previous_headings":"","what":"Kinetic Evaluation of Chemical Degradation Data","title":"Kinetic Evaluation of Chemical Degradation Data","text":"R package mkin provides calculation routines analysis chemical degradation data, including multicompartment kinetics needed modelling formation decline transformation products, several degradation compartments involved. provides stable functionality kinetic evaluations according FOCUS guidance (see details). addition, provides functionality hierarchical kinetics based nonlinear mixed-effects models.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Kinetic Evaluation of Chemical Degradation Data","text":"can install latest released version CRAN within R:","code":"install.packages(\"mkin\")"},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"background","dir":"","previous_headings":"","what":"Background","title":"Kinetic Evaluation of Chemical Degradation Data","text":"regulatory evaluation chemical substances like plant protection products (pesticides), biocides chemicals, degradation data play important role. evaluation pesticide degradation experiments, detailed guidance various helpful tools developed detailed ‘Credits historical remarks’ . package aims provide one stop solution degradation kinetics, addressing modellers willing , even prefer work R.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"basic-usage","dir":"","previous_headings":"","what":"Basic usage","title":"Kinetic Evaluation of Chemical Degradation Data","text":"start, look code examples provided plot.mkinfit plot.mmkin, package vignettes FOCUS L FOCUS D.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"documentation","dir":"","previous_headings":"","what":"Documentation","title":"Kinetic Evaluation of Chemical Degradation Data","text":"HTML documentation latest version released CRAN available jrwb.de github. Documentation development version found ‘dev’ subdirectory. articles section documentation, can also find demonstrations application nonlinear hierarchical models, also known nonlinear mixed-effects models, complex data, including transformation products covariates.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"general","dir":"","previous_headings":"Features","what":"General","title":"Kinetic Evaluation of Chemical Degradation Data","text":"Highly flexible model specification using mkinmod, including equilibrium reactions using single first-order reversible binding (SFORB) model, automatically create two state variables observed variable. Model solution (forward modelling) function mkinpredict performed either using analytical solution case parent degradation simple models involving single transformation product, , eigenvalue based solution simple first-order (SFO) SFORB kinetics used model, using numeric solver deSolve package (default lsoda). usual one-sided t-test significant difference zero shown based estimators untransformed parameters. Summary plotting functions. summary mkinfit object fact full report give enough information able approximately reproduce fit tools. chi-squared error level defined FOCUS kinetics guidance (see ) calculated observed variable. ‘variance variable’ error model often fitted using Iteratively Reweighted Least Squares (IRLS) can specified error_model = \"obs\".","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"unique-in-mkin","dir":"","previous_headings":"Features","what":"Unique in mkin","title":"Kinetic Evaluation of Chemical Degradation Data","text":"Three different error models can selected using argument error_model mkinfit function. two-component error model similar one proposed Rocke Lorenzato can selected using argument error_model = \"tc\". Model comparisons using Akaike Information Criterion (AIC) supported can also used non-constant variance. cases FOCUS chi-squared error level meaningful. default, kinetic rate constants kinetic formation fractions transformed internally using transform_odeparms estimators can reasonably expected follow normal distribution. parameter estimates backtransformed match model definition, confidence intervals calculated standard errors also backtransformed correct scale, include meaningless values like negative rate constants formation fractions adding 1, occur single experiment single defined radiolabel position. metabolite decline phase described well SFO kinetics, SFORB kinetics can used metabolite. Mathematically, SFORB model equivalent DFOP model. However, SFORB model advantage mechanistic interpretation model parameters. Nonlinear mixed-effects models (hierarchical models) can created fits degradation model different datasets compound using nlme.mmkin saem.mmkin methods. Note convergence nlme fits depends quality data. Convergence better simple models data many groups (e.g. soils). saem method uses saemix package backend. Analytical solutions suitable use package implemented parent models important models including one metabolite (SFO-SFO DFOP-SFO). Fitting models saem.mmkin, makes use compiled ODE models mkin provides, longer run times (couple minutes hour).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"performance","dir":"","previous_headings":"Features","what":"Performance","title":"Kinetic Evaluation of Chemical Degradation Data","text":"Parallel fitting several models several datasets supported, see example plot.mmkin. C compiler installed, kinetic models compiled automatically generated C code, see vignette compiled_models. autogeneration C code inspired ccSolve package. Thanks Karline Soetaert work . Even compiler installed, many degradation models still give good performance, current versions mkin also analytical solutions models one metabolite, SFO SFORB used parent compound, Eigenvalue based solutions degradation model available.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"gui","dir":"","previous_headings":"","what":"GUI","title":"Kinetic Evaluation of Chemical Degradation Data","text":"graphical user interface may useful. Please refer documentation page installation instructions manual. supports evaluations using (generalised) nonlinear regression, simultaneous fits using nonlinear mixed-effects models.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"news","dir":"","previous_headings":"","what":"News","title":"Kinetic Evaluation of Chemical Degradation Data","text":"list changes latest CRAN release one github branch, e.g. main branch.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"credits-and-historical-remarks","dir":"","previous_headings":"","what":"Credits and historical remarks","title":"Kinetic Evaluation of Chemical Degradation Data","text":"mkin possible without underlying software stack consisting , among others, R package deSolve. previous version, mkin also using functionality FME package. Please refer package page CRAN full list imported suggested R packages. Also, Debian Linux, vim editor Nvim-R plugin invaluable development. mkin written without introduced regulatory fate modelling pesticides Adrian Gurney time Harlan Laboratories Ltd (formerly RCC Ltd). mkin greatly profits largely follows work done FOCUS Degradation Kinetics Workgroup, detailed guidance document 2006, slightly updated 2011 2014. Also, inspired first version KinGUI developed BayerCropScience, based MatLab runtime environment. companion package kinfit (now deprecated) started 2008 first published CRAN 01 May 2010. first mkin code published 11 May 2010 first CRAN version 18 May 2010. 2011, Bayer Crop Science started distribute R based successor KinGUI named KinGUII whose R code based mkin, added, among refinements, closed source graphical user interface (GUI), iteratively reweighted least squares (IRLS) optimisation variance observed variables, Markov Chain Monte Carlo (MCMC) simulation functionality, similar available e.g. FME package. Somewhat parallel, Syngenta sponsored development mkin KinGUII based GUI application called CAKE, also adds IRLS MCMC, limited model formulation, puts weight usability. CAKE available download CAKE website, can also find zip archive R scripts derived mkin, published GPL license. Finally, KineticEval, contains development scripts used KinGUII. Thanks René Lehmann, formerly working Umweltbundesamt, nice cooperation parameter transformations, especially isometric log-ratio transformation now used formation fractions case two transformation targets. Many inspirations improvements mkin resulted kinetic evaluations degradation data clients working Harlan Laboratories Eurofins Regulatory AG, now independent consultant. Funding received Umweltbundesamt course projects Project Number 27452 (Testing validation modelling software alternative ModelMaker 4.0, 2014-2015) Project Number 56703 (Optimization gmkin routine use Umweltbundesamt, 2015) Project Number 92570 (Update Project Number 27452, 2017-2018) Project Number 112407 (Testing feasibility using error model according Rocke Lorenzato realistic parameter estimates kinetic evaluation degradation data, 2018-2019) Project Number 120667 (Development objective criteria evaluation visual fit kinetic evaluation degradation data, 2019-2020) Project Number 146839 (Checking feasibility using mixed-effects models derivation kinetic modelling parameters degradation studies, 2020-2021) Project Number 173340 (Application nonlinear hierarchical models kinetic evaluation chemical degradation data) Thanks everyone involved collaboration support! Thanks due also Emmanuelle Comets, maintainer saemix package, interest support using SAEM algorithm implementation saemix evaluation chemical degradation data. Regarding application nonlinear mixed-effects models degradation data, von Götz et al (1999) already proposed use technique context environmental risk assessments pesticides. However, work apparently followed , independently arrive idea missed cite previous work topic first publications.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"development","dir":"","previous_headings":"","what":"Development","title":"Kinetic Evaluation of Chemical Degradation Data","text":"Contributions welcome!","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"Provides convenient way compare different kinetic models fitted dataset.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"","code":"# S3 method for mmkin AIC(object, ..., k = 2) # S3 method for mmkin BIC(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"object object class mmkin, containing one column. ... compatibility generic method k generic method","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"generic method (numeric value single fits, dataframe several fits column).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"","code":"# skip, as it takes > 10 s on winbuilder f <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), list(\"FOCUS A\" = FOCUS_2006_A, \"FOCUS C\" = FOCUS_2006_C), cores = 1, quiet = TRUE) #> Warning: Optimisation did not converge: #> false convergence (8) # We get a warning because the FOMC model does not converge for the # FOCUS A dataset, as it is well described by SFO AIC(f[\"SFO\", \"FOCUS A\"]) # We get a single number for a single fit #> [1] 55.28197 AIC(f[[\"SFO\", \"FOCUS A\"]]) # or when extracting an mkinfit object #> [1] 55.28197 # For FOCUS A, the models fit almost equally well, so the higher the number # of parameters, the higher (worse) the AIC AIC(f[, \"FOCUS A\"]) #> df AIC #> SFO 3 55.28197 #> FOMC 4 57.28198 #> DFOP 5 59.28197 AIC(f[, \"FOCUS A\"], k = 0) # If we do not penalize additional parameters, we get nearly the same #> df AIC #> SFO 3 49.28197 #> FOMC 4 49.28198 #> DFOP 5 49.28197 BIC(f[, \"FOCUS A\"]) # Comparing the BIC gives a very similar picture #> df BIC #> SFO 3 55.52030 #> FOMC 4 57.59974 #> DFOP 5 59.67918 # For FOCUS C, the more complex models fit better AIC(f[, \"FOCUS C\"]) #> df AIC #> SFO 3 59.29336 #> FOMC 4 44.68652 #> DFOP 5 29.02372 BIC(f[, \"FOCUS C\"]) #> df BIC #> SFO 3 59.88504 #> FOMC 4 45.47542 #> DFOP 5 30.00984"},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":null,"dir":"Reference","previous_headings":"","what":"Export a list of datasets format to a CAKE study file — CAKE_export","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"addition datasets, pathways degradation model can specified well.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"","code":"CAKE_export( ds, map = c(parent = \"Parent\"), links = NA, filename = \"CAKE_export.csf\", path = \".\", overwrite = FALSE, study = \"Degradinol aerobic soil degradation\", description = \"\", time_unit = \"days\", res_unit = \"% AR\", comment = \"\", date = Sys.Date(), optimiser = \"IRLS\" )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"ds named list datasets long format compatible mkinfit. map character vector CAKE compartment names (Parent, A1, ...), named names used list datasets. links optional character vector target compartments, named names source compartments. order make easier, names used datasets supplied. filename write result. end .csf order compatible CAKE. path optional path output file. overwrite TRUE, existing files overwritten. study name study. description optional description. time_unit time unit residue data. res_unit unit used residues. comment optional comment. date date file creation. optimiser Can OLS IRLS.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":null,"dir":"Reference","previous_headings":"","what":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"five datasets extracted active substance evaluation dossier published EFSA. Kinetic evaluations shown datasets intended illustrate advance kinetic modelling. fact data results shown imply license use context pesticide registrations, use data may constrained data protection regulations.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"","code":"D24_2014"},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"mkindsg object grouping five datasets","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"Hellenic Ministry Rural Development Agriculture (2014) Final addendum Renewal Assessment Report - public version - 2,4-D Volume 3 Annex B.8 Fate behaviour environment https://open.efsa.europa.eu/study-inventory/EFSA-Q-2013-00811","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"Data first dataset p. 685. Data four datasets used preprocessed versions given kinetics section (p. 761ff.), exception residues smaller 1 DCP soil Site I2, values given p. 694 used. R code used create data object installed package 'dataset_generation' directory. code, page numbers given specific pieces information comments.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"","code":"print(D24_2014) #> <mkindsg> holding 5 mkinds objects #> Title $title: Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 #> Occurrence of observed compounds $observed_n: #> D24 DCP DCA #> 5 4 4 #> Time normalisation factors $f_time_norm: #> [1] 1.6062378 0.7118732 0.7156063 0.7156063 0.8977124 #> Meta information $meta: #> study usda_soil_type study_moisture_ref_type #> Mississippi Cohen 1991 Silt loam <NA> #> Fayette Liu and Adelfinskaya 2011 Silt loam pF1 #> RefSol 03-G Liu and Adelfinskaya 2011 Loam pF1 #> Site E1 Liu and Adelfinskaya 2011 Loam pF1 #> Site I2 Liu and Adelfinskaya 2011 Loamy sand pF1 #> rel_moisture temperature #> Mississippi NA 25 #> Fayette 0.5 20 #> RefSol 03-G 0.5 20 #> Site E1 0.5 20 #> Site I2 0.5 20 # \\dontrun{ print(D24_2014$ds[[1]], data = TRUE) #> <mkinds> with $title: Mississippi #> Observed compounds $observed: D24 #> Sampling times $sampling_times: #> 0, 2, 4, 7, 15, 24, 35, 56, 71, 114, 183, 273, 365 #> With a maximum of 1 replicates #> time D24 #> 1 0 96.8 #> 2 2 81.0 #> 3 4 81.7 #> 4 7 88.2 #> 5 15 66.3 #> 6 24 72.9 #> 7 35 62.6 #> 8 56 54.6 #> 9 71 35.2 #> 10 114 18.0 #> 11 183 11.3 #> 12 273 9.9 #> 13 365 6.3 m_D24 = mkinmod(D24 = mkinsub(\"SFO\", to = \"DCP\"), DCP = mkinsub(\"SFO\", to = \"DCA\"), DCA = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded print(m_D24) #> <mkinmod> model generated with #> Use of formation fractions $use_of_ff: max #> Specification $spec: #> $D24 #> $type: SFO; $to: DCP; $sink: TRUE #> $DCP #> $type: SFO; $to: DCA; $sink: TRUE #> $DCA #> $type: SFO; $sink: TRUE #> Coefficient matrix $coefmat available #> Compiled model $cf available #> Differential equations: #> d_D24/dt = - k_D24 * D24 #> d_DCP/dt = + f_D24_to_DCP * k_D24 * D24 - k_DCP * DCP #> d_DCA/dt = + f_DCP_to_DCA * k_DCP * DCP - k_DCA * DCA m_D24_2 = mkinmod(D24 = mkinsub(\"DFOP\", to = \"DCP\"), DCP = mkinsub(\"SFO\", to = \"DCA\"), DCA = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded print(m_D24_2) #> <mkinmod> model generated with #> Use of formation fractions $use_of_ff: max #> Specification $spec: #> $D24 #> $type: DFOP; $to: DCP; $sink: TRUE #> $DCP #> $type: SFO; $to: DCA; $sink: TRUE #> $DCA #> $type: SFO; $sink: TRUE #> Compiled model $cf available #> Differential equations: #> d_D24/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * #> time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) #> * D24 #> d_DCP/dt = + f_D24_to_DCP * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * #> exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 #> * time))) * D24 - k_DCP * DCP #> d_DCA/dt = + f_DCP_to_DCA * k_DCP * DCP - k_DCA * DCA # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Double First-Order in Parallel kinetics — DFOP.solution","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"Function describing decline defined starting value using sum two exponential decline functions.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"","code":"DFOP.solution(t, parent_0, k1, k2, g)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"t Time. parent_0 Starting value response variable time zero. k1 First kinetic constant. k2 Second kinetic constant. g Fraction starting value declining according first kinetic constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"","code":"plot(function(x) DFOP.solution(x, 100, 5, 0.5, 0.3), 0, 4, ylim = c(0,100))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Subsetting method for mmkin objects — [.mmkin","title":"Subsetting method for mmkin objects — [.mmkin","text":"Subsetting method mmkin objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Subsetting method for mmkin objects — [.mmkin","text":"","code":"# S3 method for mmkin [(x, i, j, ..., drop = FALSE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Subsetting method for mmkin objects — [.mmkin","text":"x mmkin object Row index selecting fits specific models j Column index selecting fits specific datasets ... used, satisfy generic method definition drop FALSE, method always returns mmkin object, otherwise either list mkinfit objects single mkinfit object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Subsetting method for mmkin objects — [.mmkin","text":"object class mmkin.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Subsetting method for mmkin objects — [.mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Subsetting method for mmkin objects — [.mmkin","text":"","code":"# Only use one core, to pass R CMD check --as-cran fits <- mmkin(c(\"SFO\", \"FOMC\"), list(B = FOCUS_2006_B, C = FOCUS_2006_C), cores = 1, quiet = TRUE) fits[\"FOMC\", ] #> <mmkin> object #> Status of individual fits: #> #> dataset #> model B C #> FOMC OK OK #> #> OK: No warnings fits[, \"B\"] #> <mmkin> object #> Status of individual fits: #> #> dataset #> model B #> SFO OK #> FOMC OK #> #> OK: No warnings fits[\"SFO\", \"B\"] #> <mmkin> object #> Status of individual fits: #> #> dataset #> model B #> SFO OK #> #> OK: No warnings head( # This extracts an mkinfit object with lots of components fits[[\"FOMC\", \"B\"]] ) #> $par #> parent_0 log_alpha log_beta sigma #> 99.666192 2.549850 5.050587 1.890202 #> #> $objective #> [1] 28.58291 #> #> $convergence #> [1] 0 #> #> $iterations #> [1] 21 #> #> $evaluations #> function gradient #> 25 78 #> #> $message #> [1] \"both X-convergence and relative convergence (5)\" #>"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":null,"dir":"Reference","previous_headings":"","what":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"table fitted parameters resulting DT50 DT90 values generated different software packages. Taken directly FOCUS (2006). results fitting data Topfit software removed, initial concentration parent compound fixed value 100 fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"","code":"FOCUS_2006_DFOP_ref_A_to_B"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"data frame containing following variables. package factor giving name software package M0 fitted initial concentration parent compound f fitted f parameter k1 fitted k1 parameter k2 fitted k2 parameter DT50 resulting half-life parent compound DT90 resulting DT90 parent compound dataset FOCUS dataset used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"","code":"data(FOCUS_2006_DFOP_ref_A_to_B)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":null,"dir":"Reference","previous_headings":"","what":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"table fitted parameters resulting DT50 DT90 values generated different software packages. Taken directly FOCUS (2006). results fitting data Topfit software removed, initial concentration parent compound fixed value 100 fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"","code":"FOCUS_2006_FOMC_ref_A_to_F"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"data frame containing following variables. package factor giving name software package M0 fitted initial concentration parent compound alpha fitted alpha parameter beta fitted beta parameter DT50 resulting half-life parent compound DT90 resulting DT90 parent compound dataset FOCUS dataset used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"","code":"data(FOCUS_2006_FOMC_ref_A_to_F)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":null,"dir":"Reference","previous_headings":"","what":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"table fitted parameters resulting DT50 DT90 values generated different software packages. Taken directly FOCUS (2006). results fitting data Topfit software removed, initial concentration parent compound fixed value 100 fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"","code":"FOCUS_2006_HS_ref_A_to_F"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"data frame containing following variables. package factor giving name software package M0 fitted initial concentration parent compound tb fitted tb parameter k1 fitted k1 parameter k2 fitted k2 parameter DT50 resulting half-life parent compound DT90 resulting DT90 parent compound dataset FOCUS dataset used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"","code":"data(FOCUS_2006_HS_ref_A_to_F)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":null,"dir":"Reference","previous_headings":"","what":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"table fitted parameters resulting DT50 DT90 values generated different software packages. Taken directly FOCUS (2006). results fitting data Topfit software removed, initial concentration parent compound fixed value 100 fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"","code":"FOCUS_2006_SFO_ref_A_to_F"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"data frame containing following variables. package factor giving name software package M0 fitted initial concentration parent compound k fitted first-order degradation rate constant DT50 resulting half-life parent compound DT90 resulting DT90 parent compound dataset FOCUS dataset used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"","code":"data(FOCUS_2006_SFO_ref_A_to_F)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":null,"dir":"Reference","previous_headings":"","what":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"Data taken FOCUS (2006), p. 258.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"","code":"FOCUS_2006_A FOCUS_2006_B FOCUS_2006_C FOCUS_2006_D FOCUS_2006_E FOCUS_2006_F"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"6 datasets observations following variables. name factor containing name observed variable time numeric vector containing time points value numeric vector containing concentrations percent applied radioactivity","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"","code":"FOCUS_2006_C #> name time value #> 1 parent 0 85.1 #> 2 parent 1 57.9 #> 3 parent 3 29.9 #> 4 parent 7 14.6 #> 5 parent 14 9.7 #> 6 parent 28 6.6 #> 7 parent 63 4.0 #> 8 parent 91 3.9 #> 9 parent 119 0.6"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"First-Order Multi-Compartment kinetics — FOMC.solution","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"Function describing exponential decline defined starting value, decreasing rate constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"","code":"FOMC.solution(t, parent_0, alpha, beta)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"t Time. parent_0 Starting value response variable time zero. alpha Shape parameter determined coefficient variation rate constant values. beta Location parameter.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"form given differs slightly original reference Gustafson Holden (1990). parameter beta corresponds 1/beta original equation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"solution FOMC kinetic model reduces SFO.solution large values alpha beta \\(k = \\frac{\\beta}{\\alpha}\\).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics Gustafson DI Holden LR (1990) Nonlinear pesticide dissipation soil: new model based spatial variability. Environmental Science Technology 24, 1032-1038","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"","code":"plot(function(x) FOMC.solution(x, 100, 10, 2), 0, 2, ylim = c(0, 100))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Hockey-Stick kinetics — HS.solution","title":"Hockey-Stick kinetics — HS.solution","text":"Function describing two exponential decline functions break point .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Hockey-Stick kinetics — HS.solution","text":"","code":"HS.solution(t, parent_0, k1, k2, tb)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Hockey-Stick kinetics — HS.solution","text":"t Time. parent_0 Starting value response variable time zero. k1 First kinetic constant. k2 Second kinetic constant. tb Break point. time, exponential decline according k1 calculated, time, exponential decline proceeds according k2.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Hockey-Stick kinetics — HS.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Hockey-Stick kinetics — HS.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Hockey-Stick kinetics — HS.solution","text":"","code":"plot(function(x) HS.solution(x, 100, 2, 0.3, 0.5), 0, 2, ylim=c(0,100))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Indeterminate order rate equation kinetics — IORE.solution","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"Function describing exponential decline defined starting value, concentration dependent rate constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"","code":"IORE.solution(t, parent_0, k__iore, N)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"t Time. parent_0 Starting value response variable time zero. k__iore Rate constant. Note depends concentration units used. N Exponent describing nonlinearity rate equation","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"solution IORE kinetic model reduces SFO.solution N = 1. parameters IORE model can transformed equivalent parameters FOMC mode - see NAFTA guidance details.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"NAFTA Technical Working Group Pesticides (dated) Guidance Evaluating Calculating Degradation Kinetics Environmental Media","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"","code":"plot(function(x) IORE.solution(x, 100, 0.2, 1.3), 0, 2, ylim = c(0, 100)) # \\dontrun{ fit.fomc <- mkinfit(\"FOMC\", FOCUS_2006_C, quiet = TRUE) fit.iore <- mkinfit(\"IORE\", FOCUS_2006_C, quiet = TRUE) fit.iore.deS <- mkinfit(\"IORE\", FOCUS_2006_C, solution_type = \"deSolve\", quiet = TRUE) #> Error in is.loaded(initfunc, PACKAGE = dllname, type = \"\") : #> invalid 'PACKAGE' argument print(data.frame(fit.fomc$par, fit.iore$par, fit.iore.deS$par, row.names = paste(\"model par\", 1:4))) #> fit.fomc.par fit.iore.par fit.iore.deS.par #> model par 1 85.87489063 85.874890 85.874890 #> model par 2 0.05192238 -4.826631 -4.826631 #> model par 3 0.65096665 1.949403 1.949403 #> model par 4 1.85744396 1.857444 1.857444 print(rbind(fomc = endpoints(fit.fomc)$distimes, iore = endpoints(fit.iore)$distimes, iore.deS = endpoints(fit.iore)$distimes)) #> DT50 DT90 DT50back #> fomc 1.785233 15.1479 4.559973 #> iore 1.785233 15.1479 4.559973 #> iore.deS 1.785233 15.1479 4.559973 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":null,"dir":"Reference","previous_headings":"","what":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"Data taken US EPA (2015), p. 19 23.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"","code":"NAFTA_SOP_Appendix_B NAFTA_SOP_Appendix_D"},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"2 datasets observations following variables. name factor containing name observed variable time numeric vector containing time points value numeric vector containing concentrations","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"NAFTA (2011) Guidance evaluating calculating degradation kinetics environmental media. NAFTA Technical Working Group Pesticides https://www.epa.gov/pesticide-science--assessing-pesticide-risks/guidance-evaluating--calculating-degradation accessed 2019-02-22 US EPA (2015) Standard Operating Procedure Using NAFTA Guidance Calculate Representative Half-life Values Characterizing Pesticide Degradation https://www.epa.gov/pesticide-science--assessing-pesticide-risks/standard-operating-procedure-using-nafta-guidance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"","code":"nafta_evaluation <- nafta(NAFTA_SOP_Appendix_D, cores = 1) #> The SFO model is rejected as S_SFO is equal or higher than the critical value S_c #> The representative half-life of the IORE model is longer than the one corresponding #> to the terminal degradation rate found with the DFOP model. #> The representative half-life obtained from the DFOP model may be used print(nafta_evaluation) #> Sums of squares: #> SFO IORE DFOP #> 1378.6832 615.7730 517.8836 #> #> Critical sum of squares for checking the SFO model: #> [1] 717.4598 #> #> Parameters: #> $SFO #> Estimate Pr(>t) Lower Upper #> parent_0 83.7558 1.80e-14 77.18268 90.3288 #> k_parent 0.0017 7.43e-05 0.00112 0.0026 #> sigma 8.7518 1.22e-05 5.64278 11.8608 #> #> $IORE #> Estimate Pr(>t) Lower Upper #> parent_0 9.69e+01 NA 8.88e+01 1.05e+02 #> k__iore_parent 8.40e-14 NA 1.79e-18 3.94e-09 #> N_parent 6.68e+00 NA 4.19e+00 9.17e+00 #> sigma 5.85e+00 NA 3.76e+00 7.94e+00 #> #> $DFOP #> Estimate Pr(>t) Lower Upper #> parent_0 9.76e+01 1.94e-13 9.02e+01 1.05e+02 #> k1 4.24e-02 5.92e-03 2.03e-02 8.88e-02 #> k2 8.24e-04 6.48e-03 3.89e-04 1.75e-03 #> g 2.88e-01 2.47e-05 1.95e-01 4.03e-01 #> sigma 5.36e+00 2.22e-05 3.43e+00 7.30e+00 #> #> #> DTx values: #> DT50 DT90 DT50_rep #> SFO 407 1350 407 #> IORE 541 5190000 1560000 #> DFOP 429 2380 841 #> #> Representative half-life: #> [1] 841.41 plot(nafta_evaluation)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":null,"dir":"Reference","previous_headings":"","what":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"Data taken Attachment 1 SOP.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"","code":"NAFTA_SOP_Attachment"},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"list (NAFTA_SOP_Attachment) containing 16 datasets suitable evaluation nafta","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"NAFTA (2011) Guidance evaluating calculating degradation kinetics environmental media. NAFTA Technical Working Group Pesticides https://www.epa.gov/pesticide-science--assessing-pesticide-risks/guidance-evaluating--calculating-degradation accessed 2019-02-22 US EPA (2015) Standard Operating Procedure Using NAFTA Guidance Calculate Representative Half-life Values Characterizing Pesticide Degradation https://www.epa.gov/pesticide-science--assessing-pesticide-risks/standard-operating-procedure-using-nafta-guidance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"","code":"nafta_att_p5a <- nafta(NAFTA_SOP_Attachment[[\"p5a\"]], cores = 1) #> The SFO model is rejected as S_SFO is equal or higher than the critical value S_c #> The half-life obtained from the IORE model may be used print(nafta_att_p5a) #> Sums of squares: #> SFO IORE DFOP #> 465.21753 56.27506 32.06401 #> #> Critical sum of squares for checking the SFO model: #> [1] 64.4304 #> #> Parameters: #> $SFO #> Estimate Pr(>t) Lower Upper #> parent_0 95.8401 4.67e-21 92.245 99.4357 #> k_parent 0.0102 3.92e-12 0.009 0.0117 #> sigma 4.8230 3.81e-06 3.214 6.4318 #> #> $IORE #> Estimate Pr(>t) Lower Upper #> parent_0 1.01e+02 NA 9.91e+01 1.02e+02 #> k__iore_parent 1.54e-05 NA 4.08e-06 5.84e-05 #> N_parent 2.57e+00 NA 2.25e+00 2.89e+00 #> sigma 1.68e+00 NA 1.12e+00 2.24e+00 #> #> $DFOP #> Estimate Pr(>t) Lower Upper #> parent_0 9.99e+01 1.41e-26 98.8116 101.0810 #> k1 2.67e-02 5.05e-06 0.0243 0.0295 #> k2 3.41e-12 5.00e-01 0.0000 Inf #> g 6.47e-01 3.67e-06 0.6248 0.6677 #> sigma 1.27e+00 8.91e-06 0.8395 1.6929 #> #> #> DTx values: #> DT50 DT90 DT50_rep #> SFO 67.7 2.25e+02 6.77e+01 #> IORE 58.2 1.07e+03 3.22e+02 #> DFOP 55.5 3.70e+11 2.03e+11 #> #> Representative half-life: #> [1] 321.51 plot(nafta_att_p5a)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Single First-Order kinetics — SFO.solution","title":"Single First-Order kinetics — SFO.solution","text":"Function describing exponential decline defined starting value.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Single First-Order kinetics — SFO.solution","text":"","code":"SFO.solution(t, parent_0, k)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Single First-Order kinetics — SFO.solution","text":"t Time. parent_0 Starting value response variable time zero. k Kinetic rate constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Single First-Order kinetics — SFO.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Single First-Order kinetics — SFO.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Single First-Order kinetics — SFO.solution","text":"","code":"plot(function(x) SFO.solution(x, 100, 3), 0, 2)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Single First-Order Reversible Binding kinetics — SFORB.solution","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"Function describing solution differential equations describing kinetic model first-order terms two-way transfer free bound fraction, first-order degradation term free fraction. initial condition defined amount free fraction substance bound fraction.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"","code":"SFORB.solution(t, parent_0, k_12, k_21, k_1output)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"t Time. parent_0 Starting value response variable time zero. k_12 Kinetic constant describing transfer free bound. k_21 Kinetic constant describing transfer bound free. k_1output Kinetic constant describing degradation free fraction.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"value response variable, sum free bound fractions time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"","code":"plot(function(x) SFORB.solution(x, 100, 0.5, 2, 3), 0, 2)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":null,"dir":"Reference","previous_headings":"","what":"Add normally distributed errors to simulated kinetic degradation data — add_err","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"Normally distributed errors added data predicted specific degradation model using mkinpredict. variance error may depend predicted value specified standard deviation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"","code":"add_err( prediction, sdfunc, secondary = c(\"M1\", \"M2\"), n = 10, LOD = 0.1, reps = 2, digits = 1, seed = NA )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"prediction prediction kinetic model produced mkinpredict. sdfunc function taking predicted value argument returning standard deviation used generating random error terms value. secondary names state variables initial value zero n number datasets generated. LOD limit detection (LOD). Values LOD adding random error set NA. reps number replicates generated within datasets. digits number digits values rounded. seed seed used generation random numbers. NA, seed set.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"list datasets compatible mmkin, .e. components list datasets compatible mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"Ranke J Lehmann R (2015) t-test t-test, question. XV Symposium Pesticide Chemistry 2-4 September 2015, Piacenza, Italy https://jrwb.de/posters/piacenza_2015.pdf","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"","code":"# The kinetic model m_SFO_SFO <- mkinmod(parent = mkinsub(\"SFO\", \"M1\"), M1 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded # Generate a prediction for a specific set of parameters sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) # This is the prediction used for the \"Type 2 datasets\" on the Piacenza poster # from 2015 d_SFO_SFO <- mkinpredict(m_SFO_SFO, c(k_parent = 0.1, f_parent_to_M1 = 0.5, k_M1 = log(2)/1000), c(parent = 100, M1 = 0), sampling_times) # Add an error term with a constant (independent of the value) standard deviation # of 10, and generate three datasets d_SFO_SFO_err <- add_err(d_SFO_SFO, function(x) 10, n = 3, seed = 123456789 ) # Name the datasets for nicer plotting names(d_SFO_SFO_err) <- paste(\"Dataset\", 1:3) # Name the model in the list of models (with only one member in this case) for # nicer plotting later on. Be quiet and use only one core not to offend CRAN # checks # \\dontrun{ f_SFO_SFO <- mmkin(list(\"SFO-SFO\" = m_SFO_SFO), d_SFO_SFO_err, cores = 1, quiet = TRUE) plot(f_SFO_SFO) # We would like to inspect the fit for dataset 3 more closely # Using double brackets makes the returned object an mkinfit object # instead of a list of mkinfit objects, so plot.mkinfit is used plot(f_SFO_SFO[[3]], show_residuals = TRUE) # If we use single brackets, we should give two indices (model and dataset), # and plot.mmkin is used plot(f_SFO_SFO[1, 3]) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Anova method for saem.mmkin objects — anova.saem.mmkin","title":"Anova method for saem.mmkin objects — anova.saem.mmkin","text":"Generate anova object. method calculate BIC saemix package. prominent anova methods, models sorted number parameters, tests (requested) always relative model previous line.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Anova method for saem.mmkin objects — anova.saem.mmkin","text":"","code":"# S3 method for saem.mmkin anova( object, ..., method = c(\"is\", \"lin\", \"gq\"), test = FALSE, model.names = NULL )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Anova method for saem.mmkin objects — anova.saem.mmkin","text":"object saem.mmkin object ... objects method Method likelihood calculation: \"\" (importance sampling), \"lin\" (linear approximation), \"gq\" (Gaussian quadrature). Passed saemix::logLik.SaemixObject test likelihood ratio test performed? TRUE, alternative models tested first model. done nested models. model.names Optional character vector model names","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Anova method for saem.mmkin objects — anova.saem.mmkin","text":"\"anova\" data frame; traditional (S3) result anova()","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate Akaike weights for model averaging — aw","title":"Calculate Akaike weights for model averaging — aw","text":"Akaike weights calculated based relative expected Kullback-Leibler information specified Burnham Anderson (2004).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate Akaike weights for model averaging — aw","text":"","code":"aw(object, ...) # S3 method for mkinfit aw(object, ...) # S3 method for mmkin aw(object, ...) # S3 method for mixed.mmkin aw(object, ...) # S3 method for multistart aw(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate Akaike weights for model averaging — aw","text":"object mmkin column object, containing two mkinfit models fitted data, mkinfit object. latter case, mkinfit objects fitted data specified dots arguments. ... used method mmkin column objects, mkinfit objects method mkinfit objects.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Calculate Akaike weights for model averaging — aw","text":"Burnham KP Anderson DR (2004) Multimodel Inference: Understanding AIC BIC Model Selection. Sociological Methods & Research 33(2) 261-304","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate Akaike weights for model averaging — aw","text":"","code":"# \\dontrun{ f_sfo <- mkinfit(\"SFO\", FOCUS_2006_D, quiet = TRUE) f_dfop <- mkinfit(\"DFOP\", FOCUS_2006_D, quiet = TRUE) aw_sfo_dfop <- aw(f_sfo, f_dfop) sum(aw_sfo_dfop) #> [1] 1 aw_sfo_dfop # SFO gets more weight as it has less parameters and a similar fit #> [1] 0.5970258 0.4029742 f <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), list(\"FOCUS D\" = FOCUS_2006_D), cores = 1, quiet = TRUE) aw(f) #> [1] 0.4808722 0.1945539 0.3245740 sum(aw(f)) #> [1] 1 aw(f[c(\"SFO\", \"DFOP\")]) #> [1] 0.5970258 0.4029742 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"default method 'quadratic' based quadratic approximation curvature likelihood function maximum likelihood parameter estimates. alternative method 'profile' based profile likelihood parameter. 'profile' method uses two nested optimisations can take long time, even parallelized specifying 'cores' unixoid platforms. speed method likely improved using method Venzon Moolgavkar (1988).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"","code":"# S3 method for mkinfit confint( object, parm, level = 0.95, alpha = 1 - level, cutoff, method = c(\"quadratic\", \"profile\"), transformed = TRUE, backtransform = TRUE, cores = parallel::detectCores(), rel_tol = 0.01, quiet = FALSE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"object mkinfit object parm vector names parameters given confidence intervals. missing, parameters considered. level confidence level required alpha allowed error probability, overrides 'level' specified. cutoff Possibility specify alternative cutoff difference log-likelihoods confidence boundary. Specifying explicit cutoff value overrides arguments 'level' 'alpha' method 'quadratic' method approximates likelihood function optimised parameters using second term Taylor expansion, using second derivative (hessian) contained object. 'profile' method searches parameter space cutoff confidence intervals means likelihood ratio test. transformed quadratic approximation used, applied likelihood based transformed parameters? backtransform approximate likelihood terms transformed parameters, backtransform parameters confidence intervals? cores number cores used multicore processing. Windows machines, cores > 1 currently supported. rel_tol method 'profile', accuracy lower upper bounds, relative estimate obtained quadratic method? quiet suppress message \"Profiling likelihood\" ... used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"matrix columns giving lower upper confidence limits parameter.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"Bates DM Watts GW (1988) Nonlinear regression analysis & applications Pawitan Y (2013) likelihood - Statistical modelling inference using likelihood. Clarendon Press, Oxford. Venzon DJ Moolgavkar SH (1988) Method Computing Profile-Likelihood Based Confidence Intervals, Applied Statistics, 37, 87–94.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"","code":"f <- mkinfit(\"SFO\", FOCUS_2006_C, quiet = TRUE) confint(f, method = \"quadratic\") #> 2.5% 97.5% #> parent_0 71.8242430 93.1600766 #> k_parent 0.2109541 0.4440528 #> sigma 1.9778868 7.3681380 # \\dontrun{ confint(f, method = \"profile\") #> Profiling the likelihood #> 2.5% 97.5% #> parent_0 73.0641834 92.1392181 #> k_parent 0.2170293 0.4235348 #> sigma 3.1307772 8.0628314 # Set the number of cores for the profiling method for further examples if (identical(Sys.getenv(\"NOT_CRAN\"), \"true\")) { n_cores <- parallel::detectCores() - 1 } else { n_cores <- 1 } if (Sys.getenv(\"TRAVIS\") != \"\") n_cores = 1 if (Sys.info()[\"sysname\"] == \"Windows\") n_cores = 1 SFO_SFO <- mkinmod(parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\"), use_of_ff = \"min\", quiet = TRUE) SFO_SFO.ff <- mkinmod(parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) f_d_1 <- mkinfit(SFO_SFO, subset(FOCUS_2006_D, value != 0), quiet = TRUE) system.time(ci_profile <- confint(f_d_1, method = \"profile\", cores = 1, quiet = TRUE)) #> user system elapsed #> 1.203 0.000 1.203 # Using more cores does not save much time here, as parent_0 takes up most of the time # If we additionally exclude parent_0 (the confidence of which is often of # minor interest), we get a nice performance improvement if we use at least 4 cores system.time(ci_profile_no_parent_0 <- confint(f_d_1, method = \"profile\", c(\"k_parent_sink\", \"k_parent_m1\", \"k_m1_sink\", \"sigma\"), cores = n_cores)) #> Profiling the likelihood #> user system elapsed #> 0.438 0.097 0.301 ci_profile #> 2.5% 97.5% #> parent_0 96.456003640 1.027703e+02 #> k_parent_sink 0.040762501 5.549764e-02 #> k_parent_m1 0.046786482 5.500879e-02 #> k_m1_sink 0.003892605 6.702778e-03 #> sigma 2.535612399 3.985263e+00 ci_quadratic_transformed <- confint(f_d_1, method = \"quadratic\") ci_quadratic_transformed #> 2.5% 97.5% #> parent_0 96.403841640 1.027931e+02 #> k_parent_sink 0.041033378 5.596269e-02 #> k_parent_m1 0.046777902 5.511931e-02 #> k_m1_sink 0.004012217 6.897547e-03 #> sigma 2.396089689 3.854918e+00 ci_quadratic_untransformed <- confint(f_d_1, method = \"quadratic\", transformed = FALSE) ci_quadratic_untransformed #> 2.5% 97.5% #> parent_0 96.403841645 102.79312449 #> k_parent_sink 0.040485331 0.05535491 #> k_parent_m1 0.046611582 0.05494364 #> k_m1_sink 0.003835483 0.00668582 #> sigma 2.396089689 3.85491806 # Against the expectation based on Bates and Watts (1988), the confidence # intervals based on the internal parameter transformation are less # congruent with the likelihood based intervals. Note the superiority of the # interval based on the untransformed fit for k_m1_sink rel_diffs_transformed <- abs((ci_quadratic_transformed - ci_profile)/ci_profile) rel_diffs_untransformed <- abs((ci_quadratic_untransformed - ci_profile)/ci_profile) rel_diffs_transformed < rel_diffs_untransformed #> 2.5% 97.5% #> parent_0 FALSE FALSE #> k_parent_sink TRUE FALSE #> k_parent_m1 TRUE FALSE #> k_m1_sink FALSE FALSE #> sigma FALSE FALSE signif(rel_diffs_transformed, 3) #> 2.5% 97.5% #> parent_0 0.000541 0.000222 #> k_parent_sink 0.006650 0.008380 #> k_parent_m1 0.000183 0.002010 #> k_m1_sink 0.030700 0.029100 #> sigma 0.055000 0.032700 signif(rel_diffs_untransformed, 3) #> 2.5% 97.5% #> parent_0 0.000541 0.000222 #> k_parent_sink 0.006800 0.002570 #> k_parent_m1 0.003740 0.001180 #> k_m1_sink 0.014700 0.002530 #> sigma 0.055000 0.032700 # Investigate a case with formation fractions f_d_2 <- mkinfit(SFO_SFO.ff, subset(FOCUS_2006_D, value != 0), quiet = TRUE) ci_profile_ff <- confint(f_d_2, method = \"profile\", cores = n_cores) #> Profiling the likelihood ci_profile_ff #> 2.5% 97.5% #> parent_0 96.456003640 1.027703e+02 #> k_parent 0.090911032 1.071578e-01 #> k_m1 0.003892606 6.702775e-03 #> f_parent_to_m1 0.471328495 5.611550e-01 #> sigma 2.535612399 3.985263e+00 ci_quadratic_transformed_ff <- confint(f_d_2, method = \"quadratic\") ci_quadratic_transformed_ff #> 2.5% 97.5% #> parent_0 96.403833581 102.79311649 #> k_parent 0.090823771 0.10725430 #> k_m1 0.004012219 0.00689755 #> f_parent_to_m1 0.469118824 0.55959615 #> sigma 2.396089689 3.85491806 ci_quadratic_untransformed_ff <- confint(f_d_2, method = \"quadratic\", transformed = FALSE) ci_quadratic_untransformed_ff #> 2.5% 97.5% #> parent_0 96.403833586 1.027931e+02 #> k_parent 0.090491913 1.069035e-01 #> k_m1 0.003835485 6.685823e-03 #> f_parent_to_m1 0.469113477 5.598387e-01 #> sigma 2.396089689 3.854918e+00 rel_diffs_transformed_ff <- abs((ci_quadratic_transformed_ff - ci_profile_ff)/ci_profile_ff) rel_diffs_untransformed_ff <- abs((ci_quadratic_untransformed_ff - ci_profile_ff)/ci_profile_ff) # While the confidence interval for the parent rate constant is closer to # the profile based interval when using the internal parameter # transformation, the interval for the metabolite rate constant is 'better # without internal parameter transformation. rel_diffs_transformed_ff < rel_diffs_untransformed_ff #> 2.5% 97.5% #> parent_0 FALSE FALSE #> k_parent TRUE TRUE #> k_m1 FALSE FALSE #> f_parent_to_m1 TRUE FALSE #> sigma TRUE FALSE rel_diffs_transformed_ff #> 2.5% 97.5% #> parent_0 0.0005408690 0.0002217233 #> k_parent 0.0009598532 0.0009001864 #> k_m1 0.0307283045 0.0290588367 #> f_parent_to_m1 0.0046881768 0.0027780062 #> sigma 0.0550252516 0.0327066836 rel_diffs_untransformed_ff #> 2.5% 97.5% #> parent_0 0.0005408689 0.0002217233 #> k_parent 0.0046102155 0.0023732280 #> k_m1 0.0146740687 0.0025291815 #> f_parent_to_m1 0.0046995210 0.0023457712 #> sigma 0.0550252516 0.0327066836 # The profiling for the following fit does not finish in a reasonable time, # therefore we use the quadratic approximation m_synth_DFOP_par <- mkinmod(parent = mkinsub(\"DFOP\", c(\"M1\", \"M2\")), M1 = mkinsub(\"SFO\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) DFOP_par_c <- synthetic_data_for_UBA_2014[[12]]$data f_tc_2 <- mkinfit(m_synth_DFOP_par, DFOP_par_c, error_model = \"tc\", error_model_algorithm = \"direct\", quiet = TRUE) confint(f_tc_2, method = \"quadratic\") #> 2.5% 97.5% #> parent_0 94.596181875 106.19936592 #> k_M1 0.037605432 0.04490757 #> k_M2 0.008568745 0.01087675 #> f_parent_to_M1 0.021464676 0.62023880 #> f_parent_to_M2 0.015167158 0.37975350 #> k1 0.273897535 0.33388072 #> k2 0.018614555 0.02250379 #> g 0.671943738 0.73583261 #> sigma_low 0.251283679 0.83992102 #> rsd_high 0.040411022 0.07662008 confint(f_tc_2, \"parent_0\", method = \"quadratic\") #> 2.5% 97.5% #> parent_0 94.59618 106.1994 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":null,"dir":"Reference","previous_headings":"","what":"Create degradation functions for known analytical solutions — create_deg_func","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"Create degradation functions known analytical solutions","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"","code":"create_deg_func(spec, use_of_ff = c(\"min\", \"max\"))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"spec List model specifications contained mkinmod objects use_of_ff Minimum maximum use formation fractions","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"Degradation function attached mkinmod objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"","code":"SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded FOCUS_D <- subset(FOCUS_2006_D, value != 0) # to avoid warnings fit_1 <- mkinfit(SFO_SFO, FOCUS_D, solution_type = \"analytical\", quiet = TRUE) # \\dontrun{ fit_2 <- mkinfit(SFO_SFO, FOCUS_D, solution_type = \"deSolve\", quiet = TRUE) if (require(rbenchmark)) benchmark( analytical = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"analytical\", quiet = TRUE), deSolve = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"deSolve\", quiet = TRUE), replications = 2) #> Loading required package: rbenchmark #> test replications elapsed relative user.self sys.self user.child #> 1 analytical 2 0.233 1.000 0.232 0.001 0 #> 2 deSolve 2 0.293 1.258 0.293 0.000 0 #> sys.child #> 1 0 #> 2 0 DFOP_SFO <- mkinmod( parent = mkinsub(\"DFOP\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded benchmark( analytical = mkinfit(DFOP_SFO, FOCUS_D, solution_type = \"analytical\", quiet = TRUE), deSolve = mkinfit(DFOP_SFO, FOCUS_D, solution_type = \"deSolve\", quiet = TRUE), replications = 2) #> test replications elapsed relative user.self sys.self user.child #> 1 analytical 2 0.375 1.000 0.375 0 0 #> 2 deSolve 2 0.508 1.355 0.508 0 0 #> sys.child #> 1 0 #> 2 0 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":null,"dir":"Reference","previous_headings":"","what":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"datasets extracted active substance evaluation dossier published EFSA. Kinetic evaluations shown datasets intended illustrate advance kinetic modelling. fact data results shown imply license use context pesticide registrations, use data may constrained data protection regulations.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"","code":"dimethenamid_2018"},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"mkindsg object grouping seven datasets meta information","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"Rapporteur Member State Germany, Co-Rapporteur Member State Bulgaria (2018) Renewal Assessment Report Dimethenamid-P Volume 3 - B.8 Environmental fate behaviour Rev. 2 - November 2017 https://open.efsa.europa.eu/study-inventory/EFSA-Q-2014-00716","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"R code used create data object installed package 'dataset_generation' directory. code, page numbers given specific pieces information comments.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"","code":"print(dimethenamid_2018) #> <mkindsg> holding 7 mkinds objects #> Title $title: Aerobic soil degradation data on dimethenamid-P from the EU assessment in 2018 #> Occurrence of observed compounds $observed_n: #> DMTAP M23 M27 M31 DMTA #> 3 7 7 7 4 #> Time normalisation factors $f_time_norm: #> [1] 1.0000000 0.9706477 1.2284784 1.2284784 0.6233856 0.7678922 0.6733938 #> Meta information $meta: #> study usda_soil_type study_moisture_ref_type rel_moisture #> Calke Unsworth 2014 Sandy loam pF2 1.00 #> Borstel Staudenmaier 2009 Sand pF1 0.50 #> Elliot 1 Wendt 1997 Clay loam pF2.5 0.75 #> Elliot 2 Wendt 1997 Clay loam pF2.5 0.75 #> Flaach König 1996 Sandy clay loam pF1 0.40 #> BBA 2.2 König 1995 Loamy sand pF1 0.40 #> BBA 2.3 König 1995 Sandy loam pF1 0.40 #> study_ref_moisture temperature #> Calke NA 20 #> Borstel 23.00 20 #> Elliot 1 33.37 23 #> Elliot 2 33.37 23 #> Flaach NA 20 #> BBA 2.2 NA 20 #> BBA 2.3 NA 20 dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] ds_i }) names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL # \\dontrun{ # We don't use DFOP for the parent compound, as this gives numerical # instabilities in the fits sfo_sfo3p <- mkinmod( DMTA = mkinsub(\"SFO\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), quiet = TRUE ) dmta_sfo_sfo3p_tc <- mmkin(list(\"SFO-SFO3+\" = sfo_sfo3p), dmta_ds, error_model = \"tc\", quiet = TRUE) print(dmta_sfo_sfo3p_tc) #> <mmkin> object #> Status of individual fits: #> #> dataset #> model Calke Borstel Flaach BBA 2.2 BBA 2.3 Elliot #> SFO-SFO3+ OK OK OK OK OK OK #> #> OK: No warnings # The default (test_log_parms = FALSE) gives an undue # influence of ill-defined rate constants that have # extremely small values: plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = FALSE) # If we disregards ill-defined rate constants, the results # look more plausible, but the truth is likely to be in # between these variants plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = TRUE) # We can also specify a default value for the failing # log parameters, to mimic FOCUS guidance plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = TRUE, default_log_parms = log(2)/1000) # As these attempts are not satisfying, we use nonlinear mixed-effects models # f_dmta_nlme_tc <- nlme(dmta_sfo_sfo3p_tc) # nlme reaches maxIter = 50 without convergence f_dmta_saem_tc <- saem(dmta_sfo_sfo3p_tc) # I am commenting out the convergence plot as rendering them # with pkgdown fails (at least without further tweaks to the # graphics device used) #saemix::plot(f_dmta_saem_tc$so, plot.type = \"convergence\") summary(f_dmta_saem_tc) #> saemix version used for fitting: 3.2 #> mkin version used for pre-fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:14:53 2023 #> Date of summary: Thu Nov 16 04:14:53 2023 #> #> Equations: #> d_DMTA/dt = - k_DMTA * DMTA #> d_M23/dt = + f_DMTA_to_M23 * k_DMTA * DMTA - k_M23 * M23 #> d_M27/dt = + f_DMTA_to_M27 * k_DMTA * DMTA - k_M27 * M27 + k_M31 * M31 #> d_M31/dt = + f_DMTA_to_M31 * k_DMTA * DMTA - k_M31 * M31 #> #> Data: #> 563 observations of 4 variable(s) grouped in 6 datasets #> #> Model predictions using solution type deSolve #> #> Fitted in 302.335 s #> Using 300, 100 iterations and 9 chains #> #> Variance model: Two-component variance function #> #> Starting values for degradation parameters: #> DMTA_0 log_k_DMTA log_k_M23 log_k_M27 log_k_M31 f_DMTA_ilr_1 #> 95.5662 -2.9048 -3.8130 -4.1600 -4.1486 0.1341 #> f_DMTA_ilr_2 f_DMTA_ilr_3 #> 0.1385 -1.6700 #> #> Fixed degradation parameter values: #> None #> #> Starting values for random effects (square root of initial entries in omega): #> DMTA_0 log_k_DMTA log_k_M23 log_k_M27 log_k_M31 f_DMTA_ilr_1 #> DMTA_0 4.802 0.0000 0.0000 0.000 0.0000 0.0000 #> log_k_DMTA 0.000 0.9834 0.0000 0.000 0.0000 0.0000 #> log_k_M23 0.000 0.0000 0.6983 0.000 0.0000 0.0000 #> log_k_M27 0.000 0.0000 0.0000 1.028 0.0000 0.0000 #> log_k_M31 0.000 0.0000 0.0000 0.000 0.9841 0.0000 #> f_DMTA_ilr_1 0.000 0.0000 0.0000 0.000 0.0000 0.7185 #> f_DMTA_ilr_2 0.000 0.0000 0.0000 0.000 0.0000 0.0000 #> f_DMTA_ilr_3 0.000 0.0000 0.0000 0.000 0.0000 0.0000 #> f_DMTA_ilr_2 f_DMTA_ilr_3 #> DMTA_0 0.0000 0.0000 #> log_k_DMTA 0.0000 0.0000 #> log_k_M23 0.0000 0.0000 #> log_k_M27 0.0000 0.0000 #> log_k_M31 0.0000 0.0000 #> f_DMTA_ilr_1 0.0000 0.0000 #> f_DMTA_ilr_2 0.7378 0.0000 #> f_DMTA_ilr_3 0.0000 0.4451 #> #> Starting values for error model parameters: #> a.1 b.1 #> 1 1 #> #> Results: #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 2276 2273 -1120 #> #> Optimised parameters: #> est. lower upper #> DMTA_0 88.4862 84.1127 92.8598 #> log_k_DMTA -3.0512 -3.5674 -2.5351 #> log_k_M23 -4.0576 -4.9013 -3.2139 #> log_k_M27 -3.8584 -4.2572 -3.4595 #> log_k_M31 -3.9779 -4.4844 -3.4714 #> f_DMTA_ilr_1 0.1264 -0.2186 0.4714 #> f_DMTA_ilr_2 0.1509 -0.2547 0.5565 #> f_DMTA_ilr_3 -1.3891 -1.6962 -1.0819 #> a.1 0.9196 0.8231 1.0161 #> b.1 0.1377 0.1203 0.1551 #> SD.DMTA_0 3.5956 -0.8154 8.0066 #> SD.log_k_DMTA 0.6437 0.2784 1.0091 #> SD.log_k_M23 0.9929 0.3719 1.6139 #> SD.log_k_M27 0.4530 0.1522 0.7537 #> SD.log_k_M31 0.5773 0.1952 0.9595 #> SD.f_DMTA_ilr_1 0.4063 0.1505 0.6621 #> SD.f_DMTA_ilr_2 0.4800 0.1817 0.7783 #> SD.f_DMTA_ilr_3 0.3582 0.1350 0.5814 #> #> Correlation: #> DMTA_0 l__DMTA lg__M23 lg__M27 lg__M31 f_DMTA__1 f_DMTA__2 #> log_k_DMTA 0.0306 #> log_k_M23 -0.0234 -0.0032 #> log_k_M27 -0.0380 -0.0049 0.0041 #> log_k_M31 -0.0247 -0.0031 0.0022 0.0817 #> f_DMTA_ilr_1 -0.0046 -0.0006 0.0425 -0.0438 0.0319 #> f_DMTA_ilr_2 -0.0008 -0.0002 0.0216 -0.0267 -0.0890 -0.0349 #> f_DMTA_ilr_3 -0.1805 -0.0136 0.0434 0.0791 0.0390 -0.0061 0.0053 #> #> Random effects: #> est. lower upper #> SD.DMTA_0 3.5956 -0.8154 8.0066 #> SD.log_k_DMTA 0.6437 0.2784 1.0091 #> SD.log_k_M23 0.9929 0.3719 1.6139 #> SD.log_k_M27 0.4530 0.1522 0.7537 #> SD.log_k_M31 0.5773 0.1952 0.9595 #> SD.f_DMTA_ilr_1 0.4063 0.1505 0.6621 #> SD.f_DMTA_ilr_2 0.4800 0.1817 0.7783 #> SD.f_DMTA_ilr_3 0.3582 0.1350 0.5814 #> #> Variance model: #> est. lower upper #> a.1 0.9196 0.8231 1.0161 #> b.1 0.1377 0.1203 0.1551 #> #> Backtransformed parameters: #> est. lower upper #> DMTA_0 88.48621 84.112654 92.85977 #> k_DMTA 0.04730 0.028230 0.07926 #> k_M23 0.01729 0.007437 0.04020 #> k_M27 0.02110 0.014162 0.03144 #> k_M31 0.01872 0.011283 0.03107 #> f_DMTA_to_M23 0.14551 NA NA #> f_DMTA_to_M27 0.12169 NA NA #> f_DMTA_to_M31 0.11062 NA NA #> #> Resulting formation fractions: #> ff #> DMTA_M23 0.1455 #> DMTA_M27 0.1217 #> DMTA_M31 0.1106 #> DMTA_sink 0.6222 #> #> Estimated disappearance times: #> DT50 DT90 #> DMTA 14.65 48.68 #> M23 40.09 133.17 #> M27 32.85 109.11 #> M31 37.02 122.97 # As the confidence interval for the random effects of DMTA_0 # includes zero, we could try an alternative model without # such random effects # f_dmta_saem_tc_2 <- saem(dmta_sfo_sfo3p_tc, # covariance.model = diag(c(0, rep(1, 7)))) # saemix::plot(f_dmta_saem_tc_2$so, plot.type = \"convergence\") # This does not perform better judged by AIC and BIC # saemix::compare.saemix(f_dmta_saem_tc$so, f_dmta_saem_tc_2$so) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html","id":null,"dir":"Reference","previous_headings":"","what":"Synthetic data for hierarchical kinetic degradation models — ds_mixed","title":"Synthetic data for hierarchical kinetic degradation models — ds_mixed","text":"R code used create data object installed package 'dataset_generation' directory.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Synthetic data for hierarchical kinetic degradation models — ds_mixed","text":"","code":"# \\dontrun{ sfo_mmkin <- mmkin(\"SFO\", ds_sfo, quiet = TRUE, error_model = \"tc\", cores = 15) sfo_saem <- saem(sfo_mmkin, no_random_effect = \"parent_0\") plot(sfo_saem) # } # This is the code used to generate the datasets cat(readLines(system.file(\"dataset_generation/ds_mixed.R\", package = \"mkin\")), sep = \"\\n\") #> # Synthetic data for hierarchical kinetic models #> # Refactored version of the code previously in tests/testthat/setup_script.R #> # The number of datasets was 3 for FOMC, and 10 for HS in that script, now it #> # is always 15 for consistency #> #> library(mkin) # We use mkinmod and mkinpredict #> sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) #> n <- 15 #> log_sd <- 0.3 #> err_1 = list(const = 1, prop = 0.05) #> tc <- function(value) sigma_twocomp(value, err_1$const, err_1$prop) #> const <- function(value) 2 #> #> set.seed(123456) #> SFO <- mkinmod(parent = mkinsub(\"SFO\")) #> sfo_pop <- list(parent_0 = 100, k_parent = 0.03) #> sfo_parms <- as.matrix(data.frame( #> k_parent = rlnorm(n, log(sfo_pop$k_parent), log_sd))) #> set.seed(123456) #> ds_sfo <- lapply(1:n, function(i) { #> ds_mean <- mkinpredict(SFO, sfo_parms[i, ], #> c(parent = sfo_pop$parent_0), sampling_times) #> add_err(ds_mean, tc, n = 1)[[1]] #> }) #> attr(ds_sfo, \"pop\") <- sfo_pop #> attr(ds_sfo, \"parms\") <- sfo_parms #> #> set.seed(123456) #> FOMC <- mkinmod(parent = mkinsub(\"FOMC\")) #> fomc_pop <- list(parent_0 = 100, alpha = 2, beta = 8) #> fomc_parms <- as.matrix(data.frame( #> alpha = rlnorm(n, log(fomc_pop$alpha), 0.4), #> beta = rlnorm(n, log(fomc_pop$beta), 0.2))) #> set.seed(123456) #> ds_fomc <- lapply(1:n, function(i) { #> ds_mean <- mkinpredict(FOMC, fomc_parms[i, ], #> c(parent = fomc_pop$parent_0), sampling_times) #> add_err(ds_mean, tc, n = 1)[[1]] #> }) #> attr(ds_fomc, \"pop\") <- fomc_pop #> attr(ds_fomc, \"parms\") <- fomc_parms #> #> set.seed(123456) #> DFOP <- mkinmod(parent = mkinsub(\"DFOP\")) #> dfop_pop <- list(parent_0 = 100, k1 = 0.06, k2 = 0.015, g = 0.4) #> dfop_parms <- as.matrix(data.frame( #> k1 = rlnorm(n, log(dfop_pop$k1), log_sd), #> k2 = rlnorm(n, log(dfop_pop$k2), log_sd), #> g = plogis(rnorm(n, qlogis(dfop_pop$g), log_sd)))) #> set.seed(123456) #> ds_dfop <- lapply(1:n, function(i) { #> ds_mean <- mkinpredict(DFOP, dfop_parms[i, ], #> c(parent = dfop_pop$parent_0), sampling_times) #> add_err(ds_mean, tc, n = 1)[[1]] #> }) #> attr(ds_dfop, \"pop\") <- dfop_pop #> attr(ds_dfop, \"parms\") <- dfop_parms #> #> set.seed(123456) #> HS <- mkinmod(parent = mkinsub(\"HS\")) #> hs_pop <- list(parent_0 = 100, k1 = 0.08, k2 = 0.01, tb = 15) #> hs_parms <- as.matrix(data.frame( #> k1 = rlnorm(n, log(hs_pop$k1), log_sd), #> k2 = rlnorm(n, log(hs_pop$k2), log_sd), #> tb = rlnorm(n, log(hs_pop$tb), 0.1))) #> set.seed(123456) #> ds_hs <- lapply(1:n, function(i) { #> ds_mean <- mkinpredict(HS, hs_parms[i, ], #> c(parent = hs_pop$parent_0), sampling_times) #> add_err(ds_mean, const, n = 1)[[1]] #> }) #> attr(ds_hs, \"pop\") <- hs_pop #> attr(ds_hs, \"parms\") <- hs_parms #> #> set.seed(123456) #> DFOP_SFO <- mkinmod( #> parent = mkinsub(\"DFOP\", \"m1\"), #> m1 = mkinsub(\"SFO\"), #> quiet = TRUE) #> dfop_sfo_pop <- list(parent_0 = 100, #> k_m1 = 0.007, f_parent_to_m1 = 0.5, #> k1 = 0.1, k2 = 0.02, g = 0.5) #> dfop_sfo_parms <- as.matrix(data.frame( #> k1 = rlnorm(n, log(dfop_sfo_pop$k1), log_sd), #> k2 = rlnorm(n, log(dfop_sfo_pop$k2), log_sd), #> g = plogis(rnorm(n, qlogis(dfop_sfo_pop$g), log_sd)), #> f_parent_to_m1 = plogis(rnorm(n, #> qlogis(dfop_sfo_pop$f_parent_to_m1), log_sd)), #> k_m1 = rlnorm(n, log(dfop_sfo_pop$k_m1), log_sd))) #> ds_dfop_sfo_mean <- lapply(1:n, #> function(i) { #> mkinpredict(DFOP_SFO, dfop_sfo_parms[i, ], #> c(parent = dfop_sfo_pop$parent_0, m1 = 0), sampling_times) #> } #> ) #> set.seed(123456) #> ds_dfop_sfo <- lapply(ds_dfop_sfo_mean, function(ds) { #> add_err(ds, #> sdfunc = function(value) sqrt(err_1$const^2 + value^2 * err_1$prop^2), #> n = 1, secondary = \"m1\")[[1]] #> }) #> attr(ds_dfop_sfo, \"pop\") <- dfop_sfo_pop #> attr(ds_dfop_sfo, \"parms\") <- dfop_sfo_parms #> #> #save(ds_sfo, ds_fomc, ds_dfop, ds_hs, ds_dfop_sfo, file = \"data/ds_mixed.rda\", version = 2)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"function calculates DT50 DT90 values well formation fractions kinetic models fitted mkinfit. SFORB model specified one parents metabolites, Eigenvalues returned. equivalent rate constants DFOP model, advantage SFORB model can also used metabolites.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"","code":"endpoints(fit, covariates = NULL, covariate_quantile = 0.5)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"fit object class mkinfit, nlme.mmkin saem.mmkin, another object list components mkinmod containing mkinmod degradation model, two numeric vectors, bparms.optim bparms.fixed, contain parameter values model. covariates Numeric vector covariate values variables covariate models object. given, overrides 'covariate_quantile'. covariate_quantile argument effect fitted object covariate models. , default show endpoints median covariate values (50th percentile).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"list matrix dissipation times named distimes, , applicable, vector formation fractions named ff , SFORB model use, vector eigenvalues SFORB models, equivalent DFOP rate constants","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"Additional DT50 values calculated FOMC DT90 k1 k2 HS DFOP, well Eigenvalues b1 b2 SFORB models","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"function used internally summary.mkinfit, summary.nlme.mmkin summary.saem.mmkin.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"","code":"fit <- mkinfit(\"FOMC\", FOCUS_2006_C, quiet = TRUE) endpoints(fit) #> $distimes #> DT50 DT90 DT50back #> parent 1.785233 15.1479 4.559973 #> # \\dontrun{ fit_2 <- mkinfit(\"DFOP\", FOCUS_2006_C, quiet = TRUE) endpoints(fit_2) #> $distimes #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 1.886925 21.25106 6.397207 1.508293 38.83438 #> fit_3 <- mkinfit(\"SFORB\", FOCUS_2006_C, quiet = TRUE) endpoints(fit_3) #> $ff #> parent_free #> 1 #> #> $SFORB #> parent_b1 parent_b2 parent_g #> 0.4595574 0.0178488 0.8539454 #> #> $distimes #> DT50 DT90 DT50back DT50_parent_b1 DT50_parent_b2 #> parent 1.886925 21.25106 6.397208 1.508293 38.83438 #> # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":null,"dir":"Reference","previous_headings":"","what":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"12 datasets extracted active substance evaluation dossiers published EFSA. Kinetic evaluations shown datasets intended illustrate advance error model specifications. fact data results shown imply license use context pesticide registrations, use data may constrained data protection regulations. Preprocessing data performed based recommendations FOCUS kinetics workgroup (FOCUS, 2014) described . Datasets 1 2 Renewal Assessment Report (RAR) imazamox (France, 2015, p. 15). setting values reported zero, LOQ 0.1 assumed. Metabolite residues reported day zero added parent compound residues. Datasets 3 4 Renewal Assessment Report (RAR) isofetamid (Belgium, 2014, p. 8) show data two different radiolabels. dataset 4, value given metabolite day zero sampling replicate B added parent compound, following respective FOCUS recommendation. Dataset 5 Renewal Assessment Report (RAR) ethofumesate (Austria, 2015, p. 16). Datasets 6 10 Renewal Assessment Report (RAR) glyphosate (Germany, 2013, pages 8, 28, 50, 51). initial sampling, residues given metabolite added parent value, following recommendation FOCUS kinetics workgroup. Dataset 11 Renewal Assessment Report (RAR) 2,4-D (Hellas, 2013, p. 644). Values reported zero set NA, exception day three sampling metabolite A2, set one half LOD reported 1% AR. Dataset 12 Renewal Assessment Report (RAR) thifensulfuron-methyl (United Kingdom, 2014, p. 81).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"","code":"experimental_data_for_UBA_2019"},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"list containing twelve datasets R6 class defined mkinds, containing, among others, following components title name dataset, e.g. Soil 1 data data frame data form expected mkinfit","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"Austria (2015). Ethofumesate Renewal Assessment Report Volume 3 Annex B.8 () Belgium (2014). Isofetamid (IKF-5411) Draft Assessment Report Volume 3 Annex B.8 () France (2015). Imazamox Draft Renewal Assessment Report Volume 3 Annex B.8 () FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics Germany (2013). Renewal Assessment Report Glyphosate Volume 3 Annex B.8: Environmental Fate Behaviour Hellas (2013). Renewal Assessment Report 2,4-D Volume 3 Annex B.8: Fate behaviour environment Ranke (2019) Documentation results obtained error model expertise written German Umweltbundesamt. United Kingdom (2014). Thifensulfuron-methyl - Annex B.8 (Volume 3) Report Proposed Decision United Kingdom made European Commission Regulation (EC) . 1141/2010 renewal active substance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"","code":"# \\dontrun{ # Model definitions sfo_sfo <- mkinmod( parent = mkinsub(\"SFO\", to = \"A1\"), A1 = mkinsub(\"SFO\"), use_of_ff = \"max\" ) #> Temporary DLL for differentials generated and loaded dfop_sfo <- mkinmod( parent = mkinsub(\"DFOP\", to = \"A1\"), A1 = mkinsub(\"SFO\"), use_of_ff = \"max\" ) #> Temporary DLL for differentials generated and loaded sfo_sfo_sfo <- mkinmod( parent = mkinsub(\"SFO\", to = \"A1\"), A1 = mkinsub(\"SFO\", to = \"A2\"), A2 = mkinsub(\"SFO\"), use_of_ff = \"max\" ) #> Temporary DLL for differentials generated and loaded dfop_sfo_sfo <- mkinmod( parent = mkinsub(\"DFOP\", to = \"A1\"), A1 = mkinsub(\"SFO\", to = \"A2\"), A2 = mkinsub(\"SFO\"), use_of_ff = \"max\" ) #> Temporary DLL for differentials generated and loaded d_1_2 <- lapply(experimental_data_for_UBA_2019[1:2], function(x) x$data) names(d_1_2) <- paste(\"Soil\", 1:2) f_1_2_tc <- mmkin(list(\"DFOP-SFO-SFO\" = dfop_sfo_sfo), d_1_2, error_model = \"tc\") plot(f_1_2_tc, resplot = \"errmod\") # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":null,"dir":"Reference","previous_headings":"","what":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"Time step normalisation factors aerobic soil degradation described Appendix 8 FOCUS kinetics guidance (FOCUS 2014, p. 369).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"","code":"f_time_norm_focus(object, ...) # S3 method for numeric f_time_norm_focus( object, moisture = NA, field_moisture = NA, temperature = object, Q10 = 2.58, walker = 0.7, f_na = NA, ... ) # S3 method for mkindsg f_time_norm_focus( object, study_moisture_ref_source = c(\"auto\", \"meta\", \"focus\"), Q10 = 2.58, walker = 0.7, f_na = NA, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"object object containing information used calculations ... Currently used moisture Numeric vector moisture contents \\% w/w field_moisture Numeric vector moisture contents field capacity (pF2) \\% w/w temperature Numeric vector temperatures °C Q10 Q10 value used temperature normalisation walker Walker exponent used moisture normalisation f_na factor use NA values. set NA, factors complete cases returned. study_moisture_ref_source Source reference value used calculate study moisture. 'auto', preference given reference moisture given meta information, otherwise focus soil moisture soil class used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"","code":"f_time_norm_focus(25, 20, 25) # 1.37, compare FOCUS 2014 p. 184 #> [1] 1.373956 D24_2014$meta #> study usda_soil_type study_moisture_ref_type #> Mississippi Cohen 1991 Silt loam <NA> #> Fayette Liu and Adelfinskaya 2011 Silt loam pF1 #> RefSol 03-G Liu and Adelfinskaya 2011 Loam pF1 #> Site E1 Liu and Adelfinskaya 2011 Loam pF1 #> Site I2 Liu and Adelfinskaya 2011 Loamy sand pF1 #> rel_moisture temperature #> Mississippi NA 25 #> Fayette 0.5 20 #> RefSol 03-G 0.5 20 #> Site E1 0.5 20 #> Site I2 0.5 20 # No moisture normalisation in the first dataset, so we use f_na = 1 to get # temperature only normalisation as in the EU evaluation f_time_norm_focus(D24_2014, study_moisture_ref_source = \"focus\", f_na = 1) #> $f_time_norm was (re)set to normalised values"},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":null,"dir":"Reference","previous_headings":"","what":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"value transcribed p. 36. table assumes field capacity corresponds pF2, MWHC pF 1 1/3 bar pF 2.5.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"","code":"focus_soil_moisture"},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"matrix upper case USDA soil classes row names, water tension ('pF1', 'pF2', 'pF 2.5') column names","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"Anonymous (2014) Generic Guidance Tier 1 FOCUS Ground Water Assessment Version 2.2, May 2014 https://esdac.jrc.ec.europa.eu/projects/ground-water","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"","code":"focus_soil_moisture #> pF1 pF2 pF2.5 #> Sand 24 12 7 #> Loamy sand 24 14 9 #> Sandy loam 27 19 15 #> Sandy clay loam 28 22 18 #> Clay loam 32 28 25 #> Loam 31 25 21 #> Silt loam 32 26 21 #> Silty clay loam 34 30 27 #> Silt 31 27 21 #> Sandy clay 41 35 31 #> Silty clay 44 40 36 #> Clay 53 48 43"},{"path":"https://pkgdown.jrwb.de/mkin/reference/get_deg_func.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve a degradation function from the mmkin namespace — get_deg_func","title":"Retrieve a degradation function from the mmkin namespace — get_deg_func","text":"Retrieve degradation function mmkin namespace","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/get_deg_func.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve a degradation function from the mmkin namespace — get_deg_func","text":"","code":"get_deg_func()"},{"path":"https://pkgdown.jrwb.de/mkin/reference/get_deg_func.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve a degradation function from the mmkin namespace — get_deg_func","text":"function likely previously assigned within nlme.mmkin","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":null,"dir":"Reference","previous_headings":"","what":"Hierarchical kinetics template — hierarchical_kinetics","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"R markdown format setting hierarchical kinetics based template provided mkin package. format based rmarkdown::pdf_document. Chunk options adapted. Echoing R code code chunks caching turned per default. character prepending output code chunks set empty string, code tidying , figure alignment defaults centering, positioning figures set \"H\", means figures move around document, stay user includes .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"","code":"hierarchical_kinetics(..., keep_tex = FALSE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"... Arguments rmarkdown::pdf_document keep_tex Keep intermediate tex file used conversion PDF","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"R Markdown output format pass render","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"latter feature (positioning figures \"H\") depends LaTeX package 'float'. addition, LaTeX package 'listing' used template showing model fit summaries Appendix. means LaTeX packages 'float' 'listing' need installed TeX distribution used. Windows, easiest way achieve (TeX distribution present ) install 'tinytex' R package, run 'tinytex::install_tinytex()' get basic tiny Tex distribution, run 'tinytex::tlmgr_install(c(\"float\", \"listing\"))'.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"","code":"# \\dontrun{ library(rmarkdown) # The following is now commented out after the relase of v1.2.3 for the generation # of online docs, as the command creates a directory and opens an editor #draft(\"example_analysis.rmd\", template = \"hierarchical_kinetics\", package = \"mkin\") # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":null,"dir":"Reference","previous_headings":"","what":"Method to get the names of ill-defined parameters — illparms","title":"Method to get the names of ill-defined parameters — illparms","text":"method generalised nonlinear regression fits obtained mkinfit mmkin checks degradation parameters pass Wald test (degradation kinetics often simply called t-test) significant difference zero. test, parameterisation without parameter transformations used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Method to get the names of ill-defined parameters — illparms","text":"","code":"illparms(object, ...) # S3 method for mkinfit illparms(object, conf.level = 0.95, ...) # S3 method for illparms.mkinfit print(x, ...) # S3 method for mmkin illparms(object, conf.level = 0.95, ...) # S3 method for illparms.mmkin print(x, ...) # S3 method for saem.mmkin illparms( object, conf.level = 0.95, random = TRUE, errmod = TRUE, slopes = TRUE, ... ) # S3 method for illparms.saem.mmkin print(x, ...) # S3 method for mhmkin illparms(object, conf.level = 0.95, random = TRUE, errmod = TRUE, ...) # S3 method for illparms.mhmkin print(x, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Method to get the names of ill-defined parameters — illparms","text":"object object investigate ... potential future extensions conf.level confidence level checking p values x object printed random hierarchical fits, random effects tested? errmod hierarchical fits, error model parameters tested? slopes hierarchical saem fits using saemix backend, slope parameters covariate model(starting 'beta_') tested?","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Method to get the names of ill-defined parameters — illparms","text":"mkinfit saem objects, character vector parameter names. mmkin mhmkin objects, matrix like object class 'illparms.mmkin' 'illparms.mhmkin'.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Method to get the names of ill-defined parameters — illparms","text":"method hierarchical model fits, also known nonlinear mixed-effects model fits obtained saem mhmkin checks confidence intervals random effects expressed standard deviations include zero, confidence intervals error model parameters include zero.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Method to get the names of ill-defined parameters — illparms","text":"return objects printing methods. single fits, printing output anything case ill-defined parameters found.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Method to get the names of ill-defined parameters — illparms","text":"","code":"fit <- mkinfit(\"FOMC\", FOCUS_2006_A, quiet = TRUE) #> Warning: Optimisation did not converge: #> false convergence (8) illparms(fit) #> [1] \"parent_0\" \"alpha\" \"beta\" \"sigma\" # \\dontrun{ fits <- mmkin( c(\"SFO\", \"FOMC\"), list(\"FOCUS A\" = FOCUS_2006_A, \"FOCUS C\" = FOCUS_2006_C), quiet = TRUE) illparms(fits) #> dataset #> model FOCUS A FOCUS C #> SFO #> FOMC parent_0, alpha, beta, sigma # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to perform isometric log-ratio transformation — ilr","title":"Function to perform isometric log-ratio transformation — ilr","text":"implementation special case class isometric log-ratio transformations.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to perform isometric log-ratio transformation — ilr","text":"","code":"ilr(x) invilr(x)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to perform isometric log-ratio transformation — ilr","text":"x numeric vector. Naturally, forward transformation sensible vectors elements greater zero.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to perform isometric log-ratio transformation — ilr","text":"result forward backward transformation. returned components always sum 1 case inverse log-ratio transformation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Function to perform isometric log-ratio transformation — ilr","text":"Peter Filzmoser, Karel Hron (2008) Outlier Detection Compositional Data Using Robust Methods. Math Geosci 40 233-248","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to perform isometric log-ratio transformation — ilr","text":"René Lehmann Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to perform isometric log-ratio transformation — ilr","text":"","code":"# Order matters ilr(c(0.1, 1, 10)) #> [1] -1.628174 -2.820079 ilr(c(10, 1, 0.1)) #> [1] 1.628174 2.820079 # Equal entries give ilr transformations with zeros as elements ilr(c(3, 3, 3)) #> [1] 0 0 # Almost equal entries give small numbers ilr(c(0.3, 0.4, 0.3)) #> [1] -0.2034219 0.1174457 # Only the ratio between the numbers counts, not their sum invilr(ilr(c(0.7, 0.29, 0.01))) #> [1] 0.70 0.29 0.01 invilr(ilr(2.1 * c(0.7, 0.29, 0.01))) #> [1] 0.70 0.29 0.01 # Inverse transformation of larger numbers gives unequal elements invilr(-10) #> [1] 7.213536e-07 9.999993e-01 invilr(c(-10, 0)) #> [1] 7.207415e-07 9.991507e-01 8.486044e-04 # The sum of the elements of the inverse ilr is 1 sum(invilr(c(-10, 0))) #> [1] 1 # This is why we do not need all elements of the inverse transformation to go back: a <- c(0.1, 0.3, 0.5) b <- invilr(a) length(b) # Four elements #> [1] 4 ilr(c(b[1:3], 1 - sum(b[1:3]))) # Gives c(0.1, 0.3, 0.5) #> [1] 0.1 0.3 0.5"},{"path":"https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","title":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","text":"Confidence intervals parameters saem.mmkin objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","text":"","code":"# S3 method for saem.mmkin intervals(object, level = 0.95, backtransform = TRUE, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","text":"object fitted saem.mmkin object level confidence level. Must default 0.95 available saemix object backtransform case model fitted mkin transformations, backtransform parameters one one correlation transformed backtransformed parameters exists? ... compatibility generic method","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","text":"object 'intervals.saem.mmkin' 'intervals.lme' class attribute","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/llhist.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the distribution of log likelihoods from multistart objects — llhist","title":"Plot the distribution of log likelihoods from multistart objects — llhist","text":"Produces histogram log-likelihoods. addition, likelihood original fit shown red vertical line.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/llhist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the distribution of log likelihoods from multistart objects — llhist","text":"","code":"llhist(object, breaks = \"Sturges\", lpos = \"topleft\", main = \"\", ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/llhist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the distribution of log likelihoods from multistart objects — llhist","text":"object multistart object breaks Passed hist lpos Positioning legend. main Title plot ... Passed hist","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":null,"dir":"Reference","previous_headings":"","what":"Lack-of-fit test for models fitted to data with replicates — loftest","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"generic function method currently defined mkinfit objects. fits anova model data contained object compares likelihoods using likelihood ratio test lrtest.default lmtest package.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"","code":"loftest(object, ...) # S3 method for mkinfit loftest(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"object model object defined loftest method ... used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"anova model interpreted simplest form mkinfit model, assuming constant variance means, enforcing structure means, one model parameter every mean replicate samples.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"","code":"# \\dontrun{ test_data <- subset(synthetic_data_for_UBA_2014[[12]]$data, name == \"parent\") sfo_fit <- mkinfit(\"SFO\", test_data, quiet = TRUE) plot_res(sfo_fit) # We see a clear pattern in the residuals loftest(sfo_fit) # We have a clear lack of fit #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: SFO with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 10 -40.710 #> 2 3 -63.954 -7 46.487 7.027e-08 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # # We try a different model (the one that was used to generate the data) dfop_fit <- mkinfit(\"DFOP\", test_data, quiet = TRUE) plot_res(dfop_fit) # We don't see systematic deviations, but heteroscedastic residuals # therefore we should consider adapting the error model, although we have loftest(dfop_fit) # no lack of fit #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: DFOP with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 10 -40.710 #> 2 5 -42.453 -5 3.485 0.6257 # # This is the anova model used internally for the comparison test_data_anova <- test_data test_data_anova$time <- as.factor(test_data_anova$time) anova_fit <- lm(value ~ time, data = test_data_anova) summary(anova_fit) #> #> Call: #> lm(formula = value ~ time, data = test_data_anova) #> #> Residuals: #> Min 1Q Median 3Q Max #> -6.1000 -0.5625 0.0000 0.5625 6.1000 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 103.150 2.323 44.409 7.44e-12 *** #> time1 -19.950 3.285 -6.073 0.000185 *** #> time3 -50.800 3.285 -15.465 8.65e-08 *** #> time7 -68.500 3.285 -20.854 6.28e-09 *** #> time14 -79.750 3.285 -24.278 1.63e-09 *** #> time28 -86.000 3.285 -26.181 8.35e-10 *** #> time60 -94.900 3.285 -28.891 3.48e-10 *** #> time90 -98.500 3.285 -29.986 2.49e-10 *** #> time120 -100.450 3.285 -30.580 2.09e-10 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #> #> Residual standard error: 3.285 on 9 degrees of freedom #> Multiple R-squared: 0.9953,\tAdjusted R-squared: 0.9912 #> F-statistic: 240.5 on 8 and 9 DF, p-value: 1.417e-09 #> logLik(anova_fit) # We get the same likelihood and degrees of freedom #> 'log Lik.' -40.71015 (df=10) # test_data_2 <- synthetic_data_for_UBA_2014[[12]]$data m_synth_SFO_lin <- mkinmod(parent = list(type = \"SFO\", to = \"M1\"), M1 = list(type = \"SFO\", to = \"M2\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded sfo_lin_fit <- mkinfit(m_synth_SFO_lin, test_data_2, quiet = TRUE) plot_res(sfo_lin_fit) # not a good model, we try parallel formation loftest(sfo_lin_fit) #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: m_synth_SFO_lin with error model const and fixed parameter(s) M1_0, M2_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 28 -93.606 #> 2 7 -171.927 -21 156.64 < 2.2e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # m_synth_SFO_par <- mkinmod(parent = list(type = \"SFO\", to = c(\"M1\", \"M2\")), M1 = list(type = \"SFO\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded sfo_par_fit <- mkinfit(m_synth_SFO_par, test_data_2, quiet = TRUE) plot_res(sfo_par_fit) # much better for metabolites loftest(sfo_par_fit) #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: m_synth_SFO_par with error model const and fixed parameter(s) M1_0, M2_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 28 -93.606 #> 2 7 -156.331 -21 125.45 < 2.2e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # m_synth_DFOP_par <- mkinmod(parent = list(type = \"DFOP\", to = c(\"M1\", \"M2\")), M1 = list(type = \"SFO\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded dfop_par_fit <- mkinfit(m_synth_DFOP_par, test_data_2, quiet = TRUE) plot_res(dfop_par_fit) # No visual lack of fit loftest(dfop_par_fit) # no lack of fit found by the test #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: m_synth_DFOP_par with error model const and fixed parameter(s) M1_0, M2_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 28 -93.606 #> 2 9 -102.763 -19 18.313 0.5016 # # The anova model used for comparison in the case of transformation products test_data_anova_2 <- dfop_par_fit$data test_data_anova_2$variable <- as.factor(test_data_anova_2$variable) test_data_anova_2$time <- as.factor(test_data_anova_2$time) anova_fit_2 <- lm(observed ~ time:variable - 1, data = test_data_anova_2) summary(anova_fit_2) #> #> Call: #> lm(formula = observed ~ time:variable - 1, data = test_data_anova_2) #> #> Residuals: #> Min 1Q Median 3Q Max #> -6.1000 -0.5875 0.0000 0.5875 6.1000 #> #> Coefficients: (2 not defined because of singularities) #> Estimate Std. Error t value Pr(>|t|) #> time0:variableparent 103.150 1.573 65.562 < 2e-16 *** #> time1:variableparent 83.200 1.573 52.882 < 2e-16 *** #> time3:variableparent 52.350 1.573 33.274 < 2e-16 *** #> time7:variableparent 34.650 1.573 22.024 < 2e-16 *** #> time14:variableparent 23.400 1.573 14.873 6.35e-14 *** #> time28:variableparent 17.150 1.573 10.901 5.47e-11 *** #> time60:variableparent 8.250 1.573 5.244 1.99e-05 *** #> time90:variableparent 4.650 1.573 2.956 0.006717 ** #> time120:variableparent 2.700 1.573 1.716 0.098507 . #> time0:variableM1 NA NA NA NA #> time1:variableM1 11.850 1.573 7.532 6.93e-08 *** #> time3:variableM1 22.700 1.573 14.428 1.26e-13 *** #> time7:variableM1 33.050 1.573 21.007 < 2e-16 *** #> time14:variableM1 31.250 1.573 19.863 < 2e-16 *** #> time28:variableM1 18.900 1.573 12.013 7.02e-12 *** #> time60:variableM1 7.550 1.573 4.799 6.28e-05 *** #> time90:variableM1 3.850 1.573 2.447 0.021772 * #> time120:variableM1 2.050 1.573 1.303 0.204454 #> time0:variableM2 NA NA NA NA #> time1:variableM2 6.700 1.573 4.259 0.000254 *** #> time3:variableM2 16.750 1.573 10.646 8.93e-11 *** #> time7:variableM2 25.800 1.573 16.399 6.89e-15 *** #> time14:variableM2 28.600 1.573 18.178 6.35e-16 *** #> time28:variableM2 25.400 1.573 16.144 9.85e-15 *** #> time60:variableM2 21.600 1.573 13.729 3.81e-13 *** #> time90:variableM2 17.800 1.573 11.314 2.51e-11 *** #> time120:variableM2 14.100 1.573 8.962 2.79e-09 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #> #> Residual standard error: 2.225 on 25 degrees of freedom #> Multiple R-squared: 0.9979,\tAdjusted R-squared: 0.9957 #> F-statistic: 469.2 on 25 and 25 DF, p-value: < 2.2e-16 #> # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"function returns product likelihood densities observed value, calculated part fitting procedure using dnorm, .e. assuming normal distribution, means predicted degradation model, standard deviations predicted error model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"","code":"# S3 method for mkinfit logLik(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"object object class mkinfit. ... compatibility generic method","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"object class logLik number estimated parameters (degradation model parameters plus variance model parameters) attribute.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"total number estimated parameters returned value likelihood calculated sum fitted degradation model parameters fitted error model parameters.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"","code":"# \\dontrun{ sfo_sfo <- mkinmod( parent = mkinsub(\"SFO\", to = \"m1\"), m1 = mkinsub(\"SFO\") ) #> Temporary DLL for differentials generated and loaded d_t <- subset(FOCUS_2006_D, value != 0) f_nw <- mkinfit(sfo_sfo, d_t, quiet = TRUE) # no weighting (weights are unity) f_obs <- update(f_nw, error_model = \"obs\") f_tc <- update(f_nw, error_model = \"tc\") AIC(f_nw, f_obs, f_tc) #> df AIC #> f_nw 5 204.4486 #> f_obs 6 205.8727 #> f_tc 6 141.9656 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.saem.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"logLik method for saem.mmkin objects — logLik.saem.mmkin","title":"logLik method for saem.mmkin objects — logLik.saem.mmkin","text":"logLik method saem.mmkin objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.saem.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"logLik method for saem.mmkin objects — logLik.saem.mmkin","text":"","code":"# S3 method for saem.mmkin logLik(object, ..., method = c(\"is\", \"lin\", \"gq\"))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.saem.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"logLik method for saem.mmkin objects — logLik.saem.mmkin","text":"object fitted saem.mmkin object ... Passed saemix::logLik.SaemixObject method Passed saemix::logLik.SaemixObject","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Logistic kinetics — logistic.solution","title":"Logistic kinetics — logistic.solution","text":"Function describing exponential decline defined starting value, increasing rate constant, supposedly caused microbial growth","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Logistic kinetics — logistic.solution","text":"","code":"logistic.solution(t, parent_0, kmax, k0, r)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Logistic kinetics — logistic.solution","text":"t Time. parent_0 Starting value response variable time zero. kmax Maximum rate constant. k0 Minimum rate constant effective time zero. r Growth rate increase rate constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Logistic kinetics — logistic.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Logistic kinetics — logistic.solution","text":"solution logistic model reduces SFO.solution k0 equal kmax.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Logistic kinetics — logistic.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Logistic kinetics — logistic.solution","text":"","code":"# Reproduce the plot on page 57 of FOCUS (2014) plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.2), from = 0, to = 100, ylim = c(0, 100), xlab = \"Time\", ylab = \"Residue\") plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.4), from = 0, to = 100, add = TRUE, lty = 2, col = 2) plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.8), from = 0, to = 100, add = TRUE, lty = 3, col = 3) plot(function(x) logistic.solution(x, 100, 0.08, 0.001, 0.2), from = 0, to = 100, add = TRUE, lty = 4, col = 4) plot(function(x) logistic.solution(x, 100, 0.08, 0.08, 0.2), from = 0, to = 100, add = TRUE, lty = 5, col = 5) legend(\"topright\", inset = 0.05, legend = paste0(\"k0 = \", c(0.0001, 0.0001, 0.0001, 0.001, 0.08), \", r = \", c(0.2, 0.4, 0.8, 0.2, 0.2)), lty = 1:5, col = 1:5) # Fit with synthetic data logistic <- mkinmod(parent = mkinsub(\"logistic\")) sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) parms_logistic <- c(kmax = 0.08, k0 = 0.0001, r = 0.2) d_logistic <- mkinpredict(logistic, parms_logistic, c(parent = 100), sampling_times) d_2_1 <- add_err(d_logistic, sdfunc = function(x) sigma_twocomp(x, 0.5, 0.07), n = 1, reps = 2, digits = 5, LOD = 0.1, seed = 123456)[[1]] m <- mkinfit(\"logistic\", d_2_1, quiet = TRUE) plot_sep(m) summary(m)$bpar #> Estimate se_notrans t value Pr(>t) Lower #> parent_0 1.057896e+02 1.9023449604 55.610120 3.768360e-16 1.016451e+02 #> kmax 6.398190e-02 0.0143201030 4.467978 3.841828e-04 3.929235e-02 #> k0 1.612775e-04 0.0005866813 0.274898 3.940351e-01 5.846688e-08 #> r 2.263946e-01 0.1718110664 1.317695 1.061043e-01 4.335843e-02 #> sigma 5.332935e+00 0.9145907310 5.830952 4.036926e-05 3.340213e+00 #> Upper #> parent_0 109.9341588 #> kmax 0.1041853 #> k0 0.4448749 #> r 1.1821120 #> sigma 7.3256566 endpoints(m)$distimes #> DT50 DT90 DT50_k0 DT50_kmax #> parent 36.86533 62.41511 4297.853 10.83349"},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"Compare two mkinfit models based likelihood. two fitted mkinfit objects given arguments, checked fitted data. responsibility user make sure models nested, .e. one less degrees freedom can expressed fixing parameters .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"","code":"# S3 method for mkinfit lrtest(object, object_2 = NULL, ...) # S3 method for mmkin lrtest(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"object mkinfit object, mmkin column object containing two fits data. object_2 Optionally, another mkinfit object fitted data. ... Argument mkinfit, passed update.mkinfit creating alternative fitted object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"Alternatively, argument mkinfit can given passed update.mkinfit obtain alternative model. comparison made lrtest.default method lmtest package. model higher number fitted parameters (alternative hypothesis) listed first, model lower number fitted parameters (null hypothesis).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"","code":"# \\dontrun{ test_data <- subset(synthetic_data_for_UBA_2014[[12]]$data, name == \"parent\") sfo_fit <- mkinfit(\"SFO\", test_data, quiet = TRUE) dfop_fit <- mkinfit(\"DFOP\", test_data, quiet = TRUE) lrtest(dfop_fit, sfo_fit) #> Likelihood ratio test #> #> Model 1: DFOP with error model const #> Model 2: SFO with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 5 -42.453 #> 2 3 -63.954 -2 43.002 4.594e-10 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 lrtest(sfo_fit, dfop_fit) #> Likelihood ratio test #> #> Model 1: DFOP with error model const #> Model 2: SFO with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 5 -42.453 #> 2 3 -63.954 -2 43.002 4.594e-10 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # The following two examples are commented out as they fail during # generation of the static help pages by pkgdown #lrtest(dfop_fit, error_model = \"tc\") #lrtest(dfop_fit, fixed_parms = c(k2 = 0)) # However, this equivalent syntax also works for static help pages lrtest(dfop_fit, update(dfop_fit, error_model = \"tc\")) #> Likelihood ratio test #> #> Model 1: DFOP with error model tc #> Model 2: DFOP with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 6 -34.587 #> 2 5 -42.453 -1 15.731 7.302e-05 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 lrtest(dfop_fit, update(dfop_fit, fixed_parms = c(k2 = 0))) #> Likelihood ratio test #> #> Model 1: DFOP with error model const #> Model 2: DFOP with error model const and fixed parameter(s) k2 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 5 -42.453 #> 2 4 -57.340 -1 29.776 4.851e-08 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"function calculates maximum moving window time weighted average concentrations (TWAs) kinetic models fitted mkinfit. Currently, calculations parent implemented SFO, FOMC, DFOP HS models, using analytical formulas given PEC soil section FOCUS guidance.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"","code":"max_twa_parent(fit, windows) max_twa_sfo(M0 = 1, k, t) max_twa_fomc(M0 = 1, alpha, beta, t) max_twa_dfop(M0 = 1, k1, k2, g, t) max_twa_hs(M0 = 1, k1, k2, tb, t)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"fit object class mkinfit. windows width time windows TWAs calculated. M0 initial concentration maximum time weighted average decline curve calculated. default use value 1, means relative maximum time weighted average factor (f_twa) calculated. k rate constant case SFO kinetics. t width time window. alpha Parameter FOMC model. beta Parameter FOMC model. k1 first rate constant DFOP HS kinetics. k2 second rate constant DFOP HS kinetics. g Parameter DFOP model. tb Parameter HS model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"max_twa_parent, numeric vector, named using windows argument. functions, numeric vector length one (also known 'number').","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"","code":"fit <- mkinfit(\"FOMC\", FOCUS_2006_C, quiet = TRUE) max_twa_parent(fit, c(7, 21)) #> 7 21 #> 34.71343 18.22124"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":null,"dir":"Reference","previous_headings":"","what":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"Time course 2,4,5-trichlorophenoxyacetic acid, corresponding 2,4,5-trichlorophenol 2,4,5-trichloroanisole recovered diethylether extracts.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"","code":"mccall81_245T"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"dataframe containing following variables. name name compound observed. Note T245 used acronym 2,4,5-T. T245 legitimate object name R, necessary specifying models using mkinmod. time numeric vector containing sampling times days treatment value numeric vector containing concentrations percent applied radioactivity soil factor containing name soil","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"McCall P, Vrona SA, Kelley SS (1981) Fate uniformly carbon-14 ring labelled 2,4,5-Trichlorophenoxyacetic acid 2,4-dichlorophenoxyacetic acid. J Agric Chem 29, 100-107 doi:10.1021/jf00103a026","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"","code":"SFO_SFO_SFO <- mkinmod(T245 = list(type = \"SFO\", to = \"phenol\"), phenol = list(type = \"SFO\", to = \"anisole\"), anisole = list(type = \"SFO\")) #> Temporary DLL for differentials generated and loaded # \\dontrun{ fit.1 <- mkinfit(SFO_SFO_SFO, subset(mccall81_245T, soil == \"Commerce\"), quiet = TRUE) #> Warning: Observations with value of zero were removed from the data summary(fit.1)$bpar #> Estimate se_notrans t value Pr(>t) #> T245_0 1.038550e+02 2.1847074943 47.537272 4.472189e-18 #> k_T245 4.337042e-02 0.0018983965 22.845818 2.276911e-13 #> k_phenol 4.050581e-01 0.2986993738 1.356073 9.756990e-02 #> k_anisole 6.678742e-03 0.0008021439 8.326114 2.623177e-07 #> f_T245_to_phenol 6.227599e-01 0.3985340721 1.562626 6.949414e-02 #> f_phenol_to_anisole 1.000000e+00 0.6718440131 1.488441 7.867790e-02 #> sigma 2.514628e+00 0.4907558973 5.123989 6.233159e-05 #> Lower Upper #> T245_0 99.246061490 1.084640e+02 #> k_T245 0.039631621 4.746194e-02 #> k_phenol 0.218013879 7.525762e-01 #> k_anisole 0.005370739 8.305299e-03 #> f_T245_to_phenol 0.547559080 6.924813e-01 #> f_phenol_to_anisole 0.000000000 1.000000e+00 #> sigma 1.706607296 3.322649e+00 endpoints(fit.1) #> $ff #> T245_phenol T245_sink phenol_anisole phenol_sink #> 6.227599e-01 3.772401e-01 1.000000e+00 3.072478e-10 #> #> $distimes #> DT50 DT90 #> T245 15.982025 53.09114 #> phenol 1.711229 5.68458 #> anisole 103.784093 344.76329 #> # formation fraction from phenol to anisol is practically 1. As we cannot # fix formation fractions when using the ilr transformation, we can turn of # the sink in the model generation SFO_SFO_SFO_2 <- mkinmod(T245 = list(type = \"SFO\", to = \"phenol\"), phenol = list(type = \"SFO\", to = \"anisole\", sink = FALSE), anisole = list(type = \"SFO\")) #> Temporary DLL for differentials generated and loaded fit.2 <- mkinfit(SFO_SFO_SFO_2, subset(mccall81_245T, soil == \"Commerce\"), quiet = TRUE) #> Warning: Observations with value of zero were removed from the data summary(fit.2)$bpar #> Estimate se_notrans t value Pr(>t) Lower #> T245_0 1.038550e+02 2.1623653059 48.028439 4.993108e-19 99.271020328 #> k_T245 4.337042e-02 0.0018343666 23.643268 3.573556e-14 0.039650976 #> k_phenol 4.050582e-01 0.1177237651 3.440752 1.679255e-03 0.218746589 #> k_anisole 6.678742e-03 0.0006829745 9.778903 1.872894e-08 0.005377083 #> f_T245_to_phenol 6.227599e-01 0.0342197873 18.198824 2.039411e-12 0.547975634 #> sigma 2.514628e+00 0.3790944250 6.633250 2.875782e-06 1.710983655 #> Upper #> T245_0 108.43904079 #> k_T245 0.04743877 #> k_phenol 0.75005593 #> k_anisole 0.00829550 #> f_T245_to_phenol 0.69212307 #> sigma 3.31827222 endpoints(fit.1) #> $ff #> T245_phenol T245_sink phenol_anisole phenol_sink #> 6.227599e-01 3.772401e-01 1.000000e+00 3.072478e-10 #> #> $distimes #> DT50 DT90 #> T245 15.982025 53.09114 #> phenol 1.711229 5.68458 #> anisole 103.784093 344.76329 #> plot_sep(fit.2) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","title":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","text":"Calculate mean degradation parameters mmkin row object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","text":"","code":"mean_degparms( object, random = FALSE, test_log_parms = FALSE, conf.level = 0.6, default_log_parms = NA )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","text":"object mmkin row object containing several fits model different datasets random list fixed random effects returned? test_log_parms TRUE, log parameters considered mean calculations untransformed counterparts (likely rate constants) pass t-test significant difference zero. conf.level Possibility adjust required confidence level parameter tested requested 'test_log_parms'. default_log_parms set numeric value, used default value tested log parameters failed t-test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","text":"random FALSE (default), named vector containing mean values fitted degradation model parameters. random TRUE, list fixed random effects, format required start argument nlme case single grouping variable ds.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"name methods expresses (multiple) hierarchichal (also known multilevel) multicompartment kinetic models fitted. kinetic models nonlinear, can use various nonlinear mixed-effects model fitting functions.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"","code":"mhmkin(objects, ...) # S3 method for mmkin mhmkin(objects, ...) # S3 method for list mhmkin( objects, backend = \"saemix\", algorithm = \"saem\", no_random_effect = NULL, ..., cores = if (Sys.info()[\"sysname\"] == \"Windows\") 1 else parallel::detectCores(), cluster = NULL ) # S3 method for mhmkin [(x, i, j, ..., drop = FALSE) # S3 method for mhmkin print(x, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"objects list mmkin objects containing fits degradation models data, using different error models. Alternatively, single mmkin object containing fits several degradation models data ... arguments passed nonlinear mixed-effects model fitting function. backend backend used fitting. Currently, saemix supported algorithm algorithm used fitting (currently used) no_random_effect Default NULL passed saem. character vector supplied, passed calls saem, exclude random effects matching parameters. Alternatively, list character vectors object class illparms.mhmkin can specified. dimensions return object current call , .e. number rows must match number degradation models mmkin object(s), number columns must match number error models used mmkin object(s). cores number cores used multicore processing. used cluster argument NULL. Windows machines, cores > 1 supported, need use cluster argument use multiple logical processors. Per default, cores detected parallel::detectCores() used, except Windows default 1. cluster cluster returned makeCluster used parallel execution. x mhmkin object. Row index selecting fits specific models j Column index selecting fits specific datasets drop FALSE, method always returns mhmkin object, otherwise either list fit objects single fit object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"two-dimensional array fit objects /try-errors can indexed using degradation model names first index (row index) error model names second index (column index), class attribute 'mhmkin'. object inheriting mhmkin.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"","code":"# \\dontrun{ # We start with separate evaluations of all the first six datasets with two # degradation models and two error models f_sep_const <- mmkin(c(\"SFO\", \"FOMC\"), ds_fomc[1:6], cores = 2, quiet = TRUE) f_sep_tc <- update(f_sep_const, error_model = \"tc\") # The mhmkin function sets up hierarchical degradation models aka # nonlinear mixed-effects models for all four combinations, specifying # uncorrelated random effects for all degradation parameters f_saem_1 <- mhmkin(list(f_sep_const, f_sep_tc), cores = 2) status(f_saem_1) #> error #> degradation const tc #> SFO OK OK #> FOMC OK OK #> #> OK: Fit terminated successfully # The 'illparms' function shows that in all hierarchical fits, at least # one random effect is ill-defined (the confidence interval for the # random effect expressed as standard deviation includes zero) illparms(f_saem_1) #> error #> degradation const tc #> SFO sd(parent_0) sd(parent_0) #> FOMC sd(log_beta) sd(parent_0), sd(log_beta) # Therefore we repeat the fits, excluding the ill-defined random effects f_saem_2 <- update(f_saem_1, no_random_effect = illparms(f_saem_1)) status(f_saem_2) #> error #> degradation const tc #> SFO OK OK #> FOMC OK OK #> #> OK: Fit terminated successfully illparms(f_saem_2) #> error #> degradation const tc #> SFO #> FOMC # Model comparisons show that FOMC with two-component error is preferable, # and confirms our reduction of the default parameter model anova(f_saem_1) #> Data: 95 observations of 1 variable(s) grouped in 6 datasets #> #> npar AIC BIC Lik #> SFO const 5 574.40 573.35 -282.20 #> SFO tc 6 543.72 542.47 -265.86 #> FOMC const 7 489.67 488.22 -237.84 #> FOMC tc 8 406.11 404.44 -195.05 anova(f_saem_2) #> Data: 95 observations of 1 variable(s) grouped in 6 datasets #> #> npar AIC BIC Lik #> SFO const 4 572.22 571.39 -282.11 #> SFO tc 5 541.63 540.59 -265.81 #> FOMC const 6 487.38 486.13 -237.69 #> FOMC tc 6 402.12 400.88 -195.06 # The convergence plot for the selected model looks fine saemix::plot(f_saem_2[[\"FOMC\", \"tc\"]]$so, plot.type = \"convergence\") # The plot of predictions versus data shows that we have a pretty data-rich # situation with homogeneous distribution of residuals, because we used the # same degradation model, error model and parameter distribution model that # was used in the data generation. plot(f_saem_2[[\"FOMC\", \"tc\"]]) # We can specify the same parameter model reductions manually no_ranef <- list(\"parent_0\", \"log_beta\", \"parent_0\", c(\"parent_0\", \"log_beta\")) dim(no_ranef) <- c(2, 2) f_saem_2m <- update(f_saem_1, no_random_effect = no_ranef) anova(f_saem_2m) #> Data: 95 observations of 1 variable(s) grouped in 6 datasets #> #> npar AIC BIC Lik #> SFO const 4 572.22 571.39 -282.11 #> SFO tc 5 541.63 540.59 -265.81 #> FOMC const 6 487.38 486.13 -237.69 #> FOMC tc 6 402.12 400.88 -195.06 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a mixed effects model from an mmkin row object — mixed","title":"Create a mixed effects model from an mmkin row object — mixed","text":"Create mixed effects model mmkin row object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a mixed effects model from an mmkin row object — mixed","text":"","code":"mixed(object, ...) # S3 method for mmkin mixed(object, method = c(\"none\"), ...) # S3 method for mixed.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a mixed effects model from an mmkin row object — mixed","text":"object mmkin row object ... Currently used method method used x mixed.mmkin object print digits Number digits use printing.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a mixed effects model from an mmkin row object — mixed","text":"object class 'mixed.mmkin' observed data single dataframe convenient plotting","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a mixed effects model from an mmkin row object — mixed","text":"","code":"sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) n_biphasic <- 8 err_1 = list(const = 1, prop = 0.07) DFOP_SFO <- mkinmod( parent = mkinsub(\"DFOP\", \"m1\"), m1 = mkinsub(\"SFO\"), quiet = TRUE) set.seed(123456) log_sd <- 0.3 syn_biphasic_parms <- as.matrix(data.frame( k1 = rlnorm(n_biphasic, log(0.05), log_sd), k2 = rlnorm(n_biphasic, log(0.01), log_sd), g = plogis(rnorm(n_biphasic, 0, log_sd)), f_parent_to_m1 = plogis(rnorm(n_biphasic, 0, log_sd)), k_m1 = rlnorm(n_biphasic, log(0.002), log_sd))) ds_biphasic_mean <- lapply(1:n_biphasic, function(i) { mkinpredict(DFOP_SFO, syn_biphasic_parms[i, ], c(parent = 100, m1 = 0), sampling_times) } ) set.seed(123456L) ds_biphasic <- lapply(ds_biphasic_mean, function(ds) { add_err(ds, sdfunc = function(value) sqrt(err_1$const^2 + value^2 * err_1$prop^2), n = 1, secondary = \"m1\")[[1]] }) # \\dontrun{ f_mmkin <- mmkin(list(\"DFOP-SFO\" = DFOP_SFO), ds_biphasic, error_model = \"tc\", quiet = TRUE) f_mixed <- mixed(f_mmkin) print(f_mixed) #> Kinetic model fitted by nonlinear regression to each dataset #> 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: #> 271 observations of 2 variable(s) grouped in 8 datasets #> #> <mmkin> object #> Status of individual fits: #> #> dataset #> model 1 2 3 4 5 6 7 8 #> DFOP-SFO OK OK OK OK OK C OK OK #> #> C: Optimisation did not converge: #> iteration limit reached without convergence (10) #> OK: No warnings #> #> Mean fitted parameters: #> parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2 #> 100.605312 -8.758664 -0.001917 -3.350887 -3.990017 #> g_qlogis #> -0.091167 plot(f_mixed) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a dataframe from long to wide format — mkin_long_to_wide","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"function takes dataframe long form, .e. row observed value, converts dataframe one independent variable several dependent variables columns.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"","code":"mkin_long_to_wide(long_data, time = \"time\", outtime = \"time\")"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"long_data dataframe must contain one variable called \"time\" time values specified time argument, one column called \"name\" grouping observed values, finally one column observed values called \"value\". time name time variable long input data. outtime name time variable wide output data.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"Dataframe wide format.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"","code":"mkin_long_to_wide(FOCUS_2006_D) #> time parent m1 #> 1 0 99.46 0.00 #> 2 0 102.04 0.00 #> 3 1 93.50 4.84 #> 4 1 92.50 5.64 #> 5 3 63.23 12.91 #> 6 3 68.99 12.96 #> 7 7 52.32 22.97 #> 8 7 55.13 24.47 #> 9 14 27.27 41.69 #> 10 14 26.64 33.21 #> 11 21 11.50 44.37 #> 12 21 11.64 46.44 #> 13 35 2.85 41.22 #> 14 35 2.91 37.95 #> 15 50 0.69 41.19 #> 16 50 0.63 40.01 #> 17 75 0.05 40.09 #> 18 75 0.06 33.85 #> 19 100 NA 31.04 #> 20 100 NA 33.13 #> 21 120 NA 25.15 #> 22 120 NA 33.31"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"function simply takes dataframe one independent variable several dependent variable converts long form required mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"","code":"mkin_wide_to_long(wide_data, time = \"t\")"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"wide_data dataframe must contain one variable time values specified time argument usually one column observed values. time name time variable.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"Dataframe long format needed mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"","code":"wide <- data.frame(t = c(1,2,3), x = c(1,4,7), y = c(3,4,5)) mkin_wide_to_long(wide) #> name time value #> 1 x 1 1 #> 2 x 2 4 #> 3 x 3 7 #> 4 y 1 3 #> 5 y 2 4 #> 6 y 3 5"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":null,"dir":"Reference","previous_headings":"","what":"A dataset class for mkin — mkinds","title":"A dataset class for mkin — mkinds","text":"moment dataset class hardly used mkin. example, mkinfit take mkinds datasets argument, works dataframes contained data field mkinds objects. datasets provided package come mkinds objects nevertheless.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A dataset class for mkin — mkinds","text":"","code":"# S3 method for mkinds print(x, data = FALSE, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A dataset class for mkin — mkinds","text":"x mkinds object. data data printed? ... used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"public-fields","dir":"Reference","previous_headings":"","what":"Public fields","title":"A dataset class for mkin — mkinds","text":"title full title dataset sampling_times sampling times time_unit time unit observed Names observed variables unit unit observations replicates maximum number replicates per sampling time data data frame least columns name, time value order compatible mkinfit","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"public-methods","dir":"Reference","previous_headings":"","what":"Public methods","title":"A dataset class for mkin — mkinds","text":"mkinds$new() mkinds$clone()","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"method-new-","dir":"Reference","previous_headings":"","what":"Method new()","title":"A dataset class for mkin — mkinds","text":"Create new mkinds object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A dataset class for mkin — mkinds","text":"","code":"mkinds$new(title = \"\", data, time_unit = NA, unit = NA)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"arguments-1","dir":"Reference","previous_headings":"","what":"Arguments","title":"A dataset class for mkin — mkinds","text":"title dataset title data data time_unit time unit unit unit observations","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"method-clone-","dir":"Reference","previous_headings":"","what":"Method clone()","title":"A dataset class for mkin — mkinds","text":"objects class cloneable method.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"usage-1","dir":"Reference","previous_headings":"","what":"Usage","title":"A dataset class for mkin — mkinds","text":"","code":"mkinds$clone(deep = FALSE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"arguments-2","dir":"Reference","previous_headings":"","what":"Arguments","title":"A dataset class for mkin — mkinds","text":"deep Whether make deep clone.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"A dataset class for mkin — mkinds","text":"","code":"mds <- mkinds$new(\"FOCUS A\", FOCUS_2006_A) print(mds) #> <mkinds> with $title: FOCUS A #> Observed compounds $observed: parent #> Sampling times $sampling_times: #> 0, 3, 7, 14, 30, 62, 90, 118 #> With a maximum of 1 replicates"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":null,"dir":"Reference","previous_headings":"","what":"A class for dataset groups for mkin — mkindsg","title":"A class for dataset groups for mkin — mkindsg","text":"container working datasets share least one compound, combined evaluations desirable. Time normalisation factors initialised value 1 dataset data supplied.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A class for dataset groups for mkin — mkindsg","text":"","code":"# S3 method for mkindsg print(x, data = FALSE, verbose = data, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A class for dataset groups for mkin — mkindsg","text":"x mkindsg object. data mkinds objects printed data? verbose mkinds objects printed? ... used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"public-fields","dir":"Reference","previous_headings":"","what":"Public fields","title":"A class for dataset groups for mkin — mkindsg","text":"title title dataset group ds list mkinds objects observed_n Occurrence counts compounds datasets f_time_norm Time normalisation factors meta data frame row dataset, containing additional information form categorical data (factors) numerical data (e.g. temperature, moisture, covariates like soil pH).","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"public-methods","dir":"Reference","previous_headings":"","what":"Public methods","title":"A class for dataset groups for mkin — mkindsg","text":"mkindsg$new() mkindsg$clone()","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"method-new-","dir":"Reference","previous_headings":"","what":"Method new()","title":"A class for dataset groups for mkin — mkindsg","text":"Create new mkindsg object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A class for dataset groups for mkin — mkindsg","text":"","code":"mkindsg$new(title = \"\", ds, f_time_norm = rep(1, length(ds)), meta)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"arguments-1","dir":"Reference","previous_headings":"","what":"Arguments","title":"A class for dataset groups for mkin — mkindsg","text":"title title ds list mkinds objects f_time_norm Time normalisation factors meta meta data","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"method-clone-","dir":"Reference","previous_headings":"","what":"Method clone()","title":"A class for dataset groups for mkin — mkindsg","text":"objects class cloneable method.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"usage-1","dir":"Reference","previous_headings":"","what":"Usage","title":"A class for dataset groups for mkin — mkindsg","text":"","code":"mkindsg$clone(deep = FALSE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"arguments-2","dir":"Reference","previous_headings":"","what":"Arguments","title":"A class for dataset groups for mkin — mkindsg","text":"deep Whether make deep clone.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"A class for dataset groups for mkin — mkindsg","text":"","code":"mdsg <- mkindsg$new(\"Experimental X\", experimental_data_for_UBA_2019[6:10]) print(mdsg) #> <mkindsg> holding 5 mkinds objects #> Title $title: Experimental X #> Occurrence of observed compounds $observed_n: #> parent A1 #> 5 5 print(mdsg, verbose = TRUE) #> <mkindsg> holding 5 mkinds objects #> Title $title: Experimental X #> Occurrence of observed compounds $observed_n: #> parent A1 #> 5 5 #> #> Datasets $ds: #> <mkinds> with $title: Soil 6 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 3, 6, 10, 20, 34, 55, 90, 112, 132 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> #> <mkinds> with $title: Soil 7 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 3, 7, 14, 30, 60, 90, 120, 180 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> #> <mkinds> with $title: Soil 8 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 1, 3, 8, 14, 27, 48, 70 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> #> <mkinds> with $title: Soil 9 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 1, 3, 8, 14, 27, 48, 70, 91, 120 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> #> <mkinds> with $title: Soil 10 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 8, 14, 21, 41, 63, 91, 120 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR print(mdsg, verbose = TRUE, data = TRUE) #> <mkindsg> holding 5 mkinds objects #> Title $title: Experimental X #> Occurrence of observed compounds $observed_n: #> parent A1 #> 5 5 #> #> Datasets $ds: #> <mkinds> with $title: Soil 6 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 3, 6, 10, 20, 34, 55, 90, 112, 132 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 97.2 NA #> 2 0 96.4 NA #> 3 3 71.1 4.3 #> 4 3 69.2 4.6 #> 5 6 58.1 7.0 #> 6 6 56.6 7.2 #> 7 10 44.4 8.2 #> 8 10 43.4 8.0 #> 9 20 33.3 11.0 #> 10 20 29.2 13.7 #> 11 34 17.6 11.5 #> 12 34 18.0 12.7 #> 13 55 10.5 14.9 #> 14 55 9.3 14.5 #> 15 90 4.5 12.1 #> 16 90 4.7 12.3 #> 17 112 3.0 9.9 #> 18 112 3.4 10.2 #> 19 132 2.3 8.8 #> 20 132 2.7 7.8 #> #> <mkinds> with $title: Soil 7 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 3, 7, 14, 30, 60, 90, 120, 180 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 93.6 NA #> 2 0 92.3 NA #> 3 3 87.0 3.9 #> 4 3 82.2 3.1 #> 5 7 74.0 6.9 #> 6 7 73.9 6.6 #> 7 14 64.2 10.4 #> 8 14 69.5 8.3 #> 9 30 54.0 14.4 #> 10 30 54.6 13.7 #> 11 60 41.1 22.1 #> 12 60 38.4 22.3 #> 13 90 32.5 27.5 #> 14 90 35.5 25.4 #> 15 120 28.1 28.0 #> 16 120 29.0 26.6 #> 17 180 26.5 25.8 #> 18 180 27.6 25.3 #> #> <mkinds> with $title: Soil 8 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 1, 3, 8, 14, 27, 48, 70 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 91.9 NA #> 2 0 90.8 NA #> 3 1 64.9 9.6 #> 4 1 66.2 7.7 #> 5 3 43.5 15.0 #> 6 3 44.1 15.1 #> 7 8 18.3 21.2 #> 8 8 18.1 21.1 #> 9 14 10.2 19.7 #> 10 14 10.8 18.9 #> 11 27 4.9 17.5 #> 12 27 3.3 15.9 #> 13 48 1.6 9.5 #> 14 48 1.5 9.8 #> 15 70 1.1 6.2 #> 16 70 0.9 6.1 #> #> <mkinds> with $title: Soil 9 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 1, 3, 8, 14, 27, 48, 70, 91, 120 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 99.8 NA #> 2 0 98.3 NA #> 3 1 77.1 4.2 #> 4 1 77.2 3.9 #> 5 3 59.0 7.4 #> 6 3 58.1 7.9 #> 7 8 27.4 14.5 #> 8 8 29.2 13.7 #> 9 14 19.1 14.2 #> 10 14 29.6 12.2 #> 11 27 10.1 13.7 #> 12 27 18.2 13.2 #> 13 48 4.5 13.6 #> 14 48 9.1 15.4 #> 15 70 2.3 10.4 #> 16 70 2.9 11.6 #> 17 91 2.0 10.0 #> 18 91 1.8 9.5 #> 19 120 2.0 9.1 #> 20 120 2.2 9.0 #> #> <mkinds> with $title: Soil 10 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 8, 14, 21, 41, 63, 91, 120 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 96.1 NA #> 2 0 94.3 NA #> 3 8 73.9 3.3 #> 4 8 73.9 3.4 #> 5 14 69.4 3.9 #> 6 14 73.1 2.9 #> 7 21 65.6 6.4 #> 8 21 65.3 7.2 #> 9 41 55.9 9.1 #> 10 41 54.4 8.5 #> 11 63 47.0 11.7 #> 12 63 49.3 12.0 #> 13 91 44.7 13.3 #> 14 91 46.7 13.2 #> 15 120 42.1 14.3 #> 16 120 41.3 12.1"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"function finds smallest relative error still resulting passing chi-squared test defined FOCUS kinetics report 2006.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"","code":"mkinerrmin(fit, alpha = 0.05)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"fit object class mkinfit. alpha confidence level chosen chi-squared test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"dataframe following components: err.min relative error, expressed fraction. n.optim number optimised parameters attributed data series. df number remaining degrees freedom chi2 error level calculations. Note mean values used chi2 statistic therefore every time point observed values series counts one time. dataframe one row total dataset one row observed state variable model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"function used internally summary.mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"","code":"SFO_SFO = mkinmod(parent = mkinsub(\"SFO\", to = \"m1\"), m1 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded fit_FOCUS_D = mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data round(mkinerrmin(fit_FOCUS_D), 4) #> err.min n.optim df #> All data 0.0640 4 15 #> parent 0.0646 2 7 #> m1 0.0469 2 8 # \\dontrun{ fit_FOCUS_E = mkinfit(SFO_SFO, FOCUS_2006_E, quiet = TRUE) round(mkinerrmin(fit_FOCUS_E), 4) #> err.min n.optim df #> All data 0.1544 4 13 #> parent 0.1659 2 7 #> m1 0.1095 2 6 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"function plots squared residuals specified subset observed variables mkinfit object. addition, one dashed line(s) show fitted error model. combined plot fitted model error model plot can obtained plot.mkinfit using argument show_errplot = TRUE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"","code":"mkinerrplot( object, obs_vars = names(object$mkinmod$map), xlim = c(0, 1.1 * max(object$data$predicted)), xlab = \"Predicted\", ylab = \"Squared residual\", maxy = \"auto\", legend = TRUE, lpos = \"topright\", col_obs = \"auto\", pch_obs = \"auto\", frame = TRUE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"object fit represented mkinfit object. obs_vars character vector names observed variables residuals plotted. Defaults observed variables model xlim plot range x direction. xlab Label x axis. ylab Label y axis. maxy Maximum value residuals. used scaling y axis defaults \"auto\". legend legend plotted? lpos legend placed? Default \"topright\". passed legend. col_obs Colors observed variables. pch_obs Symbols used observed variables. frame frame drawn around plots? ... arguments passed plot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"Nothing returned function, called side effect, namely produce plot.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"","code":"# \\dontrun{ model <- mkinmod(parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded fit <- mkinfit(model, FOCUS_2006_D, error_model = \"tc\", quiet = TRUE) #> Warning: Observations with value of zero were removed from the data mkinerrplot(fit) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit a kinetic model to data with one or more state variables — mkinfit","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"function maximises likelihood observed data using Port algorithm stats::nlminb(), specified initial fixed parameters starting values. step optimisation, kinetic model solved using function mkinpredict(), except analytical solution implemented, case model solved using degradation function mkinmod object. parameters selected error model fitted simultaneously degradation model parameters, arguments likelihood function.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"","code":"mkinfit( mkinmod, observed, parms.ini = \"auto\", state.ini = \"auto\", err.ini = \"auto\", fixed_parms = NULL, fixed_initials = names(mkinmod$diffs)[-1], from_max_mean = FALSE, solution_type = c(\"auto\", \"analytical\", \"eigen\", \"deSolve\"), method.ode = \"lsoda\", use_compiled = \"auto\", control = list(eval.max = 300, iter.max = 200), transform_rates = TRUE, transform_fractions = TRUE, quiet = FALSE, atol = 1e-08, rtol = 1e-10, error_model = c(\"const\", \"obs\", \"tc\"), error_model_algorithm = c(\"auto\", \"d_3\", \"direct\", \"twostep\", \"threestep\", \"fourstep\", \"IRLS\", \"OLS\"), reweight.tol = 1e-08, reweight.max.iter = 10, trace_parms = FALSE, test_residuals = FALSE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"mkinmod list class mkinmod, containing kinetic model fitted data, one shorthand names (\"SFO\", \"FOMC\", \"DFOP\", \"HS\", \"SFORB\", \"IORE\"). shorthand name given, parent degradation model generated variable highest value observed. observed dataframe observed data. first column called \"name\" must contain name observed variable data point. second column must contain times observation, named \"time\". third column must named \"value\" contain observed values. Zero values \"value\" column removed, warning, order avoid problems fitting two-component error model. expected problem, general, values zero observed degradation data, lower limit detection. parms.ini named vector initial values parameters, including parameters optimised potentially also fixed parameters indicated fixed_parms. set \"auto\", initial values rate constants set default values. Using parameter names model gives error. possible specify subset parameters model needs. can use parameter lists \"bparms.ode\" previously fitted model, contains differential equation parameters model. works nicely models nested. example given . state.ini named vector initial values state variables model. case observed variables represented one model variable, names differ names observed variables (see map component mkinmod). default set initial value first model variable mean time zero values variable maximum observed value, others 0. variable time zero observations, initial value set 100. err.ini named vector initial values error model parameters optimised. set \"auto\", initial values set default values. Otherwise, inital values error model parameters must given. fixed_parms names parameters optimised rather kept values specified parms.ini. Alternatively, named numeric vector parameters fixed, regardless values parms.ini. fixed_initials names model variables initial state time 0 excluded optimisation. Defaults state variables except first one. from_max_mean set TRUE, model one observed variable, data time maximum observed value (averaging sampling time) discarded, time subtracted remaining time values, time maximum observed mean value new time zero. solution_type set \"eigen\", solution system differential equations based spectral decomposition coefficient matrix cases possible. set \"deSolve\", numerical ode solver package deSolve used. set \"analytical\", analytical solution model used. implemented relatively simple degradation models. default \"auto\", uses \"analytical\" possible, otherwise \"deSolve\" compiler present, \"eigen\" compiler present model can expressed using eigenvalues eigenvectors. method.ode solution method passed via mkinpredict() deSolve::ode() case solution type \"deSolve\". default \"lsoda\" performant, sometimes fails converge. use_compiled set FALSE, compiled version mkinmod model used calls mkinpredict() even compiled version present. control list control arguments passed stats::nlminb(). transform_rates Boolean specifying kinetic rate constants transformed model specification used fitting better compliance assumption normal distribution estimator. TRUE, also alpha beta parameters FOMC model log-transformed, well k1 k2 rate constants DFOP HS models break point tb HS model. FALSE, zero used lower bound rates optimisation. transform_fractions Boolean specifying formation fractions transformed model specification used fitting better compliance assumption normal distribution estimator. default (TRUE) transformations. TRUE, g parameter DFOP model also transformed. Transformations described transform_odeparms. quiet Suppress printing current value negative log-likelihood improvement? atol Absolute error tolerance, passed deSolve::ode(). Default 1e-8, lower default deSolve::lsoda() function used per default. rtol Absolute error tolerance, passed deSolve::ode(). Default 1e-10, much lower deSolve::lsoda(). error_model error model \"const\", constant standard deviation assumed. error model \"obs\", observed variable assumed variance. error model \"tc\" (two-component error model), two component error model similar one described Rocke Lorenzato (1995) used setting likelihood function. Note model deviates model Rocke Lorenzato, model implies errors follow lognormal distribution large values, normal distribution assumed method. error_model_algorithm \"auto\", selected algorithm depends error model. error model \"const\", unweighted nonlinear least squares fitting (\"OLS\") selected. error model \"obs\", \"tc\", \"d_3\" algorithm selected. algorithm \"d_3\" directly minimize negative log-likelihood independently also use three step algorithm described . fit higher likelihood returned. algorithm \"direct\" directly minimize negative log-likelihood. algorithm \"twostep\" minimize negative log-likelihood initial unweighted least squares optimisation step. algorithm \"threestep\" starts unweighted least squares, optimizes error model using degradation model parameters found, minimizes negative log-likelihood free degradation error model parameters. algorithm \"fourstep\" starts unweighted least squares, optimizes error model using degradation model parameters found, optimizes degradation model fixed error model parameters, finally minimizes negative log-likelihood free degradation error model parameters. algorithm \"IRLS\" (Iteratively Reweighted Least Squares) starts unweighted least squares, iterates optimization error model parameters subsequent optimization degradation model using error model parameters, error model parameters converge. reweight.tol Tolerance convergence criterion calculated error model parameters IRLS fits. reweight.max.iter Maximum number iterations IRLS fits. trace_parms trace parameter values listed? test_residuals residuals tested normal distribution? ... arguments passed deSolve::ode().","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"list \"mkinfit\" class attribute.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"Per default, parameters kinetic models internally transformed order better satisfy assumption normal distribution estimators.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"using \"IORE\" submodel metabolites, fitting \"transform_rates = TRUE\" (default) often leads failures numerical ODE solver. situation may help switch internal rate transformation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"Rocke DM Lorenzato S (1995) two-component model measurement error analytical chemistry. Technometrics 37(2), 176-184. Ranke J Meinecke S (2019) Error Models Kinetic Evaluation Chemical Degradation Data. Environments 6(12) 124 doi:10.3390/environments6120124 .","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"","code":"# Use shorthand notation for parent only degradation fit <- mkinfit(\"FOMC\", FOCUS_2006_C, quiet = TRUE) summary(fit) #> mkin version used for fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:15:31 2023 #> Date of summary: Thu Nov 16 04:15:31 2023 #> #> Equations: #> d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent #> #> Model predictions using solution type analytical #> #> Fitted using 222 model solutions performed in 0.014 s #> #> Error model: Constant variance #> #> Error model algorithm: OLS #> #> Starting values for parameters to be optimised: #> value type #> parent_0 85.1 state #> alpha 1.0 deparm #> beta 10.0 deparm #> #> Starting values for the transformed parameters actually optimised: #> value lower upper #> parent_0 85.100000 -Inf Inf #> log_alpha 0.000000 -Inf Inf #> log_beta 2.302585 -Inf Inf #> #> Fixed parameter values: #> None #> #> Results: #> #> AIC BIC logLik #> 44.68652 45.47542 -18.34326 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> Estimate Std. Error Lower Upper #> parent_0 85.87000 1.8070 81.23000 90.5200 #> log_alpha 0.05192 0.1353 -0.29580 0.3996 #> log_beta 0.65100 0.2287 0.06315 1.2390 #> sigma 1.85700 0.4378 0.73200 2.9830 #> #> Parameter correlation: #> parent_0 log_alpha log_beta sigma #> parent_0 1.000e+00 -1.565e-01 -3.142e-01 4.681e-08 #> log_alpha -1.565e-01 1.000e+00 9.564e-01 1.013e-07 #> log_beta -3.142e-01 9.564e-01 1.000e+00 8.637e-08 #> sigma 4.681e-08 1.013e-07 8.637e-08 1.000e+00 #> #> 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.870 47.530 3.893e-08 81.2300 90.520 #> alpha 1.053 7.393 3.562e-04 0.7439 1.491 #> beta 1.917 4.373 3.601e-03 1.0650 3.451 #> sigma 1.857 4.243 4.074e-03 0.7320 2.983 #> #> FOCUS Chi2 error levels in percent: #> err.min n.optim df #> All data 6.657 3 6 #> parent 6.657 3 6 #> #> Estimated disappearance times: #> DT50 DT90 DT50back #> parent 1.785 15.15 4.56 #> #> Data: #> time variable observed predicted residual #> 0 parent 85.1 85.875 -0.7749 #> 1 parent 57.9 55.191 2.7091 #> 3 parent 29.9 31.845 -1.9452 #> 7 parent 14.6 17.012 -2.4124 #> 14 parent 9.7 9.241 0.4590 #> 28 parent 6.6 4.754 1.8460 #> 63 parent 4.0 2.102 1.8977 #> 91 parent 3.9 1.441 2.4590 #> 119 parent 0.6 1.092 -0.4919 # One parent compound, one metabolite, both single first order. # We remove zero values from FOCUS dataset D in order to avoid warnings FOCUS_D <- subset(FOCUS_2006_D, value != 0) # Use mkinsub for convenience in model formulation. Pathway to sink included per default. SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded # Fit the model quietly to the FOCUS example dataset D using defaults fit <- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE) plot_sep(fit) # As lower parent values appear to have lower variance, we try an alternative error model fit.tc <- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\") # This avoids the warning, and the likelihood ratio test confirms it is preferable lrtest(fit.tc, fit) #> Likelihood ratio test #> #> Model 1: SFO_SFO with error model tc and fixed parameter(s) m1_0 #> Model 2: SFO_SFO with error model const and fixed parameter(s) m1_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 6 -64.983 #> 2 5 -97.224 -1 64.483 9.737e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # We can also allow for different variances of parent and metabolite as error model fit.obs <- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"obs\") # The two-component error model has significantly higher likelihood lrtest(fit.obs, fit.tc) #> Likelihood ratio test #> #> Model 1: SFO_SFO with error model tc and fixed parameter(s) m1_0 #> Model 2: SFO_SFO with error model obs and fixed parameter(s) m1_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 6 -64.983 #> 2 6 -96.936 0 63.907 < 2.2e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 parms(fit.tc) #> parent_0 k_parent k_m1 f_parent_to_m1 sigma_low #> 1.007343e+02 1.005562e-01 5.166712e-03 5.083933e-01 3.049883e-03 #> rsd_high #> 7.928118e-02 endpoints(fit.tc) #> $ff #> parent_m1 parent_sink #> 0.5083933 0.4916067 #> #> $distimes #> DT50 DT90 #> parent 6.89313 22.89848 #> m1 134.15634 445.65771 #> # We can show a quick (only one replication) benchmark for this case, as we # have several alternative solution methods for the model. We skip # uncompiled deSolve, as it is so slow. More benchmarks are found in the # benchmark vignette # \\dontrun{ if(require(rbenchmark)) { benchmark(replications = 1, order = \"relative\", columns = c(\"test\", \"relative\", \"elapsed\"), deSolve_compiled = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\", solution_type = \"deSolve\", use_compiled = TRUE), eigen = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\", solution_type = \"eigen\"), analytical = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\", solution_type = \"analytical\")) } #> test relative elapsed #> 3 analytical 1.000 0.223 #> 2 eigen 1.973 0.440 #> 1 deSolve_compiled 2.072 0.462 # } # Use stepwise fitting, using optimised parameters from parent only fit, FOMC-SFO # \\dontrun{ FOMC_SFO <- mkinmod( parent = mkinsub(\"FOMC\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded fit.FOMC_SFO <- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE) # Again, we get a warning and try a more sophisticated error model fit.FOMC_SFO.tc <- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\") # This model has a higher likelihood, but not significantly so lrtest(fit.tc, fit.FOMC_SFO.tc) #> Likelihood ratio test #> #> Model 1: FOMC_SFO with error model tc and fixed parameter(s) m1_0 #> Model 2: SFO_SFO with error model tc and fixed parameter(s) m1_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 7 -64.829 #> 2 6 -64.983 -1 0.3075 0.5792 # Also, the missing standard error for log_beta and the t-tests for alpha # and beta indicate overparameterisation summary(fit.FOMC_SFO.tc, data = FALSE) #> Warning: NaNs produced #> Warning: NaNs produced #> Warning: diag(.) had 0 or NA entries; non-finite result is doubtful #> mkin version used for fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:15:35 2023 #> Date of summary: Thu Nov 16 04:15:35 2023 #> #> Equations: #> d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent #> d_m1/dt = + f_parent_to_m1 * (alpha/beta) * 1/((time/beta) + 1) * #> parent - k_m1 * m1 #> #> Model predictions using solution type deSolve #> #> Fitted using 4062 model solutions performed in 0.768 s #> #> Error model: Two-component variance function #> #> Error model algorithm: d_3 #> Direct fitting and three-step fitting yield approximately the same likelihood #> #> Starting values for parameters to be optimised: #> value type #> parent_0 100.75 state #> alpha 1.00 deparm #> beta 10.00 deparm #> k_m1 0.10 deparm #> f_parent_to_m1 0.50 deparm #> sigma_low 0.10 error #> rsd_high 0.10 error #> #> Starting values for the transformed parameters actually optimised: #> value lower upper #> parent_0 100.750000 -Inf Inf #> log_k_m1 -2.302585 -Inf Inf #> f_parent_qlogis 0.000000 -Inf Inf #> log_alpha 0.000000 -Inf Inf #> log_beta 2.302585 -Inf Inf #> sigma_low 0.100000 0 Inf #> rsd_high 0.100000 0 Inf #> #> Fixed parameter values: #> value type #> m1_0 0 state #> #> Results: #> #> AIC BIC logLik #> 143.658 155.1211 -64.82902 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> Estimate Std. Error Lower Upper #> parent_0 101.600000 2.6400000 96.240000 107.000000 #> log_k_m1 -5.284000 0.0929100 -5.474000 -5.095000 #> f_parent_qlogis 0.001426 0.0766900 -0.155000 0.157800 #> log_alpha 5.522000 0.0077320 5.506000 5.538000 #> log_beta 7.806000 NaN NaN NaN #> sigma_low 0.002488 0.0002431 0.001992 0.002984 #> rsd_high 0.079210 0.0093280 0.060180 0.098230 #> #> Parameter correlation: #> parent_0 log_k_m1 f_parent_qlogis log_alpha log_beta #> parent_0 1.000000 -0.095161 -0.76675 0.70542 NaN #> log_k_m1 -0.095161 1.000000 0.51429 -0.14382 NaN #> f_parent_qlogis -0.766750 0.514286 1.00000 -0.61393 NaN #> log_alpha 0.705417 -0.143821 -0.61393 1.00000 NaN #> log_beta NaN NaN NaN NaN 1 #> sigma_low 0.016086 0.001583 0.01547 5.87036 NaN #> rsd_high 0.006618 -0.011695 -0.05356 0.04848 NaN #> sigma_low rsd_high #> parent_0 0.016086 0.006618 #> log_k_m1 0.001583 -0.011695 #> f_parent_qlogis 0.015466 -0.053560 #> log_alpha 5.870361 0.048483 #> log_beta NaN NaN #> sigma_low 1.000000 -0.652545 #> rsd_high -0.652545 1.000000 #> #> 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 1.016e+02 32.7800 6.310e-26 9.624e+01 1.070e+02 #> k_m1 5.072e-03 10.1200 1.216e-11 4.196e-03 6.130e-03 #> f_parent_to_m1 5.004e-01 20.8300 4.316e-20 4.613e-01 5.394e-01 #> alpha 2.502e+02 0.5624 2.889e-01 2.463e+02 2.542e+02 #> beta 2.455e+03 0.5549 2.915e-01 NA NA #> sigma_low 2.488e-03 0.4843 3.158e-01 1.992e-03 2.984e-03 #> rsd_high 7.921e-02 8.4300 8.001e-10 6.018e-02 9.823e-02 #> #> FOCUS Chi2 error levels in percent: #> err.min n.optim df #> All data 6.781 5 14 #> parent 7.141 3 6 #> m1 4.640 2 8 #> #> Resulting formation fractions: #> ff #> parent_m1 0.5004 #> parent_sink 0.4996 #> #> Estimated disappearance times: #> DT50 DT90 DT50back #> parent 6.812 22.7 6.834 #> m1 136.661 454.0 NA # We can easily use starting parameters from the parent only fit (only for illustration) fit.FOMC = mkinfit(\"FOMC\", FOCUS_2006_D, quiet = TRUE, error_model = \"tc\") fit.FOMC_SFO <- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE, parms.ini = fit.FOMC$bparms.ode, error_model = \"tc\") # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to set up a kinetic model with one or more state variables — mkinmod","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"function usually called using call mkinsub() observed variable, specifying corresponding submodel well outgoing pathways (see examples). Print mkinmod objects way user finds way get components.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"","code":"mkinmod( ..., use_of_ff = \"max\", name = NULL, speclist = NULL, quiet = FALSE, verbose = FALSE, dll_dir = NULL, unload = FALSE, overwrite = FALSE ) # S3 method for mkinmod print(x, ...) mkinsub(submodel, to = NULL, sink = TRUE, full_name = NA)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"... observed variable, list obtained mkinsub() specified argument (see examples). Currently, single first order kinetics \"SFO\", indeterminate order rate equation kinetics \"IORE\", single first order reversible binding \"SFORB\" implemented variables, \"FOMC\", \"DFOP\", \"HS\" \"logistic\" can additionally chosen first variable assumed source compartment. Additionally, mkinsub() argument , specifying names variables transfer assumed model. argument use_of_ff set \"min\" model compartment \"SFO\" \"SFORB\", additional mkinsub() argument can sink = FALSE, effectively fixing flux sink zero. print.mkinmod, argument currently used. use_of_ff Specification use formation fractions model equations , applicable, coefficient matrix. \"max\", formation fractions always used (default). \"min\", minimum use formation fractions made, .e. first-order pathway metabolite rate constant. name name model. valid R object name. speclist specification observed variables submodel types pathways can given single list using argument. Default NULL. quiet messages suppressed? verbose TRUE, passed inline::cfunction() applicable give detailed information C function built. dll_dir Directory DLL object, generated internally inline::cfunction(), saved. DLL stored permanent location use future sessions, 'dll_dir' 'name' specified. helpful fit objects cached e.g. knitr, cache remains functional across sessions DLL stored user defined location. unload DLL target location 'dll_dir' already loaded, unloaded first? overwrite file exists target DLL location 'dll_dir', overwritten? x mkinmod object. submodel Character vector length one specify submodel type. See mkinmod list allowed submodel names. Vector names state variable transformation shall included model. sink pathway sink included model addition pathways state variables? full_name optional name used e.g. plotting fits performed model. can use non-ASCII characters , R code portable, .e. may produce unintended plot results operating systems system configurations.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"list class mkinmod use mkinfit(), containing, among others, diffs vector string representations differential equations, one modelling variable. map list containing named character vectors observed variable, specifying modelling variables represented. use_of_ff content use_of_ff passed list component. deg_func generated, function containing solution degradation model. coefmat coefficient matrix, system differential equations can represented one. cf generated, compiled function calculating derivatives returned cfunction. list use mkinmod.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"definition model types parameters, equations given FOCUS NAFTA guidance documents used. kinetic models one observed variable, symbolic solution system differential equations included resulting mkinmod object cases, speeding solution. C compiler found pkgbuild::has_compiler() one observed variable specification, C code generated evaluating differential equations, compiled using inline::cfunction() added resulting mkinmod object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"IORE submodel well tested metabolites. using model metabolites, may want read note help page mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics NAFTA Technical Working Group Pesticides (dated) Guidance Evaluating Calculating Degradation Kinetics Environmental Media","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"","code":"# Specify the SFO model (this is not needed any more, as we can now mkinfit(\"SFO\", ...) SFO <- mkinmod(parent = mkinsub(\"SFO\")) # One parent compound, one metabolite, both single first order SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded print(SFO_SFO) #> <mkinmod> model generated with #> Use of formation fractions $use_of_ff: max #> Specification $spec: #> $parent #> $type: SFO; $to: m1; $sink: TRUE #> $m1 #> $type: SFO; $sink: TRUE #> Coefficient matrix $coefmat available #> Compiled model $cf available #> Differential equations: #> d_parent/dt = - k_parent * parent #> d_m1/dt = + f_parent_to_m1 * k_parent * parent - k_m1 * m1 # \\dontrun{ fit_sfo_sfo <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, solution_type = \"deSolve\") #> Warning: Observations with value of zero were removed from the data # Now supplying compound names used for plotting, and write to user defined location # We need to choose a path outside the session tempdir because this gets removed DLL_dir <- \"~/.local/share/mkin\" if (!dir.exists(DLL_dir)) dir.create(DLL_dir) SFO_SFO.2 <- mkinmod( parent = mkinsub(\"SFO\", \"m1\", full_name = \"Test compound\"), m1 = mkinsub(\"SFO\", full_name = \"Metabolite M1\"), name = \"SFO_SFO\", dll_dir = DLL_dir, unload = TRUE, overwrite = TRUE) #> Temporary DLL for differentials generated and loaded #> Copied DLL from /tmp/Rtmpjn19MY/filee5f2f55ca8372.so to /home/jranke/.local/share/mkin/SFO_SFO.so # Now we can save the model and restore it in a new session saveRDS(SFO_SFO.2, file = \"~/SFO_SFO.rds\") # Terminate the R session here if you would like to check, and then do library(mkin) SFO_SFO.3 <- readRDS(\"~/SFO_SFO.rds\") fit_sfo_sfo <- mkinfit(SFO_SFO.3, FOCUS_2006_D, quiet = TRUE, solution_type = \"deSolve\") #> Warning: Observations with value of zero were removed from the data # Show details of creating the C function SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\"), verbose = TRUE) #> Program source: #> 1: #include <R.h> #> 2: #> 3: #> 4: static double parms [3]; #> 5: #define k_parent parms[0] #> 6: #define f_parent_to_m1 parms[1] #> 7: #define k_m1 parms[2] #> 8: #> 9: void initpar(void (* odeparms)(int *, double *)) { #> 10: int N = 3; #> 11: odeparms(&N, parms); #> 12: } #> 13: #> 14: #> 15: void diffs ( int * n, double * t, double * y, double * f, double * rpar, int * ipar ) { #> 16: #> 17: f[0] = - k_parent * y[0]; #> 18: f[1] = + f_parent_to_m1 * k_parent * y[0] - k_m1 * y[1]; #> 19: } #> Temporary DLL for differentials generated and loaded # The symbolic solution which is available in this case is not # made for human reading but for speed of computation SFO_SFO$deg_func #> function (observed, odeini, odeparms) #> { #> predicted <- numeric(0) #> with(as.list(odeparms), { #> t <- observed[observed$name == \"parent\", \"time\"] #> predicted <<- c(predicted, SFO.solution(t, odeini[\"parent\"], #> k_parent)) #> t <- observed[observed$name == \"m1\", \"time\"] #> predicted <<- c(predicted, (((k_m1 - k_parent) * odeini[\"m1\"] - #> f_parent_to_m1 * k_parent * odeini[\"parent\"]) * exp(-k_m1 * #> t) + f_parent_to_m1 * k_parent * odeini[\"parent\"] * #> exp(-k_parent * t))/(k_m1 - k_parent)) #> }) #> return(predicted) #> } #> <environment: 0x555555f44b28> # If we have several parallel metabolites # (compare tests/testthat/test_synthetic_data_for_UBA_2014.R) m_synth_DFOP_par <- mkinmod( parent = mkinsub(\"DFOP\", c(\"M1\", \"M2\")), M1 = mkinsub(\"SFO\"), M2 = mkinsub(\"SFO\"), quiet = TRUE) fit_DFOP_par_c <- mkinfit(m_synth_DFOP_par, synthetic_data_for_UBA_2014[[12]]$data, quiet = TRUE) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"function plots confidence intervals parameters fitted using mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"","code":"mkinparplot(object)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"object fit represented mkinfit object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"Nothing returned function, called side effect, namely produce plot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"","code":"# \\dontrun{ model <- mkinmod( T245 = mkinsub(\"SFO\", to = c(\"phenol\"), sink = FALSE), phenol = mkinsub(\"SFO\", to = c(\"anisole\")), anisole = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded fit <- mkinfit(model, subset(mccall81_245T, soil == \"Commerce\"), quiet = TRUE) #> Warning: Observations with value of zero were removed from the data mkinparplot(fit) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"Deprecated function. now calls plot method plot.mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"","code":"mkinplot(fit, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"fit object class mkinfit. ... arguments passed plot.mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":null,"dir":"Reference","previous_headings":"","what":"Produce predictions from a kinetic model using specific parameters — mkinpredict","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"function produces time series observed variables kinetic model specified mkinmod, using specific set kinetic parameters initial values state variables.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"","code":"mkinpredict(x, odeparms, odeini, outtimes, ...) # S3 method for mkinmod mkinpredict( x, odeparms = c(k_parent_sink = 0.1), odeini = c(parent = 100), outtimes = seq(0, 120, by = 0.1), solution_type = \"deSolve\", use_compiled = \"auto\", use_symbols = FALSE, method.ode = \"lsoda\", atol = 1e-08, rtol = 1e-10, maxsteps = 20000L, map_output = TRUE, na_stop = TRUE, ... ) # S3 method for mkinfit mkinpredict( x, odeparms = x$bparms.ode, odeini = x$bparms.state, outtimes = seq(0, 120, by = 0.1), solution_type = \"deSolve\", use_compiled = \"auto\", method.ode = \"lsoda\", atol = 1e-08, rtol = 1e-10, map_output = TRUE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"x kinetic model produced mkinmod, kinetic fit fitted mkinfit. latter case, fitted parameters used prediction. odeparms numeric vector specifying parameters used kinetic model, generally defined set ordinary differential equations. odeini numeric vector containing initial values state variables model. Note state variables can differ observed variables, example case SFORB model. outtimes numeric vector specifying time points model predictions generated. ... arguments passed ode solver case solver used. solution_type method used producing predictions. generally \"analytical\" one observed variable, usually \"deSolve\" case several observed variables. third possibility \"eigen\" fast comparison uncompiled ODE models, applicable models, e.g. using FOMC parent compound. use_compiled set FALSE, compiled version mkinmod model used, even present. use_symbols set TRUE (default), symbol info present mkinmod object used available accessing compiled code method.ode solution method passed via mkinpredict ode] case solution type \"deSolve\" using compiled code. using compiled code, lsoda supported. atol Absolute error tolerance, passed ode solver. rtol Absolute error tolerance, passed ode solver. maxsteps Maximum number steps, passed ode solver. map_output Boolean specify output list values observed variables (default) state variables (set FALSE). Setting FALSE effect analytical solutions, always return mapped output. na_stop error ode returns NaN values","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"matrix numeric solution wide format","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"","code":"SFO <- mkinmod(degradinol = mkinsub(\"SFO\")) # Compare solution types mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"analytical\") #> time degradinol #> 0 0 100.0000000 #> 1 1 74.0818221 #> 2 2 54.8811636 #> 3 3 40.6569660 #> 4 4 30.1194212 #> 5 5 22.3130160 #> 6 6 16.5298888 #> 7 7 12.2456428 #> 8 8 9.0717953 #> 9 9 6.7205513 #> 10 10 4.9787068 #> 11 11 3.6883167 #> 12 12 2.7323722 #> 13 13 2.0241911 #> 14 14 1.4995577 #> 15 15 1.1108997 #> 16 16 0.8229747 #> 17 17 0.6096747 #> 18 18 0.4516581 #> 19 19 0.3345965 #> 20 20 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"deSolve\") #> time degradinol #> 0 0 100.0000000 #> 1 1 74.0818221 #> 2 2 54.8811636 #> 3 3 40.6569660 #> 4 4 30.1194212 #> 5 5 22.3130160 #> 6 6 16.5298888 #> 7 7 12.2456428 #> 8 8 9.0717953 #> 9 9 6.7205513 #> 10 10 4.9787068 #> 11 11 3.6883167 #> 12 12 2.7323722 #> 13 13 2.0241911 #> 14 14 1.4995577 #> 15 15 1.1108996 #> 16 16 0.8229747 #> 17 17 0.6096747 #> 18 18 0.4516581 #> 19 19 0.3345965 #> 20 20 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"deSolve\", use_compiled = FALSE) #> time degradinol #> 0 0 100.0000000 #> 1 1 74.0818221 #> 2 2 54.8811636 #> 3 3 40.6569660 #> 4 4 30.1194212 #> 5 5 22.3130160 #> 6 6 16.5298888 #> 7 7 12.2456428 #> 8 8 9.0717953 #> 9 9 6.7205513 #> 10 10 4.9787068 #> 11 11 3.6883167 #> 12 12 2.7323722 #> 13 13 2.0241911 #> 14 14 1.4995577 #> 15 15 1.1108996 #> 16 16 0.8229747 #> 17 17 0.6096747 #> 18 18 0.4516581 #> 19 19 0.3345965 #> 20 20 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"eigen\") #> time degradinol #> 0 0 100.0000000 #> 1 1 74.0818221 #> 2 2 54.8811636 #> 3 3 40.6569660 #> 4 4 30.1194212 #> 5 5 22.3130160 #> 6 6 16.5298888 #> 7 7 12.2456428 #> 8 8 9.0717953 #> 9 9 6.7205513 #> 10 10 4.9787068 #> 11 11 3.6883167 #> 12 12 2.7323722 #> 13 13 2.0241911 #> 14 14 1.4995577 #> 15 15 1.1108997 #> 16 16 0.8229747 #> 17 17 0.6096747 #> 18 18 0.4516581 #> 19 19 0.3345965 #> 20 20 0.2478752 # Compare integration methods to analytical solution mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"analytical\")[21,] #> time degradinol #> 20.0000000 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, method = \"lsoda\", use_compiled = FALSE)[21,] #> time degradinol #> 20.0000000 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, method = \"ode45\", use_compiled = FALSE)[21,] #> time degradinol #> 20.0000000 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, method = \"rk4\", use_compiled = FALSE)[21,] #> time degradinol #> 20.0000000 0.2480043 # rk4 is not as precise here # The number of output times used to make a lot of difference until the # default for atol was adjusted mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), seq(0, 20, by = 0.1))[201,] #> time degradinol #> 20.0000000 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), seq(0, 20, by = 0.01))[2001,] #> time degradinol #> 20.0000000 0.2478752 # Comparison of the performance of solution types SFO_SFO = mkinmod(parent = list(type = \"SFO\", to = \"m1\"), m1 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded if(require(rbenchmark)) { benchmark(replications = 10, order = \"relative\", columns = c(\"test\", \"relative\", \"elapsed\"), eigen = mkinpredict(SFO_SFO, c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01), c(parent = 100, m1 = 0), seq(0, 20, by = 0.1), solution_type = \"eigen\")[201,], deSolve_compiled = mkinpredict(SFO_SFO, c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01), c(parent = 100, m1 = 0), seq(0, 20, by = 0.1), solution_type = \"deSolve\")[201,], deSolve = mkinpredict(SFO_SFO, c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01), c(parent = 100, m1 = 0), seq(0, 20, by = 0.1), solution_type = \"deSolve\", use_compiled = FALSE)[201,], analytical = mkinpredict(SFO_SFO, c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01), c(parent = 100, m1 = 0), seq(0, 20, by = 0.1), solution_type = \"analytical\", use_compiled = FALSE)[201,]) } #> test relative elapsed #> 4 analytical 1 0.001 #> 2 deSolve_compiled 2 0.002 #> 1 eigen 8 0.008 #> 3 deSolve 64 0.064 # \\dontrun{ # Predict from a fitted model f <- mkinfit(SFO_SFO, FOCUS_2006_C, quiet = TRUE) f <- mkinfit(SFO_SFO, FOCUS_2006_C, quiet = TRUE, solution_type = \"deSolve\") head(mkinpredict(f)) #> Error in !is.null(x$symbols) & use_symbols: operations are possible only for numeric, logical or complex types # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to plot residuals stored in an mkin object — mkinresplot","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"function plots residuals specified subset observed variables mkinfit object. combined plot fitted model residuals can obtained using plot.mkinfit using argument show_residuals = TRUE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"","code":"mkinresplot( object, obs_vars = names(object$mkinmod$map), xlim = c(0, 1.1 * max(object$data$time)), standardized = FALSE, xlab = \"Time\", ylab = ifelse(standardized, \"Standardized residual\", \"Residual\"), maxabs = \"auto\", legend = TRUE, lpos = \"topright\", col_obs = \"auto\", pch_obs = \"auto\", frame = TRUE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"object fit represented mkinfit object. obs_vars character vector names observed variables residuals plotted. Defaults observed variables model xlim plot range x direction. standardized residuals standardized dividing standard deviation given error model fit? xlab Label x axis. ylab Label y axis. maxabs Maximum absolute value residuals. used scaling y axis defaults \"auto\". legend legend plotted? lpos legend placed? Default \"topright\". passed legend. col_obs Colors observed variables. pch_obs Symbols used observed variables. frame frame drawn around plots? ... arguments passed plot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"Nothing returned function, called side effect, namely produce plot.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"Johannes Ranke Katrin Lindenberger","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"","code":"model <- mkinmod(parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded fit <- mkinfit(model, FOCUS_2006_D, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data mkinresplot(fit, \"m1\")"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"function calls mkinfit combinations models datasets specified first two arguments.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"","code":"mmkin( models = c(\"SFO\", \"FOMC\", \"DFOP\"), datasets, cores = if (Sys.info()[\"sysname\"] == \"Windows\") 1 else parallel::detectCores(), cluster = NULL, ... ) # S3 method for mmkin print(x, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"models Either character vector shorthand names like c(\"SFO\", \"FOMC\", \"DFOP\", \"HS\", \"SFORB\"), optionally named list mkinmod objects. datasets optionally named list datasets suitable observed data mkinfit. cores number cores used multicore processing. used cluster argument NULL. Windows machines, cores > 1 supported, need use cluster argument use multiple logical processors. Per default, cores detected parallel::detectCores() used, except Windows default 1. cluster cluster returned makeCluster used parallel execution. ... used. x mmkin object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"two-dimensional array mkinfit objects /try-errors can indexed using model names first index (row index) dataset names second index (column index).","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"","code":"# \\dontrun{ m_synth_SFO_lin <- mkinmod(parent = mkinsub(\"SFO\", \"M1\"), M1 = mkinsub(\"SFO\", \"M2\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded m_synth_FOMC_lin <- mkinmod(parent = mkinsub(\"FOMC\", \"M1\"), M1 = mkinsub(\"SFO\", \"M2\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded models <- list(SFO_lin = m_synth_SFO_lin, FOMC_lin = m_synth_FOMC_lin) datasets <- lapply(synthetic_data_for_UBA_2014[1:3], function(x) x$data) names(datasets) <- paste(\"Dataset\", 1:3) time_default <- system.time(fits.0 <- mmkin(models, datasets, quiet = TRUE)) time_1 <- system.time(fits.4 <- mmkin(models, datasets, cores = 1, quiet = TRUE)) time_default #> user system elapsed #> 1.653 0.553 0.654 time_1 #> user system elapsed #> 2.013 0.008 2.021 endpoints(fits.0[[\"SFO_lin\", 2]]) #> $ff #> parent_M1 parent_sink M1_M2 M1_sink #> 0.7340481 0.2659519 0.7505690 0.2494310 #> #> $distimes #> DT50 DT90 #> parent 0.8777689 2.915885 #> M1 2.3257403 7.725942 #> M2 33.7201060 112.015767 #> # plot.mkinfit handles rows or columns of mmkin result objects plot(fits.0[1, ]) plot(fits.0[1, ], obs_var = c(\"M1\", \"M2\")) plot(fits.0[, 1]) # Use double brackets to extract a single mkinfit object, which will be plotted # by plot.mkinfit and can be plotted using plot_sep plot(fits.0[[1, 1]], sep_obs = TRUE, show_residuals = TRUE, show_errmin = TRUE) plot_sep(fits.0[[1, 1]]) # Plotting with mmkin (single brackets, extracting an mmkin object) does not # allow to plot the observed variables separately plot(fits.0[1, 1]) # On Windows, we can use multiple cores by making a cluster first cl <- parallel::makePSOCKcluster(12) f <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), list(A = FOCUS_2006_A, B = FOCUS_2006_B, C = FOCUS_2006_C, D = FOCUS_2006_D), cluster = cl, quiet = TRUE) print(f) #> <mmkin> object #> Status of individual fits: #> #> dataset #> model A B C D #> SFO OK OK OK OK #> FOMC C OK OK OK #> DFOP OK OK OK OK #> #> C: Optimisation did not converge: #> false convergence (8) #> OK: No warnings # We get false convergence for the FOMC fit to FOCUS_2006_A because this # dataset is really SFO, and the FOMC fit is overparameterised parallel::stopCluster(cl) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform a hierarchical model fit with multiple starting values — multistart","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"purpose method check certain algorithm fitting nonlinear hierarchical models (also known nonlinear mixed-effects models) reliably yield results sufficiently similar , started certain range reasonable starting parameters. inspired article practical identifiabiliy frame nonlinear mixed-effects models Duchesne et al (2021).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"","code":"multistart( object, n = 50, cores = if (Sys.info()[\"sysname\"] == \"Windows\") 1 else parallel::detectCores(), cluster = NULL, ... ) # S3 method for saem.mmkin multistart(object, n = 50, cores = 1, cluster = NULL, ...) # S3 method for multistart print(x, ...) best(object, ...) # S3 method for default best(object, ...) which.best(object, ...) # S3 method for default which.best(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"object fit object work n many different combinations starting parameters used? cores many fits run parallel (posix platforms)? cluster cluster returned parallel::makeCluster used parallel execution. ... Passed update function. x multistart object print","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"list saem.mmkin objects, class attributes 'multistart.saem.mmkin' 'multistart'. object highest likelihood index object highest likelihood","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"Duchesne R, Guillemin , Gandrillon O, Crauste F. Practical identifiability frame nonlinear mixed effects models: example vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478. doi: 10.1186/s12859-021-04373-4.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"","code":"# \\dontrun{ library(mkin) dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] ds_i }) names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) dmta_ds[[\"Elliot 1\"]] <- dmta_ds[[\"Elliot 2\"]] <- NULL f_mmkin <- mmkin(\"DFOP\", dmta_ds, error_model = \"tc\", cores = 7, quiet = TRUE) f_saem_full <- saem(f_mmkin) f_saem_full_multi <- multistart(f_saem_full, n = 16, cores = 16) parplot(f_saem_full_multi, lpos = \"topleft\") illparms(f_saem_full) #> [1] \"sd(log_k2)\" f_saem_reduced <- update(f_saem_full, no_random_effect = \"log_k2\") illparms(f_saem_reduced) # On Windows, we need to create a PSOCK cluster first and refer to it # in the call to multistart() library(parallel) cl <- makePSOCKcluster(12) f_saem_reduced_multi <- multistart(f_saem_reduced, n = 16, cluster = cl) parplot(f_saem_reduced_multi, lpos = \"topright\", ylim = c(0.5, 2)) stopCluster(cl) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate parent kinetics using the NAFTA guidance — nafta","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"function fits SFO, IORE DFOP models using mmkin returns object class nafta methods printing plotting. Print nafta objects. results three models printed order increasing model complexity, .e. SFO, IORE, finally DFOP.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"","code":"nafta(ds, title = NA, quiet = FALSE, ...) # S3 method for nafta print(x, quiet = TRUE, digits = 3, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"NAFTA (2011) Guidance evaluating calculating degradation kinetics environmental media. NAFTA Technical Working Group Pesticides https://www.epa.gov/pesticide-science--assessing-pesticide-risks/guidance-evaluating--calculating-degradation accessed 2019-02-22 US EPA (2015) Standard Operating Procedure Using NAFTA Guidance Calculate Representative Half-life Values Characterizing Pesticide Degradation https://www.epa.gov/pesticide-science--assessing-pesticide-risks/standard-operating-procedure-using-nafta-guidance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"ds dataframe must contain one variable called \"time\" time values specified time argument, one column called \"name\" grouping observed values, finally one column observed values called \"value\". title Optional title dataset quiet evaluation text shown? ... arguments passed mmkin (printing method). x nafta object. digits Number digits used printing parameters dissipation times.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"list class nafta. list element named \"mmkin\" mmkin object containing fits three models. list element named \"title\" contains title dataset used. list element \"data\" contains dataset used fits.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"","code":"nafta_evaluation <- nafta(NAFTA_SOP_Appendix_D, cores = 1) #> The SFO model is rejected as S_SFO is equal or higher than the critical value S_c #> The representative half-life of the IORE model is longer than the one corresponding #> to the terminal degradation rate found with the DFOP model. #> The representative half-life obtained from the DFOP model may be used print(nafta_evaluation) #> Sums of squares: #> SFO IORE DFOP #> 1378.6832 615.7730 517.8836 #> #> Critical sum of squares for checking the SFO model: #> [1] 717.4598 #> #> Parameters: #> $SFO #> Estimate Pr(>t) Lower Upper #> parent_0 83.7558 1.80e-14 77.18268 90.3288 #> k_parent 0.0017 7.43e-05 0.00112 0.0026 #> sigma 8.7518 1.22e-05 5.64278 11.8608 #> #> $IORE #> Estimate Pr(>t) Lower Upper #> parent_0 9.69e+01 NA 8.88e+01 1.05e+02 #> k__iore_parent 8.40e-14 NA 1.79e-18 3.94e-09 #> N_parent 6.68e+00 NA 4.19e+00 9.17e+00 #> sigma 5.85e+00 NA 3.76e+00 7.94e+00 #> #> $DFOP #> Estimate Pr(>t) Lower Upper #> parent_0 9.76e+01 1.94e-13 9.02e+01 1.05e+02 #> k1 4.24e-02 5.92e-03 2.03e-02 8.88e-02 #> k2 8.24e-04 6.48e-03 3.89e-04 1.75e-03 #> g 2.88e-01 2.47e-05 1.95e-01 4.03e-01 #> sigma 5.36e+00 2.22e-05 3.43e+00 7.30e+00 #> #> #> DTx values: #> DT50 DT90 DT50_rep #> SFO 407 1350 407 #> IORE 541 5190000 1560000 #> DFOP 429 2380 841 #> #> Representative half-life: #> [1] 841.41 plot(nafta_evaluation)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":null,"dir":"Reference","previous_headings":"","what":"Helper functions to create nlme models from mmkin row objects — nlme_function","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"functions facilitate setting nonlinear mixed effects model mmkin row object. mmkin row object essentially list mkinfit objects obtained fitting model list datasets. used internally nlme.mmkin() method.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"","code":"nlme_function(object) nlme_data(object)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"object mmkin row object containing several fits model different datasets","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"function can used nlme groupedData object","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"","code":"sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) m_SFO <- mkinmod(parent = mkinsub(\"SFO\")) d_SFO_1 <- mkinpredict(m_SFO, c(k_parent = 0.1), c(parent = 98), sampling_times) d_SFO_1_long <- mkin_wide_to_long(d_SFO_1, time = \"time\") d_SFO_2 <- mkinpredict(m_SFO, c(k_parent = 0.05), c(parent = 102), sampling_times) d_SFO_2_long <- mkin_wide_to_long(d_SFO_2, time = \"time\") d_SFO_3 <- mkinpredict(m_SFO, c(k_parent = 0.02), c(parent = 103), sampling_times) d_SFO_3_long <- mkin_wide_to_long(d_SFO_3, time = \"time\") d1 <- add_err(d_SFO_1, function(value) 3, n = 1) d2 <- add_err(d_SFO_2, function(value) 2, n = 1) d3 <- add_err(d_SFO_3, function(value) 4, n = 1) ds <- c(d1 = d1, d2 = d2, d3 = d3) f <- mmkin(\"SFO\", ds, cores = 1, quiet = TRUE) mean_dp <- mean_degparms(f) grouped_data <- nlme_data(f) nlme_f <- nlme_function(f) # These assignments are necessary for these objects to be # visible to nlme and augPred when evaluation is done by # pkgdown to generate the html docs. assign(\"nlme_f\", nlme_f, globalenv()) assign(\"grouped_data\", grouped_data, globalenv()) library(nlme) m_nlme <- nlme(value ~ nlme_f(name, time, parent_0, log_k_parent_sink), data = grouped_data, fixed = parent_0 + log_k_parent_sink ~ 1, random = pdDiag(parent_0 + log_k_parent_sink ~ 1), start = mean_dp) summary(m_nlme) #> Nonlinear mixed-effects model fit by maximum likelihood #> Model: value ~ nlme_f(name, time, parent_0, log_k_parent_sink) #> Data: grouped_data #> AIC BIC logLik #> 266.6428 275.8935 -128.3214 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k_parent_sink ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k_parent_sink Residual #> StdDev: 0.0003775775 0.7058039 3.065183 #> #> Fixed effects: parent_0 + log_k_parent_sink ~ 1 #> Value Std.Error DF t-value p-value #> parent_0 101.18323 0.7900461 43 128.07257 0 #> log_k_parent_sink -3.08708 0.4171755 43 -7.39995 0 #> Correlation: #> prnt_0 #> log_k_parent_sink 0.031 #> #> Standardized Within-Group Residuals: #> Min Q1 Med Q3 Max #> -2.38427070 -0.52059848 0.03593021 0.39987268 2.73188969 #> #> Number of Observations: 47 #> Number of Groups: 3 plot(augPred(m_nlme, level = 0:1), layout = c(3, 1)) # augPred does not work on fits with more than one state # variable # # The procedure is greatly simplified by the nlme.mmkin function f_nlme <- nlme(f) plot(f_nlme)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Create an nlme model for an mmkin row object — nlme.mmkin","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"functions sets nonlinear mixed effects model mmkin row object. mmkin row object essentially list mkinfit objects obtained fitting model list datasets.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"","code":"# S3 method for mmkin nlme( model, data = \"auto\", fixed = lapply(as.list(names(mean_degparms(model))), function(el) eval(parse(text = paste(el, 1, sep = \"~\")))), random = pdDiag(fixed), groups, start = mean_degparms(model, random = TRUE, test_log_parms = TRUE), correlation = NULL, weights = NULL, subset, method = c(\"ML\", \"REML\"), na.action = na.fail, naPattern, control = list(), verbose = FALSE ) # S3 method for nlme.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), ...) # S3 method for nlme.mmkin update(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"model mmkin row object. data Ignored, data taken mmkin model fixed Ignored, degradation parameters fitted mmkin model used fixed parameters random specified, correlations random effects set optimised degradation model parameters. achieved using nlme::pdDiag method. groups See documentation nlme start specified, mean values fitted degradation parameters taken mmkin object used correlation See documentation nlme weights passed nlme subset passed nlme method passed nlme na.action passed nlme naPattern passed nlme control passed nlme verbose passed nlme x nlme.mmkin object print digits Number digits use printing ... Update specifications passed update.nlme object nlme.mmkin object update","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"Upon success, fitted 'nlme.mmkin' object, nlme object additional elements. also inherits 'mixed.mmkin'.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"Note convergence nlme algorithms depends quality data. degradation kinetics, often datasets (e.g. data soils) complicated degradation models, may make impossible obtain convergence nlme.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"object inherits nlme::nlme, wealth methods automatically work 'nlme.mmkin' objects, nlme::intervals(), nlme::anova.lme() nlme::coef.lme().","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"","code":"ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) subset(x$data[c(\"name\", \"time\", \"value\")], name == \"parent\")) # \\dontrun{ f <- mmkin(c(\"SFO\", \"DFOP\"), ds, quiet = TRUE, cores = 1) library(nlme) f_nlme_sfo <- nlme(f[\"SFO\", ]) f_nlme_dfop <- nlme(f[\"DFOP\", ]) anova(f_nlme_sfo, f_nlme_dfop) #> Model df AIC BIC logLik Test L.Ratio p-value #> f_nlme_sfo 1 5 625.0539 637.5529 -307.5269 #> f_nlme_dfop 2 9 495.1270 517.6253 -238.5635 1 vs 2 137.9269 <.0001 print(f_nlme_dfop) #> Kinetic nonlinear mixed-effects model fit by maximum likelihood #> #> 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 #> #> Data: #> 90 observations of 1 variable(s) grouped in 5 datasets #> #> Log-likelihood: -238.6 #> #> Fixed effects: #> list(parent_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1) #> parent_0 log_k1 log_k2 g_qlogis #> 94.1702 -1.8002 -4.1474 0.0324 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k1 log_k2 g_qlogis Residual #> StdDev: 2.488 0.8447 1.33 0.4652 2.321 #> plot(f_nlme_dfop) endpoints(f_nlme_dfop) #> $distimes #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 10.79857 100.7937 30.34192 4.193937 43.85442 #> ds_2 <- lapply(experimental_data_for_UBA_2019[6:10], function(x) x$data[c(\"name\", \"time\", \"value\")]) m_sfo_sfo <- mkinmod(parent = mkinsub(\"SFO\", \"A1\"), 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_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, \"DFOP-SFO\" = m_dfop_sfo), ds_2, quiet = TRUE) f_nlme_sfo_sfo <- nlme(f_2[\"SFO-SFO\", ]) plot(f_nlme_sfo_sfo) # With formation fractions this does not coverge with defaults # f_nlme_sfo_sfo_ff <- nlme(f_2[\"SFO-SFO-ff\", ]) #plot(f_nlme_sfo_sfo_ff) # For the following, we need to increase pnlsMaxIter and the tolerance # to get convergence f_nlme_dfop_sfo <- nlme(f_2[\"DFOP-SFO\", ], control = list(pnlsMaxIter = 120, tolerance = 5e-4)) 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.620 -408.9273 #> f_nlme_sfo_sfo 2 9 1085.1821 1113.404 -533.5910 1 vs 2 249.3274 <.0001 endpoints(f_nlme_sfo_sfo) #> $ff #> parent_sink parent_A1 A1_sink #> 0.5912432 0.4087568 1.0000000 #> #> $distimes #> DT50 DT90 #> parent 19.13518 63.5657 #> A1 66.02155 219.3189 #> endpoints(f_nlme_dfop_sfo) #> $ff #> parent_A1 parent_sink #> 0.2768574 0.7231426 #> #> $distimes #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 11.07091 104.6320 31.49737 4.462383 46.20825 #> A1 162.30550 539.1672 NA NA NA #> if (length(findFunction(\"varConstProp\")) > 0) { # tc error model for nlme available # 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\", ]) f_nlme_dfop_tc <- nlme(f_tc[\"DFOP\", ]) AIC(f_nlme_sfo, f_nlme_sfo_tc, f_nlme_dfop, f_nlme_dfop_tc) print(f_nlme_dfop_tc) } #> Kinetic nonlinear mixed-effects model fit by maximum likelihood #> #> 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 #> #> Data: #> 90 observations of 1 variable(s) grouped in 5 datasets #> #> Log-likelihood: -238.4 #> #> Fixed effects: #> list(parent_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1) #> parent_0 log_k1 log_k2 g_qlogis #> 94.04774 -1.82340 -4.16716 0.05685 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k1 log_k2 g_qlogis Residual #> StdDev: 2.474 0.85 1.337 0.4659 1 #> #> Variance function: #> Structure: Constant plus proportion of variance covariate #> Formula: ~fitted(.) #> Parameter estimates: #> const prop #> 2.23222933 0.01262399 f_2_obs <- update(f_2, error_model = \"obs\") f_nlme_sfo_sfo_obs <- nlme(f_2_obs[\"SFO-SFO\", ]) print(f_nlme_sfo_sfo_obs) #> Kinetic nonlinear mixed-effects model fit by maximum likelihood #> #> Structural model: #> d_parent/dt = - k_parent_sink * parent - k_parent_A1 * parent #> d_A1/dt = + k_parent_A1 * parent - k_A1_sink * A1 #> #> Data: #> 170 observations of 2 variable(s) grouped in 5 datasets #> #> Log-likelihood: -473 #> #> Fixed effects: #> list(parent_0 ~ 1, log_k_parent_sink ~ 1, log_k_parent_A1 ~ 1, log_k_A1_sink ~ 1) #> parent_0 log_k_parent_sink log_k_parent_A1 log_k_A1_sink #> 87.976 -3.670 -4.164 -4.645 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k_parent_sink ~ 1, log_k_parent_A1 ~ 1, log_k_A1_sink ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k_parent_sink log_k_parent_A1 log_k_A1_sink Residual #> StdDev: 3.992 1.777 1.055 0.4821 6.483 #> #> Variance function: #> Structure: Different standard deviations per stratum #> Formula: ~1 | name #> Parameter estimates: #> parent A1 #> 1.0000000 0.2050005 f_nlme_dfop_sfo_obs <- nlme(f_2_obs[\"DFOP-SFO\", ], control = list(pnlsMaxIter = 120, tolerance = 5e-4)) f_2_tc <- update(f_2, error_model = \"tc\") # f_nlme_sfo_sfo_tc <- nlme(f_2_tc[\"SFO-SFO\", ]) # No convergence with 50 iterations # f_nlme_dfop_sfo_tc <- nlme(f_2_tc[\"DFOP-SFO\", ], # control = list(pnlsMaxIter = 120, tolerance = 5e-4)) # Error in X[, fmap[[nm]]] <- gradnm anova(f_nlme_dfop_sfo, f_nlme_dfop_sfo_obs) #> Model df AIC BIC logLik Test L.Ratio p-value #> f_nlme_dfop_sfo 1 13 843.8547 884.620 -408.9273 #> f_nlme_dfop_sfo_obs 2 14 817.5338 861.435 -394.7669 1 vs 2 28.32084 <.0001 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","title":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","text":"Number observations mkinfit object fitted","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","text":"","code":"# S3 method for mkinfit nobs(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","text":"object mkinfit object ... compatibility generic method","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","text":"number rows data included mkinfit object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract model parameters — parms","title":"Extract model parameters — parms","text":"function returns degradation model parameters well error model parameters per default, order avoid working fitted model without considering error structure assumed fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract model parameters — parms","text":"","code":"parms(object, ...) # S3 method for mkinfit parms(object, transformed = FALSE, errparms = TRUE, ...) # S3 method for mmkin parms(object, transformed = FALSE, errparms = TRUE, ...) # S3 method for multistart parms(object, exclude_failed = TRUE, ...) # S3 method for saem.mmkin parms(object, ci = FALSE, covariates = NULL, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract model parameters — parms","text":"object fitted model object. ... used transformed parameters returned used internally optimisation? errparms error model parameters returned addition degradation parameters? exclude_failed multistart objects, rows failed fits removed returned parameter matrix? ci matrix estimates confidence interval boundaries returned? FALSE (default), vector estimates returned covariates given, otherwise matrix estimates returned, column corresponding row data frame holding covariates covariates data frame holding covariate values return parameter values. effect 'ci' FALSE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract model parameters — parms","text":"Depending object, numeric vector fitted model parameters, matrix (e.g. mmkin row objects), list matrices (e.g. mmkin objects one row).","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract model parameters — parms","text":"","code":"# mkinfit objects fit <- mkinfit(\"SFO\", FOCUS_2006_C, quiet = TRUE) parms(fit) #> parent_0 k_parent sigma #> 82.4921598 0.3060633 4.6730124 parms(fit, transformed = TRUE) #> parent_0 log_k_parent sigma #> 82.492160 -1.183963 4.673012 # mmkin objects ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) subset(x$data[c(\"name\", \"time\", \"value\")])) names(ds) <- paste(\"Dataset\", 6:10) # \\dontrun{ fits <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), ds, quiet = TRUE, cores = 1) 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 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 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.058971584 #> k1 0.044946770 #> k2 0.002868336 #> g 0.526942414 #> 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 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.058971584 90.34509493 98.14858820 94.311323735 #> k1 0.21954588 0.044946770 0.41232288 0.31697588 0.080663857 #> k2 0.02957934 0.002868336 0.07581766 0.03260384 0.003425417 #> g 0.44845068 0.526942414 0.66091967 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.148095 #> log_k_parent -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.38393898 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.0589716 90.3450949 98.1485882 94.3113237 #> log_k1 -1.5161940 -3.1022764 -0.8859486 -1.1489296 -2.5174647 #> log_k2 -3.5206791 -5.8540232 -2.5794240 -3.4233253 -5.6765322 #> g_qlogis -0.2069326 0.1078741 0.6673953 0.6332573 -0.6514943 #> sigma 1.3569047 2.2213022 1.3416908 2.8715985 1.9420678 #> # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot parameter variability of multistart objects — parplot","title":"Plot parameter variability of multistart objects — parplot","text":"Produces boxplot parameters multiple runs, scaled either parameters run highest likelihood, medians proposed paper Duchesne et al. (2021).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot parameter variability of multistart objects — parplot","text":"","code":"parplot(object, ...) # S3 method for multistart.saem.mmkin parplot( object, llmin = -Inf, llquant = NA, scale = c(\"best\", \"median\"), lpos = \"bottomleft\", main = \"\", ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot parameter variability of multistart objects — parplot","text":"object multistart object ... Passed boxplot llmin minimum likelihood objects shown llquant Fractional value selecting fits higher likelihoods. Overrides 'llmin'. scale default, scale parameters using best available fit. 'median', parameters scaled using median parameters fits. lpos Positioning legend. main Title plot","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot parameter variability of multistart objects — parplot","text":"Starting values degradation model parameters error model parameters shown green circles. results obtained original run shown red circles.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot parameter variability of multistart objects — parplot","text":"Duchesne R, Guillemin , Gandrillon O, Crauste F. Practical identifiability frame nonlinear mixed effects models: example vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478. doi: 10.1186/s12859-021-04373-4.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"Plot predictions fitted nonlinear mixed model obtained via mmkin row object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"","code":"# S3 method for mixed.mmkin plot( x, i = 1:ncol(x$mmkin), obs_vars = names(x$mkinmod$map), standardized = TRUE, covariates = NULL, covariate_quantiles = c(0.5, 0.05, 0.95), xlab = \"Time\", xlim = range(x$data$time), resplot = c(\"predicted\", \"time\"), pop_curves = \"auto\", pred_over = NULL, test_log_parms = FALSE, conf.level = 0.6, default_log_parms = NA, ymax = \"auto\", maxabs = \"auto\", ncol.legend = ifelse(length(i) <= 3, length(i) + 1, ifelse(length(i) <= 8, 3, 4)), nrow.legend = ceiling((length(i) + 1)/ncol.legend), rel.height.legend = 0.02 + 0.07 * nrow.legend, rel.height.bottom = 1.1, pch_ds = 1:length(i), col_ds = pch_ds + 1, lty_ds = col_ds, frame = TRUE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"x object class mixed.mmkin, saem.mmkin nlme.mmkin numeric index select datasets plot individual predictions, case plots get large obs_vars character vector names observed variables data model plotted. Defauls observed variables model. standardized residuals standardized? takes effect resplot = \"time\". covariates Data frame covariate values variables covariate models object. given, overrides 'covariate_quantiles'. line data frame result line drawn population. Rownames used legend label lines. covariate_quantiles argument effect fitted object covariate models. , default show three population curves, 5th percentile, 50th percentile 95th percentile covariate values used fitting model. xlab Label x axis. xlim Plot range x direction. resplot residuals plotted time predicted values? pop_curves Per default, one population curve drawn case population parameters fitted model, e.g. saem objects. case covariate model, behaviour depends value 'covariates' pred_over Named list alternative predictions obtained mkinpredict compatible mkinmod. test_log_parms Passed mean_degparms case mixed.mmkin object conf.level Passed mean_degparms case mixed.mmkin object default_log_parms Passed mean_degparms case mixed.mmkin object ymax Vector maximum y axis values maxabs Maximum absolute value residuals. used scaling y axis defaults \"auto\". ncol.legend Number columns use legend nrow.legend Number rows use legend rel.height.legend relative height legend shown top rel.height.bottom relative height bottom plot row pch_ds Symbols used plotting data. col_ds Colors used plotting observed data corresponding model prediction lines different datasets. lty_ds Line types used model predictions. frame frame drawn around plots? ... arguments passed plot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"Covariate models currently supported saem.mmkin objects.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"","code":"ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) x$data[c(\"name\", \"time\", \"value\")]) names(ds) <- paste0(\"ds \", 6:10) dfop_sfo <- mkinmod(parent = mkinsub(\"DFOP\", \"A1\"), A1 = mkinsub(\"SFO\"), quiet = TRUE) # \\dontrun{ f <- mmkin(list(\"DFOP-SFO\" = dfop_sfo), ds, quiet = TRUE) plot(f[, 3:4], standardized = TRUE) # For this fit we need to increase pnlsMaxiter, and we increase the # tolerance in order to speed up the fit for this example evaluation # It still takes 20 seconds to run f_nlme <- nlme(f, control = list(pnlsMaxIter = 120, tolerance = 1e-3)) plot(f_nlme) f_saem <- saem(f, transformations = \"saemix\") plot(f_saem) f_obs <- mmkin(list(\"DFOP-SFO\" = dfop_sfo), ds, quiet = TRUE, error_model = \"obs\") f_nlmix <- nlmix(f_obs) #> Error in nlmix(f_obs): could not find function \"nlmix\" plot(f_nlmix) #> Error in eval(expr, envir, enclos): object 'f_nlmix' not found # We can overlay the two variants if we generate predictions pred_nlme <- mkinpredict(dfop_sfo, f_nlme$bparms.optim[-1], c(parent = f_nlme$bparms.optim[[1]], A1 = 0), seq(0, 180, by = 0.2)) plot(f_saem, pred_over = list(nlme = pred_nlme)) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"Solves differential equations optimised fixed parameters previous successful call mkinfit plots observed data together solution fitted model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"","code":"# S3 method for mkinfit plot( x, fit = x, obs_vars = names(fit$mkinmod$map), xlab = \"Time\", ylab = \"Residue\", xlim = range(fit$data$time), ylim = \"default\", col_obs = 1:length(obs_vars), pch_obs = col_obs, lty_obs = rep(1, length(obs_vars)), add = FALSE, legend = !add, show_residuals = FALSE, show_errplot = FALSE, maxabs = \"auto\", sep_obs = FALSE, rel.height.middle = 0.9, row_layout = FALSE, lpos = \"topright\", inset = c(0.05, 0.05), show_errmin = FALSE, errmin_digits = 3, frame = TRUE, ... ) plot_sep( fit, show_errmin = TRUE, show_residuals = ifelse(identical(fit$err_mod, \"const\"), TRUE, \"standardized\"), ... ) plot_res( fit, sep_obs = FALSE, show_errmin = sep_obs, standardized = ifelse(identical(fit$err_mod, \"const\"), FALSE, TRUE), ... ) plot_err(fit, sep_obs = FALSE, show_errmin = sep_obs, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"x Alias fit introduced compatibility generic S3 method. fit object class mkinfit. obs_vars character vector names observed variables data model plotted. Defauls observed variables model. xlab Label x axis. ylab Label y axis. xlim Plot range x direction. ylim Plot range y direction. given list, plot ranges different plot rows can given row layout. col_obs Colors used plotting observed data corresponding model prediction lines. pch_obs Symbols used plotting data. lty_obs Line types used model predictions. add plot added existing plot? legend legend added plot? show_residuals residuals shown? one plot fits shown, residual plot lower third plot. Otherwise, .e. \"sep_obs\" given, residual plots located right plots fitted curves. set 'standardized', plot residuals divided standard deviation given fitted error model shown. show_errplot squared residuals error model shown? one plot fits shown, plot lower third plot. Otherwise, .e. \"sep_obs\" given, residual plots located right plots fitted curves. maxabs Maximum absolute value residuals. used scaling y axis defaults \"auto\". sep_obs observed variables shown separate subplots? yes, residual plots requested \"show_residuals\" shown next , plot fits. rel.height.middle relative height middle plot, two rows plots shown. row_layout use row layout residual plot error model plot shown right? lpos Position(s) legend(s). Passed legend first argument. length one, length obs_var argument. inset Passed legend applicable. show_errmin FOCUS chi2 error value shown upper margin plot? errmin_digits number significant digits rounding FOCUS chi2 error percentage. frame frame drawn around plots? ... arguments passed plot. standardized calling 'plot_res', residuals standardized residual plot?","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"current plot device tikz device, latex used formatting chi2 error level, show_errmin = TRUE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"","code":"# One parent compound, one metabolite, both single first order, path from # parent to sink included # \\dontrun{ SFO_SFO <- mkinmod(parent = mkinsub(\"SFO\", \"m1\", full = \"Parent\"), m1 = mkinsub(\"SFO\", full = \"Metabolite M1\" )) #> Temporary DLL for differentials generated and loaded fit <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data fit <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, error_model = \"tc\") #> Warning: Observations with value of zero were removed from the data plot(fit) plot_res(fit) plot_res(fit, standardized = FALSE) plot_err(fit) # Show the observed variables separately, with residuals plot(fit, sep_obs = TRUE, show_residuals = TRUE, lpos = c(\"topright\", \"bottomright\"), show_errmin = TRUE) # The same can be obtained with less typing, using the convenience function plot_sep plot_sep(fit, lpos = c(\"topright\", \"bottomright\")) # Show the observed variables separately, with the error model plot(fit, sep_obs = TRUE, show_errplot = TRUE, lpos = c(\"topright\", \"bottomright\"), show_errmin = TRUE) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"x row selected mmkin object ([.mmkin), model fitted least one dataset shown. column, fit least one model dataset shown.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"","code":"# S3 method for mmkin plot( x, main = \"auto\", legends = 1, resplot = c(\"time\", \"errmod\"), ylab = \"Residue\", standardized = FALSE, show_errmin = TRUE, errmin_var = \"All data\", errmin_digits = 3, cex = 0.7, rel.height.middle = 0.9, ymax = \"auto\", ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"x object class mmkin, either one row one column. main main title placed outer margin plot. legends index fits legends shown. resplot residuals plotted time, using mkinresplot, squared residuals predicted values, error model, using mkinerrplot. ylab Label y axis. standardized residuals standardized? option passed mkinresplot, takes effect resplot = \"time\". show_errmin chi2 error level shown top plots left? errmin_var variable FOCUS chi2 error value shown. errmin_digits number significant digits rounding FOCUS chi2 error percentage. cex Passed plot functions mtext. rel.height.middle relative height middle plot, two rows plots shown. ymax Maximum y axis value plot.mkinfit. ... arguments passed plot.mkinfit mkinresplot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"current plot device tikz device, latex used formatting chi2 error level.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"","code":"# \\dontrun{ # Only use one core not to offend CRAN checks fits <- mmkin(c(\"FOMC\", \"HS\"), list(\"FOCUS B\" = FOCUS_2006_B, \"FOCUS C\" = FOCUS_2006_C), # named list for titles cores = 1, quiet = TRUE, error_model = \"tc\") #> Warning: Optimisation did not converge: #> iteration limit reached without convergence (10) plot(fits[, \"FOCUS C\"]) plot(fits[\"FOMC\", ]) plot(fits[\"FOMC\", ], show_errmin = FALSE) # We can also plot a single fit, if we like the way plot.mmkin works, but then the plot # height should be smaller than the plot width (this is not possible for the html pages # generated by pkgdown, as far as I know). plot(fits[\"FOMC\", \"FOCUS C\"]) # same as plot(fits[1, 2]) # Show the error models plot(fits[\"FOMC\", ], resplot = \"errmod\") # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"plots ordered increasing complexity model function (SFO, IORE, DFOP).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"","code":"# S3 method for nafta plot(x, legend = FALSE, main = \"auto\", ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"x object class nafta. legend legend added? main Possibility override main title plot. ... arguments passed plot.mmkin.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"Calls plot.mmkin.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html","id":null,"dir":"Reference","previous_headings":"","what":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","title":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","text":"function imports one dataset sheet spreadsheet file. sheets selected based contents sheet 'Datasets', column called 'Dataset Number', containing numbers identifying dataset sheets read . second column must grouping variable, often named 'Soil'. Optionally, time normalization factors can given columns named 'Temperature' 'Moisture'.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","text":"","code":"read_spreadsheet( path, valid_datasets = \"all\", parent_only = FALSE, normalize = TRUE )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","text":"path Absolute relative path spreadsheet file valid_datasets Optional numeric index valid datasets, default use datasets parent_only parent data used? normalize time scale normalized using temperature moisture normalisation factors sheet 'Datasets'?","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","text":"must sheet 'Compounds', columns 'Name' 'Acronym'. first row read header read sheet assumed contain name acronym parent compound. dataset sheets named using dataset numbers read 'Datasets' sheet, .e. '1', '2', ... . dataset sheet, name observed variable (e.g. acronym parent compound one transformation products) first column, time values second colum, observed value third column. case relevant covariate data available, given sheet 'Covariates', containing one line value grouping variable specified 'Datasets'. values first column column must name second column 'Datasets'. Covariates read columns four higher. names preferably contain special characters like spaces, can easily used specifying covariate models. similar data structure defined R6 class mkindsg, probably complicated use.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"Objects exported from other packages — reexports","title":"Objects exported from other packages — reexports","text":"objects imported packages. Follow links see documentation. lmtest lrtest nlme intervals, nlme","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract residuals from an mkinfit model — residuals.mkinfit","title":"Extract residuals from an mkinfit model — residuals.mkinfit","text":"Extract residuals mkinfit model","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract residuals from an mkinfit model — residuals.mkinfit","text":"","code":"# S3 method for mkinfit residuals(object, standardized = FALSE, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract residuals from an mkinfit model — residuals.mkinfit","text":"object mkinfit object standardized residuals standardized dividing standard deviation obtained fitted error model? ... used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract residuals from an mkinfit model — residuals.mkinfit","text":"","code":"f <- mkinfit(\"DFOP\", FOCUS_2006_C, quiet = TRUE) residuals(f) #> [1] 0.09726374 -0.13912142 -0.15351210 0.73388322 -0.08657004 -0.93204702 #> [7] -0.03269080 1.45347823 -0.88423697 residuals(f, standardized = TRUE) #> [1] 0.13969917 -0.19981904 -0.22048826 1.05407091 -0.12433989 -1.33869208 #> [7] -0.04695355 2.08761977 -1.27002287"},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit nonlinear mixed models with SAEM — saem","title":"Fit nonlinear mixed models with SAEM — saem","text":"function uses saemix::saemix() backend fitting nonlinear mixed effects models created mmkin row objects using Stochastic Approximation Expectation Maximisation algorithm (SAEM).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit nonlinear mixed models with SAEM — saem","text":"","code":"saem(object, ...) # S3 method for mmkin saem( object, transformations = c(\"mkin\", \"saemix\"), error_model = \"auto\", degparms_start = numeric(), test_log_parms = TRUE, conf.level = 0.6, solution_type = \"auto\", covariance.model = \"auto\", omega.init = \"auto\", covariates = NULL, covariate_models = NULL, no_random_effect = NULL, error.init = c(1, 1), nbiter.saemix = c(300, 100), control = list(displayProgress = FALSE, print = FALSE, nbiter.saemix = nbiter.saemix, save = FALSE, save.graphs = FALSE), verbose = FALSE, quiet = FALSE, ... ) # S3 method for saem.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), ...) saemix_model( object, solution_type = \"auto\", transformations = c(\"mkin\", \"saemix\"), error_model = \"auto\", degparms_start = numeric(), covariance.model = \"auto\", no_random_effect = NULL, omega.init = \"auto\", covariates = NULL, covariate_models = NULL, error.init = numeric(), test_log_parms = FALSE, conf.level = 0.6, verbose = FALSE, ... ) saemix_data(object, covariates = NULL, verbose = FALSE, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit nonlinear mixed models with SAEM — saem","text":"object mmkin row object containing several fits mkinmod model different datasets ... parameters passed saemix::saemixModel. transformations Per default, parameter transformations done mkin. argument set 'saemix', parameter transformations done 'saemix' supported cases, .e. (version 1.1.2) SFO, FOMC, DFOP HS without fixing parent_0, SFO DFOP one SFO metabolite. error_model Possibility override error model used mmkin object degparms_start Parameter values given named numeric vector used override starting values obtained 'mmkin' object. test_log_parms TRUE, attempt made use robust starting values population parameters fitted log parameters mkin (like rate constants) considering rate constants pass t-test calculating mean degradation parameters using mean_degparms. conf.level Possibility adjust required confidence level parameter tested requested 'test_log_parms'. solution_type Possibility specify solution type case automatic choice desired covariance.model passed saemix::saemixModel(). Per default, uncorrelated random effects specified degradation parameters. omega.init passed saemix::saemixModel(). using mkin transformations default covariance model optionally excluded random effects, variances degradation parameters estimated using mean_degparms, testing untransformed log parameters significant difference zero. using mkin transformations custom covariance model, default initialisation saemix::saemixModel used omega.init. covariates data frame covariate data use 'covariate_models', dataset names row names. covariate_models list containing linear model formulas one explanatory variable, .e. type 'parameter ~ covariate'. Covariates must available 'covariates' data frame. no_random_effect Character vector degradation parameters variability groups. used covariance model explicitly specified. error.init passed saemix::saemixModel(). nbiter.saemix Convenience option increase number iterations control Passed saemix::saemix. verbose print information created objects type saemix::SaemixModel saemix::SaemixData? quiet suppress messages saemix prints beginning end optimisation process? x saem.mmkin object print digits Number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit nonlinear mixed models with SAEM — saem","text":"S3 object class 'saem.mmkin', containing fitted saemix::SaemixObject list component named ''. object also inherits 'mixed.mmkin'. saemix::SaemixModel object. saemix::SaemixData object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fit nonlinear mixed models with SAEM — saem","text":"mmkin row object essentially list mkinfit objects obtained fitting model list datasets using mkinfit. Starting values fixed effects (population mean parameters, argument psi0 saemix::saemixModel() mean values parameters found using mmkin.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit nonlinear mixed models with SAEM — saem","text":"","code":"# \\dontrun{ ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) subset(x$data[c(\"name\", \"time\", \"value\")])) names(ds) <- paste(\"Dataset\", 6:10) f_mmkin_parent_p0_fixed <- mmkin(\"FOMC\", ds, state.ini = c(parent = 100), fixed_initials = \"parent\", quiet = TRUE) f_saem_p0_fixed <- saem(f_mmkin_parent_p0_fixed) f_mmkin_parent <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), ds, quiet = TRUE) f_saem_sfo <- saem(f_mmkin_parent[\"SFO\", ]) f_saem_fomc <- saem(f_mmkin_parent[\"FOMC\", ]) f_saem_dfop <- saem(f_mmkin_parent[\"DFOP\", ]) anova(f_saem_sfo, f_saem_fomc, f_saem_dfop) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik #> f_saem_sfo 5 624.33 622.38 -307.17 #> f_saem_fomc 7 467.85 465.11 -226.92 #> f_saem_dfop 9 493.76 490.24 -237.88 anova(f_saem_sfo, f_saem_dfop, test = TRUE) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik Chisq Df Pr(>Chisq) #> f_saem_sfo 5 624.33 622.38 -307.17 #> f_saem_dfop 9 493.76 490.24 -237.88 138.57 4 < 2.2e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 illparms(f_saem_dfop) #> [1] \"sd(g_qlogis)\" f_saem_dfop_red <- update(f_saem_dfop, no_random_effect = \"g_qlogis\") anova(f_saem_dfop, f_saem_dfop_red, test = TRUE) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik Chisq Df Pr(>Chisq) #> f_saem_dfop_red 8 488.68 485.55 -236.34 #> f_saem_dfop 9 493.76 490.24 -237.88 0 1 1 anova(f_saem_sfo, f_saem_fomc, f_saem_dfop) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik #> f_saem_sfo 5 624.33 622.38 -307.17 #> f_saem_fomc 7 467.85 465.11 -226.92 #> f_saem_dfop 9 493.76 490.24 -237.88 # The returned saem.mmkin object contains an SaemixObject, therefore we can use # functions from saemix library(saemix) #> Loading required package: npde #> Package saemix, version 3.2 #> please direct bugs, questions and feedback to emmanuelle.comets@inserm.fr #> #> Attaching package: ‘saemix’ #> The following objects are masked from ‘package:npde’: #> #> kurtosis, skewness compare.saemix(f_saem_sfo$so, f_saem_fomc$so, f_saem_dfop$so) #> Likelihoods calculated by importance sampling #> AIC BIC #> 1 624.3316 622.3788 #> 2 467.8472 465.1132 #> 3 493.7592 490.2441 plot(f_saem_fomc$so, plot.type = \"convergence\") plot(f_saem_fomc$so, plot.type = \"individual.fit\") #> Simulating data using nsim = 1000 simulated datasets #> Computing WRES and npde . plot(f_saem_fomc$so, plot.type = \"npde\") #> Simulating data using nsim = 1000 simulated datasets #> Computing WRES and npde . #> Please use npdeSaemix to obtain VPC and npde plot(f_saem_fomc$so, plot.type = \"vpc\") f_mmkin_parent_tc <- update(f_mmkin_parent, error_model = \"tc\") f_saem_fomc_tc <- saem(f_mmkin_parent_tc[\"FOMC\", ]) anova(f_saem_fomc, f_saem_fomc_tc, test = TRUE) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik Chisq Df Pr(>Chisq) #> f_saem_fomc 7 467.85 465.11 -226.92 #> f_saem_fomc_tc 8 469.90 466.77 -226.95 0 1 1 sfo_sfo <- mkinmod(parent = mkinsub(\"SFO\", \"A1\"), A1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded fomc_sfo <- mkinmod(parent = mkinsub(\"FOMC\", \"A1\"), A1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded dfop_sfo <- mkinmod(parent = mkinsub(\"DFOP\", \"A1\"), A1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded # The following fit uses analytical solutions for SFO-SFO and DFOP-SFO, # and compiled ODEs for FOMC that are much slower f_mmkin <- mmkin(list( \"SFO-SFO\" = sfo_sfo, \"FOMC-SFO\" = fomc_sfo, \"DFOP-SFO\" = dfop_sfo), ds, quiet = TRUE) # saem fits of SFO-SFO and DFOP-SFO to these data take about five seconds # each on this system, as we use analytical solutions written for saemix. # When using the analytical solutions written for mkin this took around # four minutes f_saem_sfo_sfo <- saem(f_mmkin[\"SFO-SFO\", ]) f_saem_dfop_sfo <- saem(f_mmkin[\"DFOP-SFO\", ]) # We can use print, plot and summary methods to check the results print(f_saem_dfop_sfo) #> 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_A1/dt = + f_parent_to_A1 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) #> * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * #> exp(-k2 * time))) * parent - k_A1 * A1 #> #> Data: #> 170 observations of 2 variable(s) grouped in 5 datasets #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 839.2 834.1 -406.6 #> #> Fitted parameters: #> estimate lower upper #> parent_0 93.70402 91.04104 96.3670 #> log_k_A1 -5.83760 -7.66452 -4.0107 #> f_parent_qlogis -0.95718 -1.35955 -0.5548 #> log_k1 -2.35514 -3.39402 -1.3163 #> log_k2 -3.79634 -5.64009 -1.9526 #> g_qlogis -0.02108 -0.66463 0.6225 #> a.1 1.88191 1.66491 2.0989 #> SD.parent_0 2.81628 0.78922 4.8433 #> SD.log_k_A1 1.78751 0.42105 3.1540 #> SD.f_parent_qlogis 0.45016 0.16116 0.7391 #> SD.log_k1 1.06923 0.31676 1.8217 #> SD.log_k2 2.03768 0.70938 3.3660 #> SD.g_qlogis 0.44024 -0.09262 0.9731 plot(f_saem_dfop_sfo) summary(f_saem_dfop_sfo, data = TRUE) #> saemix version used for fitting: 3.2 #> mkin version used for pre-fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:17:34 2023 #> Date of summary: Thu Nov 16 04:17:34 2023 #> #> 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_A1/dt = + f_parent_to_A1 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) #> * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * #> exp(-k2 * time))) * parent - k_A1 * A1 #> #> Data: #> 170 observations of 2 variable(s) grouped in 5 datasets #> #> Model predictions using solution type analytical #> #> Fitted in 3.385 s #> Using 300, 100 iterations and 10 chains #> #> Variance model: Constant variance #> #> Starting values for degradation parameters: #> parent_0 log_k_A1 f_parent_qlogis log_k1 log_k2 #> 93.8102 -5.3734 -0.9711 -1.8799 -4.2708 #> g_qlogis #> 0.1356 #> #> Fixed degradation parameter values: #> None #> #> Starting values for random effects (square root of initial entries in omega): #> parent_0 log_k_A1 f_parent_qlogis log_k1 log_k2 g_qlogis #> parent_0 4.941 0.000 0.0000 0.000 0.000 0.0000 #> log_k_A1 0.000 2.551 0.0000 0.000 0.000 0.0000 #> f_parent_qlogis 0.000 0.000 0.7251 0.000 0.000 0.0000 #> log_k1 0.000 0.000 0.0000 1.449 0.000 0.0000 #> log_k2 0.000 0.000 0.0000 0.000 2.228 0.0000 #> g_qlogis 0.000 0.000 0.0000 0.000 0.000 0.7814 #> #> Starting values for error model parameters: #> a.1 #> 1 #> #> Results: #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 839.2 834.1 -406.6 #> #> Optimised parameters: #> est. lower upper #> parent_0 93.70402 91.04104 96.3670 #> log_k_A1 -5.83760 -7.66452 -4.0107 #> f_parent_qlogis -0.95718 -1.35955 -0.5548 #> log_k1 -2.35514 -3.39402 -1.3163 #> log_k2 -3.79634 -5.64009 -1.9526 #> g_qlogis -0.02108 -0.66463 0.6225 #> a.1 1.88191 1.66491 2.0989 #> SD.parent_0 2.81628 0.78922 4.8433 #> SD.log_k_A1 1.78751 0.42105 3.1540 #> SD.f_parent_qlogis 0.45016 0.16116 0.7391 #> SD.log_k1 1.06923 0.31676 1.8217 #> SD.log_k2 2.03768 0.70938 3.3660 #> SD.g_qlogis 0.44024 -0.09262 0.9731 #> #> Correlation: #> parnt_0 lg_k_A1 f_prnt_ log_k1 log_k2 #> log_k_A1 -0.0147 #> f_parent_qlogis -0.0269 0.0573 #> log_k1 0.0263 -0.0011 -0.0040 #> log_k2 0.0020 0.0065 -0.0002 -0.0776 #> g_qlogis -0.0248 -0.0180 -0.0004 -0.0903 -0.0603 #> #> Random effects: #> est. lower upper #> SD.parent_0 2.8163 0.78922 4.8433 #> SD.log_k_A1 1.7875 0.42105 3.1540 #> SD.f_parent_qlogis 0.4502 0.16116 0.7391 #> SD.log_k1 1.0692 0.31676 1.8217 #> SD.log_k2 2.0377 0.70938 3.3660 #> SD.g_qlogis 0.4402 -0.09262 0.9731 #> #> Variance model: #> est. lower upper #> a.1 1.882 1.665 2.099 #> #> Backtransformed parameters: #> est. lower upper #> parent_0 93.704015 9.104e+01 96.36699 #> k_A1 0.002916 4.692e-04 0.01812 #> f_parent_to_A1 0.277443 2.043e-01 0.36475 #> k1 0.094880 3.357e-02 0.26813 #> k2 0.022453 3.553e-03 0.14191 #> g 0.494731 3.397e-01 0.65078 #> #> Resulting formation fractions: #> ff #> parent_A1 0.2774 #> parent_sink 0.7226 #> #> Estimated disappearance times: #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 14.0 72.38 21.79 7.306 30.87 #> A1 237.7 789.68 NA NA NA #> #> Data: #> ds name time observed predicted residual std standardized #> Dataset 6 parent 0 97.2 95.70025 1.49975 1.882 0.79693 #> Dataset 6 parent 0 96.4 95.70025 0.69975 1.882 0.37183 #> Dataset 6 parent 3 71.1 71.44670 -0.34670 1.882 -0.18423 #> Dataset 6 parent 3 69.2 71.44670 -2.24670 1.882 -1.19384 #> Dataset 6 parent 6 58.1 56.59283 1.50717 1.882 0.80087 #> Dataset 6 parent 6 56.6 56.59283 0.00717 1.882 0.00381 #> Dataset 6 parent 10 44.4 44.56648 -0.16648 1.882 -0.08847 #> Dataset 6 parent 10 43.4 44.56648 -1.16648 1.882 -0.61984 #> Dataset 6 parent 20 33.3 29.76020 3.53980 1.882 1.88096 #> Dataset 6 parent 20 29.2 29.76020 -0.56020 1.882 -0.29767 #> Dataset 6 parent 34 17.6 19.39208 -1.79208 1.882 -0.95226 #> Dataset 6 parent 34 18.0 19.39208 -1.39208 1.882 -0.73971 #> Dataset 6 parent 55 10.5 10.55761 -0.05761 1.882 -0.03061 #> Dataset 6 parent 55 9.3 10.55761 -1.25761 1.882 -0.66826 #> Dataset 6 parent 90 4.5 3.84742 0.65258 1.882 0.34676 #> Dataset 6 parent 90 4.7 3.84742 0.85258 1.882 0.45304 #> Dataset 6 parent 112 3.0 2.03997 0.96003 1.882 0.51013 #> Dataset 6 parent 112 3.4 2.03997 1.36003 1.882 0.72268 #> Dataset 6 parent 132 2.3 1.14585 1.15415 1.882 0.61328 #> Dataset 6 parent 132 2.7 1.14585 1.55415 1.882 0.82583 #> Dataset 6 A1 3 4.3 4.86054 -0.56054 1.882 -0.29786 #> Dataset 6 A1 3 4.6 4.86054 -0.26054 1.882 -0.13844 #> Dataset 6 A1 6 7.0 7.74179 -0.74179 1.882 -0.39417 #> Dataset 6 A1 6 7.2 7.74179 -0.54179 1.882 -0.28789 #> Dataset 6 A1 10 8.2 9.94048 -1.74048 1.882 -0.92485 #> Dataset 6 A1 10 8.0 9.94048 -1.94048 1.882 -1.03112 #> Dataset 6 A1 20 11.0 12.19109 -1.19109 1.882 -0.63291 #> Dataset 6 A1 20 13.7 12.19109 1.50891 1.882 0.80180 #> Dataset 6 A1 34 11.5 13.10706 -1.60706 1.882 -0.85395 #> Dataset 6 A1 34 12.7 13.10706 -0.40706 1.882 -0.21630 #> Dataset 6 A1 55 14.9 13.06131 1.83869 1.882 0.97703 #> Dataset 6 A1 55 14.5 13.06131 1.43869 1.882 0.76448 #> Dataset 6 A1 90 12.1 11.54495 0.55505 1.882 0.29494 #> Dataset 6 A1 90 12.3 11.54495 0.75505 1.882 0.40122 #> Dataset 6 A1 112 9.9 10.31533 -0.41533 1.882 -0.22070 #> Dataset 6 A1 112 10.2 10.31533 -0.11533 1.882 -0.06128 #> Dataset 6 A1 132 8.8 9.20222 -0.40222 1.882 -0.21373 #> Dataset 6 A1 132 7.8 9.20222 -1.40222 1.882 -0.74510 #> Dataset 7 parent 0 93.6 90.82357 2.77643 1.882 1.47532 #> Dataset 7 parent 0 92.3 90.82357 1.47643 1.882 0.78453 #> Dataset 7 parent 3 87.0 84.73448 2.26552 1.882 1.20384 #> Dataset 7 parent 3 82.2 84.73448 -2.53448 1.882 -1.34675 #> Dataset 7 parent 7 74.0 77.65013 -3.65013 1.882 -1.93958 #> Dataset 7 parent 7 73.9 77.65013 -3.75013 1.882 -1.99272 #> Dataset 7 parent 14 64.2 67.60639 -3.40639 1.882 -1.81007 #> Dataset 7 parent 14 69.5 67.60639 1.89361 1.882 1.00621 #> Dataset 7 parent 30 54.0 52.53663 1.46337 1.882 0.77760 #> Dataset 7 parent 30 54.6 52.53663 2.06337 1.882 1.09642 #> Dataset 7 parent 60 41.1 39.42728 1.67272 1.882 0.88884 #> Dataset 7 parent 60 38.4 39.42728 -1.02728 1.882 -0.54587 #> Dataset 7 parent 90 32.5 33.76360 -1.26360 1.882 -0.67144 #> Dataset 7 parent 90 35.5 33.76360 1.73640 1.882 0.92268 #> Dataset 7 parent 120 28.1 30.39975 -2.29975 1.882 -1.22203 #> Dataset 7 parent 120 29.0 30.39975 -1.39975 1.882 -0.74379 #> Dataset 7 parent 180 26.5 25.62379 0.87621 1.882 0.46559 #> Dataset 7 parent 180 27.6 25.62379 1.97621 1.882 1.05010 #> Dataset 7 A1 3 3.9 2.70005 1.19995 1.882 0.63762 #> Dataset 7 A1 3 3.1 2.70005 0.39995 1.882 0.21252 #> Dataset 7 A1 7 6.9 5.83475 1.06525 1.882 0.56605 #> Dataset 7 A1 7 6.6 5.83475 0.76525 1.882 0.40663 #> Dataset 7 A1 14 10.4 10.26142 0.13858 1.882 0.07364 #> Dataset 7 A1 14 8.3 10.26142 -1.96142 1.882 -1.04225 #> Dataset 7 A1 30 14.4 16.82999 -2.42999 1.882 -1.29123 #> Dataset 7 A1 30 13.7 16.82999 -3.12999 1.882 -1.66319 #> Dataset 7 A1 60 22.1 22.32486 -0.22486 1.882 -0.11949 #> Dataset 7 A1 60 22.3 22.32486 -0.02486 1.882 -0.01321 #> Dataset 7 A1 90 27.5 24.45927 3.04073 1.882 1.61576 #> Dataset 7 A1 90 25.4 24.45927 0.94073 1.882 0.49988 #> Dataset 7 A1 120 28.0 25.54862 2.45138 1.882 1.30260 #> Dataset 7 A1 120 26.6 25.54862 1.05138 1.882 0.55868 #> Dataset 7 A1 180 25.8 26.82277 -1.02277 1.882 -0.54347 #> Dataset 7 A1 180 25.3 26.82277 -1.52277 1.882 -0.80916 #> Dataset 8 parent 0 91.9 91.16791 0.73209 1.882 0.38901 #> Dataset 8 parent 0 90.8 91.16791 -0.36791 1.882 -0.19550 #> Dataset 8 parent 1 64.9 67.58358 -2.68358 1.882 -1.42598 #> Dataset 8 parent 1 66.2 67.58358 -1.38358 1.882 -0.73520 #> Dataset 8 parent 3 43.5 41.62086 1.87914 1.882 0.99853 #> Dataset 8 parent 3 44.1 41.62086 2.47914 1.882 1.31735 #> Dataset 8 parent 8 18.3 19.60116 -1.30116 1.882 -0.69140 #> Dataset 8 parent 8 18.1 19.60116 -1.50116 1.882 -0.79768 #> Dataset 8 parent 14 10.2 10.63101 -0.43101 1.882 -0.22903 #> Dataset 8 parent 14 10.8 10.63101 0.16899 1.882 0.08980 #> Dataset 8 parent 27 4.9 3.12435 1.77565 1.882 0.94354 #> Dataset 8 parent 27 3.3 3.12435 0.17565 1.882 0.09334 #> Dataset 8 parent 48 1.6 0.43578 1.16422 1.882 0.61864 #> Dataset 8 parent 48 1.5 0.43578 1.06422 1.882 0.56550 #> Dataset 8 parent 70 1.1 0.05534 1.04466 1.882 0.55510 #> Dataset 8 parent 70 0.9 0.05534 0.84466 1.882 0.44883 #> Dataset 8 A1 1 9.6 7.63450 1.96550 1.882 1.04442 #> Dataset 8 A1 1 7.7 7.63450 0.06550 1.882 0.03481 #> Dataset 8 A1 3 15.0 15.52593 -0.52593 1.882 -0.27947 #> Dataset 8 A1 3 15.1 15.52593 -0.42593 1.882 -0.22633 #> Dataset 8 A1 8 21.2 20.32192 0.87808 1.882 0.46659 #> Dataset 8 A1 8 21.1 20.32192 0.77808 1.882 0.41345 #> Dataset 8 A1 14 19.7 20.09721 -0.39721 1.882 -0.21107 #> Dataset 8 A1 14 18.9 20.09721 -1.19721 1.882 -0.63617 #> Dataset 8 A1 27 17.5 16.37477 1.12523 1.882 0.59792 #> Dataset 8 A1 27 15.9 16.37477 -0.47477 1.882 -0.25228 #> Dataset 8 A1 48 9.5 10.13141 -0.63141 1.882 -0.33551 #> Dataset 8 A1 48 9.8 10.13141 -0.33141 1.882 -0.17610 #> Dataset 8 A1 70 6.2 5.81827 0.38173 1.882 0.20284 #> Dataset 8 A1 70 6.1 5.81827 0.28173 1.882 0.14970 #> Dataset 9 parent 0 99.8 97.48728 2.31272 1.882 1.22892 #> Dataset 9 parent 0 98.3 97.48728 0.81272 1.882 0.43186 #> Dataset 9 parent 1 77.1 79.29476 -2.19476 1.882 -1.16624 #> Dataset 9 parent 1 77.2 79.29476 -2.09476 1.882 -1.11310 #> Dataset 9 parent 3 59.0 55.67060 3.32940 1.882 1.76915 #> Dataset 9 parent 3 58.1 55.67060 2.42940 1.882 1.29092 #> Dataset 9 parent 8 27.4 31.57871 -4.17871 1.882 -2.22046 #> Dataset 9 parent 8 29.2 31.57871 -2.37871 1.882 -1.26398 #> Dataset 9 parent 14 19.1 22.51546 -3.41546 1.882 -1.81489 #> Dataset 9 parent 14 29.6 22.51546 7.08454 1.882 3.76454 #> Dataset 9 parent 27 10.1 14.09074 -3.99074 1.882 -2.12057 #> Dataset 9 parent 27 18.2 14.09074 4.10926 1.882 2.18355 #> Dataset 9 parent 48 4.5 6.95747 -2.45747 1.882 -1.30584 #> Dataset 9 parent 48 9.1 6.95747 2.14253 1.882 1.13848 #> Dataset 9 parent 70 2.3 3.32472 -1.02472 1.882 -0.54451 #> Dataset 9 parent 70 2.9 3.32472 -0.42472 1.882 -0.22569 #> Dataset 9 parent 91 2.0 1.64300 0.35700 1.882 0.18970 #> Dataset 9 parent 91 1.8 1.64300 0.15700 1.882 0.08343 #> Dataset 9 parent 120 2.0 0.62073 1.37927 1.882 0.73291 #> Dataset 9 parent 120 2.2 0.62073 1.57927 1.882 0.83918 #> Dataset 9 A1 1 4.2 3.64568 0.55432 1.882 0.29455 #> Dataset 9 A1 1 3.9 3.64568 0.25432 1.882 0.13514 #> Dataset 9 A1 3 7.4 8.30173 -0.90173 1.882 -0.47916 #> Dataset 9 A1 3 7.9 8.30173 -0.40173 1.882 -0.21347 #> Dataset 9 A1 8 14.5 12.71589 1.78411 1.882 0.94803 #> Dataset 9 A1 8 13.7 12.71589 0.98411 1.882 0.52293 #> Dataset 9 A1 14 14.2 13.90452 0.29548 1.882 0.15701 #> Dataset 9 A1 14 12.2 13.90452 -1.70452 1.882 -0.90574 #> Dataset 9 A1 27 13.7 14.15523 -0.45523 1.882 -0.24190 #> Dataset 9 A1 27 13.2 14.15523 -0.95523 1.882 -0.50759 #> Dataset 9 A1 48 13.6 13.31038 0.28962 1.882 0.15389 #> Dataset 9 A1 48 15.4 13.31038 2.08962 1.882 1.11037 #> Dataset 9 A1 70 10.4 11.85965 -1.45965 1.882 -0.77562 #> Dataset 9 A1 70 11.6 11.85965 -0.25965 1.882 -0.13797 #> Dataset 9 A1 91 10.0 10.36294 -0.36294 1.882 -0.19286 #> Dataset 9 A1 91 9.5 10.36294 -0.86294 1.882 -0.45855 #> Dataset 9 A1 120 9.1 8.43003 0.66997 1.882 0.35601 #> Dataset 9 A1 120 9.0 8.43003 0.56997 1.882 0.30287 #> Dataset 10 parent 0 96.1 93.95603 2.14397 1.882 1.13925 #> Dataset 10 parent 0 94.3 93.95603 0.34397 1.882 0.18278 #> Dataset 10 parent 8 73.9 77.70592 -3.80592 1.882 -2.02237 #> Dataset 10 parent 8 73.9 77.70592 -3.80592 1.882 -2.02237 #> Dataset 10 parent 14 69.4 70.04570 -0.64570 1.882 -0.34311 #> Dataset 10 parent 14 73.1 70.04570 3.05430 1.882 1.62298 #> Dataset 10 parent 21 65.6 64.01710 1.58290 1.882 0.84111 #> Dataset 10 parent 21 65.3 64.01710 1.28290 1.882 0.68170 #> Dataset 10 parent 41 55.9 54.98434 0.91566 1.882 0.48656 #> Dataset 10 parent 41 54.4 54.98434 -0.58434 1.882 -0.31050 #> Dataset 10 parent 63 47.0 49.87137 -2.87137 1.882 -1.52577 #> Dataset 10 parent 63 49.3 49.87137 -0.57137 1.882 -0.30361 #> Dataset 10 parent 91 44.7 45.06727 -0.36727 1.882 -0.19516 #> Dataset 10 parent 91 46.7 45.06727 1.63273 1.882 0.86759 #> Dataset 10 parent 120 42.1 40.76402 1.33598 1.882 0.70991 #> Dataset 10 parent 120 41.3 40.76402 0.53598 1.882 0.28481 #> Dataset 10 A1 8 3.3 4.14599 -0.84599 1.882 -0.44954 #> Dataset 10 A1 8 3.4 4.14599 -0.74599 1.882 -0.39640 #> Dataset 10 A1 14 3.9 6.08478 -2.18478 1.882 -1.16093 #> Dataset 10 A1 14 2.9 6.08478 -3.18478 1.882 -1.69231 #> Dataset 10 A1 21 6.4 7.59411 -1.19411 1.882 -0.63452 #> Dataset 10 A1 21 7.2 7.59411 -0.39411 1.882 -0.20942 #> Dataset 10 A1 41 9.1 9.78292 -0.68292 1.882 -0.36289 #> Dataset 10 A1 41 8.5 9.78292 -1.28292 1.882 -0.68171 #> Dataset 10 A1 63 11.7 10.93274 0.76726 1.882 0.40770 #> Dataset 10 A1 63 12.0 10.93274 1.06726 1.882 0.56711 #> Dataset 10 A1 91 13.3 11.93986 1.36014 1.882 0.72274 #> Dataset 10 A1 91 13.2 11.93986 1.26014 1.882 0.66961 #> Dataset 10 A1 120 14.3 12.79238 1.50762 1.882 0.80111 #> Dataset 10 A1 120 12.1 12.79238 -0.69238 1.882 -0.36791 # The following takes about 6 minutes f_saem_dfop_sfo_deSolve <- saem(f_mmkin[\"DFOP-SFO\", ], solution_type = \"deSolve\", nbiter.saemix = c(200, 80)) #> DINTDY- T (=R1) illegal #> In above message, R1 = 70 #> #> T not in interval TCUR - HU (= R1) to TCUR (=R2) #> In above message, R1 = 53.1042, R2 = 56.6326 #> #> DINTDY- T (=R1) illegal #> In above message, R1 = 91 #> #> T not in interval TCUR - HU (= R1) to TCUR (=R2) #> In above message, R1 = 53.1042, R2 = 56.6326 #> #> DLSODA- Trouble in DINTDY. ITASK = I1, TOUT = R1 #> In above message, I1 = 1 #> #> In above message, R1 = 91 #> #> Error in deSolve::lsoda(y = odeini, times = outtimes, func = lsoda_func, : #> illegal input detected before taking any integration steps - see written message #anova( # f_saem_dfop_sfo, # f_saem_dfop_sfo_deSolve)) # If the model supports it, we can also use eigenvalue based solutions, which # take a similar amount of time #f_saem_sfo_sfo_eigen <- saem(f_mmkin[\"SFO-SFO\", ], solution_type = \"eigen\", # control = list(nbiter.saemix = c(200, 80), nbdisplay = 10)) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":null,"dir":"Reference","previous_headings":"","what":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"dataset used comparison KinGUI ModelMaker check software quality KinGUI original publication (Schäfer et al., 2007). results fitting also included.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"","code":"schaefer07_complex_case"},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"data set data frame 8 observations following 6 variables. time numeric vector parent numeric vector A1 numeric vector B1 numeric vector C1 numeric vector A2 numeric vector results data frame 14 results different parameter values","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"Schäfer D, Mikolasch B, Rainbird P Harvey B (2007). KinGUI: new kinetic software tool evaluations according FOCUS degradation kinetics. : Del Re AAM, Capri E, Fragoulis G Trevisan M (Eds.). Proceedings XIII Symposium Pesticide Chemistry, Piacenza, 2007, p. 916-923.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"","code":"data <- mkin_wide_to_long(schaefer07_complex_case, time = \"time\") model <- mkinmod( parent = list(type = \"SFO\", to = c(\"A1\", \"B1\", \"C1\"), sink = FALSE), A1 = list(type = \"SFO\", to = \"A2\"), B1 = list(type = \"SFO\"), C1 = list(type = \"SFO\"), A2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded # \\dontrun{ fit <- mkinfit(model, data, quiet = TRUE) plot(fit) endpoints(fit) #> $ff #> parent_A1 parent_B1 parent_C1 parent_sink A1_A2 A1_sink #> 0.3809618 0.1954668 0.4235714 0.0000000 0.4479540 0.5520460 #> #> $distimes #> DT50 DT90 #> parent 13.95078 46.34349 #> A1 49.75347 165.27745 #> B1 37.26905 123.80511 #> C1 11.23129 37.30955 #> A2 28.50690 94.69789 #> # } # Compare with the results obtained in the original publication print(schaefer07_complex_results) #> compound parameter KinGUI ModelMaker deviation #> 1 parent degradation rate 0.0496 0.0506 2.0 #> 2 parent DT50 13.9900 13.6900 2.2 #> 3 metabolite A1 formation fraction 0.3803 0.3696 2.9 #> 4 metabolite A1 degradation rate 0.0139 0.0136 2.2 #> 5 metabolite A1 DT50 49.9600 50.8900 1.8 #> 6 metabolite B1 formation fraction 0.1866 0.1818 2.6 #> 7 metabolite B1 degradation rate 0.0175 0.0172 1.7 #> 8 metabolite B1 DT50 39.6100 40.2400 1.6 #> 9 metabolite C1 formation fraction 0.4331 0.4486 3.5 #> 10 metabolite C1 degradation rate 0.0638 0.0700 8.9 #> 11 metabolite C1 DT50 10.8700 9.9000 9.8 #> 12 metabolite A2 formation fraction 0.4529 0.4559 0.7 #> 13 metabolite A2 degradation rate 0.0245 0.0244 0.4 #> 14 metabolite A2 DT50 28.2400 28.4500 0.7"},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":null,"dir":"Reference","previous_headings":"","what":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"function automates replacing unquantified values residue time depth series. time series, function performs part residue processing proposed FOCUS kinetics guidance parent compounds metabolites. two-dimensional residue series time depth, automates proposal Boesten et al (2015).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"","code":"set_nd_nq(res_raw, lod, loq = NA, time_zero_presence = FALSE) set_nd_nq_focus( res_raw, lod, loq = NA, set_first_sample_nd = TRUE, first_sample_nd_value = 0, ignore_below_loq_after_first_nd = TRUE )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"res_raw Character vector residue time series, matrix residue values rows representing depth profiles specific sampling time, columns representing time series residues depth. Values limit detection (lod) coded \"nd\", values limit detection limit quantification, , coded \"nq\". Samples analysed coded \"na\". values \"na\", \"nd\" \"nq\" coercible numeric lod Limit detection (numeric) loq Limit quantification(numeric). Must specified FOCUS rule stop first non-detection applied time_zero_presence assume residues occur time zero? affects samples first sampling time reported \"nd\" (detected). set_first_sample_nd first sample set \"first_sample_nd_value\" case non-detection? first_sample_nd_value Value used first sample non-detection ignore_below_loq_after_first_nd ignore values LOQ first non-detection occurs quantified values?","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"numeric vector, vector supplied, numeric matrix otherwise","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"set_nd_nq_focus(): Set non-detects residue time series according FOCUS rules","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"Boesten, J. J. T. ., van der Linden, . M. ., Beltman, W. H. J. Pol, J. W. (2015). Leaching plant protection products transformation products; Proposals improving assessment leaching groundwater Netherlands — Version 2. Alterra report 2630, Alterra Wageningen UR (University & Research centre) FOCUS (2014) Generic Guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration, Version 1.1, 18 December 2014, p. 251","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"","code":"# FOCUS (2014) p. 75/76 and 131/132 parent_1 <- c(.12, .09, .05, .03, \"nd\", \"nd\", \"nd\", \"nd\", \"nd\", \"nd\") set_nd_nq(parent_1, 0.02) #> [1] 0.12 0.09 0.05 0.03 0.01 NA NA NA NA NA parent_2 <- c(.12, .09, .05, .03, \"nd\", \"nd\", .03, \"nd\", \"nd\", \"nd\") set_nd_nq(parent_2, 0.02) #> [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.03 0.01 NA NA set_nd_nq_focus(parent_2, 0.02, loq = 0.05) #> [1] 0.12 0.09 0.05 0.03 0.01 NA NA NA NA NA parent_3 <- c(.12, .09, .05, .03, \"nd\", \"nd\", .06, \"nd\", \"nd\", \"nd\") set_nd_nq(parent_3, 0.02) #> [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.06 0.01 NA NA set_nd_nq_focus(parent_3, 0.02, loq = 0.05) #> [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.06 0.01 NA NA metabolite <- c(\"nd\", \"nd\", \"nd\", 0.03, 0.06, 0.10, 0.11, 0.10, 0.09, 0.05, 0.03, \"nd\", \"nd\") set_nd_nq(metabolite, 0.02) #> [1] NA NA 0.01 0.03 0.06 0.10 0.11 0.10 0.09 0.05 0.03 0.01 NA set_nd_nq_focus(metabolite, 0.02, 0.05) #> [1] 0.00 NA 0.01 0.03 0.06 0.10 0.11 0.10 0.09 0.05 0.03 0.01 NA # # Boesten et al. (2015), p. 57/58 table_8 <- matrix( c(10, 10, rep(\"nd\", 4), 10, 10, rep(\"nq\", 2), rep(\"nd\", 2), 10, 10, 10, \"nq\", \"nd\", \"nd\", \"nq\", 10, \"nq\", rep(\"nd\", 3), \"nd\", \"nq\", \"nq\", rep(\"nd\", 3), rep(\"nd\", 6), rep(\"nd\", 6)), ncol = 6, byrow = TRUE) set_nd_nq(table_8, 0.5, 1.5, time_zero_presence = TRUE) #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 10.00 10.00 0.25 0.25 NA NA #> [2,] 10.00 10.00 1.00 1.00 0.25 NA #> [3,] 10.00 10.00 10.00 1.00 0.25 NA #> [4,] 1.00 10.00 1.00 0.25 NA NA #> [5,] 0.25 1.00 1.00 0.25 NA NA #> [6,] NA 0.25 0.25 NA NA NA #> [7,] NA NA NA NA NA NA table_10 <- matrix( c(10, 10, rep(\"nd\", 4), 10, 10, rep(\"nd\", 4), 10, 10, 10, rep(\"nd\", 3), \"nd\", 10, rep(\"nd\", 4), rep(\"nd\", 18)), ncol = 6, byrow = TRUE) set_nd_nq(table_10, 0.5, time_zero_presence = TRUE) #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 10.00 10.00 0.25 NA NA NA #> [2,] 10.00 10.00 0.25 NA NA NA #> [3,] 10.00 10.00 10.00 0.25 NA NA #> [4,] 0.25 10.00 0.25 NA NA NA #> [5,] NA 0.25 NA NA NA NA #> [6,] NA NA NA NA NA NA #> [7,] NA NA NA NA NA NA"},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":null,"dir":"Reference","previous_headings":"","what":"Two-component error model — sigma_twocomp","title":"Two-component error model — sigma_twocomp","text":"Function describing standard deviation measurement error dependence measured value \\(y\\):","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Two-component error model — sigma_twocomp","text":"","code":"sigma_twocomp(y, sigma_low, rsd_high)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Two-component error model — sigma_twocomp","text":"y magnitude observed value sigma_low asymptotic minimum standard deviation low observed values rsd_high coefficient describing increase standard deviation magnitude observed value","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Two-component error model — sigma_twocomp","text":"standard deviation response variable.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Two-component error model — sigma_twocomp","text":"$$\\sigma = \\sqrt{ \\sigma_{low}^2 + y^2 * {rsd}_{high}^2}$$ sigma = sqrt(sigma_low^2 + y^2 * rsd_high^2) error model used example Werner et al. (1978). model proposed Rocke Lorenzato (1995) can written form well, assumes approximate lognormal distribution errors high values y.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Two-component error model — sigma_twocomp","text":"Werner, Mario, Brooks, Samuel H., Knott, Lancaster B. (1978) Additive, Multiplicative, Mixed Analytical Errors. Clinical Chemistry 24(11), 1895-1898. Rocke, David M. Lorenzato, Stefan (1995) two-component model measurement error analytical chemistry. Technometrics 37(2), 176-184. Ranke J Meinecke S (2019) Error Models Kinetic Evaluation Chemical Degradation Data. Environments 6(12) 124 doi:10.3390/environments6120124 .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Two-component error model — sigma_twocomp","text":"","code":"times <- c(0, 1, 3, 7, 14, 28, 60, 90, 120) d_pred <- data.frame(time = times, parent = 100 * exp(- 0.03 * times)) set.seed(123456) d_syn <- add_err(d_pred, function(y) sigma_twocomp(y, 1, 0.07), reps = 2, n = 1)[[1]] f_nls <- nls(value ~ SSasymp(time, 0, parent_0, lrc), data = d_syn, start = list(parent_0 = 100, lrc = -3)) library(nlme) f_gnls <- gnls(value ~ SSasymp(time, 0, parent_0, lrc), data = d_syn, na.action = na.omit, start = list(parent_0 = 100, lrc = -3)) if (length(findFunction(\"varConstProp\")) > 0) { f_gnls_tc <- update(f_gnls, weights = varConstProp()) f_gnls_tc_sf <- update(f_gnls_tc, control = list(sigma = 1)) } f_mkin <- mkinfit(\"SFO\", d_syn, error_model = \"const\", quiet = TRUE) f_mkin_tc <- mkinfit(\"SFO\", d_syn, error_model = \"tc\", quiet = TRUE) plot_res(f_mkin_tc, standardized = TRUE) AIC(f_nls, f_gnls, f_gnls_tc, f_gnls_tc_sf, f_mkin, f_mkin_tc) #> df AIC #> f_nls 3 114.4817 #> f_gnls 3 114.4817 #> f_gnls_tc 5 103.6447 #> f_gnls_tc_sf 4 101.6447 #> f_mkin 3 114.4817 #> f_mkin_tc 4 101.6446"},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":null,"dir":"Reference","previous_headings":"","what":"Method to get status information for fit array objects — status","title":"Method to get status information for fit array objects — status","text":"Method get status information fit array objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Method to get status information for fit array objects — status","text":"","code":"status(object, ...) # S3 method for mmkin status(object, ...) # S3 method for status.mmkin print(x, ...) # S3 method for mhmkin status(object, ...) # S3 method for status.mhmkin print(x, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Method to get status information for fit array objects — status","text":"object object investigate ... potential future extensions x object printed","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Method to get status information for fit array objects — status","text":"object dimensions fit array suitable printing method.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Method to get status information for fit array objects — status","text":"","code":"# \\dontrun{ fits <- mmkin( c(\"SFO\", \"FOMC\"), list(\"FOCUS A\" = FOCUS_2006_A, \"FOCUS B\" = FOCUS_2006_C), quiet = TRUE) status(fits) #> dataset #> model FOCUS A FOCUS B #> SFO OK OK #> FOMC C OK #> #> C: Optimisation did not converge: #> false convergence (8) #> OK: No warnings # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary method for class ","title":"Summary method for class ","text":"Lists model equations, initial parameter values, optimised parameters uncertainty statistics, chi2 error levels calculated according FOCUS guidance (2006) defined therein, formation fractions, DT50 values optionally data, consisting observed, predicted residual values.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary method for class ","text":"","code":"# S3 method for mkinfit summary(object, data = TRUE, distimes = TRUE, alpha = 0.05, ...) # S3 method for summary.mkinfit print(x, digits = max(3, getOption(\"digits\") - 3), ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary method for class ","text":"object object class mkinfit. data logical, indicating whether data included summary. distimes logical, indicating whether DT50 DT90 values included. alpha error level confidence interval estimation t distribution ... optional arguments passed methods like print. x object class summary.mkinfit. digits Number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary method for class ","text":"summary function returns list components, among others version, Rversion mkin R versions used date.fit, date.summary dates fit summary produced diffs differential equations used model use_of_ff maximum minimum use made formation fractions bpar Optimised backtransformed parameters data data (see Description ). start starting values bounds, applicable, optimised parameters. fixed values fixed parameters. errmin chi2 error levels observed variable. bparms.ode backtransformed ODE parameters, use starting parameters related models. errparms Error model parameters. ff estimated formation fractions derived fitted model. distimes DT50 DT90 values observed variable. SFORB applicable, eigenvalues fractional eigenvector component g SFORB systems model. print method called side effect, .e. printing summary.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Summary method for class ","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary method for class ","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summary method for class ","text":"","code":"summary(mkinfit(\"SFO\", FOCUS_2006_A, quiet = TRUE)) #> mkin version used for fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:19:39 2023 #> Date of summary: Thu Nov 16 04:19:39 2023 #> #> Equations: #> d_parent/dt = - k_parent * parent #> #> Model predictions using solution type analytical #> #> Fitted using 131 model solutions performed in 0.009 s #> #> Error model: Constant variance #> #> Error model algorithm: OLS #> #> Starting values for parameters to be optimised: #> value type #> parent_0 101.24 state #> k_parent 0.10 deparm #> #> Starting values for the transformed parameters actually optimised: #> value lower upper #> parent_0 101.240000 -Inf Inf #> log_k_parent -2.302585 -Inf Inf #> #> Fixed parameter values: #> None #> #> Results: #> #> AIC BIC logLik #> 55.28197 55.5203 -24.64099 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> Estimate Std. Error Lower Upper #> parent_0 109.200 3.70400 99.630 118.700 #> log_k_parent -3.291 0.09176 -3.527 -3.055 #> sigma 5.266 1.31600 1.882 8.649 #> #> Parameter correlation: #> parent_0 log_k_parent sigma #> parent_0 1.000e+00 5.428e-01 1.642e-07 #> log_k_parent 5.428e-01 1.000e+00 2.507e-07 #> sigma 1.642e-07 2.507e-07 1.000e+00 #> #> 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 109.20000 29.47 4.218e-07 99.6300 118.70000 #> k_parent 0.03722 10.90 5.650e-05 0.0294 0.04712 #> sigma 5.26600 4.00 5.162e-03 1.8820 8.64900 #> #> FOCUS Chi2 error levels in percent: #> err.min n.optim df #> All data 8.385 2 6 #> parent 8.385 2 6 #> #> Estimated disappearance times: #> DT50 DT90 #> parent 18.62 61.87 #> #> Data: #> time variable observed predicted residual #> 0 parent 101.24 109.153 -7.9132 #> 3 parent 99.27 97.622 1.6484 #> 7 parent 90.11 84.119 5.9913 #> 14 parent 72.19 64.826 7.3641 #> 30 parent 29.71 35.738 -6.0283 #> 62 parent 5.98 10.862 -4.8818 #> 90 parent 1.54 3.831 -2.2911 #> 118 parent 0.39 1.351 -0.9613"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary method for class ","title":"Summary method for class ","text":"Shows status information mkinfit objects contained object gives overview ill-defined parameters calculated illparms.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary method for class ","text":"","code":"# S3 method for mmkin summary(object, conf.level = 0.95, ...) # S3 method for summary.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary method for class ","text":"object object class mmkin conf.level confidence level testing parameters ... optional arguments passed methods like print. x object class summary.mmkin. digits number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summary method for class ","text":"","code":"fits <- mmkin( c(\"SFO\", \"FOMC\"), list(\"FOCUS A\" = FOCUS_2006_A, \"FOCUS C\" = FOCUS_2006_C), quiet = TRUE, cores = 1) #> Warning: Optimisation did not converge: #> false convergence (8) summary(fits) #> Error model: Constant variance #> Fitted in 0.454 s #> #> Status: #> dataset #> model FOCUS A FOCUS C #> SFO OK OK #> FOMC C OK #> #> C: Optimisation did not converge: #> false convergence (8) #> OK: No warnings #> #> Ill-defined parameters: #> dataset #> model FOCUS A FOCUS C #> SFO #> FOMC parent_0, alpha, beta, sigma"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary method for class ","title":"Summary method for class ","text":"Lists model equations, initial parameter values, optimised parameters fixed effects (population), random effects (deviations population mean) residual error model, well resulting endpoints formation fractions DT50 values. Optionally (default FALSE), data listed full.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary method for class ","text":"","code":"# S3 method for nlme.mmkin summary( object, data = FALSE, verbose = FALSE, distimes = TRUE, alpha = 0.05, ... ) # S3 method for summary.nlme.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), verbose = x$verbose, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary method for class ","text":"object object class nlme.mmkin data logical, indicating whether full data included summary. verbose summary verbose? distimes logical, indicating whether DT50 DT90 values included. alpha error level confidence interval estimation t distribution ... optional arguments passed methods like print. x object class summary.nlme.mmkin digits Number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary method for class ","text":"summary function returns list based nlme object obtained fit, least following additional components nlmeversion, mkinversion, Rversion nlme, mkin R versions used date.fit, date.summary dates fit summary produced diffs differential equations used degradation model use_of_ff maximum minimum use made formation fractions data data confint_trans Transformed parameters used optimisation, confidence intervals confint_back Backtransformed parameters, confidence intervals available ff estimated formation fractions derived fitted model. distimes DT50 DT90 values observed variable. SFORB applicable, eigenvalues SFORB components model. print method called side effect, .e. printing summary.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary method for class ","text":"Johannes Ranke mkin specific parts José Pinheiro Douglas Bates components inherited nlme","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summary method for class ","text":"","code":"# Generate five datasets following SFO kinetics sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) dt50_sfo_in_pop <- 50 k_in_pop <- log(2) / dt50_sfo_in_pop set.seed(1234) k_in <- rlnorm(5, log(k_in_pop), 0.5) SFO <- mkinmod(parent = mkinsub(\"SFO\")) pred_sfo <- function(k) { mkinpredict(SFO, c(k_parent = k), c(parent = 100), sampling_times) } ds_sfo_mean <- lapply(k_in, pred_sfo) names(ds_sfo_mean) <- paste(\"ds\", 1:5) set.seed(12345) ds_sfo_syn <- lapply(ds_sfo_mean, function(ds) { add_err(ds, sdfunc = function(value) sqrt(1^2 + value^2 * 0.07^2), n = 1)[[1]] }) # \\dontrun{ # Evaluate using mmkin and nlme library(nlme) f_mmkin <- mmkin(\"SFO\", ds_sfo_syn, quiet = TRUE, error_model = \"tc\", cores = 1) #> Warning: Optimisation did not converge: #> iteration limit reached without convergence (10) f_nlme <- nlme(f_mmkin) summary(f_nlme, data = TRUE) #> nlme version used for fitting: 3.1.163 #> mkin version used for pre-fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:19:41 2023 #> Date of summary: Thu Nov 16 04:19:41 2023 #> #> Equations: #> d_parent/dt = - k_parent * parent #> #> Data: #> 90 observations of 1 variable(s) grouped in 5 datasets #> #> Model predictions using solution type analytical #> #> Fitted in 0.182 s using 4 iterations #> #> Variance model: Two-component variance function #> #> Mean of starting values for individual parameters: #> parent_0 log_k_parent #> 101.569 -4.454 #> #> Fixed degradation parameter values: #> None #> #> Results: #> #> AIC BIC logLik #> 584.5 599.5 -286.2 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> lower est. upper #> parent_0 99.371 101.592 103.814 #> log_k_parent -4.973 -4.449 -3.926 #> #> Correlation: #> parnt_0 #> log_k_parent 0.0507 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k_parent ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k_parent Residual #> StdDev: 6.921e-05 0.5863 1 #> #> Variance function: #> Structure: Constant plus proportion of variance covariate #> Formula: ~fitted(.) #> Parameter estimates: #> const prop #> 0.0001208313 0.0789967985 #> #> Backtransformed parameters with asymmetric confidence intervals: #> lower est. upper #> parent_0 99.370882 101.59243 103.81398 #> k_parent 0.006923 0.01168 0.01972 #> #> Estimated disappearance times: #> DT50 DT90 #> parent 59.32 197.1 #> #> Data: #> ds name time observed predicted residual std standardized #> ds 1 parent 0 104.1 101.592 2.50757 8.0255 0.312451 #> ds 1 parent 0 105.0 101.592 3.40757 8.0255 0.424594 #> ds 1 parent 1 98.5 100.796 -2.29571 7.9625 -0.288313 #> ds 1 parent 1 96.1 100.796 -4.69571 7.9625 -0.589725 #> ds 1 parent 3 101.9 99.221 2.67904 7.8381 0.341796 #> ds 1 parent 3 85.2 99.221 -14.02096 7.8381 -1.788812 #> ds 1 parent 7 99.1 96.145 2.95512 7.5951 0.389081 #> ds 1 parent 7 93.0 96.145 -3.14488 7.5951 -0.414065 #> ds 1 parent 14 88.1 90.989 -2.88944 7.1879 -0.401987 #> ds 1 parent 14 84.1 90.989 -6.88944 7.1879 -0.958480 #> ds 1 parent 28 80.2 81.493 -1.29305 6.4377 -0.200857 #> ds 1 parent 28 91.3 81.493 9.80695 6.4377 1.523364 #> ds 1 parent 60 65.1 63.344 1.75642 5.0039 0.351008 #> ds 1 parent 60 65.8 63.344 2.45642 5.0039 0.490898 #> ds 1 parent 90 47.8 50.018 -2.21764 3.9512 -0.561252 #> ds 1 parent 90 53.5 50.018 3.48236 3.9512 0.881335 #> ds 1 parent 120 37.6 39.495 -1.89515 3.1200 -0.607423 #> ds 1 parent 120 39.3 39.495 -0.19515 3.1200 -0.062549 #> ds 2 parent 0 107.9 101.592 6.30757 8.0255 0.785943 #> ds 2 parent 0 102.1 101.592 0.50757 8.0255 0.063245 #> ds 2 parent 1 103.8 100.058 3.74159 7.9043 0.473361 #> ds 2 parent 1 108.6 100.058 8.54159 7.9043 1.080626 #> ds 2 parent 3 91.0 97.060 -6.05952 7.6674 -0.790297 #> ds 2 parent 3 84.9 97.060 -12.15952 7.6674 -1.585874 #> ds 2 parent 7 79.3 91.329 -12.02867 7.2147 -1.667251 #> ds 2 parent 7 100.9 91.329 9.57133 7.2147 1.326647 #> ds 2 parent 14 77.3 82.102 -4.80185 6.4858 -0.740366 #> ds 2 parent 14 83.5 82.102 1.39815 6.4858 0.215571 #> ds 2 parent 28 66.8 66.351 0.44945 5.2415 0.085748 #> ds 2 parent 28 63.3 66.351 -3.05055 5.2415 -0.582002 #> ds 2 parent 60 40.8 40.775 0.02474 3.2211 0.007679 #> ds 2 parent 60 44.8 40.775 4.02474 3.2211 1.249485 #> ds 2 parent 90 27.8 25.832 1.96762 2.0407 0.964198 #> ds 2 parent 90 27.0 25.832 1.16762 2.0407 0.572171 #> ds 2 parent 120 15.2 16.366 -1.16561 1.2928 -0.901595 #> ds 2 parent 120 15.5 16.366 -0.86561 1.2928 -0.669547 #> ds 3 parent 0 97.7 101.592 -3.89243 8.0255 -0.485009 #> ds 3 parent 0 88.2 101.592 -13.39243 8.0255 -1.668740 #> ds 3 parent 1 109.9 99.218 10.68196 7.8379 1.362858 #> ds 3 parent 1 97.8 99.218 -1.41804 7.8379 -0.180921 #> ds 3 parent 3 100.5 94.634 5.86555 7.4758 0.784603 #> ds 3 parent 3 77.4 94.634 -17.23445 7.4758 -2.305360 #> ds 3 parent 7 78.3 86.093 -7.79273 6.8011 -1.145813 #> ds 3 parent 7 90.3 86.093 4.20727 6.8011 0.618620 #> ds 3 parent 14 76.0 72.958 3.04222 5.7634 0.527848 #> ds 3 parent 14 79.1 72.958 6.14222 5.7634 1.065722 #> ds 3 parent 28 46.0 52.394 -6.39404 4.1390 -1.544842 #> ds 3 parent 28 53.4 52.394 1.00596 4.1390 0.243046 #> ds 3 parent 60 25.1 24.582 0.51786 1.9419 0.266676 #> ds 3 parent 60 21.4 24.582 -3.18214 1.9419 -1.638664 #> ds 3 parent 90 11.0 12.092 -1.09202 0.9552 -1.143199 #> ds 3 parent 90 14.2 12.092 2.10798 0.9552 2.206777 #> ds 3 parent 120 5.8 5.948 -0.14810 0.4699 -0.315178 #> ds 3 parent 120 6.1 5.948 0.15190 0.4699 0.323282 #> ds 4 parent 0 95.3 101.592 -6.29243 8.0255 -0.784057 #> ds 4 parent 0 102.0 101.592 0.40757 8.0255 0.050784 #> ds 4 parent 1 104.4 101.125 3.27549 7.9885 0.410025 #> ds 4 parent 1 105.4 101.125 4.27549 7.9885 0.535205 #> ds 4 parent 3 113.7 100.195 13.50487 7.9151 1.706218 #> ds 4 parent 3 82.3 100.195 -17.89513 7.9151 -2.260886 #> ds 4 parent 7 98.1 98.362 -0.26190 7.7703 -0.033706 #> ds 4 parent 7 87.8 98.362 -10.56190 7.7703 -1.359270 #> ds 4 parent 14 97.9 95.234 2.66590 7.5232 0.354357 #> ds 4 parent 14 104.8 95.234 9.56590 7.5232 1.271521 #> ds 4 parent 28 85.0 89.274 -4.27372 7.0523 -0.606001 #> ds 4 parent 28 77.2 89.274 -12.07372 7.0523 -1.712017 #> ds 4 parent 60 82.2 77.013 5.18661 6.0838 0.852526 #> ds 4 parent 60 86.1 77.013 9.08661 6.0838 1.493571 #> ds 4 parent 90 70.5 67.053 3.44692 5.2970 0.650733 #> ds 4 parent 90 61.7 67.053 -5.35308 5.2970 -1.010591 #> ds 4 parent 120 60.0 58.381 1.61905 4.6119 0.351058 #> ds 4 parent 120 56.4 58.381 -1.98095 4.6119 -0.429530 #> ds 5 parent 0 92.6 101.592 -8.99243 8.0255 -1.120485 #> ds 5 parent 0 116.5 101.592 14.90757 8.0255 1.857531 #> ds 5 parent 1 108.0 99.914 8.08560 7.8929 1.024413 #> ds 5 parent 1 104.9 99.914 4.98560 7.8929 0.631655 #> ds 5 parent 3 100.5 96.641 3.85898 7.6343 0.505477 #> ds 5 parent 3 89.5 96.641 -7.14102 7.6343 -0.935383 #> ds 5 parent 7 91.7 90.412 1.28752 7.1423 0.180267 #> ds 5 parent 7 95.1 90.412 4.68752 7.1423 0.656304 #> ds 5 parent 14 82.2 80.463 1.73715 6.3563 0.273295 #> ds 5 parent 14 84.5 80.463 4.03715 6.3563 0.635141 #> ds 5 parent 28 60.5 63.728 -3.22788 5.0343 -0.641178 #> ds 5 parent 28 72.8 63.728 9.07212 5.0343 1.802062 #> ds 5 parent 60 38.3 37.399 0.90061 2.9544 0.304835 #> ds 5 parent 60 40.7 37.399 3.30061 2.9544 1.117174 #> ds 5 parent 90 22.5 22.692 -0.19165 1.7926 -0.106913 #> ds 5 parent 90 20.8 22.692 -1.89165 1.7926 -1.055273 #> ds 5 parent 120 13.4 13.768 -0.36790 1.0876 -0.338259 #> ds 5 parent 120 13.8 13.768 0.03210 1.0876 0.029517 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary method for class ","title":"Summary method for class ","text":"Lists model equations, initial parameter values, optimised parameters fixed effects (population), random effects (deviations population mean) residual error model, well resulting endpoints formation fractions DT50 values. Optionally (default FALSE), data listed full.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary method for class ","text":"","code":"# S3 method for saem.mmkin summary( object, data = FALSE, verbose = FALSE, covariates = NULL, covariate_quantile = 0.5, distimes = TRUE, ... ) # S3 method for summary.saem.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), verbose = x$verbose, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary method for class ","text":"object object class saem.mmkin data logical, indicating whether full data included summary. verbose summary verbose? covariates Numeric vector covariate values variables covariate models object. given, overrides 'covariate_quantile'. covariate_quantile argument effect fitted object covariate models. , default show endpoints median covariate values (50th percentile). distimes logical, indicating whether DT50 DT90 values included. ... optional arguments passed methods like print. x object class summary.saem.mmkin digits Number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary method for class ","text":"summary function returns list based saemix::SaemixObject obtained fit, least following additional components saemixversion, mkinversion, Rversion saemix, mkin R versions used date.fit, date.summary dates fit summary produced diffs differential equations used degradation model use_of_ff maximum minimum use made formation fractions data data confint_trans Transformed parameters used optimisation, confidence intervals confint_back Backtransformed parameters, confidence intervals available confint_errmod Error model parameters confidence intervals ff estimated formation fractions derived fitted model. distimes DT50 DT90 values observed variable. SFORB applicable, eigenvalues SFORB components model. print method called side effect, .e. printing summary.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary method for class ","text":"Johannes Ranke mkin specific parts saemix authors parts inherited saemix.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summary method for class ","text":"","code":"# Generate five datasets following DFOP-SFO kinetics sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) dfop_sfo <- mkinmod(parent = mkinsub(\"DFOP\", \"m1\"), m1 = mkinsub(\"SFO\"), quiet = TRUE) set.seed(1234) k1_in <- rlnorm(5, log(0.1), 0.3) k2_in <- rlnorm(5, log(0.02), 0.3) g_in <- plogis(rnorm(5, qlogis(0.5), 0.3)) f_parent_to_m1_in <- plogis(rnorm(5, qlogis(0.3), 0.3)) k_m1_in <- rlnorm(5, log(0.02), 0.3) pred_dfop_sfo <- function(k1, k2, g, f_parent_to_m1, k_m1) { mkinpredict(dfop_sfo, c(k1 = k1, k2 = k2, g = g, f_parent_to_m1 = f_parent_to_m1, k_m1 = k_m1), c(parent = 100, m1 = 0), sampling_times) } ds_mean_dfop_sfo <- lapply(1:5, function(i) { mkinpredict(dfop_sfo, c(k1 = k1_in[i], k2 = k2_in[i], g = g_in[i], f_parent_to_m1 = f_parent_to_m1_in[i], k_m1 = k_m1_in[i]), c(parent = 100, m1 = 0), sampling_times) }) names(ds_mean_dfop_sfo) <- paste(\"ds\", 1:5) ds_syn_dfop_sfo <- lapply(ds_mean_dfop_sfo, function(ds) { add_err(ds, sdfunc = function(value) sqrt(1^2 + value^2 * 0.07^2), n = 1)[[1]] }) # \\dontrun{ # Evaluate using mmkin and saem f_mmkin_dfop_sfo <- mmkin(list(dfop_sfo), ds_syn_dfop_sfo, quiet = TRUE, error_model = \"tc\", cores = 5) f_saem_dfop_sfo <- saem(f_mmkin_dfop_sfo) print(f_saem_dfop_sfo) #> 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: #> 171 observations of 2 variable(s) grouped in 5 datasets #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 810.8 805.4 -391.4 #> #> Fitted parameters: #> estimate lower upper #> parent_0 100.966822 97.90584 104.0278 #> log_k_m1 -4.076164 -4.17485 -3.9775 #> f_parent_qlogis -0.940902 -1.35358 -0.5282 #> log_k1 -2.363988 -2.71690 -2.0111 #> log_k2 -4.060016 -4.21743 -3.9026 #> g_qlogis -0.029999 -0.44766 0.3877 #> a.1 0.876272 0.67308 1.0795 #> b.1 0.079594 0.06399 0.0952 #> SD.parent_0 0.076322 -76.47330 76.6259 #> SD.log_k_m1 0.005052 -1.09071 1.1008 #> SD.f_parent_qlogis 0.446968 0.16577 0.7282 #> SD.log_k1 0.348786 0.09502 0.6025 #> SD.log_k2 0.147456 0.03111 0.2638 #> SD.g_qlogis 0.348244 0.02794 0.6686 illparms(f_saem_dfop_sfo) #> [1] \"sd(parent_0)\" \"sd(log_k_m1)\" f_saem_dfop_sfo_2 <- update(f_saem_dfop_sfo, no_random_effect = c(\"parent_0\", \"log_k_m1\")) illparms(f_saem_dfop_sfo_2) intervals(f_saem_dfop_sfo_2) #> Approximate 95% confidence intervals #> #> Fixed effects: #> lower est. upper #> parent_0 98.04247057 101.09950884 104.15654711 #> k_m1 0.01528983 0.01687734 0.01862969 #> f_parent_to_m1 0.20447650 0.27932896 0.36887691 #> k1 0.06779844 0.09638524 0.13702550 #> k2 0.01495629 0.01741775 0.02028431 #> g 0.37669311 0.48368409 0.59219202 #> #> Random effects: #> lower est. upper #> sd(f_parent_qlogis) 0.16515100 0.4448330 0.7245149 #> sd(log_k1) 0.08982372 0.3447403 0.5996568 #> sd(log_k2) 0.02806589 0.1419560 0.2558462 #> sd(g_qlogis) 0.04908160 0.3801993 0.7113170 #> #> #> lower est. upper #> a.1 0.67539922 0.87630147 1.07720371 #> b.1 0.06401324 0.07920531 0.09439739 summary(f_saem_dfop_sfo_2, data = TRUE) #> saemix version used for fitting: 3.2 #> mkin version used for pre-fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:19:57 2023 #> Date of summary: Thu Nov 16 04:19:57 2023 #> #> 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: #> 171 observations of 2 variable(s) grouped in 5 datasets #> #> Model predictions using solution type analytical #> #> Fitted in 9.193 s #> Using 300, 100 iterations and 10 chains #> #> Variance model: Two-component variance function #> #> Starting values for degradation parameters: #> parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2 #> 101.65645 -4.05368 -0.94311 -2.35943 -4.07006 #> g_qlogis #> -0.01133 #> #> Fixed degradation parameter values: #> None #> #> Starting values for random effects (square root of initial entries in omega): #> parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2 g_qlogis #> parent_0 6.742 0.0000 0.0000 0.0000 0.0000 0.000 #> log_k_m1 0.000 0.2236 0.0000 0.0000 0.0000 0.000 #> f_parent_qlogis 0.000 0.0000 0.5572 0.0000 0.0000 0.000 #> log_k1 0.000 0.0000 0.0000 0.8031 0.0000 0.000 #> log_k2 0.000 0.0000 0.0000 0.0000 0.2931 0.000 #> g_qlogis 0.000 0.0000 0.0000 0.0000 0.0000 0.807 #> #> Starting values for error model parameters: #> a.1 b.1 #> 1 1 #> #> Results: #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 806.9 802.2 -391.5 #> #> Optimised parameters: #> est. lower upper #> parent_0 101.09951 98.04247 104.1565 #> log_k_m1 -4.08178 -4.18057 -3.9830 #> f_parent_qlogis -0.94779 -1.35855 -0.5370 #> log_k1 -2.33940 -2.69122 -1.9876 #> log_k2 -4.05027 -4.20262 -3.8979 #> g_qlogis -0.06529 -0.50361 0.3730 #> a.1 0.87630 0.67540 1.0772 #> b.1 0.07921 0.06401 0.0944 #> SD.f_parent_qlogis 0.44483 0.16515 0.7245 #> SD.log_k1 0.34474 0.08982 0.5997 #> SD.log_k2 0.14196 0.02807 0.2558 #> SD.g_qlogis 0.38020 0.04908 0.7113 #> #> Correlation: #> parnt_0 lg_k_m1 f_prnt_ log_k1 log_k2 #> log_k_m1 -0.4716 #> f_parent_qlogis -0.2394 0.2617 #> log_k1 0.1677 -0.1566 -0.0659 #> log_k2 0.0165 0.0638 0.0045 0.2013 #> g_qlogis 0.1118 -0.1118 -0.0340 -0.2324 -0.3419 #> #> Random effects: #> est. lower upper #> SD.f_parent_qlogis 0.4448 0.16515 0.7245 #> SD.log_k1 0.3447 0.08982 0.5997 #> SD.log_k2 0.1420 0.02807 0.2558 #> SD.g_qlogis 0.3802 0.04908 0.7113 #> #> Variance model: #> est. lower upper #> a.1 0.87630 0.67540 1.0772 #> b.1 0.07921 0.06401 0.0944 #> #> Backtransformed parameters: #> est. lower upper #> parent_0 101.09951 98.04247 104.15655 #> k_m1 0.01688 0.01529 0.01863 #> f_parent_to_m1 0.27933 0.20448 0.36888 #> k1 0.09639 0.06780 0.13703 #> k2 0.01742 0.01496 0.02028 #> g 0.48368 0.37669 0.59219 #> #> Resulting formation fractions: #> ff #> parent_m1 0.2793 #> parent_sink 0.7207 #> #> Estimated disappearance times: #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 15.66 94.28 28.38 7.191 39.8 #> m1 41.07 136.43 NA NA NA #> #> Data: #> ds name time observed predicted residual std standardized #> ds 1 parent 0 89.8 1.011e+02 -11.29951 8.0554 -1.402721 #> ds 1 parent 0 104.1 1.011e+02 3.00049 8.0554 0.372481 #> ds 1 parent 1 88.7 9.624e+01 -7.53600 7.6726 -0.982195 #> ds 1 parent 1 95.5 9.624e+01 -0.73600 7.6726 -0.095925 #> ds 1 parent 3 81.8 8.736e+01 -5.55672 6.9744 -0.796732 #> ds 1 parent 3 94.5 8.736e+01 7.14328 6.9744 1.024217 #> ds 1 parent 7 71.5 7.251e+01 -1.00511 5.8093 -0.173019 #> ds 1 parent 7 70.3 7.251e+01 -2.20511 5.8093 -0.379585 #> ds 1 parent 14 54.2 5.356e+01 0.63921 4.3319 0.147560 #> ds 1 parent 14 49.6 5.356e+01 -3.96079 4.3319 -0.914340 #> ds 1 parent 28 31.5 3.175e+01 -0.25429 2.6634 -0.095475 #> ds 1 parent 28 28.8 3.175e+01 -2.95429 2.6634 -1.109218 #> ds 1 parent 60 12.1 1.281e+01 -0.71388 1.3409 -0.532390 #> ds 1 parent 60 13.6 1.281e+01 0.78612 1.3409 0.586271 #> ds 1 parent 90 6.2 6.405e+00 -0.20462 1.0125 -0.202083 #> ds 1 parent 90 8.3 6.405e+00 1.89538 1.0125 1.871910 #> ds 1 parent 120 2.2 3.329e+00 -1.12941 0.9151 -1.234165 #> ds 1 parent 120 2.4 3.329e+00 -0.92941 0.9151 -1.015615 #> ds 1 m1 1 0.3 1.177e+00 -0.87699 0.8812 -0.995168 #> ds 1 m1 1 0.2 1.177e+00 -0.97699 0.8812 -1.108644 #> ds 1 m1 3 2.2 3.268e+00 -1.06821 0.9137 -1.169063 #> ds 1 m1 3 3.0 3.268e+00 -0.26821 0.9137 -0.293536 #> ds 1 m1 7 6.5 6.555e+00 -0.05539 1.0186 -0.054377 #> ds 1 m1 7 5.0 6.555e+00 -1.55539 1.0186 -1.527022 #> ds 1 m1 14 10.2 1.017e+01 0.03108 1.1902 0.026117 #> ds 1 m1 14 9.5 1.017e+01 -0.66892 1.1902 -0.562010 #> ds 1 m1 28 12.2 1.270e+01 -0.50262 1.3342 -0.376708 #> ds 1 m1 28 13.4 1.270e+01 0.69738 1.3342 0.522686 #> ds 1 m1 60 11.8 1.078e+01 1.01734 1.2236 0.831403 #> ds 1 m1 60 13.2 1.078e+01 2.41734 1.2236 1.975530 #> ds 1 m1 90 6.6 7.686e+00 -1.08586 1.0670 -1.017675 #> ds 1 m1 90 9.3 7.686e+00 1.61414 1.0670 1.512779 #> ds 1 m1 120 3.5 5.205e+00 -1.70467 0.9684 -1.760250 #> ds 1 m1 120 5.4 5.205e+00 0.19533 0.9684 0.201701 #> ds 2 parent 0 118.0 1.011e+02 16.90049 8.0554 2.098026 #> ds 2 parent 0 99.8 1.011e+02 -1.29951 8.0554 -0.161321 #> ds 2 parent 1 90.2 9.574e+01 -5.53784 7.6334 -0.725473 #> ds 2 parent 1 94.6 9.574e+01 -1.13784 7.6334 -0.149060 #> ds 2 parent 3 96.1 8.638e+01 9.72233 6.8975 1.409551 #> ds 2 parent 3 78.4 8.638e+01 -7.97767 6.8975 -1.156610 #> ds 2 parent 7 77.9 7.194e+01 5.95854 5.7651 1.033547 #> ds 2 parent 7 77.7 7.194e+01 5.75854 5.7651 0.998856 #> ds 2 parent 14 56.0 5.558e+01 0.42141 4.4885 0.093888 #> ds 2 parent 14 54.7 5.558e+01 -0.87859 4.4885 -0.195742 #> ds 2 parent 28 36.6 3.852e+01 -1.92382 3.1746 -0.605999 #> ds 2 parent 28 36.8 3.852e+01 -1.72382 3.1746 -0.543000 #> ds 2 parent 60 22.1 2.108e+01 1.02043 1.8856 0.541168 #> ds 2 parent 60 24.7 2.108e+01 3.62043 1.8856 1.920034 #> ds 2 parent 90 12.4 1.250e+01 -0.09675 1.3220 -0.073184 #> ds 2 parent 90 10.8 1.250e+01 -1.69675 1.3220 -1.283492 #> ds 2 parent 120 6.8 7.426e+00 -0.62587 1.0554 -0.593027 #> ds 2 parent 120 7.9 7.426e+00 0.47413 1.0554 0.449242 #> ds 2 m1 1 1.3 1.417e+00 -0.11735 0.8835 -0.132825 #> ds 2 m1 3 3.7 3.823e+00 -0.12301 0.9271 -0.132673 #> ds 2 m1 3 4.7 3.823e+00 0.87699 0.9271 0.945909 #> ds 2 m1 7 8.1 7.288e+00 0.81180 1.0494 0.773619 #> ds 2 m1 7 7.9 7.288e+00 0.61180 1.0494 0.583025 #> ds 2 m1 14 10.1 1.057e+01 -0.46957 1.2119 -0.387459 #> ds 2 m1 14 10.3 1.057e+01 -0.26957 1.2119 -0.222432 #> ds 2 m1 28 10.7 1.234e+01 -1.63555 1.3124 -1.246185 #> ds 2 m1 28 12.2 1.234e+01 -0.13555 1.3124 -0.103281 #> ds 2 m1 60 10.7 1.065e+01 0.04641 1.2165 0.038151 #> ds 2 m1 60 12.5 1.065e+01 1.84641 1.2165 1.517773 #> ds 2 m1 90 9.1 8.177e+00 0.92337 1.0896 0.847403 #> ds 2 m1 90 7.4 8.177e+00 -0.77663 1.0896 -0.712734 #> ds 2 m1 120 6.1 5.966e+00 0.13404 0.9956 0.134631 #> ds 2 m1 120 4.5 5.966e+00 -1.46596 0.9956 -1.472460 #> ds 3 parent 0 106.2 1.011e+02 5.10049 8.0554 0.633175 #> ds 3 parent 0 106.9 1.011e+02 5.80049 8.0554 0.720073 #> ds 3 parent 1 107.4 9.365e+01 13.74627 7.4695 1.840332 #> ds 3 parent 1 96.1 9.365e+01 2.44627 7.4695 0.327504 #> ds 3 parent 3 79.4 8.139e+01 -1.99118 6.5059 -0.306058 #> ds 3 parent 3 82.6 8.139e+01 1.20882 6.5059 0.185803 #> ds 3 parent 7 63.9 6.445e+01 -0.54666 5.1792 -0.105549 #> ds 3 parent 7 62.4 6.445e+01 -2.04666 5.1792 -0.395170 #> ds 3 parent 14 51.0 4.830e+01 2.69944 3.9247 0.687800 #> ds 3 parent 14 47.1 4.830e+01 -1.20056 3.9247 -0.305896 #> ds 3 parent 28 36.1 3.426e+01 1.83885 2.8516 0.644839 #> ds 3 parent 28 36.6 3.426e+01 2.33885 2.8516 0.820177 #> ds 3 parent 60 20.1 1.968e+01 0.42208 1.7881 0.236053 #> ds 3 parent 60 19.8 1.968e+01 0.12208 1.7881 0.068273 #> ds 3 parent 90 11.3 1.194e+01 -0.64013 1.2893 -0.496496 #> ds 3 parent 90 10.7 1.194e+01 -1.24013 1.2893 -0.961865 #> ds 3 parent 120 8.2 7.247e+00 0.95264 1.0476 0.909381 #> ds 3 parent 120 7.3 7.247e+00 0.05264 1.0476 0.050254 #> ds 3 m1 0 0.8 -2.956e-12 0.80000 0.8763 0.912928 #> ds 3 m1 1 1.8 1.757e+00 0.04318 0.8873 0.048666 #> ds 3 m1 1 2.3 1.757e+00 0.54318 0.8873 0.612186 #> ds 3 m1 3 4.2 4.566e+00 -0.36607 0.9480 -0.386149 #> ds 3 m1 3 4.1 4.566e+00 -0.46607 0.9480 -0.491634 #> ds 3 m1 7 6.8 8.157e+00 -1.35680 1.0887 -1.246241 #> ds 3 m1 7 10.1 8.157e+00 1.94320 1.0887 1.784855 #> ds 3 m1 14 11.4 1.085e+01 0.55367 1.2272 0.451182 #> ds 3 m1 14 12.8 1.085e+01 1.95367 1.2272 1.592023 #> ds 3 m1 28 11.5 1.149e+01 0.01098 1.2633 0.008689 #> ds 3 m1 28 10.6 1.149e+01 -0.88902 1.2633 -0.703717 #> ds 3 m1 60 7.5 9.295e+00 -1.79500 1.1445 -1.568351 #> ds 3 m1 60 8.6 9.295e+00 -0.69500 1.1445 -0.607245 #> ds 3 m1 90 7.3 7.017e+00 0.28305 1.0377 0.272775 #> ds 3 m1 90 8.1 7.017e+00 1.08305 1.0377 1.043720 #> ds 3 m1 120 5.3 5.087e+00 0.21272 0.9645 0.220547 #> ds 3 m1 120 3.8 5.087e+00 -1.28728 0.9645 -1.334660 #> ds 4 parent 0 104.7 1.011e+02 3.60049 8.0554 0.446965 #> ds 4 parent 0 88.3 1.011e+02 -12.79951 8.0554 -1.588930 #> ds 4 parent 1 94.2 9.755e+01 -3.35176 7.7762 -0.431030 #> ds 4 parent 1 94.6 9.755e+01 -2.95176 7.7762 -0.379591 #> ds 4 parent 3 78.1 9.095e+01 -12.85198 7.2570 -1.770981 #> ds 4 parent 3 96.5 9.095e+01 5.54802 7.2570 0.764508 #> ds 4 parent 7 76.2 7.949e+01 -3.29267 6.3569 -0.517966 #> ds 4 parent 7 77.8 7.949e+01 -1.69267 6.3569 -0.266272 #> ds 4 parent 14 70.8 6.384e+01 6.95621 5.1321 1.355423 #> ds 4 parent 14 67.3 6.384e+01 3.45621 5.1321 0.673445 #> ds 4 parent 28 43.1 4.345e+01 -0.35291 3.5515 -0.099370 #> ds 4 parent 28 45.1 4.345e+01 1.64709 3.5515 0.463771 #> ds 4 parent 60 21.3 2.137e+01 -0.07478 1.9063 -0.039229 #> ds 4 parent 60 23.5 2.137e+01 2.12522 1.9063 1.114813 #> ds 4 parent 90 11.8 1.205e+01 -0.24925 1.2957 -0.192375 #> ds 4 parent 90 12.1 1.205e+01 0.05075 1.2957 0.039168 #> ds 4 parent 120 7.0 6.967e+00 0.03315 1.0356 0.032013 #> ds 4 parent 120 6.2 6.967e+00 -0.76685 1.0356 -0.740510 #> ds 4 m1 0 1.6 1.421e-13 1.60000 0.8763 1.825856 #> ds 4 m1 1 0.9 7.250e-01 0.17503 0.8782 0.199310 #> ds 4 m1 3 3.7 2.038e+00 1.66201 0.8910 1.865236 #> ds 4 m1 3 2.0 2.038e+00 -0.03799 0.8910 -0.042637 #> ds 4 m1 7 3.6 4.186e+00 -0.58623 0.9369 -0.625692 #> ds 4 m1 7 3.8 4.186e+00 -0.38623 0.9369 -0.412230 #> ds 4 m1 14 7.1 6.752e+00 0.34768 1.0266 0.338666 #> ds 4 m1 14 6.6 6.752e+00 -0.15232 1.0266 -0.148372 #> ds 4 m1 28 9.5 9.034e+00 0.46628 1.1313 0.412159 #> ds 4 m1 28 9.3 9.034e+00 0.26628 1.1313 0.235373 #> ds 4 m1 60 8.3 8.634e+00 -0.33359 1.1115 -0.300112 #> ds 4 m1 60 9.0 8.634e+00 0.36641 1.1115 0.329645 #> ds 4 m1 90 6.6 6.671e+00 -0.07091 1.0233 -0.069295 #> ds 4 m1 90 7.7 6.671e+00 1.02909 1.0233 1.005691 #> ds 4 m1 120 3.7 4.823e+00 -1.12301 0.9559 -1.174763 #> ds 4 m1 120 3.5 4.823e+00 -1.32301 0.9559 -1.383979 #> ds 5 parent 0 110.4 1.011e+02 9.30049 8.0554 1.154563 #> ds 5 parent 0 112.1 1.011e+02 11.00049 8.0554 1.365601 #> ds 5 parent 1 93.5 9.440e+01 -0.90098 7.5282 -0.119681 #> ds 5 parent 1 91.0 9.440e+01 -3.40098 7.5282 -0.451764 #> ds 5 parent 3 71.0 8.287e+01 -11.86698 6.6217 -1.792122 #> ds 5 parent 3 89.7 8.287e+01 6.83302 6.6217 1.031907 #> ds 5 parent 7 60.4 6.562e+01 -5.22329 5.2711 -0.990936 #> ds 5 parent 7 59.1 6.562e+01 -6.52329 5.2711 -1.237566 #> ds 5 parent 14 56.5 4.739e+01 9.10588 3.8548 2.362225 #> ds 5 parent 14 47.0 4.739e+01 -0.39412 3.8548 -0.102240 #> ds 5 parent 28 30.2 3.118e+01 -0.98128 2.6206 -0.374451 #> ds 5 parent 28 23.9 3.118e+01 -7.28128 2.6206 -2.778500 #> ds 5 parent 60 17.0 1.804e+01 -1.03959 1.6761 -0.620224 #> ds 5 parent 60 18.7 1.804e+01 0.66041 1.6761 0.394008 #> ds 5 parent 90 11.3 1.165e+01 -0.35248 1.2727 -0.276958 #> ds 5 parent 90 11.9 1.165e+01 0.24752 1.2727 0.194488 #> ds 5 parent 120 9.0 7.556e+00 1.44368 1.0612 1.360449 #> ds 5 parent 120 8.1 7.556e+00 0.54368 1.0612 0.512338 #> ds 5 m1 0 0.7 -1.421e-14 0.70000 0.8763 0.798812 #> ds 5 m1 1 3.0 3.160e+00 -0.15979 0.9113 -0.175340 #> ds 5 m1 1 2.6 3.160e+00 -0.55979 0.9113 -0.614254 #> ds 5 m1 3 5.1 8.448e+00 -3.34789 1.1026 -3.036487 #> ds 5 m1 3 7.5 8.448e+00 -0.94789 1.1026 -0.859720 #> ds 5 m1 7 16.5 1.581e+01 0.68760 1.5286 0.449839 #> ds 5 m1 7 19.0 1.581e+01 3.18760 1.5286 2.085373 #> ds 5 m1 14 22.9 2.218e+01 0.71983 1.9632 0.366658 #> ds 5 m1 14 23.2 2.218e+01 1.01983 1.9632 0.519469 #> ds 5 m1 28 22.2 2.425e+01 -2.05105 2.1113 -0.971479 #> ds 5 m1 28 24.4 2.425e+01 0.14895 2.1113 0.070552 #> ds 5 m1 60 15.5 1.876e+01 -3.25968 1.7250 -1.889646 #> ds 5 m1 60 19.8 1.876e+01 1.04032 1.7250 0.603074 #> ds 5 m1 90 14.9 1.365e+01 1.25477 1.3914 0.901806 #> ds 5 m1 90 14.2 1.365e+01 0.55477 1.3914 0.398714 #> ds 5 m1 120 10.9 9.726e+00 1.17443 1.1667 1.006587 #> ds 5 m1 120 10.4 9.726e+00 0.67443 1.1667 0.578044 # Add a correlation between random effects of g and k2 cov_model_3 <- f_saem_dfop_sfo_2$so@model@covariance.model cov_model_3[\"log_k2\", \"g_qlogis\"] <- 1 cov_model_3[\"g_qlogis\", \"log_k2\"] <- 1 f_saem_dfop_sfo_3 <- update(f_saem_dfop_sfo, covariance.model = cov_model_3) intervals(f_saem_dfop_sfo_3) #> Approximate 95% confidence intervals #> #> Fixed effects: #> lower est. upper #> parent_0 98.42519529 101.51623115 104.60726702 #> k_m1 0.01505059 0.01662123 0.01835577 #> f_parent_to_m1 0.20100222 0.27477835 0.36332008 #> k1 0.07347479 0.10139028 0.13991179 #> k2 0.01469861 0.01771120 0.02134125 #> g 0.35506898 0.46263682 0.57379888 #> #> Random effects: #> lower est. upper #> sd(f_parent_qlogis) 0.3827416 0.4435866 0.5044315 #> sd(log_k1) 0.1226277 0.2981783 0.4737289 #> sd(log_k2) -0.5457764 0.1912531 0.9282825 #> sd(g_qlogis) 0.1483976 0.3997298 0.6510619 #> corr(log_k2,g_qlogis) -0.8537145 -0.5845703 -0.3154261 #> #> #> lower est. upper #> a.1 0.6732869 0.87421677 1.0751467 #> b.1 0.0640392 0.07925135 0.0944635 # The correlation does not improve the fit judged by AIC and BIC, although # the likelihood is higher with the additional parameter anova(f_saem_dfop_sfo, f_saem_dfop_sfo_2, f_saem_dfop_sfo_3) #> Data: 171 observations of 2 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik #> f_saem_dfop_sfo_2 12 806.91 802.23 -391.46 #> f_saem_dfop_sfo_3 13 807.96 802.88 -390.98 #> f_saem_dfop_sfo 14 810.83 805.36 -391.41 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary_listing.html","id":null,"dir":"Reference","previous_headings":"","what":"Display the output of a summary function according to the output format — summary_listing","title":"Display the output of a summary function according to the output format — summary_listing","text":"function intended use R markdown code chunk chunk option results = \"asis\".","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary_listing.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Display the output of a summary function according to the output format — summary_listing","text":"","code":"summary_listing(object, caption = NULL, label = NULL, clearpage = TRUE) tex_listing(object, caption = NULL, label = NULL, clearpage = TRUE) html_listing(object, caption = NULL)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary_listing.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Display the output of a summary function according to the output format — summary_listing","text":"object object summary listed caption optional caption label optional label, ignored html output clearpage new page started listing? Ignored html output","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":null,"dir":"Reference","previous_headings":"","what":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"12 datasets generated using four different models three different variance components. four models either SFO DFOP model either two sequential two parallel metabolites. Variance component '' based normal distribution standard deviation 3, Variance component 'b' also based normal distribution, standard deviation 7. Variance component 'c' based error model Rocke Lorenzato (1995), minimum standard deviation (small y values) 0.5, proportionality constant 0.07 increase standard deviation y. Note simplified version error model proposed Rocke Lorenzato (1995), model error measured values approximates lognormal distribution high values, whereas using normally distributed error components along. Initial concentrations metabolites values adding variance component resulted value assumed limit detection 0.1 set NA. example, first dataset title SFO_lin_a based SFO model two sequential metabolites (linear pathway), added variance component ''. Compare also code example section see degradation models.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"","code":"synthetic_data_for_UBA_2014"},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"list containing twelve datasets R6 class defined mkinds, containing, among others, following components title name dataset, e.g. SFO_lin_a data data frame data form expected mkinfit","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"Ranke (2014) Prüfung und Validierung von Modellierungssoftware als Alternative zu ModelMaker 4.0, Umweltbundesamt Projektnummer 27452 Rocke, David M. und Lorenzato, Stefan (1995) two-component model measurement error analytical chemistry. Technometrics 37(2), 176-184.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"","code":"# \\dontrun{ # The data have been generated using the following kinetic models m_synth_SFO_lin <- mkinmod(parent = list(type = \"SFO\", to = \"M1\"), M1 = list(type = \"SFO\", to = \"M2\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded m_synth_SFO_par <- mkinmod(parent = list(type = \"SFO\", to = c(\"M1\", \"M2\"), sink = FALSE), M1 = list(type = \"SFO\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded m_synth_DFOP_lin <- mkinmod(parent = list(type = \"DFOP\", to = \"M1\"), M1 = list(type = \"SFO\", to = \"M2\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded m_synth_DFOP_par <- mkinmod(parent = list(type = \"DFOP\", to = c(\"M1\", \"M2\"), sink = FALSE), M1 = list(type = \"SFO\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded # The model predictions without intentional error were generated as follows sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) d_synth_SFO_lin <- mkinpredict(m_synth_SFO_lin, c(k_parent = 0.7, f_parent_to_M1 = 0.8, k_M1 = 0.3, f_M1_to_M2 = 0.7, k_M2 = 0.02), c(parent = 100, M1 = 0, M2 = 0), sampling_times) d_synth_DFOP_lin <- mkinpredict(m_synth_DFOP_lin, c(k1 = 0.2, k2 = 0.02, g = 0.5, f_parent_to_M1 = 0.5, k_M1 = 0.3, f_M1_to_M2 = 0.7, k_M2 = 0.02), c(parent = 100, M1 = 0, M2 = 0), sampling_times) d_synth_SFO_par <- mkinpredict(m_synth_SFO_par, c(k_parent = 0.2, f_parent_to_M1 = 0.8, k_M1 = 0.01, f_parent_to_M2 = 0.2, k_M2 = 0.02), c(parent = 100, M1 = 0, M2 = 0), sampling_times) d_synth_DFOP_par <- mkinpredict(m_synth_DFOP_par, c(k1 = 0.3, k2 = 0.02, g = 0.7, f_parent_to_M1 = 0.6, k_M1 = 0.04, f_parent_to_M2 = 0.4, k_M2 = 0.01), c(parent = 100, M1 = 0, M2 = 0), sampling_times) # Construct names for datasets with errors d_synth_names = paste0(\"d_synth_\", c(\"SFO_lin\", \"SFO_par\", \"DFOP_lin\", \"DFOP_par\")) # Original function used or adding errors. The add_err function now published # with this package is a slightly generalised version where the names of # secondary compartments that should have an initial value of zero (M1 and M2 # in this case) are not hardcoded any more. # add_err = function(d, sdfunc, LOD = 0.1, reps = 2, seed = 123456789) # { # set.seed(seed) # d_long = mkin_wide_to_long(d, time = \"time\") # d_rep = data.frame(lapply(d_long, rep, each = 2)) # d_rep$value = rnorm(length(d_rep$value), d_rep$value, sdfunc(d_rep$value)) # # d_rep[d_rep$time == 0 & d_rep$name %in% c(\"M1\", \"M2\"), \"value\"] <- 0 # d_NA <- transform(d_rep, value = ifelse(value < LOD, NA, value)) # d_NA$value <- round(d_NA$value, 1) # return(d_NA) # } # The following is the simplified version of the two-component model of Rocke # and Lorenzato (1995) sdfunc_twocomp = function(value, sd_low, rsd_high) { sqrt(sd_low^2 + value^2 * rsd_high^2) } # Add the errors. for (d_synth_name in d_synth_names) { d_synth = get(d_synth_name) assign(paste0(d_synth_name, \"_a\"), add_err(d_synth, function(value) 3)) assign(paste0(d_synth_name, \"_b\"), add_err(d_synth, function(value) 7)) assign(paste0(d_synth_name, \"_c\"), add_err(d_synth, function(value) sdfunc_twocomp(value, 0.5, 0.07))) } d_synth_err_names = c( paste(rep(d_synth_names, each = 3), letters[1:3], sep = \"_\") ) # This is just one example of an evaluation using the kinetic model used for # the generation of the data fit <- mkinfit(m_synth_SFO_lin, synthetic_data_for_UBA_2014[[1]]$data, quiet = TRUE) plot_sep(fit) summary(fit) #> mkin version used for fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:20:07 2023 #> Date of summary: Thu Nov 16 04:20:07 2023 #> #> Equations: #> d_parent/dt = - k_parent * parent #> d_M1/dt = + f_parent_to_M1 * k_parent * parent - k_M1 * M1 #> d_M2/dt = + f_M1_to_M2 * k_M1 * M1 - k_M2 * M2 #> #> Model predictions using solution type deSolve #> #> Fitted using 848 model solutions performed in 0.166 s #> #> Error model: Constant variance #> #> Error model algorithm: OLS #> #> Starting values for parameters to be optimised: #> value type #> parent_0 101.3500 state #> k_parent 0.1000 deparm #> k_M1 0.1001 deparm #> k_M2 0.1002 deparm #> f_parent_to_M1 0.5000 deparm #> f_M1_to_M2 0.5000 deparm #> #> Starting values for the transformed parameters actually optimised: #> value lower upper #> parent_0 101.350000 -Inf Inf #> log_k_parent -2.302585 -Inf Inf #> log_k_M1 -2.301586 -Inf Inf #> log_k_M2 -2.300587 -Inf Inf #> f_parent_qlogis 0.000000 -Inf Inf #> f_M1_qlogis 0.000000 -Inf Inf #> #> Fixed parameter values: #> value type #> M1_0 0 state #> M2_0 0 state #> #> Results: #> #> AIC BIC logLik #> 188.7274 200.3723 -87.36368 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> Estimate Std. Error Lower Upper #> parent_0 102.1000 1.57000 98.8600 105.3000 #> log_k_parent -0.3020 0.03885 -0.3812 -0.2229 #> log_k_M1 -1.2070 0.07123 -1.3520 -1.0620 #> log_k_M2 -3.9010 0.06571 -4.0350 -3.7670 #> f_parent_qlogis 1.2010 0.23530 0.7216 1.6800 #> f_M1_qlogis 0.9589 0.24890 0.4520 1.4660 #> sigma 2.2730 0.25740 1.7490 2.7970 #> #> Parameter correlation: #> parent_0 log_k_parent log_k_M1 log_k_M2 f_parent_qlogis #> parent_0 1.000e+00 3.933e-01 -1.605e-01 2.819e-02 -4.624e-01 #> log_k_parent 3.933e-01 1.000e+00 -4.082e-01 7.166e-02 -5.682e-01 #> log_k_M1 -1.605e-01 -4.082e-01 1.000e+00 -3.929e-01 7.478e-01 #> log_k_M2 2.819e-02 7.166e-02 -3.929e-01 1.000e+00 -2.658e-01 #> f_parent_qlogis -4.624e-01 -5.682e-01 7.478e-01 -2.658e-01 1.000e+00 #> f_M1_qlogis 1.614e-01 4.102e-01 -8.109e-01 5.419e-01 -8.605e-01 #> sigma -1.377e-08 7.536e-10 1.089e-08 -4.422e-08 7.124e-09 #> f_M1_qlogis sigma #> parent_0 1.614e-01 -1.377e-08 #> log_k_parent 4.102e-01 7.536e-10 #> log_k_M1 -8.109e-01 1.089e-08 #> log_k_M2 5.419e-01 -4.422e-08 #> f_parent_qlogis -8.605e-01 7.124e-09 #> f_M1_qlogis 1.000e+00 -2.685e-08 #> sigma -2.685e-08 1.000e+00 #> #> 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 102.10000 65.000 7.281e-36 98.86000 105.30000 #> k_parent 0.73930 25.740 2.948e-23 0.68310 0.80020 #> k_M1 0.29920 14.040 1.577e-15 0.25880 0.34590 #> k_M2 0.02023 15.220 1.653e-16 0.01769 0.02312 #> f_parent_to_M1 0.76870 18.370 7.295e-19 0.67300 0.84290 #> f_M1_to_M2 0.72290 14.500 6.418e-16 0.61110 0.81240 #> sigma 2.27300 8.832 2.161e-10 1.74900 2.79700 #> #> FOCUS Chi2 error levels in percent: #> err.min n.optim df #> All data 8.454 6 17 #> parent 8.660 2 6 #> M1 10.583 2 5 #> M2 3.586 2 6 #> #> Resulting formation fractions: #> ff #> parent_M1 0.7687 #> parent_sink 0.2313 #> M1_M2 0.7229 #> M1_sink 0.2771 #> #> Estimated disappearance times: #> DT50 DT90 #> parent 0.9376 3.114 #> M1 2.3170 7.697 #> M2 34.2689 113.839 #> #> Data: #> time variable observed predicted residual #> 0 parent 101.5 1.021e+02 -0.56248 #> 0 parent 101.2 1.021e+02 -0.86248 #> 1 parent 53.9 4.873e+01 5.17118 #> 1 parent 47.5 4.873e+01 -1.22882 #> 3 parent 10.4 1.111e+01 -0.70773 #> 3 parent 7.6 1.111e+01 -3.50773 #> 7 parent 1.1 5.772e-01 0.52283 #> 7 parent 0.3 5.772e-01 -0.27717 #> 14 parent 3.5 3.264e-03 3.49674 #> 28 parent 3.2 1.045e-07 3.20000 #> 90 parent 0.6 9.532e-10 0.60000 #> 120 parent 3.5 -5.940e-10 3.50000 #> 1 M1 36.4 3.479e+01 1.61088 #> 1 M1 37.4 3.479e+01 2.61088 #> 3 M1 34.3 3.937e+01 -5.07027 #> 3 M1 39.8 3.937e+01 0.42973 #> 7 M1 15.1 1.549e+01 -0.38715 #> 7 M1 17.8 1.549e+01 2.31285 #> 14 M1 5.8 1.995e+00 3.80469 #> 14 M1 1.2 1.995e+00 -0.79531 #> 60 M1 0.5 2.111e-06 0.50000 #> 90 M1 3.2 -9.672e-10 3.20000 #> 120 M1 1.5 7.670e-10 1.50000 #> 120 M1 0.6 7.670e-10 0.60000 #> 1 M2 4.8 4.455e+00 0.34517 #> 3 M2 20.9 2.153e+01 -0.62527 #> 3 M2 19.3 2.153e+01 -2.22527 #> 7 M2 42.0 4.192e+01 0.07941 #> 7 M2 43.1 4.192e+01 1.17941 #> 14 M2 49.4 4.557e+01 3.83353 #> 14 M2 44.3 4.557e+01 -1.26647 #> 28 M2 34.6 3.547e+01 -0.87275 #> 28 M2 33.0 3.547e+01 -2.47275 #> 60 M2 18.8 1.858e+01 0.21837 #> 60 M2 17.6 1.858e+01 -0.98163 #> 90 M2 10.6 1.013e+01 0.47130 #> 90 M2 10.8 1.013e+01 0.67130 #> 120 M2 9.8 5.521e+00 4.27893 #> 120 M2 3.3 5.521e+00 -2.22107 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":null,"dir":"Reference","previous_headings":"","what":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"datasets used comparative validation several kinetic evaluation software packages (Ranke, 2014).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"","code":"test_data_from_UBA_2014"},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"list containing three datasets R6 class defined mkinds. dataset , among others, following components title name dataset, e.g. UBA_2014_WS_river data data frame data form expected mkinfit","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"Ranke (2014) Prüfung und Validierung von Modellierungssoftware als Alternative zu ModelMaker 4.0, Umweltbundesamt Projektnummer 27452","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"","code":"# \\dontrun{ # This is a level P-II evaluation of the dataset according to the FOCUS kinetics # guidance. Due to the strong correlation of the parameter estimates, the # covariance matrix is not returned. Note that level P-II evaluations are # generally considered deprecated due to the frequent occurrence of such # large parameter correlations, among other reasons (e.g. the adequacy of the # model). m_ws <- mkinmod(parent_w = mkinsub(\"SFO\", \"parent_s\"), parent_s = mkinsub(\"SFO\", \"parent_w\")) #> Temporary DLL for differentials generated and loaded f_river <- mkinfit(m_ws, test_data_from_UBA_2014[[1]]$data, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data plot_sep(f_river) summary(f_river)$bpar #> Warning: Could not calculate correlation; no covariance matrix #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_w_0 95.91998118 NA NA NA NA NA #> k_parent_w 0.41145375 NA NA NA NA NA #> k_parent_s 0.04663944 NA NA NA NA NA #> f_parent_w_to_parent_s 0.12467894 NA NA NA NA NA #> f_parent_s_to_parent_w 0.50000000 NA NA NA NA NA #> sigma 3.13612618 NA NA NA NA NA mkinerrmin(f_river) #> err.min n.optim df #> All data 0.1090929 5 6 #> parent_w 0.0817436 3 3 #> parent_s 0.1619965 2 3 # This is the evaluation used for the validation of software packages # in the expertise from 2014 m_soil <- mkinmod(parent = mkinsub(\"SFO\", c(\"M1\", \"M2\")), M1 = mkinsub(\"SFO\", \"M3\"), M2 = mkinsub(\"SFO\", \"M3\"), M3 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded f_soil <- mkinfit(m_soil, test_data_from_UBA_2014[[3]]$data, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data plot_sep(f_soil, lpos = c(\"topright\", \"topright\", \"topright\", \"bottomright\")) summary(f_soil)$bpar #> Estimate se_notrans t value Pr(>t) Lower #> parent_0 76.55425650 0.859186398 89.1008711 1.113861e-26 74.755959420 #> k_parent 0.12081956 0.004601918 26.2541722 1.077359e-16 0.111561575 #> k_M1 0.84258615 0.806159719 1.0451851 1.545266e-01 0.113779564 #> k_M2 0.04210880 0.017083034 2.4649483 1.170188e-02 0.018013857 #> k_M3 0.01122918 0.007245855 1.5497385 6.885051e-02 0.002909431 #> f_parent_to_M1 0.32240200 0.240783878 1.3389684 9.819070e-02 NA #> f_parent_to_M2 0.16099855 0.033691952 4.7785463 6.531136e-05 NA #> f_M1_to_M3 0.27921507 0.269423709 1.0363419 1.565266e-01 0.022978202 #> f_M2_to_M3 0.55641252 0.595119937 0.9349586 1.807707e-01 0.008002509 #> sigma 1.14005399 0.149696423 7.6157731 1.727024e-07 0.826735778 #> Upper #> parent_0 78.35255358 #> k_parent 0.13084582 #> k_M1 6.23970946 #> k_M2 0.09843260 #> k_M3 0.04333992 #> f_parent_to_M1 NA #> f_parent_to_M2 NA #> f_M1_to_M3 0.86450778 #> f_M2_to_M3 0.99489895 #> sigma 1.45337221 mkinerrmin(f_soil) #> err.min n.optim df #> All data 0.09649963 9 20 #> parent 0.04721283 2 6 #> M1 0.26551208 2 5 #> M2 0.20327575 2 5 #> M3 0.05196550 3 4 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":null,"dir":"Reference","previous_headings":"","what":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"transformations intended map parameters take restricted values full scale real numbers. kinetic rate constants parameters can take positive values, simple log transformation used. compositional parameters, formations fractions always sum 1 can negative, ilr transformation used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"","code":"transform_odeparms( parms, mkinmod, transform_rates = TRUE, transform_fractions = TRUE ) backtransform_odeparms( transparms, mkinmod, transform_rates = TRUE, transform_fractions = TRUE )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"parms Parameters kinetic models used differential equations. mkinmod kinetic model class mkinmod, containing names model variables needed grouping formation fractions ilr transformation, parameter names information pathway sink included model. transform_rates Boolean specifying kinetic rate constants transformed model specification used fitting better compliance assumption normal distribution estimator. TRUE, also alpha beta parameters FOMC model log-transformed, well k1 k2 rate constants DFOP HS models break point tb HS model. transform_fractions Boolean specifying formation fractions constants transformed model specification used fitting better compliance assumption normal distribution estimator. default (TRUE) transformations. g parameter DFOP model also seen fraction. single fraction transformed (g parameter DFOP single target variable e.g. single metabolite plus pathway sink), logistic transformation used stats::qlogis(). cases, .e. two formation fractions need transformed whose sum exceed one, ilr transformation used. transparms Transformed parameters kinetic models used fitting procedure.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"vector transformed backtransformed parameters","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"transformation sets formation fractions fragile, supposes ordering components forward backward transformation. problem internal use mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"","code":"SFO_SFO <- mkinmod( parent = list(type = \"SFO\", to = \"m1\", sink = TRUE), m1 = list(type = \"SFO\"), use_of_ff = \"min\") #> Temporary DLL for differentials generated and loaded # Fit the model to the FOCUS example dataset D using defaults FOCUS_D <- subset(FOCUS_2006_D, value != 0) # remove zero values to avoid warning fit <- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE) fit.s <- summary(fit) # Transformed and backtransformed parameters print(fit.s$par, 3) #> Estimate Std. Error Lower Upper #> parent_0 99.60 1.5702 96.40 102.79 #> log_k_parent_sink -3.04 0.0763 -3.19 -2.88 #> log_k_parent_m1 -2.98 0.0403 -3.06 -2.90 #> log_k_m1_sink -5.25 0.1332 -5.52 -4.98 #> sigma 3.13 0.3585 2.40 3.85 print(fit.s$bpar, 3) #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_0 99.59848 1.57022 63.43 2.30e-36 96.40384 102.7931 #> k_parent_sink 0.04792 0.00365 13.11 6.13e-15 0.04103 0.0560 #> k_parent_m1 0.05078 0.00205 24.80 3.27e-23 0.04678 0.0551 #> k_m1_sink 0.00526 0.00070 7.51 6.16e-09 0.00401 0.0069 #> sigma 3.12550 0.35852 8.72 2.24e-10 2.39609 3.8549 # \\dontrun{ # Compare to the version without transforming rate parameters (does not work # with analytical solution, we get NA values for m1 in predictions) fit.2 <- mkinfit(SFO_SFO, FOCUS_D, transform_rates = FALSE, solution_type = \"deSolve\", quiet = TRUE) fit.2.s <- summary(fit.2) print(fit.2.s$par, 3) #> Estimate Std. Error Lower Upper #> parent_0 99.59848 1.57022 96.40384 1.03e+02 #> k_parent_sink 0.04792 0.00365 0.04049 5.54e-02 #> k_parent_m1 0.05078 0.00205 0.04661 5.49e-02 #> k_m1_sink 0.00526 0.00070 0.00384 6.69e-03 #> sigma 3.12550 0.35852 2.39609 3.85e+00 print(fit.2.s$bpar, 3) #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_0 99.59848 1.57022 63.43 2.30e-36 96.40384 1.03e+02 #> k_parent_sink 0.04792 0.00365 13.11 6.13e-15 0.04049 5.54e-02 #> k_parent_m1 0.05078 0.00205 24.80 3.27e-23 0.04661 5.49e-02 #> k_m1_sink 0.00526 0.00070 7.51 6.16e-09 0.00384 6.69e-03 #> sigma 3.12550 0.35852 8.72 2.24e-10 2.39609 3.85e+00 # } initials <- fit$start$value names(initials) <- rownames(fit$start) transformed <- fit$start_transformed$value names(transformed) <- rownames(fit$start_transformed) transform_odeparms(initials, SFO_SFO) #> parent_0 log_k_parent_sink log_k_parent_m1 log_k_m1_sink #> 100.750000 -2.302585 -2.301586 -2.300587 backtransform_odeparms(transformed, SFO_SFO) #> parent_0 k_parent_sink k_parent_m1 k_m1_sink #> 100.7500 0.1000 0.1001 0.1002 # \\dontrun{ # The case of formation fractions (this is now the default) SFO_SFO.ff <- mkinmod( parent = list(type = \"SFO\", to = \"m1\", sink = TRUE), m1 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded fit.ff <- mkinfit(SFO_SFO.ff, FOCUS_D, quiet = TRUE) fit.ff.s <- summary(fit.ff) print(fit.ff.s$par, 3) #> Estimate Std. Error Lower Upper #> parent_0 99.5985 1.5702 96.404 102.79 #> log_k_parent -2.3157 0.0409 -2.399 -2.23 #> log_k_m1 -5.2475 0.1332 -5.518 -4.98 #> f_parent_qlogis 0.0579 0.0893 -0.124 0.24 #> sigma 3.1255 0.3585 2.396 3.85 print(fit.ff.s$bpar, 3) #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_0 99.59848 1.57022 63.43 2.30e-36 96.40383 102.7931 #> k_parent 0.09870 0.00403 24.47 4.96e-23 0.09082 0.1073 #> k_m1 0.00526 0.00070 7.51 6.16e-09 0.00401 0.0069 #> f_parent_to_m1 0.51448 0.02230 23.07 3.10e-22 0.46912 0.5596 #> sigma 3.12550 0.35852 8.72 2.24e-10 2.39609 3.8549 initials <- c(\"f_parent_to_m1\" = 0.5) transformed <- transform_odeparms(initials, SFO_SFO.ff) backtransform_odeparms(transformed, SFO_SFO.ff) #> f_parent_to_m1 #> 0.5 # And without sink SFO_SFO.ff.2 <- mkinmod( parent = list(type = \"SFO\", to = \"m1\", sink = FALSE), m1 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded fit.ff.2 <- mkinfit(SFO_SFO.ff.2, FOCUS_D, quiet = TRUE) fit.ff.2.s <- summary(fit.ff.2) print(fit.ff.2.s$par, 3) #> Estimate Std. Error Lower Upper #> parent_0 84.79 3.012 78.67 90.91 #> log_k_parent -2.76 0.082 -2.92 -2.59 #> log_k_m1 -4.21 0.123 -4.46 -3.96 #> sigma 8.22 0.943 6.31 10.14 print(fit.ff.2.s$bpar, 3) #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_0 84.7916 3.01203 28.15 1.92e-25 78.6704 90.913 #> k_parent 0.0635 0.00521 12.19 2.91e-14 0.0538 0.075 #> k_m1 0.0148 0.00182 8.13 8.81e-10 0.0115 0.019 #> sigma 8.2229 0.94323 8.72 1.73e-10 6.3060 10.140 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Update an mkinfit model with different arguments — update.mkinfit","title":"Update an mkinfit model with different arguments — update.mkinfit","text":"function return updated mkinfit object. fitted degradation model parameters old fit used starting values updated fit. Values specified 'parms.ini' /'state.ini' override starting values.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update an mkinfit model with different arguments — update.mkinfit","text":"","code":"# S3 method for mkinfit update(object, ..., evaluate = TRUE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update an mkinfit model with different arguments — update.mkinfit","text":"object mkinfit object updated ... Arguments mkinfit replace arguments original call. Arguments set NULL remove arguments given original call evaluate call evaluated returned call","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Update an mkinfit model with different arguments — update.mkinfit","text":"","code":"# \\dontrun{ fit <- mkinfit(\"SFO\", subset(FOCUS_2006_D, value != 0), quiet = TRUE) parms(fit) #> parent_0 k_parent sigma #> 99.44423885 0.09793574 3.39632469 plot_err(fit) fit_2 <- update(fit, error_model = \"tc\") parms(fit_2) #> parent_0 k_parent sigma_low rsd_high #> 1.008549e+02 1.005665e-01 3.752222e-03 6.763434e-02 plot_err(fit_2) # }"},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-126","dir":"Changelog","previous_headings":"","what":"mkin 1.2.6","title":"mkin 1.2.6","text":"‘inst/rmarkdown/templates/hierarchical_kinetics/skeleton/skeleton.Rmd’: Fix erroneous call ‘endpoints()’ function","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-125-2023-08-09","dir":"Changelog","previous_headings":"","what":"mkin 1.2.5 (2023-08-09)","title":"mkin 1.2.5 (2023-08-09)","text":"‘vignettes/mesotrione_parent_2023.rnw’: Prebuilt vignette showing covariate modelling can done relevant parent degradation models. ‘inst/testdata/mesotrione_soil_efsa_2016}.xlsx’: Another example spreadsheets use ‘read_spreadsheet()’, featuring pH dependent degradation R/illparms.R: Fix detection ill-defined slope error model parameters case estimate negative","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-124-2023-05-19","dir":"Changelog","previous_headings":"","what":"mkin 1.2.4 (2023-05-19)","title":"mkin 1.2.4 (2023-05-19)","text":"R/endpoints.R: Fix calculation endpoints user specified covariate values","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-1231-unreleased","dir":"Changelog","previous_headings":"","what":"mkin 1.2.3.1 (unreleased)","title":"mkin 1.2.3.1 (unreleased)","text":"Small fixes get online docs right (example code R/hierarchical_kinetics, cluster setup cyantraniliprole dmta pathway vignettes, graphics model comparison multistart vignette), rebuild online docs","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-123-2023-04-17","dir":"Changelog","previous_headings":"","what":"mkin 1.2.3 (2023-04-17)","title":"mkin 1.2.3 (2023-04-17)","text":"‘R/{endpoints,parms,plot.mixed.mmkin,summary.saem.mmkin}.R’: Calculate parameters endpoints plot population curves specific covariate values, specific percentiles covariate values used saem fits. Depend current deSolve version possibility avoid resolving symbols shared library (compiled models) , thanks Thomas Petzoldt. ‘inst/rmarkdown/templates/hierarchical_kinetics/skeleton/skeleton.Rmd’: Start new cluster creating model stored user specified location, otherwise symbols found worker processes. ‘tests/testthat/test_compiled_symbols.R’: new tests control problems may introduced possibility use pre-resolved symbols. ‘R/mkinerrmin.R’: Fix typo subset (use = instead ==), thanks Sebastian Meyer spotting work R 4.3.0.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-122-unreleased","dir":"Changelog","previous_headings":"","what":"mkin 1.2.2 (unreleased)","title":"mkin 1.2.2 (unreleased)","text":"‘inst/rmarkdown/templates/hierarchical_kinetics’: R markdown template facilitate application hierarchical kinetic models. ‘inst/testdata/{cyantraniliprole_soil_efsa_2014,lambda-cyhalothrin_soil_efsa_2014}.xlsx’: Example spreadsheets use ‘read_spreadsheet()’. ‘R/mhmkin.R’: Allow ‘illparms.mhmkin’ object list suitable dimensions value argument ‘no_random_effects’, making possible exclude random effects ill-defined simpler variants set degradation models. Remove possibility exclude random effects based separate fits, work well. ‘R/summary.saem.mmkin.R’: List initial parameter values summary, including random effects error model parameters. Avoid redundant warnings occurred calculation correlations fixed effects case Fisher information matrix inverted. List correlations random effects specified user covariance model. ‘R/parplot.R’: Possibility select top ‘llquant’ fraction fits parameter plots, improved legend text. ‘R/illparms.R’: Also check confidence intervals slope parameters covariate models include zero. implemented fits obtained saemix backend. ‘R/parplot.R’: Make function work also case multistart runs failed. ‘R/intervals.R’: Include correlations random effects model case .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-121-2022-11-19","dir":"Changelog","previous_headings":"","what":"mkin 1.2.1 (2022-11-19)","title":"mkin 1.2.1 (2022-11-19)","text":"‘{data,R}/ds_mixed.rda’: Include test data package instead generating ‘tests/testthat/setup_script.R’. Refactor generating code make consistent update tests. ‘tests/testthat/setup_script.R’: Excluded another ill-defined random effect DFOP fit ‘saem’, attempt avoid platform dependence surfaced Fedora systems CRAN check farm ‘tests/testthat/test_mixed.R’: Round parameters found saemix two significant digits printing, also help avoid platform dependence tests ‘R/saem.R’: Fix bug prevented ‘error.ini’ passed ‘saemix_model’, set default c(1, 1) avoid changing test results ‘R/parplot.R’: Show initial values error model parameters ‘R/loglik.mkinfit.R’: Add ‘nobs’ attribute resulting ‘logLik’ object, order make test_AIC.R succeed current R-devel","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-120-2022-11-17","dir":"Changelog","previous_headings":"","what":"mkin 1.2.0 (2022-11-17)","title":"mkin 1.2.0 (2022-11-17)","text":"‘R/saem.R’: ‘logLik’, ‘update’ ‘anova’ methods ‘saem.mmkin’ objects. ‘R/saem.R’: Automatic estimation start parameters random effects case mkin transformations, nicely improving convergence reducing problems iterative ODE solutions. ‘R/status.R’: New generic show status information fit array objects methods ‘mmkin’, ‘mhmkin’ ‘multistart’ objects. ‘R/mhmkin.R’: New method performing multiple hierarchical mkin fits one function call, optionally parallel. ‘R/mhmkin.R’: ‘anova.mhmkin’ conveniently comparing resulting fits. ‘R/illparms.R’: New generic show ill-defined parameters methods ‘mkinfit’, ‘mmkin’, ‘saem.mmkin’ ‘mhmkin’ objects. ‘R/multistart.R’: New method testing multiple start parameters hierarchical model fits, function ‘llhist’ new generic ‘parplot’ diagnostics, new generics ‘.best’ ‘best’ extracting fit highest likelihood ‘R/summary.mmkin.R’: Summary method mmkin objects. ‘R/saem.R’: Implement test saemix transformations FOMC HS. Also, error saemix transformations requested supported. ‘R/read_spreadsheet.R’: Conveniently read data spreadsheet file. ‘R/tex_listings.R’: Conveniently include summaries fit objects R markdown documents compiled LaTeX.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-111-2022-07-12","dir":"Changelog","previous_headings":"","what":"mkin 1.1.1 (2022-07-12)","title":"mkin 1.1.1 (2022-07-12)","text":"’R/{mkinmod,mkinpredict}.R: Store DLL information mkinmod objects use information mkinpredict avoid performance regression brought bugfix R 4.2.x. Thanks Tomas Kalibera analysis problem r-package-devel list suggestion fix . ‘vignettes/FOCUS_L.rmd’: Remove outdated note referring failure calculate covariance matrix DFOP L2 dataset. Since 0.9.45.5 covariance matrix available ‘vignettes/web_only/benchmarks.rmd’: Add first benchmark data using laptop system, therefore add CPU showing benchmark results. ‘dimethenamid_2018’: Update example code use saemix ‘CAKE_export’: Check validity map argument, updates ‘saem()’: Slightly improve speed case analytical solution saemix implemented, activate test respective code ‘mean_degparms’: New argument ‘default_log_parms’ makes possible supply surrogate value (default) log parameters fail t-test ‘plot.mixed.mmkin’: Pass frame argument also residual plots, take ‘default_log_parms’ argument ‘mean_degparms’ used constructing approximate population curves, plot population curve last avoid covered data ‘plot.mkinfit’: Respect argument ‘maxabs’ residual plots, make possible give ylim list, row layouts","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mixed-effects-models-1-1-0","dir":"Changelog","previous_headings":"","what":"Mixed-effects models","title":"mkin 1.1.0 (2022-03-14)","text":"Reintroduce interface saemix version 3.0 (now CRAN), particular generic function ‘saem’ generator ‘saem.mmkin’, currently using ‘saemix_model’ ‘saemix_data’, summary plot methods ‘mean_degparms’: New argument ‘test_log_parms’ makes function consider log-transformed parameters untransformed parameters pass t-test certain confidence level. can used obtain plausible starting parameters different mixed-effects model backends ‘plot.mixed.mmkin’: Gains arguments ‘test_log_parms’ ‘conf.level’ ‘vignettes/web_only/dimethenamid_2018.rmd’: Example evaluations dimethenamid data. ‘intervals’: Provide method nlme function ‘saem.mmkin’ objects.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-105-2021-09-15","dir":"Changelog","previous_headings":"","what":"mkin 1.0.5 (2021-09-15)","title":"mkin 1.0.5 (2021-09-15)","text":"‘dimethenamid_2018’: Correct data Borstel soil. five observations Staudenmaier (2013) previously stored “Borstel 2” actually just subset 16 observations “Borstel 1” now simply “Borstel”","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-104-2021-04-20","dir":"Changelog","previous_headings":"","what":"mkin 1.0.4 (2021-04-20)","title":"mkin 1.0.4 (2021-04-20)","text":"plotting functions setting graphical parameters: Use .exit() resetting graphical parameters ‘plot.mkinfit’: Use xlab xlim residual plot show_residuals TRUE ‘mmkin’: Use cores = 1 per default Windows make easier first time users","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-103-2021-02-15","dir":"Changelog","previous_headings":"","what":"mkin 1.0.3 (2021-02-15)","title":"mkin 1.0.3 (2021-02-15)","text":"Review update README, ‘Introduction mkin’ vignette help pages","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-102-unreleased","dir":"Changelog","previous_headings":"","what":"mkin 1.0.2 (Unreleased)","title":"mkin 1.0.2 (Unreleased)","text":"‘mkinfit’: Keep model names stored ‘mkinmod’ objects, avoiding loss ‘gmkin’","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-101-2021-02-10","dir":"Changelog","previous_headings":"","what":"mkin 1.0.1 (2021-02-10)","title":"mkin 1.0.1 (2021-02-10)","text":"‘confint.mmkin’, ‘nlme.mmkin’, ‘transform_odeparms’: Fix example code dontrun sections failed current defaults ‘logLik.mkinfit’: Improve example code avoid warnings show convenient syntax ‘mkinresplot’: Re-add Katrin Lindenberger coauthor accidentally removed long ago Remove tests relying non-convergence FOMC fit FOCUS dataset platform dependent (revealed new additional tests CRAN, thanks!) Increase test tolerance parameter comparisons also proved platform dependent","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"general-1-0-0","dir":"Changelog","previous_headings":"","what":"General","title":"mkin 1.0.0 (2021-02-03)","text":"‘mkinmod’ models gain arguments ‘name’ ‘dll_dir’ , conjunction current version ‘inline’ package, make possible still use DLL used fast ODE solutions ‘deSolve’ saving restoring ‘mkinmod’ object. ‘mkindsg’ R6 class groups ‘mkinds’ datasets metadata ‘f_norm_temp_focus’ generic function normalise time intervals using FOCUS method, methods numeric vectors ‘mkindsg’ objects ‘D24_2014’ ‘dimethenamid_2018’ datasets ‘focus_soil_moisture’ FOCUS default soil moisture data ‘update’ method ‘mmkin’ objects ‘transform_odeparms’, ‘backtransform_odeparms’: Use logit transformation solitary fractions like g parameter DFOP model, formation fractions pathway one target variable ‘plot.mmkin’: Add ylab argument, making possible customize y axis label panels left without affecting residual plots. Reduce legend size vertical distance panels ‘plot.mkinfit’: Change default ylab “Observed” “Residue”. Pass xlab residual plot show_residuals TRUE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mixed-effects-models-1-0-0","dir":"Changelog","previous_headings":"","what":"Mixed-effects models","title":"mkin 1.0.0 (2021-02-03)","text":"‘mixed.mmkin’ New container mmkin objects plotting ‘plot.mixed.mmkin’ method ‘plot.mixed.mmkin’ method used ‘nlme.mmkin’ inheriting ‘mixed.mmkin’ (currently virtual) ‘plot’, ‘summary’ ‘print’ methods ‘nlme.mmkin’ objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09503-2020-10-08","dir":"Changelog","previous_headings":"","what":"mkin 0.9.50.3 (2020-10-08)","title":"mkin 0.9.50.3 (2020-10-08)","text":"‘parms’: Add method mmkin objects ‘mmkin’ ‘confint(method = ’profile’): Use cores detected parallel::detectCores() per default ‘confint(method = ’profile’): Choose accuracy based ‘rel_tol’ argument, relative bounds obtained quadratic approximation ‘mkinfit’: Make ‘use_of_ff’ = “max” also default models specified using short names like “SFO” “FOMC” ‘mkinfit’: Run ‘stats::shapiro.test()’ standardized residuals warn p < 0.05 ‘mkinfit’: ‘error_model_algorithm’ = ‘d_3’ fail direct fitting fails, reports results threestep algorithm returned ‘mmkin’: fail one fits fails, assign try-error respective position mmkin object ‘mkinfit’: Ignore components state.ini correspond state variables model ‘endpoints’: Back-calculate DT50 value DT90 also biphasic models DFOP, HS SFORB","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09502-2020-05-12","dir":"Changelog","previous_headings":"","what":"mkin 0.9.50.2 (2020-05-12)","title":"mkin 0.9.50.2 (2020-05-12)","text":"Increase tolerance platform specific test results Solaris test machine CRAN Updates corrections (using spelling package) documentation","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09501-2020-05-11","dir":"Changelog","previous_headings":"","what":"mkin 0.9.50.1 (2020-05-11)","title":"mkin 0.9.50.1 (2020-05-11)","text":"Support SFORB formation fractions ‘mkinmod’: Make ‘use_of_ff’ = “max” default Improve performance ) avoiding expensive calls cost function like merge() data.frame(), b) implementing analytical solutions SFO-SFO DFOP-SFO","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-094911-2020-04-20","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.11 (2020-04-20)","title":"mkin 0.9.49.11 (2020-04-20)","text":"Increase test tolerance make pass CRAN check machines","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-094910-2020-04-18","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.10 (2020-04-18)","title":"mkin 0.9.49.10 (2020-04-18)","text":"‘nlme.mmkin’: nlme method mmkin row objects associated S3 class print, plot, anova endpoint methods ‘mean_degparms, nlme_data, nlme_function’: Three new functions facilitate building nlme models mmkin row objects ‘endpoints’: Don’t return SFORB list component ’s empty. reduces distraction complies documentation Article compiled models: Add platform specific code suppress warnings zero values removed FOCUS D dataset ‘plot.mmkin’: Add argument ‘standardized’ avoid warnings occurred passed part additional arguments captured dots (…) ‘summary.mkinfit’: Add AIC, BIC log likelihood summary","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09499-2020-03-31","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.9 (2020-03-31)","title":"mkin 0.9.49.9 (2020-03-31)","text":"‘mkinmod’: Use pkgbuild::has_compiler instead Sys.(‘gcc’), latter often fail even Rtools installed ‘mkinds’: Use roxygen documenting fields methods R6 class","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09498-2020-01-09","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.8 (2020-01-09)","title":"mkin 0.9.49.8 (2020-01-09)","text":"‘aw’: Generic function calculating Akaike weights, methods mkinfit objects mmkin columns ‘loftest’: Add lack--fit test ‘plot_res’, ‘plot_sep’ ‘mkinerrplot’: Add possibility show standardized residuals make default fits error models ‘const’ ‘lrtest.mkinfit’: Improve naming compared fits case fixed parameters ‘confint.mkinfit’: Make quadratic approximation default, likelihood profiling takes lot time, especially fit three parameters","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09497-2019-11-01","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.7 (2019-11-01)","title":"mkin 0.9.49.7 (2019-11-01)","text":"Fix bug introduced 0.9.49.6 occurred direct optimisation yielded higher likelihood three-step optimisation d_3 algorithm, caused fitted parameters three-step optimisation returned instead parameters direct optimisation Add ‘nobs’ method mkinfit objects, enabling default ‘BIC’ method stats package. Also, add ‘BIC’ method mmkin column objects.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09496-2019-10-31","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.6 (2019-10-31)","title":"mkin 0.9.49.6 (2019-10-31)","text":"Implement likelihood ratio test method ‘lrtest’ lmtest package Add ‘update’ method mkinfit objects remembers fitted parameters appropriate Add ‘residuals’ method mkinfit objects supports scaling based error model Fix bug ‘mkinfit’ prevented summaries objects fitted fixed parameters generated Add ‘parms’ ‘confint’ methods mkinfit objects. Confidence intervals based quadratic approximation summary, based profile likelihood Move long-running tests tests/testthat/slow separate test log. currently take around 7 minutes system ‘mkinfit’: Clean code return functions calculate log-likelihood sum squared residuals Vignette ‘twa.html’: Add maximum time weighted average formulas hockey stick model Support frameless plots (‘frame = FALSE’) Support suppress chi2 error level (‘show_errmin = FALSE’) ‘plot.mmkin’ Update README introductory vignette Report ‘OLS’ error_model_algorithm summary case default error_model (‘const’) used Support summarizing ‘mkinfit’ objects generated versions < 0.9.49.5","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09495-2019-07-04","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.5 (2019-07-04)","title":"mkin 0.9.49.5 (2019-07-04)","text":"Several algorithms minimization negative log-likelihood non-constant error models (two-component variance variable). case error model constant variance, least squares used stable. default algorithm ‘d_3’ tries direct minimization three-step procedure, returns model highest likelihood. argument ‘reweight.method’ mkinfit mmkin now obsolete, use ‘error_model’ ‘error_model_algorithm’ instead Add test checks get best known AIC parent fits 12 test datasets. Add test datasets purpose. New function ‘mkinerrplot’. function also used residual plots ‘plot.mmkin’ argument ‘resplot = “errmod”’ given, ‘plot.mkinfit’ ‘show_errplot’ set TRUE. Remove dependency FME, use nlminb optimisation (‘Port’ algorithm). remember cases one optimisation algorithms preferable, except sometime used Levenberg-Marquardt speed cases expect get trapped local minimum. Use numDeriv package calculate hessians. results slightly different confidence intervals, takes bit longer, apparently robust Add simple benchmark vignette document impact performance. code manual weighting removed. functionality might get added later time. time , please use earlier version, e.g. 0.9.48.1 want manual weighting. fitting time reported summary now includes time used calculation hessians Adapt tests Fix error FOCUS chi2 error level calculations occurred parameters specified parms.ini model. warning already issued, fitting parallel via mmkin go unnoticed. Add example datasets obtained risk assessment reports published European Food Safety Agency.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09481-2019-03-04","dir":"Changelog","previous_headings":"","what":"mkin 0.9.48.1 (2019-03-04)","title":"mkin 0.9.48.1 (2019-03-04)","text":"Add function ‘logLik.mkinfit’ makes possible calculate AIC mkinfit objects Add function ‘AIC.mmkin’ make easy compare columns mmkin objects ‘add_err’: Respect argument giving number replicates synthetic dataset ‘max_twa_parent’: Support maximum time weighted average concentration calculations hockey stick (HS) model ‘mkinpredict’: Make function generic create method mkinfit objects ‘mkinfit’: Improve correctness fitted two component error model fitting mean absolute deviance observation observed values, weighting current two-component error model ‘tests/testthat/test_irls.R’: Test components error model used generate data can reproduced moderate accuracy Add function ‘CAKE_export’ facilitate cross-checking results Implement logistic model (tested parent fits) ‘nafta’: Add evaluations according NAFTA guidance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09475-2018-09-14","dir":"Changelog","previous_headings":"","what":"mkin 0.9.47.5 (2018-09-14)","title":"mkin 0.9.47.5 (2018-09-14)","text":"Make two-component error model stop cases inadequate avoid nls crashes windows Move two vignettes location built CRAN (avoid NOTES long execution times) Exclude example code testing CRAN avoid NOTES long execution times","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09473","dir":"Changelog","previous_headings":"","what":"mkin 0.9.47.3","title":"mkin 0.9.47.3","text":"‘mkinfit’: Improve fitting error model reweight.method = ‘tc’. Add ‘manual’ possible arguments ‘weight’ Test FOCUS_2006_C can evaluated DFOP reweight.method = ‘tc’","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09472-2018-07-19","dir":"Changelog","previous_headings":"","what":"mkin 0.9.47.2 (2018-07-19)","title":"mkin 0.9.47.2 (2018-07-19)","text":"‘sigma_twocomp’: Rename ‘sigma_rl’ ‘sigma_twocomp’ Rocke Lorenzato model assumes lognormal distribution large y. Correct references Rocke Lorenzato model accordingly. ‘mkinfit’: Use 1.1 starting value N parameter IORE models obtain convergence difficult cases. Show parameter names ‘trace_parms’ ‘TRUE’.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09471-2018-02-06","dir":"Changelog","previous_headings":"","what":"mkin 0.9.47.1 (2018-02-06)","title":"mkin 0.9.47.1 (2018-02-06)","text":"Skip tests CRAN winbuilder avoid timeouts ‘test_data_from_UBA_2014’: Added list datasets containing experimental data used expertise 2014 ‘mkinfit’: Added iterative reweighting method ‘tc’ using two-component error model Rocke Lorenzato. NA values data returned . ‘mkinfit’: Work around bug current FME version prevented convergence message returned case non-convergence. ‘summary.mkinfit’: Improved output regarding weighting method. predictions returned NA values model (see ). ‘summary.mkinfit’: Show versions mkin R used fitting (ones used summary) fit generated mkin >= 0.9.47.1","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09463-2017-11-16","dir":"Changelog","previous_headings":"","what":"mkin 0.9.46.3 (2017-11-16)","title":"mkin 0.9.46.3 (2017-11-16)","text":"README.md, vignettes/mkin.Rmd: URLs updated synthetic_data_for_UBA: Add code used generate data interest reproducibility","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09462-2017-10-10","dir":"Changelog","previous_headings":"","what":"mkin 0.9.46.2 (2017-10-10)","title":"mkin 0.9.46.2 (2017-10-10)","text":"Converted vignette FOCUS_Z tex/pdf markdown/html DESCRIPTION: Add ORCID","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09461-2017-09-14","dir":"Changelog","previous_headings":"","what":"mkin 0.9.46.1 (2017-09-14)","title":"mkin 0.9.46.1 (2017-09-14)","text":"plot.mkinfit: Fix scaling residual plots case separate plots observed variable plot.mkinfit: Use data points fitted curve y axis scaling case separate plots observed variable Documentation updates","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-0946-2017-07-24","dir":"Changelog","previous_headings":"","what":"mkin 0.9.46 (2017-07-24)","title":"mkin 0.9.46 (2017-07-24)","text":"Remove test_FOMC_ill-defined.R platform dependent","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09452-2017-07-24","dir":"Changelog","previous_headings":"","what":"mkin 0.9.45.2 (2017-07-24)","title":"mkin 0.9.45.2 (2017-07-24)","text":"Rename twa max_twa_parent avoid conflict twa pfm package Update URLs documentation Limit test code one core pass windows Switch microbenchmark rbenchmark former supported platforms","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-45-1","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9.45.1 (2016-12-20)","text":"twa function, calculating maximum time weighted average concentrations parent (SFO, FOMC DFOP).","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-45","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9.45 (2016-12-08)","text":"plot.mkinfit plot.mmkin: plotting device tikz, LaTeX markup used chi2 error graphs. Use pkgdown, successor staticdocs generating static HTML documentation. Include example output graphs also dontrun sections. plot.mkinfit: Plotting fail compiled model available, e.g. removed temporary directory. case, uncompiled model now used plotting","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-44","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9.44 (2016-06-29)","text":"test test_FOMC_ill-defined failed several architectures, test now skipped","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-43","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9.43 (2016-06-28)","text":"title changed Kinetic evaluations chemical degradation data plot.mkinfit: Add possibility show fits (residual plots requested) separately observed variables plot.mkinfit: Add possibility show chi2 error levels plot, similar way shown plot.mmkin plot_sep: Add function convenience wrapper plotting observed variables mkinfit objects separately, chi2 error values residual plots. Vignettes: main vignette mkin converted R markdown updated. vignettes also updated show current improved functionality. function add_err added package, making easy generate simulated data using error model based normal distribution","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-43","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9.43 (2016-06-28)","text":"Remove outdated reference inline package compiled_models vignette mkinfit: error cases fit converges, Jacobian untransformed model cost can estimated. Give warning instead return NA t-test results. summary.mkinfit: Give warning message covariance matrix can obtained. test added containing corresponding edge case check warnings correctly issued fit terminate. plot.mmkin: Round chi2 error value three significant digits, instead two decimal digits. mkinfit: Return err values used weighted fits column named err. Also include inverse weights column value observed data used, returned observed data component mkinfit object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-43","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9.43 (2016-06-28)","text":"endpoints: name substance degrading metabolite (e.g. parent compound) used model formulation ended letter f, rate parameters listed formation fractions mixed names. also appear summary. mkinfit: Check observed variables checking user tried fix formation fractions fitting using ilr transformation. plot.mmkin: Set plot margins correctly, also case single fit plotted, main title placed reasonable way. plot.mkinfit: Correct default values col_obs, pch_obs lty_obs case obs_vars specified.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-42","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9.42 (2016-03-25)","text":"Add argument from_max_mean mkinfit, fitting decline maximum observed value models single observed variable","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-42","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9.42 (2016-03-25)","text":"Add plots compiled_models vignette Give explanatory error message mkinmod fails due missing definition target variable print.mkinmod(): Improve formatting printing mkinmod model definitions","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-41","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-41 (2015-11-09)","text":"Add R6 class mkinds representing datasets printing method Add printing method mkinmod objects Make possible specify arbitrary strings names compounds mkinmod, show plot Use index.r file group help topics static documentation","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-41","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-41 (2015-11-09)","text":"print.summary.mkinfit(): Avoid error occurred printing summaries generated mkin versions 0.9-36","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-40","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-40 (2015-07-21)","text":"endpoints(): DFOP SFORB models, optimize() used, make use fact DT50 must DT50_k1 DT50_k2 (DFOP) DT50_b1 DT50_b2 (SFORB), optimize() sometimes find minimum. Likewise finding DT90 values. Also fit log scale make function efficient.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"internal-changes-0-9-40","dir":"Changelog","previous_headings":"","what":"Internal changes","title":"mkin 0.9-40 (2015-07-21)","text":"DESCRIPTION, NAMESPACE, R/*.R: Import () stats, graphics methods packages, qualify function calls non-base packages installed R avoid NOTES made R CMD check –-cran upcoming R versions.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-39","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9-39 (2015-06-26)","text":"New function mmkin(): function takes character vector model shorthand names, alternatively list mkinmod models, well list dataset main arguments. returns matrix mkinfit objects, row model column dataset. subsetting method single brackets available. Fitting models parallel using parallel package supported. New function plot.mmkin(): Plots single-row single-column mmkin objects including residual plots.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-39","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-39 (2015-06-26)","text":"mkinparplot(): Fix x axis scaling rate constants formation fractions got confused introduction t-values transformed parameters.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-38","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-38 (2015-06-24)","text":"vignettes/compiled_models.html: Show performance improvement factor actually obtained building vignette, well mkin version, system info CPU model used building vignette. GNUMakefile,vignettes/*: Clean vignette generation include table contents HTML vignettes.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-38","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-38 (2015-06-24)","text":"mkinmod(): generating C code derivatives, declare time variable needed remove ‘-W--unused-variable’ compiler flag C compiler used CRAN checks Solaris know .","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-36","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9-36 (2015-06-21)","text":"summary.mkinfit(): one-sided t-test significant difference untransformed parameters zero now always shown, based assumption normal distribution estimators untransformed parameters. Use caution, assumption unrealistic e.g. rate constants nonlinear kinetic models. compiler (gcc) installed, use version differential equation model compiled C code, huge performance boost models deSolve method works. mkinmod(): Create list component $cf (class CFuncList) list returned mkinmod, version can compiled autogenerated C code (see ). mkinfit(): Set default solution_type deSolve compiled version model present, except analytical solution possible.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-36","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-36 (2015-06-21)","text":"Added simple showcase vignette evaluation FOCUS example dataset D","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-35","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9-35 (2015-05-15)","text":"Switch RUnit testthat testing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-35","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-35 (2015-05-15)","text":"mkinparplot(): Avoid warnings occurred confidence intervals available summary fit print.summary.mkinfit(): Fix printing summary case number iterations available NAMESPACE: export S3 methods plot.mkinfit, summary.mkinfit print.summary.mkinfit satisfy R CMD check R-devel mkinparplot(): Avoid warning R CMD check undeclared global variable Lower","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-35","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-35 (2015-05-15)","text":"mkinfit(): Report successful termination quiet = FALSE. helpful difficult problems fitted reweight.method = obs, progress often indicated reweighting. first test using results established expertise written German Federal Environmental Agency (UBA) added. Add synthetic datasets generated expertise written German Federal Environmental Agency UBA Add tests based datasets","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-34","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-34 (2014-11-22)","text":"Add convenience function mkinsub() creating lists used mkinmod() Add possibility fit indeterminate order rate equation (IORE) models using analytical solution (parent ) numeric solution. Paths IORE compounds metabolites supported using formation fractions (use_of_ff = ‘max’). Note numerical solution (method.ode = ‘deSolve’) IORE differential equations sometimes fails due numerical problems. Switch using Port algorithm (using model/trust region approach) per default. needing iterations Levenberg-Marquardt algorithm previously used per default, less sensitive starting parameters.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-34","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-34 (2014-11-22)","text":"formatting differential equations summary improved Always include 0 y axis plotting fit","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-33","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-33 (2014-10-22)","text":"initial value (state.ini) observed variable highest observed residue set 100 case time zero observation state.ini = \"auto\" basic unit test mkinerrmin() written","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-33","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-33 (2014-10-22)","text":"mkinfit(): internally fitted parameter g named g_ilr even transform_fractions=FALSE mkinfit(): initial value (state.ini) parent compound set parent () variable highest value observed data. mkinerrmin(): checking degrees freedom metabolites, check time zero value fixed instead checking observed value zero. ensures correct calculation degrees freedom also cases metabolite residue time zero greater zero. plot.mkinfit(): Avoid warning message using first component ylim occurred ylim specified explicitly","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-33","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-33 (2014-10-22)","text":"formatting differential equations summary improved wrapping overly long lines FOCUS_Z vignette rebuilt improvement using width 70 avoid output outside grey area print.summary.mkinfit(): Avoid warning occurred gmkin showed summaries initial fits without iterations mkinfit(): Avoid warning occurred summarising fit performed maxitmodFit = 0 done gmkin configuring new fits.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-32","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-32 (2014-07-24)","text":"number degrees freedom difficult define case ilr transformation formation fractions. Now source compartment number ilr parameters (=number optimised parameters) divided number pathways metabolites (=number affected data series) leads fractional degrees freedom cases. default initial value first state value now taken mean observations time zero, available. kinetic model can alternatively specified shorthand name parent degradation models, e.g. SFO, DFOP. Optimisation method, number model evaluations time elapsed optimisation given summary mkinfit objects. maximum number iterations optimisation algorithm can specified using argument maxit.modFit mkinfit function. mkinfit gives warning fit converge (apply SANN method). warning included summary.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-32","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-32 (2014-07-24)","text":"Avoid plotting artificial 0 residual time zero mkinresplot determination degrees freedom mkinerrmin, formation fractions accounted multiple times case parallel formation metabolites. See new feature described solution. transform_rates=FALSE mkinfit now also works FOMC HS models. Initial values formation fractions set cases. warning given fit converge method default Levenberg-Marquardt method Marq used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-32","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-32 (2014-07-24)","text":"Vignettes rebuilt reflect changes summary method. Algorithm Pseudo excluded needs user-defined parameter limits supported. Algorithm Newton excluded different way specify maximum number iterations appear provide additional benefits.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-31","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-31 (2014-07-14)","text":"internal renaming optimised parameters Version 0.9-30 led errors determination degrees freedom chi2 error level calulations mkinerrmin() used summary function.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-30","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-30 (2014-07-11)","text":"now possible use formation fractions combination turning sink mkinmod().","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-30","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9-30 (2014-07-11)","text":"original transformed parameters now different names (e.g. k_parent log_k_parent. also differ many formation fractions pathway sink. order information blocks print.summary.mkinfit.R() ordered logical way.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-30","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-30 (2014-07-11)","text":"vignette FOCUS_Z simplified use formation fractions turning sink, slightly amended use new versions DT50 values calculated since mkin 0.9-29. vignettes rebuilt reflect changes. ChangeLog renamed NEWS.md entries converted markdown syntax compatible tools::news() function built R. test suite overhauled. Tests DFOP SFORB models dataset FOCUS_2006_A removed, much dependent optimisation algorithm /starting parameters, dataset SFO (compare kinfit vignette). Also, Schaefer complex case can now fitted using formation fractions, ‘Port’ optimisation method also fit A2 way published Piacenza paper. checks introduced mkinfit(), leading warnings stopping execution unsupported combinations methods parameters requested.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-29-2014-06-27","dir":"Changelog","previous_headings":"","what":"mkin 0.9-29 (2014-06-27)","title":"mkin 0.9-29 (2014-06-27)","text":"R/mkinresplot.R: Make possible specify xlim R/geometric_mean.R, man/geometric_mean.Rd: Add geometric mean function R/endpoints.R, man/endpoints.Rd: Calculate additional (pseudo)-DT50 values FOMC, DFOP, HS SFORB. Avoid calculation formation fractions rate constants directly fitted","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-28-2014-05-20","dir":"Changelog","previous_headings":"","what":"mkin 0.9-28 (2014-05-20)","title":"mkin 0.9-28 (2014-05-20)","text":"backtransform confidence intervals formation fractions one compound formed, parameters define pathways set Add historical remarks background main package vignette Correct ‘isotropic’ ‘isometric’ ilr transformation","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-27-2014-05-10","dir":"Changelog","previous_headings":"","what":"mkin 0.9-27 (2014-05-10)","title":"mkin 0.9-27 (2014-05-10)","text":"Fork GUI separate package gmkin DESCRIPTION, NAMESPACE, TODO: Adapt add copyright information Remove files belonging GUI Possibility fit without parameter transformations, using bounds implemented FME Add McCall 2,4,5-T dataset Enable selection observed variables plotting Add possibility show residual plot plot.mkinfit R/mkinparplot.R, man/mkinparplot.Rd: plot parameters confidence intervals Change vignette format Sweave knitr Split examples vignette FOCUS_L FOCUS_Z Remove warning constant formation fractions mkinmod based misconception Restrict unit test Schaefer data parent primary metabolites formation fraction DT50 A2 highly correlated passing test platform dependent. example, test fails 1 14 platforms CRAN today. Add Eurofins Regulatory AG copyright notices Import FME deSolve instead depending clean startup Add starter function GUI: gmkin() Change format workspace files gmkin can distributed documented package Add gmkin workspace datasets FOCUS_2006_gmkin FOCUS_2006_Z_gmkin","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-24-2013-11-06","dir":"Changelog","previous_headings":"","what":"mkin 0.9-24 (2013-11-06)","title":"mkin 0.9-24 (2013-11-06)","text":"Bugfix re-enabling fixing combination initial values state variables Default values kinetic rate constants 0.1 “salted” small increment avoid numeric artefacts eigenvalue based solutions Backtransform fixed ODE parameters summary","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-22-2013-10-26","dir":"Changelog","previous_headings":"","what":"mkin 0.9-22 (2013-10-26)","title":"mkin 0.9-22 (2013-10-26)","text":"Get rid optimisation step mkinerrmin - unnecessary. Thanks KinGUII inspiration - actually equation 6-2 FOCUS kinetics p. 91 overlooked originally Fix plot.mkinfit passed graphical arguments like main solver use plot=TRUE mkinfit() example first successful fits simple GUI Fix iteratively reweighted least squares case many metabolites Unify naming initial values state variables Unify naming dataframes optimised fixed parameters summary Show weighting method residuals summary Correct output data case manual weighting Implement IRLS assuming different variances observed variables use 0 values time zero chi2 error level calculations. way done KinGUII makes sense. impact chi2 error levels output. Generally seem lower metabolites now, presumably mean observed values higher detailed list changes mkin source please consult commit history http://github.com/jranke/mkin","code":""}]
+[{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"laboratory-data-l1","dir":"Articles","previous_headings":"","what":"Laboratory Data L1","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"following code defines example dataset L1 FOCUS kinetics report, p. 284: use assumptions simple first order (SFO), case declining rate constant time (FOMC) case two different phases kinetics (DFOP). detailed discussion models, please see FOCUS kinetics report. Since mkin version 0.9-32 (July 2014), can use shorthand notation like \"SFO\" parent degradation models. following two lines fit model produce summary report model fit. covers numerical analysis given FOCUS report. plot fit obtained plot function mkinfit objects. residual plot can easily obtained comparison, FOMC model fitted well, \\(\\chi^2\\) error level checked. get warning default optimisation algorithm Port converge, indication model overparameterised, .e. contains many parameters ill-defined consequence. fact, due higher number parameters, lower number degrees freedom fit, \\(\\chi^2\\) error level actually higher FOMC model (3.6%) SFO model (3.4%). Additionally, parameters log_alpha log_beta internally fitted model excessive confidence intervals, span 25 orders magnitude (!) backtransformed scale alpha beta. Also, t-test significant difference zero indicate significant difference, p-values greater 0.1, finally, parameter correlation log_alpha log_beta 1.000, clearly indicating model overparameterised. \\(\\chi^2\\) error levels reported Appendix 3 Appendix 7 FOCUS kinetics report rounded integer percentages partly deviate one percentage point results calculated mkin. reason known. However, mkin gives \\(\\chi^2\\) error levels kinfit package calculation routines kinfit package extensively compared results obtained KinGUI software, documented kinfit package vignette. KinGUI first widely used standard package field. Also, calculation \\(\\chi^2\\) error levels compared KinGUII, CAKE DegKin manager project sponsored German Umweltbundesamt (Ranke 2014).","code":"library(\"mkin\", quietly = TRUE) FOCUS_2006_L1 = data.frame( t = rep(c(0, 1, 2, 3, 5, 7, 14, 21, 30), each = 2), parent = c(88.3, 91.4, 85.6, 84.5, 78.9, 77.6, 72.0, 71.9, 50.3, 59.4, 47.0, 45.1, 27.7, 27.3, 10.0, 10.4, 2.9, 4.0)) FOCUS_2006_L1_mkin <- mkin_wide_to_long(FOCUS_2006_L1) m.L1.SFO <- mkinfit(\"SFO\", FOCUS_2006_L1_mkin, quiet = TRUE) summary(m.L1.SFO) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:13 2023 ## Date of summary: Thu Nov 16 04:20:13 2023 ## ## Equations: ## d_parent/dt = - k_parent * parent ## ## Model predictions using solution type analytical ## ## Fitted using 133 model solutions performed in 0.011 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 89.85 state ## k_parent 0.10 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 89.850000 -Inf Inf ## log_k_parent -2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 93.88778 96.5589 -43.94389 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 92.470 1.28200 89.740 95.200 ## log_k_parent -2.347 0.03763 -2.428 -2.267 ## sigma 2.780 0.46330 1.792 3.767 ## ## Parameter correlation: ## parent_0 log_k_parent sigma ## parent_0 1.000e+00 6.186e-01 -1.516e-09 ## log_k_parent 6.186e-01 1.000e+00 -3.124e-09 ## sigma -1.516e-09 -3.124e-09 1.000e+00 ## ## 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 92.47000 72.13 8.824e-21 89.74000 95.2000 ## k_parent 0.09561 26.57 2.487e-14 0.08824 0.1036 ## sigma 2.78000 6.00 1.216e-05 1.79200 3.7670 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 3.424 2 7 ## parent 3.424 2 7 ## ## Estimated disappearance times: ## DT50 DT90 ## parent 7.249 24.08 ## ## Data: ## time variable observed predicted residual ## 0 parent 88.3 92.471 -4.1710 ## 0 parent 91.4 92.471 -1.0710 ## 1 parent 85.6 84.039 1.5610 ## 1 parent 84.5 84.039 0.4610 ## 2 parent 78.9 76.376 2.5241 ## 2 parent 77.6 76.376 1.2241 ## 3 parent 72.0 69.412 2.5884 ## 3 parent 71.9 69.412 2.4884 ## 5 parent 50.3 57.330 -7.0301 ## 5 parent 59.4 57.330 2.0699 ## 7 parent 47.0 47.352 -0.3515 ## 7 parent 45.1 47.352 -2.2515 ## 14 parent 27.7 24.247 3.4528 ## 14 parent 27.3 24.247 3.0528 ## 21 parent 10.0 12.416 -2.4163 ## 21 parent 10.4 12.416 -2.0163 ## 30 parent 2.9 5.251 -2.3513 ## 30 parent 4.0 5.251 -1.2513 plot(m.L1.SFO, show_errmin = TRUE, main = \"FOCUS L1 - SFO\") mkinresplot(m.L1.SFO, ylab = \"Observed\", xlab = \"Time\") m.L1.FOMC <- mkinfit(\"FOMC\", FOCUS_2006_L1_mkin, quiet=TRUE) ## Warning in mkinfit(\"FOMC\", FOCUS_2006_L1_mkin, quiet = TRUE): Optimisation did not converge: ## false convergence (8) plot(m.L1.FOMC, show_errmin = TRUE, main = \"FOCUS L1 - FOMC\") summary(m.L1.FOMC, data = FALSE) ## Warning in sqrt(diag(covar)): NaNs produced ## Warning in sqrt(1/diag(V)): NaNs produced ## Warning in cov2cor(ans$covar): diag(.) had 0 or NA entries; non-finite result ## is doubtful ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:13 2023 ## Date of summary: Thu Nov 16 04:20:13 2023 ## ## Equations: ## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## ## Fitted using 342 model solutions performed in 0.023 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 89.85 state ## alpha 1.00 deparm ## beta 10.00 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 89.850000 -Inf Inf ## log_alpha 0.000000 -Inf Inf ## log_beta 2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## ## Warning(s): ## Optimisation did not converge: ## false convergence (8) ## ## Results: ## ## AIC BIC logLik ## 95.88782 99.44931 -43.94391 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 92.47 1.2820 89.720 95.220 ## log_alpha 13.20 NaN NaN NaN ## log_beta 15.54 NaN NaN NaN ## sigma 2.78 0.4607 1.792 3.768 ## ## Parameter correlation: ## parent_0 log_alpha log_beta sigma ## parent_0 1.000000 NaN NaN 0.000603 ## log_alpha NaN 1 NaN NaN ## log_beta NaN NaN 1 NaN ## sigma 0.000603 NaN NaN 1.000000 ## ## 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 9.247e+01 NA NA 89.720 95.220 ## alpha 5.386e+05 NA NA NA NA ## beta 5.633e+06 NA NA NA NA ## sigma 2.780e+00 NA NA 1.792 3.768 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 3.619 3 6 ## parent 3.619 3 6 ## ## Estimated disappearance times: ## DT50 DT90 DT50back ## parent 7.249 24.08 7.249"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"laboratory-data-l2","dir":"Articles","previous_headings":"","what":"Laboratory Data L2","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"following code defines example dataset L2 FOCUS kinetics report, p. 287:","code":"FOCUS_2006_L2 = data.frame( t = rep(c(0, 1, 3, 7, 14, 28), each = 2), parent = c(96.1, 91.8, 41.4, 38.7, 19.3, 22.3, 4.6, 4.6, 2.6, 1.2, 0.3, 0.6)) FOCUS_2006_L2_mkin <- mkin_wide_to_long(FOCUS_2006_L2)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"sfo-fit-for-l2","dir":"Articles","previous_headings":"Laboratory Data L2","what":"SFO fit for L2","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":", SFO model fitted result plotted. residual plot can obtained simply adding argument show_residuals plot command. \\(\\chi^2\\) error level 14% suggests model fit well. also obvious plots fit, included residual plot. FOCUS kinetics report, stated apparent systematic error observed residual plot measured DT90 (approximately day 5), underestimation beyond point. may add difficult judge random nature residuals just three samplings days 0, 1 3. Also, clear priori consistent underestimation approximate DT90 irrelevant. However, can rationalised fact FOCUS fate models generally implement SFO kinetics.","code":"m.L2.SFO <- mkinfit(\"SFO\", FOCUS_2006_L2_mkin, quiet=TRUE) plot(m.L2.SFO, show_residuals = TRUE, show_errmin = TRUE, main = \"FOCUS L2 - SFO\")"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"fomc-fit-for-l2","dir":"Articles","previous_headings":"Laboratory Data L2","what":"FOMC fit for L2","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"comparison, FOMC model fitted well, \\(\\chi^2\\) error level checked. error level \\(\\chi^2\\) test passes much lower case. Therefore, FOMC model provides better description data, less experimental error assumed order explain data.","code":"m.L2.FOMC <- mkinfit(\"FOMC\", FOCUS_2006_L2_mkin, quiet = TRUE) plot(m.L2.FOMC, show_residuals = TRUE, main = \"FOCUS L2 - FOMC\") summary(m.L2.FOMC, data = FALSE) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:13 2023 ## Date of summary: Thu Nov 16 04:20:14 2023 ## ## Equations: ## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## ## Fitted using 239 model solutions performed in 0.014 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 93.95 state ## alpha 1.00 deparm ## beta 10.00 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 93.950000 -Inf Inf ## log_alpha 0.000000 -Inf Inf ## log_beta 2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 61.78966 63.72928 -26.89483 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 93.7700 1.6130 90.05000 97.4900 ## log_alpha 0.3180 0.1559 -0.04149 0.6776 ## log_beta 0.2102 0.2493 -0.36460 0.7850 ## sigma 2.2760 0.4645 1.20500 3.3470 ## ## Parameter correlation: ## parent_0 log_alpha log_beta sigma ## parent_0 1.000e+00 -1.151e-01 -2.085e-01 -7.436e-09 ## log_alpha -1.151e-01 1.000e+00 9.741e-01 -1.617e-07 ## log_beta -2.085e-01 9.741e-01 1.000e+00 -1.386e-07 ## sigma -7.436e-09 -1.617e-07 -1.386e-07 1.000e+00 ## ## 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 93.770 58.120 4.267e-12 90.0500 97.490 ## alpha 1.374 6.414 1.030e-04 0.9594 1.969 ## beta 1.234 4.012 1.942e-03 0.6945 2.192 ## sigma 2.276 4.899 5.977e-04 1.2050 3.347 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 6.205 3 3 ## parent 6.205 3 3 ## ## Estimated disappearance times: ## DT50 DT90 DT50back ## parent 0.8092 5.356 1.612"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"dfop-fit-for-l2","dir":"Articles","previous_headings":"Laboratory Data L2","what":"DFOP fit for L2","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"Fitting four parameter DFOP model reduces \\(\\chi^2\\) error level. , DFOP model clearly best-fit model dataset L2 based chi^2 error level criterion.","code":"m.L2.DFOP <- mkinfit(\"DFOP\", FOCUS_2006_L2_mkin, quiet = TRUE) plot(m.L2.DFOP, show_residuals = TRUE, show_errmin = TRUE, main = \"FOCUS L2 - DFOP\") summary(m.L2.DFOP, data = FALSE) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:14 2023 ## Date of summary: Thu Nov 16 04:20:14 2023 ## ## 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 ## ## Model predictions using solution type analytical ## ## Fitted using 581 model solutions performed in 0.041 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 93.95 state ## k1 0.10 deparm ## k2 0.01 deparm ## g 0.50 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 93.950000 -Inf Inf ## log_k1 -2.302585 -Inf Inf ## log_k2 -4.605170 -Inf Inf ## g_qlogis 0.000000 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 52.36695 54.79148 -21.18347 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 93.950 9.998e-01 91.5900 96.3100 ## log_k1 3.113 1.849e+03 -4369.0000 4375.0000 ## log_k2 -1.088 6.285e-02 -1.2370 -0.9394 ## g_qlogis -0.399 9.946e-02 -0.6342 -0.1638 ## sigma 1.414 2.886e-01 0.7314 2.0960 ## ## Parameter correlation: ## parent_0 log_k1 log_k2 g_qlogis sigma ## parent_0 1.000e+00 6.763e-07 -8.944e-10 2.665e-01 -1.083e-09 ## log_k1 6.763e-07 1.000e+00 1.112e-04 -2.187e-04 -1.027e-05 ## log_k2 -8.944e-10 1.112e-04 1.000e+00 -7.903e-01 9.464e-09 ## g_qlogis 2.665e-01 -2.187e-04 -7.903e-01 1.000e+00 -1.532e-08 ## sigma -1.083e-09 -1.027e-05 9.464e-09 -1.532e-08 1.000e+00 ## ## 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 93.9500 9.397e+01 2.036e-12 91.5900 96.3100 ## k1 22.4900 5.533e-04 4.998e-01 0.0000 Inf ## k2 0.3369 1.591e+01 4.697e-07 0.2904 0.3909 ## g 0.4016 1.680e+01 3.238e-07 0.3466 0.4591 ## sigma 1.4140 4.899e+00 8.776e-04 0.7314 2.0960 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 2.53 4 2 ## parent 2.53 4 2 ## ## Estimated disappearance times: ## DT50 DT90 DT50back DT50_k1 DT50_k2 ## parent 0.5335 5.311 1.599 0.03083 2.058"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"laboratory-data-l3","dir":"Articles","previous_headings":"","what":"Laboratory Data L3","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"following code defines example dataset L3 FOCUS kinetics report, p. 290.","code":"FOCUS_2006_L3 = data.frame( t = c(0, 3, 7, 14, 30, 60, 91, 120), parent = c(97.8, 60, 51, 43, 35, 22, 15, 12)) FOCUS_2006_L3_mkin <- mkin_wide_to_long(FOCUS_2006_L3)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"fit-multiple-models","dir":"Articles","previous_headings":"Laboratory Data L3","what":"Fit multiple models","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"mkin version 0.9-39 (June 2015), can fit several models one datasets one call function mmkin. datasets passed list, case named list holding L3 dataset prepared . \\(\\chi^2\\) error level 21% well plot suggest SFO model fit well. FOMC model performs better, error level \\(\\chi^2\\) test passes 7%. Fitting four parameter DFOP model reduces \\(\\chi^2\\) error level considerably.","code":"# Only use one core here, not to offend the CRAN checks mm.L3 <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), cores = 1, list(\"FOCUS L3\" = FOCUS_2006_L3_mkin), quiet = TRUE) plot(mm.L3)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"accessing-mmkin-objects","dir":"Articles","previous_headings":"Laboratory Data L3","what":"Accessing mmkin objects","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"objects returned mmkin arranged like matrix, models row index datasets column index. can extract summary plot e.g. DFOP fit, using square brackets indexing result use summary plot functions working mkinfit objects. , look model plot, confidence intervals parameters correlation matrix suggest parameter estimates reliable, DFOP model can used best-fit model based \\(\\chi^2\\) error level criterion laboratory data L3. also example standard t-test parameter g_ilr misleading, tests significant difference zero. case, zero appears correct value parameter, confidence interval backtransformed parameter g quite narrow.","code":"summary(mm.L3[[\"DFOP\", 1]]) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:14 2023 ## Date of summary: Thu Nov 16 04:20:14 2023 ## ## 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 ## ## Model predictions using solution type analytical ## ## Fitted using 376 model solutions performed in 0.024 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 97.80 state ## k1 0.10 deparm ## k2 0.01 deparm ## g 0.50 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 97.800000 -Inf Inf ## log_k1 -2.302585 -Inf Inf ## log_k2 -4.605170 -Inf Inf ## g_qlogis 0.000000 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 32.97732 33.37453 -11.48866 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 97.7500 1.01900 94.5000 101.000000 ## log_k1 -0.6612 0.10050 -0.9812 -0.341300 ## log_k2 -4.2860 0.04322 -4.4230 -4.148000 ## g_qlogis -0.1739 0.05270 -0.3416 -0.006142 ## sigma 1.0170 0.25430 0.2079 1.827000 ## ## Parameter correlation: ## parent_0 log_k1 log_k2 g_qlogis sigma ## parent_0 1.000e+00 1.732e-01 2.282e-02 4.009e-01 -9.696e-08 ## log_k1 1.732e-01 1.000e+00 4.945e-01 -5.809e-01 7.148e-07 ## log_k2 2.282e-02 4.945e-01 1.000e+00 -6.812e-01 1.022e-06 ## g_qlogis 4.009e-01 -5.809e-01 -6.812e-01 1.000e+00 -7.930e-07 ## sigma -9.696e-08 7.148e-07 1.022e-06 -7.930e-07 1.000e+00 ## ## 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 97.75000 95.960 1.248e-06 94.50000 101.00000 ## k1 0.51620 9.947 1.081e-03 0.37490 0.71090 ## k2 0.01376 23.140 8.840e-05 0.01199 0.01579 ## g 0.45660 34.920 2.581e-05 0.41540 0.49850 ## sigma 1.01700 4.000 1.400e-02 0.20790 1.82700 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 2.225 4 4 ## parent 2.225 4 4 ## ## Estimated disappearance times: ## DT50 DT90 DT50back DT50_k1 DT50_k2 ## parent 7.464 123 37.03 1.343 50.37 ## ## Data: ## time variable observed predicted residual ## 0 parent 97.8 97.75 0.05396 ## 3 parent 60.0 60.45 -0.44933 ## 7 parent 51.0 49.44 1.56338 ## 14 parent 43.0 43.84 -0.83632 ## 30 parent 35.0 35.15 -0.14707 ## 60 parent 22.0 23.26 -1.25919 ## 91 parent 15.0 15.18 -0.18181 ## 120 parent 12.0 10.19 1.81395 plot(mm.L3[[\"DFOP\", 1]], show_errmin = TRUE)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html","id":"laboratory-data-l4","dir":"Articles","previous_headings":"","what":"Laboratory Data L4","title":"Example evaluation of FOCUS Laboratory Data L1 to L3","text":"following code defines example dataset L4 FOCUS kinetics report, p. 293: Fits SFO FOMC models, plots summaries produced : \\(\\chi^2\\) error level 3.3% well plot suggest SFO model fits well. error level \\(\\chi^2\\) test passes slightly lower FOMC model. However, difference appears negligible.","code":"FOCUS_2006_L4 = data.frame( t = c(0, 3, 7, 14, 30, 60, 91, 120), parent = c(96.6, 96.3, 94.3, 88.8, 74.9, 59.9, 53.5, 49.0)) FOCUS_2006_L4_mkin <- mkin_wide_to_long(FOCUS_2006_L4) # Only use one core here, not to offend the CRAN checks mm.L4 <- mmkin(c(\"SFO\", \"FOMC\"), cores = 1, list(\"FOCUS L4\" = FOCUS_2006_L4_mkin), quiet = TRUE) plot(mm.L4) summary(mm.L4[[\"SFO\", 1]], data = FALSE) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:14 2023 ## Date of summary: Thu Nov 16 04:20:15 2023 ## ## Equations: ## d_parent/dt = - k_parent * parent ## ## Model predictions using solution type analytical ## ## Fitted using 142 model solutions performed in 0.01 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 96.6 state ## k_parent 0.1 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 96.600000 -Inf Inf ## log_k_parent -2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 47.12133 47.35966 -20.56067 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 96.440 1.69900 92.070 100.800 ## log_k_parent -5.030 0.07059 -5.211 -4.848 ## sigma 3.162 0.79050 1.130 5.194 ## ## Parameter correlation: ## parent_0 log_k_parent sigma ## parent_0 1.000e+00 5.938e-01 3.430e-07 ## log_k_parent 5.938e-01 1.000e+00 5.885e-07 ## sigma 3.430e-07 5.885e-07 1.000e+00 ## ## 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 96.440000 56.77 1.604e-08 92.070000 1.008e+02 ## k_parent 0.006541 14.17 1.578e-05 0.005455 7.842e-03 ## sigma 3.162000 4.00 5.162e-03 1.130000 5.194e+00 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 3.287 2 6 ## parent 3.287 2 6 ## ## Estimated disappearance times: ## DT50 DT90 ## parent 106 352 summary(mm.L4[[\"FOMC\", 1]], data = FALSE) ## mkin version used for fitting: 1.2.6 ## R version used for fitting: 4.3.2 ## Date of fit: Thu Nov 16 04:20:15 2023 ## Date of summary: Thu Nov 16 04:20:15 2023 ## ## Equations: ## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## ## Fitted using 224 model solutions performed in 0.014 s ## ## Error model: Constant variance ## ## Error model algorithm: OLS ## ## Starting values for parameters to be optimised: ## value type ## parent_0 96.6 state ## alpha 1.0 deparm ## beta 10.0 deparm ## ## Starting values for the transformed parameters actually optimised: ## value lower upper ## parent_0 96.600000 -Inf Inf ## log_alpha 0.000000 -Inf Inf ## log_beta 2.302585 -Inf Inf ## ## Fixed parameter values: ## None ## ## Results: ## ## AIC BIC logLik ## 40.37255 40.69032 -16.18628 ## ## Optimised, transformed parameters with symmetric confidence intervals: ## Estimate Std. Error Lower Upper ## parent_0 99.1400 1.2670 95.6300 102.7000 ## log_alpha -0.3506 0.2616 -1.0770 0.3756 ## log_beta 4.1740 0.3938 3.0810 5.2670 ## sigma 1.8300 0.4575 0.5598 3.1000 ## ## Parameter correlation: ## parent_0 log_alpha log_beta sigma ## parent_0 1.000e+00 -4.696e-01 -5.543e-01 -2.447e-07 ## log_alpha -4.696e-01 1.000e+00 9.889e-01 2.198e-08 ## log_beta -5.543e-01 9.889e-01 1.000e+00 4.923e-08 ## sigma -2.447e-07 2.198e-08 4.923e-08 1.000e+00 ## ## 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 99.1400 78.250 7.993e-08 95.6300 102.700 ## alpha 0.7042 3.823 9.365e-03 0.3407 1.456 ## beta 64.9800 2.540 3.201e-02 21.7800 193.900 ## sigma 1.8300 4.000 8.065e-03 0.5598 3.100 ## ## FOCUS Chi2 error levels in percent: ## err.min n.optim df ## All data 2.029 3 5 ## parent 2.029 3 5 ## ## Estimated disappearance times: ## DT50 DT90 DT50back ## parent 108.9 1644 494.9"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"abstract","dir":"Articles","previous_headings":"","what":"Abstract","title":"Short introduction to mkin","text":"regulatory evaluation chemical substances like plant protection products (pesticides), biocides chemicals, degradation data play important role. evaluation pesticide degradation experiments, detailed guidance developed, based nonlinear optimisation. R add-package mkin implements fitting models recommended guidance within R calculates statistical measures data series within one compartments, parent metabolites.","code":"library(\"mkin\", quietly = TRUE) # Define the kinetic model m_SFO_SFO_SFO <- mkinmod(parent = mkinsub(\"SFO\", \"M1\"), M1 = mkinsub(\"SFO\", \"M2\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) # Produce model predictions using some arbitrary parameters sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) d_SFO_SFO_SFO <- mkinpredict(m_SFO_SFO_SFO, c(k_parent = 0.03, f_parent_to_M1 = 0.5, k_M1 = log(2)/100, f_M1_to_M2 = 0.9, k_M2 = log(2)/50), c(parent = 100, M1 = 0, M2 = 0), sampling_times) # Generate a dataset by adding normally distributed errors with # standard deviation 3, for two replicates at each sampling time d_SFO_SFO_SFO_err <- add_err(d_SFO_SFO_SFO, reps = 2, sdfunc = function(x) 3, n = 1, seed = 123456789 ) # Fit the model to the dataset f_SFO_SFO_SFO <- mkinfit(m_SFO_SFO_SFO, d_SFO_SFO_SFO_err[[1]], quiet = TRUE) # Plot the results separately for parent and metabolites plot_sep(f_SFO_SFO_SFO, lpos = c(\"topright\", \"bottomright\", \"bottomright\"))"},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"background","dir":"Articles","previous_headings":"","what":"Background","title":"Short introduction to mkin","text":"mkin package (J. Ranke 2021) implements approach degradation kinetics recommended kinetics report provided FOrum Co-ordination pesticide fate models USe (FOCUS Work Group Degradation Kinetics 2006, 2014). covers data series describing decline one compound, data series transformation products (commonly termed metabolites) data series one compartment. possible include back reactions. Therefore, equilibrium reactions equilibrium partitioning can specified, although often leads overparameterisation model. first mkin code published 2010, commonly used tools fitting complex kinetic degradation models experimental data KinGUI (Schäfer et al. 2007), MATLAB based tool graphical user interface specifically tailored task included output proposed FOCUS Kinetics Workgroup, ModelMaker, general purpose compartment based tool providing infrastructure fitting dynamic simulation models based differential equations data. ‘mkin’ code first uploaded BerliOS development platform. taken , version control history imported R-Forge site (see e.g. initial commit 11 May 2010), code still updated. time, R package FME (Flexible Modelling Environment) (Soetaert Petzoldt 2010) already available, provided good basis developing package specifically tailored task. remaining challenge make easy possible users (including author vignette) specify system differential equations include output requested FOCUS guidance, χ2\\chi^2 error level defined guidance. Also, mkin introduced using analytical solutions parent kinetics improved optimization speed. Later, Eigenvalue based solutions introduced mkin case linear differential equations (.e. FOMC DFOP models used parent compound), greatly improving optimization speed cases. , become somehow obsolete, use compiled code described gives even faster execution times. possibility specify back-reactions biphasic model (SFORB) metabolites present mkin beginning.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"derived-software-tools","dir":"Articles","previous_headings":"Background","what":"Derived software tools","title":"Short introduction to mkin","text":"Soon publication mkin, two derived tools published, namely KinGUII (developed Bayer Crop Science) CAKE (commissioned Tessella Syngenta), added graphical user interface (GUI), added fitting iteratively reweighted least squares (IRLS) characterisation likely parameter distributions Markov Chain Monte Carlo (MCMC) sampling. CAKE focuses smooth use experience, sacrificing flexibility model definition, originally allowing two primary metabolites parallel. current version 3.4 CAKE released May 2020 uses scheme six metabolites flexible arrangement supports biphasic modelling metabolites, support back-reactions (non-instantaneous equilibria). KinGUI offers even flexible widget specifying complex kinetic models. Back-reactions (non-instantaneous equilibria) supported early , 2014, simple first-order models specified transformation products. Starting KinGUII version 2.1, biphasic modelling metabolites also available KinGUII. graphical user interface (GUI) recently brought decent degree maturity browser based GUI named gmkin. Please see documentation page manual information. comparison scope, usability numerical results obtained tools recently published Johannes Ranke, Wöltjen, Meinecke (2018).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"unique-features","dir":"Articles","previous_headings":"","what":"Unique features","title":"Short introduction to mkin","text":"Currently, main unique features available mkin speed increase using compiled code compiler present, parallel model fitting multicore machines using mmkin function, estimation parameter confidence intervals based transformed parameters (see ) possibility use two-component error model iteratively reweighted least squares fitting different variances variable introduced Gao et al. (2011) available mkin since version 0.9-22. release 0.9.49.5, IRLS algorithm complemented direct step-wise maximisation likelihood function, makes possible fit variance variable error model also two-component error model inspired error models developed analytical chemistry (Johannes Ranke Meinecke 2019).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"internal-parameter-transformations","dir":"Articles","previous_headings":"","what":"Internal parameter transformations","title":"Short introduction to mkin","text":"rate constants, log transformation used, proposed Bates Watts (1988, 77, 149). Approximate intervals constructed transformed rate constants (compare Bates Watts 1988, 135), .e. logarithms. Confidence intervals rate constants obtained using appropriate backtransformation using exponential function. first version mkin allowing specifying models using formation fractions, home-made reparameterisation used order ensure sum formation fractions exceed unity. method still used current version KinGUII (v2.1 April 2014), modification allows fixing pathway sink zero. CAKE uses penalties objective function order enforce constraint. 2012, alternative reparameterisation formation fractions proposed together René Lehmann (J. Ranke Lehmann 2012), based isometric logratio transformation (ILR). aim improve validity linear approximation objective function parameter estimation procedure well subsequent calculation parameter confidence intervals. current version mkin, logit transformation used parameters bound 0 1, g parameter DFOP model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"confidence-intervals-based-on-transformed-parameters","dir":"Articles","previous_headings":"Internal parameter transformations","what":"Confidence intervals based on transformed parameters","title":"Short introduction to mkin","text":"first attempt providing improved parameter confidence intervals introduced mkin 2013, confidence intervals obtained FME transformed parameters simply backtransformed one one yield asymmetric confidence intervals backtransformed parameters. However, 1:1 relation rate constants model transformed parameters fitted model, parameters obtained isometric logratio transformation calculated set formation fractions quantify paths compounds formed specific parent compound, 1:1 relation exists. Therefore, parameter confidence intervals formation fractions obtained method appear valid case single transformation product, currently logit transformation used formation fraction. confidence intervals obtained backtransformation cases 1:1 relation transformed original parameter exist considered author vignette accurate obtained using re-estimation Hessian matrix backtransformation, implemented FME package.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/mkin.html","id":"parameter-t-test-based-on-untransformed-parameters","dir":"Articles","previous_headings":"Internal parameter transformations","what":"Parameter t-test based on untransformed parameters","title":"Short introduction to mkin","text":"standard output many nonlinear regression software packages includes results test significant difference zero parameters. test also recommended check validity rate constants FOCUS guidance (FOCUS Work Group Degradation Kinetics 2014, 96ff). argued precondition test, .e. normal distribution estimator parameters, fulfilled case nonlinear regression (J. Ranke Lehmann 2015). However, test commonly used industry, consultants national authorities order decide reliability parameter estimates, based FOCUS guidance mentioned . Therefore, results one-sided t-test included summary output mkin. reasonable test significant difference transformed parameters (e.g. log(k)log(k)) zero, t-test calculated based model definition parameter transformation, .e. similar way packages apply internal parameter transformation. note included mkin output, pointing fact t-test based unjustified assumption normal distribution parameter estimators.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"introduction","dir":"Articles > Prebuilt","previous_headings":"","what":"Introduction","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"purpose document test demonstrate nonlinear hierarchical models (NLHM) based parent degradation models SFO, FOMC, DFOP HS, serial formation two metabolites can fitted mkin package. assembled course work package 1.2 Project Number 173340 (Application nonlinear hierarchical models kinetic evaluation chemical degradation data) German Environment Agency carried 2022 2023. mkin package used version 1.2.6 currently development. newly introduced functionality used simplification excluding random effects set fits based related set fits reduced model, documentation starting parameters fit, starting parameters saem fits now listed summary. saemix package used backend fitting NLHM, also loaded make convergence plot function available. document processed knitr package, also provides kable function used improve display tabular data R markdown documents. parallel processing, parallel package used.","code":"library(mkin) library(knitr) library(saemix) library(parallel) n_cores <- detectCores() # We need to start a new cluster after defining a compiled model that is # saved as a DLL to the user directory, therefore we define a function # This is used again after defining the pathway model start_cluster <- function(n_cores) { if (Sys.info()[\"sysname\"] == \"Windows\") { ret <- makePSOCKcluster(n_cores) } else { ret <- makeForkCluster(n_cores) } return(ret) } cl <- start_cluster(n_cores)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"test-data","dir":"Articles > Prebuilt","previous_headings":"Introduction","what":"Test data","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"example data taken final addendum DAR 2014 distributed mkin package. Residue data time step normalisation factors read using function read_spreadsheet mkin package. function also performs time step normalisation. following tables show covariate data 5 datasets read spreadsheet file. Covariate data Dataset Nambsheim Dataset Tama Dataset Gross-Umstadt Dataset Sassafras Dataset Lleida","code":"data_file <- system.file( \"testdata\", \"cyantraniliprole_soil_efsa_2014.xlsx\", package = \"mkin\") cyan_ds <- read_spreadsheet(data_file, parent_only = FALSE) pH <- attr(cyan_ds, \"covariates\") kable(pH, caption = \"Covariate data\") for (ds_name in names(cyan_ds)) { print( kable(mkin_long_to_wide(cyan_ds[[ds_name]]), caption = paste(\"Dataset\", ds_name), booktabs = TRUE, row.names = FALSE)) cat(\"\\n\\\\clearpage\\n\") }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"parent-only-evaluations","dir":"Articles > Prebuilt","previous_headings":"","what":"Parent only evaluations","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"pathway fits long run times, evaluations parent data performed first, order determine hierarchical parent degradation model random effects degradation model parameters ill-defined. fits converged successfully. almost models, random effect initial concentration parent compound ill-defined. biexponential models DFOP SFORB, random effect one additional parameter ill-defined two-component error model used. Model comparison based AIC BIC indicates two-component error model preferable parent models exception DFOP. lowest AIC BIC values obtained FOMC model, followed SFORB DFOP.","code":"cyan_sep_const <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\", \"SFORB\", \"HS\"), cyan_ds, quiet = TRUE, cores = n_cores) cyan_sep_tc <- update(cyan_sep_const, error_model = \"tc\") cyan_saem_full <- mhmkin(list(cyan_sep_const, cyan_sep_tc)) status(cyan_saem_full) |> kable() illparms(cyan_saem_full) |> kable() anova(cyan_saem_full) |> kable(digits = 1) stopCluster(cl)"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"evaluations-with-pathway-established-previously","dir":"Articles > Prebuilt","previous_headings":"Pathway fits","what":"Evaluations with pathway established previously","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"test technical feasibility coupling relevant parent degradation models different transformation pathway models, list mkinmod models set . EU evaluation, parallel formation metabolites JCZ38 J9Z38 secondary formation metabolite JSE76 JCZ38 used. obtain suitable starting values NLHM fits, separate pathway fits performed datasets. separate fits converged successfully. biggest convergence problems seen using HS model constant variance. hierarchical pathway fits, random effects quantified corresponding parent data analyses excluded. code , output illparms function parent fits used argument no_random_effect mhmkin function. possibility introduced mkin version 1.2.2 currently development. status information individual fits shows fits completed successfully. matrix entries Fth FO indicate Fisher Information Matrix inverted fixed effects (theta) random effects (Omega), respectively. affected fits, ill-defined parameters determined using illparms function, relies Fisher Information Matrix. model comparison suggests pathway fits using DFOP SFORB parent compound provide best fit. two parent model, successful fits shown . Plots fits parent models shown Appendix. DFOP pathway fit two-component error SFORB pathway fit two-component error closer graphical analysis Figures shows residues transformation product JCZ38 soils Tama Nambsheim observed later time points strongly systematically underestimated.","code":"if (!dir.exists(\"cyan_dlls\")) dir.create(\"cyan_dlls\") cyan_path_1 <- list( sfo_path_1 = mkinmod( cyan = mkinsub(\"SFO\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"sfo_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE), fomc_path_1 = mkinmod( cyan = mkinsub(\"FOMC\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"fomc_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE), dfop_path_1 = mkinmod( cyan = mkinsub(\"DFOP\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"dfop_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE), sforb_path_1 = mkinmod( cyan = mkinsub(\"SFORB\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"sforb_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE), hs_path_1 = mkinmod( cyan = mkinsub(\"HS\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\"), quiet = TRUE, name = \"hs_path_1\", dll_dir = \"cyan_dlls\", overwrite = TRUE) ) cl_path_1 <- start_cluster(n_cores) f_sep_1_const <- mmkin( cyan_path_1, cyan_ds, error_model = \"const\", cluster = cl_path_1, quiet = TRUE) status(f_sep_1_const) |> kable() f_sep_1_tc <- update(f_sep_1_const, error_model = \"tc\") status(f_sep_1_tc) |> kable() f_saem_1 <- mhmkin(list(f_sep_1_const, f_sep_1_tc), no_random_effect = illparms(cyan_saem_full), cluster = cl_path_1) status(f_saem_1) |> kable() illparms(f_saem_1) |> kable() anova(f_saem_1) |> kable(digits = 1) plot(f_saem_1[[\"dfop_path_1\", \"tc\"]]) plot(f_saem_1[[\"sforb_path_1\", \"tc\"]]) stopCluster(cl_path_1)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"alternative-pathway-fits","dir":"Articles > Prebuilt","previous_headings":"Pathway fits","what":"Alternative pathway fits","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"improve fit JCZ38, back-reaction JSE76 JCZ38 introduced alternative version transformation pathway, analogy back-reaction K5A78 K5A77. pairs transformation products pairs organic acid corresponding amide (Addendum 2014, p. 109). FOMC provided best fit parent, biexponential models DFOP SFORB provided best initial pathway fits, three parent models used alternative pathway fits. Using constant variance, separate fits converge exception fits Sassafras soil data. Using two-component error model, separate fits converge exception alternative pathway fit DFOP used parent Sassafras dataset. hierarchical fits alternative pathway completed successfully. fits, random effects formation fractions pathways JCZ38 JSE76, reverse pathway JSE76 JCZ38 ill-defined. variants using biexponential models DFOP SFORB parent compound two-component error model give lowest AIC BIC values plotted . Compared original pathway, AIC BIC values indicate large improvement. confirmed plots, show metabolite JCZ38 fitted much better model. FOMC pathway fit two-component error, alternative pathway DFOP pathway fit two-component error, alternative pathway SFORB pathway fit two-component error, alternative pathway","code":"cyan_path_2 <- list( fomc_path_2 = mkinmod( cyan = mkinsub(\"FOMC\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\", \"JCZ38\"), name = \"fomc_path_2\", quiet = TRUE, dll_dir = \"cyan_dlls\", overwrite = TRUE ), dfop_path_2 = mkinmod( cyan = mkinsub(\"DFOP\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\", \"JCZ38\"), name = \"dfop_path_2\", quiet = TRUE, dll_dir = \"cyan_dlls\", overwrite = TRUE ), sforb_path_2 = mkinmod( cyan = mkinsub(\"SFORB\", c(\"JCZ38\", \"J9Z38\")), JCZ38 = mkinsub(\"SFO\", \"JSE76\"), J9Z38 = mkinsub(\"SFO\"), JSE76 = mkinsub(\"SFO\", \"JCZ38\"), name = \"sforb_path_2\", quiet = TRUE, dll_dir = \"cyan_dlls\", overwrite = TRUE ) ) cl_path_2 <- start_cluster(n_cores) f_sep_2_const <- mmkin( cyan_path_2, cyan_ds, error_model = \"const\", cluster = cl_path_2, quiet = TRUE) status(f_sep_2_const) |> kable() f_sep_2_tc <- update(f_sep_2_const, error_model = \"tc\") status(f_sep_2_tc) |> kable() f_saem_2 <- mhmkin(list(f_sep_2_const, f_sep_2_tc), no_random_effect = illparms(cyan_saem_full[2:4, ]), cluster = cl_path_2) status(f_saem_2) |> kable() illparms(f_saem_2) |> kable() anova(f_saem_2) |> kable(digits = 1) plot(f_saem_2[[\"fomc_path_2\", \"tc\"]]) plot(f_saem_2[[\"dfop_path_2\", \"tc\"]]) plot(f_saem_2[[\"sforb_path_2\", \"tc\"]])"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"refinement-of-alternative-pathway-fits","dir":"Articles > Prebuilt","previous_headings":"Pathway fits","what":"Refinement of alternative pathway fits","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"ill-defined random effects identified parent fits pathway fits, excluded final evaluations . purpose, list character vectors created can indexed row column indices, contains degradation parameter names random effects excluded hierarchical fits contained f_saem_2. exception FOMC pathway fit constant variance, updated fits completed successfully. However, Fisher Information Matrix fixed effects (Fth) inverted, confidence intervals optimised parameters available. AIC BIC values best fit (DFOP pathway fit two-component error) lower previous fits alternative pathway, practical value refined evaluations limited confidence intervals obtained.","code":"no_ranef <- matrix(list(), nrow = 3, ncol = 2, dimnames = dimnames(f_saem_2)) no_ranef[[\"fomc_path_2\", \"const\"]] <- c(\"log_beta\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"fomc_path_2\", \"tc\"]] <- c(\"cyan_0\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"dfop_path_2\", \"const\"]] <- c(\"cyan_0\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"dfop_path_2\", \"tc\"]] <- c(\"cyan_0\", \"log_k1\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"sforb_path_2\", \"const\"]] <- c(\"cyan_free_0\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") no_ranef[[\"sforb_path_2\", \"tc\"]] <- c(\"cyan_free_0\", \"log_k_cyan_free_bound\", \"f_JCZ38_qlogis\", \"f_JSE76_qlogis\") clusterExport(cl_path_2, \"no_ranef\") f_saem_3 <- update(f_saem_2, no_random_effect = no_ranef, cluster = cl_path_2) status(f_saem_3) |> kable() illparms(f_saem_3) |> kable() anova(f_saem_3) |> kable(digits = 1) stopCluster(cl_path_2)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"conclusion","dir":"Articles > Prebuilt","previous_headings":"","what":"Conclusion","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"demonstrated relatively complex transformation pathway parallel formation two primary metabolites one secondary metabolite can fitted even data individual datasets quite different partly cover formation phase. run times pathway fits several hours, limiting practical feasibility iterative refinements based ill-defined parameters alternative checks parameter identifiability based multistart runs.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"acknowledgements","dir":"Articles > Prebuilt","previous_headings":"","what":"Acknowledgements","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"helpful comments Janina Wöltjen German Environment Agency gratefully acknowledged.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"plots-of-fits-that-were-not-refined-further","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Plots of fits that were not refined further","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"SFO pathway fit two-component error FOMC pathway fit two-component error HS pathway fit two-component error","code":"plot(f_saem_1[[\"sfo_path_1\", \"tc\"]]) plot(f_saem_1[[\"fomc_path_1\", \"tc\"]]) plot(f_saem_1[[\"sforb_path_1\", \"tc\"]])"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"pathway-1","dir":"Articles > Prebuilt","previous_headings":"Appendix > Hierarchical fit listings","what":"Pathway 1","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"Hierarchical SFO path 1 fit constant variance Hierarchical SFO path 1 fit two-component error Hierarchical FOMC path 1 fit constant variance Hierarchical FOMC path 1 fit two-component error Hierarchical DFOP path 1 fit constant variance Hierarchical DFOP path 1 fit two-component error Hierarchical SFORB path 1 fit constant variance Hierarchical SFORB path 1 fit two-component error Hierarchical HS path 1 fit constant variance","code":"saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:27:41 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - k_cyan * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * k_cyan * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * k_cyan * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 421.347 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_cyan log_k_JCZ38 log_k_J9Z38 log_k_JSE76 95.3304 -3.8459 -3.1305 -5.0678 -5.3196 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis 0.8158 23.5335 11.8774 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_cyan log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_0 4.797 0.0000 0.000 0.000 0.0000 log_k_cyan 0.000 0.9619 0.000 0.000 0.0000 log_k_JCZ38 0.000 0.0000 2.139 0.000 0.0000 log_k_J9Z38 0.000 0.0000 0.000 1.639 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.000 0.7894 f_cyan_ilr_1 0.000 0.0000 0.000 0.000 0.0000 f_cyan_ilr_2 0.000 0.0000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.000 0.0000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis cyan_0 0.0000 0.000 0.00 log_k_cyan 0.0000 0.000 0.00 log_k_JCZ38 0.0000 0.000 0.00 log_k_J9Z38 0.0000 0.000 0.00 log_k_JSE76 0.0000 0.000 0.00 f_cyan_ilr_1 0.7714 0.000 0.00 f_cyan_ilr_2 0.0000 9.247 0.00 f_JCZ38_qlogis 0.0000 0.000 16.61 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2693 2687 -1331 Optimised parameters: est. lower upper cyan_0 95.1279 9.354e+01 9.671e+01 log_k_cyan -3.8527 -4.367e+00 -3.338e+00 log_k_JCZ38 -3.0381 -4.187e+00 -1.889e+00 log_k_J9Z38 -5.0095 -5.623e+00 -4.396e+00 log_k_JSE76 -5.3357 -6.025e+00 -4.646e+00 f_cyan_ilr_1 0.8050 5.174e-01 1.093e+00 f_cyan_ilr_2 12.4820 -1.050e+06 1.051e+06 f_JCZ38_qlogis 1.2912 3.561e-01 2.226e+00 a.1 4.8393 NA NA SD.log_k_cyan 0.5840 NA NA SD.log_k_JCZ38 1.2740 NA NA SD.log_k_J9Z38 0.3172 NA NA SD.log_k_JSE76 0.5677 NA NA SD.f_cyan_ilr_1 0.2623 NA NA SD.f_cyan_ilr_2 1.3724 NA NA SD.f_JCZ38_qlogis 0.1464 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_cyan 0.5840 NA NA SD.log_k_JCZ38 1.2740 NA NA SD.log_k_J9Z38 0.3172 NA NA SD.log_k_JSE76 0.5677 NA NA SD.f_cyan_ilr_1 0.2623 NA NA SD.f_cyan_ilr_2 1.3724 NA NA SD.f_JCZ38_qlogis 0.1464 NA NA Variance model: est. lower upper a.1 4.839 NA NA Backtransformed parameters: est. lower upper cyan_0 95.127935 93.542456 96.713413 k_cyan 0.021221 0.012687 0.035497 k_JCZ38 0.047924 0.015189 0.151213 k_J9Z38 0.006674 0.003612 0.012332 k_JSE76 0.004817 0.002417 0.009601 f_cyan_to_JCZ38 0.757402 NA NA f_cyan_to_J9Z38 0.242597 NA NA f_JCZ38_to_JSE76 0.784347 0.588098 0.902582 Resulting formation fractions: ff cyan_JCZ38 7.574e-01 cyan_J9Z38 2.426e-01 cyan_sink 9.839e-08 JCZ38_JSE76 7.843e-01 JCZ38_sink 2.157e-01 Estimated disappearance times: DT50 DT90 cyan 32.66 108.50 JCZ38 14.46 48.05 J9Z38 103.86 345.00 JSE76 143.91 478.04 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:27:55 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - k_cyan * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * k_cyan * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * k_cyan * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 435.122 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_cyan log_k_JCZ38 log_k_J9Z38 log_k_JSE76 96.0039 -3.8907 -3.1276 -5.0069 -4.9367 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis 0.7937 22.3422 17.8932 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_cyan log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_0 4.859 0.000 0.00 0.00 0.0000 log_k_cyan 0.000 0.962 0.00 0.00 0.0000 log_k_JCZ38 0.000 0.000 2.04 0.00 0.0000 log_k_J9Z38 0.000 0.000 0.00 1.72 0.0000 log_k_JSE76 0.000 0.000 0.00 0.00 0.9076 f_cyan_ilr_1 0.000 0.000 0.00 0.00 0.0000 f_cyan_ilr_2 0.000 0.000 0.00 0.00 0.0000 f_JCZ38_qlogis 0.000 0.000 0.00 0.00 0.0000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis cyan_0 0.0000 0.000 0.00 log_k_cyan 0.0000 0.000 0.00 log_k_JCZ38 0.0000 0.000 0.00 log_k_J9Z38 0.0000 0.000 0.00 log_k_JSE76 0.0000 0.000 0.00 f_cyan_ilr_1 0.7598 0.000 0.00 f_cyan_ilr_2 0.0000 8.939 0.00 f_JCZ38_qlogis 0.0000 0.000 14.49 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2658 2651 -1312 Optimised parameters: est. lower upper cyan_0 94.81681 NA NA log_k_cyan -3.91558 NA NA log_k_JCZ38 -3.12715 NA NA log_k_J9Z38 -5.04840 NA NA log_k_JSE76 -5.10443 NA NA f_cyan_ilr_1 0.80760 NA NA f_cyan_ilr_2 48.66960 NA NA f_JCZ38_qlogis 3.03397 NA NA a.1 3.93879 NA NA b.1 0.08057 NA NA SD.log_k_cyan 0.58921 NA NA SD.log_k_JCZ38 1.29813 NA NA SD.log_k_J9Z38 0.68372 NA NA SD.log_k_JSE76 0.35128 NA NA SD.f_cyan_ilr_1 0.38352 NA NA SD.f_cyan_ilr_2 4.98884 NA NA SD.f_JCZ38_qlogis 1.75636 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_cyan 0.5892 NA NA SD.log_k_JCZ38 1.2981 NA NA SD.log_k_J9Z38 0.6837 NA NA SD.log_k_JSE76 0.3513 NA NA SD.f_cyan_ilr_1 0.3835 NA NA SD.f_cyan_ilr_2 4.9888 NA NA SD.f_JCZ38_qlogis 1.7564 NA NA Variance model: est. lower upper a.1 3.93879 NA NA b.1 0.08057 NA NA Backtransformed parameters: est. lower upper cyan_0 94.81681 NA NA k_cyan 0.01993 NA NA k_JCZ38 0.04384 NA NA k_J9Z38 0.00642 NA NA k_JSE76 0.00607 NA NA f_cyan_to_JCZ38 0.75807 NA NA f_cyan_to_J9Z38 0.24193 NA NA f_JCZ38_to_JSE76 0.95409 NA NA Resulting formation fractions: ff cyan_JCZ38 0.75807 cyan_J9Z38 0.24193 cyan_sink 0.00000 JCZ38_JSE76 0.95409 JCZ38_sink 0.04591 Estimated disappearance times: DT50 DT90 cyan 34.78 115.54 JCZ38 15.81 52.52 J9Z38 107.97 358.68 JSE76 114.20 379.35 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:28:33 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - (alpha/beta) * 1/((time/beta) + 1) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 473.357 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.2314 -3.3680 -5.1108 -5.9416 0.7144 f_cyan_ilr_2 f_JCZ38_qlogis log_alpha log_beta 7.0229 14.9234 -0.1791 2.9811 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.416 0.000 0.0 0.000 0.0000 log_k_JCZ38 0.000 2.439 0.0 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.7 0.000 0.0000 log_k_JSE76 0.000 0.000 0.0 1.856 0.0000 f_cyan_ilr_1 0.000 0.000 0.0 0.000 0.7164 f_cyan_ilr_2 0.000 0.000 0.0 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.0 0.000 0.0000 log_alpha 0.000 0.000 0.0 0.000 0.0000 log_beta 0.000 0.000 0.0 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_alpha log_beta cyan_0 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 11.57 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 18.81 0.0000 0.0000 log_alpha 0.00 0.00 0.4144 0.0000 log_beta 0.00 0.00 0.0000 0.5077 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2428 2421 -1196 Optimised parameters: est. lower upper cyan_0 101.1664 98.51265 103.8202 log_k_JCZ38 -3.3883 -4.78250 -1.9941 log_k_J9Z38 -5.3087 -5.91564 -4.7017 log_k_JSE76 -6.1313 -7.30061 -4.9619 f_cyan_ilr_1 0.7456 0.43782 1.0534 f_cyan_ilr_2 0.8181 0.24956 1.3866 f_JCZ38_qlogis 2.0467 0.61165 3.4817 log_alpha -0.2391 -0.62806 0.1499 log_beta 2.8739 2.67664 3.0711 a.1 3.4160 3.17960 3.6525 SD.cyan_0 2.4355 0.40399 4.4671 SD.log_k_JCZ38 1.5654 0.57311 2.5576 SD.log_k_J9Z38 0.4645 -0.06533 0.9943 SD.log_k_JSE76 0.9841 0.10738 1.8609 SD.f_cyan_ilr_1 0.3285 0.10546 0.5515 SD.f_cyan_ilr_2 0.2276 -0.38711 0.8424 SD.f_JCZ38_qlogis 0.8340 -0.20970 1.8777 SD.log_alpha 0.4250 0.16017 0.6898 Correlation: cyan_0 l__JCZ3 l__J9Z3 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 log_lph log_k_JCZ38 -0.0159 log_k_J9Z38 -0.0546 0.0080 log_k_JSE76 -0.0337 0.0016 0.0074 f_cyan_ilr_1 -0.0095 0.0194 -0.1573 0.0003 f_cyan_ilr_2 -0.2733 0.0799 0.3059 0.0263 0.0125 f_JCZ38_qlogis 0.0755 -0.0783 -0.0516 0.1222 -0.1155 -0.5231 log_alpha -0.0567 0.0120 0.0351 0.0189 0.0040 0.0829 -0.0502 log_beta -0.2980 0.0461 0.1382 0.0758 0.0209 0.4079 -0.2053 0.2759 Random effects: est. lower upper SD.cyan_0 2.4355 0.40399 4.4671 SD.log_k_JCZ38 1.5654 0.57311 2.5576 SD.log_k_J9Z38 0.4645 -0.06533 0.9943 SD.log_k_JSE76 0.9841 0.10738 1.8609 SD.f_cyan_ilr_1 0.3285 0.10546 0.5515 SD.f_cyan_ilr_2 0.2276 -0.38711 0.8424 SD.f_JCZ38_qlogis 0.8340 -0.20970 1.8777 SD.log_alpha 0.4250 0.16017 0.6898 Variance model: est. lower upper a.1 3.416 3.18 3.652 Backtransformed parameters: est. lower upper cyan_0 1.012e+02 9.851e+01 103.82023 k_JCZ38 3.377e-02 8.375e-03 0.13614 k_J9Z38 4.948e-03 2.697e-03 0.00908 k_JSE76 2.174e-03 6.751e-04 0.00700 f_cyan_to_JCZ38 6.389e-01 NA NA f_cyan_to_J9Z38 2.226e-01 NA NA f_JCZ38_to_JSE76 8.856e-01 6.483e-01 0.97016 alpha 7.873e-01 5.336e-01 1.16166 beta 1.771e+01 1.454e+01 21.56509 Resulting formation fractions: ff cyan_JCZ38 0.6389 cyan_J9Z38 0.2226 cyan_sink 0.1385 JCZ38_JSE76 0.8856 JCZ38_sink 0.1144 Estimated disappearance times: DT50 DT90 DT50back cyan 25.00 312.06 93.94 JCZ38 20.53 68.19 NA J9Z38 140.07 465.32 NA JSE76 318.86 1059.22 NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:28:46 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - (alpha/beta) * 1/((time/beta) + 1) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 486.031 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.13294 -3.32499 -5.09097 -5.93566 0.71359 f_cyan_ilr_2 f_JCZ38_qlogis log_alpha log_beta 10.30315 14.62272 -0.09633 3.10634 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.649 0.000 0.00 0.00 0.0000 log_k_JCZ38 0.000 2.319 0.00 0.00 0.0000 log_k_J9Z38 0.000 0.000 1.73 0.00 0.0000 log_k_JSE76 0.000 0.000 0.00 1.86 0.0000 f_cyan_ilr_1 0.000 0.000 0.00 0.00 0.7183 f_cyan_ilr_2 0.000 0.000 0.00 0.00 0.0000 f_JCZ38_qlogis 0.000 0.000 0.00 0.00 0.0000 log_alpha 0.000 0.000 0.00 0.00 0.0000 log_beta 0.000 0.000 0.00 0.00 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_alpha log_beta cyan_0 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 12.85 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 18.54 0.0000 0.0000 log_alpha 0.00 0.00 0.3142 0.0000 log_beta 0.00 0.00 0.0000 0.7333 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2424 2416 -1193 Optimised parameters: est. lower upper cyan_0 100.65667 NA NA log_k_JCZ38 -3.45782 NA NA log_k_J9Z38 -5.23476 NA NA log_k_JSE76 -5.71827 NA NA f_cyan_ilr_1 0.68389 NA NA f_cyan_ilr_2 0.61027 NA NA f_JCZ38_qlogis 116.27482 NA NA log_alpha -0.14484 NA NA log_beta 3.03220 NA NA a.1 3.11051 NA NA b.1 0.04508 NA NA SD.log_k_JCZ38 1.39961 NA NA SD.log_k_J9Z38 0.57920 NA NA SD.log_k_JSE76 0.68364 NA NA SD.f_cyan_ilr_1 0.31477 NA NA SD.f_cyan_ilr_2 0.37716 NA NA SD.f_JCZ38_qlogis 5.52695 NA NA SD.log_alpha 0.22823 NA NA SD.log_beta 0.39161 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.3996 NA NA SD.log_k_J9Z38 0.5792 NA NA SD.log_k_JSE76 0.6836 NA NA SD.f_cyan_ilr_1 0.3148 NA NA SD.f_cyan_ilr_2 0.3772 NA NA SD.f_JCZ38_qlogis 5.5270 NA NA SD.log_alpha 0.2282 NA NA SD.log_beta 0.3916 NA NA Variance model: est. lower upper a.1 3.11051 NA NA b.1 0.04508 NA NA Backtransformed parameters: est. lower upper cyan_0 1.007e+02 NA NA k_JCZ38 3.150e-02 NA NA k_J9Z38 5.328e-03 NA NA k_JSE76 3.285e-03 NA NA f_cyan_to_JCZ38 5.980e-01 NA NA f_cyan_to_J9Z38 2.273e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA alpha 8.652e-01 NA NA beta 2.074e+01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.5980 cyan_J9Z38 0.2273 cyan_sink 0.1746 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back cyan 25.48 276.2 83.15 JCZ38 22.01 73.1 NA J9Z38 130.09 432.2 NA JSE76 210.98 700.9 NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:29:15 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 514.477 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.0643 -3.4008 -5.0024 -5.8612 0.6855 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 g_qlogis 1.2366 13.6901 -1.8641 -4.5063 -0.6468 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 4.466 0.000 0.000 0.000 0.0000 log_k_JCZ38 0.000 2.382 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.595 0.000 0.0000 log_k_JSE76 0.000 0.000 0.000 1.245 0.0000 f_cyan_ilr_1 0.000 0.000 0.000 0.000 0.6852 f_cyan_ilr_2 0.000 0.000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 0.0000 log_k1 0.000 0.000 0.000 0.000 0.0000 log_k2 0.000 0.000 0.000 0.000 0.0000 g_qlogis 0.000 0.000 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 g_qlogis cyan_0 0.00 0.00 0.0000 0.0000 0.000 log_k_JCZ38 0.00 0.00 0.0000 0.0000 0.000 log_k_J9Z38 0.00 0.00 0.0000 0.0000 0.000 log_k_JSE76 0.00 0.00 0.0000 0.0000 0.000 f_cyan_ilr_1 0.00 0.00 0.0000 0.0000 0.000 f_cyan_ilr_2 1.28 0.00 0.0000 0.0000 0.000 f_JCZ38_qlogis 0.00 16.08 0.0000 0.0000 0.000 log_k1 0.00 0.00 0.9866 0.0000 0.000 log_k2 0.00 0.00 0.0000 0.5953 0.000 g_qlogis 0.00 0.00 0.0000 0.0000 1.583 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2403 2395 -1182 Optimised parameters: est. lower upper cyan_0 102.5565 NA NA log_k_JCZ38 -3.4729 NA NA log_k_J9Z38 -5.1533 NA NA log_k_JSE76 -5.6669 NA NA f_cyan_ilr_1 0.6665 NA NA f_cyan_ilr_2 0.5191 NA NA f_JCZ38_qlogis 37.0113 NA NA log_k1 -1.8497 NA NA log_k2 -4.4931 NA NA g_qlogis -0.6383 NA NA a.1 3.2397 NA NA SD.log_k_JCZ38 1.4286 NA NA SD.log_k_J9Z38 0.5312 NA NA SD.log_k_JSE76 0.6627 NA NA SD.f_cyan_ilr_1 0.3013 NA NA SD.f_cyan_ilr_2 0.2980 NA NA SD.f_JCZ38_qlogis 0.1637 NA NA SD.log_k1 0.5069 NA NA SD.log_k2 0.3828 NA NA SD.g_qlogis 0.8641 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.4286 NA NA SD.log_k_J9Z38 0.5312 NA NA SD.log_k_JSE76 0.6627 NA NA SD.f_cyan_ilr_1 0.3013 NA NA SD.f_cyan_ilr_2 0.2980 NA NA SD.f_JCZ38_qlogis 0.1637 NA NA SD.log_k1 0.5069 NA NA SD.log_k2 0.3828 NA NA SD.g_qlogis 0.8641 NA NA Variance model: est. lower upper a.1 3.24 NA NA Backtransformed parameters: est. lower upper cyan_0 1.026e+02 NA NA k_JCZ38 3.103e-02 NA NA k_J9Z38 5.780e-03 NA NA k_JSE76 3.459e-03 NA NA f_cyan_to_JCZ38 5.813e-01 NA NA f_cyan_to_J9Z38 2.265e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA k1 1.573e-01 NA NA k2 1.119e-02 NA NA g 3.456e-01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.5813 cyan_J9Z38 0.2265 cyan_sink 0.1922 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 25.23 167.94 50.55 4.407 61.97 JCZ38 22.34 74.22 NA NA NA J9Z38 119.92 398.36 NA NA NA JSE76 200.41 665.76 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:31:58 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 677.928 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.3964 -3.3626 -4.9792 -5.8727 0.6814 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 g_qlogis 6.8713 13.6901 -1.9222 -4.5035 -0.7172 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.317 0.000 0.000 0.000 0.0000 log_k_JCZ38 0.000 2.272 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.633 0.000 0.0000 log_k_JSE76 0.000 0.000 0.000 1.271 0.0000 f_cyan_ilr_1 0.000 0.000 0.000 0.000 0.6839 f_cyan_ilr_2 0.000 0.000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 0.0000 log_k1 0.000 0.000 0.000 0.000 0.0000 log_k2 0.000 0.000 0.000 0.000 0.0000 g_qlogis 0.000 0.000 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 g_qlogis cyan_0 0.00 0.00 0.0000 0.0000 0.000 log_k_JCZ38 0.00 0.00 0.0000 0.0000 0.000 log_k_J9Z38 0.00 0.00 0.0000 0.0000 0.000 log_k_JSE76 0.00 0.00 0.0000 0.0000 0.000 f_cyan_ilr_1 0.00 0.00 0.0000 0.0000 0.000 f_cyan_ilr_2 11.95 0.00 0.0000 0.0000 0.000 f_JCZ38_qlogis 0.00 16.08 0.0000 0.0000 0.000 log_k1 0.00 0.00 0.9496 0.0000 0.000 log_k2 0.00 0.00 0.0000 0.5846 0.000 g_qlogis 0.00 0.00 0.0000 0.0000 1.719 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2398 2390 -1179 Optimised parameters: est. lower upper cyan_0 100.69709 NA NA log_k_JCZ38 -3.46669 NA NA log_k_J9Z38 -5.05076 NA NA log_k_JSE76 -5.55558 NA NA f_cyan_ilr_1 0.66045 NA NA f_cyan_ilr_2 0.84275 NA NA f_JCZ38_qlogis 64.22404 NA NA log_k1 -2.17715 NA NA log_k2 -4.55002 NA NA g_qlogis -0.55920 NA NA a.1 2.95785 NA NA b.1 0.04456 NA NA SD.log_k_JCZ38 1.39881 NA NA SD.log_k_J9Z38 0.67788 NA NA SD.log_k_JSE76 0.52603 NA NA SD.f_cyan_ilr_1 0.32490 NA NA SD.f_cyan_ilr_2 0.53923 NA NA SD.f_JCZ38_qlogis 2.75576 NA NA SD.log_k2 0.30694 NA NA SD.g_qlogis 0.83619 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.3988 NA NA SD.log_k_J9Z38 0.6779 NA NA SD.log_k_JSE76 0.5260 NA NA SD.f_cyan_ilr_1 0.3249 NA NA SD.f_cyan_ilr_2 0.5392 NA NA SD.f_JCZ38_qlogis 2.7558 NA NA SD.log_k2 0.3069 NA NA SD.g_qlogis 0.8362 NA NA Variance model: est. lower upper a.1 2.95785 NA NA b.1 0.04456 NA NA Backtransformed parameters: est. lower upper cyan_0 1.007e+02 NA NA k_JCZ38 3.122e-02 NA NA k_J9Z38 6.404e-03 NA NA k_JSE76 3.866e-03 NA NA f_cyan_to_JCZ38 6.187e-01 NA NA f_cyan_to_J9Z38 2.431e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA k1 1.134e-01 NA NA k2 1.057e-02 NA NA g 3.637e-01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.6187 cyan_J9Z38 0.2431 cyan_sink 0.1382 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 26.35 175.12 52.72 6.114 65.6 JCZ38 22.20 73.75 NA NA NA J9Z38 108.23 359.53 NA NA NA JSE76 179.30 595.62 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:29:33 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 532.937 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 102.0643 -2.8987 -2.7077 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.4717 -3.4008 -5.0024 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -5.8613 0.6855 1.2366 f_JCZ38_qlogis 13.7395 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 4.466 0.0000 0.000 log_k_cyan_free 0.000 0.6158 0.000 log_k_cyan_free_bound 0.000 0.0000 1.463 log_k_cyan_bound_free 0.000 0.0000 0.000 log_k_JCZ38 0.000 0.0000 0.000 log_k_J9Z38 0.000 0.0000 0.000 log_k_JSE76 0.000 0.0000 0.000 f_cyan_ilr_1 0.000 0.0000 0.000 f_cyan_ilr_2 0.000 0.0000 0.000 f_JCZ38_qlogis 0.000 0.0000 0.000 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.000 0.000 0.000 log_k_cyan_free 0.000 0.000 0.000 0.000 log_k_cyan_free_bound 0.000 0.000 0.000 0.000 log_k_cyan_bound_free 1.058 0.000 0.000 0.000 log_k_JCZ38 0.000 2.382 0.000 0.000 log_k_J9Z38 0.000 0.000 1.595 0.000 log_k_JSE76 0.000 0.000 0.000 1.245 f_cyan_ilr_1 0.000 0.000 0.000 0.000 f_cyan_ilr_2 0.000 0.000 0.000 0.000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis cyan_free_0 0.0000 0.00 0.00 log_k_cyan_free 0.0000 0.00 0.00 log_k_cyan_free_bound 0.0000 0.00 0.00 log_k_cyan_bound_free 0.0000 0.00 0.00 log_k_JCZ38 0.0000 0.00 0.00 log_k_J9Z38 0.0000 0.00 0.00 log_k_JSE76 0.0000 0.00 0.00 f_cyan_ilr_1 0.6852 0.00 0.00 f_cyan_ilr_2 0.0000 1.28 0.00 f_JCZ38_qlogis 0.0000 0.00 16.13 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2401 2394 -1181 Optimised parameters: est. lower upper cyan_free_0 102.8136 NA NA log_k_cyan_free -2.7935 NA NA log_k_cyan_free_bound -2.5440 NA NA log_k_cyan_bound_free -3.4303 NA NA log_k_JCZ38 -3.5010 NA NA log_k_J9Z38 -5.1226 NA NA log_k_JSE76 -5.6314 NA NA f_cyan_ilr_1 0.6609 NA NA f_cyan_ilr_2 0.5085 NA NA f_JCZ38_qlogis 44.0153 NA NA a.1 3.2318 NA NA SD.log_k_cyan_free 0.3211 NA NA SD.log_k_cyan_free_bound 0.8408 NA NA SD.log_k_cyan_bound_free 0.5724 NA NA SD.log_k_JCZ38 1.4925 NA NA SD.log_k_J9Z38 0.5816 NA NA SD.log_k_JSE76 0.6037 NA NA SD.f_cyan_ilr_1 0.3115 NA NA SD.f_cyan_ilr_2 0.3436 NA NA SD.f_JCZ38_qlogis 4.8937 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_cyan_free 0.3211 NA NA SD.log_k_cyan_free_bound 0.8408 NA NA SD.log_k_cyan_bound_free 0.5724 NA NA SD.log_k_JCZ38 1.4925 NA NA SD.log_k_J9Z38 0.5816 NA NA SD.log_k_JSE76 0.6037 NA NA SD.f_cyan_ilr_1 0.3115 NA NA SD.f_cyan_ilr_2 0.3436 NA NA SD.f_JCZ38_qlogis 4.8937 NA NA Variance model: est. lower upper a.1 3.232 NA NA Backtransformed parameters: est. lower upper cyan_free_0 1.028e+02 NA NA k_cyan_free 6.120e-02 NA NA k_cyan_free_bound 7.855e-02 NA NA k_cyan_bound_free 3.238e-02 NA NA k_JCZ38 3.017e-02 NA NA k_J9Z38 5.961e-03 NA NA k_JSE76 3.584e-03 NA NA f_cyan_free_to_JCZ38 5.784e-01 NA NA f_cyan_free_to_J9Z38 2.271e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.15973 0.01241 0.33124 Resulting formation fractions: ff cyan_free_JCZ38 0.5784 cyan_free_J9Z38 0.2271 cyan_free_sink 0.1945 cyan_free 1.0000 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 24.51 153.18 46.11 4.34 55.87 JCZ38 22.98 76.33 NA NA NA J9Z38 116.28 386.29 NA NA NA JSE76 193.42 642.53 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:31:58 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 677.936 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 101.3964 -2.9881 -2.7949 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.4376 -3.3626 -4.9792 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -5.8727 0.6814 6.7399 f_JCZ38_qlogis 13.7395 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 5.317 0.0000 0.000 log_k_cyan_free 0.000 0.7301 0.000 log_k_cyan_free_bound 0.000 0.0000 1.384 log_k_cyan_bound_free 0.000 0.0000 0.000 log_k_JCZ38 0.000 0.0000 0.000 log_k_J9Z38 0.000 0.0000 0.000 log_k_JSE76 0.000 0.0000 0.000 f_cyan_ilr_1 0.000 0.0000 0.000 f_cyan_ilr_2 0.000 0.0000 0.000 f_JCZ38_qlogis 0.000 0.0000 0.000 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.000 0.000 0.000 log_k_cyan_free 0.000 0.000 0.000 0.000 log_k_cyan_free_bound 0.000 0.000 0.000 0.000 log_k_cyan_bound_free 1.109 0.000 0.000 0.000 log_k_JCZ38 0.000 2.272 0.000 0.000 log_k_J9Z38 0.000 0.000 1.633 0.000 log_k_JSE76 0.000 0.000 0.000 1.271 f_cyan_ilr_1 0.000 0.000 0.000 0.000 f_cyan_ilr_2 0.000 0.000 0.000 0.000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis cyan_free_0 0.0000 0.00 0.00 log_k_cyan_free 0.0000 0.00 0.00 log_k_cyan_free_bound 0.0000 0.00 0.00 log_k_cyan_bound_free 0.0000 0.00 0.00 log_k_JCZ38 0.0000 0.00 0.00 log_k_J9Z38 0.0000 0.00 0.00 log_k_JSE76 0.0000 0.00 0.00 f_cyan_ilr_1 0.6838 0.00 0.00 f_cyan_ilr_2 0.0000 11.69 0.00 f_JCZ38_qlogis 0.0000 0.00 16.13 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2400 2392 -1180 Optimised parameters: est. lower upper cyan_free_0 100.56004 NA NA log_k_cyan_free -3.12657 NA NA log_k_cyan_free_bound -3.16825 NA NA log_k_cyan_bound_free -3.66003 NA NA log_k_JCZ38 -3.47278 NA NA log_k_J9Z38 -5.06823 NA NA log_k_JSE76 -5.54327 NA NA f_cyan_ilr_1 0.66631 NA NA f_cyan_ilr_2 0.82898 NA NA f_JCZ38_qlogis 38.31115 NA NA a.1 2.98352 NA NA b.1 0.04388 NA NA SD.log_k_cyan_free 0.49145 NA NA SD.log_k_cyan_bound_free 0.27347 NA NA SD.log_k_JCZ38 1.41193 NA NA SD.log_k_J9Z38 0.66073 NA NA SD.log_k_JSE76 0.55885 NA NA SD.f_cyan_ilr_1 0.33020 NA NA SD.f_cyan_ilr_2 0.51367 NA NA SD.f_JCZ38_qlogis 5.52122 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_cyan_free 0.4914 NA NA SD.log_k_cyan_bound_free 0.2735 NA NA SD.log_k_JCZ38 1.4119 NA NA SD.log_k_J9Z38 0.6607 NA NA SD.log_k_JSE76 0.5589 NA NA SD.f_cyan_ilr_1 0.3302 NA NA SD.f_cyan_ilr_2 0.5137 NA NA SD.f_JCZ38_qlogis 5.5212 NA NA Variance model: est. lower upper a.1 2.98352 NA NA b.1 0.04388 NA NA Backtransformed parameters: est. lower upper cyan_free_0 1.006e+02 NA NA k_cyan_free 4.387e-02 NA NA k_cyan_free_bound 4.208e-02 NA NA k_cyan_bound_free 2.573e-02 NA NA k_JCZ38 3.103e-02 NA NA k_J9Z38 6.294e-03 NA NA k_JSE76 3.914e-03 NA NA f_cyan_free_to_JCZ38 6.188e-01 NA NA f_cyan_free_to_J9Z38 2.412e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.10044 0.01124 0.36580 Resulting formation fractions: ff cyan_free_JCZ38 0.6188 cyan_free_J9Z38 0.2412 cyan_free_sink 0.1400 cyan_free 1.0000 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 26.05 164.4 49.48 6.901 61.67 JCZ38 22.34 74.2 NA NA NA J9Z38 110.14 365.9 NA NA NA JSE76 177.11 588.3 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:29:18 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ifelse(time <= tb, k1, k2) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ifelse(time <= tb, k1, k2) * cyan - k_JCZ38 * JCZ38 d_J9Z38/dt = + f_cyan_to_J9Z38 * ifelse(time <= tb, k1, k2) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 518.128 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.8845 -3.4495 -4.9355 -5.6040 0.6468 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 log_tb 1.2396 9.7220 -2.9079 -4.1810 1.7813 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.406 0.00 0.00 0.000 0.0000 log_k_JCZ38 0.000 2.33 0.00 0.000 0.0000 log_k_J9Z38 0.000 0.00 1.59 0.000 0.0000 log_k_JSE76 0.000 0.00 0.00 1.013 0.0000 f_cyan_ilr_1 0.000 0.00 0.00 0.000 0.6367 f_cyan_ilr_2 0.000 0.00 0.00 0.000 0.0000 f_JCZ38_qlogis 0.000 0.00 0.00 0.000 0.0000 log_k1 0.000 0.00 0.00 0.000 0.0000 log_k2 0.000 0.00 0.00 0.000 0.0000 log_tb 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis log_k1 log_k2 log_tb cyan_0 0.000 0.00 0.0000 0.0000 0.0000 log_k_JCZ38 0.000 0.00 0.0000 0.0000 0.0000 log_k_J9Z38 0.000 0.00 0.0000 0.0000 0.0000 log_k_JSE76 0.000 0.00 0.0000 0.0000 0.0000 f_cyan_ilr_1 0.000 0.00 0.0000 0.0000 0.0000 f_cyan_ilr_2 2.038 0.00 0.0000 0.0000 0.0000 f_JCZ38_qlogis 0.000 10.33 0.0000 0.0000 0.0000 log_k1 0.000 0.00 0.7006 0.0000 0.0000 log_k2 0.000 0.00 0.0000 0.8928 0.0000 log_tb 0.000 0.00 0.0000 0.0000 0.6773 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2427 2419 -1194 Optimised parameters: est. lower upper cyan_0 101.9660 1.005e+02 1.035e+02 log_k_JCZ38 -3.4698 -4.716e+00 -2.224e+00 log_k_J9Z38 -5.0947 -5.740e+00 -4.450e+00 log_k_JSE76 -5.5977 -6.321e+00 -4.875e+00 f_cyan_ilr_1 0.6595 3.734e-01 9.456e-01 f_cyan_ilr_2 0.5905 1.664e-01 1.015e+00 f_JCZ38_qlogis 25.8627 -4.224e+05 4.225e+05 log_k1 -3.0884 -3.453e+00 -2.723e+00 log_k2 -4.3877 -4.778e+00 -3.998e+00 log_tb 2.3057 1.715e+00 2.896e+00 a.1 3.3228 NA NA SD.log_k_JCZ38 1.4071 NA NA SD.log_k_J9Z38 0.5774 NA NA SD.log_k_JSE76 0.6214 NA NA SD.f_cyan_ilr_1 0.3058 NA NA SD.f_cyan_ilr_2 0.3470 NA NA SD.f_JCZ38_qlogis 0.0644 NA NA SD.log_k1 0.3994 NA NA SD.log_k2 0.4373 NA NA SD.log_tb 0.6419 NA NA Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.4071 NA NA SD.log_k_J9Z38 0.5774 NA NA SD.log_k_JSE76 0.6214 NA NA SD.f_cyan_ilr_1 0.3058 NA NA SD.f_cyan_ilr_2 0.3470 NA NA SD.f_JCZ38_qlogis 0.0644 NA NA SD.log_k1 0.3994 NA NA SD.log_k2 0.4373 NA NA SD.log_tb 0.6419 NA NA Variance model: est. lower upper a.1 3.323 NA NA Backtransformed parameters: est. lower upper cyan_0 1.020e+02 1.005e+02 1.035e+02 k_JCZ38 3.112e-02 8.951e-03 1.082e-01 k_J9Z38 6.129e-03 3.216e-03 1.168e-02 k_JSE76 3.706e-03 1.798e-03 7.639e-03 f_cyan_to_JCZ38 5.890e-01 NA NA f_cyan_to_J9Z38 2.318e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 0.000e+00 1.000e+00 k1 4.558e-02 3.164e-02 6.565e-02 k2 1.243e-02 8.417e-03 1.835e-02 tb 1.003e+01 5.557e+00 1.811e+01 Resulting formation fractions: ff cyan_JCZ38 5.890e-01 cyan_J9Z38 2.318e-01 cyan_sink 1.793e-01 JCZ38_JSE76 1.000e+00 JCZ38_sink 5.861e-12 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 29.02 158.51 47.72 15.21 55.77 JCZ38 22.27 73.98 NA NA NA J9Z38 113.09 375.69 NA NA NA JSE76 187.01 621.23 NA NA NA"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"pathway-2","dir":"Articles > Prebuilt","previous_headings":"Appendix > Hierarchical fit listings","what":"Pathway 2","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"Hierarchical FOMC path 2 fit two-component error Hierarchical DFOP path 2 fit constant variance Hierarchical DFOP path 2 fit two-component error Hierarchical SFORB path 2 fit constant variance Hierarchical SFORB path 2 fit two-component error","code":"saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:40:28 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - (alpha/beta) * 1/((time/beta) + 1) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 499.317 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.4477 -1.8631 -5.1087 -2.5114 0.6826 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta 4.7944 15.9616 13.1566 -0.1564 2.9781 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 7.701 0.000 0.000 0.000 0.0000 log_k_JCZ38 0.000 1.448 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.724 0.000 0.0000 log_k_JSE76 0.000 0.000 0.000 3.659 0.0000 f_cyan_ilr_1 0.000 0.000 0.000 0.000 0.6356 f_cyan_ilr_2 0.000 0.000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 0.0000 f_JSE76_qlogis 0.000 0.000 0.000 0.000 0.0000 log_alpha 0.000 0.000 0.000 0.000 0.0000 log_beta 0.000 0.000 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta cyan_0 0.00 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 10.32 0.00 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 12.23 0.00 0.0000 0.0000 f_JSE76_qlogis 0.00 0.00 14.99 0.0000 0.0000 log_alpha 0.00 0.00 0.00 0.3924 0.0000 log_beta 0.00 0.00 0.00 0.0000 0.5639 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2249 2241 -1104 Optimised parameters: est. lower upper cyan_0 101.55265 9.920e+01 103.90593 log_k_JCZ38 -2.32302 -2.832e+00 -1.81416 log_k_J9Z38 -5.13082 -5.942e+00 -4.31990 log_k_JSE76 -3.01756 -4.262e+00 -1.77360 f_cyan_ilr_1 0.70850 3.657e-01 1.05135 f_cyan_ilr_2 0.95775 2.612e-01 1.65432 f_JCZ38_qlogis 3.86105 9.248e-01 6.79733 f_JSE76_qlogis 7.51583 -1.120e+02 127.03921 log_alpha -0.15308 -4.508e-01 0.14462 log_beta 2.99165 2.711e+00 3.27202 a.1 2.04034 1.811e+00 2.26968 b.1 0.06924 5.745e-02 0.08104 SD.log_k_JCZ38 0.50818 1.390e-01 0.87736 SD.log_k_J9Z38 0.86597 2.652e-01 1.46671 SD.log_k_JSE76 1.38092 4.864e-01 2.27541 SD.f_cyan_ilr_1 0.38204 1.354e-01 0.62864 SD.f_cyan_ilr_2 0.55129 7.198e-02 1.03060 SD.f_JCZ38_qlogis 1.88457 1.710e-02 3.75205 SD.f_JSE76_qlogis 2.64018 -2.450e+03 2455.27887 SD.log_alpha 0.31860 1.047e-01 0.53249 SD.log_beta 0.24195 1.273e-02 0.47117 Correlation: cyan_0 l__JCZ3 l__J9Z3 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 f_JSE76 log_k_JCZ38 -0.0235 log_k_J9Z38 -0.0442 0.0047 log_k_JSE76 -0.0023 0.0966 0.0006 f_cyan_ilr_1 -0.0032 0.0070 -0.0536 -0.0001 f_cyan_ilr_2 -0.5189 0.0452 0.1152 0.0013 -0.0304 f_JCZ38_qlogis 0.1088 -0.0848 -0.0240 0.0040 -0.0384 -0.2303 f_JSE76_qlogis -0.0545 0.1315 0.0195 0.0020 0.0252 0.1737 -0.5939 log_alpha -0.0445 0.0056 0.0261 0.0019 -0.0055 0.0586 -0.0239 -0.0284 log_beta -0.2388 0.0163 0.0566 0.0040 -0.0078 0.2183 -0.0714 -0.0332 log_lph log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta 0.2135 Random effects: est. lower upper SD.log_k_JCZ38 0.5082 1.390e-01 0.8774 SD.log_k_J9Z38 0.8660 2.652e-01 1.4667 SD.log_k_JSE76 1.3809 4.864e-01 2.2754 SD.f_cyan_ilr_1 0.3820 1.354e-01 0.6286 SD.f_cyan_ilr_2 0.5513 7.198e-02 1.0306 SD.f_JCZ38_qlogis 1.8846 1.710e-02 3.7520 SD.f_JSE76_qlogis 2.6402 -2.450e+03 2455.2789 SD.log_alpha 0.3186 1.047e-01 0.5325 SD.log_beta 0.2420 1.273e-02 0.4712 Variance model: est. lower upper a.1 2.04034 1.81101 2.26968 b.1 0.06924 0.05745 0.08104 Backtransformed parameters: est. lower upper cyan_0 1.016e+02 9.920e+01 103.9059 k_JCZ38 9.798e-02 5.890e-02 0.1630 k_J9Z38 5.912e-03 2.627e-03 0.0133 k_JSE76 4.892e-02 1.410e-02 0.1697 f_cyan_to_JCZ38 6.432e-01 NA NA f_cyan_to_J9Z38 2.362e-01 NA NA f_JCZ38_to_JSE76 9.794e-01 7.160e-01 0.9989 f_JSE76_to_JCZ38 9.995e-01 2.268e-49 1.0000 alpha 8.581e-01 6.371e-01 1.1556 beta 1.992e+01 1.505e+01 26.3646 Resulting formation fractions: ff cyan_JCZ38 0.6432301 cyan_J9Z38 0.2361657 cyan_sink 0.1206042 JCZ38_JSE76 0.9793879 JCZ38_sink 0.0206121 JSE76_JCZ38 0.9994559 JSE76_sink 0.0005441 Estimated disappearance times: DT50 DT90 DT50back cyan 24.759 271.61 81.76 JCZ38 7.075 23.50 NA J9Z38 117.249 389.49 NA JSE76 14.169 47.07 NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:41:25 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 555.724 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.4380 -2.3107 -5.3123 -3.7120 0.6757 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 1.1439 13.1194 12.3492 -1.9317 -4.4557 g_qlogis -0.5644 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 4.591 0.0000 0.000 0.0 0.0000 log_k_JCZ38 0.000 0.7966 0.000 0.0 0.0000 log_k_J9Z38 0.000 0.0000 1.561 0.0 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.8 0.0000 f_cyan_ilr_1 0.000 0.0000 0.000 0.0 0.6349 f_cyan_ilr_2 0.000 0.0000 0.000 0.0 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0 0.0000 f_JSE76_qlogis 0.000 0.0000 0.000 0.0 0.0000 log_k1 0.000 0.0000 0.000 0.0 0.0000 log_k2 0.000 0.0000 0.000 0.0 0.0000 g_qlogis 0.000 0.0000 0.000 0.0 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 cyan_0 0.000 0.00 0.00 0.000 0.0000 log_k_JCZ38 0.000 0.00 0.00 0.000 0.0000 log_k_J9Z38 0.000 0.00 0.00 0.000 0.0000 log_k_JSE76 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_1 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_2 1.797 0.00 0.00 0.000 0.0000 f_JCZ38_qlogis 0.000 13.86 0.00 0.000 0.0000 f_JSE76_qlogis 0.000 0.00 13.91 0.000 0.0000 log_k1 0.000 0.00 0.00 1.106 0.0000 log_k2 0.000 0.00 0.00 0.000 0.6141 g_qlogis 0.000 0.00 0.00 0.000 0.0000 g_qlogis cyan_0 0.000 log_k_JCZ38 0.000 log_k_J9Z38 0.000 log_k_JSE76 0.000 f_cyan_ilr_1 0.000 f_cyan_ilr_2 0.000 f_JCZ38_qlogis 0.000 f_JSE76_qlogis 0.000 log_k1 0.000 log_k2 0.000 g_qlogis 1.595 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2288 2280 -1122 Optimised parameters: est. lower upper cyan_0 102.7204 1.014e+02 1.040e+02 log_k_JCZ38 -2.8925 -4.044e+00 -1.741e+00 log_k_J9Z38 -5.1430 -5.828e+00 -4.457e+00 log_k_JSE76 -3.5577 -4.174e+00 -2.941e+00 f_cyan_ilr_1 0.6929 3.788e-01 1.007e+00 f_cyan_ilr_2 0.6066 5.342e-02 1.160e+00 f_JCZ38_qlogis 9.8071 -2.819e+03 2.838e+03 f_JSE76_qlogis 2.2229 5.684e-01 3.877e+00 log_k1 -1.9339 -2.609e+00 -1.258e+00 log_k2 -4.4709 -4.935e+00 -4.007e+00 g_qlogis -0.4987 -1.373e+00 3.757e-01 a.1 2.7368 2.545e+00 2.928e+00 SD.log_k_JCZ38 1.2747 4.577e-01 2.092e+00 SD.log_k_J9Z38 0.6758 1.418e-01 1.210e+00 SD.log_k_JSE76 0.5869 1.169e-01 1.057e+00 SD.f_cyan_ilr_1 0.3392 1.161e-01 5.622e-01 SD.f_cyan_ilr_2 0.4200 8.501e-02 7.550e-01 SD.f_JCZ38_qlogis 0.8511 -1.137e+06 1.137e+06 SD.f_JSE76_qlogis 0.3767 -5.238e-01 1.277e+00 SD.log_k1 0.7475 2.601e-01 1.235e+00 SD.log_k2 0.5179 1.837e-01 8.521e-01 SD.g_qlogis 0.9817 3.553e-01 1.608e+00 Correlation: cyan_0 l__JCZ3 l__J9Z3 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 f_JSE76 log_k_JCZ38 -0.0351 log_k_J9Z38 -0.0541 0.0043 log_k_JSE76 -0.0078 0.0900 -0.0014 f_cyan_ilr_1 -0.0249 0.0268 -0.0962 0.0000 f_cyan_ilr_2 -0.3560 0.0848 0.1545 -0.0022 0.0463 f_JCZ38_qlogis 0.2005 -0.1226 -0.0347 0.0514 -0.1840 -0.5906 f_JSE76_qlogis -0.1638 0.1307 0.0266 0.0001 0.1645 0.5181 -0.9297 log_k1 0.0881 -0.0071 0.0005 -0.0070 -0.0064 -0.0346 0.0316 -0.0341 log_k2 0.0238 -0.0003 0.0082 -0.0022 -0.0017 -0.0017 -0.0002 -0.0076 g_qlogis 0.0198 -0.0002 -0.0109 0.0034 0.0017 -0.0176 0.0044 0.0051 log_k1 log_k2 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 0.0276 g_qlogis -0.0283 -0.0309 Random effects: est. lower upper SD.log_k_JCZ38 1.2747 4.577e-01 2.092e+00 SD.log_k_J9Z38 0.6758 1.418e-01 1.210e+00 SD.log_k_JSE76 0.5869 1.169e-01 1.057e+00 SD.f_cyan_ilr_1 0.3392 1.161e-01 5.622e-01 SD.f_cyan_ilr_2 0.4200 8.501e-02 7.550e-01 SD.f_JCZ38_qlogis 0.8511 -1.137e+06 1.137e+06 SD.f_JSE76_qlogis 0.3767 -5.238e-01 1.277e+00 SD.log_k1 0.7475 2.601e-01 1.235e+00 SD.log_k2 0.5179 1.837e-01 8.521e-01 SD.g_qlogis 0.9817 3.553e-01 1.608e+00 Variance model: est. lower upper a.1 2.737 2.545 2.928 Backtransformed parameters: est. lower upper cyan_0 102.72037 1.014e+02 104.00464 k_JCZ38 0.05544 1.752e-02 0.17539 k_J9Z38 0.00584 2.942e-03 0.01159 k_JSE76 0.02850 1.539e-02 0.05279 f_cyan_to_JCZ38 0.59995 NA NA f_cyan_to_J9Z38 0.22519 NA NA f_JCZ38_to_JSE76 0.99994 0.000e+00 1.00000 f_JSE76_to_JCZ38 0.90229 6.384e-01 0.97971 k1 0.14459 7.357e-02 0.28414 k2 0.01144 7.192e-03 0.01819 g 0.37784 2.021e-01 0.59284 Resulting formation fractions: ff cyan_JCZ38 5.999e-01 cyan_J9Z38 2.252e-01 cyan_sink 1.749e-01 JCZ38_JSE76 9.999e-01 JCZ38_sink 5.506e-05 JSE76_JCZ38 9.023e-01 JSE76_sink 9.771e-02 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 21.93 159.83 48.11 4.794 60.6 JCZ38 12.50 41.53 NA NA NA J9Z38 118.69 394.27 NA NA NA JSE76 24.32 80.78 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:44:08 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 718.988 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.7393 -1.4493 -5.0118 -2.1269 0.6720 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 7.3362 13.4423 13.2659 -2.0061 -4.5527 g_qlogis -0.5806 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.604 0.00 0.000 0.000 0.0000 log_k_JCZ38 0.000 2.77 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.00 1.662 0.000 0.0000 log_k_JSE76 0.000 0.00 0.000 5.021 0.0000 f_cyan_ilr_1 0.000 0.00 0.000 0.000 0.6519 f_cyan_ilr_2 0.000 0.00 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.00 0.000 0.000 0.0000 f_JSE76_qlogis 0.000 0.00 0.000 0.000 0.0000 log_k1 0.000 0.00 0.000 0.000 0.0000 log_k2 0.000 0.00 0.000 0.000 0.0000 g_qlogis 0.000 0.00 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 cyan_0 0.00 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 13.37 0.00 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 14.21 0.00 0.0000 0.0000 f_JSE76_qlogis 0.00 0.00 14.58 0.0000 0.0000 log_k1 0.00 0.00 0.00 0.8453 0.0000 log_k2 0.00 0.00 0.00 0.0000 0.5969 g_qlogis 0.00 0.00 0.00 0.0000 0.0000 g_qlogis cyan_0 0.00 log_k_JCZ38 0.00 log_k_J9Z38 0.00 log_k_JSE76 0.00 f_cyan_ilr_1 0.00 f_cyan_ilr_2 0.00 f_JCZ38_qlogis 0.00 f_JSE76_qlogis 0.00 log_k1 0.00 log_k2 0.00 g_qlogis 1.69 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2234 2226 -1095 Optimised parameters: est. lower upper cyan_0 101.25496 99.14662 103.36331 log_k_JCZ38 -2.55593 -3.32972 -1.78215 log_k_J9Z38 -5.07103 -5.85423 -4.28783 log_k_JSE76 -3.25468 -4.17577 -2.33360 f_cyan_ilr_1 0.70139 0.35924 1.04355 f_cyan_ilr_2 1.07712 0.17789 1.97636 f_JCZ38_qlogis 3.57483 0.05990 7.08976 f_JSE76_qlogis 4.54884 -7.25628 16.35395 log_k1 -2.38201 -2.51639 -2.24763 log_k2 -4.66741 -4.91865 -4.41617 g_qlogis -0.28446 -1.14192 0.57300 a.1 2.05925 1.83267 2.28582 b.1 0.06172 0.05076 0.07268 SD.log_k_JCZ38 0.81137 0.25296 1.36977 SD.log_k_J9Z38 0.83542 0.25396 1.41689 SD.log_k_JSE76 0.97903 0.30100 1.65707 SD.f_cyan_ilr_1 0.37878 0.13374 0.62382 SD.f_cyan_ilr_2 0.67274 0.10102 1.24446 SD.f_JCZ38_qlogis 1.35327 -0.42361 3.13015 SD.f_JSE76_qlogis 1.43956 -19.15140 22.03052 SD.log_k2 0.25329 0.07521 0.43138 SD.g_qlogis 0.95167 0.35149 1.55184 Correlation: cyan_0 l__JCZ3 l__J9Z3 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 f_JSE76 log_k_JCZ38 -0.0265 log_k_J9Z38 -0.0392 0.0024 log_k_JSE76 0.0011 0.1220 -0.0016 f_cyan_ilr_1 -0.0161 0.0217 -0.0552 0.0034 f_cyan_ilr_2 -0.4718 0.0829 0.1102 0.0042 0.0095 f_JCZ38_qlogis 0.1609 -0.1318 -0.0277 0.0081 -0.1040 -0.4559 f_JSE76_qlogis -0.1289 0.1494 0.0219 0.0012 0.1004 0.4309 -0.8543 log_k1 0.2618 -0.0739 -0.0167 -0.0148 -0.0444 -0.2768 0.3518 -0.3818 log_k2 0.0603 -0.0217 0.0174 -0.0058 -0.0197 -0.0533 0.0923 -0.1281 g_qlogis 0.0362 0.0115 -0.0111 0.0040 0.0095 -0.0116 -0.0439 0.0651 log_k1 log_k2 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 0.3269 g_qlogis -0.1656 -0.0928 Random effects: est. lower upper SD.log_k_JCZ38 0.8114 0.25296 1.3698 SD.log_k_J9Z38 0.8354 0.25396 1.4169 SD.log_k_JSE76 0.9790 0.30100 1.6571 SD.f_cyan_ilr_1 0.3788 0.13374 0.6238 SD.f_cyan_ilr_2 0.6727 0.10102 1.2445 SD.f_JCZ38_qlogis 1.3533 -0.42361 3.1301 SD.f_JSE76_qlogis 1.4396 -19.15140 22.0305 SD.log_k2 0.2533 0.07521 0.4314 SD.g_qlogis 0.9517 0.35149 1.5518 Variance model: est. lower upper a.1 2.05925 1.83267 2.28582 b.1 0.06172 0.05076 0.07268 Backtransformed parameters: est. lower upper cyan_0 1.013e+02 9.915e+01 103.36331 k_JCZ38 7.762e-02 3.580e-02 0.16828 k_J9Z38 6.276e-03 2.868e-03 0.01373 k_JSE76 3.859e-02 1.536e-02 0.09695 f_cyan_to_JCZ38 6.520e-01 NA NA f_cyan_to_J9Z38 2.418e-01 NA NA f_JCZ38_to_JSE76 9.727e-01 5.150e-01 0.99917 f_JSE76_to_JCZ38 9.895e-01 7.052e-04 1.00000 k1 9.236e-02 8.075e-02 0.10565 k2 9.397e-03 7.309e-03 0.01208 g 4.294e-01 2.420e-01 0.63945 Resulting formation fractions: ff cyan_JCZ38 0.65203 cyan_J9Z38 0.24181 cyan_sink 0.10616 JCZ38_JSE76 0.97274 JCZ38_sink 0.02726 JSE76_JCZ38 0.98953 JSE76_sink 0.01047 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 24.26 185.34 55.79 7.504 73.77 JCZ38 8.93 29.66 NA NA NA J9Z38 110.45 366.89 NA NA NA JSE76 17.96 59.66 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:41:22 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 553.276 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 102.4395 -2.7673 -2.8942 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.6201 -2.3107 -5.3123 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -3.7120 0.6754 1.1448 f_JCZ38_qlogis f_JSE76_qlogis 14.8408 15.4734 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 4.589 0.0000 0.00 log_k_cyan_free 0.000 0.4849 0.00 log_k_cyan_free_bound 0.000 0.0000 1.62 log_k_cyan_bound_free 0.000 0.0000 0.00 log_k_JCZ38 0.000 0.0000 0.00 log_k_J9Z38 0.000 0.0000 0.00 log_k_JSE76 0.000 0.0000 0.00 f_cyan_ilr_1 0.000 0.0000 0.00 f_cyan_ilr_2 0.000 0.0000 0.00 f_JCZ38_qlogis 0.000 0.0000 0.00 f_JSE76_qlogis 0.000 0.0000 0.00 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.0000 0.000 0.0 log_k_cyan_free 0.000 0.0000 0.000 0.0 log_k_cyan_free_bound 0.000 0.0000 0.000 0.0 log_k_cyan_bound_free 1.197 0.0000 0.000 0.0 log_k_JCZ38 0.000 0.7966 0.000 0.0 log_k_J9Z38 0.000 0.0000 1.561 0.0 log_k_JSE76 0.000 0.0000 0.000 0.8 f_cyan_ilr_1 0.000 0.0000 0.000 0.0 f_cyan_ilr_2 0.000 0.0000 0.000 0.0 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0 f_JSE76_qlogis 0.000 0.0000 0.000 0.0 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis cyan_free_0 0.0000 0.000 0.0 0.00 log_k_cyan_free 0.0000 0.000 0.0 0.00 log_k_cyan_free_bound 0.0000 0.000 0.0 0.00 log_k_cyan_bound_free 0.0000 0.000 0.0 0.00 log_k_JCZ38 0.0000 0.000 0.0 0.00 log_k_J9Z38 0.0000 0.000 0.0 0.00 log_k_JSE76 0.0000 0.000 0.0 0.00 f_cyan_ilr_1 0.6349 0.000 0.0 0.00 f_cyan_ilr_2 0.0000 1.797 0.0 0.00 f_JCZ38_qlogis 0.0000 0.000 15.6 0.00 f_JSE76_qlogis 0.0000 0.000 0.0 17.52 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2283 2275 -1120 Optimised parameters: est. lower upper cyan_free_0 102.6517 101.40815 103.8952 log_k_cyan_free -2.8729 -3.18649 -2.5593 log_k_cyan_free_bound -2.7803 -3.60525 -1.9552 log_k_cyan_bound_free -3.5845 -4.16644 -3.0026 log_k_JCZ38 -2.3411 -2.89698 -1.7852 log_k_J9Z38 -5.2487 -6.01271 -4.4847 log_k_JSE76 -3.0259 -4.28274 -1.7690 f_cyan_ilr_1 0.7289 0.38214 1.0756 f_cyan_ilr_2 0.6891 0.18277 1.1954 f_JCZ38_qlogis 4.2162 0.47015 7.9622 f_JSE76_qlogis 5.8911 -20.19088 31.9730 a.1 2.7159 2.52587 2.9060 SD.log_k_cyan_free 0.3354 0.10979 0.5610 SD.log_k_cyan_free_bound 0.9061 0.30969 1.5025 SD.log_k_cyan_bound_free 0.6376 0.21229 1.0628 SD.log_k_JCZ38 0.5499 0.14533 0.9545 SD.log_k_J9Z38 0.7457 0.15106 1.3404 SD.log_k_JSE76 1.3822 0.47329 2.2912 SD.f_cyan_ilr_1 0.3820 0.13280 0.6313 SD.f_cyan_ilr_2 0.4317 0.06803 0.7953 SD.f_JCZ38_qlogis 1.8258 -0.25423 3.9059 SD.f_JSE76_qlogis 2.2348 -83.33679 87.8065 Correlation: cyn_f_0 lg_k_c_ lg_k_cyn_f_ lg_k_cyn_b_ l__JCZ3 l__J9Z3 log_k_cyan_free 0.1944 log_k_cyan_free_bound 0.0815 0.0814 log_k_cyan_bound_free 0.0106 0.0426 0.0585 log_k_JCZ38 -0.0231 -0.0106 -0.0089 -0.0051 log_k_J9Z38 -0.0457 -0.0108 0.0019 0.0129 0.0032 log_k_JSE76 -0.0054 -0.0024 -0.0017 -0.0005 0.1108 0.0009 f_cyan_ilr_1 0.0051 -0.0005 -0.0035 -0.0056 0.0131 -0.0967 f_cyan_ilr_2 -0.3182 -0.0771 -0.0309 -0.0038 0.0680 0.1643 f_JCZ38_qlogis 0.0834 0.0369 0.0302 0.0172 -0.1145 -0.0204 f_JSE76_qlogis -0.0553 -0.0365 -0.0441 -0.0414 0.1579 0.0175 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 log_k_cyan_free log_k_cyan_free_bound log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 -0.0002 f_cyan_ilr_2 0.0020 -0.0415 f_JCZ38_qlogis 0.0052 -0.0665 -0.3437 f_JSE76_qlogis 0.0066 0.0635 0.3491 -0.7487 Random effects: est. lower upper SD.log_k_cyan_free 0.3354 0.10979 0.5610 SD.log_k_cyan_free_bound 0.9061 0.30969 1.5025 SD.log_k_cyan_bound_free 0.6376 0.21229 1.0628 SD.log_k_JCZ38 0.5499 0.14533 0.9545 SD.log_k_J9Z38 0.7457 0.15106 1.3404 SD.log_k_JSE76 1.3822 0.47329 2.2912 SD.f_cyan_ilr_1 0.3820 0.13280 0.6313 SD.f_cyan_ilr_2 0.4317 0.06803 0.7953 SD.f_JCZ38_qlogis 1.8258 -0.25423 3.9059 SD.f_JSE76_qlogis 2.2348 -83.33679 87.8065 Variance model: est. lower upper a.1 2.716 2.526 2.906 Backtransformed parameters: est. lower upper cyan_free_0 1.027e+02 1.014e+02 103.89517 k_cyan_free 5.654e-02 4.132e-02 0.07736 k_cyan_free_bound 6.202e-02 2.718e-02 0.14153 k_cyan_bound_free 2.775e-02 1.551e-02 0.04966 k_JCZ38 9.622e-02 5.519e-02 0.16777 k_J9Z38 5.254e-03 2.447e-03 0.01128 k_JSE76 4.852e-02 1.380e-02 0.17051 f_cyan_free_to_JCZ38 6.197e-01 5.643e-01 0.84429 f_cyan_free_to_J9Z38 2.211e-01 5.643e-01 0.84429 f_JCZ38_to_JSE76 9.855e-01 6.154e-01 0.99965 f_JSE76_to_JCZ38 9.972e-01 1.703e-09 1.00000 Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.13466 0.01165 0.36490 Resulting formation fractions: ff cyan_free_JCZ38 0.619745 cyan_free_J9Z38 0.221083 cyan_free_sink 0.159172 cyan_free 1.000000 JCZ38_JSE76 0.985460 JCZ38_sink 0.014540 JSE76_JCZ38 0.997244 JSE76_sink 0.002756 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 23.293 158.67 47.77 5.147 59.5 JCZ38 7.203 23.93 NA NA NA J9Z38 131.918 438.22 NA NA NA JSE76 14.287 47.46 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:44:02 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 713.14 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 101.7511 -2.8370 -3.0162 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.6600 -2.2988 -5.3129 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -3.6991 0.6722 4.8596 f_JCZ38_qlogis f_JSE76_qlogis 13.4678 14.2149 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 5.629 0.000 0.000 log_k_cyan_free 0.000 0.446 0.000 log_k_cyan_free_bound 0.000 0.000 1.449 log_k_cyan_bound_free 0.000 0.000 0.000 log_k_JCZ38 0.000 0.000 0.000 log_k_J9Z38 0.000 0.000 0.000 log_k_JSE76 0.000 0.000 0.000 f_cyan_ilr_1 0.000 0.000 0.000 f_cyan_ilr_2 0.000 0.000 0.000 f_JCZ38_qlogis 0.000 0.000 0.000 f_JSE76_qlogis 0.000 0.000 0.000 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.0000 0.000 0.0000 log_k_cyan_free 0.000 0.0000 0.000 0.0000 log_k_cyan_free_bound 0.000 0.0000 0.000 0.0000 log_k_cyan_bound_free 1.213 0.0000 0.000 0.0000 log_k_JCZ38 0.000 0.7801 0.000 0.0000 log_k_J9Z38 0.000 0.0000 1.575 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.8078 f_cyan_ilr_1 0.000 0.0000 0.000 0.0000 f_cyan_ilr_2 0.000 0.0000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0000 f_JSE76_qlogis 0.000 0.0000 0.000 0.0000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis cyan_free_0 0.0000 0.000 0.00 0.00 log_k_cyan_free 0.0000 0.000 0.00 0.00 log_k_cyan_free_bound 0.0000 0.000 0.00 0.00 log_k_cyan_bound_free 0.0000 0.000 0.00 0.00 log_k_JCZ38 0.0000 0.000 0.00 0.00 log_k_J9Z38 0.0000 0.000 0.00 0.00 log_k_JSE76 0.0000 0.000 0.00 0.00 f_cyan_ilr_1 0.6518 0.000 0.00 0.00 f_cyan_ilr_2 0.0000 9.981 0.00 0.00 f_JCZ38_qlogis 0.0000 0.000 14.26 0.00 f_JSE76_qlogis 0.0000 0.000 0.00 16.17 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2240 2231 -1098 Optimised parameters: est. lower upper cyan_free_0 100.73014 9.873e+01 1.027e+02 log_k_cyan_free -3.19634 -3.641e+00 -2.752e+00 log_k_cyan_free_bound -3.43533 -3.674e+00 -3.197e+00 log_k_cyan_bound_free -3.83282 -4.163e+00 -3.503e+00 log_k_JCZ38 -2.51065 -3.225e+00 -1.796e+00 log_k_J9Z38 -5.02539 -5.825e+00 -4.226e+00 log_k_JSE76 -3.24777 -4.163e+00 -2.333e+00 f_cyan_ilr_1 0.70640 3.562e-01 1.057e+00 f_cyan_ilr_2 1.42704 3.170e-01 2.537e+00 f_JCZ38_qlogis 2.84779 1.042e+00 4.654e+00 f_JSE76_qlogis 8.63674 -6.407e+02 6.580e+02 a.1 2.07082 1.846e+00 2.296e+00 b.1 0.06227 5.120e-02 7.334e-02 SD.log_k_cyan_free 0.49674 1.865e-01 8.069e-01 SD.log_k_cyan_bound_free 0.28537 6.808e-02 5.027e-01 SD.log_k_JCZ38 0.74846 2.305e-01 1.266e+00 SD.log_k_J9Z38 0.86077 2.713e-01 1.450e+00 SD.log_k_JSE76 0.97613 3.030e-01 1.649e+00 SD.f_cyan_ilr_1 0.38994 1.382e-01 6.417e-01 SD.f_cyan_ilr_2 0.82869 3.917e-02 1.618e+00 SD.f_JCZ38_qlogis 1.05000 -2.809e-02 2.128e+00 SD.f_JSE76_qlogis 0.44681 -3.986e+05 3.986e+05 Correlation: cyn_f_0 lg_k_c_ lg_k_cyn_f_ lg_k_cyn_b_ l__JCZ3 l__J9Z3 log_k_cyan_free 0.0936 log_k_cyan_free_bound 0.1302 0.1627 log_k_cyan_bound_free 0.0029 0.0525 0.5181 log_k_JCZ38 -0.0116 -0.0077 -0.0430 -0.0236 log_k_J9Z38 -0.0192 -0.0077 -0.0048 0.0229 -0.0005 log_k_JSE76 0.0007 -0.0020 -0.0134 -0.0072 0.1225 -0.0016 f_cyan_ilr_1 -0.0118 -0.0027 -0.0132 -0.0118 0.0127 -0.0505 f_cyan_ilr_2 -0.4643 -0.0762 -0.1245 0.0137 0.0497 0.1003 f_JCZ38_qlogis 0.0710 0.0371 0.1826 0.0925 -0.0869 -0.0130 f_JSE76_qlogis -0.0367 -0.0270 -0.2274 -0.1865 0.1244 0.0098 l__JSE7 f_cy__1 f_cy__2 f_JCZ38 log_k_cyan_free log_k_cyan_free_bound log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 0.0036 f_cyan_ilr_2 0.0050 -0.0201 f_JCZ38_qlogis 0.0142 -0.0529 -0.2698 f_JSE76_qlogis 0.0064 0.0345 0.2015 -0.7058 Random effects: est. lower upper SD.log_k_cyan_free 0.4967 1.865e-01 8.069e-01 SD.log_k_cyan_bound_free 0.2854 6.808e-02 5.027e-01 SD.log_k_JCZ38 0.7485 2.305e-01 1.266e+00 SD.log_k_J9Z38 0.8608 2.713e-01 1.450e+00 SD.log_k_JSE76 0.9761 3.030e-01 1.649e+00 SD.f_cyan_ilr_1 0.3899 1.382e-01 6.417e-01 SD.f_cyan_ilr_2 0.8287 3.917e-02 1.618e+00 SD.f_JCZ38_qlogis 1.0500 -2.809e-02 2.128e+00 SD.f_JSE76_qlogis 0.4468 -3.986e+05 3.986e+05 Variance model: est. lower upper a.1 2.07082 1.8458 2.29588 b.1 0.06227 0.0512 0.07334 Backtransformed parameters: est. lower upper cyan_free_0 1.007e+02 9.873e+01 102.72898 k_cyan_free 4.091e-02 2.623e-02 0.06382 k_cyan_free_bound 3.221e-02 2.537e-02 0.04090 k_cyan_bound_free 2.165e-02 1.557e-02 0.03011 k_JCZ38 8.122e-02 3.975e-02 0.16594 k_J9Z38 6.569e-03 2.954e-03 0.01461 k_JSE76 3.886e-02 1.556e-02 0.09703 f_cyan_free_to_JCZ38 6.785e-01 6.102e-01 0.97309 f_cyan_free_to_J9Z38 2.498e-01 6.102e-01 0.97309 f_JCZ38_to_JSE76 9.452e-01 7.392e-01 0.99056 f_JSE76_to_JCZ38 9.998e-01 5.580e-279 1.00000 Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.08426 0.01051 0.41220 Resulting formation fractions: ff cyan_free_JCZ38 0.6784541 cyan_free_J9Z38 0.2498405 cyan_free_sink 0.0717054 cyan_free 1.0000000 JCZ38_JSE76 0.9452043 JCZ38_sink 0.0547957 JSE76_JCZ38 0.9998226 JSE76_sink 0.0001774 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 25.237 168.51 50.73 8.226 65.95 JCZ38 8.535 28.35 NA NA NA J9Z38 105.517 350.52 NA NA NA JSE76 17.837 59.25 NA NA NA"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"pathway-2-refined-fits","dir":"Articles > Prebuilt","previous_headings":"Appendix > Hierarchical fit listings","what":"Pathway 2, refined fits","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"Hierarchical FOMC path 2 fit reduced random effects, two-component error Hierarchical DFOP path 2 fit reduced random effects, constant variance Hierarchical DFOP path 2 fit reduced random effects, two-component error Hierarchical SFORB path 2 fit reduced random effects, constant variance Hierarchical SFORB path 2 fit reduced random effects, two-component error","code":"saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:57:07 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - (alpha/beta) * 1/((time/beta) + 1) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * (alpha/beta) * 1/((time/beta) + 1) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 776.732 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.4477 -1.8631 -5.1087 -2.5114 0.6826 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta 4.7944 15.9616 13.1566 -0.1564 2.9781 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 7.701 0.000 0.000 0.000 0.0000 log_k_JCZ38 0.000 1.448 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.000 1.724 0.000 0.0000 log_k_JSE76 0.000 0.000 0.000 3.659 0.0000 f_cyan_ilr_1 0.000 0.000 0.000 0.000 0.6356 f_cyan_ilr_2 0.000 0.000 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.000 0.000 0.000 0.0000 f_JSE76_qlogis 0.000 0.000 0.000 0.000 0.0000 log_alpha 0.000 0.000 0.000 0.000 0.0000 log_beta 0.000 0.000 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_alpha log_beta cyan_0 0.00 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 10.32 0.00 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 12.23 0.00 0.0000 0.0000 f_JSE76_qlogis 0.00 0.00 14.99 0.0000 0.0000 log_alpha 0.00 0.00 0.00 0.3924 0.0000 log_beta 0.00 0.00 0.00 0.0000 0.5639 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2249 2242 -1106 Optimised parameters: est. lower upper cyan_0 101.24524 NA NA log_k_JCZ38 -2.85375 NA NA log_k_J9Z38 -5.07729 NA NA log_k_JSE76 -3.53511 NA NA f_cyan_ilr_1 0.67478 NA NA f_cyan_ilr_2 0.97152 NA NA f_JCZ38_qlogis 213.48001 NA NA f_JSE76_qlogis 2.02040 NA NA log_alpha -0.11041 NA NA log_beta 3.06575 NA NA a.1 2.05279 1.82393 2.28166 b.1 0.07116 0.05910 0.08322 SD.log_k_JCZ38 1.21713 0.44160 1.99266 SD.log_k_J9Z38 0.88268 0.27541 1.48995 SD.log_k_JSE76 0.59452 0.15005 1.03898 SD.f_cyan_ilr_1 0.35370 0.12409 0.58331 SD.f_cyan_ilr_2 0.78186 0.18547 1.37824 SD.log_alpha 0.27781 0.08168 0.47394 SD.log_beta 0.32608 0.06490 0.58726 Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.2171 0.44160 1.9927 SD.log_k_J9Z38 0.8827 0.27541 1.4900 SD.log_k_JSE76 0.5945 0.15005 1.0390 SD.f_cyan_ilr_1 0.3537 0.12409 0.5833 SD.f_cyan_ilr_2 0.7819 0.18547 1.3782 SD.log_alpha 0.2778 0.08168 0.4739 SD.log_beta 0.3261 0.06490 0.5873 Variance model: est. lower upper a.1 2.05279 1.8239 2.28166 b.1 0.07116 0.0591 0.08322 Backtransformed parameters: est. lower upper cyan_0 1.012e+02 NA NA k_JCZ38 5.763e-02 NA NA k_J9Z38 6.237e-03 NA NA k_JSE76 2.916e-02 NA NA f_cyan_to_JCZ38 6.354e-01 NA NA f_cyan_to_J9Z38 2.447e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA f_JSE76_to_JCZ38 8.829e-01 NA NA alpha 8.955e-01 NA NA beta 2.145e+01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.6354 cyan_J9Z38 0.2447 cyan_sink 0.1200 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 JSE76_JCZ38 0.8829 JSE76_sink 0.1171 Estimated disappearance times: DT50 DT90 DT50back cyan 25.07 259.21 78.03 JCZ38 12.03 39.96 NA J9Z38 111.14 369.19 NA JSE76 23.77 78.98 NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:58:51 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 880.94 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 102.4380 -2.3107 -5.3123 -3.7120 0.6757 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 1.1439 13.1194 12.3492 -1.9317 -4.4557 g_qlogis -0.5644 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 4.591 0.0000 0.000 0.0 0.0000 log_k_JCZ38 0.000 0.7966 0.000 0.0 0.0000 log_k_J9Z38 0.000 0.0000 1.561 0.0 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.8 0.0000 f_cyan_ilr_1 0.000 0.0000 0.000 0.0 0.6349 f_cyan_ilr_2 0.000 0.0000 0.000 0.0 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0 0.0000 f_JSE76_qlogis 0.000 0.0000 0.000 0.0 0.0000 log_k1 0.000 0.0000 0.000 0.0 0.0000 log_k2 0.000 0.0000 0.000 0.0 0.0000 g_qlogis 0.000 0.0000 0.000 0.0 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 cyan_0 0.000 0.00 0.00 0.000 0.0000 log_k_JCZ38 0.000 0.00 0.00 0.000 0.0000 log_k_J9Z38 0.000 0.00 0.00 0.000 0.0000 log_k_JSE76 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_1 0.000 0.00 0.00 0.000 0.0000 f_cyan_ilr_2 1.797 0.00 0.00 0.000 0.0000 f_JCZ38_qlogis 0.000 13.86 0.00 0.000 0.0000 f_JSE76_qlogis 0.000 0.00 13.91 0.000 0.0000 log_k1 0.000 0.00 0.00 1.106 0.0000 log_k2 0.000 0.00 0.00 0.000 0.6141 g_qlogis 0.000 0.00 0.00 0.000 0.0000 g_qlogis cyan_0 0.000 log_k_JCZ38 0.000 log_k_J9Z38 0.000 log_k_JSE76 0.000 f_cyan_ilr_1 0.000 f_cyan_ilr_2 0.000 f_JCZ38_qlogis 0.000 f_JSE76_qlogis 0.000 log_k1 0.000 log_k2 0.000 g_qlogis 1.595 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2282 2274 -1121 Optimised parameters: est. lower upper cyan_0 102.6036 NA NA log_k_JCZ38 -2.9348 NA NA log_k_J9Z38 -5.1617 NA NA log_k_JSE76 -3.6396 NA NA f_cyan_ilr_1 0.6991 NA NA f_cyan_ilr_2 0.6341 NA NA f_JCZ38_qlogis 4232.3011 NA NA f_JSE76_qlogis 1.9658 NA NA log_k1 -1.9503 NA NA log_k2 -4.4745 NA NA g_qlogis -0.4967 NA NA a.1 2.7461 2.59274 2.8994 SD.log_k_JCZ38 1.3178 0.47602 2.1596 SD.log_k_J9Z38 0.7022 0.15061 1.2538 SD.log_k_JSE76 0.6566 0.15613 1.1570 SD.f_cyan_ilr_1 0.3409 0.11666 0.5652 SD.f_cyan_ilr_2 0.4385 0.09482 0.7821 SD.log_k1 0.7381 0.25599 1.2202 SD.log_k2 0.5133 0.18152 0.8450 SD.g_qlogis 0.9866 0.35681 1.6164 Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.3178 0.47602 2.1596 SD.log_k_J9Z38 0.7022 0.15061 1.2538 SD.log_k_JSE76 0.6566 0.15613 1.1570 SD.f_cyan_ilr_1 0.3409 0.11666 0.5652 SD.f_cyan_ilr_2 0.4385 0.09482 0.7821 SD.log_k1 0.7381 0.25599 1.2202 SD.log_k2 0.5133 0.18152 0.8450 SD.g_qlogis 0.9866 0.35681 1.6164 Variance model: est. lower upper a.1 2.746 2.593 2.899 Backtransformed parameters: est. lower upper cyan_0 1.026e+02 NA NA k_JCZ38 5.314e-02 NA NA k_J9Z38 5.732e-03 NA NA k_JSE76 2.626e-02 NA NA f_cyan_to_JCZ38 6.051e-01 NA NA f_cyan_to_J9Z38 2.251e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA f_JSE76_to_JCZ38 8.772e-01 NA NA k1 1.422e-01 NA NA k2 1.140e-02 NA NA g 3.783e-01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.6051 cyan_J9Z38 0.2251 cyan_sink 0.1698 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 JSE76_JCZ38 0.8772 JSE76_sink 0.1228 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 22.05 160.35 48.27 4.873 60.83 JCZ38 13.04 43.33 NA NA NA J9Z38 120.93 401.73 NA NA NA JSE76 26.39 87.68 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:58:58 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan d_JCZ38/dt = + f_cyan_to_JCZ38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_to_J9Z38 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * cyan - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 887.853 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 101.7393 -1.4493 -5.0118 -2.1269 0.6720 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 7.3362 13.4423 13.2659 -2.0061 -4.5527 g_qlogis -0.5806 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_0 log_k_JCZ38 log_k_J9Z38 log_k_JSE76 f_cyan_ilr_1 cyan_0 5.604 0.00 0.000 0.000 0.0000 log_k_JCZ38 0.000 2.77 0.000 0.000 0.0000 log_k_J9Z38 0.000 0.00 1.662 0.000 0.0000 log_k_JSE76 0.000 0.00 0.000 5.021 0.0000 f_cyan_ilr_1 0.000 0.00 0.000 0.000 0.6519 f_cyan_ilr_2 0.000 0.00 0.000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.00 0.000 0.000 0.0000 f_JSE76_qlogis 0.000 0.00 0.000 0.000 0.0000 log_k1 0.000 0.00 0.000 0.000 0.0000 log_k2 0.000 0.00 0.000 0.000 0.0000 g_qlogis 0.000 0.00 0.000 0.000 0.0000 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis log_k1 log_k2 cyan_0 0.00 0.00 0.00 0.0000 0.0000 log_k_JCZ38 0.00 0.00 0.00 0.0000 0.0000 log_k_J9Z38 0.00 0.00 0.00 0.0000 0.0000 log_k_JSE76 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_1 0.00 0.00 0.00 0.0000 0.0000 f_cyan_ilr_2 13.37 0.00 0.00 0.0000 0.0000 f_JCZ38_qlogis 0.00 14.21 0.00 0.0000 0.0000 f_JSE76_qlogis 0.00 0.00 14.58 0.0000 0.0000 log_k1 0.00 0.00 0.00 0.8453 0.0000 log_k2 0.00 0.00 0.00 0.0000 0.5969 g_qlogis 0.00 0.00 0.00 0.0000 0.0000 g_qlogis cyan_0 0.00 log_k_JCZ38 0.00 log_k_J9Z38 0.00 log_k_JSE76 0.00 f_cyan_ilr_1 0.00 f_cyan_ilr_2 0.00 f_JCZ38_qlogis 0.00 f_JSE76_qlogis 0.00 log_k1 0.00 log_k2 0.00 g_qlogis 1.69 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2237 2229 -1099 Optimised parameters: est. lower upper cyan_0 101.00243 NA NA log_k_JCZ38 -2.80828 NA NA log_k_J9Z38 -5.04449 NA NA log_k_JSE76 -3.66981 NA NA f_cyan_ilr_1 0.72564 NA NA f_cyan_ilr_2 1.37978 NA NA f_JCZ38_qlogis 1.98726 NA NA f_JSE76_qlogis 414.80884 NA NA log_k1 -2.38601 NA NA log_k2 -4.63632 NA NA g_qlogis -0.33920 NA NA a.1 2.10837 1.88051 2.33623 b.1 0.06223 0.05108 0.07338 SD.log_k_JCZ38 1.30902 0.48128 2.13675 SD.log_k_J9Z38 0.83882 0.25790 1.41974 SD.log_k_JSE76 0.58104 0.14201 1.02008 SD.f_cyan_ilr_1 0.35421 0.12398 0.58443 SD.f_cyan_ilr_2 0.79373 0.12007 1.46740 SD.log_k2 0.27476 0.08557 0.46394 SD.g_qlogis 0.96170 0.35463 1.56878 Correlation is not available Random effects: est. lower upper SD.log_k_JCZ38 1.3090 0.48128 2.1367 SD.log_k_J9Z38 0.8388 0.25790 1.4197 SD.log_k_JSE76 0.5810 0.14201 1.0201 SD.f_cyan_ilr_1 0.3542 0.12398 0.5844 SD.f_cyan_ilr_2 0.7937 0.12007 1.4674 SD.log_k2 0.2748 0.08557 0.4639 SD.g_qlogis 0.9617 0.35463 1.5688 Variance model: est. lower upper a.1 2.10837 1.88051 2.33623 b.1 0.06223 0.05108 0.07338 Backtransformed parameters: est. lower upper cyan_0 1.010e+02 NA NA k_JCZ38 6.031e-02 NA NA k_J9Z38 6.445e-03 NA NA k_JSE76 2.548e-02 NA NA f_cyan_to_JCZ38 6.808e-01 NA NA f_cyan_to_J9Z38 2.440e-01 NA NA f_JCZ38_to_JSE76 8.795e-01 NA NA f_JSE76_to_JCZ38 1.000e+00 NA NA k1 9.200e-02 NA NA k2 9.693e-03 NA NA g 4.160e-01 NA NA Resulting formation fractions: ff cyan_JCZ38 0.68081 cyan_J9Z38 0.24398 cyan_sink 0.07521 JCZ38_JSE76 0.87945 JCZ38_sink 0.12055 JSE76_JCZ38 1.00000 JSE76_sink 0.00000 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 cyan 25.00 182.05 54.8 7.535 71.51 JCZ38 11.49 38.18 NA NA NA J9Z38 107.55 357.28 NA NA NA JSE76 27.20 90.36 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:58:49 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 878.878 s Using 300, 100 iterations and 10 chains Variance model: Constant variance Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 102.4395 -2.7673 -2.8942 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.6201 -2.3107 -5.3123 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -3.7120 0.6754 1.1448 f_JCZ38_qlogis f_JSE76_qlogis 14.8408 15.4734 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 4.589 0.0000 0.00 log_k_cyan_free 0.000 0.4849 0.00 log_k_cyan_free_bound 0.000 0.0000 1.62 log_k_cyan_bound_free 0.000 0.0000 0.00 log_k_JCZ38 0.000 0.0000 0.00 log_k_J9Z38 0.000 0.0000 0.00 log_k_JSE76 0.000 0.0000 0.00 f_cyan_ilr_1 0.000 0.0000 0.00 f_cyan_ilr_2 0.000 0.0000 0.00 f_JCZ38_qlogis 0.000 0.0000 0.00 f_JSE76_qlogis 0.000 0.0000 0.00 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.0000 0.000 0.0 log_k_cyan_free 0.000 0.0000 0.000 0.0 log_k_cyan_free_bound 0.000 0.0000 0.000 0.0 log_k_cyan_bound_free 1.197 0.0000 0.000 0.0 log_k_JCZ38 0.000 0.7966 0.000 0.0 log_k_J9Z38 0.000 0.0000 1.561 0.0 log_k_JSE76 0.000 0.0000 0.000 0.8 f_cyan_ilr_1 0.000 0.0000 0.000 0.0 f_cyan_ilr_2 0.000 0.0000 0.000 0.0 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0 f_JSE76_qlogis 0.000 0.0000 0.000 0.0 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis cyan_free_0 0.0000 0.000 0.0 0.00 log_k_cyan_free 0.0000 0.000 0.0 0.00 log_k_cyan_free_bound 0.0000 0.000 0.0 0.00 log_k_cyan_bound_free 0.0000 0.000 0.0 0.00 log_k_JCZ38 0.0000 0.000 0.0 0.00 log_k_J9Z38 0.0000 0.000 0.0 0.00 log_k_JSE76 0.0000 0.000 0.0 0.00 f_cyan_ilr_1 0.6349 0.000 0.0 0.00 f_cyan_ilr_2 0.0000 1.797 0.0 0.00 f_JCZ38_qlogis 0.0000 0.000 15.6 0.00 f_JSE76_qlogis 0.0000 0.000 0.0 17.52 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2280 2272 -1120 Optimised parameters: est. lower upper cyan_free_0 102.6532 NA NA log_k_cyan_free -2.8547 NA NA log_k_cyan_free_bound -2.7004 NA NA log_k_cyan_bound_free -3.5078 NA NA log_k_JCZ38 -2.9255 NA NA log_k_J9Z38 -5.1089 NA NA log_k_JSE76 -3.6263 NA NA f_cyan_ilr_1 0.6873 NA NA f_cyan_ilr_2 0.6498 NA NA f_JCZ38_qlogis 3624.2149 NA NA f_JSE76_qlogis 1.9991 NA NA a.1 2.7472 2.55559 2.9388 SD.log_k_cyan_free 0.3227 0.10296 0.5423 SD.log_k_cyan_free_bound 0.8757 0.29525 1.4562 SD.log_k_cyan_bound_free 0.6128 0.20220 1.0233 SD.log_k_JCZ38 1.3431 0.48474 2.2014 SD.log_k_J9Z38 0.6881 0.14714 1.2291 SD.log_k_JSE76 0.6461 0.15321 1.1390 SD.f_cyan_ilr_1 0.3361 0.11376 0.5585 SD.f_cyan_ilr_2 0.4286 0.08419 0.7730 Correlation is not available Random effects: est. lower upper SD.log_k_cyan_free 0.3227 0.10296 0.5423 SD.log_k_cyan_free_bound 0.8757 0.29525 1.4562 SD.log_k_cyan_bound_free 0.6128 0.20220 1.0233 SD.log_k_JCZ38 1.3431 0.48474 2.2014 SD.log_k_J9Z38 0.6881 0.14714 1.2291 SD.log_k_JSE76 0.6461 0.15321 1.1390 SD.f_cyan_ilr_1 0.3361 0.11376 0.5585 SD.f_cyan_ilr_2 0.4286 0.08419 0.7730 Variance model: est. lower upper a.1 2.747 2.556 2.939 Backtransformed parameters: est. lower upper cyan_free_0 1.027e+02 NA NA k_cyan_free 5.758e-02 NA NA k_cyan_free_bound 6.718e-02 NA NA k_cyan_bound_free 2.996e-02 NA NA k_JCZ38 5.364e-02 NA NA k_J9Z38 6.042e-03 NA NA k_JSE76 2.662e-02 NA NA f_cyan_free_to_JCZ38 6.039e-01 NA NA f_cyan_free_to_J9Z38 2.285e-01 NA NA f_JCZ38_to_JSE76 1.000e+00 NA NA f_JSE76_to_JCZ38 8.807e-01 NA NA Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.1426 0.0121 0.3484 Resulting formation fractions: ff cyan_free_JCZ38 0.6039 cyan_free_J9Z38 0.2285 cyan_free_sink 0.1676 cyan_free 1.0000 JCZ38_JSE76 1.0000 JCZ38_sink 0.0000 JSE76_JCZ38 0.8807 JSE76_sink 0.1193 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 23.84 154.95 46.65 4.86 57.31 JCZ38 12.92 42.93 NA NA NA J9Z38 114.71 381.07 NA NA NA JSE76 26.04 86.51 NA NA NA saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:10 2023 Date of summary: Thu Nov 16 04:59:11 2023 Equations: d_cyan_free/dt = - k_cyan_free * cyan_free - k_cyan_free_bound * cyan_free + k_cyan_bound_free * cyan_bound d_cyan_bound/dt = + k_cyan_free_bound * cyan_free - k_cyan_bound_free * cyan_bound d_JCZ38/dt = + f_cyan_free_to_JCZ38 * k_cyan_free * cyan_free - k_JCZ38 * JCZ38 + f_JSE76_to_JCZ38 * k_JSE76 * JSE76 d_J9Z38/dt = + f_cyan_free_to_J9Z38 * k_cyan_free * cyan_free - k_J9Z38 * J9Z38 d_JSE76/dt = + f_JCZ38_to_JSE76 * k_JCZ38 * JCZ38 - k_JSE76 * JSE76 Data: 433 observations of 4 variable(s) grouped in 5 datasets Model predictions using solution type deSolve Fitted in 899.539 s Using 300, 100 iterations and 10 chains Variance model: Two-component variance function Starting values for degradation parameters: cyan_free_0 log_k_cyan_free log_k_cyan_free_bound 101.7511 -2.8370 -3.0162 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 -3.6600 -2.2988 -5.3129 log_k_JSE76 f_cyan_ilr_1 f_cyan_ilr_2 -3.6991 0.6722 4.8596 f_JCZ38_qlogis f_JSE76_qlogis 13.4678 14.2149 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): cyan_free_0 log_k_cyan_free log_k_cyan_free_bound cyan_free_0 5.629 0.000 0.000 log_k_cyan_free 0.000 0.446 0.000 log_k_cyan_free_bound 0.000 0.000 1.449 log_k_cyan_bound_free 0.000 0.000 0.000 log_k_JCZ38 0.000 0.000 0.000 log_k_J9Z38 0.000 0.000 0.000 log_k_JSE76 0.000 0.000 0.000 f_cyan_ilr_1 0.000 0.000 0.000 f_cyan_ilr_2 0.000 0.000 0.000 f_JCZ38_qlogis 0.000 0.000 0.000 f_JSE76_qlogis 0.000 0.000 0.000 log_k_cyan_bound_free log_k_JCZ38 log_k_J9Z38 log_k_JSE76 cyan_free_0 0.000 0.0000 0.000 0.0000 log_k_cyan_free 0.000 0.0000 0.000 0.0000 log_k_cyan_free_bound 0.000 0.0000 0.000 0.0000 log_k_cyan_bound_free 1.213 0.0000 0.000 0.0000 log_k_JCZ38 0.000 0.7801 0.000 0.0000 log_k_J9Z38 0.000 0.0000 1.575 0.0000 log_k_JSE76 0.000 0.0000 0.000 0.8078 f_cyan_ilr_1 0.000 0.0000 0.000 0.0000 f_cyan_ilr_2 0.000 0.0000 0.000 0.0000 f_JCZ38_qlogis 0.000 0.0000 0.000 0.0000 f_JSE76_qlogis 0.000 0.0000 0.000 0.0000 f_cyan_ilr_1 f_cyan_ilr_2 f_JCZ38_qlogis f_JSE76_qlogis cyan_free_0 0.0000 0.000 0.00 0.00 log_k_cyan_free 0.0000 0.000 0.00 0.00 log_k_cyan_free_bound 0.0000 0.000 0.00 0.00 log_k_cyan_bound_free 0.0000 0.000 0.00 0.00 log_k_JCZ38 0.0000 0.000 0.00 0.00 log_k_J9Z38 0.0000 0.000 0.00 0.00 log_k_JSE76 0.0000 0.000 0.00 0.00 f_cyan_ilr_1 0.6518 0.000 0.00 0.00 f_cyan_ilr_2 0.0000 9.981 0.00 0.00 f_JCZ38_qlogis 0.0000 0.000 14.26 0.00 f_JSE76_qlogis 0.0000 0.000 0.00 16.17 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 2241 2233 -1101 Optimised parameters: est. lower upper cyan_free_0 100.95469 NA NA log_k_cyan_free -3.18706 NA NA log_k_cyan_free_bound -3.38455 NA NA log_k_cyan_bound_free -3.75788 NA NA log_k_JCZ38 -2.77024 NA NA log_k_J9Z38 -5.03665 NA NA log_k_JSE76 -3.60289 NA NA f_cyan_ilr_1 0.72263 NA NA f_cyan_ilr_2 1.45352 NA NA f_JCZ38_qlogis 2.00778 NA NA f_JSE76_qlogis 941.58570 NA NA a.1 2.11130 1.88299 2.33960 b.1 0.06299 0.05176 0.07421 SD.log_k_cyan_free 0.50098 0.18805 0.81390 SD.log_k_cyan_bound_free 0.31671 0.08467 0.54875 SD.log_k_JCZ38 1.25865 0.45932 2.05798 SD.log_k_J9Z38 0.86833 0.27222 1.46444 SD.log_k_JSE76 0.59325 0.14711 1.03940 SD.f_cyan_ilr_1 0.35705 0.12521 0.58890 SD.f_cyan_ilr_2 0.88541 0.13797 1.63286 Correlation is not available Random effects: est. lower upper SD.log_k_cyan_free 0.5010 0.18805 0.8139 SD.log_k_cyan_bound_free 0.3167 0.08467 0.5488 SD.log_k_JCZ38 1.2587 0.45932 2.0580 SD.log_k_J9Z38 0.8683 0.27222 1.4644 SD.log_k_JSE76 0.5933 0.14711 1.0394 SD.f_cyan_ilr_1 0.3571 0.12521 0.5889 SD.f_cyan_ilr_2 0.8854 0.13797 1.6329 Variance model: est. lower upper a.1 2.11130 1.88299 2.33960 b.1 0.06299 0.05176 0.07421 Backtransformed parameters: est. lower upper cyan_free_0 1.010e+02 NA NA k_cyan_free 4.129e-02 NA NA k_cyan_free_bound 3.389e-02 NA NA k_cyan_bound_free 2.333e-02 NA NA k_JCZ38 6.265e-02 NA NA k_J9Z38 6.495e-03 NA NA k_JSE76 2.724e-02 NA NA f_cyan_free_to_JCZ38 6.844e-01 NA NA f_cyan_free_to_J9Z38 2.463e-01 NA NA f_JCZ38_to_JSE76 8.816e-01 NA NA f_JSE76_to_JCZ38 1.000e+00 NA NA Estimated Eigenvalues of SFORB model(s): cyan_b1 cyan_b2 cyan_g 0.08751 0.01101 0.39586 Resulting formation fractions: ff cyan_free_JCZ38 0.68444 cyan_free_J9Z38 0.24633 cyan_free_sink 0.06923 cyan_free 1.00000 JCZ38_JSE76 0.88161 JCZ38_sink 0.11839 JSE76_JCZ38 1.00000 JSE76_sink 0.00000 Estimated disappearance times: DT50 DT90 DT50back DT50_cyan_b1 DT50_cyan_b2 cyan 25.36 163.36 49.18 7.921 62.95 JCZ38 11.06 36.75 NA NA NA J9Z38 106.71 354.49 NA NA NA JSE76 25.44 84.51 NA NA NA"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"session-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Session info","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"","code":"R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] saemix_3.2 npde_3.3 knitr_1.42 mkin_1.2.6 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 cellranger_1.1.0 rprojroot_2.0.3 [13] jsonlite_1.8.4 processx_3.8.1 pkgbuild_1.4.0 deSolve_1.35 [17] DBI_1.1.3 mclust_6.0.0 ps_1.7.5 gridExtra_2.3 [21] purrr_1.0.1 fansi_1.0.4 scales_1.2.1 codetools_0.2-19 [25] textshaping_0.3.6 jquerylib_0.1.4 cli_3.6.1 crayon_1.5.2 [29] rlang_1.1.1 munsell_0.5.0 cachem_1.0.8 yaml_2.3.7 [33] inline_0.3.19 tools_4.3.2 memoise_2.0.1 dplyr_1.1.2 [37] colorspace_2.1-0 ggplot2_3.4.2 vctrs_0.6.2 R6_2.5.1 [41] zoo_1.8-12 lifecycle_1.0.3 stringr_1.5.0 fs_1.6.2 [45] MASS_7.3-60 ragg_1.2.5 callr_3.7.3 pkgconfig_2.0.3 [49] desc_1.4.2 pkgdown_2.0.7 bslib_0.4.2 pillar_1.9.0 [53] gtable_0.3.3 glue_1.6.2 systemfonts_1.0.4 highr_0.10 [57] xfun_0.39 tibble_3.2.1 lmtest_0.9-40 tidyselect_1.2.0 [61] htmltools_0.5.5 nlme_3.1-163 rmarkdown_2.21 compiler_4.3.2 [65] prettyunits_1.1.1 readxl_1.4.2"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html","id":"hardware-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hardware info","title":"Testing hierarchical pathway kinetics with residue data on cyantraniliprole","text":"","code":"CPU model: AMD Ryzen 9 7950X 16-Core Processor MemTotal: 64927712 kB"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"introduction","dir":"Articles > Prebuilt","previous_headings":"","what":"Introduction","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"purpose document demonstrate nonlinear hierarchical models (NLHM) based parent degradation models SFO, FOMC, DFOP HS can fitted mkin package. assembled course work package 1.1 Project Number 173340 (Application nonlinear hierarchical models kinetic evaluation chemical degradation data) German Environment Agency carried 2022 2023. mkin package used version 1.2.6. contains test data functions used evaluations. saemix package used backend fitting NLHM, also loaded make convergence plot function available. document processed knitr package, also provides kable function used improve display tabular data R markdown documents. parallel processing, parallel package used.","code":"library(mkin) library(knitr) library(saemix) library(parallel) n_cores <- detectCores() if (Sys.info()[\"sysname\"] == \"Windows\") { cl <- makePSOCKcluster(n_cores) } else { cl <- makeForkCluster(n_cores) }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"data","dir":"Articles > Prebuilt","previous_headings":"","what":"Data","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"test data available mkin package object class mkindsg (mkin dataset group) identifier dimethenamid_2018. following preprocessing steps still necessary: data available enantiomer dimethenamid-P (DMTAP) renamed substance name data racemic mixture dimethenamid (DMTA). reason difference degradation behaviour identified EU risk assessment. data transformation products unnecessary columns discarded observation times dataset multiplied corresponding normalisation factor also available dataset, order make possible describe datasets single set parameters independent temperature Finally, datasets observed soil (Elliot 1 Elliot 2) combined, resulting dimethenamid (DMTA) data six soils. following commented R code performs preprocessing. following tables show 6 datasets. Dataset Calke Dataset Borstel Dataset Flaach Dataset BBA 2.2 Dataset BBA 2.3 Dataset Elliot","code":"# Apply a function to each of the seven datasets in the mkindsg object to create a list dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data # Get a dataset ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" # Rename DMTAP to DMTA ds_i <- subset(ds_i, name == \"DMTA\", c(\"name\", \"time\", \"value\")) # Select data ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] # Normalise time ds_i # Return the dataset }) # Use dataset titles as names for the list elements names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) # Combine data for Elliot soil to obtain a named list with six elements dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) # dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL for (ds_name in names(dmta_ds)) { print(kable(mkin_long_to_wide(dmta_ds[[ds_name]]), caption = paste(\"Dataset\", ds_name), label = paste0(\"tab:\", ds_name), booktabs = TRUE)) cat(\"\\n\\\\clearpage\\n\") }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"separate-evaluations","dir":"Articles > Prebuilt","previous_headings":"","what":"Separate evaluations","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"order obtain suitable starting parameters NLHM fits, separate fits four models data soil generated using mmkin function mkin package. first step, constant variance assumed. Convergence checked status function. table , OK indicates convergence, C indicates failure converge. separate fits constant variance converged, sole exception HS fit BBA 2.2 data. prepare fitting NLHM using two-component error model, separate fits updated assuming two-component error. Using two-component error model, one fit converge constant variance converge, non-SFO fits failed converge.","code":"deg_mods <- c(\"SFO\", \"FOMC\", \"DFOP\", \"HS\") f_sep_const <- mmkin( deg_mods, dmta_ds, error_model = \"const\", quiet = TRUE) status(f_sep_const) |> kable() f_sep_tc <- update(f_sep_const, error_model = \"tc\") status(f_sep_tc) |> kable()"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"hierarchichal-model-fits","dir":"Articles > Prebuilt","previous_headings":"","what":"Hierarchichal model fits","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"following code fits eight versions hierarchical models data, using SFO, FOMC, DFOP HS parent compound, using either constant variance two-component error error model. default parameter distribution model mkin allows variation degradation parameters across assumed population soils. words, degradation parameter associated random effect first step. mhmkin function makes possible fit eight versions parallel (given sufficient number computing cores available) save execution time. Convergence plots summaries fits shown appendix. output status function shows fits terminated successfully. AIC BIC values show biphasic models DFOP HS give best fits. DFOP model preferred , better mechanistic basis batch experiments constant incubation conditions. Also, shows lowest AIC BIC values first set fits combined two-component error model. Therefore, DFOP model selected refinements fits aim make model fully identifiable.","code":"f_saem <- mhmkin(list(f_sep_const, f_sep_tc), transformations = \"saemix\") status(f_saem) |> kable() anova(f_saem) |> kable(digits = 1)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"parameter-identifiability-based-on-the-fisher-information-matrix","dir":"Articles > Prebuilt","previous_headings":"Hierarchichal model fits","what":"Parameter identifiability based on the Fisher Information Matrix","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"Using illparms function, ill-defined statistical model parameters standard deviations degradation parameters population error model parameters can found. According illparms function, fitted standard deviation second kinetic rate constant k2 ill-defined DFOP fits. suggests different values obtained standard deviation using different starting values. thus identified overparameterisation addressed removing random effect k2 parameter model. resulting fit, checked whether still ill-defined parameters, case. , refined model compared previous best model. model without random effect k2 reduced version previous model. Therefore, models nested can compared using likelihood ratio test. achieved argument test = TRUE anova function. AIC BIC criteria lower removal ill-defined random effect k2. p value likelihood ratio test much greater 0.05, indicating model higher likelihood (model random effects degradation parameters f_saem[[\"DFOP\", \"tc\"]]) fit significantly better model lower likelihood (reduced model f_saem_dfop_tc_no_ranef_k2). Therefore, AIC, BIC likelihood ratio test suggest use reduced model. convergence fit checked visually. Convergence plot NLHM DFOP fit two-component error without random effect ‘k2’ parameters appear converged satisfactory degree. final fit plotted using plot method mkin package. Plot final NLHM DFOP fit Finally, summary report fit produced.","code":"illparms(f_saem) |> kable() f_saem_dfop_tc_no_ranef_k2 <- update(f_saem[[\"DFOP\", \"tc\"]], no_random_effect = \"k2\") illparms(f_saem_dfop_tc_no_ranef_k2) anova(f_saem[[\"DFOP\", \"tc\"]], f_saem_dfop_tc_no_ranef_k2, test = TRUE) |> kable(format.args = list(digits = 4)) plot(f_saem_dfop_tc_no_ranef_k2) summary(f_saem_dfop_tc_no_ranef_k2) saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:35 2023 Date of summary: Thu Nov 16 04:59:35 2023 Equations: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 4.4 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 k1 k2 g 98.71186 0.08675 0.01374 0.93491 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 g DMTA_0 98.71 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 g 0.00 0 0 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 663.7 661.8 -322.9 Optimised parameters: est. lower upper DMTA_0 98.256267 96.286112 100.22642 k1 0.064037 0.033281 0.09479 k2 0.008469 0.006002 0.01094 g 0.954167 0.914460 0.99387 a.1 1.061795 0.863943 1.25965 b.1 0.029550 0.022529 0.03657 SD.DMTA_0 2.068581 0.427706 3.70946 SD.k1 0.598285 0.258235 0.93833 SD.g 1.016689 0.360057 1.67332 Correlation: DMTA_0 k1 k2 k1 0.0213 k2 0.0541 0.0344 g -0.0521 -0.0286 -0.2744 Random effects: est. lower upper SD.DMTA_0 2.0686 0.4277 3.7095 SD.k1 0.5983 0.2582 0.9383 SD.g 1.0167 0.3601 1.6733 Variance model: est. lower upper a.1 1.06180 0.86394 1.25965 b.1 0.02955 0.02253 0.03657 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 11.45 41.32 12.44 10.82 81.85"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"alternative-check-of-parameter-identifiability","dir":"Articles > Prebuilt","previous_headings":"Hierarchichal model fits","what":"Alternative check of parameter identifiability","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"parameter check used illparms function based quadratic approximation likelihood surface near optimum, calculated using Fisher Information Matrix (FIM). alternative way check parameter identifiability (Duchesne et al. 2021) based multistart approach recently implemented mkin. graph shows boxplots parameters obtained 50 runs saem algorithm different parameter combinations, sampled range parameters obtained individual datasets fitted separately using nonlinear regression. Scaled parameters multistart runs, full model graph clearly confirms lack identifiability variance k2 full model. overparameterisation model also indicates lack identifiability variance parameter g. parameter boxplots multistart runs reduced model shown indicate runs give similar results, regardless starting parameters. Scaled parameters multistart runs, reduced model parameters top 25% fits shown (based feature introduced mkin 1.2.2 currently development), scatter even less shown . Scaled parameters multistart runs, reduced model, fits top 25% likelihood values","code":"f_saem_dfop_tc_multi <- multistart(f_saem[[\"DFOP\", \"tc\"]], n = 50, cores = 15) par(mar = c(6.1, 4.1, 2.1, 2.1)) parplot(f_saem_dfop_tc_multi, lpos = \"bottomright\", ylim = c(0.3, 10), las = 2) f_saem_dfop_tc_no_ranef_k2_multi <- multistart(f_saem_dfop_tc_no_ranef_k2, n = 50, cores = 15) par(mar = c(6.1, 4.1, 2.1, 2.1)) parplot(f_saem_dfop_tc_no_ranef_k2_multi, ylim = c(0.5, 2), las = 2, lpos = \"bottomright\") par(mar = c(6.1, 4.1, 2.1, 2.1)) parplot(f_saem_dfop_tc_no_ranef_k2_multi, ylim = c(0.5, 2), las = 2, llquant = 0.25, lpos = \"bottomright\")"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"conclusions","dir":"Articles > Prebuilt","previous_headings":"","what":"Conclusions","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"Fitting four parent degradation models SFO, FOMC, DFOP HS part hierarchical model fits two different error models normal distributions transformed degradation parameters works without technical problems. biphasic models DFOP HS gave best fit data, default parameter distribution model fully identifiable. Removing random effect second kinetic rate constant DFOP model resulted reduced model fully identifiable showed lowest values model selection criteria AIC BIC. reliability identification model parameters confirmed using multiple starting values.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"acknowledgements","dir":"Articles > Prebuilt","previous_headings":"","what":"Acknowledgements","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"helpful comments Janina Wöltjen German Environment Agency gratefully acknowledged.","code":""},{"path":[]},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"hierarchical-model-fit-listings","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hierarchical model fit listings","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"Hierarchical mkin fit SFO model error model const Hierarchical mkin fit SFO model error model tc Hierarchical mkin fit FOMC model error model const Hierarchical mkin fit FOMC model error model tc Hierarchical mkin fit DFOP model error model const Hierarchical mkin fit DFOP model error model tc Hierarchical mkin fit HS model error model const Hierarchical mkin fit HS model error model tc","code":"saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:26 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - k_DMTA * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 0.788 s Using 300, 100 iterations and 9 chains Variance model: Constant variance Starting values for degradation parameters: DMTA_0 k_DMTA 97.2953 0.0566 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k_DMTA DMTA_0 97.3 0 k_DMTA 0.0 1 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 796.3 795.3 -393.2 Optimised parameters: est. lower upper DMTA_0 97.28130 95.71113 98.8515 k_DMTA 0.05665 0.02909 0.0842 a.1 2.66442 2.35579 2.9731 SD.DMTA_0 1.54776 0.15447 2.9411 SD.k_DMTA 0.60690 0.26248 0.9513 Correlation: DMTA_0 k_DMTA 0.0168 Random effects: est. lower upper SD.DMTA_0 1.5478 0.1545 2.9411 SD.k_DMTA 0.6069 0.2625 0.9513 Variance model: est. lower upper a.1 2.664 2.356 2.973 Estimated disappearance times: DT50 DT90 DMTA 12.24 40.65 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:28 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - k_DMTA * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 2.428 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 k_DMTA 96.99175 0.05603 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k_DMTA DMTA_0 96.99 0 k_DMTA 0.00 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 798.3 797.1 -393.2 Optimised parameters: est. lower upper DMTA_0 97.271822 95.703157 98.84049 k_DMTA 0.056638 0.029110 0.08417 a.1 2.660081 2.230398 3.08976 b.1 0.001665 -0.006911 0.01024 SD.DMTA_0 1.545520 0.145035 2.94601 SD.k_DMTA 0.606422 0.262274 0.95057 Correlation: DMTA_0 k_DMTA 0.0169 Random effects: est. lower upper SD.DMTA_0 1.5455 0.1450 2.9460 SD.k_DMTA 0.6064 0.2623 0.9506 Variance model: est. lower upper a.1 2.660081 2.230398 3.08976 b.1 0.001665 -0.006911 0.01024 Estimated disappearance times: DT50 DT90 DMTA 12.24 40.65 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:27 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - (alpha/beta) * 1/((time/beta) + 1) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 1.28 s Using 300, 100 iterations and 9 chains Variance model: Constant variance Starting values for degradation parameters: DMTA_0 alpha beta 98.292 9.909 156.341 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 alpha beta DMTA_0 98.29 0 0 alpha 0.00 1 0 beta 0.00 0 1 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 734.2 732.7 -360.1 Optimised parameters: est. lower upper DMTA_0 98.3435 96.9033 99.784 alpha 7.2007 2.5889 11.812 beta 112.8745 34.8816 190.867 a.1 2.0459 1.8054 2.286 SD.DMTA_0 1.4795 0.2717 2.687 SD.alpha 0.6396 0.1509 1.128 SD.beta 0.6874 0.1587 1.216 Correlation: DMTA_0 alpha alpha -0.1125 beta -0.1227 0.3632 Random effects: est. lower upper SD.DMTA_0 1.4795 0.2717 2.687 SD.alpha 0.6396 0.1509 1.128 SD.beta 0.6874 0.1587 1.216 Variance model: est. lower upper a.1 2.046 1.805 2.286 Estimated disappearance times: DT50 DT90 DT50back DMTA 11.41 42.53 12.8 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:28 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - (alpha/beta) * 1/((time/beta) + 1) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 2.793 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 alpha beta 98.772 4.663 92.597 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 alpha beta DMTA_0 98.77 0 0 alpha 0.00 1 0 beta 0.00 0 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 720.7 719.1 -352.4 Optimised parameters: est. lower upper DMTA_0 99.10577 97.33296 100.87859 alpha 5.46260 2.52199 8.40321 beta 81.66080 30.46664 132.85497 a.1 1.50219 1.23601 1.76836 b.1 0.02893 0.02099 0.03687 SD.DMTA_0 1.61887 -0.03636 3.27411 SD.alpha 0.58145 0.17364 0.98925 SD.beta 0.68205 0.21108 1.15303 Correlation: DMTA_0 alpha alpha -0.1321 beta -0.1430 0.2467 Random effects: est. lower upper SD.DMTA_0 1.6189 -0.03636 3.2741 SD.alpha 0.5814 0.17364 0.9892 SD.beta 0.6821 0.21108 1.1530 Variance model: est. lower upper a.1 1.50219 1.23601 1.76836 b.1 0.02893 0.02099 0.03687 Estimated disappearance times: DT50 DT90 DT50back DMTA 11.05 42.81 12.89 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:27 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 1.752 s Using 300, 100 iterations and 9 chains Variance model: Constant variance Starting values for degradation parameters: DMTA_0 k1 k2 g 98.64383 0.09211 0.02999 0.76814 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 g DMTA_0 98.64 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 g 0.00 0 0 1 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 711.8 710 -346.9 Optimised parameters: est. lower upper DMTA_0 98.092481 96.573899 99.61106 k1 0.062499 0.030336 0.09466 k2 0.009065 -0.005133 0.02326 g 0.948967 0.862080 1.03586 a.1 1.821671 1.604774 2.03857 SD.DMTA_0 1.677785 0.472066 2.88350 SD.k1 0.634962 0.270788 0.99914 SD.k2 1.033498 -0.205994 2.27299 SD.g 1.710046 0.428642 2.99145 Correlation: DMTA_0 k1 k2 k1 0.0246 k2 0.0491 0.0953 g -0.0552 -0.0889 -0.4795 Random effects: est. lower upper SD.DMTA_0 1.678 0.4721 2.8835 SD.k1 0.635 0.2708 0.9991 SD.k2 1.033 -0.2060 2.2730 SD.g 1.710 0.4286 2.9914 Variance model: est. lower upper a.1 1.822 1.605 2.039 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 11.79 42.8 12.88 11.09 76.46 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:29 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 3.186 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 k1 k2 g 98.71186 0.08675 0.01374 0.93491 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 g DMTA_0 98.71 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 g 0.00 0 0 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 665.7 663.6 -322.9 Optimised parameters: est. lower upper DMTA_0 98.347470 96.380815 100.31413 k1 0.064524 0.034279 0.09477 k2 0.008304 0.005843 0.01076 g 0.952128 0.909578 0.99468 a.1 1.068907 0.868694 1.26912 b.1 0.029265 0.022262 0.03627 SD.DMTA_0 2.065796 0.428485 3.70311 SD.k1 0.583703 0.251796 0.91561 SD.k2 0.004167 -7.832168 7.84050 SD.g 1.064450 0.397476 1.73142 Correlation: DMTA_0 k1 k2 k1 0.0223 k2 0.0568 0.0394 g -0.0464 -0.0269 -0.2713 Random effects: est. lower upper SD.DMTA_0 2.065796 0.4285 3.7031 SD.k1 0.583703 0.2518 0.9156 SD.k2 0.004167 -7.8322 7.8405 SD.g 1.064450 0.3975 1.7314 Variance model: est. lower upper a.1 1.06891 0.86869 1.26912 b.1 0.02927 0.02226 0.03627 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 11.39 41.36 12.45 10.74 83.48 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:28 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - ifelse(time <= tb, k1, k2) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 2.28 s Using 300, 100 iterations and 9 chains Variance model: Constant variance Starting values for degradation parameters: DMTA_0 k1 k2 tb 97.82176 0.06931 0.02997 11.13945 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 tb DMTA_0 97.82 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 tb 0.00 0 0 1 Starting values for error model parameters: a.1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 714 712.1 -348 Optimised parameters: est. lower upper DMTA_0 98.16102 96.47747 99.84456 k1 0.07876 0.05261 0.10491 k2 0.02227 0.01706 0.02747 tb 13.99089 -7.40049 35.38228 a.1 1.82305 1.60700 2.03910 SD.DMTA_0 1.88413 0.56204 3.20622 SD.k1 0.34292 0.10482 0.58102 SD.k2 0.19851 0.01718 0.37985 SD.tb 1.68168 0.58064 2.78272 Correlation: DMTA_0 k1 k2 k1 0.0142 k2 0.0001 -0.0025 tb 0.0165 -0.1256 -0.0301 Random effects: est. lower upper SD.DMTA_0 1.8841 0.56204 3.2062 SD.k1 0.3429 0.10482 0.5810 SD.k2 0.1985 0.01718 0.3798 SD.tb 1.6817 0.58064 2.7827 Variance model: est. lower upper a.1 1.823 1.607 2.039 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 8.801 67.91 20.44 8.801 31.13 saemix version used for fitting: 3.2 mkin version used for pre-fitting: 1.2.6 R version used for fitting: 4.3.2 Date of fit: Thu Nov 16 04:59:29 2023 Date of summary: Thu Nov 16 05:00:43 2023 Equations: d_DMTA/dt = - ifelse(time <= tb, k1, k2) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Model predictions using solution type analytical Fitted in 3.658 s Using 300, 100 iterations and 9 chains Variance model: Two-component variance function Starting values for degradation parameters: DMTA_0 k1 k2 tb 98.45190 0.07525 0.02576 19.19375 Fixed degradation parameter values: None Starting values for random effects (square root of initial entries in omega): DMTA_0 k1 k2 tb DMTA_0 98.45 0 0 0 k1 0.00 1 0 0 k2 0.00 0 1 0 tb 0.00 0 0 1 Starting values for error model parameters: a.1 b.1 1 1 Results: Likelihood computed by importance sampling AIC BIC logLik 667.1 665 -323.6 Optimised parameters: est. lower upper DMTA_0 97.76571 95.81350 99.71791 k1 0.05855 0.03080 0.08630 k2 0.02337 0.01664 0.03010 tb 31.09638 29.38289 32.80987 a.1 1.08835 0.88590 1.29080 b.1 0.02964 0.02257 0.03671 SD.DMTA_0 2.04877 0.42607 3.67147 SD.k1 0.59166 0.25621 0.92711 SD.k2 0.30698 0.09561 0.51835 SD.tb 0.01274 -0.10914 0.13462 Correlation: DMTA_0 k1 k2 k1 0.0160 k2 -0.0070 -0.0024 tb -0.0668 -0.0103 -0.2013 Random effects: est. lower upper SD.DMTA_0 2.04877 0.42607 3.6715 SD.k1 0.59166 0.25621 0.9271 SD.k2 0.30698 0.09561 0.5183 SD.tb 0.01274 -0.10914 0.1346 Variance model: est. lower upper a.1 1.08835 0.88590 1.29080 b.1 0.02964 0.02257 0.03671 Estimated disappearance times: DT50 DT90 DT50back DT50_k1 DT50_k2 DMTA 11.84 51.71 15.57 11.84 29.66"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"hierarchical-model-convergence-plots","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hierarchical model convergence plots","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"Convergence plot NLHM SFO fit constant variance Convergence plot NLHM SFO fit two-component error Convergence plot NLHM FOMC fit constant variance Convergence plot NLHM FOMC fit two-component error Convergence plot NLHM DFOP fit constant variance Convergence plot NLHM DFOP fit two-component error Convergence plot NLHM HS fit constant variance Convergence plot NLHM HS fit two-component error","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"session-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Session info","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"","code":"R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] saemix_3.2 npde_3.3 knitr_1.42 mkin_1.2.6 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 rprojroot_2.0.3 jsonlite_1.8.4 [13] DBI_1.1.3 mclust_6.0.0 gridExtra_2.3 purrr_1.0.1 [17] fansi_1.0.4 scales_1.2.1 codetools_0.2-19 textshaping_0.3.6 [21] jquerylib_0.1.4 cli_3.6.1 rlang_1.1.1 munsell_0.5.0 [25] cachem_1.0.8 yaml_2.3.7 tools_4.3.2 memoise_2.0.1 [29] dplyr_1.1.2 colorspace_2.1-0 ggplot2_3.4.2 vctrs_0.6.2 [33] R6_2.5.1 zoo_1.8-12 lifecycle_1.0.3 stringr_1.5.0 [37] fs_1.6.2 MASS_7.3-60 ragg_1.2.5 pkgconfig_2.0.3 [41] desc_1.4.2 pkgdown_2.0.7 bslib_0.4.2 pillar_1.9.0 [45] gtable_0.3.3 glue_1.6.2 systemfonts_1.0.4 highr_0.10 [49] xfun_0.39 tibble_3.2.1 lmtest_0.9-40 tidyselect_1.2.0 [53] htmltools_0.5.5 nlme_3.1-163 rmarkdown_2.21 compiler_4.3.2"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html","id":"hardware-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hardware info","title":"Testing hierarchical parent degradation kinetics with residue data on dimethenamid and dimethenamid-P","text":"","code":"CPU model: AMD Ryzen 9 7950X 16-Core Processor MemTotal: 64927712 kB"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"introduction","dir":"Articles > Prebuilt","previous_headings":"","what":"Introduction","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"purpose document test demonstrate nonlinear hierarchical models (NLHM) based parent degradation models SFO, FOMC, DFOP HS, parallel formation two metabolites can fitted mkin package. assembled course work package 1.2 Project Number 173340 (Application nonlinear hierarchical models kinetic evaluation chemical degradation data) German Environment Agency carried 2022 2023. mkin package used version 1.2.6, currently development. contains test data, functions used evaluations. saemix package used backend fitting NLHM, also loaded make convergence plot function available. document processed knitr package, also provides kable function used improve display tabular data R markdown documents. parallel processing, parallel package used.","code":"library(mkin) library(knitr) library(saemix) library(parallel) n_cores <- detectCores() # We need to start a new cluster after defining a compiled model that is # saved as a DLL to the user directory, therefore we define a function # This is used again after defining the pathway model start_cluster <- function(n_cores) { if (Sys.info()[\"sysname\"] == \"Windows\") { ret <- makePSOCKcluster(n_cores) } else { ret <- makeForkCluster(n_cores) } return(ret) }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"data","dir":"Articles > Prebuilt","previous_headings":"","what":"Data","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"test data available mkin package object class mkindsg (mkin dataset group) identifier dimethenamid_2018. following preprocessing steps done document. data available enantiomer dimethenamid-P (DMTAP) renamed substance name data racemic mixture dimethenamid (DMTA). reason difference degradation behaviour identified EU risk assessment. Unnecessary columns discarded observation times dataset multiplied corresponding normalisation factor also available dataset, order make possible describe datasets single set parameters independent temperature Finally, datasets observed soil (Elliot 1 Elliot 2) combined, resulting dimethenamid (DMTA) data six soils. following commented R code performs preprocessing. following tables show 6 datasets. Dataset Calke Dataset Borstel Dataset Flaach Dataset BBA 2.2 Dataset BBA 2.3 Dataset Elliot","code":"# Apply a function to each of the seven datasets in the mkindsg object to create a list dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data # Get a dataset ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" # Rename DMTAP to DMTA ds_i <- subset(ds_i, select = c(\"name\", \"time\", \"value\")) # Select data ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] # Normalise time ds_i # Return the dataset }) # Use dataset titles as names for the list elements names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) # Combine data for Elliot soil to obtain a named list with six elements dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) # dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL for (ds_name in names(dmta_ds)) { print( kable(mkin_long_to_wide(dmta_ds[[ds_name]]), caption = paste(\"Dataset\", ds_name), booktabs = TRUE, row.names = FALSE)) cat(\"\\n\\\\clearpage\\n\") }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"separate-evaluations","dir":"Articles > Prebuilt","previous_headings":"","what":"Separate evaluations","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"first step obtain suitable starting parameters NLHM fits, separate fits several variants pathway model used previously (Ranke et al. 2021), varying kinetic model parent compound. SFORB model often provides faster convergence DFOP model, can sometimes fitted DFOP model results errors, included set parent models tested . separate pathway fits SFO FOMC parent constant variance converged (status OK). fits DFOP SFORB parent converged well. fits HS parent converge default settings. two-component error model, set fits convergence problems slightly different, convergence problems appearing different data sets applying DFOP SFORB model additional convergence problems using FOMC model parent.","code":"if (!dir.exists(\"dmta_dlls\")) dir.create(\"dmta_dlls\") m_sfo_path_1 <- mkinmod( DMTA = mkinsub(\"SFO\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_sfo_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) m_fomc_path_1 <- mkinmod( DMTA = mkinsub(\"FOMC\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_fomc_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) m_dfop_path_1 <- mkinmod( DMTA = mkinsub(\"DFOP\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_dfop_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) m_sforb_path_1 <- mkinmod( DMTA = mkinsub(\"SFORB\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_sforb_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) m_hs_path_1 <- mkinmod( DMTA = mkinsub(\"HS\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), name = \"m_hs_path\", dll_dir = \"dmta_dlls\", unload = TRUE, overwrite = TRUE, quiet = TRUE ) cl <- start_cluster(n_cores) deg_mods_1 <- list( sfo_path_1 = m_sfo_path_1, fomc_path_1 = m_fomc_path_1, dfop_path_1 = m_dfop_path_1, sforb_path_1 = m_sforb_path_1, hs_path_1 = m_hs_path_1) sep_1_const <- mmkin( deg_mods_1, dmta_ds, error_model = \"const\", quiet = TRUE) status(sep_1_const) |> kable() sep_1_tc <- update(sep_1_const, error_model = \"tc\") status(sep_1_tc) |> kable()"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"hierarchichal-model-fits","dir":"Articles > Prebuilt","previous_headings":"","what":"Hierarchichal model fits","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"following code fits two sets corresponding hierarchical models data, one assuming constant variance, one assuming two-component error. run time fits around two hours five year old hardware. recent hardware upgrade fits complete less twenty minutes. According status function, fits terminated successfully. goodness--fit models compared, warning obtained, indicating likelihood pathway fit SFORB parent compound constant variance calculated importance sampling (method ‘’). default method AIC BIC comparisons based, variant included model comparison table. Comparing goodness--fit remaining models, HS model model two-component error provides best fit. However, batch experiments performed constant conditions experiments evaluated , reason assume discontinuity, SFORB model preferable mechanistic viewpoint. addition, information criteria AIC BIC similar HS SFORB. Therefore, SFORB model selected refinements.","code":"saem_1 <- mhmkin(list(sep_1_const, sep_1_tc)) status(saem_1) |> kable() anova(saem_1) |> kable(digits = 1)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"parameter-identifiability-based-on-the-fisher-information-matrix","dir":"Articles > Prebuilt","previous_headings":"Hierarchichal model fits","what":"Parameter identifiability based on the Fisher Information Matrix","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"Using illparms function, ill-defined statistical model parameters standard deviations degradation parameters population error model parameters can found. using constant variance, ill-defined variance parameters identified illparms function degradation models. using two-component error model, one ill-defined variance parameter variants except variant using DFOP parent compound. selected combination SFORB pathway model two-component error, random effect rate constant reversibly bound DMTA free DMTA (k_DMTA_bound_free) well-defined. Therefore, fit updated without assuming random effect parameter. expected, ill-defined parameters remain. model comparison shows reduced model preferable. convergence plot refined fit shown . parameters, example f_DMTA_ilr_1 f_DMTA_ilr_2, .e. two parameters determining formation fractions parallel formation three metabolites, movement parameters still visible second phase algorithm. However, amplitude movement range amplitude towards end first phase. Therefore, likely increase iterations improve parameter estimates much, proposed fit acceptable. numeric convergence criterion implemented saemix.","code":"illparms(saem_1) |> kable() saem_sforb_path_1_tc_reduced <- update(saem_1[[\"sforb_path_1\", \"tc\"]], no_random_effect = \"log_k_DMTA_bound_free\") illparms(saem_sforb_path_1_tc_reduced) anova(saem_1[[\"sforb_path_1\", \"tc\"]], saem_sforb_path_1_tc_reduced) |> kable(digits = 1) plot(saem_sforb_path_1_tc_reduced$so, plot.type = \"convergence\")"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"alternative-check-of-parameter-identifiability","dir":"Articles > Prebuilt","previous_headings":"Hierarchichal model fits","what":"Alternative check of parameter identifiability","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"alternative check parameter identifiability (Duchesne et al. 2021), multistart runs performed basis refined fit shown . 32 fits initiated, 17 terminated without error. reason wide variation starting parameters combination parameter variation used SAEM algorithm leads parameter combinations degradation model numerical integration routine cope . variation initial parameters, model fits take two times time original fit. Parameter boxplots multistart runs succeeded However, visual analysis boxplot parameters obtained successful fits confirms results sufficiently independent starting parameters, remaining ill-defined parameters.","code":"saem_sforb_path_1_tc_reduced_multi <- multistart(saem_sforb_path_1_tc_reduced, n = 32, cores = 10) print(saem_sforb_path_1_tc_reduced_multi) <multistart> object with 32 fits: E OK 7 25 OK: Fit terminated successfully E: Error par(mar = c(12.1, 4.1, 2.1, 2.1)) parplot(saem_sforb_path_1_tc_reduced_multi, ylim = c(0.5, 2), las = 2)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"plots-of-selected-fits","dir":"Articles > Prebuilt","previous_headings":"","what":"Plots of selected fits","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"SFORB pathway fits full reduced parameter distribution model shown . SFORB pathway fit two-component error SFORB pathway fit two-component error, reduced parameter model Plots remaining fits listings successful fits shown Appendix.","code":"plot(saem_1[[\"sforb_path_1\", \"tc\"]]) plot(saem_sforb_path_1_tc_reduced) stopCluster(cl)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"conclusions","dir":"Articles > Prebuilt","previous_headings":"","what":"Conclusions","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"Pathway fits SFO, FOMC, DFOP, SFORB HS models parent compound successfully performed.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"acknowledgements","dir":"Articles > Prebuilt","previous_headings":"","what":"Acknowledgements","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"helpful comments Janina Wöltjen German Environment Agency earlier versions document gratefully acknowledged.","code":""},{"path":[]},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"plots-of-hierarchical-fits-not-selected-for-refinement","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Plots of hierarchical fits not selected for refinement","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"SFO pathway fit two-component error FOMC pathway fit two-component error HS pathway fit two-component error","code":"plot(saem_1[[\"sfo_path_1\", \"tc\"]]) plot(saem_1[[\"fomc_path_1\", \"tc\"]]) plot(saem_1[[\"sforb_path_1\", \"tc\"]])"},{"path":[]},{"path":[]},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"session-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Session info","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"","code":"R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] saemix_3.2 npde_3.3 knitr_1.42 mkin_1.2.6 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 rprojroot_2.0.3 jsonlite_1.8.4 [13] processx_3.8.1 pkgbuild_1.4.0 deSolve_1.35 DBI_1.1.3 [17] mclust_6.0.0 ps_1.7.5 gridExtra_2.3 purrr_1.0.1 [21] fansi_1.0.4 scales_1.2.1 codetools_0.2-19 textshaping_0.3.6 [25] jquerylib_0.1.4 cli_3.6.1 crayon_1.5.2 rlang_1.1.1 [29] munsell_0.5.0 cachem_1.0.8 yaml_2.3.7 inline_0.3.19 [33] tools_4.3.2 memoise_2.0.1 dplyr_1.1.2 colorspace_2.1-0 [37] ggplot2_3.4.2 vctrs_0.6.2 R6_2.5.1 zoo_1.8-12 [41] lifecycle_1.0.3 stringr_1.5.0 fs_1.6.2 MASS_7.3-60 [45] ragg_1.2.5 callr_3.7.3 pkgconfig_2.0.3 desc_1.4.2 [49] pkgdown_2.0.7 bslib_0.4.2 pillar_1.9.0 gtable_0.3.3 [53] glue_1.6.2 systemfonts_1.0.4 highr_0.10 xfun_0.39 [57] tibble_3.2.1 lmtest_0.9-40 tidyselect_1.2.0 htmltools_0.5.5 [61] nlme_3.1-163 rmarkdown_2.21 compiler_4.3.2 prettyunits_1.1.1"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html","id":"hardware-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hardware info","title":"Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P","text":"","code":"CPU model: AMD Ryzen 9 7950X 16-Core Processor MemTotal: 64927712 kB"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"introduction","dir":"Articles > Prebuilt","previous_headings":"","what":"Introduction","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"purpose document test demonstrate nonlinear hierarchical models (NLHM) based parent degradation models SFO, FOMC, DFOP HS can fitted mkin package, also considering influence covariates like soil pH different degradation parameters. case studies, SFORB parameterisation biexponential decline shown advantages DFOP parameterisation, SFORB included list tested models well. mkin package used version 1.2.6, contains functions used evaluations. saemix package used backend fitting NLHM, also loaded make convergence plot function available. document processed knitr package, also provides kable function used improve display tabular data R markdown documents. parallel processing, parallel package used.","code":"library(mkin) library(knitr) library(saemix) library(parallel) n_cores <- detectCores() if (Sys.info()[\"sysname\"] == \"Windows\") { cl <- makePSOCKcluster(n_cores) } else { cl <- makeForkCluster(n_cores) }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"test-data","dir":"Articles > Prebuilt","previous_headings":"Introduction","what":"Test data","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"following tables show covariate data 18 datasets read spreadsheet file. Covariate data Dataset Richmond Dataset Richmond 2 Dataset ERTC Dataset Toulouse Dataset Picket Piece Dataset 721 Dataset 722 Dataset 723 Dataset 724 Dataset 725 Dataset 727 Dataset 728 Dataset 729 Dataset 730 Dataset 731 Dataset 732 Dataset 741 Dataset 742","code":"data_file <- system.file( \"testdata\", \"mesotrione_soil_efsa_2016.xlsx\", package = \"mkin\") meso_ds <- read_spreadsheet(data_file, parent_only = TRUE) pH <- attr(meso_ds, \"covariates\") kable(pH, caption = \"Covariate data\") for (ds_name in names(meso_ds)) { print( kable(mkin_long_to_wide(meso_ds[[ds_name]]), caption = paste(\"Dataset\", ds_name), booktabs = TRUE, row.names = FALSE)) }"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"separate-evaluations","dir":"Articles > Prebuilt","previous_headings":"","what":"Separate evaluations","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"order obtain suitable starting parameters NLHM fits, separate fits five models data soil generated using mmkin function mkin package. first step, constant variance assumed. Convergence checked status function. tables , OK indicates convergence C indicates failure converge. separate fits constant variance converged, exception two FOMC fits, one SFORB fit one HS fit. two-component error model, set fits converge larger, convergence problems appearing number non-SFO fits.","code":"deg_mods <- c(\"SFO\", \"FOMC\", \"DFOP\", \"SFORB\", \"HS\") f_sep_const <- mmkin( deg_mods, meso_ds, error_model = \"const\", cluster = cl, quiet = TRUE) status(f_sep_const[, 1:5]) |> kable() status(f_sep_const[, 6:18]) |> kable() f_sep_tc <- update(f_sep_const, error_model = \"tc\") status(f_sep_tc[, 1:5]) |> kable() status(f_sep_tc[, 6:18]) |> kable()"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"hierarchical-model-fits-without-covariate-effect","dir":"Articles > Prebuilt","previous_headings":"","what":"Hierarchical model fits without covariate effect","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"following code fits hierarchical kinetic models ten combinations five different degradation models two different error models parallel. fits terminate without errors (status OK). model comparisons show fits constant variance consistently preferable corresponding fits two-component error data. confirmed fact parameter b.1 (relative standard deviation fits obtained saemix package), ill-defined fits. obtaining fits well-defined random effects, update set fits, excluding random effects ill-defined according illparms function. updated fits terminate without errors. ill-defined errors remain fits constant variance.","code":"f_saem_1 <- mhmkin(list(f_sep_const, f_sep_tc), cluster = cl) status(f_saem_1) |> kable() anova(f_saem_1) |> kable(digits = 1) illparms(f_saem_1) |> kable() f_saem_2 <- update(f_saem_1, no_random_effect = illparms(f_saem_1)) status(f_saem_2) |> kable() illparms(f_saem_2) |> kable()"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"hierarchical-model-fits-with-covariate-effect","dir":"Articles > Prebuilt","previous_headings":"","what":"Hierarchical model fits with covariate effect","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"following sections, hierarchical fits including model influence pH selected degradation parameters shown parent models. Constant variance selected error model based fits without covariate effects. Random effects ill-defined fits without pH influence excluded. potential influence soil pH included parameters well-defined random effect, experience shown parameters significant pH effect found.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"sfo","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"SFO","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"parameter showing pH influence table beta_pH(log_k_meso). confidence interval include zero, indicating influence soil pH log degradation rate constant significantly greater zero. comparison SFO fit without covariate effect confirms considering soil pH improves model, comparison AIC BIC likelihood ratio test. Endpoints model covariates default calculated median covariate values. quantile can adapted, specific covariate value can given shown .","code":"sfo_pH <- saem(f_sep_const[\"SFO\", ], no_random_effect = \"meso_0\", covariates = pH, covariate_models = list(log_k_meso ~ pH)) summary(sfo_pH)$confint_trans |> kable(digits = 2) anova(f_saem_2[[\"SFO\", \"const\"]], sfo_pH, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) f_saem_2[[\"SFO\", \"const\"]] 4 797.56 801.12 -394.78 sfo_pH 5 783.09 787.54 -386.54 16.473 1 4.934e-05 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 plot(sfo_pH) endpoints(sfo_pH) $covariates pH 50% 5.75 $distimes DT50 DT90 meso 18.52069 61.52441 endpoints(sfo_pH, covariate_quantile = 0.9) $covariates pH 90% 7.13 $distimes DT50 DT90 meso 8.237019 27.36278 endpoints(sfo_pH, covariates = c(pH = 7.0)) $covariates pH User 7 $distimes DT50 DT90 meso 8.89035 29.5331"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"fomc","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"FOMC","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"case SFO, confidence interval slope parameter (beta_pH(log_alpha)) quantifying influence soil pH include zero, model comparison clearly indicates model covariate influence preferable. However, random effect alpha well-defined inclusion covariate effect (confidence interval SD.log_alpha includes zero). Therefore, model updated without random effect, ill-defined parameters remain. Model comparison indicates including pH dependence significantly improves fit, reduced model covariate influence results preferable FOMC fit.","code":"fomc_pH <- saem(f_sep_const[\"FOMC\", ], no_random_effect = \"meso_0\", covariates = pH, covariate_models = list(log_alpha ~ pH)) summary(fomc_pH)$confint_trans |> kable(digits = 2) illparms(fomc_pH) [1] \"sd(log_alpha)\" fomc_pH_2 <- update(fomc_pH, no_random_effect = c(\"meso_0\", \"log_alpha\")) illparms(fomc_pH_2) anova(f_saem_2[[\"FOMC\", \"const\"]], fomc_pH, fomc_pH_2, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) f_saem_2[[\"FOMC\", \"const\"]] 5 783.25 787.71 -386.63 fomc_pH_2 6 767.49 772.83 -377.75 17.762 1 2.503e-05 *** fomc_pH 7 770.07 776.30 -378.04 0.000 1 1 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(fomc_pH_2)$confint_trans |> kable(digits = 2) plot(fomc_pH_2) endpoints(fomc_pH_2) $covariates pH 50% 5.75 $distimes DT50 DT90 DT50back meso 17.30248 82.91343 24.95943 endpoints(fomc_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $distimes DT50 DT90 DT50back meso 6.986239 27.02927 8.136621"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"dfop","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"DFOP","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"DFOP fits without covariate effects, random effects two degradation parameters (k2 g) identifiable. fit pH dependent degradation parameters obtained excluding random effects refined DFOP fit without covariate influence, including covariate models two identifiable parameters k2 g. corresponding parameters influence soil pH beta_pH(log_k2) influence soil pH k2, beta_pH(g_qlogis) influence g. Confidence intervals neither include zero, indicating significant difference zero. However, random effect g now ill-defined. fit updated without ill-defined random effect. Now, slope parameter pH effect g ill-defined. Therefore, another attempt made without corresponding covariate model. random effect g ill-defined, fit repeated without . ill-defined parameters remain, model comparison suggests previous model dfop_pH_2 two pH dependent parameters preferable, based information criteria well based likelihood ratio test. focussing parameter identifiability using test confidence interval includes zero, dfop_pH_4 still preferred model. However, kept mind parameter confidence intervals constructed using simple linearisation likelihood. confidence interval random effect g marginally includes zero, suggested acceptable, dfop_pH_2 can considered preferable model.","code":"summary(f_saem_2[[\"DFOP\", \"const\"]])$confint_trans |> kable(digits = 2) dfop_pH <- saem(f_sep_const[\"DFOP\", ], no_random_effect = c(\"meso_0\", \"log_k1\"), covariates = pH, covariate_models = list(log_k2 ~ pH, g_qlogis ~ pH)) summary(dfop_pH)$confint_trans |> kable(digits = 2) illparms(dfop_pH) [1] \"sd(g_qlogis)\" dfop_pH_2 <- update(dfop_pH, no_random_effect = c(\"meso_0\", \"log_k1\", \"g_qlogis\")) illparms(dfop_pH_2) [1] \"beta_pH(g_qlogis)\" dfop_pH_3 <- saem(f_sep_const[\"DFOP\", ], no_random_effect = c(\"meso_0\", \"log_k1\"), covariates = pH, covariate_models = list(log_k2 ~ pH)) illparms(dfop_pH_3) [1] \"sd(g_qlogis)\" dfop_pH_4 <- update(dfop_pH_3, no_random_effect = c(\"meso_0\", \"log_k1\", \"g_qlogis\")) illparms(dfop_pH_4) anova(f_saem_2[[\"DFOP\", \"const\"]], dfop_pH, dfop_pH_2, dfop_pH_3, dfop_pH_4) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik f_saem_2[[\"DFOP\", \"const\"]] 7 782.94 789.18 -384.47 dfop_pH_4 7 767.35 773.58 -376.68 dfop_pH_2 8 765.14 772.26 -374.57 dfop_pH_3 8 769.00 776.12 -376.50 dfop_pH 9 769.10 777.11 -375.55 anova(dfop_pH_2, dfop_pH_4, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) dfop_pH_4 7 767.35 773.58 -376.68 dfop_pH_2 8 765.14 772.26 -374.57 4.2153 1 0.04006 * --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 plot(dfop_pH_2) endpoints(dfop_pH_2) $covariates pH 50% 5.75 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 18.36876 73.51841 22.13125 4.191901 23.98672 endpoints(dfop_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 8.346428 28.34437 8.532507 4.191901 8.753618"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"sforb","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"SFORB","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"confidence interval beta_pH(log_k_meso_bound_free) includes zero, indicating influence soil pH k_meso_bound_free reliably quantified. Also, confidence interval random effect parameter (SD.log_k_meso_bound_free) includes zero. Using illparms function, ill-defined parameters can found conveniently. remove ill-defined parameters, second variant SFORB model pH influence fitted. ill-defined parameters remain. model comparison SFORB fits includes refined model without covariate effect, versions SFORB fit covariate effect. first model including pH influence preferable based information criteria likelihood ratio test. However, fully identifiable, second model selected.","code":"sforb_pH <- saem(f_sep_const[\"SFORB\", ], no_random_effect = c(\"meso_free_0\", \"log_k_meso_free_bound\"), covariates = pH, covariate_models = list(log_k_meso_free ~ pH, log_k_meso_bound_free ~ pH)) summary(sforb_pH)$confint_trans |> kable(digits = 2) illparms(sforb_pH) [1] \"sd(log_k_meso_bound_free)\" \"beta_pH(log_k_meso_bound_free)\" sforb_pH_2 <- update(sforb_pH, no_random_effect = c(\"meso_free_0\", \"log_k_meso_free_bound\", \"log_k_meso_bound_free\"), covariate_models = list(log_k_meso_free ~ pH)) illparms(sforb_pH_2) anova(f_saem_2[[\"SFORB\", \"const\"]], sforb_pH, sforb_pH_2, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) f_saem_2[[\"SFORB\", \"const\"]] 7 783.40 789.63 -384.70 sforb_pH_2 7 770.94 777.17 -378.47 12.4616 0 sforb_pH 9 768.81 776.83 -375.41 6.1258 2 0.04675 * --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(sforb_pH_2)$confint_trans |> kable(digits = 2) plot(sforb_pH_2) endpoints(sforb_pH_2) $covariates pH 50% 5.75 $ff meso_free 1 $SFORB meso_b1 meso_b2 meso_g 0.09735824 0.02631699 0.31602120 $distimes DT50 DT90 DT50back DT50_meso_b1 DT50_meso_b2 meso 16.86549 73.15824 22.02282 7.119554 26.33839 endpoints(sforb_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $ff meso_free 1 $SFORB meso_b1 meso_b2 meso_g 0.13315233 0.03795988 0.61186191 $distimes DT50 DT90 DT50back DT50_meso_b1 DT50_meso_b2 meso 7.932495 36.93311 11.11797 5.205671 18.26"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"hs","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"HS","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"According output illparms function, random effect break time tb reliably quantified, neither can influence soil pH tb. fit repeated without corresponding covariate model, ill-defined parameters remain. Model comparison confirms model preferable fit without covariate influence, also first version covariate influence.","code":"hs_pH <- saem(f_sep_const[\"HS\", ], no_random_effect = c(\"meso_0\"), covariates = pH, covariate_models = list(log_k1 ~ pH, log_k2 ~ pH, log_tb ~ pH)) summary(hs_pH)$confint_trans |> kable(digits = 2) illparms(hs_pH) [1] \"sd(log_tb)\" \"beta_pH(log_tb)\" hs_pH_2 <- update(hs_pH, covariate_models = list(log_k1 ~ pH, log_k2 ~ pH)) illparms(hs_pH_2) anova(f_saem_2[[\"HS\", \"const\"]], hs_pH, hs_pH_2, test = TRUE) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik Chisq Df Pr(>Chisq) f_saem_2[[\"HS\", \"const\"]] 8 780.08 787.20 -382.04 hs_pH_2 10 766.47 775.37 -373.23 17.606 2 0.0001503 *** hs_pH 11 769.80 779.59 -373.90 0.000 1 1.0000000 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 summary(hs_pH_2)$confint_trans |> kable(digits = 2) plot(hs_pH_2) endpoints(hs_pH_2) $covariates pH 50% 5.75 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 14.68725 82.45287 24.82079 14.68725 29.29299 endpoints(hs_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 8.298536 38.85371 11.69613 8.298536 15.71561"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"comparison-across-parent-models","dir":"Articles > Prebuilt","previous_headings":"Hierarchical model fits with covariate effect","what":"Comparison across parent models","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"model reduction models pH influence, compared . DFOP model pH influence k2 g random effect k2 finally selected best fit. endpoints resulting model listed . Please refer Appendix detailed listing.","code":"anova(sfo_pH, fomc_pH_2, dfop_pH_2, dfop_pH_4, sforb_pH_2, hs_pH_2) Data: 116 observations of 1 variable(s) grouped in 18 datasets npar AIC BIC Lik sfo_pH 5 783.09 787.54 -386.54 fomc_pH_2 6 767.49 772.83 -377.75 dfop_pH_4 7 767.35 773.58 -376.68 sforb_pH_2 7 770.94 777.17 -378.47 dfop_pH_2 8 765.14 772.26 -374.57 hs_pH_2 10 766.47 775.37 -373.23 endpoints(dfop_pH_2) $covariates pH 50% 5.75 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 18.36876 73.51841 22.13125 4.191901 23.98672 endpoints(dfop_pH_2, covariates = c(pH = 7)) $covariates pH User 7 $distimes DT50 DT90 DT50back DT50_k1 DT50_k2 meso 8.346428 28.34437 8.532507 4.191901 8.753618"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"conclusions","dir":"Articles > Prebuilt","previous_headings":"","what":"Conclusions","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"evaluations demonstrate covariate effects can included types parent degradation models. models can refined make fully identifiable.","code":""},{"path":[]},{"path":[]},{"path":[]},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"session-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Session info","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"","code":"R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] parallel stats graphics grDevices utils datasets methods [8] base other attached packages: [1] saemix_3.2 npde_3.3 knitr_1.42 mkin_1.2.6 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 rprojroot_2.0.3 jsonlite_1.8.4 [13] DBI_1.1.3 mclust_6.0.0 gridExtra_2.3 purrr_1.0.1 [17] fansi_1.0.4 scales_1.2.1 textshaping_0.3.6 jquerylib_0.1.4 [21] cli_3.6.1 rlang_1.1.1 munsell_0.5.0 cachem_1.0.8 [25] yaml_2.3.7 tools_4.3.2 memoise_2.0.1 dplyr_1.1.2 [29] colorspace_2.1-0 ggplot2_3.4.2 vctrs_0.6.2 R6_2.5.1 [33] zoo_1.8-12 lifecycle_1.0.3 stringr_1.5.0 fs_1.6.2 [37] MASS_7.3-60 ragg_1.2.5 pkgconfig_2.0.3 desc_1.4.2 [41] pkgdown_2.0.7 bslib_0.4.2 pillar_1.9.0 gtable_0.3.3 [45] glue_1.6.2 systemfonts_1.0.4 xfun_0.39 tibble_3.2.1 [49] lmtest_0.9-40 tidyselect_1.2.0 htmltools_0.5.5 nlme_3.1-163 [53] rmarkdown_2.21 compiler_4.3.2"},{"path":"https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html","id":"hardware-info","dir":"Articles > Prebuilt","previous_headings":"Appendix","what":"Hardware info","title":"Testing covariate modelling in hierarchical parent degradation kinetics with residue data on mesotrione","text":"","code":"CPU model: AMD Ryzen 9 7950X 16-Core Processor MemTotal: 64928100 kB"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html","id":"the-data","dir":"Articles > Web_only","previous_headings":"","what":"The data","title":"Example evaluation of FOCUS dataset Z","text":"following code defines example dataset Appendix 7 FOCUS kinetics report (FOCUS Work Group Degradation Kinetics 2014, 354).","code":"library(mkin, quietly = TRUE) LOD = 0.5 FOCUS_2006_Z = data.frame( t = c(0, 0.04, 0.125, 0.29, 0.54, 1, 2, 3, 4, 7, 10, 14, 21, 42, 61, 96, 124), Z0 = c(100, 81.7, 70.4, 51.1, 41.2, 6.6, 4.6, 3.9, 4.6, 4.3, 6.8, 2.9, 3.5, 5.3, 4.4, 1.2, 0.7), Z1 = c(0, 18.3, 29.6, 46.3, 55.1, 65.7, 39.1, 36, 15.3, 5.6, 1.1, 1.6, 0.6, 0.5 * LOD, NA, NA, NA), Z2 = c(0, NA, 0.5 * LOD, 2.6, 3.8, 15.3, 37.2, 31.7, 35.6, 14.5, 0.8, 2.1, 1.9, 0.5 * LOD, NA, NA, NA), Z3 = c(0, NA, NA, NA, NA, 0.5 * LOD, 9.2, 13.1, 22.3, 28.4, 32.5, 25.2, 17.2, 4.8, 4.5, 2.8, 4.4)) FOCUS_2006_Z_mkin <- mkin_wide_to_long(FOCUS_2006_Z)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html","id":"parent-and-one-metabolite","dir":"Articles > Web_only","previous_headings":"","what":"Parent and one metabolite","title":"Example evaluation of FOCUS dataset Z","text":"next step set models used kinetic analysis. simultaneous fit parent first metabolite usually straightforward, Step 1 (SFO parent ) skipped . start model 2a, formation decline metabolite Z1 pathway parent directly sink included (default mkin). obvious parameter summary (component summary), kinetic rate constant parent compound Z sink small t-test parameter suggests significantly different zero. suggests, agreement analysis FOCUS kinetics report, simplify model removing pathway sink. similar result can obtained formation fractions used model formulation: , ilr transformed formation fraction fitted model takes large value, backtransformed formation fraction parent Z Z1 practically unity. , covariance matrix used calculation confidence intervals returned model overparameterised. simplified model obtained removing pathway sink. following, use parameterisation formation fractions order able compare results FOCUS guidance, makes easier use parameters obtained previous fit adding metabolite. one transformation product Z0 pathway sink, formation fraction internally fixed unity.","code":"Z.2a <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\"), Z1 = mkinsub(\"SFO\")) ## Temporary DLL for differentials generated and loaded m.Z.2a <- mkinfit(Z.2a, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.2a, FOCUS_2006_Z_mkin, quiet = TRUE): Observations with ## value of zero were removed from the data plot_sep(m.Z.2a) summary(m.Z.2a, data = FALSE)$bpar ## Estimate se_notrans t value Pr(>t) Lower Upper ## Z0_0 97.01488 3.301084 29.3888 3.2971e-21 91.66556 102.3642 ## k_Z0 2.23601 0.207078 10.7979 3.3309e-11 1.95303 2.5600 ## k_Z1 0.48212 0.063265 7.6207 2.8154e-08 0.40341 0.5762 ## f_Z0_to_Z1 1.00000 0.094764 10.5525 5.3560e-11 0.00000 1.0000 ## sigma 4.80411 0.635638 7.5579 3.2592e-08 3.52677 6.0815 Z.2a.ff <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\"), Z1 = mkinsub(\"SFO\"), use_of_ff = \"max\") ## Temporary DLL for differentials generated and loaded m.Z.2a.ff <- mkinfit(Z.2a.ff, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.2a.ff, FOCUS_2006_Z_mkin, quiet = TRUE): Observations with ## value of zero were removed from the data plot_sep(m.Z.2a.ff) summary(m.Z.2a.ff, data = FALSE)$bpar ## Estimate se_notrans t value Pr(>t) Lower Upper ## Z0_0 97.01488 3.301084 29.3888 3.2971e-21 91.66556 102.3642 ## k_Z0 2.23601 0.207078 10.7979 3.3309e-11 1.95303 2.5600 ## k_Z1 0.48212 0.063265 7.6207 2.8154e-08 0.40341 0.5762 ## f_Z0_to_Z1 1.00000 0.094764 10.5525 5.3560e-11 0.00000 1.0000 ## sigma 4.80411 0.635638 7.5579 3.2592e-08 3.52677 6.0815 Z.3 <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\"), use_of_ff = \"max\") ## Temporary DLL for differentials generated and loaded m.Z.3 <- mkinfit(Z.3, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.3, FOCUS_2006_Z_mkin, quiet = TRUE): Observations with ## value of zero were removed from the data plot_sep(m.Z.3) summary(m.Z.3, data = FALSE)$bpar ## Estimate se_notrans t value Pr(>t) Lower Upper ## Z0_0 97.01488 2.597342 37.352 2.0106e-24 91.67597 102.3538 ## k_Z0 2.23601 0.146904 15.221 9.1477e-15 1.95354 2.5593 ## k_Z1 0.48212 0.041727 11.554 4.8268e-12 0.40355 0.5760 ## sigma 4.80411 0.620208 7.746 1.6110e-08 3.52925 6.0790"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html","id":"metabolites-z2-and-z3","dir":"Articles > Web_only","previous_headings":"","what":"Metabolites Z2 and Z3","title":"Example evaluation of FOCUS dataset Z","text":"suggested FOCUS report, pathway sink removed metabolite Z1 well next step. step appears questionable basis results, followed purpose comparison. Also, FOCUS report, assumed additional empirical evidence Z1 quickly exclusively hydrolyses Z2. Finally, metabolite Z3 added model. use optimised differential equation parameter values previous fit order accelerate optimization. fit corresponds final result chosen Appendix 7 FOCUS report. Confidence intervals returned mkin based internally transformed parameters, however.","code":"Z.5 <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\"), use_of_ff = \"max\") ## Temporary DLL for differentials generated and loaded m.Z.5 <- mkinfit(Z.5, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.5, FOCUS_2006_Z_mkin, quiet = TRUE): Observations with ## value of zero were removed from the data plot_sep(m.Z.5) Z.FOCUS <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\", \"Z3\"), Z3 = mkinsub(\"SFO\"), use_of_ff = \"max\") ## Temporary DLL for differentials generated and loaded m.Z.FOCUS <- mkinfit(Z.FOCUS, FOCUS_2006_Z_mkin, parms.ini = m.Z.5$bparms.ode, quiet = TRUE) ## Warning in mkinfit(Z.FOCUS, FOCUS_2006_Z_mkin, parms.ini = m.Z.5$bparms.ode, : ## Observations with value of zero were removed from the data ## Warning in mkinfit(Z.FOCUS, FOCUS_2006_Z_mkin, parms.ini = m.Z.5$bparms.ode, : Optimisation did not converge: ## false convergence (8) plot_sep(m.Z.FOCUS) summary(m.Z.FOCUS, data = FALSE)$bpar ## Estimate se_notrans t value Pr(>t) Lower Upper ## Z0_0 96.842440 1.994291 48.5598 4.0226e-42 92.830421 100.854459 ## k_Z0 2.215425 0.118457 18.7023 1.0404e-23 1.989490 2.467019 ## k_Z1 0.478307 0.028257 16.9272 6.2332e-22 0.424709 0.538669 ## k_Z2 0.451642 0.042139 10.7178 1.6304e-14 0.374348 0.544894 ## k_Z3 0.058692 0.015245 3.8499 1.7803e-04 0.034804 0.098975 ## f_Z2_to_Z3 0.471483 0.058348 8.0806 9.6585e-11 0.357720 0.588287 ## sigma 3.984431 0.383402 10.3923 4.5576e-14 3.213126 4.755737 endpoints(m.Z.FOCUS) ## $ff ## Z2_Z3 Z2_sink ## 0.47148 0.52852 ## ## $distimes ## DT50 DT90 ## Z0 0.31287 1.0393 ## Z1 1.44917 4.8140 ## Z2 1.53473 5.0983 ## Z3 11.80991 39.2317"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html","id":"using-the-sforb-model","dir":"Articles > Web_only","previous_headings":"","what":"Using the SFORB model","title":"Example evaluation of FOCUS dataset Z","text":"FOCUS report states, certain tailing time course metabolite Z3. Also, time course parent compound fitted well using SFO model, residues certain low level remain. Therefore, additional model offered , using single first-order reversible binding (SFORB) model metabolite Z3. expected, \\(\\chi^2\\) error level lower metabolite Z3 using model graphical fit Z3 improved. However, covariance matrix returned. Therefore, stepwise model building performed starting stage parent two metabolites, starting assumption model fit parent compound can improved using SFORB model. results much better representation behaviour parent compound Z0. Finally, Z3 added well. models appear overparameterised (covariance matrix returned) sink Z1 left models. error level fit, especially metabolite Z3, can improved SFORB model chosen metabolite, model capable representing tailing metabolite decline phase. summary view backtransformed parameters shows get confidence intervals due overparameterisation. optimized excessively small, seems reasonable fix zero. expected, residual plots Z0 Z3 random case SFO model shown . conclusion, model proposed best-fit model dataset Appendix 7 FOCUS report. graphical representation confidence intervals can finally obtained. endpoints obtained model clear degradation rate Z3 towards end experiment low DT50_Z3_b2 (second Eigenvalue system two differential equations representing SFORB system Z3, corresponding slower rate constant DFOP model) reported infinity. However, appears feature data.","code":"Z.mkin.1 <- mkinmod(Z0 = mkinsub(\"SFO\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\", \"Z3\"), Z3 = mkinsub(\"SFORB\")) ## Temporary DLL for differentials generated and loaded m.Z.mkin.1 <- mkinfit(Z.mkin.1, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.mkin.1, FOCUS_2006_Z_mkin, quiet = TRUE): Observations ## with value of zero were removed from the data plot_sep(m.Z.mkin.1) summary(m.Z.mkin.1, data = FALSE)$cov.unscaled ## NULL Z.mkin.3 <- mkinmod(Z0 = mkinsub(\"SFORB\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\")) ## Temporary DLL for differentials generated and loaded m.Z.mkin.3 <- mkinfit(Z.mkin.3, FOCUS_2006_Z_mkin, quiet = TRUE) ## Warning in mkinfit(Z.mkin.3, FOCUS_2006_Z_mkin, quiet = TRUE): Observations ## with value of zero were removed from the data plot_sep(m.Z.mkin.3) Z.mkin.4 <- mkinmod(Z0 = mkinsub(\"SFORB\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\", \"Z3\"), Z3 = mkinsub(\"SFO\")) ## Temporary DLL for differentials generated and loaded m.Z.mkin.4 <- mkinfit(Z.mkin.4, FOCUS_2006_Z_mkin, parms.ini = m.Z.mkin.3$bparms.ode, quiet = TRUE) ## Warning in mkinfit(Z.mkin.4, FOCUS_2006_Z_mkin, parms.ini = ## m.Z.mkin.3$bparms.ode, : Observations with value of zero were removed from the ## data plot_sep(m.Z.mkin.4) Z.mkin.5 <- mkinmod(Z0 = mkinsub(\"SFORB\", \"Z1\", sink = FALSE), Z1 = mkinsub(\"SFO\", \"Z2\", sink = FALSE), Z2 = mkinsub(\"SFO\", \"Z3\"), Z3 = mkinsub(\"SFORB\")) ## Temporary DLL for differentials generated and loaded m.Z.mkin.5 <- mkinfit(Z.mkin.5, FOCUS_2006_Z_mkin, parms.ini = m.Z.mkin.4$bparms.ode[1:4], quiet = TRUE) ## Warning in mkinfit(Z.mkin.5, FOCUS_2006_Z_mkin, parms.ini = ## m.Z.mkin.4$bparms.ode[1:4], : Observations with value of zero were removed from ## the data plot_sep(m.Z.mkin.5) m.Z.mkin.5a <- mkinfit(Z.mkin.5, FOCUS_2006_Z_mkin, parms.ini = c(m.Z.mkin.5$bparms.ode[1:7], k_Z3_bound_free = 0), fixed_parms = \"k_Z3_bound_free\", quiet = TRUE) ## Warning in mkinfit(Z.mkin.5, FOCUS_2006_Z_mkin, parms.ini = ## c(m.Z.mkin.5$bparms.ode[1:7], : Observations with value of zero were removed ## from the data plot_sep(m.Z.mkin.5a) mkinparplot(m.Z.mkin.5a) endpoints(m.Z.mkin.5a) ## $ff ## Z0_free Z2_Z3 Z2_sink Z3_free ## 1.00000 0.53656 0.46344 1.00000 ## ## $SFORB ## Z0_b1 Z0_b2 Z0_g Z3_b1 Z3_b2 Z3_g ## 2.4471342 0.0075124 0.9519866 0.0800071 0.0000000 0.9347816 ## ## $distimes ## DT50 DT90 DT50back DT50_Z0_b1 DT50_Z0_b2 DT50_Z3_b1 DT50_Z3_b2 ## Z0 0.3043 1.1848 0.35666 0.28325 92.267 NA NA ## Z1 1.5148 5.0320 NA NA NA NA NA ## Z2 1.6414 5.4526 NA NA NA NA NA ## Z3 NA NA NA NA NA 8.6636 Inf"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"introduction","dir":"Articles > Web_only","previous_headings":"","what":"Introduction","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"document, example evaluations provided Attachment 1 SOP US EPA using NAFTA guidance (US EPA 2015) repeated using mkin. original evaluations reported attachment performed using PestDF version 0.8.4. Note PestDF 0.8.13 version distributed US EPA website today (2019-02-26). datasets now distributed mkin package.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"examples-where-dfop-did-not-converge-with-pestdf-0-8-4","dir":"Articles > Web_only","previous_headings":"","what":"Examples where DFOP did not converge with PestDF 0.8.4","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"attachment 1, reported DFOP model converge datasets PestDF 0.8.4 used. four datasets, DFOP model can fitted mkin (see ). negative half-life given PestDF 0.8.4 fits appears result bug. results two models (SFO IORE) .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-5-upper-panel","dir":"Articles > Web_only","previous_headings":"Examples where DFOP did not converge with PestDF 0.8.4","what":"Example on page 5, upper panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p5a <- nafta(NAFTA_SOP_Attachment[[\"p5a\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p5a) print(p5a) ## Sums of squares: ## SFO IORE DFOP ## 465.21753 56.27506 32.06401 ## ## Critical sum of squares for checking the SFO model: ## [1] 64.4304 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 95.8401 4.67e-21 92.245 99.4357 ## k_parent 0.0102 3.92e-12 0.009 0.0117 ## sigma 4.8230 3.81e-06 3.214 6.4318 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 1.01e+02 NA 9.91e+01 1.02e+02 ## k__iore_parent 1.54e-05 NA 4.08e-06 5.84e-05 ## N_parent 2.57e+00 NA 2.25e+00 2.89e+00 ## sigma 1.68e+00 NA 1.12e+00 2.24e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.99e+01 1.41e-26 98.8116 101.0810 ## k1 2.67e-02 5.05e-06 0.0243 0.0295 ## k2 3.41e-12 5.00e-01 0.0000 Inf ## g 6.47e-01 3.67e-06 0.6248 0.6677 ## sigma 1.27e+00 8.91e-06 0.8395 1.6929 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 67.7 2.25e+02 6.77e+01 ## IORE 58.2 1.07e+03 3.22e+02 ## DFOP 55.5 3.70e+11 2.03e+11 ## ## Representative half-life: ## [1] 321.51"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-5-lower-panel","dir":"Articles > Web_only","previous_headings":"Examples where DFOP did not converge with PestDF 0.8.4","what":"Example on page 5, lower panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p5b <- nafta(NAFTA_SOP_Attachment[[\"p5b\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p5b) print(p5b) ## Sums of squares: ## SFO IORE DFOP ## 94.81123 10.10936 7.55871 ## ## Critical sum of squares for checking the SFO model: ## [1] 11.77879 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 96.497 2.32e-24 94.85271 98.14155 ## k_parent 0.008 3.42e-14 0.00737 0.00869 ## sigma 2.295 1.22e-05 1.47976 3.11036 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 9.85e+01 1.17e-28 9.79e+01 9.92e+01 ## k__iore_parent 1.53e-04 6.50e-03 7.21e-05 3.26e-04 ## N_parent 1.94e+00 5.88e-13 1.76e+00 2.12e+00 ## sigma 7.49e-01 1.63e-05 4.82e-01 1.02e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.84e+01 1.24e-27 97.8078 98.9187 ## k1 1.55e-02 4.10e-04 0.0143 0.0167 ## k2 9.07e-12 5.00e-01 0.0000 Inf ## g 6.89e-01 2.92e-03 0.6626 0.7142 ## sigma 6.48e-01 2.38e-05 0.4147 0.8813 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 86.6 2.88e+02 8.66e+01 ## IORE 85.5 7.17e+02 2.16e+02 ## DFOP 83.6 1.25e+11 7.64e+10 ## ## Representative half-life: ## [1] 215.87"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-6","dir":"Articles > Web_only","previous_headings":"Examples where DFOP did not converge with PestDF 0.8.4","what":"Example on page 6","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p6 <- nafta(NAFTA_SOP_Attachment[[\"p6\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p6) print(p6) ## Sums of squares: ## SFO IORE DFOP ## 188.45361 51.00699 42.46931 ## ## Critical sum of squares for checking the SFO model: ## [1] 58.39888 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 94.7759 7.29e-24 92.3478 97.2039 ## k_parent 0.0179 8.02e-16 0.0166 0.0194 ## sigma 3.0696 3.81e-06 2.0456 4.0936 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 97.12446 2.63e-26 95.62461 98.62431 ## k__iore_parent 0.00252 1.95e-03 0.00134 0.00472 ## N_parent 1.49587 4.07e-13 1.33896 1.65279 ## sigma 1.59698 5.05e-06 1.06169 2.13227 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.66e+01 1.57e-25 95.3476 97.8979 ## k1 2.55e-02 7.33e-06 0.0233 0.0278 ## k2 3.84e-11 5.00e-01 0.0000 Inf ## g 8.61e-01 7.55e-06 0.8314 0.8867 ## sigma 1.46e+00 6.93e-06 0.9661 1.9483 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 38.6 1.28e+02 3.86e+01 ## IORE 34.0 1.77e+02 5.32e+01 ## DFOP 34.1 8.50e+09 1.80e+10 ## ## Representative half-life: ## [1] 53.17"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-7","dir":"Articles > Web_only","previous_headings":"Examples where DFOP did not converge with PestDF 0.8.4","what":"Example on page 7","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p7 <- nafta(NAFTA_SOP_Attachment[[\"p7\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p7) print(p7) ## Sums of squares: ## SFO IORE DFOP ## 3661.661 3195.030 3174.145 ## ## Critical sum of squares for checking the SFO model: ## [1] 3334.194 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 96.41796 4.80e-53 93.32245 99.51347 ## k_parent 0.00735 7.64e-21 0.00641 0.00843 ## sigma 7.94557 1.83e-15 6.46713 9.42401 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 9.92e+01 NA 9.55e+01 1.03e+02 ## k__iore_parent 1.60e-05 NA 1.45e-07 1.77e-03 ## N_parent 2.45e+00 NA 1.35e+00 3.54e+00 ## sigma 7.42e+00 NA 6.04e+00 8.80e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.89e+01 9.44e-49 95.4640 102.2573 ## k1 1.81e-02 1.75e-01 0.0116 0.0281 ## k2 3.62e-10 5.00e-01 0.0000 Inf ## g 6.06e-01 2.19e-01 0.4826 0.7178 ## sigma 7.40e+00 2.97e-15 6.0201 8.7754 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 94.3 3.13e+02 9.43e+01 ## IORE 96.7 1.51e+03 4.55e+02 ## DFOP 96.4 3.79e+09 1.92e+09 ## ## Representative half-life: ## [1] 454.55"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-8","dir":"Articles > Web_only","previous_headings":"Examples where the representative half-life deviates from the observed DT50","what":"Example on page 8","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"dataset, IORE fit converge default starting values used mkin IORE model used. Therefore, lower value rate constant used .","code":"p8 <- nafta(NAFTA_SOP_Attachment[[\"p8\"]], parms.ini = c(k__iore_parent = 1e-3)) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p8) print(p8) ## Sums of squares: ## SFO IORE DFOP ## 1996.9408 444.9237 547.5616 ## ## Critical sum of squares for checking the SFO model: ## [1] 477.4924 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 88.16549 6.53e-29 83.37344 92.95754 ## k_parent 0.00803 1.67e-13 0.00674 0.00957 ## sigma 7.44786 4.17e-10 5.66209 9.23363 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 9.77e+01 7.03e-35 9.44e+01 1.01e+02 ## k__iore_parent 6.14e-05 3.20e-02 2.12e-05 1.78e-04 ## N_parent 2.27e+00 4.23e-18 2.00e+00 2.54e+00 ## sigma 3.52e+00 5.36e-10 2.67e+00 4.36e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 95.70619 8.99e-32 91.87941 99.53298 ## k1 0.02500 5.25e-04 0.01422 0.04394 ## k2 0.00273 6.84e-03 0.00125 0.00597 ## g 0.58835 2.84e-06 0.36595 0.77970 ## sigma 3.90001 6.94e-10 2.96260 4.83741 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 86.3 287 86.3 ## IORE 53.4 668 201.0 ## DFOP 55.6 517 253.0 ## ## Representative half-life: ## [1] 201.03"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-9-upper-panel","dir":"Articles > Web_only","previous_headings":"Examples where SFO was not selected for an abiotic study","what":"Example on page 9, upper panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"example, residuals SFO indicate lack fit model, even abiotic experiment, data suggest simple exponential decline.","code":"p9a <- nafta(NAFTA_SOP_Attachment[[\"p9a\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p9a) print(p9a) ## Sums of squares: ## SFO IORE DFOP ## 839.35238 88.57064 9.93363 ## ## Critical sum of squares for checking the SFO model: ## [1] 105.5678 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 88.1933 3.06e-12 79.9447 96.4419 ## k_parent 0.0409 2.07e-07 0.0324 0.0516 ## sigma 7.2429 3.92e-05 4.4768 10.0090 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 9.89e+01 1.12e-16 9.54e+01 1.02e+02 ## k__iore_parent 1.93e-05 1.13e-01 3.49e-06 1.06e-04 ## N_parent 2.91e+00 1.45e-09 2.50e+00 3.32e+00 ## sigma 2.35e+00 5.31e-05 1.45e+00 3.26e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 9.85e+01 2.54e-20 97.390 99.672 ## k1 1.38e-01 3.52e-05 0.131 0.146 ## k2 9.02e-13 5.00e-01 0.000 Inf ## g 6.52e-01 8.13e-06 0.642 0.661 ## sigma 7.88e-01 6.13e-02 0.481 1.095 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 16.9 5.63e+01 1.69e+01 ## IORE 11.6 3.37e+02 1.01e+02 ## DFOP 10.5 1.38e+12 7.68e+11 ## ## Representative half-life: ## [1] 101.43"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-9-lower-panel","dir":"Articles > Web_only","previous_headings":"Examples where SFO was not selected for an abiotic study","what":"Example on page 9, lower panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":", mkin gives longer slow DT50 DFOP model (17.8 days) PestDF (13.5 days). Presumably, related fact PestDF gives negative value proportion fast degradation 0 1, inclusive. parameter called f PestDF g mkin. mkin, restricted interval 0 1.","code":"p9b <- nafta(NAFTA_SOP_Attachment[[\"p9b\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p9b) print(p9b) ## Sums of squares: ## SFO IORE DFOP ## 35.64867 23.22334 35.64867 ## ## Critical sum of squares for checking the SFO model: ## [1] 28.54188 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 94.7123 2.15e-19 93.178 96.2464 ## k_parent 0.0389 4.47e-14 0.037 0.0408 ## sigma 1.5957 1.28e-04 0.932 2.2595 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 93.863 2.32e-18 92.4565 95.269 ## k__iore_parent 0.127 1.85e-02 0.0504 0.321 ## N_parent 0.711 1.88e-05 0.4843 0.937 ## sigma 1.288 1.76e-04 0.7456 1.830 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 94.7123 1.61e-16 93.1355 96.2891 ## k1 0.0389 1.08e-04 0.0266 0.0569 ## k2 0.0389 2.24e-04 0.0255 0.0592 ## g 0.5256 5.00e-01 0.0000 1.0000 ## sigma 1.5957 2.50e-04 0.9135 2.2779 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 17.8 59.2 17.8 ## IORE 18.4 49.2 14.8 ## DFOP 17.8 59.2 17.8 ## ## Representative half-life: ## [1] 14.8"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-10","dir":"Articles > Web_only","previous_headings":"Examples where SFO was not selected for an abiotic study","what":"Example on page 10","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":", value N given IORE model, data suggests faster decline towards end experiment, appears physically rather unlikely case photolysis study. seems PestDF constrain N values zero, thus slight difference IORE model parameters PestDF mkin.","code":"p10 <- nafta(NAFTA_SOP_Attachment[[\"p10\"]]) ## Warning in sqrt(diag(covar_notrans)): NaNs produced ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p10) print(p10) ## Sums of squares: ## SFO IORE DFOP ## 899.4089 336.4348 899.4089 ## ## Critical sum of squares for checking the SFO model: ## [1] 413.4841 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 101.7315 6.42e-11 91.9259 111.5371 ## k_parent 0.0495 1.70e-07 0.0404 0.0607 ## sigma 8.0152 1.28e-04 4.6813 11.3491 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 96.86 3.32e-12 90.848 102.863 ## k__iore_parent 2.96 7.91e-02 0.687 12.761 ## N_parent 0.00 5.00e-01 -0.372 0.372 ## sigma 4.90 1.77e-04 2.837 6.968 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 101.7315 1.41e-09 91.6534 111.810 ## k1 0.0495 3.04e-03 0.0188 0.131 ## k2 0.0495 4.92e-04 0.0197 0.124 ## g 0.4487 NaN 0.0000 1.000 ## sigma 8.0152 2.50e-04 4.5886 11.442 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 14.0 46.5 14.00 ## IORE 16.4 29.4 8.86 ## DFOP 14.0 46.5 14.00 ## ## Representative half-life: ## [1] 8.86"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-11","dir":"Articles > Web_only","previous_headings":"The DT50 was not observed during the study","what":"Example on page 11","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"case, DFOP fit reported PestDF resulted negative value slower rate constant, possible mkin. results agreement.","code":"p11 <- nafta(NAFTA_SOP_Attachment[[\"p11\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p11) print(p11) ## Sums of squares: ## SFO IORE DFOP ## 579.6805 204.7932 144.7783 ## ## Critical sum of squares for checking the SFO model: ## [1] 251.6944 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 96.15820 4.83e-13 90.24934 1.02e+02 ## k_parent 0.00321 4.71e-05 0.00222 4.64e-03 ## sigma 6.43473 1.28e-04 3.75822 9.11e+00 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 1.05e+02 NA 9.90e+01 1.10e+02 ## k__iore_parent 3.11e-17 NA 1.35e-20 7.18e-14 ## N_parent 8.36e+00 NA 6.62e+00 1.01e+01 ## sigma 3.82e+00 NA 2.21e+00 5.44e+00 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 1.05e+02 9.47e-13 99.9990 109.1224 ## k1 4.41e-02 5.95e-03 0.0296 0.0658 ## k2 9.94e-13 5.00e-01 0.0000 Inf ## g 3.22e-01 1.45e-03 0.2814 0.3650 ## sigma 3.22e+00 3.52e-04 1.8410 4.5906 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 2.16e+02 7.18e+02 2.16e+02 ## IORE 9.73e+02 1.37e+08 4.11e+07 ## DFOP 3.07e+11 1.93e+12 6.98e+11 ## ## Representative half-life: ## [1] 41148169"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"n-is-less-than-1-and-the-dfop-rate-constants-are-like-the-sfo-rate-constant","dir":"Articles > Web_only","previous_headings":"","what":"N is less than 1 and the DFOP rate constants are like the SFO rate constant","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"following three examples, results obtained mkin reported PestDF. case page 10, N values 1 deemed unrealistic appear result overparameterisation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-12-upper-panel","dir":"Articles > Web_only","previous_headings":"N is less than 1 and the DFOP rate constants are like the SFO rate constant","what":"Example on page 12, upper panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p12a <- nafta(NAFTA_SOP_Attachment[[\"p12a\"]]) ## Warning in summary.mkinfit(x): Could not calculate correlation; no covariance ## matrix ## Warning in sqrt(diag(covar_notrans)): NaNs produced ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p12a) print(p12a) ## Sums of squares: ## SFO IORE DFOP ## 695.4440 220.0685 695.4440 ## ## Critical sum of squares for checking the SFO model: ## [1] 270.4679 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 100.521 8.75e-12 92.461 108.581 ## k_parent 0.124 3.61e-08 0.104 0.148 ## sigma 7.048 1.28e-04 4.116 9.980 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 96.823 NA NA NA ## k__iore_parent 2.436 NA NA NA ## N_parent 0.263 NA NA NA ## sigma 3.965 NA NA NA ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 100.521 2.74e-10 92.2366 108.805 ## k1 0.124 2.53e-05 0.0908 0.170 ## k2 0.124 2.52e-02 0.0456 0.339 ## g 0.793 NaN 0.0000 1.000 ## sigma 7.048 2.50e-04 4.0349 10.061 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 5.58 18.5 5.58 ## IORE 6.49 13.2 3.99 ## DFOP 5.58 18.5 5.58 ## ## Representative half-life: ## [1] 3.99"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-12-lower-panel","dir":"Articles > Web_only","previous_headings":"N is less than 1 and the DFOP rate constants are like the SFO rate constant","what":"Example on page 12, lower panel","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p12b <- nafta(NAFTA_SOP_Attachment[[\"p12b\"]]) ## Warning in sqrt(diag(covar)): NaNs produced ## Warning in qt(alpha/2, rdf): NaNs produced ## Warning in qt(1 - alpha/2, rdf): NaNs produced ## Warning in pt(abs(tval), rdf, lower.tail = FALSE): NaNs produced ## Warning in sqrt(1/diag(V)): NaNs produced ## Warning in cov2cor(ans$covar): diag(.) had 0 or NA entries; non-finite result ## is doubtful ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p12b) print(p12b) ## Sums of squares: ## SFO IORE DFOP ## 58.90242 19.06353 58.90242 ## ## Critical sum of squares for checking the SFO model: ## [1] 51.51756 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 97.6840 0.00039 85.9388 109.4292 ## k_parent 0.0589 0.00261 0.0431 0.0805 ## sigma 3.4323 0.04356 -1.2377 8.1023 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 95.523 0.0055 74.539157 116.51 ## k__iore_parent 0.333 0.1433 0.000717 154.57 ## N_parent 0.568 0.0677 -0.989464 2.13 ## sigma 1.953 0.0975 -5.893100 9.80 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 97.6840 NaN NaN NaN ## k1 0.0589 NaN NA NA ## k2 0.0589 NaN NA NA ## g 0.6473 NaN NA NA ## sigma 3.4323 NaN NaN NaN ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 11.8 39.1 11.80 ## IORE 12.9 31.4 9.46 ## DFOP 11.8 39.1 11.80 ## ## Representative half-life: ## [1] 9.46"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"example-on-page-13","dir":"Articles > Web_only","previous_headings":"N is less than 1 and the DFOP rate constants are like the SFO rate constant","what":"Example on page 13","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"","code":"p13 <- nafta(NAFTA_SOP_Attachment[[\"p13\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p13) print(p13) ## Sums of squares: ## SFO IORE DFOP ## 174.5971 142.3951 174.5971 ## ## Critical sum of squares for checking the SFO model: ## [1] 172.131 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 92.73500 5.99e-17 89.61936 95.85065 ## k_parent 0.00258 2.42e-09 0.00223 0.00299 ## sigma 3.41172 7.07e-05 2.05455 4.76888 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 91.6016 6.34e-16 88.53086 94.672 ## k__iore_parent 0.0396 2.36e-01 0.00207 0.759 ## N_parent 0.3541 1.46e-01 -0.35153 1.060 ## sigma 3.0811 9.64e-05 1.84296 4.319 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 92.73500 NA 8.95e+01 95.92118 ## k1 0.00258 NA 4.18e-04 0.01592 ## k2 0.00258 NA 1.75e-03 0.00381 ## g 0.16452 NA 0.00e+00 1.00000 ## sigma 3.41172 NA 2.02e+00 4.79960 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 269 892 269 ## IORE 261 560 169 ## DFOP 269 892 269 ## ## Representative half-life: ## [1] 168.51"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"dt50-not-observed-in-the-study-and-dfop-problems-in-pestdf","dir":"Articles > Web_only","previous_headings":"","what":"DT50 not observed in the study and DFOP problems in PestDF","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"slower rate constant reported PestDF negative, physically realistic, possible mkin. fits give results mkin PestDF.","code":"p14 <- nafta(NAFTA_SOP_Attachment[[\"p14\"]]) ## Warning in sqrt(diag(covar)): NaNs produced ## Warning in sqrt(1/diag(V)): NaNs produced ## Warning in cov2cor(ans$covar): diag(.) had 0 or NA entries; non-finite result ## is doubtful ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p14) print(p14) ## Sums of squares: ## SFO IORE DFOP ## 48.43249 28.67746 27.26248 ## ## Critical sum of squares for checking the SFO model: ## [1] 32.83337 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 99.47124 2.06e-30 98.42254 1.01e+02 ## k_parent 0.00279 3.75e-15 0.00256 3.04e-03 ## sigma 1.55616 3.81e-06 1.03704 2.08e+00 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 1.00e+02 NA NaN NaN ## k__iore_parent 9.44e-08 NA NaN NaN ## N_parent 3.31e+00 NA NaN NaN ## sigma 1.20e+00 NA 0.796 1.6 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 1.00e+02 2.96e-28 99.40280 101.2768 ## k1 9.53e-03 1.20e-01 0.00638 0.0143 ## k2 5.21e-12 5.00e-01 0.00000 Inf ## g 3.98e-01 2.19e-01 0.30481 0.4998 ## sigma 1.17e+00 7.68e-06 0.77406 1.5610 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 2.48e+02 8.25e+02 2.48e+02 ## IORE 4.34e+02 2.22e+04 6.70e+03 ## DFOP 3.55e+10 3.44e+11 1.33e+11 ## ## Representative half-life: ## [1] 6697.44"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"n-is-less-than-1-and-dfop-fraction-parameter-is-below-zero","dir":"Articles > Web_only","previous_headings":"","what":"N is less than 1 and DFOP fraction parameter is below zero","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"mkin, IORE fit affected (deemed unrealistic), fraction parameter DFOP model restricted interval 0 1 mkin. SFO fits give results mkin PestDF.","code":"p15a <- nafta(NAFTA_SOP_Attachment[[\"p15a\"]]) ## Warning in sqrt(diag(covar)): NaNs produced ## Warning in sqrt(1/diag(V)): NaNs produced ## Warning in cov2cor(ans$covar): diag(.) had 0 or NA entries; non-finite result ## is doubtful ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p15a) print(p15a) ## Sums of squares: ## SFO IORE DFOP ## 245.5248 135.0132 245.5248 ## ## Critical sum of squares for checking the SFO model: ## [1] 165.9335 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 97.96751 2.00e-15 94.32049 101.615 ## k_parent 0.00952 4.93e-09 0.00824 0.011 ## sigma 4.18778 1.28e-04 2.44588 5.930 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 95.874 2.94e-15 92.937 98.811 ## k__iore_parent 0.629 2.11e-01 0.044 8.982 ## N_parent 0.000 5.00e-01 -0.642 0.642 ## sigma 3.105 1.78e-04 1.795 4.416 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 97.96751 2.85e-13 94.21913 101.7159 ## k1 0.00952 6.28e-02 0.00260 0.0349 ## k2 0.00952 1.27e-04 0.00652 0.0139 ## g 0.21241 5.00e-01 NA NA ## sigma 4.18778 2.50e-04 2.39747 5.9781 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 72.8 242 72.8 ## IORE 76.3 137 41.3 ## DFOP 72.8 242 72.8 ## ## Representative half-life: ## [1] 41.33 p15b <- nafta(NAFTA_SOP_Attachment[[\"p15b\"]]) ## Warning in summary.mkinfit(x): Could not calculate correlation; no covariance ## matrix ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The half-life obtained from the IORE model may be used plot(p15b) print(p15b) ## Sums of squares: ## SFO IORE DFOP ## 106.91629 68.55574 106.91629 ## ## Critical sum of squares for checking the SFO model: ## [1] 84.25618 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 1.01e+02 3.06e-17 98.31594 1.03e+02 ## k_parent 4.86e-03 2.48e-10 0.00435 5.42e-03 ## sigma 2.76e+00 1.28e-04 1.61402 3.91e+00 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 99.83 1.81e-16 97.51348 102.14 ## k__iore_parent 0.38 3.22e-01 0.00352 41.05 ## N_parent 0.00 5.00e-01 -1.07696 1.08 ## sigma 2.21 2.57e-04 1.23245 3.19 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 1.01e+02 NA NA NA ## k1 4.86e-03 NA NA NA ## k2 4.86e-03 NA NA NA ## g 1.88e-01 NA NA NA ## sigma 2.76e+00 NA NA NA ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 143 474 143.0 ## IORE 131 236 71.2 ## DFOP 143 474 143.0 ## ## Representative half-life: ## [1] 71.18"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"the-dfop-fraction-parameter-is-greater-than-1","dir":"Articles > Web_only","previous_headings":"","what":"The DFOP fraction parameter is greater than 1","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"PestDF, DFOP fit seems stuck local minimum, mkin finds solution much lower \\(\\chi^2\\) error level. half-life slower rate constant DFOP model larger IORE derived half-life, NAFTA recommendation obtained mkin use DFOP representative half-life 8.9 days.","code":"p16 <- nafta(NAFTA_SOP_Attachment[[\"p16\"]]) ## The SFO model is rejected as S_SFO is equal or higher than the critical value S_c ## The representative half-life of the IORE model is longer than the one corresponding ## to the terminal degradation rate found with the DFOP model. ## The representative half-life obtained from the DFOP model may be used plot(p16) print(p16) ## Sums of squares: ## SFO IORE DFOP ## 3831.804 2062.008 1550.980 ## ## Critical sum of squares for checking the SFO model: ## [1] 2247.348 ## ## Parameters: ## $SFO ## Estimate Pr(>t) Lower Upper ## parent_0 71.953 2.33e-13 60.509 83.40 ## k_parent 0.159 4.86e-05 0.102 0.25 ## sigma 11.302 1.25e-08 8.308 14.30 ## ## $IORE ## Estimate Pr(>t) Lower Upper ## parent_0 8.74e+01 2.48e-16 7.72e+01 97.52972 ## k__iore_parent 4.55e-04 2.16e-01 3.48e-05 0.00595 ## N_parent 2.70e+00 1.21e-08 1.99e+00 3.40046 ## sigma 8.29e+00 1.61e-08 6.09e+00 10.49062 ## ## $DFOP ## Estimate Pr(>t) Lower Upper ## parent_0 88.5333 7.40e-18 79.9836 97.083 ## k1 18.8461 5.00e-01 0.0000 Inf ## k2 0.0776 1.41e-05 0.0518 0.116 ## g 0.4733 1.41e-09 0.3674 0.582 ## sigma 7.1902 2.11e-08 5.2785 9.102 ## ## ## DTx values: ## DT50 DT90 DT50_rep ## SFO 4.35 14.4 4.35 ## IORE 1.48 32.1 9.67 ## DFOP 0.67 21.4 8.93 ## ## Representative half-life: ## [1] 8.93"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html","id":"conclusions","dir":"Articles > Web_only","previous_headings":"","what":"Conclusions","title":"Evaluation of example datasets from Attachment 1 to the US EPA SOP for the NAFTA guidance","text":"results obtained mkin deviate results obtained PestDF either cases one interpretive rules apply, .e. IORE parameter N less one DFOP k values obtained PestDF equal SFO k values, cases DFOP model converge, often lead negative rate constants returned PestDF. Therefore, mkin appears suitable kinetic evaluations according NAFTA guidance.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"test-cases","dir":"Articles > Web_only","previous_headings":"","what":"Test cases","title":"Benchmark timings for mkin","text":"Parent : One metabolite: Two metabolites, synthetic data:","code":"FOCUS_C <- FOCUS_2006_C FOCUS_D <- subset(FOCUS_2006_D, value != 0) parent_datasets <- list(FOCUS_C, FOCUS_D) t1 <- system.time(mmkin_bench(c(\"SFO\", \"FOMC\", \"DFOP\", \"HS\"), parent_datasets))[[\"elapsed\"]] t2 <- system.time(mmkin_bench(c(\"SFO\", \"FOMC\", \"DFOP\", \"HS\"), parent_datasets, error_model = \"tc\"))[[\"elapsed\"]] SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) FOMC_SFO <- mkinmod( parent = mkinsub(\"FOMC\", \"m1\"), m1 = mkinsub(\"SFO\")) DFOP_SFO <- mkinmod( parent = mkinsub(\"FOMC\", \"m1\"), # erroneously used FOMC twice, not fixed for consistency m1 = mkinsub(\"SFO\")) t3 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D)))[[\"elapsed\"]] t4 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D), error_model = \"tc\"))[[\"elapsed\"]] t5 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), list(FOCUS_D), error_model = \"obs\"))[[\"elapsed\"]] m_synth_SFO_lin <- mkinmod(parent = mkinsub(\"SFO\", \"M1\"), M1 = mkinsub(\"SFO\", \"M2\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) m_synth_DFOP_par <- mkinmod(parent = mkinsub(\"DFOP\", c(\"M1\", \"M2\")), M1 = mkinsub(\"SFO\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) SFO_lin_a <- synthetic_data_for_UBA_2014[[1]]$data DFOP_par_c <- synthetic_data_for_UBA_2014[[12]]$data t6 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a)))[[\"elapsed\"]] t7 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c)))[[\"elapsed\"]] t8 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a), error_model = \"tc\"))[[\"elapsed\"]] t9 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c), error_model = \"tc\"))[[\"elapsed\"]] t10 <- system.time(mmkin_bench(list(m_synth_SFO_lin), list(SFO_lin_a), error_model = \"obs\"))[[\"elapsed\"]] t11 <- system.time(mmkin_bench(list(m_synth_DFOP_par), list(DFOP_par_c), error_model = \"obs\"))[[\"elapsed\"]]"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"results","dir":"Articles > Web_only","previous_headings":"","what":"Results","title":"Benchmark timings for mkin","text":"Benchmarks available error models shown. intended improving mkin, comparing CPUs operating systems. trademarks belong respective owners.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"parent-only","dir":"Articles > Web_only","previous_headings":"Results","what":"Parent only","title":"Benchmark timings for mkin","text":"Constant variance (t1) two-component error model (t2) four models fitted two datasets, .e. eight fits test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"one-metabolite","dir":"Articles > Web_only","previous_headings":"Results","what":"One metabolite","title":"Benchmark timings for mkin","text":"Constant variance (t3), two-component error model (t4), variance variable (t5) three models fitted one dataset, .e. three fits test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html","id":"two-metabolites","dir":"Articles > Web_only","previous_headings":"Results","what":"Two metabolites","title":"Benchmark timings for mkin","text":"Constant variance (t6 t7), two-component error model (t8 t9), variance variable (t10 t11) one model fitted one dataset, .e. one fit test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html","id":"how-to-benefit-from-compiled-models","dir":"Articles > Web_only","previous_headings":"","what":"How to benefit from compiled models","title":"Performance benefit by using compiled model definitions in mkin","text":"using mkin version equal greater 0.9-36 C compiler available, see message model compiled autogenerated C code defining model using mkinmod. Starting version 0.9.49.9, mkinmod() function checks presence compiler using previous versions, used Sys.(\"gcc\") check. Linux, need essential build tools like make gcc clang installed. Debian based linux distributions, pulled installing build-essential package. MacOS, use personally, reports compiler available default. Windows, need install Rtools path bin directory PATH variable. need modify PATH variable installing Rtools. Instead, recommend put line .Rprofile startup file. just text file R code executed R session starts. named .Rprofile located home directory, generally Documents folder. can check location home directory used R issuing","code":"pkgbuild::has_compiler() Sys.setenv(PATH = paste(\"C:/Rtools/bin\", Sys.getenv(\"PATH\"), sep=\";\")) Sys.getenv(\"HOME\")"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html","id":"comparison-with-other-solution-methods","dir":"Articles > Web_only","previous_headings":"","what":"Comparison with other solution methods","title":"Performance benefit by using compiled model definitions in mkin","text":"First, build simple degradation model parent compound one metabolite, remove zero values dataset. can compare performance Eigenvalue based solution compiled version R implementation differential equations using benchmark package. output code, warnings zero removed FOCUS D dataset suppressed. Since mkin version 0.9.49.11, analytical solution also implemented, included tests . see using compiled model factor 10 faster using deSolve without compiled code.","code":"library(\"mkin\", quietly = TRUE) SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) ## Temporary DLL for differentials generated and loaded FOCUS_D <- subset(FOCUS_2006_D, value != 0) if (require(rbenchmark)) { b.1 <- benchmark( \"deSolve, not compiled\" = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"deSolve\", use_compiled = FALSE, quiet = TRUE), \"Eigenvalue based\" = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"eigen\", quiet = TRUE), \"deSolve, compiled\" = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"deSolve\", quiet = TRUE), \"analytical\" = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"analytical\", use_compiled = FALSE, quiet = TRUE), replications = 1, order = \"relative\", columns = c(\"test\", \"replications\", \"relative\", \"elapsed\")) print(b.1) } else { print(\"R package rbenchmark is not available\") } ## test replications relative elapsed ## 4 analytical 1 1.000 0.109 ## 3 deSolve, compiled 1 1.284 0.140 ## 2 Eigenvalue based 1 1.670 0.182 ## 1 deSolve, not compiled 1 21.927 2.390"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html","id":"model-without-analytical-solution","dir":"Articles > Web_only","previous_headings":"","what":"Model without analytical solution","title":"Performance benefit by using compiled model definitions in mkin","text":"evaluation also taken example section mkinfit. analytical solution available system, now Eigenvalue based solution possible, deSolve using without compiled code available. get performance benefit factor 24 using version differential equation model compiled C code! vignette built mkin 1.2.6 ","code":"if (require(rbenchmark)) { FOMC_SFO <- mkinmod( parent = mkinsub(\"FOMC\", \"m1\"), m1 = mkinsub( \"SFO\")) b.2 <- benchmark( \"deSolve, not compiled\" = mkinfit(FOMC_SFO, FOCUS_D, use_compiled = FALSE, quiet = TRUE), \"deSolve, compiled\" = mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE), replications = 1, order = \"relative\", columns = c(\"test\", \"replications\", \"relative\", \"elapsed\")) print(b.2) factor_FOMC_SFO <- round(b.2[\"1\", \"relative\"]) } else { factor_FOMC_SFO <- NA print(\"R package benchmark is not available\") } ## Temporary DLL for differentials generated and loaded ## test replications relative elapsed ## 2 deSolve, compiled 1 1.000 0.181 ## 1 deSolve, not compiled 1 23.646 4.280 ## R version 4.3.2 (2023-10-31) ## Platform: x86_64-pc-linux-gnu (64-bit) ## Running under: Debian GNU/Linux 12 (bookworm) ## CPU model: AMD Ryzen 9 7950X 16-Core Processor"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"introduction","dir":"Articles > Web_only","previous_headings":"","what":"Introduction","title":"Example evaluations of the dimethenamid data from 2018","text":"first analysis data analysed presented recent journal article nonlinear mixed-effects models degradation kinetics (Ranke et al. 2021). analysis based nlme package development version saemix package unpublished time. Meanwhile, version 3.0 saemix package available CRAN repository. Also, turned error handling Borstel data mkin package time, leading duplication data points soil. dataset mkin package corrected, interface saemix mkin package updated use released version. vignette intended present date analysis data, using corrected dataset released versions mkin saemix.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"data","dir":"Articles > Web_only","previous_headings":"","what":"Data","title":"Example evaluations of the dimethenamid data from 2018","text":"Residue data forming basis endpoints derived conclusion peer review pesticide risk assessment dimethenamid-P published European Food Safety Authority (EFSA) 2018 (EFSA 2018) transcribed risk assessment report (Rapporteur Member State Germany, Co-Rapporteur Member State Bulgaria 2018) can downloaded Open EFSA repository https://open.efsa.europa.eu/study-inventory/EFSA-Q-2014-00716. data available mkin package. following code (hidden default, please use button right show ) treats data available racemic mixture dimethenamid (DMTA) enantiomer dimethenamid-P (DMTAP) way, difference degradation behaviour identified EU risk assessment. observation times dataset multiplied corresponding normalisation factor also available dataset, order make possible describe datasets single set parameters. Also, datasets observed soil merged, resulting dimethenamid (DMTA) data six soils.","code":"library(mkin, quietly = TRUE) dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] ds_i }) names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"parent-degradation","dir":"Articles > Web_only","previous_headings":"","what":"Parent degradation","title":"Example evaluations of the dimethenamid data from 2018","text":"evaluate observed degradation parent compound using simple exponential decline (SFO) biexponential decline (DFOP), using constant variance (const) two-component variance (tc) error models.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"separate-evaluations","dir":"Articles > Web_only","previous_headings":"Parent degradation","what":"Separate evaluations","title":"Example evaluations of the dimethenamid data from 2018","text":"first step, get visual impression fit different models, separate evaluations soil using mmkin function mkin package: plot individual SFO fits shown suggests least datasets degradation slows towards later time points, scatter residuals error smaller smaller values (panel right): Using biexponential decline (DFOP) results slightly random scatter residuals: population curve (bold line) plot results taking mean individual transformed parameters, .e. log k1 log k2, well logit g parameter DFOP model). , procedure result parameters represent degradation well, datasets fitted value k2 extremely close zero, leading log k2 value dominates average. alleviated rate constants pass t-test significant difference zero (untransformed scale) considered averaging: visually much satisfactory, average procedure introduce bias, results individual fits enter population curve weight. nonlinear mixed-effects models can help treating datasets equally fitting parameter distribution model together degradation model error model (see ). remaining trend residuals higher higher predicted residues reduced using two-component error model: However, note case using error model, fits Flaach BBA 2.3 datasets appear ill-defined, indicated fact converge:","code":"f_parent_mkin_const <- mmkin(c(\"SFO\", \"DFOP\"), dmta_ds, error_model = \"const\", quiet = TRUE) f_parent_mkin_tc <- mmkin(c(\"SFO\", \"DFOP\"), dmta_ds, error_model = \"tc\", quiet = TRUE) plot(mixed(f_parent_mkin_const[\"SFO\", ])) plot(mixed(f_parent_mkin_const[\"DFOP\", ])) plot(mixed(f_parent_mkin_const[\"DFOP\", ]), test_log_parms = TRUE) plot(mixed(f_parent_mkin_tc[\"DFOP\", ]), test_log_parms = TRUE) print(f_parent_mkin_tc[\"DFOP\", ]) <mmkin> object Status of individual fits: dataset model Calke Borstel Flaach BBA 2.2 BBA 2.3 Elliot DFOP OK OK OK OK C OK C: Optimisation did not converge: iteration limit reached without convergence (10) OK: No warnings"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"nonlinear-mixed-effects-models","dir":"Articles > Web_only","previous_headings":"Parent degradation","what":"Nonlinear mixed-effects models","title":"Example evaluations of the dimethenamid data from 2018","text":"Instead taking model selection decision individual fits, fit nonlinear mixed-effects models (using different fitting algorithms implemented different packages) model selection using available data time. order make sure decisions unduly influenced type algorithm used, implementation details use wrong control parameters, compare model selection results obtained different R packages, different algorithms checking control parameters.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"nlme","dir":"Articles > Web_only","previous_headings":"Parent degradation > Nonlinear mixed-effects models","what":"nlme","title":"Example evaluations of the dimethenamid data from 2018","text":"nlme package first R extension providing facilities fit nonlinear mixed-effects models. like model selection four combinations degradation models error models based AIC. However, fitting DFOP model constant variance using default control parameters results error, signalling maximum number 50 iterations reached, potentially indicating overparameterisation. Nevertheless, algorithm converges two-component error model used combination DFOP model. can explained fact smaller residues observed later sampling times get weight using two-component error model counteract tendency algorithm try parameter combinations unsuitable fitting data. Note certain degree overparameterisation also indicated warning obtained fitting DFOP two-component error model (‘false convergence’ ‘LME step’ iteration 3). However, warning occur later iterations, specifically last 5 iterations, can ignore warning. model comparison function nlme package can directly applied fits showing much lower AIC DFOP model fitted two-component error model. Also, likelihood ratio test indicates difference significant p-value 0.0001. addition fits, attempts also made include correlations random effects using log Cholesky parameterisation matrix specifying . code used attempts can made visible . SFO variants converge fast, additional parameters introduced lead convergence warnings DFOP model. model comparison clearly show adding correlations random effects improve fits. selected model (DFOP two-component error) fitted data assuming correlations random effects shown .","code":"library(nlme) f_parent_nlme_sfo_const <- nlme(f_parent_mkin_const[\"SFO\", ]) # f_parent_nlme_dfop_const <- nlme(f_parent_mkin_const[\"DFOP\", ]) f_parent_nlme_sfo_tc <- nlme(f_parent_mkin_tc[\"SFO\", ]) f_parent_nlme_dfop_tc <- nlme(f_parent_mkin_tc[\"DFOP\", ]) anova( f_parent_nlme_sfo_const, f_parent_nlme_sfo_tc, f_parent_nlme_dfop_tc ) Model df AIC BIC logLik Test L.Ratio p-value f_parent_nlme_sfo_const 1 5 796.60 811.82 -393.30 f_parent_nlme_sfo_tc 2 6 798.60 816.86 -393.30 1 vs 2 0.00 0.998 f_parent_nlme_dfop_tc 3 10 671.91 702.34 -325.95 2 vs 3 134.69 <.0001 f_parent_nlme_sfo_const_logchol <- nlme(f_parent_mkin_const[\"SFO\", ], random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k_DMTA ~ 1))) anova(f_parent_nlme_sfo_const, f_parent_nlme_sfo_const_logchol) f_parent_nlme_sfo_tc_logchol <- nlme(f_parent_mkin_tc[\"SFO\", ], random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k_DMTA ~ 1))) anova(f_parent_nlme_sfo_tc, f_parent_nlme_sfo_tc_logchol) f_parent_nlme_dfop_tc_logchol <- nlme(f_parent_mkin_const[\"DFOP\", ], random = nlme::pdLogChol(list(DMTA_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1))) anova(f_parent_nlme_dfop_tc, f_parent_nlme_dfop_tc_logchol) plot(f_parent_nlme_dfop_tc)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"saemix","dir":"Articles > Web_only","previous_headings":"Parent degradation > Nonlinear mixed-effects models","what":"saemix","title":"Example evaluations of the dimethenamid data from 2018","text":"saemix package provided first Open Source implementation Stochastic Approximation Expectation Maximisation (SAEM) algorithm. SAEM fits degradation models can conveniently performed using interface saemix package available current development versions mkin package. corresponding SAEM fits four combinations degradation error models fitted . convergence criterion implemented saemix package, convergence plots need manually checked every fit. define control settings work well parent data fits shown vignette. convergence plot SFO model using constant variance shown . Obviously selected number iterations sufficient reach convergence. can also said SFO fit using two-component error model. fitting DFOP model constant variance (see ), parameter convergence unambiguous. parameters converge credible values, variance k2 (omega2.k2) converges small value. printout saem.mmkin model shows estimated standard deviation k2 across population soils (SD.k2) ill-defined, indicating overparameterisation model. DFOP model fitted two-component error model, also observe estimated variance k2 becomes small, ill-defined, illustrated excessive confidence interval SD.k2. Doubling number iterations first phase algorithm leads slightly lower likelihood, therefore slightly higher AIC BIC values. even iterations, algorithm stops error message. related variance k2 approximating zero submitted bug saemix package, algorithm converge case. alternative way fit DFOP combination two-component error model use model formulation transformed parameters used per default mkin. using option, convergence slower, eventually algorithm stops well error message. four combinations (SFO/const, SFO/tc, DFOP/const DFOP/tc) version increased iterations can compared using model comparison function saemix package: order check influence likelihood calculation algorithms implemented saemix, likelihood Gaussian quadrature added best fit, AIC values obtained three methods compared. AIC values based importance sampling Gaussian quadrature similar. Using linearisation known less accurate, still gives similar value. order illustrate comparison three method depends degree convergence obtained fit, comparison shown fit using defaults number iterations number MCMC chains. using OpenBlas linear algebra, large difference values obtained Gaussian quadrature, larger number iterations makes lot difference. using LAPACK version coming Debian Bullseye, AIC based Gaussian quadrature almost one obtained methods, also using defaults fit.","code":"library(saemix) saemix_control <- saemixControl(nbiter.saemix = c(800, 300), nb.chains = 15, print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) saemix_control_moreiter <- saemixControl(nbiter.saemix = c(1600, 300), nb.chains = 15, print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) saemix_control_10k <- saemixControl(nbiter.saemix = c(10000, 300), nb.chains = 15, print = FALSE, save = FALSE, save.graphs = FALSE, displayProgress = FALSE) f_parent_saemix_sfo_const <- mkin::saem(f_parent_mkin_const[\"SFO\", ], quiet = TRUE, control = saemix_control, transformations = \"saemix\") plot(f_parent_saemix_sfo_const$so, plot.type = \"convergence\") f_parent_saemix_sfo_tc <- mkin::saem(f_parent_mkin_tc[\"SFO\", ], quiet = TRUE, control = saemix_control, transformations = \"saemix\") plot(f_parent_saemix_sfo_tc$so, plot.type = \"convergence\") f_parent_saemix_dfop_const <- mkin::saem(f_parent_mkin_const[\"DFOP\", ], quiet = TRUE, control = saemix_control, transformations = \"saemix\") plot(f_parent_saemix_dfop_const$so, plot.type = \"convergence\") print(f_parent_saemix_dfop_const) Kinetic nonlinear mixed-effects model fit by SAEM Structural model: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Likelihood computed by importance sampling AIC BIC logLik 706 704 -344 Fitted parameters: estimate lower upper DMTA_0 97.99583 96.50079 99.4909 k1 0.06377 0.03432 0.0932 k2 0.00848 0.00444 0.0125 g 0.95701 0.91313 1.0009 a.1 1.82141 1.60516 2.0377 SD.DMTA_0 1.64787 0.45729 2.8384 SD.k1 0.57439 0.24731 0.9015 SD.k2 0.03296 -2.50524 2.5712 SD.g 1.10266 0.32354 1.8818 f_parent_saemix_dfop_tc <- mkin::saem(f_parent_mkin_tc[\"DFOP\", ], quiet = TRUE, control = saemix_control, transformations = \"saemix\") f_parent_saemix_dfop_tc_moreiter <- mkin::saem(f_parent_mkin_tc[\"DFOP\", ], quiet = TRUE, control = saemix_control_moreiter, transformations = \"saemix\") plot(f_parent_saemix_dfop_tc$so, plot.type = \"convergence\") print(f_parent_saemix_dfop_tc) Kinetic nonlinear mixed-effects model fit by SAEM Structural model: d_DMTA/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) * DMTA Data: 155 observations of 1 variable(s) grouped in 6 datasets Likelihood computed by importance sampling AIC BIC logLik 666 664 -323 Fitted parameters: estimate lower upper DMTA_0 98.24165 96.29190 100.1914 k1 0.06421 0.03352 0.0949 k2 0.00866 0.00617 0.0111 g 0.95340 0.91218 0.9946 a.1 1.06463 0.86503 1.2642 b.1 0.02964 0.02259 0.0367 SD.DMTA_0 2.03611 0.40416 3.6681 SD.k1 0.59534 0.25692 0.9338 SD.k2 0.00042 -73.01372 73.0146 SD.g 1.04234 0.37189 1.7128 AIC_parent_saemix <- saemix::compare.saemix( f_parent_saemix_sfo_const$so, f_parent_saemix_sfo_tc$so, f_parent_saemix_dfop_const$so, f_parent_saemix_dfop_tc$so, f_parent_saemix_dfop_tc_moreiter$so) Likelihoods calculated by importance sampling rownames(AIC_parent_saemix) <- c( \"SFO const\", \"SFO tc\", \"DFOP const\", \"DFOP tc\", \"DFOP tc more iterations\") print(AIC_parent_saemix) AIC BIC SFO const 796.38 795.34 SFO tc 798.38 797.13 DFOP const 705.75 703.88 DFOP tc 665.67 663.59 DFOP tc more iterations 665.85 663.76 f_parent_saemix_dfop_tc$so <- saemix::llgq.saemix(f_parent_saemix_dfop_tc$so) AIC_parent_saemix_methods <- c( is = AIC(f_parent_saemix_dfop_tc$so, method = \"is\"), gq = AIC(f_parent_saemix_dfop_tc$so, method = \"gq\"), lin = AIC(f_parent_saemix_dfop_tc$so, method = \"lin\") ) print(AIC_parent_saemix_methods) is gq lin 665.67 665.74 665.13 f_parent_saemix_dfop_tc_defaults <- mkin::saem(f_parent_mkin_tc[\"DFOP\", ]) f_parent_saemix_dfop_tc_defaults$so <- saemix::llgq.saemix(f_parent_saemix_dfop_tc_defaults$so) AIC_parent_saemix_methods_defaults <- c( is = AIC(f_parent_saemix_dfop_tc_defaults$so, method = \"is\"), gq = AIC(f_parent_saemix_dfop_tc_defaults$so, method = \"gq\"), lin = AIC(f_parent_saemix_dfop_tc_defaults$so, method = \"lin\") ) print(AIC_parent_saemix_methods_defaults) is gq lin 670.09 669.37 671.29"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"comparison","dir":"Articles > Web_only","previous_headings":"Parent degradation","what":"Comparison","title":"Example evaluations of the dimethenamid data from 2018","text":"following table gives AIC values obtained backend packages using control parameters (800 iterations burn-, 300 iterations second phase, 15 chains).","code":"AIC_all <- data.frame( check.names = FALSE, \"Degradation model\" = c(\"SFO\", \"SFO\", \"DFOP\", \"DFOP\"), \"Error model\" = c(\"const\", \"tc\", \"const\", \"tc\"), nlme = c(AIC(f_parent_nlme_sfo_const), AIC(f_parent_nlme_sfo_tc), NA, AIC(f_parent_nlme_dfop_tc)), saemix_lin = sapply(list(f_parent_saemix_sfo_const$so, f_parent_saemix_sfo_tc$so, f_parent_saemix_dfop_const$so, f_parent_saemix_dfop_tc$so), AIC, method = \"lin\"), saemix_is = sapply(list(f_parent_saemix_sfo_const$so, f_parent_saemix_sfo_tc$so, f_parent_saemix_dfop_const$so, f_parent_saemix_dfop_tc$so), AIC, method = \"is\") ) kable(AIC_all)"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"conclusion","dir":"Articles > Web_only","previous_headings":"","what":"Conclusion","title":"Example evaluations of the dimethenamid data from 2018","text":"detailed analysis dimethenamid dataset confirmed DFOP model provides appropriate description decline parent compound data. hand, closer inspection results revealed variability k2 parameter across population soils ill-defined. coincides observation parameter robustly quantified soils. Regarding regulatory use data, claimed improved characterisation mean parameter values across population obtained using nonlinear mixed-effects models presented . However, attempts quantify variability slower rate constant biphasic decline dimethenamid indicate data sufficient characterise variability satisfactory precision.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html","id":"session-info","dir":"Articles > Web_only","previous_headings":"","what":"Session Info","title":"Example evaluations of the dimethenamid data from 2018","text":"","code":"sessionInfo() R version 4.3.2 (2023-10-31) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 12 (bookworm) Matrix products: default BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.11.0 LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.11.0 locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=C LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=de_DE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] saemix_3.2 npde_3.3 nlme_3.1-163 mkin_1.2.6 knitr_1.42 loaded via a namespace (and not attached): [1] sass_0.4.6 utf8_1.2.3 generics_0.1.3 stringi_1.7.12 [5] lattice_0.21-8 digest_0.6.31 magrittr_2.0.3 evaluate_0.21 [9] grid_4.3.2 fastmap_1.1.1 rprojroot_2.0.3 jsonlite_1.8.4 [13] DBI_1.1.3 mclust_6.0.0 gridExtra_2.3 purrr_1.0.1 [17] fansi_1.0.4 scales_1.2.1 codetools_0.2-19 textshaping_0.3.6 [21] jquerylib_0.1.4 cli_3.6.1 rlang_1.1.1 munsell_0.5.0 [25] cachem_1.0.8 yaml_2.3.7 tools_4.3.2 parallel_4.3.2 [29] memoise_2.0.1 dplyr_1.1.2 colorspace_2.1-0 ggplot2_3.4.2 [33] vctrs_0.6.2 R6_2.5.1 zoo_1.8-12 lifecycle_1.0.3 [37] stringr_1.5.0 fs_1.6.2 MASS_7.3-60 ragg_1.2.5 [41] pkgconfig_2.0.3 desc_1.4.2 pkgdown_2.0.7 bslib_0.4.2 [45] pillar_1.9.0 gtable_0.3.3 glue_1.6.2 systemfonts_1.0.4 [49] highr_0.10 xfun_0.39 tibble_3.2.1 lmtest_0.9-40 [53] tidyselect_1.2.0 htmltools_0.5.5 rmarkdown_2.21 compiler_4.3.2"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"test-data","dir":"Articles > Web_only","previous_headings":"","what":"Test data","title":"Benchmark timings for saem.mmkin","text":"Please refer vignette dimethenamid_2018 explanation following preprocessing.","code":"dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] ds_i }) names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL"},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"parent-only","dir":"Articles > Web_only","previous_headings":"Test cases","what":"Parent only","title":"Benchmark timings for saem.mmkin","text":"model comparison suggests use SFORB model two-component error. comparison, keep DFOP model two-component error, competes SFORB biphasic curves. two models, random effects transformed parameters k2 k_DMTA_bound_free quantified.","code":"parent_mods <- c(\"SFO\", \"DFOP\", \"SFORB\", \"HS\") parent_sep_const <- mmkin(parent_mods, dmta_ds, quiet = TRUE, cores = n_cores) parent_sep_tc <- update(parent_sep_const, error_model = \"tc\") t1 <- system.time(sfo_const <- saem(parent_sep_const[\"SFO\", ]))[[\"elapsed\"]] t2 <- system.time(dfop_const <- saem(parent_sep_const[\"DFOP\", ]))[[\"elapsed\"]] t3 <- system.time(sforb_const <- saem(parent_sep_const[\"SFORB\", ]))[[\"elapsed\"]] t4 <- system.time(hs_const <- saem(parent_sep_const[\"HS\", ]))[[\"elapsed\"]] t5 <- system.time(sfo_tc <- saem(parent_sep_tc[\"SFO\", ]))[[\"elapsed\"]] t6 <- system.time(dfop_tc <- saem(parent_sep_tc[\"DFOP\", ]))[[\"elapsed\"]] t7 <- system.time(sforb_tc <- saem(parent_sep_tc[\"SFORB\", ]))[[\"elapsed\"]] t8 <- system.time(hs_tc <- saem(parent_sep_tc[\"HS\", ]))[[\"elapsed\"]] anova( sfo_const, dfop_const, sforb_const, hs_const, sfo_tc, dfop_tc, sforb_tc, hs_tc) |> kable(, digits = 1) illparms(dfop_tc) ## [1] \"sd(log_k2)\" illparms(sforb_tc) ## [1] \"sd(log_k_DMTA_bound_free)\""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"one-metabolite","dir":"Articles > Web_only","previous_headings":"Test cases","what":"One metabolite","title":"Benchmark timings for saem.mmkin","text":"remove parameters found ill-defined parent fits.","code":"one_met_mods <- list( DFOP_SFO = mkinmod( DMTA = mkinsub(\"DFOP\", \"M23\"), M23 = mkinsub(\"SFO\")), SFORB_SFO = mkinmod( DMTA = mkinsub(\"SFORB\", \"M23\"), M23 = mkinsub(\"SFO\"))) one_met_sep_const <- mmkin(one_met_mods, dmta_ds, error_model = \"const\", cores = n_cores, quiet = TRUE) one_met_sep_tc <- mmkin(one_met_mods, dmta_ds, error_model = \"tc\", cores = n_cores, quiet = TRUE) t9 <- system.time(dfop_sfo_tc <- saem(one_met_sep_tc[\"DFOP_SFO\", ], no_random_effect = \"log_k2\"))[[\"elapsed\"]] t10 <- system.time(sforb_sfo_tc <- saem(one_met_sep_tc[\"SFORB_SFO\", ], no_random_effect = \"log_k_DMTA_bound_free\"))[[\"elapsed\"]]"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"three-metabolites","dir":"Articles > Web_only","previous_headings":"Test cases","what":"Three metabolites","title":"Benchmark timings for saem.mmkin","text":"case three metabolites, keep SFORB model order limit time compiling vignette, fitting parallel may disturb benchmark. , include random effects ill-defined previous fits subsets degradation model.","code":"illparms(sforb_sfo_tc) three_met_mods <- list( SFORB_SFO3_plus = mkinmod( DMTA = mkinsub(\"SFORB\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE))) three_met_sep_tc <- mmkin(three_met_mods, dmta_ds, error_model = \"tc\", cores = n_cores, quiet = TRUE) t11 <- system.time(sforb_sfo3_plus_const <- saem(three_met_sep_tc[\"SFORB_SFO3_plus\", ], no_random_effect = \"log_k_DMTA_bound_free\"))[[\"elapsed\"]]"},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"results","dir":"Articles > Web_only","previous_headings":"","what":"Results","title":"Benchmark timings for saem.mmkin","text":"Benchmarks available error models shown. intended improving mkin, comparing CPUs operating systems. trademarks belong respective owners.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"parent-only-1","dir":"Articles > Web_only","previous_headings":"Results","what":"Parent only","title":"Benchmark timings for saem.mmkin","text":"Constant variance SFO, DFOP, SFORB HS. Two-component error fits SFO, DFOP, SFORB HS.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"one-metabolite-1","dir":"Articles > Web_only","previous_headings":"Results","what":"One metabolite","title":"Benchmark timings for saem.mmkin","text":"Two-component error DFOP-SFO SFORB-SFO.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html","id":"three-metabolites-1","dir":"Articles > Web_only","previous_headings":"Results","what":"Three metabolites","title":"Benchmark timings for saem.mmkin","text":"Two-component error SFORB-SFO3-plus","code":""},{"path":"https://pkgdown.jrwb.de/mkin/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Johannes Ranke. Author, maintainer, copyright holder. Katrin Lindenberger. Contributor. contributed mkinresplot() René Lehmann. Contributor. ilr() invilr() Eurofins Regulatory AG. Copyright holder. copyright contributions JR 2012-2014","code":""},{"path":"https://pkgdown.jrwb.de/mkin/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Ranke J (2024). mkin: Kinetic Evaluation Chemical Degradation Data. R package version 1.2.9, https://pkgdown.jrwb.de/mkin/.","code":"@Manual{, title = {mkin: Kinetic Evaluation of Chemical Degradation Data}, author = {Johannes Ranke}, year = {2024}, note = {R package version 1.2.9}, url = {https://pkgdown.jrwb.de/mkin/}, }"},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"mkin","dir":"","previous_headings":"","what":"Kinetic Evaluation of Chemical Degradation Data","title":"Kinetic Evaluation of Chemical Degradation Data","text":"R package mkin provides calculation routines analysis chemical degradation data, including multicompartment kinetics needed modelling formation decline transformation products, several degradation compartments involved. provides stable functionality kinetic evaluations according FOCUS guidance (see details). addition, provides functionality hierarchical kinetics based nonlinear mixed-effects models.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Kinetic Evaluation of Chemical Degradation Data","text":"can install latest released version CRAN within R:","code":"install.packages(\"mkin\")"},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"background","dir":"","previous_headings":"","what":"Background","title":"Kinetic Evaluation of Chemical Degradation Data","text":"regulatory evaluation chemical substances like plant protection products (pesticides), biocides chemicals, degradation data play important role. evaluation pesticide degradation experiments, detailed guidance various helpful tools developed detailed ‘Credits historical remarks’ . package aims provide one stop solution degradation kinetics, addressing modellers willing , even prefer work R.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"basic-usage","dir":"","previous_headings":"","what":"Basic usage","title":"Kinetic Evaluation of Chemical Degradation Data","text":"start, look code examples provided plot.mkinfit plot.mmkin, package vignettes FOCUS L FOCUS D.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"documentation","dir":"","previous_headings":"","what":"Documentation","title":"Kinetic Evaluation of Chemical Degradation Data","text":"HTML documentation latest version released CRAN available jrwb.de github. Documentation development version found ‘dev’ subdirectory. articles section documentation, can also find demonstrations application nonlinear hierarchical models, also known nonlinear mixed-effects models, complex data, including transformation products covariates.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"general","dir":"","previous_headings":"Features","what":"General","title":"Kinetic Evaluation of Chemical Degradation Data","text":"Highly flexible model specification using mkinmod, including equilibrium reactions using single first-order reversible binding (SFORB) model, automatically create two state variables observed variable. Model solution (forward modelling) function mkinpredict performed either using analytical solution case parent degradation simple models involving single transformation product, , eigenvalue based solution simple first-order (SFO) SFORB kinetics used model, using numeric solver deSolve package (default lsoda). usual one-sided t-test significant difference zero shown based estimators untransformed parameters. Summary plotting functions. summary mkinfit object fact full report give enough information able approximately reproduce fit tools. chi-squared error level defined FOCUS kinetics guidance (see ) calculated observed variable. ‘variance variable’ error model often fitted using Iteratively Reweighted Least Squares (IRLS) can specified error_model = \"obs\".","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"unique-in-mkin","dir":"","previous_headings":"Features","what":"Unique in mkin","title":"Kinetic Evaluation of Chemical Degradation Data","text":"Three different error models can selected using argument error_model mkinfit function. two-component error model similar one proposed Rocke Lorenzato can selected using argument error_model = \"tc\". Model comparisons using Akaike Information Criterion (AIC) supported can also used non-constant variance. cases FOCUS chi-squared error level meaningful. default, kinetic rate constants kinetic formation fractions transformed internally using transform_odeparms estimators can reasonably expected follow normal distribution. parameter estimates backtransformed match model definition, confidence intervals calculated standard errors also backtransformed correct scale, include meaningless values like negative rate constants formation fractions adding 1, occur single experiment single defined radiolabel position. metabolite decline phase described well SFO kinetics, SFORB kinetics can used metabolite. Mathematically, SFORB model equivalent DFOP model. However, SFORB model advantage mechanistic interpretation model parameters. Nonlinear mixed-effects models (hierarchical models) can created fits degradation model different datasets compound using nlme.mmkin saem.mmkin methods. Note convergence nlme fits depends quality data. Convergence better simple models data many groups (e.g. soils). saem method uses saemix package backend. Analytical solutions suitable use package implemented parent models important models including one metabolite (SFO-SFO DFOP-SFO). Fitting models saem.mmkin, makes use compiled ODE models mkin provides, longer run times (couple minutes hour).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"performance","dir":"","previous_headings":"Features","what":"Performance","title":"Kinetic Evaluation of Chemical Degradation Data","text":"Parallel fitting several models several datasets supported, see example plot.mmkin. C compiler installed, kinetic models compiled automatically generated C code, see vignette compiled_models. autogeneration C code inspired ccSolve package. Thanks Karline Soetaert work . Even compiler installed, many degradation models still give good performance, current versions mkin also analytical solutions models one metabolite, SFO SFORB used parent compound, Eigenvalue based solutions degradation model available.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"gui","dir":"","previous_headings":"","what":"GUI","title":"Kinetic Evaluation of Chemical Degradation Data","text":"graphical user interface may useful. Please refer documentation page installation instructions manual. supports evaluations using (generalised) nonlinear regression, simultaneous fits using nonlinear mixed-effects models.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"news","dir":"","previous_headings":"","what":"News","title":"Kinetic Evaluation of Chemical Degradation Data","text":"list changes latest CRAN release one github branch, e.g. main branch.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"credits-and-historical-remarks","dir":"","previous_headings":"","what":"Credits and historical remarks","title":"Kinetic Evaluation of Chemical Degradation Data","text":"mkin possible without underlying software stack consisting , among others, R package deSolve. previous version, mkin also using functionality FME package. Please refer package page CRAN full list imported suggested R packages. Also, Debian Linux, vim editor Nvim-R plugin invaluable development. mkin written without introduced regulatory fate modelling pesticides Adrian Gurney time Harlan Laboratories Ltd (formerly RCC Ltd). mkin greatly profits largely follows work done FOCUS Degradation Kinetics Workgroup, detailed guidance document 2006, slightly updated 2011 2014. Also, inspired first version KinGUI developed BayerCropScience, based MatLab runtime environment. companion package kinfit (now deprecated) started 2008 first published CRAN 01 May 2010. first mkin code published 11 May 2010 first CRAN version 18 May 2010. 2011, Bayer Crop Science started distribute R based successor KinGUI named KinGUII whose R code based mkin, added, among refinements, closed source graphical user interface (GUI), iteratively reweighted least squares (IRLS) optimisation variance observed variables, Markov Chain Monte Carlo (MCMC) simulation functionality, similar available e.g. FME package. Somewhat parallel, Syngenta sponsored development mkin KinGUII based GUI application called CAKE, also adds IRLS MCMC, limited model formulation, puts weight usability. CAKE available download CAKE website, can also find zip archive R scripts derived mkin, published GPL license. Finally, KineticEval, contains development scripts used KinGUII. Thanks René Lehmann, formerly working Umweltbundesamt, nice cooperation parameter transformations, especially isometric log-ratio transformation now used formation fractions case two transformation targets. Many inspirations improvements mkin resulted kinetic evaluations degradation data clients working Harlan Laboratories Eurofins Regulatory AG, now independent consultant. Funding received Umweltbundesamt course projects Project Number 27452 (Testing validation modelling software alternative ModelMaker 4.0, 2014-2015) Project Number 56703 (Optimization gmkin routine use Umweltbundesamt, 2015) Project Number 92570 (Update Project Number 27452, 2017-2018) Project Number 112407 (Testing feasibility using error model according Rocke Lorenzato realistic parameter estimates kinetic evaluation degradation data, 2018-2019) Project Number 120667 (Development objective criteria evaluation visual fit kinetic evaluation degradation data, 2019-2020) Project Number 146839 (Checking feasibility using mixed-effects models derivation kinetic modelling parameters degradation studies, 2020-2021) Project Number 173340 (Application nonlinear hierarchical models kinetic evaluation chemical degradation data) Thanks everyone involved collaboration support! Thanks due also Emmanuelle Comets, maintainer saemix package, interest support using SAEM algorithm implementation saemix evaluation chemical degradation data. Regarding application nonlinear mixed-effects models degradation data, von Götz et al (1999) already proposed use technique context environmental risk assessments pesticides. However, work apparently followed , independently arrive idea missed cite previous work topic first publications.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/index.html","id":"development","dir":"","previous_headings":"","what":"Development","title":"Kinetic Evaluation of Chemical Degradation Data","text":"Contributions welcome!","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"Provides convenient way compare different kinetic models fitted dataset.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"","code":"# S3 method for mmkin AIC(object, ..., k = 2) # S3 method for mmkin BIC(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"object object class mmkin, containing one column. ... compatibility generic method k generic method","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"generic method (numeric value single fits, dataframe several fits column).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the AIC for a column of an mmkin object — AIC.mmkin","text":"","code":"# skip, as it takes > 10 s on winbuilder f <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), list(\"FOCUS A\" = FOCUS_2006_A, \"FOCUS C\" = FOCUS_2006_C), cores = 1, quiet = TRUE) #> Warning: Optimisation did not converge: #> false convergence (8) # We get a warning because the FOMC model does not converge for the # FOCUS A dataset, as it is well described by SFO AIC(f[\"SFO\", \"FOCUS A\"]) # We get a single number for a single fit #> [1] 55.28197 AIC(f[[\"SFO\", \"FOCUS A\"]]) # or when extracting an mkinfit object #> [1] 55.28197 # For FOCUS A, the models fit almost equally well, so the higher the number # of parameters, the higher (worse) the AIC AIC(f[, \"FOCUS A\"]) #> df AIC #> SFO 3 55.28197 #> FOMC 4 57.28198 #> DFOP 5 59.28197 AIC(f[, \"FOCUS A\"], k = 0) # If we do not penalize additional parameters, we get nearly the same #> df AIC #> SFO 3 49.28197 #> FOMC 4 49.28198 #> DFOP 5 49.28197 BIC(f[, \"FOCUS A\"]) # Comparing the BIC gives a very similar picture #> df BIC #> SFO 3 55.52030 #> FOMC 4 57.59974 #> DFOP 5 59.67918 # For FOCUS C, the more complex models fit better AIC(f[, \"FOCUS C\"]) #> df AIC #> SFO 3 59.29336 #> FOMC 4 44.68652 #> DFOP 5 29.02372 BIC(f[, \"FOCUS C\"]) #> df BIC #> SFO 3 59.88504 #> FOMC 4 45.47542 #> DFOP 5 30.00984"},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":null,"dir":"Reference","previous_headings":"","what":"Export a list of datasets format to a CAKE study file — CAKE_export","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"addition datasets, pathways degradation model can specified well.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"","code":"CAKE_export( ds, map = c(parent = \"Parent\"), links = NA, filename = \"CAKE_export.csf\", path = \".\", overwrite = FALSE, study = \"Degradinol aerobic soil degradation\", description = \"\", time_unit = \"days\", res_unit = \"% AR\", comment = \"\", date = Sys.Date(), optimiser = \"IRLS\" )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"ds named list datasets long format compatible mkinfit. map character vector CAKE compartment names (Parent, A1, ...), named names used list datasets. links optional character vector target compartments, named names source compartments. order make easier, names used datasets supplied. filename write result. end .csf order compatible CAKE. path optional path output file. overwrite TRUE, existing files overwritten. study name study. description optional description. time_unit time unit residue data. res_unit unit used residues. comment optional comment. date date file creation. optimiser Can OLS IRLS.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Export a list of datasets format to a CAKE study file — CAKE_export","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":null,"dir":"Reference","previous_headings":"","what":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"five datasets extracted active substance evaluation dossier published EFSA. Kinetic evaluations shown datasets intended illustrate advance kinetic modelling. fact data results shown imply license use context pesticide registrations, use data may constrained data protection regulations.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"","code":"D24_2014"},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"mkindsg object grouping five datasets","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"Hellenic Ministry Rural Development Agriculture (2014) Final addendum Renewal Assessment Report - public version - 2,4-D Volume 3 Annex B.8 Fate behaviour environment https://open.efsa.europa.eu/study-inventory/EFSA-Q-2013-00811","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"Data first dataset p. 685. Data four datasets used preprocessed versions given kinetics section (p. 761ff.), exception residues smaller 1 DCP soil Site I2, values given p. 694 used. R code used create data object installed package 'dataset_generation' directory. code, page numbers given specific pieces information comments.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/D24_2014.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 — D24_2014","text":"","code":"print(D24_2014) #> <mkindsg> holding 5 mkinds objects #> Title $title: Aerobic soil degradation data on 2,4-D from the EU assessment in 2014 #> Occurrence of observed compounds $observed_n: #> D24 DCP DCA #> 5 4 4 #> Time normalisation factors $f_time_norm: #> [1] 1.6062378 0.7118732 0.7156063 0.7156063 0.8977124 #> Meta information $meta: #> study usda_soil_type study_moisture_ref_type #> Mississippi Cohen 1991 Silt loam <NA> #> Fayette Liu and Adelfinskaya 2011 Silt loam pF1 #> RefSol 03-G Liu and Adelfinskaya 2011 Loam pF1 #> Site E1 Liu and Adelfinskaya 2011 Loam pF1 #> Site I2 Liu and Adelfinskaya 2011 Loamy sand pF1 #> rel_moisture temperature #> Mississippi NA 25 #> Fayette 0.5 20 #> RefSol 03-G 0.5 20 #> Site E1 0.5 20 #> Site I2 0.5 20 # \\dontrun{ print(D24_2014$ds[[1]], data = TRUE) #> <mkinds> with $title: Mississippi #> Observed compounds $observed: D24 #> Sampling times $sampling_times: #> 0, 2, 4, 7, 15, 24, 35, 56, 71, 114, 183, 273, 365 #> With a maximum of 1 replicates #> time D24 #> 1 0 96.8 #> 2 2 81.0 #> 3 4 81.7 #> 4 7 88.2 #> 5 15 66.3 #> 6 24 72.9 #> 7 35 62.6 #> 8 56 54.6 #> 9 71 35.2 #> 10 114 18.0 #> 11 183 11.3 #> 12 273 9.9 #> 13 365 6.3 m_D24 = mkinmod(D24 = mkinsub(\"SFO\", to = \"DCP\"), DCP = mkinsub(\"SFO\", to = \"DCA\"), DCA = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded print(m_D24) #> <mkinmod> model generated with #> Use of formation fractions $use_of_ff: max #> Specification $spec: #> $D24 #> $type: SFO; $to: DCP; $sink: TRUE #> $DCP #> $type: SFO; $to: DCA; $sink: TRUE #> $DCA #> $type: SFO; $sink: TRUE #> Coefficient matrix $coefmat available #> Compiled model $cf available #> Differential equations: #> d_D24/dt = - k_D24 * D24 #> d_DCP/dt = + f_D24_to_DCP * k_D24 * D24 - k_DCP * DCP #> d_DCA/dt = + f_DCP_to_DCA * k_DCP * DCP - k_DCA * DCA m_D24_2 = mkinmod(D24 = mkinsub(\"DFOP\", to = \"DCP\"), DCP = mkinsub(\"SFO\", to = \"DCA\"), DCA = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded print(m_D24_2) #> <mkinmod> model generated with #> Use of formation fractions $use_of_ff: max #> Specification $spec: #> $D24 #> $type: DFOP; $to: DCP; $sink: TRUE #> $DCP #> $type: SFO; $to: DCA; $sink: TRUE #> $DCA #> $type: SFO; $sink: TRUE #> Compiled model $cf available #> Differential equations: #> d_D24/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * #> time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * time))) #> * D24 #> d_DCP/dt = + f_D24_to_DCP * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * #> exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 #> * time))) * D24 - k_DCP * DCP #> d_DCA/dt = + f_DCP_to_DCA * k_DCP * DCP - k_DCA * DCA # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Double First-Order in Parallel kinetics — DFOP.solution","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"Function describing decline defined starting value using sum two exponential decline functions.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"","code":"DFOP.solution(t, parent_0, k1, k2, g)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"t Time. parent_0 Starting value response variable time zero. k1 First kinetic constant. k2 Second kinetic constant. g Fraction starting value declining according first kinetic constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Double First-Order in Parallel kinetics — DFOP.solution","text":"","code":"plot(function(x) DFOP.solution(x, 100, 5, 0.5, 0.3), 0, 4, ylim = c(0,100))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Subsetting method for mmkin objects — [.mmkin","title":"Subsetting method for mmkin objects — [.mmkin","text":"Subsetting method mmkin objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Subsetting method for mmkin objects — [.mmkin","text":"","code":"# S3 method for mmkin [(x, i, j, ..., drop = FALSE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Subsetting method for mmkin objects — [.mmkin","text":"x mmkin object Row index selecting fits specific models j Column index selecting fits specific datasets ... used, satisfy generic method definition drop FALSE, method always returns mmkin object, otherwise either list mkinfit objects single mkinfit object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Subsetting method for mmkin objects — [.mmkin","text":"object class mmkin.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Subsetting method for mmkin objects — [.mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Subsetting method for mmkin objects — [.mmkin","text":"","code":"# Only use one core, to pass R CMD check --as-cran fits <- mmkin(c(\"SFO\", \"FOMC\"), list(B = FOCUS_2006_B, C = FOCUS_2006_C), cores = 1, quiet = TRUE) fits[\"FOMC\", ] #> <mmkin> object #> Status of individual fits: #> #> dataset #> model B C #> FOMC OK OK #> #> OK: No warnings fits[, \"B\"] #> <mmkin> object #> Status of individual fits: #> #> dataset #> model B #> SFO OK #> FOMC OK #> #> OK: No warnings fits[\"SFO\", \"B\"] #> <mmkin> object #> Status of individual fits: #> #> dataset #> model B #> SFO OK #> #> OK: No warnings head( # This extracts an mkinfit object with lots of components fits[[\"FOMC\", \"B\"]] ) #> $par #> parent_0 log_alpha log_beta sigma #> 99.666192 2.549850 5.050587 1.890202 #> #> $objective #> [1] 28.58291 #> #> $convergence #> [1] 0 #> #> $iterations #> [1] 21 #> #> $evaluations #> function gradient #> 25 78 #> #> $message #> [1] \"both X-convergence and relative convergence (5)\" #>"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":null,"dir":"Reference","previous_headings":"","what":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"table fitted parameters resulting DT50 DT90 values generated different software packages. Taken directly FOCUS (2006). results fitting data Topfit software removed, initial concentration parent compound fixed value 100 fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"","code":"FOCUS_2006_DFOP_ref_A_to_B"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"data frame containing following variables. package factor giving name software package M0 fitted initial concentration parent compound f fitted f parameter k1 fitted k1 parameter k2 fitted k2 parameter DT50 resulting half-life parent compound DT90 resulting DT90 parent compound dataset FOCUS dataset used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Results of fitting the DFOP model to Datasets A to B of FOCUS (2006) — FOCUS_2006_DFOP_ref_A_to_B","text":"","code":"data(FOCUS_2006_DFOP_ref_A_to_B)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":null,"dir":"Reference","previous_headings":"","what":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"table fitted parameters resulting DT50 DT90 values generated different software packages. Taken directly FOCUS (2006). results fitting data Topfit software removed, initial concentration parent compound fixed value 100 fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"","code":"FOCUS_2006_FOMC_ref_A_to_F"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"data frame containing following variables. package factor giving name software package M0 fitted initial concentration parent compound alpha fitted alpha parameter beta fitted beta parameter DT50 resulting half-life parent compound DT90 resulting DT90 parent compound dataset FOCUS dataset used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Results of fitting the FOMC model to Datasets A to F of FOCUS (2006) — FOCUS_2006_FOMC_ref_A_to_F","text":"","code":"data(FOCUS_2006_FOMC_ref_A_to_F)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":null,"dir":"Reference","previous_headings":"","what":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"table fitted parameters resulting DT50 DT90 values generated different software packages. Taken directly FOCUS (2006). results fitting data Topfit software removed, initial concentration parent compound fixed value 100 fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"","code":"FOCUS_2006_HS_ref_A_to_F"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"data frame containing following variables. package factor giving name software package M0 fitted initial concentration parent compound tb fitted tb parameter k1 fitted k1 parameter k2 fitted k2 parameter DT50 resulting half-life parent compound DT90 resulting DT90 parent compound dataset FOCUS dataset used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Results of fitting the HS model to Datasets A to F of FOCUS (2006) — FOCUS_2006_HS_ref_A_to_F","text":"","code":"data(FOCUS_2006_HS_ref_A_to_F)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":null,"dir":"Reference","previous_headings":"","what":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"table fitted parameters resulting DT50 DT90 values generated different software packages. Taken directly FOCUS (2006). results fitting data Topfit software removed, initial concentration parent compound fixed value 100 fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"","code":"FOCUS_2006_SFO_ref_A_to_F"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"data frame containing following variables. package factor giving name software package M0 fitted initial concentration parent compound k fitted first-order degradation rate constant DT50 resulting half-life parent compound DT90 resulting DT90 parent compound dataset FOCUS dataset used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Results of fitting the SFO model to Datasets A to F of FOCUS (2006) — FOCUS_2006_SFO_ref_A_to_F","text":"","code":"data(FOCUS_2006_SFO_ref_A_to_F)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":null,"dir":"Reference","previous_headings":"","what":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"Data taken FOCUS (2006), p. 258.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"","code":"FOCUS_2006_A FOCUS_2006_B FOCUS_2006_C FOCUS_2006_D FOCUS_2006_E FOCUS_2006_F"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"6 datasets observations following variables. name factor containing name observed variable time numeric vector containing time points value numeric vector containing concentrations percent applied radioactivity","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Datasets A to F from the FOCUS Kinetics report from 2006 — FOCUS_2006_datasets","text":"","code":"FOCUS_2006_C #> name time value #> 1 parent 0 85.1 #> 2 parent 1 57.9 #> 3 parent 3 29.9 #> 4 parent 7 14.6 #> 5 parent 14 9.7 #> 6 parent 28 6.6 #> 7 parent 63 4.0 #> 8 parent 91 3.9 #> 9 parent 119 0.6"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"First-Order Multi-Compartment kinetics — FOMC.solution","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"Function describing exponential decline defined starting value, decreasing rate constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"","code":"FOMC.solution(t, parent_0, alpha, beta)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"t Time. parent_0 Starting value response variable time zero. alpha Shape parameter determined coefficient variation rate constant values. beta Location parameter.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"form given differs slightly original reference Gustafson Holden (1990). parameter beta corresponds 1/beta original equation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"solution FOMC kinetic model reduces SFO.solution large values alpha beta \\(k = \\frac{\\beta}{\\alpha}\\).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics Gustafson DI Holden LR (1990) Nonlinear pesticide dissipation soil: new model based spatial variability. Environmental Science Technology 24, 1032-1038","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"First-Order Multi-Compartment kinetics — FOMC.solution","text":"","code":"plot(function(x) FOMC.solution(x, 100, 10, 2), 0, 2, ylim = c(0, 100))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Hockey-Stick kinetics — HS.solution","title":"Hockey-Stick kinetics — HS.solution","text":"Function describing two exponential decline functions break point .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Hockey-Stick kinetics — HS.solution","text":"","code":"HS.solution(t, parent_0, k1, k2, tb)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Hockey-Stick kinetics — HS.solution","text":"t Time. parent_0 Starting value response variable time zero. k1 First kinetic constant. k2 Second kinetic constant. tb Break point. time, exponential decline according k1 calculated, time, exponential decline proceeds according k2.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Hockey-Stick kinetics — HS.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Hockey-Stick kinetics — HS.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/HS.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Hockey-Stick kinetics — HS.solution","text":"","code":"plot(function(x) HS.solution(x, 100, 2, 0.3, 0.5), 0, 2, ylim=c(0,100))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Indeterminate order rate equation kinetics — IORE.solution","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"Function describing exponential decline defined starting value, concentration dependent rate constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"","code":"IORE.solution(t, parent_0, k__iore, N)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"t Time. parent_0 Starting value response variable time zero. k__iore Rate constant. Note depends concentration units used. N Exponent describing nonlinearity rate equation","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"solution IORE kinetic model reduces SFO.solution N = 1. parameters IORE model can transformed equivalent parameters FOMC mode - see NAFTA guidance details.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"NAFTA Technical Working Group Pesticides (dated) Guidance Evaluating Calculating Degradation Kinetics Environmental Media","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Indeterminate order rate equation kinetics — IORE.solution","text":"","code":"plot(function(x) IORE.solution(x, 100, 0.2, 1.3), 0, 2, ylim = c(0, 100)) # \\dontrun{ fit.fomc <- mkinfit(\"FOMC\", FOCUS_2006_C, quiet = TRUE) fit.iore <- mkinfit(\"IORE\", FOCUS_2006_C, quiet = TRUE) fit.iore.deS <- mkinfit(\"IORE\", FOCUS_2006_C, solution_type = \"deSolve\", quiet = TRUE) #> Error in is.loaded(initfunc, PACKAGE = dllname, type = \"\") : #> invalid 'PACKAGE' argument print(data.frame(fit.fomc$par, fit.iore$par, fit.iore.deS$par, row.names = paste(\"model par\", 1:4))) #> fit.fomc.par fit.iore.par fit.iore.deS.par #> model par 1 85.87489063 85.874890 85.874890 #> model par 2 0.05192238 -4.826631 -4.826631 #> model par 3 0.65096665 1.949403 1.949403 #> model par 4 1.85744396 1.857444 1.857444 print(rbind(fomc = endpoints(fit.fomc)$distimes, iore = endpoints(fit.iore)$distimes, iore.deS = endpoints(fit.iore)$distimes)) #> DT50 DT90 DT50back #> fomc 1.785233 15.1479 4.559973 #> iore 1.785233 15.1479 4.559973 #> iore.deS 1.785233 15.1479 4.559973 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":null,"dir":"Reference","previous_headings":"","what":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"Data taken US EPA (2015), p. 19 23.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"","code":"NAFTA_SOP_Appendix_B NAFTA_SOP_Appendix_D"},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"2 datasets observations following variables. name factor containing name observed variable time numeric vector containing time points value numeric vector containing concentrations","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"NAFTA (2011) Guidance evaluating calculating degradation kinetics environmental media. NAFTA Technical Working Group Pesticides https://www.epa.gov/pesticide-science--assessing-pesticide-risks/guidance-evaluating--calculating-degradation accessed 2019-02-22 US EPA (2015) Standard Operating Procedure Using NAFTA Guidance Calculate Representative Half-life Values Characterizing Pesticide Degradation https://www.epa.gov/pesticide-science--assessing-pesticide-risks/standard-operating-procedure-using-nafta-guidance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Example datasets from the NAFTA SOP published 2015 — NAFTA_SOP_2015","text":"","code":"nafta_evaluation <- nafta(NAFTA_SOP_Appendix_D, cores = 1) #> The SFO model is rejected as S_SFO is equal or higher than the critical value S_c #> The representative half-life of the IORE model is longer than the one corresponding #> to the terminal degradation rate found with the DFOP model. #> The representative half-life obtained from the DFOP model may be used print(nafta_evaluation) #> Sums of squares: #> SFO IORE DFOP #> 1378.6832 615.7730 517.8836 #> #> Critical sum of squares for checking the SFO model: #> [1] 717.4598 #> #> Parameters: #> $SFO #> Estimate Pr(>t) Lower Upper #> parent_0 83.7558 1.80e-14 77.18268 90.3288 #> k_parent 0.0017 7.43e-05 0.00112 0.0026 #> sigma 8.7518 1.22e-05 5.64278 11.8608 #> #> $IORE #> Estimate Pr(>t) Lower Upper #> parent_0 9.69e+01 NA 8.88e+01 1.05e+02 #> k__iore_parent 8.40e-14 NA 1.79e-18 3.94e-09 #> N_parent 6.68e+00 NA 4.19e+00 9.17e+00 #> sigma 5.85e+00 NA 3.76e+00 7.94e+00 #> #> $DFOP #> Estimate Pr(>t) Lower Upper #> parent_0 9.76e+01 1.94e-13 9.02e+01 1.05e+02 #> k1 4.24e-02 5.92e-03 2.03e-02 8.88e-02 #> k2 8.24e-04 6.48e-03 3.89e-04 1.75e-03 #> g 2.88e-01 2.47e-05 1.95e-01 4.03e-01 #> sigma 5.36e+00 2.22e-05 3.43e+00 7.30e+00 #> #> #> DTx values: #> DT50 DT90 DT50_rep #> SFO 407 1350 407 #> IORE 541 5190000 1560000 #> DFOP 429 2380 841 #> #> Representative half-life: #> [1] 841.41 plot(nafta_evaluation)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":null,"dir":"Reference","previous_headings":"","what":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"Data taken Attachment 1 SOP.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"","code":"NAFTA_SOP_Attachment"},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"list (NAFTA_SOP_Attachment) containing 16 datasets suitable evaluation nafta","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"NAFTA (2011) Guidance evaluating calculating degradation kinetics environmental media. NAFTA Technical Working Group Pesticides https://www.epa.gov/pesticide-science--assessing-pesticide-risks/guidance-evaluating--calculating-degradation accessed 2019-02-22 US EPA (2015) Standard Operating Procedure Using NAFTA Guidance Calculate Representative Half-life Values Characterizing Pesticide Degradation https://www.epa.gov/pesticide-science--assessing-pesticide-risks/standard-operating-procedure-using-nafta-guidance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Example datasets from Attachment 1 to the NAFTA SOP published 2015 — NAFTA_SOP_Attachment","text":"","code":"nafta_att_p5a <- nafta(NAFTA_SOP_Attachment[[\"p5a\"]], cores = 1) #> The SFO model is rejected as S_SFO is equal or higher than the critical value S_c #> The half-life obtained from the IORE model may be used print(nafta_att_p5a) #> Sums of squares: #> SFO IORE DFOP #> 465.21753 56.27506 32.06401 #> #> Critical sum of squares for checking the SFO model: #> [1] 64.4304 #> #> Parameters: #> $SFO #> Estimate Pr(>t) Lower Upper #> parent_0 95.8401 4.67e-21 92.245 99.4357 #> k_parent 0.0102 3.92e-12 0.009 0.0117 #> sigma 4.8230 3.81e-06 3.214 6.4318 #> #> $IORE #> Estimate Pr(>t) Lower Upper #> parent_0 1.01e+02 NA 9.91e+01 1.02e+02 #> k__iore_parent 1.54e-05 NA 4.08e-06 5.84e-05 #> N_parent 2.57e+00 NA 2.25e+00 2.89e+00 #> sigma 1.68e+00 NA 1.12e+00 2.24e+00 #> #> $DFOP #> Estimate Pr(>t) Lower Upper #> parent_0 9.99e+01 1.41e-26 98.8116 101.0810 #> k1 2.67e-02 5.05e-06 0.0243 0.0295 #> k2 3.41e-12 5.00e-01 0.0000 Inf #> g 6.47e-01 3.67e-06 0.6248 0.6677 #> sigma 1.27e+00 8.91e-06 0.8395 1.6929 #> #> #> DTx values: #> DT50 DT90 DT50_rep #> SFO 67.7 2.25e+02 6.77e+01 #> IORE 58.2 1.07e+03 3.22e+02 #> DFOP 55.5 3.70e+11 2.03e+11 #> #> Representative half-life: #> [1] 321.51 plot(nafta_att_p5a)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Single First-Order kinetics — SFO.solution","title":"Single First-Order kinetics — SFO.solution","text":"Function describing exponential decline defined starting value.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Single First-Order kinetics — SFO.solution","text":"","code":"SFO.solution(t, parent_0, k)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Single First-Order kinetics — SFO.solution","text":"t Time. parent_0 Starting value response variable time zero. k Kinetic rate constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Single First-Order kinetics — SFO.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Single First-Order kinetics — SFO.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Single First-Order kinetics — SFO.solution","text":"","code":"plot(function(x) SFO.solution(x, 100, 3), 0, 2)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Single First-Order Reversible Binding kinetics — SFORB.solution","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"Function describing solution differential equations describing kinetic model first-order terms two-way transfer free bound fraction, first-order degradation term free fraction. initial condition defined amount free fraction substance bound fraction.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"","code":"SFORB.solution(t, parent_0, k_12, k_21, k_1output)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"t Time. parent_0 Starting value response variable time zero. k_12 Kinetic constant describing transfer free bound. k_21 Kinetic constant describing transfer bound free. k_1output Kinetic constant describing degradation free fraction.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"value response variable, sum free bound fractions time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Single First-Order Reversible Binding kinetics — SFORB.solution","text":"","code":"plot(function(x) SFORB.solution(x, 100, 0.5, 2, 3), 0, 2)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":null,"dir":"Reference","previous_headings":"","what":"Add normally distributed errors to simulated kinetic degradation data — add_err","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"Normally distributed errors added data predicted specific degradation model using mkinpredict. variance error may depend predicted value specified standard deviation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"","code":"add_err( prediction, sdfunc, secondary = c(\"M1\", \"M2\"), n = 10, LOD = 0.1, reps = 2, digits = 1, seed = NA )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"prediction prediction kinetic model produced mkinpredict. sdfunc function taking predicted value argument returning standard deviation used generating random error terms value. secondary names state variables initial value zero n number datasets generated. LOD limit detection (LOD). Values LOD adding random error set NA. reps number replicates generated within datasets. digits number digits values rounded. seed seed used generation random numbers. NA, seed set.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"list datasets compatible mmkin, .e. components list datasets compatible mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"Ranke J Lehmann R (2015) t-test t-test, question. XV Symposium Pesticide Chemistry 2-4 September 2015, Piacenza, Italy https://jrwb.de/posters/piacenza_2015.pdf","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/add_err.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add normally distributed errors to simulated kinetic degradation data — add_err","text":"","code":"# The kinetic model m_SFO_SFO <- mkinmod(parent = mkinsub(\"SFO\", \"M1\"), M1 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded # Generate a prediction for a specific set of parameters sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) # This is the prediction used for the \"Type 2 datasets\" on the Piacenza poster # from 2015 d_SFO_SFO <- mkinpredict(m_SFO_SFO, c(k_parent = 0.1, f_parent_to_M1 = 0.5, k_M1 = log(2)/1000), c(parent = 100, M1 = 0), sampling_times) # Add an error term with a constant (independent of the value) standard deviation # of 10, and generate three datasets d_SFO_SFO_err <- add_err(d_SFO_SFO, function(x) 10, n = 3, seed = 123456789 ) # Name the datasets for nicer plotting names(d_SFO_SFO_err) <- paste(\"Dataset\", 1:3) # Name the model in the list of models (with only one member in this case) for # nicer plotting later on. Be quiet and use only one core not to offend CRAN # checks # \\dontrun{ f_SFO_SFO <- mmkin(list(\"SFO-SFO\" = m_SFO_SFO), d_SFO_SFO_err, cores = 1, quiet = TRUE) plot(f_SFO_SFO) # We would like to inspect the fit for dataset 3 more closely # Using double brackets makes the returned object an mkinfit object # instead of a list of mkinfit objects, so plot.mkinfit is used plot(f_SFO_SFO[[3]], show_residuals = TRUE) # If we use single brackets, we should give two indices (model and dataset), # and plot.mmkin is used plot(f_SFO_SFO[1, 3]) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Anova method for saem.mmkin objects — anova.saem.mmkin","title":"Anova method for saem.mmkin objects — anova.saem.mmkin","text":"Generate anova object. method calculate BIC saemix package. prominent anova methods, models sorted number parameters, tests (requested) always relative model previous line.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Anova method for saem.mmkin objects — anova.saem.mmkin","text":"","code":"# S3 method for saem.mmkin anova( object, ..., method = c(\"is\", \"lin\", \"gq\"), test = FALSE, model.names = NULL )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Anova method for saem.mmkin objects — anova.saem.mmkin","text":"object saem.mmkin object ... objects method Method likelihood calculation: \"\" (importance sampling), \"lin\" (linear approximation), \"gq\" (Gaussian quadrature). Passed saemix::logLik.SaemixObject test likelihood ratio test performed? TRUE, alternative models tested first model. done nested models. model.names Optional character vector model names","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Anova method for saem.mmkin objects — anova.saem.mmkin","text":"\"anova\" data frame; traditional (S3) result anova()","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate Akaike weights for model averaging — aw","title":"Calculate Akaike weights for model averaging — aw","text":"Akaike weights calculated based relative expected Kullback-Leibler information specified Burnham Anderson (2004).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate Akaike weights for model averaging — aw","text":"","code":"aw(object, ...) # S3 method for mkinfit aw(object, ...) # S3 method for mmkin aw(object, ...) # S3 method for mixed.mmkin aw(object, ...) # S3 method for multistart aw(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate Akaike weights for model averaging — aw","text":"object mmkin column object, containing two mkinfit models fitted data, mkinfit object. latter case, mkinfit objects fitted data specified dots arguments. ... used method mmkin column objects, mkinfit objects method mkinfit objects.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Calculate Akaike weights for model averaging — aw","text":"Burnham KP Anderson DR (2004) Multimodel Inference: Understanding AIC BIC Model Selection. Sociological Methods & Research 33(2) 261-304","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/aw.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate Akaike weights for model averaging — aw","text":"","code":"# \\dontrun{ f_sfo <- mkinfit(\"SFO\", FOCUS_2006_D, quiet = TRUE) f_dfop <- mkinfit(\"DFOP\", FOCUS_2006_D, quiet = TRUE) aw_sfo_dfop <- aw(f_sfo, f_dfop) sum(aw_sfo_dfop) #> [1] 1 aw_sfo_dfop # SFO gets more weight as it has less parameters and a similar fit #> [1] 0.5970258 0.4029742 f <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), list(\"FOCUS D\" = FOCUS_2006_D), cores = 1, quiet = TRUE) aw(f) #> [1] 0.4808722 0.1945539 0.3245740 sum(aw(f)) #> [1] 1 aw(f[c(\"SFO\", \"DFOP\")]) #> [1] 0.5970258 0.4029742 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/check_failed.html","id":null,"dir":"Reference","previous_headings":"","what":"Check if fit within an mhmkin object failed — check_failed","title":"Check if fit within an mhmkin object failed — check_failed","text":"Check fit within mhmkin object failed","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/check_failed.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check if fit within an mhmkin object failed — check_failed","text":"","code":"check_failed(x)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/check_failed.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check if fit within an mhmkin object failed — check_failed","text":"x object checked","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"default method 'quadratic' based quadratic approximation curvature likelihood function maximum likelihood parameter estimates. alternative method 'profile' based profile likelihood parameter. 'profile' method uses two nested optimisations can take long time, even parallelized specifying 'cores' unixoid platforms. speed method likely improved using method Venzon Moolgavkar (1988).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"","code":"# S3 method for mkinfit confint( object, parm, level = 0.95, alpha = 1 - level, cutoff, method = c(\"quadratic\", \"profile\"), transformed = TRUE, backtransform = TRUE, cores = parallel::detectCores(), rel_tol = 0.01, quiet = FALSE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"object mkinfit object parm vector names parameters given confidence intervals. missing, parameters considered. level confidence level required alpha allowed error probability, overrides 'level' specified. cutoff Possibility specify alternative cutoff difference log-likelihoods confidence boundary. Specifying explicit cutoff value overrides arguments 'level' 'alpha' method 'quadratic' method approximates likelihood function optimised parameters using second term Taylor expansion, using second derivative (hessian) contained object. 'profile' method searches parameter space cutoff confidence intervals means likelihood ratio test. transformed quadratic approximation used, applied likelihood based transformed parameters? backtransform approximate likelihood terms transformed parameters, backtransform parameters confidence intervals? cores number cores used multicore processing. Windows machines, cores > 1 currently supported. rel_tol method 'profile', accuracy lower upper bounds, relative estimate obtained quadratic method? quiet suppress message \"Profiling likelihood\" ... used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"matrix columns giving lower upper confidence limits parameter.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"Bates DM Watts GW (1988) Nonlinear regression analysis & applications Pawitan Y (2013) likelihood - Statistical modelling inference using likelihood. Clarendon Press, Oxford. Venzon DJ Moolgavkar SH (1988) Method Computing Profile-Likelihood Based Confidence Intervals, Applied Statistics, 37, 87–94.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Confidence intervals for parameters of mkinfit objects — confint.mkinfit","text":"","code":"f <- mkinfit(\"SFO\", FOCUS_2006_C, quiet = TRUE) confint(f, method = \"quadratic\") #> 2.5% 97.5% #> parent_0 71.8242430 93.1600766 #> k_parent 0.2109541 0.4440528 #> sigma 1.9778868 7.3681380 # \\dontrun{ confint(f, method = \"profile\") #> Profiling the likelihood #> 2.5% 97.5% #> parent_0 73.0641834 92.1392181 #> k_parent 0.2170293 0.4235348 #> sigma 3.1307772 8.0628314 # Set the number of cores for the profiling method for further examples if (identical(Sys.getenv(\"NOT_CRAN\"), \"true\")) { n_cores <- parallel::detectCores() - 1 } else { n_cores <- 1 } if (Sys.getenv(\"TRAVIS\") != \"\") n_cores = 1 if (Sys.info()[\"sysname\"] == \"Windows\") n_cores = 1 SFO_SFO <- mkinmod(parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\"), use_of_ff = \"min\", quiet = TRUE) SFO_SFO.ff <- mkinmod(parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) f_d_1 <- mkinfit(SFO_SFO, subset(FOCUS_2006_D, value != 0), quiet = TRUE) system.time(ci_profile <- confint(f_d_1, method = \"profile\", cores = 1, quiet = TRUE)) #> user system elapsed #> 1.203 0.000 1.203 # Using more cores does not save much time here, as parent_0 takes up most of the time # If we additionally exclude parent_0 (the confidence of which is often of # minor interest), we get a nice performance improvement if we use at least 4 cores system.time(ci_profile_no_parent_0 <- confint(f_d_1, method = \"profile\", c(\"k_parent_sink\", \"k_parent_m1\", \"k_m1_sink\", \"sigma\"), cores = n_cores)) #> Profiling the likelihood #> user system elapsed #> 0.438 0.097 0.301 ci_profile #> 2.5% 97.5% #> parent_0 96.456003640 1.027703e+02 #> k_parent_sink 0.040762501 5.549764e-02 #> k_parent_m1 0.046786482 5.500879e-02 #> k_m1_sink 0.003892605 6.702778e-03 #> sigma 2.535612399 3.985263e+00 ci_quadratic_transformed <- confint(f_d_1, method = \"quadratic\") ci_quadratic_transformed #> 2.5% 97.5% #> parent_0 96.403841640 1.027931e+02 #> k_parent_sink 0.041033378 5.596269e-02 #> k_parent_m1 0.046777902 5.511931e-02 #> k_m1_sink 0.004012217 6.897547e-03 #> sigma 2.396089689 3.854918e+00 ci_quadratic_untransformed <- confint(f_d_1, method = \"quadratic\", transformed = FALSE) ci_quadratic_untransformed #> 2.5% 97.5% #> parent_0 96.403841645 102.79312449 #> k_parent_sink 0.040485331 0.05535491 #> k_parent_m1 0.046611582 0.05494364 #> k_m1_sink 0.003835483 0.00668582 #> sigma 2.396089689 3.85491806 # Against the expectation based on Bates and Watts (1988), the confidence # intervals based on the internal parameter transformation are less # congruent with the likelihood based intervals. Note the superiority of the # interval based on the untransformed fit for k_m1_sink rel_diffs_transformed <- abs((ci_quadratic_transformed - ci_profile)/ci_profile) rel_diffs_untransformed <- abs((ci_quadratic_untransformed - ci_profile)/ci_profile) rel_diffs_transformed < rel_diffs_untransformed #> 2.5% 97.5% #> parent_0 FALSE FALSE #> k_parent_sink TRUE FALSE #> k_parent_m1 TRUE FALSE #> k_m1_sink FALSE FALSE #> sigma FALSE FALSE signif(rel_diffs_transformed, 3) #> 2.5% 97.5% #> parent_0 0.000541 0.000222 #> k_parent_sink 0.006650 0.008380 #> k_parent_m1 0.000183 0.002010 #> k_m1_sink 0.030700 0.029100 #> sigma 0.055000 0.032700 signif(rel_diffs_untransformed, 3) #> 2.5% 97.5% #> parent_0 0.000541 0.000222 #> k_parent_sink 0.006800 0.002570 #> k_parent_m1 0.003740 0.001180 #> k_m1_sink 0.014700 0.002530 #> sigma 0.055000 0.032700 # Investigate a case with formation fractions f_d_2 <- mkinfit(SFO_SFO.ff, subset(FOCUS_2006_D, value != 0), quiet = TRUE) ci_profile_ff <- confint(f_d_2, method = \"profile\", cores = n_cores) #> Profiling the likelihood ci_profile_ff #> 2.5% 97.5% #> parent_0 96.456003640 1.027703e+02 #> k_parent 0.090911032 1.071578e-01 #> k_m1 0.003892606 6.702775e-03 #> f_parent_to_m1 0.471328495 5.611550e-01 #> sigma 2.535612399 3.985263e+00 ci_quadratic_transformed_ff <- confint(f_d_2, method = \"quadratic\") ci_quadratic_transformed_ff #> 2.5% 97.5% #> parent_0 96.403833581 102.79311649 #> k_parent 0.090823771 0.10725430 #> k_m1 0.004012219 0.00689755 #> f_parent_to_m1 0.469118824 0.55959615 #> sigma 2.396089689 3.85491806 ci_quadratic_untransformed_ff <- confint(f_d_2, method = \"quadratic\", transformed = FALSE) ci_quadratic_untransformed_ff #> 2.5% 97.5% #> parent_0 96.403833586 1.027931e+02 #> k_parent 0.090491913 1.069035e-01 #> k_m1 0.003835485 6.685823e-03 #> f_parent_to_m1 0.469113477 5.598387e-01 #> sigma 2.396089689 3.854918e+00 rel_diffs_transformed_ff <- abs((ci_quadratic_transformed_ff - ci_profile_ff)/ci_profile_ff) rel_diffs_untransformed_ff <- abs((ci_quadratic_untransformed_ff - ci_profile_ff)/ci_profile_ff) # While the confidence interval for the parent rate constant is closer to # the profile based interval when using the internal parameter # transformation, the interval for the metabolite rate constant is 'better # without internal parameter transformation. rel_diffs_transformed_ff < rel_diffs_untransformed_ff #> 2.5% 97.5% #> parent_0 FALSE FALSE #> k_parent TRUE TRUE #> k_m1 FALSE FALSE #> f_parent_to_m1 TRUE FALSE #> sigma TRUE FALSE rel_diffs_transformed_ff #> 2.5% 97.5% #> parent_0 0.0005408690 0.0002217233 #> k_parent 0.0009598532 0.0009001864 #> k_m1 0.0307283045 0.0290588367 #> f_parent_to_m1 0.0046881768 0.0027780062 #> sigma 0.0550252516 0.0327066836 rel_diffs_untransformed_ff #> 2.5% 97.5% #> parent_0 0.0005408689 0.0002217233 #> k_parent 0.0046102155 0.0023732280 #> k_m1 0.0146740687 0.0025291815 #> f_parent_to_m1 0.0046995210 0.0023457712 #> sigma 0.0550252516 0.0327066836 # The profiling for the following fit does not finish in a reasonable time, # therefore we use the quadratic approximation m_synth_DFOP_par <- mkinmod(parent = mkinsub(\"DFOP\", c(\"M1\", \"M2\")), M1 = mkinsub(\"SFO\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\", quiet = TRUE) DFOP_par_c <- synthetic_data_for_UBA_2014[[12]]$data f_tc_2 <- mkinfit(m_synth_DFOP_par, DFOP_par_c, error_model = \"tc\", error_model_algorithm = \"direct\", quiet = TRUE) confint(f_tc_2, method = \"quadratic\") #> 2.5% 97.5% #> parent_0 94.596181875 106.19936592 #> k_M1 0.037605432 0.04490757 #> k_M2 0.008568745 0.01087675 #> f_parent_to_M1 0.021464676 0.62023880 #> f_parent_to_M2 0.015167158 0.37975350 #> k1 0.273897535 0.33388072 #> k2 0.018614555 0.02250379 #> g 0.671943738 0.73583261 #> sigma_low 0.251283679 0.83992102 #> rsd_high 0.040411022 0.07662008 confint(f_tc_2, \"parent_0\", method = \"quadratic\") #> 2.5% 97.5% #> parent_0 94.59618 106.1994 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":null,"dir":"Reference","previous_headings":"","what":"Create degradation functions for known analytical solutions — create_deg_func","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"Create degradation functions known analytical solutions","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"","code":"create_deg_func(spec, use_of_ff = c(\"min\", \"max\"))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"spec List model specifications contained mkinmod objects use_of_ff Minimum maximum use formation fractions","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"Degradation function attached mkinmod objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create degradation functions for known analytical solutions — create_deg_func","text":"","code":"SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded FOCUS_D <- subset(FOCUS_2006_D, value != 0) # to avoid warnings fit_1 <- mkinfit(SFO_SFO, FOCUS_D, solution_type = \"analytical\", quiet = TRUE) # \\dontrun{ fit_2 <- mkinfit(SFO_SFO, FOCUS_D, solution_type = \"deSolve\", quiet = TRUE) if (require(rbenchmark)) benchmark( analytical = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"analytical\", quiet = TRUE), deSolve = mkinfit(SFO_SFO, FOCUS_D, solution_type = \"deSolve\", quiet = TRUE), replications = 2) #> Loading required package: rbenchmark #> test replications elapsed relative user.self sys.self user.child #> 1 analytical 2 0.233 1.000 0.232 0.001 0 #> 2 deSolve 2 0.293 1.258 0.293 0.000 0 #> sys.child #> 1 0 #> 2 0 DFOP_SFO <- mkinmod( parent = mkinsub(\"DFOP\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded benchmark( analytical = mkinfit(DFOP_SFO, FOCUS_D, solution_type = \"analytical\", quiet = TRUE), deSolve = mkinfit(DFOP_SFO, FOCUS_D, solution_type = \"deSolve\", quiet = TRUE), replications = 2) #> test replications elapsed relative user.self sys.self user.child #> 1 analytical 2 0.375 1.000 0.375 0 0 #> 2 deSolve 2 0.508 1.355 0.508 0 0 #> sys.child #> 1 0 #> 2 0 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":null,"dir":"Reference","previous_headings":"","what":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"datasets extracted active substance evaluation dossier published EFSA. Kinetic evaluations shown datasets intended illustrate advance kinetic modelling. fact data results shown imply license use context pesticide registrations, use data may constrained data protection regulations.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"","code":"dimethenamid_2018"},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"mkindsg object grouping seven datasets meta information","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"Rapporteur Member State Germany, Co-Rapporteur Member State Bulgaria (2018) Renewal Assessment Report Dimethenamid-P Volume 3 - B.8 Environmental fate behaviour Rev. 2 - November 2017 https://open.efsa.europa.eu/study-inventory/EFSA-Q-2014-00716","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"R code used create data object installed package 'dataset_generation' directory. code, page numbers given specific pieces information comments.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Aerobic soil degradation data on dimethenamid and dimethenamid-P from the EU assessment in 2018 — dimethenamid_2018","text":"","code":"print(dimethenamid_2018) #> <mkindsg> holding 7 mkinds objects #> Title $title: Aerobic soil degradation data on dimethenamid-P from the EU assessment in 2018 #> Occurrence of observed compounds $observed_n: #> DMTAP M23 M27 M31 DMTA #> 3 7 7 7 4 #> Time normalisation factors $f_time_norm: #> [1] 1.0000000 0.9706477 1.2284784 1.2284784 0.6233856 0.7678922 0.6733938 #> Meta information $meta: #> study usda_soil_type study_moisture_ref_type rel_moisture #> Calke Unsworth 2014 Sandy loam pF2 1.00 #> Borstel Staudenmaier 2009 Sand pF1 0.50 #> Elliot 1 Wendt 1997 Clay loam pF2.5 0.75 #> Elliot 2 Wendt 1997 Clay loam pF2.5 0.75 #> Flaach König 1996 Sandy clay loam pF1 0.40 #> BBA 2.2 König 1995 Loamy sand pF1 0.40 #> BBA 2.3 König 1995 Sandy loam pF1 0.40 #> study_ref_moisture temperature #> Calke NA 20 #> Borstel 23.00 20 #> Elliot 1 33.37 23 #> Elliot 2 33.37 23 #> Flaach NA 20 #> BBA 2.2 NA 20 #> BBA 2.3 NA 20 dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] ds_i }) names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) dmta_ds[[\"Elliot 1\"]] <- NULL dmta_ds[[\"Elliot 2\"]] <- NULL # \\dontrun{ # We don't use DFOP for the parent compound, as this gives numerical # instabilities in the fits sfo_sfo3p <- mkinmod( DMTA = mkinsub(\"SFO\", c(\"M23\", \"M27\", \"M31\")), M23 = mkinsub(\"SFO\"), M27 = mkinsub(\"SFO\"), M31 = mkinsub(\"SFO\", \"M27\", sink = FALSE), quiet = TRUE ) dmta_sfo_sfo3p_tc <- mmkin(list(\"SFO-SFO3+\" = sfo_sfo3p), dmta_ds, error_model = \"tc\", quiet = TRUE) print(dmta_sfo_sfo3p_tc) #> <mmkin> object #> Status of individual fits: #> #> dataset #> model Calke Borstel Flaach BBA 2.2 BBA 2.3 Elliot #> SFO-SFO3+ OK OK OK OK OK OK #> #> OK: No warnings # The default (test_log_parms = FALSE) gives an undue # influence of ill-defined rate constants that have # extremely small values: plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = FALSE) # If we disregards ill-defined rate constants, the results # look more plausible, but the truth is likely to be in # between these variants plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = TRUE) # We can also specify a default value for the failing # log parameters, to mimic FOCUS guidance plot(mixed(dmta_sfo_sfo3p_tc), test_log_parms = TRUE, default_log_parms = log(2)/1000) # As these attempts are not satisfying, we use nonlinear mixed-effects models # f_dmta_nlme_tc <- nlme(dmta_sfo_sfo3p_tc) # nlme reaches maxIter = 50 without convergence f_dmta_saem_tc <- saem(dmta_sfo_sfo3p_tc) # I am commenting out the convergence plot as rendering them # with pkgdown fails (at least without further tweaks to the # graphics device used) #saemix::plot(f_dmta_saem_tc$so, plot.type = \"convergence\") summary(f_dmta_saem_tc) #> saemix version used for fitting: 3.2 #> mkin version used for pre-fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:14:53 2023 #> Date of summary: Thu Nov 16 04:14:53 2023 #> #> Equations: #> d_DMTA/dt = - k_DMTA * DMTA #> d_M23/dt = + f_DMTA_to_M23 * k_DMTA * DMTA - k_M23 * M23 #> d_M27/dt = + f_DMTA_to_M27 * k_DMTA * DMTA - k_M27 * M27 + k_M31 * M31 #> d_M31/dt = + f_DMTA_to_M31 * k_DMTA * DMTA - k_M31 * M31 #> #> Data: #> 563 observations of 4 variable(s) grouped in 6 datasets #> #> Model predictions using solution type deSolve #> #> Fitted in 302.335 s #> Using 300, 100 iterations and 9 chains #> #> Variance model: Two-component variance function #> #> Starting values for degradation parameters: #> DMTA_0 log_k_DMTA log_k_M23 log_k_M27 log_k_M31 f_DMTA_ilr_1 #> 95.5662 -2.9048 -3.8130 -4.1600 -4.1486 0.1341 #> f_DMTA_ilr_2 f_DMTA_ilr_3 #> 0.1385 -1.6700 #> #> Fixed degradation parameter values: #> None #> #> Starting values for random effects (square root of initial entries in omega): #> DMTA_0 log_k_DMTA log_k_M23 log_k_M27 log_k_M31 f_DMTA_ilr_1 #> DMTA_0 4.802 0.0000 0.0000 0.000 0.0000 0.0000 #> log_k_DMTA 0.000 0.9834 0.0000 0.000 0.0000 0.0000 #> log_k_M23 0.000 0.0000 0.6983 0.000 0.0000 0.0000 #> log_k_M27 0.000 0.0000 0.0000 1.028 0.0000 0.0000 #> log_k_M31 0.000 0.0000 0.0000 0.000 0.9841 0.0000 #> f_DMTA_ilr_1 0.000 0.0000 0.0000 0.000 0.0000 0.7185 #> f_DMTA_ilr_2 0.000 0.0000 0.0000 0.000 0.0000 0.0000 #> f_DMTA_ilr_3 0.000 0.0000 0.0000 0.000 0.0000 0.0000 #> f_DMTA_ilr_2 f_DMTA_ilr_3 #> DMTA_0 0.0000 0.0000 #> log_k_DMTA 0.0000 0.0000 #> log_k_M23 0.0000 0.0000 #> log_k_M27 0.0000 0.0000 #> log_k_M31 0.0000 0.0000 #> f_DMTA_ilr_1 0.0000 0.0000 #> f_DMTA_ilr_2 0.7378 0.0000 #> f_DMTA_ilr_3 0.0000 0.4451 #> #> Starting values for error model parameters: #> a.1 b.1 #> 1 1 #> #> Results: #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 2276 2273 -1120 #> #> Optimised parameters: #> est. lower upper #> DMTA_0 88.4862 84.1127 92.8598 #> log_k_DMTA -3.0512 -3.5674 -2.5351 #> log_k_M23 -4.0576 -4.9013 -3.2139 #> log_k_M27 -3.8584 -4.2572 -3.4595 #> log_k_M31 -3.9779 -4.4844 -3.4714 #> f_DMTA_ilr_1 0.1264 -0.2186 0.4714 #> f_DMTA_ilr_2 0.1509 -0.2547 0.5565 #> f_DMTA_ilr_3 -1.3891 -1.6962 -1.0819 #> a.1 0.9196 0.8231 1.0161 #> b.1 0.1377 0.1203 0.1551 #> SD.DMTA_0 3.5956 -0.8154 8.0066 #> SD.log_k_DMTA 0.6437 0.2784 1.0091 #> SD.log_k_M23 0.9929 0.3719 1.6139 #> SD.log_k_M27 0.4530 0.1522 0.7537 #> SD.log_k_M31 0.5773 0.1952 0.9595 #> SD.f_DMTA_ilr_1 0.4063 0.1505 0.6621 #> SD.f_DMTA_ilr_2 0.4800 0.1817 0.7783 #> SD.f_DMTA_ilr_3 0.3582 0.1350 0.5814 #> #> Correlation: #> DMTA_0 l__DMTA lg__M23 lg__M27 lg__M31 f_DMTA__1 f_DMTA__2 #> log_k_DMTA 0.0306 #> log_k_M23 -0.0234 -0.0032 #> log_k_M27 -0.0380 -0.0049 0.0041 #> log_k_M31 -0.0247 -0.0031 0.0022 0.0817 #> f_DMTA_ilr_1 -0.0046 -0.0006 0.0425 -0.0438 0.0319 #> f_DMTA_ilr_2 -0.0008 -0.0002 0.0216 -0.0267 -0.0890 -0.0349 #> f_DMTA_ilr_3 -0.1805 -0.0136 0.0434 0.0791 0.0390 -0.0061 0.0053 #> #> Random effects: #> est. lower upper #> SD.DMTA_0 3.5956 -0.8154 8.0066 #> SD.log_k_DMTA 0.6437 0.2784 1.0091 #> SD.log_k_M23 0.9929 0.3719 1.6139 #> SD.log_k_M27 0.4530 0.1522 0.7537 #> SD.log_k_M31 0.5773 0.1952 0.9595 #> SD.f_DMTA_ilr_1 0.4063 0.1505 0.6621 #> SD.f_DMTA_ilr_2 0.4800 0.1817 0.7783 #> SD.f_DMTA_ilr_3 0.3582 0.1350 0.5814 #> #> Variance model: #> est. lower upper #> a.1 0.9196 0.8231 1.0161 #> b.1 0.1377 0.1203 0.1551 #> #> Backtransformed parameters: #> est. lower upper #> DMTA_0 88.48621 84.112654 92.85977 #> k_DMTA 0.04730 0.028230 0.07926 #> k_M23 0.01729 0.007437 0.04020 #> k_M27 0.02110 0.014162 0.03144 #> k_M31 0.01872 0.011283 0.03107 #> f_DMTA_to_M23 0.14551 NA NA #> f_DMTA_to_M27 0.12169 NA NA #> f_DMTA_to_M31 0.11062 NA NA #> #> Resulting formation fractions: #> ff #> DMTA_M23 0.1455 #> DMTA_M27 0.1217 #> DMTA_M31 0.1106 #> DMTA_sink 0.6222 #> #> Estimated disappearance times: #> DT50 DT90 #> DMTA 14.65 48.68 #> M23 40.09 133.17 #> M27 32.85 109.11 #> M31 37.02 122.97 # As the confidence interval for the random effects of DMTA_0 # includes zero, we could try an alternative model without # such random effects # f_dmta_saem_tc_2 <- saem(dmta_sfo_sfo3p_tc, # covariance.model = diag(c(0, rep(1, 7)))) # saemix::plot(f_dmta_saem_tc_2$so, plot.type = \"convergence\") # This does not perform better judged by AIC and BIC # saemix::compare.saemix(f_dmta_saem_tc$so, f_dmta_saem_tc_2$so) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html","id":null,"dir":"Reference","previous_headings":"","what":"Synthetic data for hierarchical kinetic degradation models — ds_mixed","title":"Synthetic data for hierarchical kinetic degradation models — ds_mixed","text":"R code used create data object installed package 'dataset_generation' directory.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Synthetic data for hierarchical kinetic degradation models — ds_mixed","text":"","code":"# \\dontrun{ sfo_mmkin <- mmkin(\"SFO\", ds_sfo, quiet = TRUE, error_model = \"tc\", cores = 15) sfo_saem <- saem(sfo_mmkin, no_random_effect = \"parent_0\") plot(sfo_saem) # } # This is the code used to generate the datasets cat(readLines(system.file(\"dataset_generation/ds_mixed.R\", package = \"mkin\")), sep = \"\\n\") #> # Synthetic data for hierarchical kinetic models #> # Refactored version of the code previously in tests/testthat/setup_script.R #> # The number of datasets was 3 for FOMC, and 10 for HS in that script, now it #> # is always 15 for consistency #> #> library(mkin) # We use mkinmod and mkinpredict #> sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) #> n <- 15 #> log_sd <- 0.3 #> err_1 = list(const = 1, prop = 0.05) #> tc <- function(value) sigma_twocomp(value, err_1$const, err_1$prop) #> const <- function(value) 2 #> #> set.seed(123456) #> SFO <- mkinmod(parent = mkinsub(\"SFO\")) #> sfo_pop <- list(parent_0 = 100, k_parent = 0.03) #> sfo_parms <- as.matrix(data.frame( #> k_parent = rlnorm(n, log(sfo_pop$k_parent), log_sd))) #> set.seed(123456) #> ds_sfo <- lapply(1:n, function(i) { #> ds_mean <- mkinpredict(SFO, sfo_parms[i, ], #> c(parent = sfo_pop$parent_0), sampling_times) #> add_err(ds_mean, tc, n = 1)[[1]] #> }) #> attr(ds_sfo, \"pop\") <- sfo_pop #> attr(ds_sfo, \"parms\") <- sfo_parms #> #> set.seed(123456) #> FOMC <- mkinmod(parent = mkinsub(\"FOMC\")) #> fomc_pop <- list(parent_0 = 100, alpha = 2, beta = 8) #> fomc_parms <- as.matrix(data.frame( #> alpha = rlnorm(n, log(fomc_pop$alpha), 0.4), #> beta = rlnorm(n, log(fomc_pop$beta), 0.2))) #> set.seed(123456) #> ds_fomc <- lapply(1:n, function(i) { #> ds_mean <- mkinpredict(FOMC, fomc_parms[i, ], #> c(parent = fomc_pop$parent_0), sampling_times) #> add_err(ds_mean, tc, n = 1)[[1]] #> }) #> attr(ds_fomc, \"pop\") <- fomc_pop #> attr(ds_fomc, \"parms\") <- fomc_parms #> #> set.seed(123456) #> DFOP <- mkinmod(parent = mkinsub(\"DFOP\")) #> dfop_pop <- list(parent_0 = 100, k1 = 0.06, k2 = 0.015, g = 0.4) #> dfop_parms <- as.matrix(data.frame( #> k1 = rlnorm(n, log(dfop_pop$k1), log_sd), #> k2 = rlnorm(n, log(dfop_pop$k2), log_sd), #> g = plogis(rnorm(n, qlogis(dfop_pop$g), log_sd)))) #> set.seed(123456) #> ds_dfop <- lapply(1:n, function(i) { #> ds_mean <- mkinpredict(DFOP, dfop_parms[i, ], #> c(parent = dfop_pop$parent_0), sampling_times) #> add_err(ds_mean, tc, n = 1)[[1]] #> }) #> attr(ds_dfop, \"pop\") <- dfop_pop #> attr(ds_dfop, \"parms\") <- dfop_parms #> #> set.seed(123456) #> HS <- mkinmod(parent = mkinsub(\"HS\")) #> hs_pop <- list(parent_0 = 100, k1 = 0.08, k2 = 0.01, tb = 15) #> hs_parms <- as.matrix(data.frame( #> k1 = rlnorm(n, log(hs_pop$k1), log_sd), #> k2 = rlnorm(n, log(hs_pop$k2), log_sd), #> tb = rlnorm(n, log(hs_pop$tb), 0.1))) #> set.seed(123456) #> ds_hs <- lapply(1:n, function(i) { #> ds_mean <- mkinpredict(HS, hs_parms[i, ], #> c(parent = hs_pop$parent_0), sampling_times) #> add_err(ds_mean, const, n = 1)[[1]] #> }) #> attr(ds_hs, \"pop\") <- hs_pop #> attr(ds_hs, \"parms\") <- hs_parms #> #> set.seed(123456) #> DFOP_SFO <- mkinmod( #> parent = mkinsub(\"DFOP\", \"m1\"), #> m1 = mkinsub(\"SFO\"), #> quiet = TRUE) #> dfop_sfo_pop <- list(parent_0 = 100, #> k_m1 = 0.007, f_parent_to_m1 = 0.5, #> k1 = 0.1, k2 = 0.02, g = 0.5) #> dfop_sfo_parms <- as.matrix(data.frame( #> k1 = rlnorm(n, log(dfop_sfo_pop$k1), log_sd), #> k2 = rlnorm(n, log(dfop_sfo_pop$k2), log_sd), #> g = plogis(rnorm(n, qlogis(dfop_sfo_pop$g), log_sd)), #> f_parent_to_m1 = plogis(rnorm(n, #> qlogis(dfop_sfo_pop$f_parent_to_m1), log_sd)), #> k_m1 = rlnorm(n, log(dfop_sfo_pop$k_m1), log_sd))) #> ds_dfop_sfo_mean <- lapply(1:n, #> function(i) { #> mkinpredict(DFOP_SFO, dfop_sfo_parms[i, ], #> c(parent = dfop_sfo_pop$parent_0, m1 = 0), sampling_times) #> } #> ) #> set.seed(123456) #> ds_dfop_sfo <- lapply(ds_dfop_sfo_mean, function(ds) { #> add_err(ds, #> sdfunc = function(value) sqrt(err_1$const^2 + value^2 * err_1$prop^2), #> n = 1, secondary = \"m1\")[[1]] #> }) #> attr(ds_dfop_sfo, \"pop\") <- dfop_sfo_pop #> attr(ds_dfop_sfo, \"parms\") <- dfop_sfo_parms #> #> #save(ds_sfo, ds_fomc, ds_dfop, ds_hs, ds_dfop_sfo, file = \"data/ds_mixed.rda\", version = 2)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"function calculates DT50 DT90 values well formation fractions kinetic models fitted mkinfit. SFORB model specified one parents metabolites, Eigenvalues returned. equivalent rate constants DFOP model, advantage SFORB model can also used metabolites.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"","code":"endpoints(fit, covariates = NULL, covariate_quantile = 0.5)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"fit object class mkinfit, nlme.mmkin saem.mmkin, another object list components mkinmod containing mkinmod degradation model, two numeric vectors, bparms.optim bparms.fixed, contain parameter values model. covariates Numeric vector covariate values variables covariate models object. given, overrides 'covariate_quantile'. covariate_quantile argument effect fitted object covariate models. , default show endpoints median covariate values (50th percentile).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"list matrix dissipation times named distimes, , applicable, vector formation fractions named ff , SFORB model use, vector eigenvalues SFORB models, equivalent DFOP rate constants","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"Additional DT50 values calculated FOMC DT90 k1 k2 HS DFOP, well Eigenvalues b1 b2 SFORB models","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"function used internally summary.mkinfit, summary.nlme.mmkin summary.saem.mmkin.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/endpoints.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to calculate endpoints for further use from kinetic models fitted\nwith mkinfit — endpoints","text":"","code":"fit <- mkinfit(\"FOMC\", FOCUS_2006_C, quiet = TRUE) endpoints(fit) #> $distimes #> DT50 DT90 DT50back #> parent 1.785233 15.1479 4.559973 #> # \\dontrun{ fit_2 <- mkinfit(\"DFOP\", FOCUS_2006_C, quiet = TRUE) endpoints(fit_2) #> $distimes #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 1.886925 21.25106 6.397207 1.508293 38.83438 #> fit_3 <- mkinfit(\"SFORB\", FOCUS_2006_C, quiet = TRUE) endpoints(fit_3) #> $ff #> parent_free #> 1 #> #> $SFORB #> parent_b1 parent_b2 parent_g #> 0.4595574 0.0178488 0.8539454 #> #> $distimes #> DT50 DT90 DT50back DT50_parent_b1 DT50_parent_b2 #> parent 1.886925 21.25106 6.397208 1.508293 38.83438 #> # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":null,"dir":"Reference","previous_headings":"","what":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"12 datasets extracted active substance evaluation dossiers published EFSA. Kinetic evaluations shown datasets intended illustrate advance error model specifications. fact data results shown imply license use context pesticide registrations, use data may constrained data protection regulations. Preprocessing data performed based recommendations FOCUS kinetics workgroup (FOCUS, 2014) described . Datasets 1 2 Renewal Assessment Report (RAR) imazamox (France, 2015, p. 15). setting values reported zero, LOQ 0.1 assumed. Metabolite residues reported day zero added parent compound residues. Datasets 3 4 Renewal Assessment Report (RAR) isofetamid (Belgium, 2014, p. 8) show data two different radiolabels. dataset 4, value given metabolite day zero sampling replicate B added parent compound, following respective FOCUS recommendation. Dataset 5 Renewal Assessment Report (RAR) ethofumesate (Austria, 2015, p. 16). Datasets 6 10 Renewal Assessment Report (RAR) glyphosate (Germany, 2013, pages 8, 28, 50, 51). initial sampling, residues given metabolite added parent value, following recommendation FOCUS kinetics workgroup. Dataset 11 Renewal Assessment Report (RAR) 2,4-D (Hellas, 2013, p. 644). Values reported zero set NA, exception day three sampling metabolite A2, set one half LOD reported 1% AR. Dataset 12 Renewal Assessment Report (RAR) thifensulfuron-methyl (United Kingdom, 2014, p. 81).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"","code":"experimental_data_for_UBA_2019"},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"list containing twelve datasets R6 class defined mkinds, containing, among others, following components title name dataset, e.g. Soil 1 data data frame data form expected mkinfit","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"Austria (2015). Ethofumesate Renewal Assessment Report Volume 3 Annex B.8 () Belgium (2014). Isofetamid (IKF-5411) Draft Assessment Report Volume 3 Annex B.8 () France (2015). Imazamox Draft Renewal Assessment Report Volume 3 Annex B.8 () FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics Germany (2013). Renewal Assessment Report Glyphosate Volume 3 Annex B.8: Environmental Fate Behaviour Hellas (2013). Renewal Assessment Report 2,4-D Volume 3 Annex B.8: Fate behaviour environment Ranke (2019) Documentation results obtained error model expertise written German Umweltbundesamt. United Kingdom (2014). Thifensulfuron-methyl - Annex B.8 (Volume 3) Report Proposed Decision United Kingdom made European Commission Regulation (EC) . 1141/2010 renewal active substance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Experimental datasets used for development and testing of error models — experimental_data_for_UBA_2019","text":"","code":"# \\dontrun{ # Model definitions sfo_sfo <- mkinmod( parent = mkinsub(\"SFO\", to = \"A1\"), A1 = mkinsub(\"SFO\"), use_of_ff = \"max\" ) #> Temporary DLL for differentials generated and loaded dfop_sfo <- mkinmod( parent = mkinsub(\"DFOP\", to = \"A1\"), A1 = mkinsub(\"SFO\"), use_of_ff = \"max\" ) #> Temporary DLL for differentials generated and loaded sfo_sfo_sfo <- mkinmod( parent = mkinsub(\"SFO\", to = \"A1\"), A1 = mkinsub(\"SFO\", to = \"A2\"), A2 = mkinsub(\"SFO\"), use_of_ff = \"max\" ) #> Temporary DLL for differentials generated and loaded dfop_sfo_sfo <- mkinmod( parent = mkinsub(\"DFOP\", to = \"A1\"), A1 = mkinsub(\"SFO\", to = \"A2\"), A2 = mkinsub(\"SFO\"), use_of_ff = \"max\" ) #> Temporary DLL for differentials generated and loaded d_1_2 <- lapply(experimental_data_for_UBA_2019[1:2], function(x) x$data) names(d_1_2) <- paste(\"Soil\", 1:2) f_1_2_tc <- mmkin(list(\"DFOP-SFO-SFO\" = dfop_sfo_sfo), d_1_2, error_model = \"tc\") plot(f_1_2_tc, resplot = \"errmod\") # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":null,"dir":"Reference","previous_headings":"","what":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"Time step normalisation factors aerobic soil degradation described Appendix 8 FOCUS kinetics guidance (FOCUS 2014, p. 369).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"","code":"f_time_norm_focus(object, ...) # S3 method for numeric f_time_norm_focus( object, moisture = NA, field_moisture = NA, temperature = object, Q10 = 2.58, walker = 0.7, f_na = NA, ... ) # S3 method for mkindsg f_time_norm_focus( object, study_moisture_ref_source = c(\"auto\", \"meta\", \"focus\"), Q10 = 2.58, walker = 0.7, f_na = NA, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"object object containing information used calculations ... Currently used moisture Numeric vector moisture contents \\% w/w field_moisture Numeric vector moisture contents field capacity (pF2) \\% w/w temperature Numeric vector temperatures °C Q10 Q10 value used temperature normalisation walker Walker exponent used moisture normalisation f_na factor use NA values. set NA, factors complete cases returned. study_moisture_ref_source Source reference value used calculate study moisture. 'auto', preference given reference moisture given meta information, otherwise focus soil moisture soil class used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Normalisation factors for aerobic soil degradation according to FOCUS guidance — f_time_norm_focus","text":"","code":"f_time_norm_focus(25, 20, 25) # 1.37, compare FOCUS 2014 p. 184 #> [1] 1.373956 D24_2014$meta #> study usda_soil_type study_moisture_ref_type #> Mississippi Cohen 1991 Silt loam <NA> #> Fayette Liu and Adelfinskaya 2011 Silt loam pF1 #> RefSol 03-G Liu and Adelfinskaya 2011 Loam pF1 #> Site E1 Liu and Adelfinskaya 2011 Loam pF1 #> Site I2 Liu and Adelfinskaya 2011 Loamy sand pF1 #> rel_moisture temperature #> Mississippi NA 25 #> Fayette 0.5 20 #> RefSol 03-G 0.5 20 #> Site E1 0.5 20 #> Site I2 0.5 20 # No moisture normalisation in the first dataset, so we use f_na = 1 to get # temperature only normalisation as in the EU evaluation f_time_norm_focus(D24_2014, study_moisture_ref_source = \"focus\", f_na = 1) #> $f_time_norm was (re)set to normalised values"},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":null,"dir":"Reference","previous_headings":"","what":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"value transcribed p. 36. table assumes field capacity corresponds pF2, MWHC pF 1 1/3 bar pF 2.5.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"","code":"focus_soil_moisture"},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"matrix upper case USDA soil classes row names, water tension ('pF1', 'pF2', 'pF 2.5') column names","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"Anonymous (2014) Generic Guidance Tier 1 FOCUS Ground Water Assessment Version 2.2, May 2014 https://esdac.jrc.ec.europa.eu/projects/ground-water","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"FOCUS default values for soil moisture contents at field capacity, MWHC and 1/3 bar — focus_soil_moisture","text":"","code":"focus_soil_moisture #> pF1 pF2 pF2.5 #> Sand 24 12 7 #> Loamy sand 24 14 9 #> Sandy loam 27 19 15 #> Sandy clay loam 28 22 18 #> Clay loam 32 28 25 #> Loam 31 25 21 #> Silt loam 32 26 21 #> Silty clay loam 34 30 27 #> Silt 31 27 21 #> Sandy clay 41 35 31 #> Silty clay 44 40 36 #> Clay 53 48 43"},{"path":"https://pkgdown.jrwb.de/mkin/reference/get_deg_func.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve a degradation function from the mmkin namespace — get_deg_func","title":"Retrieve a degradation function from the mmkin namespace — get_deg_func","text":"Retrieve degradation function mmkin namespace","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/get_deg_func.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve a degradation function from the mmkin namespace — get_deg_func","text":"","code":"get_deg_func()"},{"path":"https://pkgdown.jrwb.de/mkin/reference/get_deg_func.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve a degradation function from the mmkin namespace — get_deg_func","text":"function likely previously assigned within nlme.mmkin","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":null,"dir":"Reference","previous_headings":"","what":"Hierarchical kinetics template — hierarchical_kinetics","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"R markdown format setting hierarchical kinetics based template provided mkin package. format based rmarkdown::pdf_document. Chunk options adapted. Echoing R code code chunks caching turned per default. character prepending output code chunks set empty string, code tidying , figure alignment defaults centering, positioning figures set \"H\", means figures move around document, stay user includes .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"","code":"hierarchical_kinetics(..., keep_tex = FALSE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"... Arguments rmarkdown::pdf_document keep_tex Keep intermediate tex file used conversion PDF. Note argument control whether keep auxiliary files (e.g., .aux) generated LaTeX compiling .tex .pdf. keep files, may set options(tinytex.clean = FALSE).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"R Markdown output format pass render","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"latter feature (positioning figures \"H\") depends LaTeX package 'float'. addition, LaTeX package 'listing' used template showing model fit summaries Appendix. means LaTeX packages 'float' 'listing' need installed TeX distribution used. Windows, easiest way achieve (TeX distribution present ) install 'tinytex' R package, run 'tinytex::install_tinytex()' get basic tiny Tex distribution, run 'tinytex::tlmgr_install(c(\"float\", \"listing\"))'.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Hierarchical kinetics template — hierarchical_kinetics","text":"","code":"# \\dontrun{ library(rmarkdown) # The following is now commented out after the relase of v1.2.3 for the generation # of online docs, as the command creates a directory and opens an editor #draft(\"example_analysis.rmd\", template = \"hierarchical_kinetics\", package = \"mkin\") # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":null,"dir":"Reference","previous_headings":"","what":"Method to get the names of ill-defined parameters — illparms","title":"Method to get the names of ill-defined parameters — illparms","text":"method generalised nonlinear regression fits obtained mkinfit mmkin checks degradation parameters pass Wald test (degradation kinetics often simply called t-test) significant difference zero. test, parameterisation without parameter transformations used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Method to get the names of ill-defined parameters — illparms","text":"","code":"illparms(object, ...) # S3 method for mkinfit illparms(object, conf.level = 0.95, ...) # S3 method for illparms.mkinfit print(x, ...) # S3 method for mmkin illparms(object, conf.level = 0.95, ...) # S3 method for illparms.mmkin print(x, ...) # S3 method for saem.mmkin illparms( object, conf.level = 0.95, random = TRUE, errmod = TRUE, slopes = TRUE, ... ) # S3 method for illparms.saem.mmkin print(x, ...) # S3 method for mhmkin illparms(object, conf.level = 0.95, random = TRUE, errmod = TRUE, ...) # S3 method for illparms.mhmkin print(x, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Method to get the names of ill-defined parameters — illparms","text":"object object investigate ... potential future extensions conf.level confidence level checking p values x object printed random hierarchical fits, random effects tested? errmod hierarchical fits, error model parameters tested? slopes hierarchical saem fits using saemix backend, slope parameters covariate model(starting 'beta_') tested?","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Method to get the names of ill-defined parameters — illparms","text":"mkinfit saem objects, character vector parameter names. mmkin mhmkin objects, matrix like object class 'illparms.mmkin' 'illparms.mhmkin'.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Method to get the names of ill-defined parameters — illparms","text":"method hierarchical model fits, also known nonlinear mixed-effects model fits obtained saem mhmkin checks confidence intervals random effects expressed standard deviations include zero, confidence intervals error model parameters include zero.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Method to get the names of ill-defined parameters — illparms","text":"return objects printing methods. single fits, printing output anything case ill-defined parameters found.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/illparms.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Method to get the names of ill-defined parameters — illparms","text":"","code":"fit <- mkinfit(\"FOMC\", FOCUS_2006_A, quiet = TRUE) #> Warning: Optimisation did not converge: #> false convergence (8) illparms(fit) #> [1] \"parent_0\" \"alpha\" \"beta\" \"sigma\" # \\dontrun{ fits <- mmkin( c(\"SFO\", \"FOMC\"), list(\"FOCUS A\" = FOCUS_2006_A, \"FOCUS C\" = FOCUS_2006_C), quiet = TRUE) illparms(fits) #> dataset #> model FOCUS A FOCUS C #> SFO #> FOMC parent_0, alpha, beta, sigma # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to perform isometric log-ratio transformation — ilr","title":"Function to perform isometric log-ratio transformation — ilr","text":"implementation special case class isometric log-ratio transformations.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to perform isometric log-ratio transformation — ilr","text":"","code":"ilr(x) invilr(x)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to perform isometric log-ratio transformation — ilr","text":"x numeric vector. Naturally, forward transformation sensible vectors elements greater zero.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to perform isometric log-ratio transformation — ilr","text":"result forward backward transformation. returned components always sum 1 case inverse log-ratio transformation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Function to perform isometric log-ratio transformation — ilr","text":"Peter Filzmoser, Karel Hron (2008) Outlier Detection Compositional Data Using Robust Methods. Math Geosci 40 233-248","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to perform isometric log-ratio transformation — ilr","text":"René Lehmann Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/ilr.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to perform isometric log-ratio transformation — ilr","text":"","code":"# Order matters ilr(c(0.1, 1, 10)) #> [1] -1.628174 -2.820079 ilr(c(10, 1, 0.1)) #> [1] 1.628174 2.820079 # Equal entries give ilr transformations with zeros as elements ilr(c(3, 3, 3)) #> [1] 0 0 # Almost equal entries give small numbers ilr(c(0.3, 0.4, 0.3)) #> [1] -0.2034219 0.1174457 # Only the ratio between the numbers counts, not their sum invilr(ilr(c(0.7, 0.29, 0.01))) #> [1] 0.70 0.29 0.01 invilr(ilr(2.1 * c(0.7, 0.29, 0.01))) #> [1] 0.70 0.29 0.01 # Inverse transformation of larger numbers gives unequal elements invilr(-10) #> [1] 7.213536e-07 9.999993e-01 invilr(c(-10, 0)) #> [1] 7.207415e-07 9.991507e-01 8.486044e-04 # The sum of the elements of the inverse ilr is 1 sum(invilr(c(-10, 0))) #> [1] 1 # This is why we do not need all elements of the inverse transformation to go back: a <- c(0.1, 0.3, 0.5) b <- invilr(a) length(b) # Four elements #> [1] 4 ilr(c(b[1:3], 1 - sum(b[1:3]))) # Gives c(0.1, 0.3, 0.5) #> [1] 0.1 0.3 0.5"},{"path":"https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","title":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","text":"Confidence intervals parameters saem.mmkin objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","text":"","code":"# S3 method for saem.mmkin intervals(object, level = 0.95, backtransform = TRUE, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","text":"object fitted saem.mmkin object level confidence level. Must default 0.95 available saemix object backtransform case model fitted mkin transformations, backtransform parameters one one correlation transformed backtransformed parameters exists? ... compatibility generic method","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Confidence intervals for parameters in saem.mmkin objects — intervals.saem.mmkin","text":"object 'intervals.saem.mmkin' 'intervals.lme' class attribute","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/llhist.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the distribution of log likelihoods from multistart objects — llhist","title":"Plot the distribution of log likelihoods from multistart objects — llhist","text":"Produces histogram log-likelihoods. addition, likelihood original fit shown red vertical line.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/llhist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the distribution of log likelihoods from multistart objects — llhist","text":"","code":"llhist(object, breaks = \"Sturges\", lpos = \"topleft\", main = \"\", ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/llhist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the distribution of log likelihoods from multistart objects — llhist","text":"object multistart object breaks Passed hist lpos Positioning legend. main Title plot ... Passed hist","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":null,"dir":"Reference","previous_headings":"","what":"Lack-of-fit test for models fitted to data with replicates — loftest","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"generic function method currently defined mkinfit objects. fits anova model data contained object compares likelihoods using likelihood ratio test lrtest.default lmtest package.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"","code":"loftest(object, ...) # S3 method for mkinfit loftest(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"object model object defined loftest method ... used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"anova model interpreted simplest form mkinfit model, assuming constant variance means, enforcing structure means, one model parameter every mean replicate samples.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/loftest.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Lack-of-fit test for models fitted to data with replicates — loftest","text":"","code":"# \\dontrun{ test_data <- subset(synthetic_data_for_UBA_2014[[12]]$data, name == \"parent\") sfo_fit <- mkinfit(\"SFO\", test_data, quiet = TRUE) plot_res(sfo_fit) # We see a clear pattern in the residuals loftest(sfo_fit) # We have a clear lack of fit #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: SFO with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 10 -40.710 #> 2 3 -63.954 -7 46.487 7.027e-08 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # # We try a different model (the one that was used to generate the data) dfop_fit <- mkinfit(\"DFOP\", test_data, quiet = TRUE) plot_res(dfop_fit) # We don't see systematic deviations, but heteroscedastic residuals # therefore we should consider adapting the error model, although we have loftest(dfop_fit) # no lack of fit #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: DFOP with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 10 -40.710 #> 2 5 -42.453 -5 3.485 0.6257 # # This is the anova model used internally for the comparison test_data_anova <- test_data test_data_anova$time <- as.factor(test_data_anova$time) anova_fit <- lm(value ~ time, data = test_data_anova) summary(anova_fit) #> #> Call: #> lm(formula = value ~ time, data = test_data_anova) #> #> Residuals: #> Min 1Q Median 3Q Max #> -6.1000 -0.5625 0.0000 0.5625 6.1000 #> #> Coefficients: #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) 103.150 2.323 44.409 7.44e-12 *** #> time1 -19.950 3.285 -6.073 0.000185 *** #> time3 -50.800 3.285 -15.465 8.65e-08 *** #> time7 -68.500 3.285 -20.854 6.28e-09 *** #> time14 -79.750 3.285 -24.278 1.63e-09 *** #> time28 -86.000 3.285 -26.181 8.35e-10 *** #> time60 -94.900 3.285 -28.891 3.48e-10 *** #> time90 -98.500 3.285 -29.986 2.49e-10 *** #> time120 -100.450 3.285 -30.580 2.09e-10 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #> #> Residual standard error: 3.285 on 9 degrees of freedom #> Multiple R-squared: 0.9953,\tAdjusted R-squared: 0.9912 #> F-statistic: 240.5 on 8 and 9 DF, p-value: 1.417e-09 #> logLik(anova_fit) # We get the same likelihood and degrees of freedom #> 'log Lik.' -40.71015 (df=10) # test_data_2 <- synthetic_data_for_UBA_2014[[12]]$data m_synth_SFO_lin <- mkinmod(parent = list(type = \"SFO\", to = \"M1\"), M1 = list(type = \"SFO\", to = \"M2\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded sfo_lin_fit <- mkinfit(m_synth_SFO_lin, test_data_2, quiet = TRUE) plot_res(sfo_lin_fit) # not a good model, we try parallel formation loftest(sfo_lin_fit) #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: m_synth_SFO_lin with error model const and fixed parameter(s) M1_0, M2_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 28 -93.606 #> 2 7 -171.927 -21 156.64 < 2.2e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # m_synth_SFO_par <- mkinmod(parent = list(type = \"SFO\", to = c(\"M1\", \"M2\")), M1 = list(type = \"SFO\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded sfo_par_fit <- mkinfit(m_synth_SFO_par, test_data_2, quiet = TRUE) plot_res(sfo_par_fit) # much better for metabolites loftest(sfo_par_fit) #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: m_synth_SFO_par with error model const and fixed parameter(s) M1_0, M2_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 28 -93.606 #> 2 7 -156.331 -21 125.45 < 2.2e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # m_synth_DFOP_par <- mkinmod(parent = list(type = \"DFOP\", to = c(\"M1\", \"M2\")), M1 = list(type = \"SFO\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded dfop_par_fit <- mkinfit(m_synth_DFOP_par, test_data_2, quiet = TRUE) plot_res(dfop_par_fit) # No visual lack of fit loftest(dfop_par_fit) # no lack of fit found by the test #> Likelihood ratio test #> #> Model 1: ANOVA with error model const #> Model 2: m_synth_DFOP_par with error model const and fixed parameter(s) M1_0, M2_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 28 -93.606 #> 2 9 -102.763 -19 18.313 0.5016 # # The anova model used for comparison in the case of transformation products test_data_anova_2 <- dfop_par_fit$data test_data_anova_2$variable <- as.factor(test_data_anova_2$variable) test_data_anova_2$time <- as.factor(test_data_anova_2$time) anova_fit_2 <- lm(observed ~ time:variable - 1, data = test_data_anova_2) summary(anova_fit_2) #> #> Call: #> lm(formula = observed ~ time:variable - 1, data = test_data_anova_2) #> #> Residuals: #> Min 1Q Median 3Q Max #> -6.1000 -0.5875 0.0000 0.5875 6.1000 #> #> Coefficients: (2 not defined because of singularities) #> Estimate Std. Error t value Pr(>|t|) #> time0:variableparent 103.150 1.573 65.562 < 2e-16 *** #> time1:variableparent 83.200 1.573 52.882 < 2e-16 *** #> time3:variableparent 52.350 1.573 33.274 < 2e-16 *** #> time7:variableparent 34.650 1.573 22.024 < 2e-16 *** #> time14:variableparent 23.400 1.573 14.873 6.35e-14 *** #> time28:variableparent 17.150 1.573 10.901 5.47e-11 *** #> time60:variableparent 8.250 1.573 5.244 1.99e-05 *** #> time90:variableparent 4.650 1.573 2.956 0.006717 ** #> time120:variableparent 2.700 1.573 1.716 0.098507 . #> time0:variableM1 NA NA NA NA #> time1:variableM1 11.850 1.573 7.532 6.93e-08 *** #> time3:variableM1 22.700 1.573 14.428 1.26e-13 *** #> time7:variableM1 33.050 1.573 21.007 < 2e-16 *** #> time14:variableM1 31.250 1.573 19.863 < 2e-16 *** #> time28:variableM1 18.900 1.573 12.013 7.02e-12 *** #> time60:variableM1 7.550 1.573 4.799 6.28e-05 *** #> time90:variableM1 3.850 1.573 2.447 0.021772 * #> time120:variableM1 2.050 1.573 1.303 0.204454 #> time0:variableM2 NA NA NA NA #> time1:variableM2 6.700 1.573 4.259 0.000254 *** #> time3:variableM2 16.750 1.573 10.646 8.93e-11 *** #> time7:variableM2 25.800 1.573 16.399 6.89e-15 *** #> time14:variableM2 28.600 1.573 18.178 6.35e-16 *** #> time28:variableM2 25.400 1.573 16.144 9.85e-15 *** #> time60:variableM2 21.600 1.573 13.729 3.81e-13 *** #> time90:variableM2 17.800 1.573 11.314 2.51e-11 *** #> time120:variableM2 14.100 1.573 8.962 2.79e-09 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #> #> Residual standard error: 2.225 on 25 degrees of freedom #> Multiple R-squared: 0.9979,\tAdjusted R-squared: 0.9957 #> F-statistic: 469.2 on 25 and 25 DF, p-value: < 2.2e-16 #> # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"function returns product likelihood densities observed value, calculated part fitting procedure using dnorm, .e. assuming normal distribution, means predicted degradation model, standard deviations predicted error model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"","code":"# S3 method for mkinfit logLik(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"object object class mkinfit. ... compatibility generic method","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"object class logLik number estimated parameters (degradation model parameters plus variance model parameters) attribute.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"total number estimated parameters returned value likelihood calculated sum fitted degradation model parameters fitted error model parameters.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculated the log-likelihood of a fitted mkinfit object — logLik.mkinfit","text":"","code":"# \\dontrun{ sfo_sfo <- mkinmod( parent = mkinsub(\"SFO\", to = \"m1\"), m1 = mkinsub(\"SFO\") ) #> Temporary DLL for differentials generated and loaded d_t <- subset(FOCUS_2006_D, value != 0) f_nw <- mkinfit(sfo_sfo, d_t, quiet = TRUE) # no weighting (weights are unity) f_obs <- update(f_nw, error_model = \"obs\") f_tc <- update(f_nw, error_model = \"tc\") AIC(f_nw, f_obs, f_tc) #> df AIC #> f_nw 5 204.4486 #> f_obs 6 205.8727 #> f_tc 6 141.9656 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.saem.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"logLik method for saem.mmkin objects — logLik.saem.mmkin","title":"logLik method for saem.mmkin objects — logLik.saem.mmkin","text":"logLik method saem.mmkin objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.saem.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"logLik method for saem.mmkin objects — logLik.saem.mmkin","text":"","code":"# S3 method for saem.mmkin logLik(object, ..., method = c(\"is\", \"lin\", \"gq\"))"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logLik.saem.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"logLik method for saem.mmkin objects — logLik.saem.mmkin","text":"object fitted saem.mmkin object ... Passed saemix::logLik.SaemixObject method Passed saemix::logLik.SaemixObject","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":null,"dir":"Reference","previous_headings":"","what":"Logistic kinetics — logistic.solution","title":"Logistic kinetics — logistic.solution","text":"Function describing exponential decline defined starting value, increasing rate constant, supposedly caused microbial growth","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Logistic kinetics — logistic.solution","text":"","code":"logistic.solution(t, parent_0, kmax, k0, r)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Logistic kinetics — logistic.solution","text":"t Time. parent_0 Starting value response variable time zero. kmax Maximum rate constant. k0 Minimum rate constant effective time zero. r Growth rate increase rate constant.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Logistic kinetics — logistic.solution","text":"value response variable time t.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Logistic kinetics — logistic.solution","text":"solution logistic model reduces SFO.solution k0 equal kmax.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Logistic kinetics — logistic.solution","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics FOCUS (2014) “Generic guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, Version 1.1, 18 December 2014 http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Logistic kinetics — logistic.solution","text":"","code":"# Reproduce the plot on page 57 of FOCUS (2014) plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.2), from = 0, to = 100, ylim = c(0, 100), xlab = \"Time\", ylab = \"Residue\") plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.4), from = 0, to = 100, add = TRUE, lty = 2, col = 2) plot(function(x) logistic.solution(x, 100, 0.08, 0.0001, 0.8), from = 0, to = 100, add = TRUE, lty = 3, col = 3) plot(function(x) logistic.solution(x, 100, 0.08, 0.001, 0.2), from = 0, to = 100, add = TRUE, lty = 4, col = 4) plot(function(x) logistic.solution(x, 100, 0.08, 0.08, 0.2), from = 0, to = 100, add = TRUE, lty = 5, col = 5) legend(\"topright\", inset = 0.05, legend = paste0(\"k0 = \", c(0.0001, 0.0001, 0.0001, 0.001, 0.08), \", r = \", c(0.2, 0.4, 0.8, 0.2, 0.2)), lty = 1:5, col = 1:5) # Fit with synthetic data logistic <- mkinmod(parent = mkinsub(\"logistic\")) sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) parms_logistic <- c(kmax = 0.08, k0 = 0.0001, r = 0.2) d_logistic <- mkinpredict(logistic, parms_logistic, c(parent = 100), sampling_times) d_2_1 <- add_err(d_logistic, sdfunc = function(x) sigma_twocomp(x, 0.5, 0.07), n = 1, reps = 2, digits = 5, LOD = 0.1, seed = 123456)[[1]] m <- mkinfit(\"logistic\", d_2_1, quiet = TRUE) plot_sep(m) summary(m)$bpar #> Estimate se_notrans t value Pr(>t) Lower #> parent_0 1.057896e+02 1.9023449604 55.610120 3.768360e-16 1.016451e+02 #> kmax 6.398190e-02 0.0143201030 4.467978 3.841828e-04 3.929235e-02 #> k0 1.612775e-04 0.0005866813 0.274898 3.940351e-01 5.846688e-08 #> r 2.263946e-01 0.1718110664 1.317695 1.061043e-01 4.335843e-02 #> sigma 5.332935e+00 0.9145907310 5.830952 4.036926e-05 3.340213e+00 #> Upper #> parent_0 109.9341588 #> kmax 0.1041853 #> k0 0.4448749 #> r 1.1821120 #> sigma 7.3256566 endpoints(m)$distimes #> DT50 DT90 DT50_k0 DT50_kmax #> parent 36.86533 62.41511 4297.853 10.83349"},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"Compare two mkinfit models based likelihood. two fitted mkinfit objects given arguments, checked fitted data. responsibility user make sure models nested, .e. one less degrees freedom can expressed fixing parameters .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"","code":"# S3 method for mkinfit lrtest(object, object_2 = NULL, ...) # S3 method for mmkin lrtest(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"object mkinfit object, mmkin column object containing two fits data. object_2 Optionally, another mkinfit object fitted data. ... Argument mkinfit, passed update.mkinfit creating alternative fitted object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"Alternatively, argument mkinfit can given passed update.mkinfit obtain alternative model. comparison made lrtest.default method lmtest package. model higher number fitted parameters (alternative hypothesis) listed first, model lower number fitted parameters (null hypothesis).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Likelihood ratio test for mkinfit models — lrtest.mkinfit","text":"","code":"# \\dontrun{ test_data <- subset(synthetic_data_for_UBA_2014[[12]]$data, name == \"parent\") sfo_fit <- mkinfit(\"SFO\", test_data, quiet = TRUE) dfop_fit <- mkinfit(\"DFOP\", test_data, quiet = TRUE) lrtest(dfop_fit, sfo_fit) #> Likelihood ratio test #> #> Model 1: DFOP with error model const #> Model 2: SFO with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 5 -42.453 #> 2 3 -63.954 -2 43.002 4.594e-10 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 lrtest(sfo_fit, dfop_fit) #> Likelihood ratio test #> #> Model 1: DFOP with error model const #> Model 2: SFO with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 5 -42.453 #> 2 3 -63.954 -2 43.002 4.594e-10 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # The following two examples are commented out as they fail during # generation of the static help pages by pkgdown #lrtest(dfop_fit, error_model = \"tc\") #lrtest(dfop_fit, fixed_parms = c(k2 = 0)) # However, this equivalent syntax also works for static help pages lrtest(dfop_fit, update(dfop_fit, error_model = \"tc\")) #> Likelihood ratio test #> #> Model 1: DFOP with error model tc #> Model 2: DFOP with error model const #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 6 -34.587 #> 2 5 -42.453 -1 15.731 7.302e-05 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 lrtest(dfop_fit, update(dfop_fit, fixed_parms = c(k2 = 0))) #> Likelihood ratio test #> #> Model 1: DFOP with error model const #> Model 2: DFOP with error model const and fixed parameter(s) k2 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 5 -42.453 #> 2 4 -57.340 -1 29.776 4.851e-08 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"function calculates maximum moving window time weighted average concentrations (TWAs) kinetic models fitted mkinfit. Currently, calculations parent implemented SFO, FOMC, DFOP HS models, using analytical formulas given PEC soil section FOCUS guidance.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"","code":"max_twa_parent(fit, windows) max_twa_sfo(M0 = 1, k, t) max_twa_fomc(M0 = 1, alpha, beta, t) max_twa_dfop(M0 = 1, k1, k2, g, t) max_twa_hs(M0 = 1, k1, k2, tb, t)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"fit object class mkinfit. windows width time windows TWAs calculated. M0 initial concentration maximum time weighted average decline curve calculated. default use value 1, means relative maximum time weighted average factor (f_twa) calculated. k rate constant case SFO kinetics. t width time window. alpha Parameter FOMC model. beta Parameter FOMC model. k1 first rate constant DFOP HS kinetics. k2 second rate constant DFOP HS kinetics. g Parameter DFOP model. tb Parameter HS model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"max_twa_parent, numeric vector, named using windows argument. functions, numeric vector length one (also known 'number').","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to calculate maximum time weighted average concentrations from\nkinetic models fitted with mkinfit — max_twa_parent","text":"","code":"fit <- mkinfit(\"FOMC\", FOCUS_2006_C, quiet = TRUE) max_twa_parent(fit, c(7, 21)) #> 7 21 #> 34.71343 18.22124"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":null,"dir":"Reference","previous_headings":"","what":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"Time course 2,4,5-trichlorophenoxyacetic acid, corresponding 2,4,5-trichlorophenol 2,4,5-trichloroanisole recovered diethylether extracts.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"","code":"mccall81_245T"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"dataframe containing following variables. name name compound observed. Note T245 used acronym 2,4,5-T. T245 legitimate object name R, necessary specifying models using mkinmod. time numeric vector containing sampling times days treatment value numeric vector containing concentrations percent applied radioactivity soil factor containing name soil","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"McCall P, Vrona SA, Kelley SS (1981) Fate uniformly carbon-14 ring labelled 2,4,5-Trichlorophenoxyacetic acid 2,4-dichlorophenoxyacetic acid. J Agric Chem 29, 100-107 doi:10.1021/jf00103a026","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Datasets on aerobic soil metabolism of 2,4,5-T in six soils — mccall81_245T","text":"","code":"SFO_SFO_SFO <- mkinmod(T245 = list(type = \"SFO\", to = \"phenol\"), phenol = list(type = \"SFO\", to = \"anisole\"), anisole = list(type = \"SFO\")) #> Temporary DLL for differentials generated and loaded # \\dontrun{ fit.1 <- mkinfit(SFO_SFO_SFO, subset(mccall81_245T, soil == \"Commerce\"), quiet = TRUE) #> Warning: Observations with value of zero were removed from the data summary(fit.1)$bpar #> Estimate se_notrans t value Pr(>t) #> T245_0 1.038550e+02 2.1847074943 47.537272 4.472189e-18 #> k_T245 4.337042e-02 0.0018983965 22.845818 2.276911e-13 #> k_phenol 4.050581e-01 0.2986993738 1.356073 9.756990e-02 #> k_anisole 6.678742e-03 0.0008021439 8.326114 2.623177e-07 #> f_T245_to_phenol 6.227599e-01 0.3985340721 1.562626 6.949414e-02 #> f_phenol_to_anisole 1.000000e+00 0.6718440131 1.488441 7.867790e-02 #> sigma 2.514628e+00 0.4907558973 5.123989 6.233159e-05 #> Lower Upper #> T245_0 99.246061490 1.084640e+02 #> k_T245 0.039631621 4.746194e-02 #> k_phenol 0.218013879 7.525762e-01 #> k_anisole 0.005370739 8.305299e-03 #> f_T245_to_phenol 0.547559080 6.924813e-01 #> f_phenol_to_anisole 0.000000000 1.000000e+00 #> sigma 1.706607296 3.322649e+00 endpoints(fit.1) #> $ff #> T245_phenol T245_sink phenol_anisole phenol_sink #> 6.227599e-01 3.772401e-01 1.000000e+00 3.072478e-10 #> #> $distimes #> DT50 DT90 #> T245 15.982025 53.09114 #> phenol 1.711229 5.68458 #> anisole 103.784093 344.76329 #> # formation fraction from phenol to anisol is practically 1. As we cannot # fix formation fractions when using the ilr transformation, we can turn of # the sink in the model generation SFO_SFO_SFO_2 <- mkinmod(T245 = list(type = \"SFO\", to = \"phenol\"), phenol = list(type = \"SFO\", to = \"anisole\", sink = FALSE), anisole = list(type = \"SFO\")) #> Temporary DLL for differentials generated and loaded fit.2 <- mkinfit(SFO_SFO_SFO_2, subset(mccall81_245T, soil == \"Commerce\"), quiet = TRUE) #> Warning: Observations with value of zero were removed from the data summary(fit.2)$bpar #> Estimate se_notrans t value Pr(>t) Lower #> T245_0 1.038550e+02 2.1623653059 48.028439 4.993108e-19 99.271020328 #> k_T245 4.337042e-02 0.0018343666 23.643268 3.573556e-14 0.039650976 #> k_phenol 4.050582e-01 0.1177237651 3.440752 1.679255e-03 0.218746589 #> k_anisole 6.678742e-03 0.0006829745 9.778903 1.872894e-08 0.005377083 #> f_T245_to_phenol 6.227599e-01 0.0342197873 18.198824 2.039411e-12 0.547975634 #> sigma 2.514628e+00 0.3790944250 6.633250 2.875782e-06 1.710983655 #> Upper #> T245_0 108.43904079 #> k_T245 0.04743877 #> k_phenol 0.75005593 #> k_anisole 0.00829550 #> f_T245_to_phenol 0.69212307 #> sigma 3.31827222 endpoints(fit.1) #> $ff #> T245_phenol T245_sink phenol_anisole phenol_sink #> 6.227599e-01 3.772401e-01 1.000000e+00 3.072478e-10 #> #> $distimes #> DT50 DT90 #> T245 15.982025 53.09114 #> phenol 1.711229 5.68458 #> anisole 103.784093 344.76329 #> plot_sep(fit.2) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","title":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","text":"Calculate mean degradation parameters mmkin row object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","text":"","code":"mean_degparms( object, random = FALSE, test_log_parms = FALSE, conf.level = 0.6, default_log_parms = NA )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","text":"object mmkin row object containing several fits model different datasets random list fixed random effects returned? test_log_parms TRUE, log parameters considered mean calculations untransformed counterparts (likely rate constants) pass t-test significant difference zero. conf.level Possibility adjust required confidence level parameter tested requested 'test_log_parms'. default_log_parms set numeric value, used default value tested log parameters failed t-test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate mean degradation parameters for an mmkin row object — mean_degparms","text":"random FALSE (default), named vector containing mean values fitted degradation model parameters. random TRUE, list fixed random effects, format required start argument nlme case single grouping variable ds.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"name methods expresses (multiple) hierarchichal (also known multilevel) multicompartment kinetic models fitted. kinetic models nonlinear, can use various nonlinear mixed-effects model fitting functions.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"","code":"mhmkin(objects, ...) # S3 method for mmkin mhmkin(objects, ...) # S3 method for list mhmkin( objects, backend = \"saemix\", algorithm = \"saem\", no_random_effect = NULL, ..., cores = if (Sys.info()[\"sysname\"] == \"Windows\") 1 else parallel::detectCores(), cluster = NULL ) # S3 method for mhmkin [(x, i, j, ..., drop = FALSE) # S3 method for mhmkin print(x, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"objects list mmkin objects containing fits degradation models data, using different error models. Alternatively, single mmkin object containing fits several degradation models data ... arguments passed nonlinear mixed-effects model fitting function. backend backend used fitting. Currently, saemix supported algorithm algorithm used fitting (currently used) no_random_effect Default NULL passed saem. character vector supplied, passed calls saem, exclude random effects matching parameters. Alternatively, list character vectors object class illparms.mhmkin can specified. dimensions return object current call , .e. number rows must match number degradation models mmkin object(s), number columns must match number error models used mmkin object(s). cores number cores used multicore processing. used cluster argument NULL. Windows machines, cores > 1 supported, need use cluster argument use multiple logical processors. Per default, cores detected parallel::detectCores() used, except Windows default 1. cluster cluster returned makeCluster used parallel execution. x mhmkin object. Row index selecting fits specific models j Column index selecting fits specific datasets drop FALSE, method always returns mhmkin object, otherwise either list fit objects single fit object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"two-dimensional array fit objects /try-errors can indexed using degradation model names first index (row index) error model names second index (column index), class attribute 'mhmkin'. object inheriting mhmkin.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mhmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit nonlinear mixed-effects models built from one or more kinetic\ndegradation models and one or more error models — mhmkin","text":"","code":"# \\dontrun{ # We start with separate evaluations of all the first six datasets with two # degradation models and two error models f_sep_const <- mmkin(c(\"SFO\", \"FOMC\"), ds_fomc[1:6], cores = 2, quiet = TRUE) f_sep_tc <- update(f_sep_const, error_model = \"tc\") # The mhmkin function sets up hierarchical degradation models aka # nonlinear mixed-effects models for all four combinations, specifying # uncorrelated random effects for all degradation parameters f_saem_1 <- mhmkin(list(f_sep_const, f_sep_tc), cores = 2) status(f_saem_1) #> error #> degradation const tc #> SFO OK OK #> FOMC OK OK #> #> OK: Fit terminated successfully # The 'illparms' function shows that in all hierarchical fits, at least # one random effect is ill-defined (the confidence interval for the # random effect expressed as standard deviation includes zero) illparms(f_saem_1) #> error #> degradation const tc #> SFO sd(parent_0) sd(parent_0) #> FOMC sd(log_beta) sd(parent_0), sd(log_beta) # Therefore we repeat the fits, excluding the ill-defined random effects f_saem_2 <- update(f_saem_1, no_random_effect = illparms(f_saem_1)) status(f_saem_2) #> error #> degradation const tc #> SFO OK OK #> FOMC OK OK #> #> OK: Fit terminated successfully illparms(f_saem_2) #> error #> degradation const tc #> SFO #> FOMC # Model comparisons show that FOMC with two-component error is preferable, # and confirms our reduction of the default parameter model anova(f_saem_1) #> Data: 95 observations of 1 variable(s) grouped in 6 datasets #> #> npar AIC BIC Lik #> SFO const 5 574.40 573.35 -282.20 #> SFO tc 6 543.72 542.47 -265.86 #> FOMC const 7 489.67 488.22 -237.84 #> FOMC tc 8 406.11 404.44 -195.05 anova(f_saem_2) #> Data: 95 observations of 1 variable(s) grouped in 6 datasets #> #> npar AIC BIC Lik #> SFO const 4 572.22 571.39 -282.11 #> SFO tc 5 541.63 540.59 -265.81 #> FOMC const 6 487.38 486.13 -237.69 #> FOMC tc 6 402.12 400.88 -195.06 # The convergence plot for the selected model looks fine saemix::plot(f_saem_2[[\"FOMC\", \"tc\"]]$so, plot.type = \"convergence\") # The plot of predictions versus data shows that we have a pretty data-rich # situation with homogeneous distribution of residuals, because we used the # same degradation model, error model and parameter distribution model that # was used in the data generation. plot(f_saem_2[[\"FOMC\", \"tc\"]]) # We can specify the same parameter model reductions manually no_ranef <- list(\"parent_0\", \"log_beta\", \"parent_0\", c(\"parent_0\", \"log_beta\")) dim(no_ranef) <- c(2, 2) f_saem_2m <- update(f_saem_1, no_random_effect = no_ranef) anova(f_saem_2m) #> Data: 95 observations of 1 variable(s) grouped in 6 datasets #> #> npar AIC BIC Lik #> SFO const 4 572.22 571.39 -282.11 #> SFO tc 5 541.63 540.59 -265.81 #> FOMC const 6 487.38 486.13 -237.69 #> FOMC tc 6 402.12 400.88 -195.06 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a mixed effects model from an mmkin row object — mixed","title":"Create a mixed effects model from an mmkin row object — mixed","text":"Create mixed effects model mmkin row object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a mixed effects model from an mmkin row object — mixed","text":"","code":"mixed(object, ...) # S3 method for mmkin mixed(object, method = c(\"none\"), ...) # S3 method for mixed.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a mixed effects model from an mmkin row object — mixed","text":"object mmkin row object ... Currently used method method used x mixed.mmkin object print digits Number digits use printing.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a mixed effects model from an mmkin row object — mixed","text":"object class 'mixed.mmkin' observed data single dataframe convenient plotting","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mixed.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a mixed effects model from an mmkin row object — mixed","text":"","code":"sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) n_biphasic <- 8 err_1 = list(const = 1, prop = 0.07) DFOP_SFO <- mkinmod( parent = mkinsub(\"DFOP\", \"m1\"), m1 = mkinsub(\"SFO\"), quiet = TRUE) set.seed(123456) log_sd <- 0.3 syn_biphasic_parms <- as.matrix(data.frame( k1 = rlnorm(n_biphasic, log(0.05), log_sd), k2 = rlnorm(n_biphasic, log(0.01), log_sd), g = plogis(rnorm(n_biphasic, 0, log_sd)), f_parent_to_m1 = plogis(rnorm(n_biphasic, 0, log_sd)), k_m1 = rlnorm(n_biphasic, log(0.002), log_sd))) ds_biphasic_mean <- lapply(1:n_biphasic, function(i) { mkinpredict(DFOP_SFO, syn_biphasic_parms[i, ], c(parent = 100, m1 = 0), sampling_times) } ) set.seed(123456L) ds_biphasic <- lapply(ds_biphasic_mean, function(ds) { add_err(ds, sdfunc = function(value) sqrt(err_1$const^2 + value^2 * err_1$prop^2), n = 1, secondary = \"m1\")[[1]] }) # \\dontrun{ f_mmkin <- mmkin(list(\"DFOP-SFO\" = DFOP_SFO), ds_biphasic, error_model = \"tc\", quiet = TRUE) f_mixed <- mixed(f_mmkin) print(f_mixed) #> Kinetic model fitted by nonlinear regression to each dataset #> 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: #> 271 observations of 2 variable(s) grouped in 8 datasets #> #> <mmkin> object #> Status of individual fits: #> #> dataset #> model 1 2 3 4 5 6 7 8 #> DFOP-SFO OK OK OK OK OK C OK OK #> #> C: Optimisation did not converge: #> iteration limit reached without convergence (10) #> OK: No warnings #> #> Mean fitted parameters: #> parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2 #> 100.605312 -8.758664 -0.001917 -3.350887 -3.990017 #> g_qlogis #> -0.091167 plot(f_mixed) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a dataframe from long to wide format — mkin_long_to_wide","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"function takes dataframe long form, .e. row observed value, converts dataframe one independent variable several dependent variables columns.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"","code":"mkin_long_to_wide(long_data, time = \"time\", outtime = \"time\")"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"long_data dataframe must contain one variable called \"time\" time values specified time argument, one column called \"name\" grouping observed values, finally one column observed values called \"value\". time name time variable long input data. outtime name time variable wide output data.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"Dataframe wide format.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a dataframe from long to wide format — mkin_long_to_wide","text":"","code":"mkin_long_to_wide(FOCUS_2006_D) #> time parent m1 #> 1 0 99.46 0.00 #> 2 0 102.04 0.00 #> 3 1 93.50 4.84 #> 4 1 92.50 5.64 #> 5 3 63.23 12.91 #> 6 3 68.99 12.96 #> 7 7 52.32 22.97 #> 8 7 55.13 24.47 #> 9 14 27.27 41.69 #> 10 14 26.64 33.21 #> 11 21 11.50 44.37 #> 12 21 11.64 46.44 #> 13 35 2.85 41.22 #> 14 35 2.91 37.95 #> 15 50 0.69 41.19 #> 16 50 0.63 40.01 #> 17 75 0.05 40.09 #> 18 75 0.06 33.85 #> 19 100 NA 31.04 #> 20 100 NA 33.13 #> 21 120 NA 25.15 #> 22 120 NA 33.31"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"function simply takes dataframe one independent variable several dependent variable converts long form required mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"","code":"mkin_wide_to_long(wide_data, time = \"t\")"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"wide_data dataframe must contain one variable time values specified time argument usually one column observed values. time name time variable.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"Dataframe long format needed mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert a dataframe with observations over time into long format — mkin_wide_to_long","text":"","code":"wide <- data.frame(t = c(1,2,3), x = c(1,4,7), y = c(3,4,5)) mkin_wide_to_long(wide) #> name time value #> 1 x 1 1 #> 2 x 2 4 #> 3 x 3 7 #> 4 y 1 3 #> 5 y 2 4 #> 6 y 3 5"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":null,"dir":"Reference","previous_headings":"","what":"A dataset class for mkin — mkinds","title":"A dataset class for mkin — mkinds","text":"moment dataset class hardly used mkin. example, mkinfit take mkinds datasets argument, works dataframes contained data field mkinds objects. datasets provided package come mkinds objects nevertheless.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A dataset class for mkin — mkinds","text":"","code":"# S3 method for mkinds print(x, data = FALSE, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A dataset class for mkin — mkinds","text":"x mkinds object. data data printed? ... used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"public-fields","dir":"Reference","previous_headings":"","what":"Public fields","title":"A dataset class for mkin — mkinds","text":"title full title dataset sampling_times sampling times time_unit time unit observed Names observed variables unit unit observations replicates maximum number replicates per sampling time data data frame least columns name, time value order compatible mkinfit","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"public-methods","dir":"Reference","previous_headings":"","what":"Public methods","title":"A dataset class for mkin — mkinds","text":"mkinds$new() mkinds$clone()","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"method-new-","dir":"Reference","previous_headings":"","what":"Method new()","title":"A dataset class for mkin — mkinds","text":"Create new mkinds object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A dataset class for mkin — mkinds","text":"","code":"mkinds$new(title = \"\", data, time_unit = NA, unit = NA)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"arguments-1","dir":"Reference","previous_headings":"","what":"Arguments","title":"A dataset class for mkin — mkinds","text":"title dataset title data data time_unit time unit unit unit observations","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"method-clone-","dir":"Reference","previous_headings":"","what":"Method clone()","title":"A dataset class for mkin — mkinds","text":"objects class cloneable method.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"usage-1","dir":"Reference","previous_headings":"","what":"Usage","title":"A dataset class for mkin — mkinds","text":"","code":"mkinds$clone(deep = FALSE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"arguments-2","dir":"Reference","previous_headings":"","what":"Arguments","title":"A dataset class for mkin — mkinds","text":"deep Whether make deep clone.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"A dataset class for mkin — mkinds","text":"","code":"mds <- mkinds$new(\"FOCUS A\", FOCUS_2006_A) print(mds) #> <mkinds> with $title: FOCUS A #> Observed compounds $observed: parent #> Sampling times $sampling_times: #> 0, 3, 7, 14, 30, 62, 90, 118 #> With a maximum of 1 replicates"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":null,"dir":"Reference","previous_headings":"","what":"A class for dataset groups for mkin — mkindsg","title":"A class for dataset groups for mkin — mkindsg","text":"container working datasets share least one compound, combined evaluations desirable. Time normalisation factors initialised value 1 dataset data supplied.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A class for dataset groups for mkin — mkindsg","text":"","code":"# S3 method for mkindsg print(x, data = FALSE, verbose = data, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A class for dataset groups for mkin — mkindsg","text":"x mkindsg object. data mkinds objects printed data? verbose mkinds objects printed? ... used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"public-fields","dir":"Reference","previous_headings":"","what":"Public fields","title":"A class for dataset groups for mkin — mkindsg","text":"title title dataset group ds list mkinds objects observed_n Occurrence counts compounds datasets f_time_norm Time normalisation factors meta data frame row dataset, containing additional information form categorical data (factors) numerical data (e.g. temperature, moisture, covariates like soil pH).","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"public-methods","dir":"Reference","previous_headings":"","what":"Public methods","title":"A class for dataset groups for mkin — mkindsg","text":"mkindsg$new() mkindsg$clone()","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"method-new-","dir":"Reference","previous_headings":"","what":"Method new()","title":"A class for dataset groups for mkin — mkindsg","text":"Create new mkindsg object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A class for dataset groups for mkin — mkindsg","text":"","code":"mkindsg$new(title = \"\", ds, f_time_norm = rep(1, length(ds)), meta)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"arguments-1","dir":"Reference","previous_headings":"","what":"Arguments","title":"A class for dataset groups for mkin — mkindsg","text":"title title ds list mkinds objects f_time_norm Time normalisation factors meta meta data","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"method-clone-","dir":"Reference","previous_headings":"","what":"Method clone()","title":"A class for dataset groups for mkin — mkindsg","text":"objects class cloneable method.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"usage-1","dir":"Reference","previous_headings":"","what":"Usage","title":"A class for dataset groups for mkin — mkindsg","text":"","code":"mkindsg$clone(deep = FALSE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"arguments-2","dir":"Reference","previous_headings":"","what":"Arguments","title":"A class for dataset groups for mkin — mkindsg","text":"deep Whether make deep clone.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkindsg.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"A class for dataset groups for mkin — mkindsg","text":"","code":"mdsg <- mkindsg$new(\"Experimental X\", experimental_data_for_UBA_2019[6:10]) print(mdsg) #> <mkindsg> holding 5 mkinds objects #> Title $title: Experimental X #> Occurrence of observed compounds $observed_n: #> parent A1 #> 5 5 print(mdsg, verbose = TRUE) #> <mkindsg> holding 5 mkinds objects #> Title $title: Experimental X #> Occurrence of observed compounds $observed_n: #> parent A1 #> 5 5 #> #> Datasets $ds: #> <mkinds> with $title: Soil 6 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 3, 6, 10, 20, 34, 55, 90, 112, 132 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> #> <mkinds> with $title: Soil 7 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 3, 7, 14, 30, 60, 90, 120, 180 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> #> <mkinds> with $title: Soil 8 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 1, 3, 8, 14, 27, 48, 70 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> #> <mkinds> with $title: Soil 9 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 1, 3, 8, 14, 27, 48, 70, 91, 120 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> #> <mkinds> with $title: Soil 10 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 8, 14, 21, 41, 63, 91, 120 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR print(mdsg, verbose = TRUE, data = TRUE) #> <mkindsg> holding 5 mkinds objects #> Title $title: Experimental X #> Occurrence of observed compounds $observed_n: #> parent A1 #> 5 5 #> #> Datasets $ds: #> <mkinds> with $title: Soil 6 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 3, 6, 10, 20, 34, 55, 90, 112, 132 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 97.2 NA #> 2 0 96.4 NA #> 3 3 71.1 4.3 #> 4 3 69.2 4.6 #> 5 6 58.1 7.0 #> 6 6 56.6 7.2 #> 7 10 44.4 8.2 #> 8 10 43.4 8.0 #> 9 20 33.3 11.0 #> 10 20 29.2 13.7 #> 11 34 17.6 11.5 #> 12 34 18.0 12.7 #> 13 55 10.5 14.9 #> 14 55 9.3 14.5 #> 15 90 4.5 12.1 #> 16 90 4.7 12.3 #> 17 112 3.0 9.9 #> 18 112 3.4 10.2 #> 19 132 2.3 8.8 #> 20 132 2.7 7.8 #> #> <mkinds> with $title: Soil 7 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 3, 7, 14, 30, 60, 90, 120, 180 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 93.6 NA #> 2 0 92.3 NA #> 3 3 87.0 3.9 #> 4 3 82.2 3.1 #> 5 7 74.0 6.9 #> 6 7 73.9 6.6 #> 7 14 64.2 10.4 #> 8 14 69.5 8.3 #> 9 30 54.0 14.4 #> 10 30 54.6 13.7 #> 11 60 41.1 22.1 #> 12 60 38.4 22.3 #> 13 90 32.5 27.5 #> 14 90 35.5 25.4 #> 15 120 28.1 28.0 #> 16 120 29.0 26.6 #> 17 180 26.5 25.8 #> 18 180 27.6 25.3 #> #> <mkinds> with $title: Soil 8 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 1, 3, 8, 14, 27, 48, 70 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 91.9 NA #> 2 0 90.8 NA #> 3 1 64.9 9.6 #> 4 1 66.2 7.7 #> 5 3 43.5 15.0 #> 6 3 44.1 15.1 #> 7 8 18.3 21.2 #> 8 8 18.1 21.1 #> 9 14 10.2 19.7 #> 10 14 10.8 18.9 #> 11 27 4.9 17.5 #> 12 27 3.3 15.9 #> 13 48 1.6 9.5 #> 14 48 1.5 9.8 #> 15 70 1.1 6.2 #> 16 70 0.9 6.1 #> #> <mkinds> with $title: Soil 9 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 1, 3, 8, 14, 27, 48, 70, 91, 120 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 99.8 NA #> 2 0 98.3 NA #> 3 1 77.1 4.2 #> 4 1 77.2 3.9 #> 5 3 59.0 7.4 #> 6 3 58.1 7.9 #> 7 8 27.4 14.5 #> 8 8 29.2 13.7 #> 9 14 19.1 14.2 #> 10 14 29.6 12.2 #> 11 27 10.1 13.7 #> 12 27 18.2 13.2 #> 13 48 4.5 13.6 #> 14 48 9.1 15.4 #> 15 70 2.3 10.4 #> 16 70 2.9 11.6 #> 17 91 2.0 10.0 #> 18 91 1.8 9.5 #> 19 120 2.0 9.1 #> 20 120 2.2 9.0 #> #> <mkinds> with $title: Soil 10 #> Observed compounds $observed: parent, A1 #> Sampling times $sampling_times: #> 0, 8, 14, 21, 41, 63, 91, 120 #> With a maximum of 2 replicates #> Time unit: days #> Observation unit: \\%AR #> time parent A1 #> 1 0 96.1 NA #> 2 0 94.3 NA #> 3 8 73.9 3.3 #> 4 8 73.9 3.4 #> 5 14 69.4 3.9 #> 6 14 73.1 2.9 #> 7 21 65.6 6.4 #> 8 21 65.3 7.2 #> 9 41 55.9 9.1 #> 10 41 54.4 8.5 #> 11 63 47.0 11.7 #> 12 63 49.3 12.0 #> 13 91 44.7 13.3 #> 14 91 46.7 13.2 #> 15 120 42.1 14.3 #> 16 120 41.3 12.1"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"function finds smallest relative error still resulting passing chi-squared test defined FOCUS kinetics report 2006.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"","code":"mkinerrmin(fit, alpha = 0.05)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"fit object class mkinfit. alpha confidence level chosen chi-squared test.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"dataframe following components: err.min relative error, expressed fraction. n.optim number optimised parameters attributed data series. df number remaining degrees freedom chi2 error level calculations. Note mean values used chi2 statistic therefore every time point observed values series counts one time. dataframe one row total dataset one row observed state variable model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"function used internally summary.mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the minimum error to assume in order to pass the variance test — mkinerrmin","text":"","code":"SFO_SFO = mkinmod(parent = mkinsub(\"SFO\", to = \"m1\"), m1 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded fit_FOCUS_D = mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data round(mkinerrmin(fit_FOCUS_D), 4) #> err.min n.optim df #> All data 0.0640 4 15 #> parent 0.0646 2 7 #> m1 0.0469 2 8 # \\dontrun{ fit_FOCUS_E = mkinfit(SFO_SFO, FOCUS_2006_E, quiet = TRUE) round(mkinerrmin(fit_FOCUS_E), 4) #> err.min n.optim df #> All data 0.1544 4 13 #> parent 0.1659 2 7 #> m1 0.1095 2 6 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"function plots squared residuals specified subset observed variables mkinfit object. addition, one dashed line(s) show fitted error model. combined plot fitted model error model plot can obtained plot.mkinfit using argument show_errplot = TRUE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"","code":"mkinerrplot( object, obs_vars = names(object$mkinmod$map), xlim = c(0, 1.1 * max(object$data$predicted)), xlab = \"Predicted\", ylab = \"Squared residual\", maxy = \"auto\", legend = TRUE, lpos = \"topright\", col_obs = \"auto\", pch_obs = \"auto\", frame = TRUE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"object fit represented mkinfit object. obs_vars character vector names observed variables residuals plotted. Defaults observed variables model xlim plot range x direction. xlab Label x axis. ylab Label y axis. maxy Maximum value residuals. used scaling y axis defaults \"auto\". legend legend plotted? lpos legend placed? Default \"topright\". passed legend. col_obs Colors observed variables. pch_obs Symbols used observed variables. frame frame drawn around plots? ... arguments passed plot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"Nothing returned function, called side effect, namely produce plot.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to plot squared residuals and the error model for an mkin object — mkinerrplot","text":"","code":"# \\dontrun{ model <- mkinmod(parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded fit <- mkinfit(model, FOCUS_2006_D, error_model = \"tc\", quiet = TRUE) #> Warning: Observations with value of zero were removed from the data mkinerrplot(fit) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit a kinetic model to data with one or more state variables — mkinfit","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"function maximises likelihood observed data using Port algorithm stats::nlminb(), specified initial fixed parameters starting values. step optimisation, kinetic model solved using function mkinpredict(), except analytical solution implemented, case model solved using degradation function mkinmod object. parameters selected error model fitted simultaneously degradation model parameters, arguments likelihood function.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"","code":"mkinfit( mkinmod, observed, parms.ini = \"auto\", state.ini = \"auto\", err.ini = \"auto\", fixed_parms = NULL, fixed_initials = names(mkinmod$diffs)[-1], from_max_mean = FALSE, solution_type = c(\"auto\", \"analytical\", \"eigen\", \"deSolve\"), method.ode = \"lsoda\", use_compiled = \"auto\", control = list(eval.max = 300, iter.max = 200), transform_rates = TRUE, transform_fractions = TRUE, quiet = FALSE, atol = 1e-08, rtol = 1e-10, error_model = c(\"const\", \"obs\", \"tc\"), error_model_algorithm = c(\"auto\", \"d_3\", \"direct\", \"twostep\", \"threestep\", \"fourstep\", \"IRLS\", \"OLS\"), reweight.tol = 1e-08, reweight.max.iter = 10, trace_parms = FALSE, test_residuals = FALSE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"mkinmod list class mkinmod, containing kinetic model fitted data, one shorthand names (\"SFO\", \"FOMC\", \"DFOP\", \"HS\", \"SFORB\", \"IORE\"). shorthand name given, parent degradation model generated variable highest value observed. observed dataframe observed data. first column called \"name\" must contain name observed variable data point. second column must contain times observation, named \"time\". third column must named \"value\" contain observed values. Zero values \"value\" column removed, warning, order avoid problems fitting two-component error model. expected problem, general, values zero observed degradation data, lower limit detection. parms.ini named vector initial values parameters, including parameters optimised potentially also fixed parameters indicated fixed_parms. set \"auto\", initial values rate constants set default values. Using parameter names model gives error. possible specify subset parameters model needs. can use parameter lists \"bparms.ode\" previously fitted model, contains differential equation parameters model. works nicely models nested. example given . state.ini named vector initial values state variables model. case observed variables represented one model variable, names differ names observed variables (see map component mkinmod). default set initial value first model variable mean time zero values variable maximum observed value, others 0. variable time zero observations, initial value set 100. err.ini named vector initial values error model parameters optimised. set \"auto\", initial values set default values. Otherwise, inital values error model parameters must given. fixed_parms names parameters optimised rather kept values specified parms.ini. Alternatively, named numeric vector parameters fixed, regardless values parms.ini. fixed_initials names model variables initial state time 0 excluded optimisation. Defaults state variables except first one. from_max_mean set TRUE, model one observed variable, data time maximum observed value (averaging sampling time) discarded, time subtracted remaining time values, time maximum observed mean value new time zero. solution_type set \"eigen\", solution system differential equations based spectral decomposition coefficient matrix cases possible. set \"deSolve\", numerical ode solver package deSolve used. set \"analytical\", analytical solution model used. implemented relatively simple degradation models. default \"auto\", uses \"analytical\" possible, otherwise \"deSolve\" compiler present, \"eigen\" compiler present model can expressed using eigenvalues eigenvectors. method.ode solution method passed via mkinpredict() deSolve::ode() case solution type \"deSolve\". default \"lsoda\" performant, sometimes fails converge. use_compiled set FALSE, compiled version mkinmod model used calls mkinpredict() even compiled version present. control list control arguments passed stats::nlminb(). transform_rates Boolean specifying kinetic rate constants transformed model specification used fitting better compliance assumption normal distribution estimator. TRUE, also alpha beta parameters FOMC model log-transformed, well k1 k2 rate constants DFOP HS models break point tb HS model. FALSE, zero used lower bound rates optimisation. transform_fractions Boolean specifying formation fractions transformed model specification used fitting better compliance assumption normal distribution estimator. default (TRUE) transformations. TRUE, g parameter DFOP model also transformed. Transformations described transform_odeparms. quiet Suppress printing current value negative log-likelihood improvement? atol Absolute error tolerance, passed deSolve::ode(). Default 1e-8, lower default deSolve::lsoda() function used per default. rtol Absolute error tolerance, passed deSolve::ode(). Default 1e-10, much lower deSolve::lsoda(). error_model error model \"const\", constant standard deviation assumed. error model \"obs\", observed variable assumed variance. error model \"tc\" (two-component error model), two component error model similar one described Rocke Lorenzato (1995) used setting likelihood function. Note model deviates model Rocke Lorenzato, model implies errors follow lognormal distribution large values, normal distribution assumed method. error_model_algorithm \"auto\", selected algorithm depends error model. error model \"const\", unweighted nonlinear least squares fitting (\"OLS\") selected. error model \"obs\", \"tc\", \"d_3\" algorithm selected. algorithm \"d_3\" directly minimize negative log-likelihood independently also use three step algorithm described . fit higher likelihood returned. algorithm \"direct\" directly minimize negative log-likelihood. algorithm \"twostep\" minimize negative log-likelihood initial unweighted least squares optimisation step. algorithm \"threestep\" starts unweighted least squares, optimizes error model using degradation model parameters found, minimizes negative log-likelihood free degradation error model parameters. algorithm \"fourstep\" starts unweighted least squares, optimizes error model using degradation model parameters found, optimizes degradation model fixed error model parameters, finally minimizes negative log-likelihood free degradation error model parameters. algorithm \"IRLS\" (Iteratively Reweighted Least Squares) starts unweighted least squares, iterates optimization error model parameters subsequent optimization degradation model using error model parameters, error model parameters converge. reweight.tol Tolerance convergence criterion calculated error model parameters IRLS fits. reweight.max.iter Maximum number iterations IRLS fits. trace_parms trace parameter values listed? test_residuals residuals tested normal distribution? ... arguments passed deSolve::ode().","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"list \"mkinfit\" class attribute.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"Per default, parameters kinetic models internally transformed order better satisfy assumption normal distribution estimators.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"using \"IORE\" submodel metabolites, fitting \"transform_rates = TRUE\" (default) often leads failures numerical ODE solver. situation may help switch internal rate transformation.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"Rocke DM Lorenzato S (1995) two-component model measurement error analytical chemistry. Technometrics 37(2), 176-184. Ranke J Meinecke S (2019) Error Models Kinetic Evaluation Chemical Degradation Data. Environments 6(12) 124 doi:10.3390/environments6120124 .","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit a kinetic model to data with one or more state variables — mkinfit","text":"","code":"# Use shorthand notation for parent only degradation fit <- mkinfit(\"FOMC\", FOCUS_2006_C, quiet = TRUE) summary(fit) #> mkin version used for fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:15:31 2023 #> Date of summary: Thu Nov 16 04:15:31 2023 #> #> Equations: #> d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent #> #> Model predictions using solution type analytical #> #> Fitted using 222 model solutions performed in 0.014 s #> #> Error model: Constant variance #> #> Error model algorithm: OLS #> #> Starting values for parameters to be optimised: #> value type #> parent_0 85.1 state #> alpha 1.0 deparm #> beta 10.0 deparm #> #> Starting values for the transformed parameters actually optimised: #> value lower upper #> parent_0 85.100000 -Inf Inf #> log_alpha 0.000000 -Inf Inf #> log_beta 2.302585 -Inf Inf #> #> Fixed parameter values: #> None #> #> Results: #> #> AIC BIC logLik #> 44.68652 45.47542 -18.34326 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> Estimate Std. Error Lower Upper #> parent_0 85.87000 1.8070 81.23000 90.5200 #> log_alpha 0.05192 0.1353 -0.29580 0.3996 #> log_beta 0.65100 0.2287 0.06315 1.2390 #> sigma 1.85700 0.4378 0.73200 2.9830 #> #> Parameter correlation: #> parent_0 log_alpha log_beta sigma #> parent_0 1.000e+00 -1.565e-01 -3.142e-01 4.681e-08 #> log_alpha -1.565e-01 1.000e+00 9.564e-01 1.013e-07 #> log_beta -3.142e-01 9.564e-01 1.000e+00 8.637e-08 #> sigma 4.681e-08 1.013e-07 8.637e-08 1.000e+00 #> #> 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.870 47.530 3.893e-08 81.2300 90.520 #> alpha 1.053 7.393 3.562e-04 0.7439 1.491 #> beta 1.917 4.373 3.601e-03 1.0650 3.451 #> sigma 1.857 4.243 4.074e-03 0.7320 2.983 #> #> FOCUS Chi2 error levels in percent: #> err.min n.optim df #> All data 6.657 3 6 #> parent 6.657 3 6 #> #> Estimated disappearance times: #> DT50 DT90 DT50back #> parent 1.785 15.15 4.56 #> #> Data: #> time variable observed predicted residual #> 0 parent 85.1 85.875 -0.7749 #> 1 parent 57.9 55.191 2.7091 #> 3 parent 29.9 31.845 -1.9452 #> 7 parent 14.6 17.012 -2.4124 #> 14 parent 9.7 9.241 0.4590 #> 28 parent 6.6 4.754 1.8460 #> 63 parent 4.0 2.102 1.8977 #> 91 parent 3.9 1.441 2.4590 #> 119 parent 0.6 1.092 -0.4919 # One parent compound, one metabolite, both single first order. # We remove zero values from FOCUS dataset D in order to avoid warnings FOCUS_D <- subset(FOCUS_2006_D, value != 0) # Use mkinsub for convenience in model formulation. Pathway to sink included per default. SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded # Fit the model quietly to the FOCUS example dataset D using defaults fit <- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE) plot_sep(fit) # As lower parent values appear to have lower variance, we try an alternative error model fit.tc <- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\") # This avoids the warning, and the likelihood ratio test confirms it is preferable lrtest(fit.tc, fit) #> Likelihood ratio test #> #> Model 1: SFO_SFO with error model tc and fixed parameter(s) m1_0 #> Model 2: SFO_SFO with error model const and fixed parameter(s) m1_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 6 -64.983 #> 2 5 -97.224 -1 64.483 9.737e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # We can also allow for different variances of parent and metabolite as error model fit.obs <- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"obs\") # The two-component error model has significantly higher likelihood lrtest(fit.obs, fit.tc) #> Likelihood ratio test #> #> Model 1: SFO_SFO with error model tc and fixed parameter(s) m1_0 #> Model 2: SFO_SFO with error model obs and fixed parameter(s) m1_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 6 -64.983 #> 2 6 -96.936 0 63.907 < 2.2e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 parms(fit.tc) #> parent_0 k_parent k_m1 f_parent_to_m1 sigma_low #> 1.007343e+02 1.005562e-01 5.166712e-03 5.083933e-01 3.049883e-03 #> rsd_high #> 7.928118e-02 endpoints(fit.tc) #> $ff #> parent_m1 parent_sink #> 0.5083933 0.4916067 #> #> $distimes #> DT50 DT90 #> parent 6.89313 22.89848 #> m1 134.15634 445.65771 #> # We can show a quick (only one replication) benchmark for this case, as we # have several alternative solution methods for the model. We skip # uncompiled deSolve, as it is so slow. More benchmarks are found in the # benchmark vignette # \\dontrun{ if(require(rbenchmark)) { benchmark(replications = 1, order = \"relative\", columns = c(\"test\", \"relative\", \"elapsed\"), deSolve_compiled = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\", solution_type = \"deSolve\", use_compiled = TRUE), eigen = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\", solution_type = \"eigen\"), analytical = mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\", solution_type = \"analytical\")) } #> test relative elapsed #> 3 analytical 1.000 0.223 #> 2 eigen 1.973 0.440 #> 1 deSolve_compiled 2.072 0.462 # } # Use stepwise fitting, using optimised parameters from parent only fit, FOMC-SFO # \\dontrun{ FOMC_SFO <- mkinmod( parent = mkinsub(\"FOMC\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded fit.FOMC_SFO <- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE) # Again, we get a warning and try a more sophisticated error model fit.FOMC_SFO.tc <- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE, error_model = \"tc\") # This model has a higher likelihood, but not significantly so lrtest(fit.tc, fit.FOMC_SFO.tc) #> Likelihood ratio test #> #> Model 1: FOMC_SFO with error model tc and fixed parameter(s) m1_0 #> Model 2: SFO_SFO with error model tc and fixed parameter(s) m1_0 #> #Df LogLik Df Chisq Pr(>Chisq) #> 1 7 -64.829 #> 2 6 -64.983 -1 0.3075 0.5792 # Also, the missing standard error for log_beta and the t-tests for alpha # and beta indicate overparameterisation summary(fit.FOMC_SFO.tc, data = FALSE) #> Warning: NaNs produced #> Warning: NaNs produced #> Warning: diag(.) had 0 or NA entries; non-finite result is doubtful #> mkin version used for fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:15:35 2023 #> Date of summary: Thu Nov 16 04:15:35 2023 #> #> Equations: #> d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent #> d_m1/dt = + f_parent_to_m1 * (alpha/beta) * 1/((time/beta) + 1) * #> parent - k_m1 * m1 #> #> Model predictions using solution type deSolve #> #> Fitted using 4062 model solutions performed in 0.768 s #> #> Error model: Two-component variance function #> #> Error model algorithm: d_3 #> Direct fitting and three-step fitting yield approximately the same likelihood #> #> Starting values for parameters to be optimised: #> value type #> parent_0 100.75 state #> alpha 1.00 deparm #> beta 10.00 deparm #> k_m1 0.10 deparm #> f_parent_to_m1 0.50 deparm #> sigma_low 0.10 error #> rsd_high 0.10 error #> #> Starting values for the transformed parameters actually optimised: #> value lower upper #> parent_0 100.750000 -Inf Inf #> log_k_m1 -2.302585 -Inf Inf #> f_parent_qlogis 0.000000 -Inf Inf #> log_alpha 0.000000 -Inf Inf #> log_beta 2.302585 -Inf Inf #> sigma_low 0.100000 0 Inf #> rsd_high 0.100000 0 Inf #> #> Fixed parameter values: #> value type #> m1_0 0 state #> #> Results: #> #> AIC BIC logLik #> 143.658 155.1211 -64.82902 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> Estimate Std. Error Lower Upper #> parent_0 101.600000 2.6400000 96.240000 107.000000 #> log_k_m1 -5.284000 0.0929100 -5.474000 -5.095000 #> f_parent_qlogis 0.001426 0.0766900 -0.155000 0.157800 #> log_alpha 5.522000 0.0077320 5.506000 5.538000 #> log_beta 7.806000 NaN NaN NaN #> sigma_low 0.002488 0.0002431 0.001992 0.002984 #> rsd_high 0.079210 0.0093280 0.060180 0.098230 #> #> Parameter correlation: #> parent_0 log_k_m1 f_parent_qlogis log_alpha log_beta #> parent_0 1.000000 -0.095161 -0.76675 0.70542 NaN #> log_k_m1 -0.095161 1.000000 0.51429 -0.14382 NaN #> f_parent_qlogis -0.766750 0.514286 1.00000 -0.61393 NaN #> log_alpha 0.705417 -0.143821 -0.61393 1.00000 NaN #> log_beta NaN NaN NaN NaN 1 #> sigma_low 0.016086 0.001583 0.01547 5.87036 NaN #> rsd_high 0.006618 -0.011695 -0.05356 0.04848 NaN #> sigma_low rsd_high #> parent_0 0.016086 0.006618 #> log_k_m1 0.001583 -0.011695 #> f_parent_qlogis 0.015466 -0.053560 #> log_alpha 5.870361 0.048483 #> log_beta NaN NaN #> sigma_low 1.000000 -0.652545 #> rsd_high -0.652545 1.000000 #> #> 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 1.016e+02 32.7800 6.310e-26 9.624e+01 1.070e+02 #> k_m1 5.072e-03 10.1200 1.216e-11 4.196e-03 6.130e-03 #> f_parent_to_m1 5.004e-01 20.8300 4.316e-20 4.613e-01 5.394e-01 #> alpha 2.502e+02 0.5624 2.889e-01 2.463e+02 2.542e+02 #> beta 2.455e+03 0.5549 2.915e-01 NA NA #> sigma_low 2.488e-03 0.4843 3.158e-01 1.992e-03 2.984e-03 #> rsd_high 7.921e-02 8.4300 8.001e-10 6.018e-02 9.823e-02 #> #> FOCUS Chi2 error levels in percent: #> err.min n.optim df #> All data 6.781 5 14 #> parent 7.141 3 6 #> m1 4.640 2 8 #> #> Resulting formation fractions: #> ff #> parent_m1 0.5004 #> parent_sink 0.4996 #> #> Estimated disappearance times: #> DT50 DT90 DT50back #> parent 6.812 22.7 6.834 #> m1 136.661 454.0 NA # We can easily use starting parameters from the parent only fit (only for illustration) fit.FOMC = mkinfit(\"FOMC\", FOCUS_2006_D, quiet = TRUE, error_model = \"tc\") fit.FOMC_SFO <- mkinfit(FOMC_SFO, FOCUS_D, quiet = TRUE, parms.ini = fit.FOMC$bparms.ode, error_model = \"tc\") # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to set up a kinetic model with one or more state variables — mkinmod","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"function usually called using call mkinsub() observed variable, specifying corresponding submodel well outgoing pathways (see examples). Print mkinmod objects way user finds way get components.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"","code":"mkinmod( ..., use_of_ff = \"max\", name = NULL, speclist = NULL, quiet = FALSE, verbose = FALSE, dll_dir = NULL, unload = FALSE, overwrite = FALSE ) # S3 method for mkinmod print(x, ...) mkinsub(submodel, to = NULL, sink = TRUE, full_name = NA)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"... observed variable, list obtained mkinsub() specified argument (see examples). Currently, single first order kinetics \"SFO\", indeterminate order rate equation kinetics \"IORE\", single first order reversible binding \"SFORB\" implemented variables, \"FOMC\", \"DFOP\", \"HS\" \"logistic\" can additionally chosen first variable assumed source compartment. Additionally, mkinsub() argument , specifying names variables transfer assumed model. argument use_of_ff set \"min\" model compartment \"SFO\" \"SFORB\", additional mkinsub() argument can sink = FALSE, effectively fixing flux sink zero. print.mkinmod, argument currently used. use_of_ff Specification use formation fractions model equations , applicable, coefficient matrix. \"max\", formation fractions always used (default). \"min\", minimum use formation fractions made, .e. first-order pathway metabolite rate constant. name name model. valid R object name. speclist specification observed variables submodel types pathways can given single list using argument. Default NULL. quiet messages suppressed? verbose TRUE, passed inline::cfunction() applicable give detailed information C function built. dll_dir Directory DLL object, generated internally inline::cfunction(), saved. DLL stored permanent location use future sessions, 'dll_dir' 'name' specified. helpful fit objects cached e.g. knitr, cache remains functional across sessions DLL stored user defined location. unload DLL target location 'dll_dir' already loaded, unloaded first? overwrite file exists target DLL location 'dll_dir', overwritten? x mkinmod object. submodel Character vector length one specify submodel type. See mkinmod list allowed submodel names. Vector names state variable transformation shall included model. sink pathway sink included model addition pathways state variables? full_name optional name used e.g. plotting fits performed model. can use non-ASCII characters , R code portable, .e. may produce unintended plot results operating systems system configurations.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"list class mkinmod use mkinfit(), containing, among others, diffs vector string representations differential equations, one modelling variable. map list containing named character vectors observed variable, specifying modelling variables represented. use_of_ff content use_of_ff passed list component. deg_func generated, function containing solution degradation model. coefmat coefficient matrix, system differential equations can represented one. cf generated, compiled function calculating derivatives returned cfunction. list use mkinmod.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"definition model types parameters, equations given FOCUS NAFTA guidance documents used. kinetic models one observed variable, symbolic solution system differential equations included resulting mkinmod object cases, speeding solution. C compiler found pkgbuild::has_compiler() one observed variable specification, C code generated evaluating differential equations, compiled using inline::cfunction() added resulting mkinmod object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"IORE submodel well tested metabolites. using model metabolites, may want read note help page mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics NAFTA Technical Working Group Pesticides (dated) Guidance Evaluating Calculating Degradation Kinetics Environmental Media","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinmod.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to set up a kinetic model with one or more state variables — mkinmod","text":"","code":"# Specify the SFO model (this is not needed any more, as we can now mkinfit(\"SFO\", ...) SFO <- mkinmod(parent = mkinsub(\"SFO\")) # One parent compound, one metabolite, both single first order SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded print(SFO_SFO) #> <mkinmod> model generated with #> Use of formation fractions $use_of_ff: max #> Specification $spec: #> $parent #> $type: SFO; $to: m1; $sink: TRUE #> $m1 #> $type: SFO; $sink: TRUE #> Coefficient matrix $coefmat available #> Compiled model $cf available #> Differential equations: #> d_parent/dt = - k_parent * parent #> d_m1/dt = + f_parent_to_m1 * k_parent * parent - k_m1 * m1 # \\dontrun{ fit_sfo_sfo <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, solution_type = \"deSolve\") #> Warning: Observations with value of zero were removed from the data # Now supplying compound names used for plotting, and write to user defined location # We need to choose a path outside the session tempdir because this gets removed DLL_dir <- \"~/.local/share/mkin\" if (!dir.exists(DLL_dir)) dir.create(DLL_dir) SFO_SFO.2 <- mkinmod( parent = mkinsub(\"SFO\", \"m1\", full_name = \"Test compound\"), m1 = mkinsub(\"SFO\", full_name = \"Metabolite M1\"), name = \"SFO_SFO\", dll_dir = DLL_dir, unload = TRUE, overwrite = TRUE) #> Temporary DLL for differentials generated and loaded #> Copied DLL from /tmp/Rtmpjn19MY/filee5f2f55ca8372.so to /home/jranke/.local/share/mkin/SFO_SFO.so # Now we can save the model and restore it in a new session saveRDS(SFO_SFO.2, file = \"~/SFO_SFO.rds\") # Terminate the R session here if you would like to check, and then do library(mkin) SFO_SFO.3 <- readRDS(\"~/SFO_SFO.rds\") fit_sfo_sfo <- mkinfit(SFO_SFO.3, FOCUS_2006_D, quiet = TRUE, solution_type = \"deSolve\") #> Warning: Observations with value of zero were removed from the data # Show details of creating the C function SFO_SFO <- mkinmod( parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\"), verbose = TRUE) #> Program source: #> 1: #include <R.h> #> 2: #> 3: #> 4: static double parms [3]; #> 5: #define k_parent parms[0] #> 6: #define f_parent_to_m1 parms[1] #> 7: #define k_m1 parms[2] #> 8: #> 9: void initpar(void (* odeparms)(int *, double *)) { #> 10: int N = 3; #> 11: odeparms(&N, parms); #> 12: } #> 13: #> 14: #> 15: void diffs ( int * n, double * t, double * y, double * f, double * rpar, int * ipar ) { #> 16: #> 17: f[0] = - k_parent * y[0]; #> 18: f[1] = + f_parent_to_m1 * k_parent * y[0] - k_m1 * y[1]; #> 19: } #> Temporary DLL for differentials generated and loaded # The symbolic solution which is available in this case is not # made for human reading but for speed of computation SFO_SFO$deg_func #> function (observed, odeini, odeparms) #> { #> predicted <- numeric(0) #> with(as.list(odeparms), { #> t <- observed[observed$name == \"parent\", \"time\"] #> predicted <<- c(predicted, SFO.solution(t, odeini[\"parent\"], #> k_parent)) #> t <- observed[observed$name == \"m1\", \"time\"] #> predicted <<- c(predicted, (((k_m1 - k_parent) * odeini[\"m1\"] - #> f_parent_to_m1 * k_parent * odeini[\"parent\"]) * exp(-k_m1 * #> t) + f_parent_to_m1 * k_parent * odeini[\"parent\"] * #> exp(-k_parent * t))/(k_m1 - k_parent)) #> }) #> return(predicted) #> } #> <environment: 0x555555f44b28> # If we have several parallel metabolites # (compare tests/testthat/test_synthetic_data_for_UBA_2014.R) m_synth_DFOP_par <- mkinmod( parent = mkinsub(\"DFOP\", c(\"M1\", \"M2\")), M1 = mkinsub(\"SFO\"), M2 = mkinsub(\"SFO\"), quiet = TRUE) fit_DFOP_par_c <- mkinfit(m_synth_DFOP_par, synthetic_data_for_UBA_2014[[12]]$data, quiet = TRUE) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"function plots confidence intervals parameters fitted using mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"","code":"mkinparplot(object)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"object fit represented mkinfit object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"Nothing returned function, called side effect, namely produce plot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to plot the confidence intervals obtained using mkinfit — mkinparplot","text":"","code":"# \\dontrun{ model <- mkinmod( T245 = mkinsub(\"SFO\", to = c(\"phenol\"), sink = FALSE), phenol = mkinsub(\"SFO\", to = c(\"anisole\")), anisole = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded fit <- mkinfit(model, subset(mccall81_245T, soil == \"Commerce\"), quiet = TRUE) #> Warning: Observations with value of zero were removed from the data mkinparplot(fit) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"Deprecated function. now calls plot method plot.mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"","code":"mkinplot(fit, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"fit object class mkinfit. ... arguments passed plot.mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot the observed data and the fitted model of an mkinfit object — mkinplot","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":null,"dir":"Reference","previous_headings":"","what":"Produce predictions from a kinetic model using specific parameters — mkinpredict","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"function produces time series observed variables kinetic model specified mkinmod, using specific set kinetic parameters initial values state variables.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"","code":"mkinpredict(x, odeparms, odeini, outtimes, ...) # S3 method for mkinmod mkinpredict( x, odeparms = c(k_parent_sink = 0.1), odeini = c(parent = 100), outtimes = seq(0, 120, by = 0.1), solution_type = \"deSolve\", use_compiled = \"auto\", use_symbols = FALSE, method.ode = \"lsoda\", atol = 1e-08, rtol = 1e-10, maxsteps = 20000L, map_output = TRUE, na_stop = TRUE, ... ) # S3 method for mkinfit mkinpredict( x, odeparms = x$bparms.ode, odeini = x$bparms.state, outtimes = seq(0, 120, by = 0.1), solution_type = \"deSolve\", use_compiled = \"auto\", method.ode = \"lsoda\", atol = 1e-08, rtol = 1e-10, map_output = TRUE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"x kinetic model produced mkinmod, kinetic fit fitted mkinfit. latter case, fitted parameters used prediction. odeparms numeric vector specifying parameters used kinetic model, generally defined set ordinary differential equations. odeini numeric vector containing initial values state variables model. Note state variables can differ observed variables, example case SFORB model. outtimes numeric vector specifying time points model predictions generated. ... arguments passed ode solver case solver used. solution_type method used producing predictions. generally \"analytical\" one observed variable, usually \"deSolve\" case several observed variables. third possibility \"eigen\" fast comparison uncompiled ODE models, applicable models, e.g. using FOMC parent compound. use_compiled set FALSE, compiled version mkinmod model used, even present. use_symbols set TRUE (default), symbol info present mkinmod object used available accessing compiled code method.ode solution method passed via mkinpredict ode] case solution type \"deSolve\" using compiled code. using compiled code, lsoda supported. atol Absolute error tolerance, passed ode solver. rtol Absolute error tolerance, passed ode solver. maxsteps Maximum number steps, passed ode solver. map_output Boolean specify output list values observed variables (default) state variables (set FALSE). Setting FALSE effect analytical solutions, always return mapped output. na_stop error ode returns NaN values","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"matrix numeric solution wide format","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Produce predictions from a kinetic model using specific parameters — mkinpredict","text":"","code":"SFO <- mkinmod(degradinol = mkinsub(\"SFO\")) # Compare solution types mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"analytical\") #> time degradinol #> 0 0 100.0000000 #> 1 1 74.0818221 #> 2 2 54.8811636 #> 3 3 40.6569660 #> 4 4 30.1194212 #> 5 5 22.3130160 #> 6 6 16.5298888 #> 7 7 12.2456428 #> 8 8 9.0717953 #> 9 9 6.7205513 #> 10 10 4.9787068 #> 11 11 3.6883167 #> 12 12 2.7323722 #> 13 13 2.0241911 #> 14 14 1.4995577 #> 15 15 1.1108997 #> 16 16 0.8229747 #> 17 17 0.6096747 #> 18 18 0.4516581 #> 19 19 0.3345965 #> 20 20 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"deSolve\") #> time degradinol #> 0 0 100.0000000 #> 1 1 74.0818221 #> 2 2 54.8811636 #> 3 3 40.6569660 #> 4 4 30.1194212 #> 5 5 22.3130160 #> 6 6 16.5298888 #> 7 7 12.2456428 #> 8 8 9.0717953 #> 9 9 6.7205513 #> 10 10 4.9787068 #> 11 11 3.6883167 #> 12 12 2.7323722 #> 13 13 2.0241911 #> 14 14 1.4995577 #> 15 15 1.1108996 #> 16 16 0.8229747 #> 17 17 0.6096747 #> 18 18 0.4516581 #> 19 19 0.3345965 #> 20 20 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"deSolve\", use_compiled = FALSE) #> time degradinol #> 0 0 100.0000000 #> 1 1 74.0818221 #> 2 2 54.8811636 #> 3 3 40.6569660 #> 4 4 30.1194212 #> 5 5 22.3130160 #> 6 6 16.5298888 #> 7 7 12.2456428 #> 8 8 9.0717953 #> 9 9 6.7205513 #> 10 10 4.9787068 #> 11 11 3.6883167 #> 12 12 2.7323722 #> 13 13 2.0241911 #> 14 14 1.4995577 #> 15 15 1.1108996 #> 16 16 0.8229747 #> 17 17 0.6096747 #> 18 18 0.4516581 #> 19 19 0.3345965 #> 20 20 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"eigen\") #> time degradinol #> 0 0 100.0000000 #> 1 1 74.0818221 #> 2 2 54.8811636 #> 3 3 40.6569660 #> 4 4 30.1194212 #> 5 5 22.3130160 #> 6 6 16.5298888 #> 7 7 12.2456428 #> 8 8 9.0717953 #> 9 9 6.7205513 #> 10 10 4.9787068 #> 11 11 3.6883167 #> 12 12 2.7323722 #> 13 13 2.0241911 #> 14 14 1.4995577 #> 15 15 1.1108997 #> 16 16 0.8229747 #> 17 17 0.6096747 #> 18 18 0.4516581 #> 19 19 0.3345965 #> 20 20 0.2478752 # Compare integration methods to analytical solution mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, solution_type = \"analytical\")[21,] #> time degradinol #> 20.0000000 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, method = \"lsoda\", use_compiled = FALSE)[21,] #> time degradinol #> 20.0000000 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, method = \"ode45\", use_compiled = FALSE)[21,] #> time degradinol #> 20.0000000 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), 0:20, method = \"rk4\", use_compiled = FALSE)[21,] #> time degradinol #> 20.0000000 0.2480043 # rk4 is not as precise here # The number of output times used to make a lot of difference until the # default for atol was adjusted mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), seq(0, 20, by = 0.1))[201,] #> time degradinol #> 20.0000000 0.2478752 mkinpredict(SFO, c(k_degradinol = 0.3), c(degradinol = 100), seq(0, 20, by = 0.01))[2001,] #> time degradinol #> 20.0000000 0.2478752 # Comparison of the performance of solution types SFO_SFO = mkinmod(parent = list(type = \"SFO\", to = \"m1\"), m1 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded if(require(rbenchmark)) { benchmark(replications = 10, order = \"relative\", columns = c(\"test\", \"relative\", \"elapsed\"), eigen = mkinpredict(SFO_SFO, c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01), c(parent = 100, m1 = 0), seq(0, 20, by = 0.1), solution_type = \"eigen\")[201,], deSolve_compiled = mkinpredict(SFO_SFO, c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01), c(parent = 100, m1 = 0), seq(0, 20, by = 0.1), solution_type = \"deSolve\")[201,], deSolve = mkinpredict(SFO_SFO, c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01), c(parent = 100, m1 = 0), seq(0, 20, by = 0.1), solution_type = \"deSolve\", use_compiled = FALSE)[201,], analytical = mkinpredict(SFO_SFO, c(k_parent = 0.15, f_parent_to_m1 = 0.5, k_m1 = 0.01), c(parent = 100, m1 = 0), seq(0, 20, by = 0.1), solution_type = \"analytical\", use_compiled = FALSE)[201,]) } #> test relative elapsed #> 4 analytical 1 0.001 #> 2 deSolve_compiled 2 0.002 #> 1 eigen 8 0.008 #> 3 deSolve 64 0.064 # \\dontrun{ # Predict from a fitted model f <- mkinfit(SFO_SFO, FOCUS_2006_C, quiet = TRUE) f <- mkinfit(SFO_SFO, FOCUS_2006_C, quiet = TRUE, solution_type = \"deSolve\") head(mkinpredict(f)) #> Error in !is.null(x$symbols) & use_symbols: operations are possible only for numeric, logical or complex types # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Function to plot residuals stored in an mkin object — mkinresplot","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"function plots residuals specified subset observed variables mkinfit object. combined plot fitted model residuals can obtained using plot.mkinfit using argument show_residuals = TRUE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"","code":"mkinresplot( object, obs_vars = names(object$mkinmod$map), xlim = c(0, 1.1 * max(object$data$time)), standardized = FALSE, xlab = \"Time\", ylab = ifelse(standardized, \"Standardized residual\", \"Residual\"), maxabs = \"auto\", legend = TRUE, lpos = \"topright\", col_obs = \"auto\", pch_obs = \"auto\", frame = TRUE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"object fit represented mkinfit object. obs_vars character vector names observed variables residuals plotted. Defaults observed variables model xlim plot range x direction. standardized residuals standardized dividing standard deviation given error model fit? xlab Label x axis. ylab Label y axis. maxabs Maximum absolute value residuals. used scaling y axis defaults \"auto\". legend legend plotted? lpos legend placed? Default \"topright\". passed legend. col_obs Colors observed variables. pch_obs Symbols used observed variables. frame frame drawn around plots? ... arguments passed plot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"Nothing returned function, called side effect, namely produce plot.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"Johannes Ranke Katrin Lindenberger","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Function to plot residuals stored in an mkin object — mkinresplot","text":"","code":"model <- mkinmod(parent = mkinsub(\"SFO\", \"m1\"), m1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded fit <- mkinfit(model, FOCUS_2006_D, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data mkinresplot(fit, \"m1\")"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"function calls mkinfit combinations models datasets specified first two arguments.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"","code":"mmkin( models = c(\"SFO\", \"FOMC\", \"DFOP\"), datasets, cores = if (Sys.info()[\"sysname\"] == \"Windows\") 1 else parallel::detectCores(), cluster = NULL, ... ) # S3 method for mmkin print(x, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"models Either character vector shorthand names like c(\"SFO\", \"FOMC\", \"DFOP\", \"HS\", \"SFORB\"), optionally named list mkinmod objects. datasets optionally named list datasets suitable observed data mkinfit. cores number cores used multicore processing. used cluster argument NULL. Windows machines, cores > 1 supported, need use cluster argument use multiple logical processors. Per default, cores detected parallel::detectCores() used, except Windows default 1. cluster cluster returned makeCluster used parallel execution. ... used. x mmkin object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"two-dimensional array mkinfit objects /try-errors can indexed using model names first index (row index) dataset names second index (column index).","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit one or more kinetic models with one or more state variables to one or\nmore datasets — mmkin","text":"","code":"# \\dontrun{ m_synth_SFO_lin <- mkinmod(parent = mkinsub(\"SFO\", \"M1\"), M1 = mkinsub(\"SFO\", \"M2\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded m_synth_FOMC_lin <- mkinmod(parent = mkinsub(\"FOMC\", \"M1\"), M1 = mkinsub(\"SFO\", \"M2\"), M2 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded models <- list(SFO_lin = m_synth_SFO_lin, FOMC_lin = m_synth_FOMC_lin) datasets <- lapply(synthetic_data_for_UBA_2014[1:3], function(x) x$data) names(datasets) <- paste(\"Dataset\", 1:3) time_default <- system.time(fits.0 <- mmkin(models, datasets, quiet = TRUE)) time_1 <- system.time(fits.4 <- mmkin(models, datasets, cores = 1, quiet = TRUE)) time_default #> user system elapsed #> 1.653 0.553 0.654 time_1 #> user system elapsed #> 2.013 0.008 2.021 endpoints(fits.0[[\"SFO_lin\", 2]]) #> $ff #> parent_M1 parent_sink M1_M2 M1_sink #> 0.7340481 0.2659519 0.7505690 0.2494310 #> #> $distimes #> DT50 DT90 #> parent 0.8777689 2.915885 #> M1 2.3257403 7.725942 #> M2 33.7201060 112.015767 #> # plot.mkinfit handles rows or columns of mmkin result objects plot(fits.0[1, ]) plot(fits.0[1, ], obs_var = c(\"M1\", \"M2\")) plot(fits.0[, 1]) # Use double brackets to extract a single mkinfit object, which will be plotted # by plot.mkinfit and can be plotted using plot_sep plot(fits.0[[1, 1]], sep_obs = TRUE, show_residuals = TRUE, show_errmin = TRUE) plot_sep(fits.0[[1, 1]]) # Plotting with mmkin (single brackets, extracting an mmkin object) does not # allow to plot the observed variables separately plot(fits.0[1, 1]) # On Windows, we can use multiple cores by making a cluster first cl <- parallel::makePSOCKcluster(12) f <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), list(A = FOCUS_2006_A, B = FOCUS_2006_B, C = FOCUS_2006_C, D = FOCUS_2006_D), cluster = cl, quiet = TRUE) print(f) #> <mmkin> object #> Status of individual fits: #> #> dataset #> model A B C D #> SFO OK OK OK OK #> FOMC C OK OK OK #> DFOP OK OK OK OK #> #> C: Optimisation did not converge: #> false convergence (8) #> OK: No warnings # We get false convergence for the FOMC fit to FOCUS_2006_A because this # dataset is really SFO, and the FOMC fit is overparameterised parallel::stopCluster(cl) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform a hierarchical model fit with multiple starting values — multistart","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"purpose method check certain algorithm fitting nonlinear hierarchical models (also known nonlinear mixed-effects models) reliably yield results sufficiently similar , started certain range reasonable starting parameters. inspired article practical identifiabiliy frame nonlinear mixed-effects models Duchesne et al (2021).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"","code":"multistart( object, n = 50, cores = if (Sys.info()[\"sysname\"] == \"Windows\") 1 else parallel::detectCores(), cluster = NULL, ... ) # S3 method for saem.mmkin multistart(object, n = 50, cores = 1, cluster = NULL, ...) # S3 method for multistart print(x, ...) best(object, ...) # S3 method for default best(object, ...) which.best(object, ...) # S3 method for default which.best(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"object fit object work n many different combinations starting parameters used? cores many fits run parallel (posix platforms)? cluster cluster returned parallel::makeCluster used parallel execution. ... Passed update function. x multistart object print","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"list saem.mmkin objects, class attributes 'multistart.saem.mmkin' 'multistart'. object highest likelihood index object highest likelihood","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"Duchesne R, Guillemin , Gandrillon O, Crauste F. Practical identifiability frame nonlinear mixed effects models: example vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478. doi: 10.1186/s12859-021-04373-4.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/multistart.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform a hierarchical model fit with multiple starting values — multistart","text":"","code":"# \\dontrun{ library(mkin) dmta_ds <- lapply(1:7, function(i) { ds_i <- dimethenamid_2018$ds[[i]]$data ds_i[ds_i$name == \"DMTAP\", \"name\"] <- \"DMTA\" ds_i$time <- ds_i$time * dimethenamid_2018$f_time_norm[i] ds_i }) names(dmta_ds) <- sapply(dimethenamid_2018$ds, function(ds) ds$title) dmta_ds[[\"Elliot\"]] <- rbind(dmta_ds[[\"Elliot 1\"]], dmta_ds[[\"Elliot 2\"]]) dmta_ds[[\"Elliot 1\"]] <- dmta_ds[[\"Elliot 2\"]] <- NULL f_mmkin <- mmkin(\"DFOP\", dmta_ds, error_model = \"tc\", cores = 7, quiet = TRUE) f_saem_full <- saem(f_mmkin) f_saem_full_multi <- multistart(f_saem_full, n = 16, cores = 16) parplot(f_saem_full_multi, lpos = \"topleft\") illparms(f_saem_full) #> [1] \"sd(log_k2)\" f_saem_reduced <- update(f_saem_full, no_random_effect = \"log_k2\") illparms(f_saem_reduced) # On Windows, we need to create a PSOCK cluster first and refer to it # in the call to multistart() library(parallel) cl <- makePSOCKcluster(12) f_saem_reduced_multi <- multistart(f_saem_reduced, n = 16, cluster = cl) parplot(f_saem_reduced_multi, lpos = \"topright\", ylim = c(0.5, 2)) stopCluster(cl) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":null,"dir":"Reference","previous_headings":"","what":"Evaluate parent kinetics using the NAFTA guidance — nafta","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"function fits SFO, IORE DFOP models using mmkin returns object class nafta methods printing plotting. Print nafta objects. results three models printed order increasing model complexity, .e. SFO, IORE, finally DFOP.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"","code":"nafta(ds, title = NA, quiet = FALSE, ...) # S3 method for nafta print(x, quiet = TRUE, digits = 3, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"NAFTA (2011) Guidance evaluating calculating degradation kinetics environmental media. NAFTA Technical Working Group Pesticides https://www.epa.gov/pesticide-science--assessing-pesticide-risks/guidance-evaluating--calculating-degradation accessed 2019-02-22 US EPA (2015) Standard Operating Procedure Using NAFTA Guidance Calculate Representative Half-life Values Characterizing Pesticide Degradation https://www.epa.gov/pesticide-science--assessing-pesticide-risks/standard-operating-procedure-using-nafta-guidance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"ds dataframe must contain one variable called \"time\" time values specified time argument, one column called \"name\" grouping observed values, finally one column observed values called \"value\". title Optional title dataset quiet evaluation text shown? ... arguments passed mmkin (printing method). x nafta object. digits Number digits used printing parameters dissipation times.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"list class nafta. list element named \"mmkin\" mmkin object containing fits three models. list element named \"title\" contains title dataset used. list element \"data\" contains dataset used fits.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nafta.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Evaluate parent kinetics using the NAFTA guidance — nafta","text":"","code":"nafta_evaluation <- nafta(NAFTA_SOP_Appendix_D, cores = 1) #> The SFO model is rejected as S_SFO is equal or higher than the critical value S_c #> The representative half-life of the IORE model is longer than the one corresponding #> to the terminal degradation rate found with the DFOP model. #> The representative half-life obtained from the DFOP model may be used print(nafta_evaluation) #> Sums of squares: #> SFO IORE DFOP #> 1378.6832 615.7730 517.8836 #> #> Critical sum of squares for checking the SFO model: #> [1] 717.4598 #> #> Parameters: #> $SFO #> Estimate Pr(>t) Lower Upper #> parent_0 83.7558 1.80e-14 77.18268 90.3288 #> k_parent 0.0017 7.43e-05 0.00112 0.0026 #> sigma 8.7518 1.22e-05 5.64278 11.8608 #> #> $IORE #> Estimate Pr(>t) Lower Upper #> parent_0 9.69e+01 NA 8.88e+01 1.05e+02 #> k__iore_parent 8.40e-14 NA 1.79e-18 3.94e-09 #> N_parent 6.68e+00 NA 4.19e+00 9.17e+00 #> sigma 5.85e+00 NA 3.76e+00 7.94e+00 #> #> $DFOP #> Estimate Pr(>t) Lower Upper #> parent_0 9.76e+01 1.94e-13 9.02e+01 1.05e+02 #> k1 4.24e-02 5.92e-03 2.03e-02 8.88e-02 #> k2 8.24e-04 6.48e-03 3.89e-04 1.75e-03 #> g 2.88e-01 2.47e-05 1.95e-01 4.03e-01 #> sigma 5.36e+00 2.22e-05 3.43e+00 7.30e+00 #> #> #> DTx values: #> DT50 DT90 DT50_rep #> SFO 407 1350 407 #> IORE 541 5190000 1560000 #> DFOP 429 2380 841 #> #> Representative half-life: #> [1] 841.41 plot(nafta_evaluation)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":null,"dir":"Reference","previous_headings":"","what":"Helper functions to create nlme models from mmkin row objects — nlme_function","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"functions facilitate setting nonlinear mixed effects model mmkin row object. mmkin row object essentially list mkinfit objects obtained fitting model list datasets. used internally nlme.mmkin() method.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"","code":"nlme_function(object) nlme_data(object)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"object mmkin row object containing several fits model different datasets","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"function can used nlme groupedData object","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Helper functions to create nlme models from mmkin row objects — nlme_function","text":"","code":"sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) m_SFO <- mkinmod(parent = mkinsub(\"SFO\")) d_SFO_1 <- mkinpredict(m_SFO, c(k_parent = 0.1), c(parent = 98), sampling_times) d_SFO_1_long <- mkin_wide_to_long(d_SFO_1, time = \"time\") d_SFO_2 <- mkinpredict(m_SFO, c(k_parent = 0.05), c(parent = 102), sampling_times) d_SFO_2_long <- mkin_wide_to_long(d_SFO_2, time = \"time\") d_SFO_3 <- mkinpredict(m_SFO, c(k_parent = 0.02), c(parent = 103), sampling_times) d_SFO_3_long <- mkin_wide_to_long(d_SFO_3, time = \"time\") d1 <- add_err(d_SFO_1, function(value) 3, n = 1) d2 <- add_err(d_SFO_2, function(value) 2, n = 1) d3 <- add_err(d_SFO_3, function(value) 4, n = 1) ds <- c(d1 = d1, d2 = d2, d3 = d3) f <- mmkin(\"SFO\", ds, cores = 1, quiet = TRUE) mean_dp <- mean_degparms(f) grouped_data <- nlme_data(f) nlme_f <- nlme_function(f) # These assignments are necessary for these objects to be # visible to nlme and augPred when evaluation is done by # pkgdown to generate the html docs. assign(\"nlme_f\", nlme_f, globalenv()) assign(\"grouped_data\", grouped_data, globalenv()) library(nlme) m_nlme <- nlme(value ~ nlme_f(name, time, parent_0, log_k_parent_sink), data = grouped_data, fixed = parent_0 + log_k_parent_sink ~ 1, random = pdDiag(parent_0 + log_k_parent_sink ~ 1), start = mean_dp) summary(m_nlme) #> Nonlinear mixed-effects model fit by maximum likelihood #> Model: value ~ nlme_f(name, time, parent_0, log_k_parent_sink) #> Data: grouped_data #> AIC BIC logLik #> 266.6428 275.8935 -128.3214 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k_parent_sink ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k_parent_sink Residual #> StdDev: 0.0003775775 0.7058039 3.065183 #> #> Fixed effects: parent_0 + log_k_parent_sink ~ 1 #> Value Std.Error DF t-value p-value #> parent_0 101.18323 0.7900461 43 128.07257 0 #> log_k_parent_sink -3.08708 0.4171755 43 -7.39995 0 #> Correlation: #> prnt_0 #> log_k_parent_sink 0.031 #> #> Standardized Within-Group Residuals: #> Min Q1 Med Q3 Max #> -2.38427070 -0.52059848 0.03593021 0.39987268 2.73188969 #> #> Number of Observations: 47 #> Number of Groups: 3 plot(augPred(m_nlme, level = 0:1), layout = c(3, 1)) # augPred does not work on fits with more than one state # variable # # The procedure is greatly simplified by the nlme.mmkin function f_nlme <- nlme(f) plot(f_nlme)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Create an nlme model for an mmkin row object — nlme.mmkin","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"functions sets nonlinear mixed effects model mmkin row object. mmkin row object essentially list mkinfit objects obtained fitting model list datasets.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"","code":"# S3 method for mmkin nlme( model, data = \"auto\", fixed = lapply(as.list(names(mean_degparms(model))), function(el) eval(parse(text = paste(el, 1, sep = \"~\")))), random = pdDiag(fixed), groups, start = mean_degparms(model, random = TRUE, test_log_parms = TRUE), correlation = NULL, weights = NULL, subset, method = c(\"ML\", \"REML\"), na.action = na.fail, naPattern, control = list(), verbose = FALSE ) # S3 method for nlme.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), ...) # S3 method for nlme.mmkin update(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"model mmkin row object. data Ignored, data taken mmkin model fixed Ignored, degradation parameters fitted mmkin model used fixed parameters random specified, correlations random effects set optimised degradation model parameters. achieved using nlme::pdDiag method. groups See documentation nlme start specified, mean values fitted degradation parameters taken mmkin object used correlation See documentation nlme weights passed nlme subset passed nlme method passed nlme na.action passed nlme naPattern passed nlme control passed nlme verbose passed nlme x nlme.mmkin object print digits Number digits use printing ... Update specifications passed update.nlme object nlme.mmkin object update","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"Upon success, fitted 'nlme.mmkin' object, nlme object additional elements. also inherits 'mixed.mmkin'.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"Note convergence nlme algorithms depends quality data. degradation kinetics, often datasets (e.g. data soils) complicated degradation models, may make impossible obtain convergence nlme.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"object inherits nlme::nlme, wealth methods automatically work 'nlme.mmkin' objects, nlme::intervals(), nlme::anova.lme() nlme::coef.lme().","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create an nlme model for an mmkin row object — nlme.mmkin","text":"","code":"ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) subset(x$data[c(\"name\", \"time\", \"value\")], name == \"parent\")) # \\dontrun{ f <- mmkin(c(\"SFO\", \"DFOP\"), ds, quiet = TRUE, cores = 1) library(nlme) f_nlme_sfo <- nlme(f[\"SFO\", ]) f_nlme_dfop <- nlme(f[\"DFOP\", ]) anova(f_nlme_sfo, f_nlme_dfop) #> Model df AIC BIC logLik Test L.Ratio p-value #> f_nlme_sfo 1 5 625.0539 637.5529 -307.5269 #> f_nlme_dfop 2 9 495.1270 517.6253 -238.5635 1 vs 2 137.9269 <.0001 print(f_nlme_dfop) #> Kinetic nonlinear mixed-effects model fit by maximum likelihood #> #> 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 #> #> Data: #> 90 observations of 1 variable(s) grouped in 5 datasets #> #> Log-likelihood: -238.6 #> #> Fixed effects: #> list(parent_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1) #> parent_0 log_k1 log_k2 g_qlogis #> 94.1702 -1.8002 -4.1474 0.0324 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k1 log_k2 g_qlogis Residual #> StdDev: 2.488 0.8447 1.33 0.4652 2.321 #> plot(f_nlme_dfop) endpoints(f_nlme_dfop) #> $distimes #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 10.79857 100.7937 30.34192 4.193937 43.85442 #> ds_2 <- lapply(experimental_data_for_UBA_2019[6:10], function(x) x$data[c(\"name\", \"time\", \"value\")]) m_sfo_sfo <- mkinmod(parent = mkinsub(\"SFO\", \"A1\"), 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_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, \"DFOP-SFO\" = m_dfop_sfo), ds_2, quiet = TRUE) f_nlme_sfo_sfo <- nlme(f_2[\"SFO-SFO\", ]) plot(f_nlme_sfo_sfo) # With formation fractions this does not coverge with defaults # f_nlme_sfo_sfo_ff <- nlme(f_2[\"SFO-SFO-ff\", ]) #plot(f_nlme_sfo_sfo_ff) # For the following, we need to increase pnlsMaxIter and the tolerance # to get convergence f_nlme_dfop_sfo <- nlme(f_2[\"DFOP-SFO\", ], control = list(pnlsMaxIter = 120, tolerance = 5e-4)) 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.620 -408.9273 #> f_nlme_sfo_sfo 2 9 1085.1821 1113.404 -533.5910 1 vs 2 249.3274 <.0001 endpoints(f_nlme_sfo_sfo) #> $ff #> parent_sink parent_A1 A1_sink #> 0.5912432 0.4087568 1.0000000 #> #> $distimes #> DT50 DT90 #> parent 19.13518 63.5657 #> A1 66.02155 219.3189 #> endpoints(f_nlme_dfop_sfo) #> $ff #> parent_A1 parent_sink #> 0.2768574 0.7231426 #> #> $distimes #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 11.07091 104.6320 31.49737 4.462383 46.20825 #> A1 162.30550 539.1672 NA NA NA #> if (length(findFunction(\"varConstProp\")) > 0) { # tc error model for nlme available # 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\", ]) f_nlme_dfop_tc <- nlme(f_tc[\"DFOP\", ]) AIC(f_nlme_sfo, f_nlme_sfo_tc, f_nlme_dfop, f_nlme_dfop_tc) print(f_nlme_dfop_tc) } #> Kinetic nonlinear mixed-effects model fit by maximum likelihood #> #> 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 #> #> Data: #> 90 observations of 1 variable(s) grouped in 5 datasets #> #> Log-likelihood: -238.4 #> #> Fixed effects: #> list(parent_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1) #> parent_0 log_k1 log_k2 g_qlogis #> 94.04774 -1.82340 -4.16716 0.05685 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k1 ~ 1, log_k2 ~ 1, g_qlogis ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k1 log_k2 g_qlogis Residual #> StdDev: 2.474 0.85 1.337 0.4659 1 #> #> Variance function: #> Structure: Constant plus proportion of variance covariate #> Formula: ~fitted(.) #> Parameter estimates: #> const prop #> 2.23222933 0.01262399 f_2_obs <- update(f_2, error_model = \"obs\") f_nlme_sfo_sfo_obs <- nlme(f_2_obs[\"SFO-SFO\", ]) print(f_nlme_sfo_sfo_obs) #> Kinetic nonlinear mixed-effects model fit by maximum likelihood #> #> Structural model: #> d_parent/dt = - k_parent_sink * parent - k_parent_A1 * parent #> d_A1/dt = + k_parent_A1 * parent - k_A1_sink * A1 #> #> Data: #> 170 observations of 2 variable(s) grouped in 5 datasets #> #> Log-likelihood: -473 #> #> Fixed effects: #> list(parent_0 ~ 1, log_k_parent_sink ~ 1, log_k_parent_A1 ~ 1, log_k_A1_sink ~ 1) #> parent_0 log_k_parent_sink log_k_parent_A1 log_k_A1_sink #> 87.976 -3.670 -4.164 -4.645 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k_parent_sink ~ 1, log_k_parent_A1 ~ 1, log_k_A1_sink ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k_parent_sink log_k_parent_A1 log_k_A1_sink Residual #> StdDev: 3.992 1.777 1.055 0.4821 6.483 #> #> Variance function: #> Structure: Different standard deviations per stratum #> Formula: ~1 | name #> Parameter estimates: #> parent A1 #> 1.0000000 0.2050005 f_nlme_dfop_sfo_obs <- nlme(f_2_obs[\"DFOP-SFO\", ], control = list(pnlsMaxIter = 120, tolerance = 5e-4)) f_2_tc <- update(f_2, error_model = \"tc\") # f_nlme_sfo_sfo_tc <- nlme(f_2_tc[\"SFO-SFO\", ]) # No convergence with 50 iterations # f_nlme_dfop_sfo_tc <- nlme(f_2_tc[\"DFOP-SFO\", ], # control = list(pnlsMaxIter = 120, tolerance = 5e-4)) # Error in X[, fmap[[nm]]] <- gradnm anova(f_nlme_dfop_sfo, f_nlme_dfop_sfo_obs) #> Model df AIC BIC logLik Test L.Ratio p-value #> f_nlme_dfop_sfo 1 13 843.8547 884.620 -408.9273 #> f_nlme_dfop_sfo_obs 2 14 817.5338 861.435 -394.7669 1 vs 2 28.32084 <.0001 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","title":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","text":"Number observations mkinfit object fitted","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","text":"","code":"# S3 method for mkinfit nobs(object, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","text":"object mkinfit object ... compatibility generic method","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Number of observations on which an mkinfit object was fitted — nobs.mkinfit","text":"number rows data included mkinfit object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract model parameters — parms","title":"Extract model parameters — parms","text":"function returns degradation model parameters well error model parameters per default, order avoid working fitted model without considering error structure assumed fit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract model parameters — parms","text":"","code":"parms(object, ...) # S3 method for mkinfit parms(object, transformed = FALSE, errparms = TRUE, ...) # S3 method for mmkin parms(object, transformed = FALSE, errparms = TRUE, ...) # S3 method for multistart parms(object, exclude_failed = TRUE, ...) # S3 method for saem.mmkin parms(object, ci = FALSE, covariates = NULL, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract model parameters — parms","text":"object fitted model object. ... used transformed parameters returned used internally optimisation? errparms error model parameters returned addition degradation parameters? exclude_failed multistart objects, rows failed fits removed returned parameter matrix? ci matrix estimates confidence interval boundaries returned? FALSE (default), vector estimates returned covariates given, otherwise matrix estimates returned, column corresponding row data frame holding covariates covariates data frame holding covariate values return parameter values. effect 'ci' FALSE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract model parameters — parms","text":"Depending object, numeric vector fitted model parameters, matrix (e.g. mmkin row objects), list matrices (e.g. mmkin objects one row).","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/parms.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract model parameters — parms","text":"","code":"# mkinfit objects fit <- mkinfit(\"SFO\", FOCUS_2006_C, quiet = TRUE) parms(fit) #> parent_0 k_parent sigma #> 82.4921598 0.3060633 4.6730124 parms(fit, transformed = TRUE) #> parent_0 log_k_parent sigma #> 82.492160 -1.183963 4.673012 # mmkin objects ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) subset(x$data[c(\"name\", \"time\", \"value\")])) names(ds) <- paste(\"Dataset\", 6:10) # \\dontrun{ fits <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), ds, quiet = TRUE, cores = 1) 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 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 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.058971584 #> k1 0.044946770 #> k2 0.002868336 #> g 0.526942414 #> 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 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.058971584 90.34509493 98.14858820 94.311323735 #> k1 0.21954588 0.044946770 0.41232288 0.31697588 0.080663857 #> k2 0.02957934 0.002868336 0.07581766 0.03260384 0.003425417 #> g 0.44845068 0.526942414 0.66091967 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.148095 #> log_k_parent -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.38393898 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.0589716 90.3450949 98.1485882 94.3113237 #> log_k1 -1.5161940 -3.1022764 -0.8859486 -1.1489296 -2.5174647 #> log_k2 -3.5206791 -5.8540232 -2.5794240 -3.4233253 -5.6765322 #> g_qlogis -0.2069326 0.1078741 0.6673953 0.6332573 -0.6514943 #> sigma 1.3569047 2.2213022 1.3416908 2.8715985 1.9420678 #> # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot parameter variability of multistart objects — parplot","title":"Plot parameter variability of multistart objects — parplot","text":"Produces boxplot parameters multiple runs, scaled either parameters run highest likelihood, medians proposed paper Duchesne et al. (2021).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot parameter variability of multistart objects — parplot","text":"","code":"parplot(object, ...) # S3 method for multistart.saem.mmkin parplot( object, llmin = -Inf, llquant = NA, scale = c(\"best\", \"median\"), lpos = \"bottomleft\", main = \"\", ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot parameter variability of multistart objects — parplot","text":"object multistart object ... Passed boxplot llmin minimum likelihood objects shown llquant Fractional value selecting fits higher likelihoods. Overrides 'llmin'. scale default, scale parameters using best available fit. 'median', parameters scaled using median parameters fits. lpos Positioning legend. main Title plot","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot parameter variability of multistart objects — parplot","text":"Starting values degradation model parameters error model parameters shown green circles. results obtained original run shown red circles.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/parplot.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Plot parameter variability of multistart objects — parplot","text":"Duchesne R, Guillemin , Gandrillon O, Crauste F. Practical identifiability frame nonlinear mixed effects models: example vitro erythropoiesis. BMC Bioinformatics. 2021 Oct 4;22(1):478. doi: 10.1186/s12859-021-04373-4.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"Plot predictions fitted nonlinear mixed model obtained via mmkin row object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"","code":"# S3 method for mixed.mmkin plot( x, i = 1:ncol(x$mmkin), obs_vars = names(x$mkinmod$map), standardized = TRUE, covariates = NULL, covariate_quantiles = c(0.5, 0.05, 0.95), xlab = \"Time\", xlim = range(x$data$time), resplot = c(\"predicted\", \"time\"), pop_curves = \"auto\", pred_over = NULL, test_log_parms = FALSE, conf.level = 0.6, default_log_parms = NA, ymax = \"auto\", maxabs = \"auto\", ncol.legend = ifelse(length(i) <= 3, length(i) + 1, ifelse(length(i) <= 8, 3, 4)), nrow.legend = ceiling((length(i) + 1)/ncol.legend), rel.height.legend = 0.02 + 0.07 * nrow.legend, rel.height.bottom = 1.1, pch_ds = 1:length(i), col_ds = pch_ds + 1, lty_ds = col_ds, frame = TRUE, ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"x object class mixed.mmkin, saem.mmkin nlme.mmkin numeric index select datasets plot individual predictions, case plots get large obs_vars character vector names observed variables data model plotted. Defauls observed variables model. standardized residuals standardized? takes effect resplot = \"time\". covariates Data frame covariate values variables covariate models object. given, overrides 'covariate_quantiles'. line data frame result line drawn population. Rownames used legend label lines. covariate_quantiles argument effect fitted object covariate models. , default show three population curves, 5th percentile, 50th percentile 95th percentile covariate values used fitting model. xlab Label x axis. xlim Plot range x direction. resplot residuals plotted time predicted values? pop_curves Per default, one population curve drawn case population parameters fitted model, e.g. saem objects. case covariate model, behaviour depends value 'covariates' pred_over Named list alternative predictions obtained mkinpredict compatible mkinmod. test_log_parms Passed mean_degparms case mixed.mmkin object conf.level Passed mean_degparms case mixed.mmkin object default_log_parms Passed mean_degparms case mixed.mmkin object ymax Vector maximum y axis values maxabs Maximum absolute value residuals. used scaling y axis defaults \"auto\". ncol.legend Number columns use legend nrow.legend Number rows use legend rel.height.legend relative height legend shown top rel.height.bottom relative height bottom plot row pch_ds Symbols used plotting data. col_ds Colors used plotting observed data corresponding model prediction lines different datasets. lty_ds Line types used model predictions. frame frame drawn around plots? ... arguments passed plot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"Covariate models currently supported saem.mmkin objects.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot predictions from a fitted nonlinear mixed model obtained via an mmkin row object — plot.mixed.mmkin","text":"","code":"ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) x$data[c(\"name\", \"time\", \"value\")]) names(ds) <- paste0(\"ds \", 6:10) dfop_sfo <- mkinmod(parent = mkinsub(\"DFOP\", \"A1\"), A1 = mkinsub(\"SFO\"), quiet = TRUE) # \\dontrun{ f <- mmkin(list(\"DFOP-SFO\" = dfop_sfo), ds, quiet = TRUE) plot(f[, 3:4], standardized = TRUE) # For this fit we need to increase pnlsMaxiter, and we increase the # tolerance in order to speed up the fit for this example evaluation # It still takes 20 seconds to run f_nlme <- nlme(f, control = list(pnlsMaxIter = 120, tolerance = 1e-3)) plot(f_nlme) f_saem <- saem(f, transformations = \"saemix\") plot(f_saem) f_obs <- mmkin(list(\"DFOP-SFO\" = dfop_sfo), ds, quiet = TRUE, error_model = \"obs\") f_nlmix <- nlmix(f_obs) #> Error in nlmix(f_obs): could not find function \"nlmix\" plot(f_nlmix) #> Error in eval(expr, envir, enclos): object 'f_nlmix' not found # We can overlay the two variants if we generate predictions pred_nlme <- mkinpredict(dfop_sfo, f_nlme$bparms.optim[-1], c(parent = f_nlme$bparms.optim[[1]], A1 = 0), seq(0, 180, by = 0.2)) plot(f_saem, pred_over = list(nlme = pred_nlme)) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"Solves differential equations optimised fixed parameters previous successful call mkinfit plots observed data together solution fitted model.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"","code":"# S3 method for mkinfit plot( x, fit = x, obs_vars = names(fit$mkinmod$map), xlab = \"Time\", ylab = \"Residue\", xlim = range(fit$data$time), ylim = \"default\", col_obs = 1:length(obs_vars), pch_obs = col_obs, lty_obs = rep(1, length(obs_vars)), add = FALSE, legend = !add, show_residuals = FALSE, show_errplot = FALSE, maxabs = \"auto\", sep_obs = FALSE, rel.height.middle = 0.9, row_layout = FALSE, lpos = \"topright\", inset = c(0.05, 0.05), show_errmin = FALSE, errmin_digits = 3, frame = TRUE, ... ) plot_sep( fit, show_errmin = TRUE, show_residuals = ifelse(identical(fit$err_mod, \"const\"), TRUE, \"standardized\"), ... ) plot_res( fit, sep_obs = FALSE, show_errmin = sep_obs, standardized = ifelse(identical(fit$err_mod, \"const\"), FALSE, TRUE), ... ) plot_err(fit, sep_obs = FALSE, show_errmin = sep_obs, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"x Alias fit introduced compatibility generic S3 method. fit object class mkinfit. obs_vars character vector names observed variables data model plotted. Defauls observed variables model. xlab Label x axis. ylab Label y axis. xlim Plot range x direction. ylim Plot range y direction. given list, plot ranges different plot rows can given row layout. col_obs Colors used plotting observed data corresponding model prediction lines. pch_obs Symbols used plotting data. lty_obs Line types used model predictions. add plot added existing plot? legend legend added plot? show_residuals residuals shown? one plot fits shown, residual plot lower third plot. Otherwise, .e. \"sep_obs\" given, residual plots located right plots fitted curves. set 'standardized', plot residuals divided standard deviation given fitted error model shown. show_errplot squared residuals error model shown? one plot fits shown, plot lower third plot. Otherwise, .e. \"sep_obs\" given, residual plots located right plots fitted curves. maxabs Maximum absolute value residuals. used scaling y axis defaults \"auto\". sep_obs observed variables shown separate subplots? yes, residual plots requested \"show_residuals\" shown next , plot fits. rel.height.middle relative height middle plot, two rows plots shown. row_layout use row layout residual plot error model plot shown right? lpos Position(s) legend(s). Passed legend first argument. length one, length obs_var argument. inset Passed legend applicable. show_errmin FOCUS chi2 error value shown upper margin plot? errmin_digits number significant digits rounding FOCUS chi2 error percentage. frame frame drawn around plots? ... arguments passed plot. standardized calling 'plot_res', residuals standardized residual plot?","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"current plot device tikz device, latex used formatting chi2 error level, show_errmin = TRUE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot the observed data and the fitted model of an mkinfit object — plot.mkinfit","text":"","code":"# One parent compound, one metabolite, both single first order, path from # parent to sink included # \\dontrun{ SFO_SFO <- mkinmod(parent = mkinsub(\"SFO\", \"m1\", full = \"Parent\"), m1 = mkinsub(\"SFO\", full = \"Metabolite M1\" )) #> Temporary DLL for differentials generated and loaded fit <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data fit <- mkinfit(SFO_SFO, FOCUS_2006_D, quiet = TRUE, error_model = \"tc\") #> Warning: Observations with value of zero were removed from the data plot(fit) plot_res(fit) plot_res(fit, standardized = FALSE) plot_err(fit) # Show the observed variables separately, with residuals plot(fit, sep_obs = TRUE, show_residuals = TRUE, lpos = c(\"topright\", \"bottomright\"), show_errmin = TRUE) # The same can be obtained with less typing, using the convenience function plot_sep plot_sep(fit, lpos = c(\"topright\", \"bottomright\")) # Show the observed variables separately, with the error model plot(fit, sep_obs = TRUE, show_errplot = TRUE, lpos = c(\"topright\", \"bottomright\"), show_errmin = TRUE) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"x row selected mmkin object ([.mmkin), model fitted least one dataset shown. column, fit least one model dataset shown.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"","code":"# S3 method for mmkin plot( x, main = \"auto\", legends = 1, resplot = c(\"time\", \"errmod\"), ylab = \"Residue\", standardized = FALSE, show_errmin = TRUE, errmin_var = \"All data\", errmin_digits = 3, cex = 0.7, rel.height.middle = 0.9, ymax = \"auto\", ... )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"x object class mmkin, either one row one column. main main title placed outer margin plot. legends index fits legends shown. resplot residuals plotted time, using mkinresplot, squared residuals predicted values, error model, using mkinerrplot. ylab Label y axis. standardized residuals standardized? option passed mkinresplot, takes effect resplot = \"time\". show_errmin chi2 error level shown top plots left? errmin_var variable FOCUS chi2 error value shown. errmin_digits number significant digits rounding FOCUS chi2 error percentage. cex Passed plot functions mtext. rel.height.middle relative height middle plot, two rows plots shown. ymax Maximum y axis value plot.mkinfit. ... arguments passed plot.mkinfit mkinresplot.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"current plot device tikz device, latex used formatting chi2 error level.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot model fits (observed and fitted) and the residuals for a row or column\nof an mmkin object — plot.mmkin","text":"","code":"# \\dontrun{ # Only use one core not to offend CRAN checks fits <- mmkin(c(\"FOMC\", \"HS\"), list(\"FOCUS B\" = FOCUS_2006_B, \"FOCUS C\" = FOCUS_2006_C), # named list for titles cores = 1, quiet = TRUE, error_model = \"tc\") #> Warning: Optimisation did not converge: #> iteration limit reached without convergence (10) plot(fits[, \"FOCUS C\"]) plot(fits[\"FOMC\", ]) plot(fits[\"FOMC\", ], show_errmin = FALSE) # We can also plot a single fit, if we like the way plot.mmkin works, but then the plot # height should be smaller than the plot width (this is not possible for the html pages # generated by pkgdown, as far as I know). plot(fits[\"FOMC\", \"FOCUS C\"]) # same as plot(fits[1, 2]) # Show the error models plot(fits[\"FOMC\", ], resplot = \"errmod\") # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"plots ordered increasing complexity model function (SFO, IORE, DFOP).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"","code":"# S3 method for nafta plot(x, legend = FALSE, main = \"auto\", ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"x object class nafta. legend legend added? main Possibility override main title plot. ... arguments passed plot.mmkin.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"function called side effect.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"Calls plot.mmkin.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot the results of the three models used in the NAFTA scheme. — plot.nafta","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html","id":null,"dir":"Reference","previous_headings":"","what":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","title":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","text":"function imports one dataset sheet spreadsheet file. sheets selected based contents sheet 'Datasets', column called 'Dataset Number', containing numbers identifying dataset sheets read . second column must grouping variable, often named 'Soil'. Optionally, time normalization factors can given columns named 'Temperature' 'Moisture'.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","text":"","code":"read_spreadsheet( path, valid_datasets = \"all\", parent_only = FALSE, normalize = TRUE )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","text":"path Absolute relative path spreadsheet file valid_datasets Optional numeric index valid datasets, default use datasets parent_only parent data used? normalize time scale normalized using temperature moisture normalisation factors sheet 'Datasets'?","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Read datasets and relevant meta information from a spreadsheet file — read_spreadsheet","text":"must sheet 'Compounds', columns 'Name' 'Acronym'. first row read header read sheet assumed contain name acronym parent compound. dataset sheets named using dataset numbers read 'Datasets' sheet, .e. '1', '2', ... . dataset sheet, name observed variable (e.g. acronym parent compound one transformation products) first column, time values second colum, observed value third column. case relevant covariate data available, given sheet 'Covariates', containing one line value grouping variable specified 'Datasets'. values first column column must name second column 'Datasets'. Covariates read columns four higher. names preferably contain special characters like spaces, can easily used specifying covariate models. similar data structure defined R6 class mkindsg, probably complicated use.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"Objects exported from other packages — reexports","title":"Objects exported from other packages — reexports","text":"objects imported packages. Follow links see documentation. lmtest lrtest nlme intervals, nlme","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract residuals from an mkinfit model — residuals.mkinfit","title":"Extract residuals from an mkinfit model — residuals.mkinfit","text":"Extract residuals mkinfit model","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract residuals from an mkinfit model — residuals.mkinfit","text":"","code":"# S3 method for mkinfit residuals(object, standardized = FALSE, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract residuals from an mkinfit model — residuals.mkinfit","text":"object mkinfit object standardized residuals standardized dividing standard deviation obtained fitted error model? ... used","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract residuals from an mkinfit model — residuals.mkinfit","text":"","code":"f <- mkinfit(\"DFOP\", FOCUS_2006_C, quiet = TRUE) residuals(f) #> [1] 0.09726374 -0.13912142 -0.15351210 0.73388322 -0.08657004 -0.93204702 #> [7] -0.03269080 1.45347823 -0.88423697 residuals(f, standardized = TRUE) #> [1] 0.13969917 -0.19981904 -0.22048826 1.05407091 -0.12433989 -1.33869208 #> [7] -0.04695355 2.08761977 -1.27002287"},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":null,"dir":"Reference","previous_headings":"","what":"Fit nonlinear mixed models with SAEM — saem","title":"Fit nonlinear mixed models with SAEM — saem","text":"function uses saemix::saemix() backend fitting nonlinear mixed effects models created mmkin row objects using Stochastic Approximation Expectation Maximisation algorithm (SAEM).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Fit nonlinear mixed models with SAEM — saem","text":"","code":"saem(object, ...) # S3 method for mmkin saem( object, transformations = c(\"mkin\", \"saemix\"), error_model = \"auto\", degparms_start = numeric(), test_log_parms = TRUE, conf.level = 0.6, solution_type = \"auto\", covariance.model = \"auto\", omega.init = \"auto\", covariates = NULL, covariate_models = NULL, no_random_effect = NULL, error.init = c(1, 1), nbiter.saemix = c(300, 100), control = list(displayProgress = FALSE, print = FALSE, nbiter.saemix = nbiter.saemix, save = FALSE, save.graphs = FALSE), verbose = FALSE, quiet = FALSE, ... ) # S3 method for saem.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), ...) saemix_model( object, solution_type = \"auto\", transformations = c(\"mkin\", \"saemix\"), error_model = \"auto\", degparms_start = numeric(), covariance.model = \"auto\", no_random_effect = NULL, omega.init = \"auto\", covariates = NULL, covariate_models = NULL, error.init = numeric(), test_log_parms = FALSE, conf.level = 0.6, verbose = FALSE, ... ) saemix_data(object, covariates = NULL, verbose = FALSE, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Fit nonlinear mixed models with SAEM — saem","text":"object mmkin row object containing several fits mkinmod model different datasets ... parameters passed saemix::saemixModel. transformations Per default, parameter transformations done mkin. argument set 'saemix', parameter transformations done 'saemix' supported cases, .e. (version 1.1.2) SFO, FOMC, DFOP HS without fixing parent_0, SFO DFOP one SFO metabolite. error_model Possibility override error model used mmkin object degparms_start Parameter values given named numeric vector used override starting values obtained 'mmkin' object. test_log_parms TRUE, attempt made use robust starting values population parameters fitted log parameters mkin (like rate constants) considering rate constants pass t-test calculating mean degradation parameters using mean_degparms. conf.level Possibility adjust required confidence level parameter tested requested 'test_log_parms'. solution_type Possibility specify solution type case automatic choice desired covariance.model passed saemix::saemixModel(). Per default, uncorrelated random effects specified degradation parameters. omega.init passed saemix::saemixModel(). using mkin transformations default covariance model optionally excluded random effects, variances degradation parameters estimated using mean_degparms, testing untransformed log parameters significant difference zero. using mkin transformations custom covariance model, default initialisation saemix::saemixModel used omega.init. covariates data frame covariate data use 'covariate_models', dataset names row names. covariate_models list containing linear model formulas one explanatory variable, .e. type 'parameter ~ covariate'. Covariates must available 'covariates' data frame. no_random_effect Character vector degradation parameters variability groups. used covariance model explicitly specified. error.init passed saemix::saemixModel(). nbiter.saemix Convenience option increase number iterations control Passed saemix::saemix. verbose print information created objects type saemix::SaemixModel saemix::SaemixData? quiet suppress messages saemix prints beginning end optimisation process? x saem.mmkin object print digits Number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Fit nonlinear mixed models with SAEM — saem","text":"S3 object class 'saem.mmkin', containing fitted saemix::SaemixObject list component named ''. object also inherits 'mixed.mmkin'. saemix::SaemixModel object. saemix::SaemixData object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Fit nonlinear mixed models with SAEM — saem","text":"mmkin row object essentially list mkinfit objects obtained fitting model list datasets using mkinfit. Starting values fixed effects (population mean parameters, argument psi0 saemix::saemixModel() mean values parameters found using mmkin.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/reference/saem.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Fit nonlinear mixed models with SAEM — saem","text":"","code":"# \\dontrun{ ds <- lapply(experimental_data_for_UBA_2019[6:10], function(x) subset(x$data[c(\"name\", \"time\", \"value\")])) names(ds) <- paste(\"Dataset\", 6:10) f_mmkin_parent_p0_fixed <- mmkin(\"FOMC\", ds, state.ini = c(parent = 100), fixed_initials = \"parent\", quiet = TRUE) f_saem_p0_fixed <- saem(f_mmkin_parent_p0_fixed) f_mmkin_parent <- mmkin(c(\"SFO\", \"FOMC\", \"DFOP\"), ds, quiet = TRUE) f_saem_sfo <- saem(f_mmkin_parent[\"SFO\", ]) f_saem_fomc <- saem(f_mmkin_parent[\"FOMC\", ]) f_saem_dfop <- saem(f_mmkin_parent[\"DFOP\", ]) anova(f_saem_sfo, f_saem_fomc, f_saem_dfop) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik #> f_saem_sfo 5 624.33 622.38 -307.17 #> f_saem_fomc 7 467.85 465.11 -226.92 #> f_saem_dfop 9 493.76 490.24 -237.88 anova(f_saem_sfo, f_saem_dfop, test = TRUE) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik Chisq Df Pr(>Chisq) #> f_saem_sfo 5 624.33 622.38 -307.17 #> f_saem_dfop 9 493.76 490.24 -237.88 138.57 4 < 2.2e-16 *** #> --- #> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 illparms(f_saem_dfop) #> [1] \"sd(g_qlogis)\" f_saem_dfop_red <- update(f_saem_dfop, no_random_effect = \"g_qlogis\") anova(f_saem_dfop, f_saem_dfop_red, test = TRUE) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik Chisq Df Pr(>Chisq) #> f_saem_dfop_red 8 488.68 485.55 -236.34 #> f_saem_dfop 9 493.76 490.24 -237.88 0 1 1 anova(f_saem_sfo, f_saem_fomc, f_saem_dfop) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik #> f_saem_sfo 5 624.33 622.38 -307.17 #> f_saem_fomc 7 467.85 465.11 -226.92 #> f_saem_dfop 9 493.76 490.24 -237.88 # The returned saem.mmkin object contains an SaemixObject, therefore we can use # functions from saemix library(saemix) #> Loading required package: npde #> Package saemix, version 3.2 #> please direct bugs, questions and feedback to emmanuelle.comets@inserm.fr #> #> Attaching package: ‘saemix’ #> The following objects are masked from ‘package:npde’: #> #> kurtosis, skewness compare.saemix(f_saem_sfo$so, f_saem_fomc$so, f_saem_dfop$so) #> Likelihoods calculated by importance sampling #> AIC BIC #> 1 624.3316 622.3788 #> 2 467.8472 465.1132 #> 3 493.7592 490.2441 plot(f_saem_fomc$so, plot.type = \"convergence\") plot(f_saem_fomc$so, plot.type = \"individual.fit\") #> Simulating data using nsim = 1000 simulated datasets #> Computing WRES and npde . plot(f_saem_fomc$so, plot.type = \"npde\") #> Simulating data using nsim = 1000 simulated datasets #> Computing WRES and npde . #> Please use npdeSaemix to obtain VPC and npde plot(f_saem_fomc$so, plot.type = \"vpc\") f_mmkin_parent_tc <- update(f_mmkin_parent, error_model = \"tc\") f_saem_fomc_tc <- saem(f_mmkin_parent_tc[\"FOMC\", ]) anova(f_saem_fomc, f_saem_fomc_tc, test = TRUE) #> Data: 90 observations of 1 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik Chisq Df Pr(>Chisq) #> f_saem_fomc 7 467.85 465.11 -226.92 #> f_saem_fomc_tc 8 469.90 466.77 -226.95 0 1 1 sfo_sfo <- mkinmod(parent = mkinsub(\"SFO\", \"A1\"), A1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded fomc_sfo <- mkinmod(parent = mkinsub(\"FOMC\", \"A1\"), A1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded dfop_sfo <- mkinmod(parent = mkinsub(\"DFOP\", \"A1\"), A1 = mkinsub(\"SFO\")) #> Temporary DLL for differentials generated and loaded # The following fit uses analytical solutions for SFO-SFO and DFOP-SFO, # and compiled ODEs for FOMC that are much slower f_mmkin <- mmkin(list( \"SFO-SFO\" = sfo_sfo, \"FOMC-SFO\" = fomc_sfo, \"DFOP-SFO\" = dfop_sfo), ds, quiet = TRUE) # saem fits of SFO-SFO and DFOP-SFO to these data take about five seconds # each on this system, as we use analytical solutions written for saemix. # When using the analytical solutions written for mkin this took around # four minutes f_saem_sfo_sfo <- saem(f_mmkin[\"SFO-SFO\", ]) f_saem_dfop_sfo <- saem(f_mmkin[\"DFOP-SFO\", ]) # We can use print, plot and summary methods to check the results print(f_saem_dfop_sfo) #> 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_A1/dt = + f_parent_to_A1 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) #> * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * #> exp(-k2 * time))) * parent - k_A1 * A1 #> #> Data: #> 170 observations of 2 variable(s) grouped in 5 datasets #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 839.2 834.1 -406.6 #> #> Fitted parameters: #> estimate lower upper #> parent_0 93.70402 91.04104 96.3670 #> log_k_A1 -5.83760 -7.66452 -4.0107 #> f_parent_qlogis -0.95718 -1.35955 -0.5548 #> log_k1 -2.35514 -3.39402 -1.3163 #> log_k2 -3.79634 -5.64009 -1.9526 #> g_qlogis -0.02108 -0.66463 0.6225 #> a.1 1.88191 1.66491 2.0989 #> SD.parent_0 2.81628 0.78922 4.8433 #> SD.log_k_A1 1.78751 0.42105 3.1540 #> SD.f_parent_qlogis 0.45016 0.16116 0.7391 #> SD.log_k1 1.06923 0.31676 1.8217 #> SD.log_k2 2.03768 0.70938 3.3660 #> SD.g_qlogis 0.44024 -0.09262 0.9731 plot(f_saem_dfop_sfo) summary(f_saem_dfop_sfo, data = TRUE) #> saemix version used for fitting: 3.2 #> mkin version used for pre-fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:17:34 2023 #> Date of summary: Thu Nov 16 04:17:34 2023 #> #> 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_A1/dt = + f_parent_to_A1 * ((k1 * g * exp(-k1 * time) + k2 * (1 - g) #> * exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * #> exp(-k2 * time))) * parent - k_A1 * A1 #> #> Data: #> 170 observations of 2 variable(s) grouped in 5 datasets #> #> Model predictions using solution type analytical #> #> Fitted in 3.385 s #> Using 300, 100 iterations and 10 chains #> #> Variance model: Constant variance #> #> Starting values for degradation parameters: #> parent_0 log_k_A1 f_parent_qlogis log_k1 log_k2 #> 93.8102 -5.3734 -0.9711 -1.8799 -4.2708 #> g_qlogis #> 0.1356 #> #> Fixed degradation parameter values: #> None #> #> Starting values for random effects (square root of initial entries in omega): #> parent_0 log_k_A1 f_parent_qlogis log_k1 log_k2 g_qlogis #> parent_0 4.941 0.000 0.0000 0.000 0.000 0.0000 #> log_k_A1 0.000 2.551 0.0000 0.000 0.000 0.0000 #> f_parent_qlogis 0.000 0.000 0.7251 0.000 0.000 0.0000 #> log_k1 0.000 0.000 0.0000 1.449 0.000 0.0000 #> log_k2 0.000 0.000 0.0000 0.000 2.228 0.0000 #> g_qlogis 0.000 0.000 0.0000 0.000 0.000 0.7814 #> #> Starting values for error model parameters: #> a.1 #> 1 #> #> Results: #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 839.2 834.1 -406.6 #> #> Optimised parameters: #> est. lower upper #> parent_0 93.70402 91.04104 96.3670 #> log_k_A1 -5.83760 -7.66452 -4.0107 #> f_parent_qlogis -0.95718 -1.35955 -0.5548 #> log_k1 -2.35514 -3.39402 -1.3163 #> log_k2 -3.79634 -5.64009 -1.9526 #> g_qlogis -0.02108 -0.66463 0.6225 #> a.1 1.88191 1.66491 2.0989 #> SD.parent_0 2.81628 0.78922 4.8433 #> SD.log_k_A1 1.78751 0.42105 3.1540 #> SD.f_parent_qlogis 0.45016 0.16116 0.7391 #> SD.log_k1 1.06923 0.31676 1.8217 #> SD.log_k2 2.03768 0.70938 3.3660 #> SD.g_qlogis 0.44024 -0.09262 0.9731 #> #> Correlation: #> parnt_0 lg_k_A1 f_prnt_ log_k1 log_k2 #> log_k_A1 -0.0147 #> f_parent_qlogis -0.0269 0.0573 #> log_k1 0.0263 -0.0011 -0.0040 #> log_k2 0.0020 0.0065 -0.0002 -0.0776 #> g_qlogis -0.0248 -0.0180 -0.0004 -0.0903 -0.0603 #> #> Random effects: #> est. lower upper #> SD.parent_0 2.8163 0.78922 4.8433 #> SD.log_k_A1 1.7875 0.42105 3.1540 #> SD.f_parent_qlogis 0.4502 0.16116 0.7391 #> SD.log_k1 1.0692 0.31676 1.8217 #> SD.log_k2 2.0377 0.70938 3.3660 #> SD.g_qlogis 0.4402 -0.09262 0.9731 #> #> Variance model: #> est. lower upper #> a.1 1.882 1.665 2.099 #> #> Backtransformed parameters: #> est. lower upper #> parent_0 93.704015 9.104e+01 96.36699 #> k_A1 0.002916 4.692e-04 0.01812 #> f_parent_to_A1 0.277443 2.043e-01 0.36475 #> k1 0.094880 3.357e-02 0.26813 #> k2 0.022453 3.553e-03 0.14191 #> g 0.494731 3.397e-01 0.65078 #> #> Resulting formation fractions: #> ff #> parent_A1 0.2774 #> parent_sink 0.7226 #> #> Estimated disappearance times: #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 14.0 72.38 21.79 7.306 30.87 #> A1 237.7 789.68 NA NA NA #> #> Data: #> ds name time observed predicted residual std standardized #> Dataset 6 parent 0 97.2 95.70025 1.49975 1.882 0.79693 #> Dataset 6 parent 0 96.4 95.70025 0.69975 1.882 0.37183 #> Dataset 6 parent 3 71.1 71.44670 -0.34670 1.882 -0.18423 #> Dataset 6 parent 3 69.2 71.44670 -2.24670 1.882 -1.19384 #> Dataset 6 parent 6 58.1 56.59283 1.50717 1.882 0.80087 #> Dataset 6 parent 6 56.6 56.59283 0.00717 1.882 0.00381 #> Dataset 6 parent 10 44.4 44.56648 -0.16648 1.882 -0.08847 #> Dataset 6 parent 10 43.4 44.56648 -1.16648 1.882 -0.61984 #> Dataset 6 parent 20 33.3 29.76020 3.53980 1.882 1.88096 #> Dataset 6 parent 20 29.2 29.76020 -0.56020 1.882 -0.29767 #> Dataset 6 parent 34 17.6 19.39208 -1.79208 1.882 -0.95226 #> Dataset 6 parent 34 18.0 19.39208 -1.39208 1.882 -0.73971 #> Dataset 6 parent 55 10.5 10.55761 -0.05761 1.882 -0.03061 #> Dataset 6 parent 55 9.3 10.55761 -1.25761 1.882 -0.66826 #> Dataset 6 parent 90 4.5 3.84742 0.65258 1.882 0.34676 #> Dataset 6 parent 90 4.7 3.84742 0.85258 1.882 0.45304 #> Dataset 6 parent 112 3.0 2.03997 0.96003 1.882 0.51013 #> Dataset 6 parent 112 3.4 2.03997 1.36003 1.882 0.72268 #> Dataset 6 parent 132 2.3 1.14585 1.15415 1.882 0.61328 #> Dataset 6 parent 132 2.7 1.14585 1.55415 1.882 0.82583 #> Dataset 6 A1 3 4.3 4.86054 -0.56054 1.882 -0.29786 #> Dataset 6 A1 3 4.6 4.86054 -0.26054 1.882 -0.13844 #> Dataset 6 A1 6 7.0 7.74179 -0.74179 1.882 -0.39417 #> Dataset 6 A1 6 7.2 7.74179 -0.54179 1.882 -0.28789 #> Dataset 6 A1 10 8.2 9.94048 -1.74048 1.882 -0.92485 #> Dataset 6 A1 10 8.0 9.94048 -1.94048 1.882 -1.03112 #> Dataset 6 A1 20 11.0 12.19109 -1.19109 1.882 -0.63291 #> Dataset 6 A1 20 13.7 12.19109 1.50891 1.882 0.80180 #> Dataset 6 A1 34 11.5 13.10706 -1.60706 1.882 -0.85395 #> Dataset 6 A1 34 12.7 13.10706 -0.40706 1.882 -0.21630 #> Dataset 6 A1 55 14.9 13.06131 1.83869 1.882 0.97703 #> Dataset 6 A1 55 14.5 13.06131 1.43869 1.882 0.76448 #> Dataset 6 A1 90 12.1 11.54495 0.55505 1.882 0.29494 #> Dataset 6 A1 90 12.3 11.54495 0.75505 1.882 0.40122 #> Dataset 6 A1 112 9.9 10.31533 -0.41533 1.882 -0.22070 #> Dataset 6 A1 112 10.2 10.31533 -0.11533 1.882 -0.06128 #> Dataset 6 A1 132 8.8 9.20222 -0.40222 1.882 -0.21373 #> Dataset 6 A1 132 7.8 9.20222 -1.40222 1.882 -0.74510 #> Dataset 7 parent 0 93.6 90.82357 2.77643 1.882 1.47532 #> Dataset 7 parent 0 92.3 90.82357 1.47643 1.882 0.78453 #> Dataset 7 parent 3 87.0 84.73448 2.26552 1.882 1.20384 #> Dataset 7 parent 3 82.2 84.73448 -2.53448 1.882 -1.34675 #> Dataset 7 parent 7 74.0 77.65013 -3.65013 1.882 -1.93958 #> Dataset 7 parent 7 73.9 77.65013 -3.75013 1.882 -1.99272 #> Dataset 7 parent 14 64.2 67.60639 -3.40639 1.882 -1.81007 #> Dataset 7 parent 14 69.5 67.60639 1.89361 1.882 1.00621 #> Dataset 7 parent 30 54.0 52.53663 1.46337 1.882 0.77760 #> Dataset 7 parent 30 54.6 52.53663 2.06337 1.882 1.09642 #> Dataset 7 parent 60 41.1 39.42728 1.67272 1.882 0.88884 #> Dataset 7 parent 60 38.4 39.42728 -1.02728 1.882 -0.54587 #> Dataset 7 parent 90 32.5 33.76360 -1.26360 1.882 -0.67144 #> Dataset 7 parent 90 35.5 33.76360 1.73640 1.882 0.92268 #> Dataset 7 parent 120 28.1 30.39975 -2.29975 1.882 -1.22203 #> Dataset 7 parent 120 29.0 30.39975 -1.39975 1.882 -0.74379 #> Dataset 7 parent 180 26.5 25.62379 0.87621 1.882 0.46559 #> Dataset 7 parent 180 27.6 25.62379 1.97621 1.882 1.05010 #> Dataset 7 A1 3 3.9 2.70005 1.19995 1.882 0.63762 #> Dataset 7 A1 3 3.1 2.70005 0.39995 1.882 0.21252 #> Dataset 7 A1 7 6.9 5.83475 1.06525 1.882 0.56605 #> Dataset 7 A1 7 6.6 5.83475 0.76525 1.882 0.40663 #> Dataset 7 A1 14 10.4 10.26142 0.13858 1.882 0.07364 #> Dataset 7 A1 14 8.3 10.26142 -1.96142 1.882 -1.04225 #> Dataset 7 A1 30 14.4 16.82999 -2.42999 1.882 -1.29123 #> Dataset 7 A1 30 13.7 16.82999 -3.12999 1.882 -1.66319 #> Dataset 7 A1 60 22.1 22.32486 -0.22486 1.882 -0.11949 #> Dataset 7 A1 60 22.3 22.32486 -0.02486 1.882 -0.01321 #> Dataset 7 A1 90 27.5 24.45927 3.04073 1.882 1.61576 #> Dataset 7 A1 90 25.4 24.45927 0.94073 1.882 0.49988 #> Dataset 7 A1 120 28.0 25.54862 2.45138 1.882 1.30260 #> Dataset 7 A1 120 26.6 25.54862 1.05138 1.882 0.55868 #> Dataset 7 A1 180 25.8 26.82277 -1.02277 1.882 -0.54347 #> Dataset 7 A1 180 25.3 26.82277 -1.52277 1.882 -0.80916 #> Dataset 8 parent 0 91.9 91.16791 0.73209 1.882 0.38901 #> Dataset 8 parent 0 90.8 91.16791 -0.36791 1.882 -0.19550 #> Dataset 8 parent 1 64.9 67.58358 -2.68358 1.882 -1.42598 #> Dataset 8 parent 1 66.2 67.58358 -1.38358 1.882 -0.73520 #> Dataset 8 parent 3 43.5 41.62086 1.87914 1.882 0.99853 #> Dataset 8 parent 3 44.1 41.62086 2.47914 1.882 1.31735 #> Dataset 8 parent 8 18.3 19.60116 -1.30116 1.882 -0.69140 #> Dataset 8 parent 8 18.1 19.60116 -1.50116 1.882 -0.79768 #> Dataset 8 parent 14 10.2 10.63101 -0.43101 1.882 -0.22903 #> Dataset 8 parent 14 10.8 10.63101 0.16899 1.882 0.08980 #> Dataset 8 parent 27 4.9 3.12435 1.77565 1.882 0.94354 #> Dataset 8 parent 27 3.3 3.12435 0.17565 1.882 0.09334 #> Dataset 8 parent 48 1.6 0.43578 1.16422 1.882 0.61864 #> Dataset 8 parent 48 1.5 0.43578 1.06422 1.882 0.56550 #> Dataset 8 parent 70 1.1 0.05534 1.04466 1.882 0.55510 #> Dataset 8 parent 70 0.9 0.05534 0.84466 1.882 0.44883 #> Dataset 8 A1 1 9.6 7.63450 1.96550 1.882 1.04442 #> Dataset 8 A1 1 7.7 7.63450 0.06550 1.882 0.03481 #> Dataset 8 A1 3 15.0 15.52593 -0.52593 1.882 -0.27947 #> Dataset 8 A1 3 15.1 15.52593 -0.42593 1.882 -0.22633 #> Dataset 8 A1 8 21.2 20.32192 0.87808 1.882 0.46659 #> Dataset 8 A1 8 21.1 20.32192 0.77808 1.882 0.41345 #> Dataset 8 A1 14 19.7 20.09721 -0.39721 1.882 -0.21107 #> Dataset 8 A1 14 18.9 20.09721 -1.19721 1.882 -0.63617 #> Dataset 8 A1 27 17.5 16.37477 1.12523 1.882 0.59792 #> Dataset 8 A1 27 15.9 16.37477 -0.47477 1.882 -0.25228 #> Dataset 8 A1 48 9.5 10.13141 -0.63141 1.882 -0.33551 #> Dataset 8 A1 48 9.8 10.13141 -0.33141 1.882 -0.17610 #> Dataset 8 A1 70 6.2 5.81827 0.38173 1.882 0.20284 #> Dataset 8 A1 70 6.1 5.81827 0.28173 1.882 0.14970 #> Dataset 9 parent 0 99.8 97.48728 2.31272 1.882 1.22892 #> Dataset 9 parent 0 98.3 97.48728 0.81272 1.882 0.43186 #> Dataset 9 parent 1 77.1 79.29476 -2.19476 1.882 -1.16624 #> Dataset 9 parent 1 77.2 79.29476 -2.09476 1.882 -1.11310 #> Dataset 9 parent 3 59.0 55.67060 3.32940 1.882 1.76915 #> Dataset 9 parent 3 58.1 55.67060 2.42940 1.882 1.29092 #> Dataset 9 parent 8 27.4 31.57871 -4.17871 1.882 -2.22046 #> Dataset 9 parent 8 29.2 31.57871 -2.37871 1.882 -1.26398 #> Dataset 9 parent 14 19.1 22.51546 -3.41546 1.882 -1.81489 #> Dataset 9 parent 14 29.6 22.51546 7.08454 1.882 3.76454 #> Dataset 9 parent 27 10.1 14.09074 -3.99074 1.882 -2.12057 #> Dataset 9 parent 27 18.2 14.09074 4.10926 1.882 2.18355 #> Dataset 9 parent 48 4.5 6.95747 -2.45747 1.882 -1.30584 #> Dataset 9 parent 48 9.1 6.95747 2.14253 1.882 1.13848 #> Dataset 9 parent 70 2.3 3.32472 -1.02472 1.882 -0.54451 #> Dataset 9 parent 70 2.9 3.32472 -0.42472 1.882 -0.22569 #> Dataset 9 parent 91 2.0 1.64300 0.35700 1.882 0.18970 #> Dataset 9 parent 91 1.8 1.64300 0.15700 1.882 0.08343 #> Dataset 9 parent 120 2.0 0.62073 1.37927 1.882 0.73291 #> Dataset 9 parent 120 2.2 0.62073 1.57927 1.882 0.83918 #> Dataset 9 A1 1 4.2 3.64568 0.55432 1.882 0.29455 #> Dataset 9 A1 1 3.9 3.64568 0.25432 1.882 0.13514 #> Dataset 9 A1 3 7.4 8.30173 -0.90173 1.882 -0.47916 #> Dataset 9 A1 3 7.9 8.30173 -0.40173 1.882 -0.21347 #> Dataset 9 A1 8 14.5 12.71589 1.78411 1.882 0.94803 #> Dataset 9 A1 8 13.7 12.71589 0.98411 1.882 0.52293 #> Dataset 9 A1 14 14.2 13.90452 0.29548 1.882 0.15701 #> Dataset 9 A1 14 12.2 13.90452 -1.70452 1.882 -0.90574 #> Dataset 9 A1 27 13.7 14.15523 -0.45523 1.882 -0.24190 #> Dataset 9 A1 27 13.2 14.15523 -0.95523 1.882 -0.50759 #> Dataset 9 A1 48 13.6 13.31038 0.28962 1.882 0.15389 #> Dataset 9 A1 48 15.4 13.31038 2.08962 1.882 1.11037 #> Dataset 9 A1 70 10.4 11.85965 -1.45965 1.882 -0.77562 #> Dataset 9 A1 70 11.6 11.85965 -0.25965 1.882 -0.13797 #> Dataset 9 A1 91 10.0 10.36294 -0.36294 1.882 -0.19286 #> Dataset 9 A1 91 9.5 10.36294 -0.86294 1.882 -0.45855 #> Dataset 9 A1 120 9.1 8.43003 0.66997 1.882 0.35601 #> Dataset 9 A1 120 9.0 8.43003 0.56997 1.882 0.30287 #> Dataset 10 parent 0 96.1 93.95603 2.14397 1.882 1.13925 #> Dataset 10 parent 0 94.3 93.95603 0.34397 1.882 0.18278 #> Dataset 10 parent 8 73.9 77.70592 -3.80592 1.882 -2.02237 #> Dataset 10 parent 8 73.9 77.70592 -3.80592 1.882 -2.02237 #> Dataset 10 parent 14 69.4 70.04570 -0.64570 1.882 -0.34311 #> Dataset 10 parent 14 73.1 70.04570 3.05430 1.882 1.62298 #> Dataset 10 parent 21 65.6 64.01710 1.58290 1.882 0.84111 #> Dataset 10 parent 21 65.3 64.01710 1.28290 1.882 0.68170 #> Dataset 10 parent 41 55.9 54.98434 0.91566 1.882 0.48656 #> Dataset 10 parent 41 54.4 54.98434 -0.58434 1.882 -0.31050 #> Dataset 10 parent 63 47.0 49.87137 -2.87137 1.882 -1.52577 #> Dataset 10 parent 63 49.3 49.87137 -0.57137 1.882 -0.30361 #> Dataset 10 parent 91 44.7 45.06727 -0.36727 1.882 -0.19516 #> Dataset 10 parent 91 46.7 45.06727 1.63273 1.882 0.86759 #> Dataset 10 parent 120 42.1 40.76402 1.33598 1.882 0.70991 #> Dataset 10 parent 120 41.3 40.76402 0.53598 1.882 0.28481 #> Dataset 10 A1 8 3.3 4.14599 -0.84599 1.882 -0.44954 #> Dataset 10 A1 8 3.4 4.14599 -0.74599 1.882 -0.39640 #> Dataset 10 A1 14 3.9 6.08478 -2.18478 1.882 -1.16093 #> Dataset 10 A1 14 2.9 6.08478 -3.18478 1.882 -1.69231 #> Dataset 10 A1 21 6.4 7.59411 -1.19411 1.882 -0.63452 #> Dataset 10 A1 21 7.2 7.59411 -0.39411 1.882 -0.20942 #> Dataset 10 A1 41 9.1 9.78292 -0.68292 1.882 -0.36289 #> Dataset 10 A1 41 8.5 9.78292 -1.28292 1.882 -0.68171 #> Dataset 10 A1 63 11.7 10.93274 0.76726 1.882 0.40770 #> Dataset 10 A1 63 12.0 10.93274 1.06726 1.882 0.56711 #> Dataset 10 A1 91 13.3 11.93986 1.36014 1.882 0.72274 #> Dataset 10 A1 91 13.2 11.93986 1.26014 1.882 0.66961 #> Dataset 10 A1 120 14.3 12.79238 1.50762 1.882 0.80111 #> Dataset 10 A1 120 12.1 12.79238 -0.69238 1.882 -0.36791 # The following takes about 6 minutes f_saem_dfop_sfo_deSolve <- saem(f_mmkin[\"DFOP-SFO\", ], solution_type = \"deSolve\", nbiter.saemix = c(200, 80)) #> DINTDY- T (=R1) illegal #> In above message, R1 = 70 #> #> T not in interval TCUR - HU (= R1) to TCUR (=R2) #> In above message, R1 = 53.1042, R2 = 56.6326 #> #> DINTDY- T (=R1) illegal #> In above message, R1 = 91 #> #> T not in interval TCUR - HU (= R1) to TCUR (=R2) #> In above message, R1 = 53.1042, R2 = 56.6326 #> #> DLSODA- Trouble in DINTDY. ITASK = I1, TOUT = R1 #> In above message, I1 = 1 #> #> In above message, R1 = 91 #> #> Error in deSolve::lsoda(y = odeini, times = outtimes, func = lsoda_func, : #> illegal input detected before taking any integration steps - see written message #anova( # f_saem_dfop_sfo, # f_saem_dfop_sfo_deSolve)) # If the model supports it, we can also use eigenvalue based solutions, which # take a similar amount of time #f_saem_sfo_sfo_eigen <- saem(f_mmkin[\"SFO-SFO\", ], solution_type = \"eigen\", # control = list(nbiter.saemix = c(200, 80), nbdisplay = 10)) # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":null,"dir":"Reference","previous_headings":"","what":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"dataset used comparison KinGUI ModelMaker check software quality KinGUI original publication (Schäfer et al., 2007). results fitting also included.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"","code":"schaefer07_complex_case"},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"data set data frame 8 observations following 6 variables. time numeric vector parent numeric vector A1 numeric vector B1 numeric vector C1 numeric vector A2 numeric vector results data frame 14 results different parameter values","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"Schäfer D, Mikolasch B, Rainbird P Harvey B (2007). KinGUI: new kinetic software tool evaluations according FOCUS degradation kinetics. : Del Re AAM, Capri E, Fragoulis G Trevisan M (Eds.). Proceedings XIII Symposium Pesticide Chemistry, Piacenza, 2007, p. 916-923.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Metabolism data set used for checking the software quality of KinGUI — schaefer07_complex_case","text":"","code":"data <- mkin_wide_to_long(schaefer07_complex_case, time = \"time\") model <- mkinmod( parent = list(type = \"SFO\", to = c(\"A1\", \"B1\", \"C1\"), sink = FALSE), A1 = list(type = \"SFO\", to = \"A2\"), B1 = list(type = \"SFO\"), C1 = list(type = \"SFO\"), A2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded # \\dontrun{ fit <- mkinfit(model, data, quiet = TRUE) plot(fit) endpoints(fit) #> $ff #> parent_A1 parent_B1 parent_C1 parent_sink A1_A2 A1_sink #> 0.3809618 0.1954668 0.4235714 0.0000000 0.4479540 0.5520460 #> #> $distimes #> DT50 DT90 #> parent 13.95078 46.34349 #> A1 49.75347 165.27745 #> B1 37.26905 123.80511 #> C1 11.23129 37.30955 #> A2 28.50690 94.69789 #> # } # Compare with the results obtained in the original publication print(schaefer07_complex_results) #> compound parameter KinGUI ModelMaker deviation #> 1 parent degradation rate 0.0496 0.0506 2.0 #> 2 parent DT50 13.9900 13.6900 2.2 #> 3 metabolite A1 formation fraction 0.3803 0.3696 2.9 #> 4 metabolite A1 degradation rate 0.0139 0.0136 2.2 #> 5 metabolite A1 DT50 49.9600 50.8900 1.8 #> 6 metabolite B1 formation fraction 0.1866 0.1818 2.6 #> 7 metabolite B1 degradation rate 0.0175 0.0172 1.7 #> 8 metabolite B1 DT50 39.6100 40.2400 1.6 #> 9 metabolite C1 formation fraction 0.4331 0.4486 3.5 #> 10 metabolite C1 degradation rate 0.0638 0.0700 8.9 #> 11 metabolite C1 DT50 10.8700 9.9000 9.8 #> 12 metabolite A2 formation fraction 0.4529 0.4559 0.7 #> 13 metabolite A2 degradation rate 0.0245 0.0244 0.4 #> 14 metabolite A2 DT50 28.2400 28.4500 0.7"},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":null,"dir":"Reference","previous_headings":"","what":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"function automates replacing unquantified values residue time depth series. time series, function performs part residue processing proposed FOCUS kinetics guidance parent compounds metabolites. two-dimensional residue series time depth, automates proposal Boesten et al (2015).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"","code":"set_nd_nq(res_raw, lod, loq = NA, time_zero_presence = FALSE) set_nd_nq_focus( res_raw, lod, loq = NA, set_first_sample_nd = TRUE, first_sample_nd_value = 0, ignore_below_loq_after_first_nd = TRUE )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"res_raw Character vector residue time series, matrix residue values rows representing depth profiles specific sampling time, columns representing time series residues depth. Values limit detection (lod) coded \"nd\", values limit detection limit quantification, , coded \"nq\". Samples analysed coded \"na\". values \"na\", \"nd\" \"nq\" coercible numeric lod Limit detection (numeric) loq Limit quantification(numeric). Must specified FOCUS rule stop first non-detection applied time_zero_presence assume residues occur time zero? affects samples first sampling time reported \"nd\" (detected). set_first_sample_nd first sample set \"first_sample_nd_value\" case non-detection? first_sample_nd_value Value used first sample non-detection ignore_below_loq_after_first_nd ignore values LOQ first non-detection occurs quantified values?","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"numeric vector, vector supplied, numeric matrix otherwise","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"set_nd_nq_focus(): Set non-detects residue time series according FOCUS rules","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"Boesten, J. J. T. ., van der Linden, . M. ., Beltman, W. H. J. Pol, J. W. (2015). Leaching plant protection products transformation products; Proposals improving assessment leaching groundwater Netherlands — Version 2. Alterra report 2630, Alterra Wageningen UR (University & Research centre) FOCUS (2014) Generic Guidance Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration, Version 1.1, 18 December 2014, p. 251","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set non-detects and unquantified values in residue series without replicates — set_nd_nq","text":"","code":"# FOCUS (2014) p. 75/76 and 131/132 parent_1 <- c(.12, .09, .05, .03, \"nd\", \"nd\", \"nd\", \"nd\", \"nd\", \"nd\") set_nd_nq(parent_1, 0.02) #> [1] 0.12 0.09 0.05 0.03 0.01 NA NA NA NA NA parent_2 <- c(.12, .09, .05, .03, \"nd\", \"nd\", .03, \"nd\", \"nd\", \"nd\") set_nd_nq(parent_2, 0.02) #> [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.03 0.01 NA NA set_nd_nq_focus(parent_2, 0.02, loq = 0.05) #> [1] 0.12 0.09 0.05 0.03 0.01 NA NA NA NA NA parent_3 <- c(.12, .09, .05, .03, \"nd\", \"nd\", .06, \"nd\", \"nd\", \"nd\") set_nd_nq(parent_3, 0.02) #> [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.06 0.01 NA NA set_nd_nq_focus(parent_3, 0.02, loq = 0.05) #> [1] 0.12 0.09 0.05 0.03 0.01 0.01 0.06 0.01 NA NA metabolite <- c(\"nd\", \"nd\", \"nd\", 0.03, 0.06, 0.10, 0.11, 0.10, 0.09, 0.05, 0.03, \"nd\", \"nd\") set_nd_nq(metabolite, 0.02) #> [1] NA NA 0.01 0.03 0.06 0.10 0.11 0.10 0.09 0.05 0.03 0.01 NA set_nd_nq_focus(metabolite, 0.02, 0.05) #> [1] 0.00 NA 0.01 0.03 0.06 0.10 0.11 0.10 0.09 0.05 0.03 0.01 NA # # Boesten et al. (2015), p. 57/58 table_8 <- matrix( c(10, 10, rep(\"nd\", 4), 10, 10, rep(\"nq\", 2), rep(\"nd\", 2), 10, 10, 10, \"nq\", \"nd\", \"nd\", \"nq\", 10, \"nq\", rep(\"nd\", 3), \"nd\", \"nq\", \"nq\", rep(\"nd\", 3), rep(\"nd\", 6), rep(\"nd\", 6)), ncol = 6, byrow = TRUE) set_nd_nq(table_8, 0.5, 1.5, time_zero_presence = TRUE) #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 10.00 10.00 0.25 0.25 NA NA #> [2,] 10.00 10.00 1.00 1.00 0.25 NA #> [3,] 10.00 10.00 10.00 1.00 0.25 NA #> [4,] 1.00 10.00 1.00 0.25 NA NA #> [5,] 0.25 1.00 1.00 0.25 NA NA #> [6,] NA 0.25 0.25 NA NA NA #> [7,] NA NA NA NA NA NA table_10 <- matrix( c(10, 10, rep(\"nd\", 4), 10, 10, rep(\"nd\", 4), 10, 10, 10, rep(\"nd\", 3), \"nd\", 10, rep(\"nd\", 4), rep(\"nd\", 18)), ncol = 6, byrow = TRUE) set_nd_nq(table_10, 0.5, time_zero_presence = TRUE) #> [,1] [,2] [,3] [,4] [,5] [,6] #> [1,] 10.00 10.00 0.25 NA NA NA #> [2,] 10.00 10.00 0.25 NA NA NA #> [3,] 10.00 10.00 10.00 0.25 NA NA #> [4,] 0.25 10.00 0.25 NA NA NA #> [5,] NA 0.25 NA NA NA NA #> [6,] NA NA NA NA NA NA #> [7,] NA NA NA NA NA NA"},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":null,"dir":"Reference","previous_headings":"","what":"Two-component error model — sigma_twocomp","title":"Two-component error model — sigma_twocomp","text":"Function describing standard deviation measurement error dependence measured value \\(y\\):","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Two-component error model — sigma_twocomp","text":"","code":"sigma_twocomp(y, sigma_low, rsd_high)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Two-component error model — sigma_twocomp","text":"y magnitude observed value sigma_low asymptotic minimum standard deviation low observed values rsd_high coefficient describing increase standard deviation magnitude observed value","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Two-component error model — sigma_twocomp","text":"standard deviation response variable.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Two-component error model — sigma_twocomp","text":"$$\\sigma = \\sqrt{ \\sigma_{low}^2 + y^2 * {rsd}_{high}^2}$$ sigma = sqrt(sigma_low^2 + y^2 * rsd_high^2) error model used example Werner et al. (1978). model proposed Rocke Lorenzato (1995) can written form well, assumes approximate lognormal distribution errors high values y.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Two-component error model — sigma_twocomp","text":"Werner, Mario, Brooks, Samuel H., Knott, Lancaster B. (1978) Additive, Multiplicative, Mixed Analytical Errors. Clinical Chemistry 24(11), 1895-1898. Rocke, David M. Lorenzato, Stefan (1995) two-component model measurement error analytical chemistry. Technometrics 37(2), 176-184. Ranke J Meinecke S (2019) Error Models Kinetic Evaluation Chemical Degradation Data. Environments 6(12) 124 doi:10.3390/environments6120124 .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Two-component error model — sigma_twocomp","text":"","code":"times <- c(0, 1, 3, 7, 14, 28, 60, 90, 120) d_pred <- data.frame(time = times, parent = 100 * exp(- 0.03 * times)) set.seed(123456) d_syn <- add_err(d_pred, function(y) sigma_twocomp(y, 1, 0.07), reps = 2, n = 1)[[1]] f_nls <- nls(value ~ SSasymp(time, 0, parent_0, lrc), data = d_syn, start = list(parent_0 = 100, lrc = -3)) library(nlme) f_gnls <- gnls(value ~ SSasymp(time, 0, parent_0, lrc), data = d_syn, na.action = na.omit, start = list(parent_0 = 100, lrc = -3)) if (length(findFunction(\"varConstProp\")) > 0) { f_gnls_tc <- update(f_gnls, weights = varConstProp()) f_gnls_tc_sf <- update(f_gnls_tc, control = list(sigma = 1)) } f_mkin <- mkinfit(\"SFO\", d_syn, error_model = \"const\", quiet = TRUE) f_mkin_tc <- mkinfit(\"SFO\", d_syn, error_model = \"tc\", quiet = TRUE) plot_res(f_mkin_tc, standardized = TRUE) AIC(f_nls, f_gnls, f_gnls_tc, f_gnls_tc_sf, f_mkin, f_mkin_tc) #> df AIC #> f_nls 3 114.4817 #> f_gnls 3 114.4817 #> f_gnls_tc 5 103.6447 #> f_gnls_tc_sf 4 101.6447 #> f_mkin 3 114.4817 #> f_mkin_tc 4 101.6446"},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":null,"dir":"Reference","previous_headings":"","what":"Method to get status information for fit array objects — status","title":"Method to get status information for fit array objects — status","text":"Method get status information fit array objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Method to get status information for fit array objects — status","text":"","code":"status(object, ...) # S3 method for mmkin status(object, ...) # S3 method for status.mmkin print(x, ...) # S3 method for mhmkin status(object, ...) # S3 method for status.mhmkin print(x, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Method to get status information for fit array objects — status","text":"object object investigate ... potential future extensions x object printed","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Method to get status information for fit array objects — status","text":"object dimensions fit array suitable printing method.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/status.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Method to get status information for fit array objects — status","text":"","code":"# \\dontrun{ fits <- mmkin( c(\"SFO\", \"FOMC\"), list(\"FOCUS A\" = FOCUS_2006_A, \"FOCUS B\" = FOCUS_2006_C), quiet = TRUE) status(fits) #> dataset #> model FOCUS A FOCUS B #> SFO OK OK #> FOMC C OK #> #> C: Optimisation did not converge: #> false convergence (8) #> OK: No warnings # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary method for class ","title":"Summary method for class ","text":"Lists model equations, initial parameter values, optimised parameters uncertainty statistics, chi2 error levels calculated according FOCUS guidance (2006) defined therein, formation fractions, DT50 values optionally data, consisting observed, predicted residual values.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary method for class ","text":"","code":"# S3 method for mkinfit summary(object, data = TRUE, distimes = TRUE, alpha = 0.05, ...) # S3 method for summary.mkinfit print(x, digits = max(3, getOption(\"digits\") - 3), ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary method for class ","text":"object object class mkinfit. data logical, indicating whether data included summary. distimes logical, indicating whether DT50 DT90 values included. alpha error level confidence interval estimation t distribution ... optional arguments passed methods like print. x object class summary.mkinfit. digits Number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary method for class ","text":"summary function returns list components, among others version, Rversion mkin R versions used date.fit, date.summary dates fit summary produced diffs differential equations used model use_of_ff maximum minimum use made formation fractions bpar Optimised backtransformed parameters data data (see Description ). start starting values bounds, applicable, optimised parameters. fixed values fixed parameters. errmin chi2 error levels observed variable. bparms.ode backtransformed ODE parameters, use starting parameters related models. errparms Error model parameters. ff estimated formation fractions derived fitted model. distimes DT50 DT90 values observed variable. SFORB applicable, eigenvalues fractional eigenvector component g SFORB systems model. print method called side effect, .e. printing summary.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Summary method for class ","text":"FOCUS (2006) “Guidance Document Estimating Persistence Degradation Kinetics Environmental Fate Studies Pesticides EU Registration” Report FOCUS Work Group Degradation Kinetics, EC Document Reference Sanco/10058/2005 version 2.0, 434 pp, http://esdac.jrc.ec.europa.eu/projects/degradation-kinetics","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary method for class ","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summary method for class ","text":"","code":"summary(mkinfit(\"SFO\", FOCUS_2006_A, quiet = TRUE)) #> mkin version used for fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:19:39 2023 #> Date of summary: Thu Nov 16 04:19:39 2023 #> #> Equations: #> d_parent/dt = - k_parent * parent #> #> Model predictions using solution type analytical #> #> Fitted using 131 model solutions performed in 0.009 s #> #> Error model: Constant variance #> #> Error model algorithm: OLS #> #> Starting values for parameters to be optimised: #> value type #> parent_0 101.24 state #> k_parent 0.10 deparm #> #> Starting values for the transformed parameters actually optimised: #> value lower upper #> parent_0 101.240000 -Inf Inf #> log_k_parent -2.302585 -Inf Inf #> #> Fixed parameter values: #> None #> #> Results: #> #> AIC BIC logLik #> 55.28197 55.5203 -24.64099 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> Estimate Std. Error Lower Upper #> parent_0 109.200 3.70400 99.630 118.700 #> log_k_parent -3.291 0.09176 -3.527 -3.055 #> sigma 5.266 1.31600 1.882 8.649 #> #> Parameter correlation: #> parent_0 log_k_parent sigma #> parent_0 1.000e+00 5.428e-01 1.642e-07 #> log_k_parent 5.428e-01 1.000e+00 2.507e-07 #> sigma 1.642e-07 2.507e-07 1.000e+00 #> #> 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 109.20000 29.47 4.218e-07 99.6300 118.70000 #> k_parent 0.03722 10.90 5.650e-05 0.0294 0.04712 #> sigma 5.26600 4.00 5.162e-03 1.8820 8.64900 #> #> FOCUS Chi2 error levels in percent: #> err.min n.optim df #> All data 8.385 2 6 #> parent 8.385 2 6 #> #> Estimated disappearance times: #> DT50 DT90 #> parent 18.62 61.87 #> #> Data: #> time variable observed predicted residual #> 0 parent 101.24 109.153 -7.9132 #> 3 parent 99.27 97.622 1.6484 #> 7 parent 90.11 84.119 5.9913 #> 14 parent 72.19 64.826 7.3641 #> 30 parent 29.71 35.738 -6.0283 #> 62 parent 5.98 10.862 -4.8818 #> 90 parent 1.54 3.831 -2.2911 #> 118 parent 0.39 1.351 -0.9613"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary method for class ","title":"Summary method for class ","text":"Shows status information mkinfit objects contained object gives overview ill-defined parameters calculated illparms.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary method for class ","text":"","code":"# S3 method for mmkin summary(object, conf.level = 0.95, ...) # S3 method for summary.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary method for class ","text":"object object class mmkin conf.level confidence level testing parameters ... optional arguments passed methods like print. x object class summary.mmkin. digits number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summary method for class ","text":"","code":"fits <- mmkin( c(\"SFO\", \"FOMC\"), list(\"FOCUS A\" = FOCUS_2006_A, \"FOCUS C\" = FOCUS_2006_C), quiet = TRUE, cores = 1) #> Warning: Optimisation did not converge: #> false convergence (8) summary(fits) #> Error model: Constant variance #> Fitted in 0.454 s #> #> Status: #> dataset #> model FOCUS A FOCUS C #> SFO OK OK #> FOMC C OK #> #> C: Optimisation did not converge: #> false convergence (8) #> OK: No warnings #> #> Ill-defined parameters: #> dataset #> model FOCUS A FOCUS C #> SFO #> FOMC parent_0, alpha, beta, sigma"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary method for class ","title":"Summary method for class ","text":"Lists model equations, initial parameter values, optimised parameters fixed effects (population), random effects (deviations population mean) residual error model, well resulting endpoints formation fractions DT50 values. Optionally (default FALSE), data listed full.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary method for class ","text":"","code":"# S3 method for nlme.mmkin summary( object, data = FALSE, verbose = FALSE, distimes = TRUE, alpha = 0.05, ... ) # S3 method for summary.nlme.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), verbose = x$verbose, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary method for class ","text":"object object class nlme.mmkin data logical, indicating whether full data included summary. verbose summary verbose? distimes logical, indicating whether DT50 DT90 values included. alpha error level confidence interval estimation t distribution ... optional arguments passed methods like print. x object class summary.nlme.mmkin digits Number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary method for class ","text":"summary function returns list based nlme object obtained fit, least following additional components nlmeversion, mkinversion, Rversion nlme, mkin R versions used date.fit, date.summary dates fit summary produced diffs differential equations used degradation model use_of_ff maximum minimum use made formation fractions data data confint_trans Transformed parameters used optimisation, confidence intervals confint_back Backtransformed parameters, confidence intervals available ff estimated formation fractions derived fitted model. distimes DT50 DT90 values observed variable. SFORB applicable, eigenvalues SFORB components model. print method called side effect, .e. printing summary.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary method for class ","text":"Johannes Ranke mkin specific parts José Pinheiro Douglas Bates components inherited nlme","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summary method for class ","text":"","code":"# Generate five datasets following SFO kinetics sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) dt50_sfo_in_pop <- 50 k_in_pop <- log(2) / dt50_sfo_in_pop set.seed(1234) k_in <- rlnorm(5, log(k_in_pop), 0.5) SFO <- mkinmod(parent = mkinsub(\"SFO\")) pred_sfo <- function(k) { mkinpredict(SFO, c(k_parent = k), c(parent = 100), sampling_times) } ds_sfo_mean <- lapply(k_in, pred_sfo) names(ds_sfo_mean) <- paste(\"ds\", 1:5) set.seed(12345) ds_sfo_syn <- lapply(ds_sfo_mean, function(ds) { add_err(ds, sdfunc = function(value) sqrt(1^2 + value^2 * 0.07^2), n = 1)[[1]] }) # \\dontrun{ # Evaluate using mmkin and nlme library(nlme) f_mmkin <- mmkin(\"SFO\", ds_sfo_syn, quiet = TRUE, error_model = \"tc\", cores = 1) #> Warning: Optimisation did not converge: #> iteration limit reached without convergence (10) f_nlme <- nlme(f_mmkin) summary(f_nlme, data = TRUE) #> nlme version used for fitting: 3.1.163 #> mkin version used for pre-fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:19:41 2023 #> Date of summary: Thu Nov 16 04:19:41 2023 #> #> Equations: #> d_parent/dt = - k_parent * parent #> #> Data: #> 90 observations of 1 variable(s) grouped in 5 datasets #> #> Model predictions using solution type analytical #> #> Fitted in 0.182 s using 4 iterations #> #> Variance model: Two-component variance function #> #> Mean of starting values for individual parameters: #> parent_0 log_k_parent #> 101.569 -4.454 #> #> Fixed degradation parameter values: #> None #> #> Results: #> #> AIC BIC logLik #> 584.5 599.5 -286.2 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> lower est. upper #> parent_0 99.371 101.592 103.814 #> log_k_parent -4.973 -4.449 -3.926 #> #> Correlation: #> parnt_0 #> log_k_parent 0.0507 #> #> Random effects: #> Formula: list(parent_0 ~ 1, log_k_parent ~ 1) #> Level: ds #> Structure: Diagonal #> parent_0 log_k_parent Residual #> StdDev: 6.921e-05 0.5863 1 #> #> Variance function: #> Structure: Constant plus proportion of variance covariate #> Formula: ~fitted(.) #> Parameter estimates: #> const prop #> 0.0001208313 0.0789967985 #> #> Backtransformed parameters with asymmetric confidence intervals: #> lower est. upper #> parent_0 99.370882 101.59243 103.81398 #> k_parent 0.006923 0.01168 0.01972 #> #> Estimated disappearance times: #> DT50 DT90 #> parent 59.32 197.1 #> #> Data: #> ds name time observed predicted residual std standardized #> ds 1 parent 0 104.1 101.592 2.50757 8.0255 0.312451 #> ds 1 parent 0 105.0 101.592 3.40757 8.0255 0.424594 #> ds 1 parent 1 98.5 100.796 -2.29571 7.9625 -0.288313 #> ds 1 parent 1 96.1 100.796 -4.69571 7.9625 -0.589725 #> ds 1 parent 3 101.9 99.221 2.67904 7.8381 0.341796 #> ds 1 parent 3 85.2 99.221 -14.02096 7.8381 -1.788812 #> ds 1 parent 7 99.1 96.145 2.95512 7.5951 0.389081 #> ds 1 parent 7 93.0 96.145 -3.14488 7.5951 -0.414065 #> ds 1 parent 14 88.1 90.989 -2.88944 7.1879 -0.401987 #> ds 1 parent 14 84.1 90.989 -6.88944 7.1879 -0.958480 #> ds 1 parent 28 80.2 81.493 -1.29305 6.4377 -0.200857 #> ds 1 parent 28 91.3 81.493 9.80695 6.4377 1.523364 #> ds 1 parent 60 65.1 63.344 1.75642 5.0039 0.351008 #> ds 1 parent 60 65.8 63.344 2.45642 5.0039 0.490898 #> ds 1 parent 90 47.8 50.018 -2.21764 3.9512 -0.561252 #> ds 1 parent 90 53.5 50.018 3.48236 3.9512 0.881335 #> ds 1 parent 120 37.6 39.495 -1.89515 3.1200 -0.607423 #> ds 1 parent 120 39.3 39.495 -0.19515 3.1200 -0.062549 #> ds 2 parent 0 107.9 101.592 6.30757 8.0255 0.785943 #> ds 2 parent 0 102.1 101.592 0.50757 8.0255 0.063245 #> ds 2 parent 1 103.8 100.058 3.74159 7.9043 0.473361 #> ds 2 parent 1 108.6 100.058 8.54159 7.9043 1.080626 #> ds 2 parent 3 91.0 97.060 -6.05952 7.6674 -0.790297 #> ds 2 parent 3 84.9 97.060 -12.15952 7.6674 -1.585874 #> ds 2 parent 7 79.3 91.329 -12.02867 7.2147 -1.667251 #> ds 2 parent 7 100.9 91.329 9.57133 7.2147 1.326647 #> ds 2 parent 14 77.3 82.102 -4.80185 6.4858 -0.740366 #> ds 2 parent 14 83.5 82.102 1.39815 6.4858 0.215571 #> ds 2 parent 28 66.8 66.351 0.44945 5.2415 0.085748 #> ds 2 parent 28 63.3 66.351 -3.05055 5.2415 -0.582002 #> ds 2 parent 60 40.8 40.775 0.02474 3.2211 0.007679 #> ds 2 parent 60 44.8 40.775 4.02474 3.2211 1.249485 #> ds 2 parent 90 27.8 25.832 1.96762 2.0407 0.964198 #> ds 2 parent 90 27.0 25.832 1.16762 2.0407 0.572171 #> ds 2 parent 120 15.2 16.366 -1.16561 1.2928 -0.901595 #> ds 2 parent 120 15.5 16.366 -0.86561 1.2928 -0.669547 #> ds 3 parent 0 97.7 101.592 -3.89243 8.0255 -0.485009 #> ds 3 parent 0 88.2 101.592 -13.39243 8.0255 -1.668740 #> ds 3 parent 1 109.9 99.218 10.68196 7.8379 1.362858 #> ds 3 parent 1 97.8 99.218 -1.41804 7.8379 -0.180921 #> ds 3 parent 3 100.5 94.634 5.86555 7.4758 0.784603 #> ds 3 parent 3 77.4 94.634 -17.23445 7.4758 -2.305360 #> ds 3 parent 7 78.3 86.093 -7.79273 6.8011 -1.145813 #> ds 3 parent 7 90.3 86.093 4.20727 6.8011 0.618620 #> ds 3 parent 14 76.0 72.958 3.04222 5.7634 0.527848 #> ds 3 parent 14 79.1 72.958 6.14222 5.7634 1.065722 #> ds 3 parent 28 46.0 52.394 -6.39404 4.1390 -1.544842 #> ds 3 parent 28 53.4 52.394 1.00596 4.1390 0.243046 #> ds 3 parent 60 25.1 24.582 0.51786 1.9419 0.266676 #> ds 3 parent 60 21.4 24.582 -3.18214 1.9419 -1.638664 #> ds 3 parent 90 11.0 12.092 -1.09202 0.9552 -1.143199 #> ds 3 parent 90 14.2 12.092 2.10798 0.9552 2.206777 #> ds 3 parent 120 5.8 5.948 -0.14810 0.4699 -0.315178 #> ds 3 parent 120 6.1 5.948 0.15190 0.4699 0.323282 #> ds 4 parent 0 95.3 101.592 -6.29243 8.0255 -0.784057 #> ds 4 parent 0 102.0 101.592 0.40757 8.0255 0.050784 #> ds 4 parent 1 104.4 101.125 3.27549 7.9885 0.410025 #> ds 4 parent 1 105.4 101.125 4.27549 7.9885 0.535205 #> ds 4 parent 3 113.7 100.195 13.50487 7.9151 1.706218 #> ds 4 parent 3 82.3 100.195 -17.89513 7.9151 -2.260886 #> ds 4 parent 7 98.1 98.362 -0.26190 7.7703 -0.033706 #> ds 4 parent 7 87.8 98.362 -10.56190 7.7703 -1.359270 #> ds 4 parent 14 97.9 95.234 2.66590 7.5232 0.354357 #> ds 4 parent 14 104.8 95.234 9.56590 7.5232 1.271521 #> ds 4 parent 28 85.0 89.274 -4.27372 7.0523 -0.606001 #> ds 4 parent 28 77.2 89.274 -12.07372 7.0523 -1.712017 #> ds 4 parent 60 82.2 77.013 5.18661 6.0838 0.852526 #> ds 4 parent 60 86.1 77.013 9.08661 6.0838 1.493571 #> ds 4 parent 90 70.5 67.053 3.44692 5.2970 0.650733 #> ds 4 parent 90 61.7 67.053 -5.35308 5.2970 -1.010591 #> ds 4 parent 120 60.0 58.381 1.61905 4.6119 0.351058 #> ds 4 parent 120 56.4 58.381 -1.98095 4.6119 -0.429530 #> ds 5 parent 0 92.6 101.592 -8.99243 8.0255 -1.120485 #> ds 5 parent 0 116.5 101.592 14.90757 8.0255 1.857531 #> ds 5 parent 1 108.0 99.914 8.08560 7.8929 1.024413 #> ds 5 parent 1 104.9 99.914 4.98560 7.8929 0.631655 #> ds 5 parent 3 100.5 96.641 3.85898 7.6343 0.505477 #> ds 5 parent 3 89.5 96.641 -7.14102 7.6343 -0.935383 #> ds 5 parent 7 91.7 90.412 1.28752 7.1423 0.180267 #> ds 5 parent 7 95.1 90.412 4.68752 7.1423 0.656304 #> ds 5 parent 14 82.2 80.463 1.73715 6.3563 0.273295 #> ds 5 parent 14 84.5 80.463 4.03715 6.3563 0.635141 #> ds 5 parent 28 60.5 63.728 -3.22788 5.0343 -0.641178 #> ds 5 parent 28 72.8 63.728 9.07212 5.0343 1.802062 #> ds 5 parent 60 38.3 37.399 0.90061 2.9544 0.304835 #> ds 5 parent 60 40.7 37.399 3.30061 2.9544 1.117174 #> ds 5 parent 90 22.5 22.692 -0.19165 1.7926 -0.106913 #> ds 5 parent 90 20.8 22.692 -1.89165 1.7926 -1.055273 #> ds 5 parent 120 13.4 13.768 -0.36790 1.0876 -0.338259 #> ds 5 parent 120 13.8 13.768 0.03210 1.0876 0.029517 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":null,"dir":"Reference","previous_headings":"","what":"Summary method for class ","title":"Summary method for class ","text":"Lists model equations, initial parameter values, optimised parameters fixed effects (population), random effects (deviations population mean) residual error model, well resulting endpoints formation fractions DT50 values. Optionally (default FALSE), data listed full.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Summary method for class ","text":"","code":"# S3 method for saem.mmkin summary( object, data = FALSE, verbose = FALSE, covariates = NULL, covariate_quantile = 0.5, distimes = TRUE, ... ) # S3 method for summary.saem.mmkin print(x, digits = max(3, getOption(\"digits\") - 3), verbose = x$verbose, ...)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Summary method for class ","text":"object object class saem.mmkin data logical, indicating whether full data included summary. verbose summary verbose? covariates Numeric vector covariate values variables covariate models object. given, overrides 'covariate_quantile'. covariate_quantile argument effect fitted object covariate models. , default show endpoints median covariate values (50th percentile). distimes logical, indicating whether DT50 DT90 values included. ... optional arguments passed methods like print. x object class summary.saem.mmkin digits Number digits use printing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Summary method for class ","text":"summary function returns list based saemix::SaemixObject obtained fit, least following additional components saemixversion, mkinversion, Rversion saemix, mkin R versions used date.fit, date.summary dates fit summary produced diffs differential equations used degradation model use_of_ff maximum minimum use made formation fractions data data confint_trans Transformed parameters used optimisation, confidence intervals confint_back Backtransformed parameters, confidence intervals available confint_errmod Error model parameters confidence intervals ff estimated formation fractions derived fitted model. distimes DT50 DT90 values observed variable. SFORB applicable, eigenvalues SFORB components model. print method called side effect, .e. printing summary.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Summary method for class ","text":"Johannes Ranke mkin specific parts saemix authors parts inherited saemix.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Summary method for class ","text":"","code":"# Generate five datasets following DFOP-SFO kinetics sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) dfop_sfo <- mkinmod(parent = mkinsub(\"DFOP\", \"m1\"), m1 = mkinsub(\"SFO\"), quiet = TRUE) set.seed(1234) k1_in <- rlnorm(5, log(0.1), 0.3) k2_in <- rlnorm(5, log(0.02), 0.3) g_in <- plogis(rnorm(5, qlogis(0.5), 0.3)) f_parent_to_m1_in <- plogis(rnorm(5, qlogis(0.3), 0.3)) k_m1_in <- rlnorm(5, log(0.02), 0.3) pred_dfop_sfo <- function(k1, k2, g, f_parent_to_m1, k_m1) { mkinpredict(dfop_sfo, c(k1 = k1, k2 = k2, g = g, f_parent_to_m1 = f_parent_to_m1, k_m1 = k_m1), c(parent = 100, m1 = 0), sampling_times) } ds_mean_dfop_sfo <- lapply(1:5, function(i) { mkinpredict(dfop_sfo, c(k1 = k1_in[i], k2 = k2_in[i], g = g_in[i], f_parent_to_m1 = f_parent_to_m1_in[i], k_m1 = k_m1_in[i]), c(parent = 100, m1 = 0), sampling_times) }) names(ds_mean_dfop_sfo) <- paste(\"ds\", 1:5) ds_syn_dfop_sfo <- lapply(ds_mean_dfop_sfo, function(ds) { add_err(ds, sdfunc = function(value) sqrt(1^2 + value^2 * 0.07^2), n = 1)[[1]] }) # \\dontrun{ # Evaluate using mmkin and saem f_mmkin_dfop_sfo <- mmkin(list(dfop_sfo), ds_syn_dfop_sfo, quiet = TRUE, error_model = \"tc\", cores = 5) f_saem_dfop_sfo <- saem(f_mmkin_dfop_sfo) print(f_saem_dfop_sfo) #> 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: #> 171 observations of 2 variable(s) grouped in 5 datasets #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 810.8 805.4 -391.4 #> #> Fitted parameters: #> estimate lower upper #> parent_0 100.966822 97.90584 104.0278 #> log_k_m1 -4.076164 -4.17485 -3.9775 #> f_parent_qlogis -0.940902 -1.35358 -0.5282 #> log_k1 -2.363988 -2.71690 -2.0111 #> log_k2 -4.060016 -4.21743 -3.9026 #> g_qlogis -0.029999 -0.44766 0.3877 #> a.1 0.876272 0.67308 1.0795 #> b.1 0.079594 0.06399 0.0952 #> SD.parent_0 0.076322 -76.47330 76.6259 #> SD.log_k_m1 0.005052 -1.09071 1.1008 #> SD.f_parent_qlogis 0.446968 0.16577 0.7282 #> SD.log_k1 0.348786 0.09502 0.6025 #> SD.log_k2 0.147456 0.03111 0.2638 #> SD.g_qlogis 0.348244 0.02794 0.6686 illparms(f_saem_dfop_sfo) #> [1] \"sd(parent_0)\" \"sd(log_k_m1)\" f_saem_dfop_sfo_2 <- update(f_saem_dfop_sfo, no_random_effect = c(\"parent_0\", \"log_k_m1\")) illparms(f_saem_dfop_sfo_2) intervals(f_saem_dfop_sfo_2) #> Approximate 95% confidence intervals #> #> Fixed effects: #> lower est. upper #> parent_0 98.04247057 101.09950884 104.15654711 #> k_m1 0.01528983 0.01687734 0.01862969 #> f_parent_to_m1 0.20447650 0.27932896 0.36887691 #> k1 0.06779844 0.09638524 0.13702550 #> k2 0.01495629 0.01741775 0.02028431 #> g 0.37669311 0.48368409 0.59219202 #> #> Random effects: #> lower est. upper #> sd(f_parent_qlogis) 0.16515100 0.4448330 0.7245149 #> sd(log_k1) 0.08982372 0.3447403 0.5996568 #> sd(log_k2) 0.02806589 0.1419560 0.2558462 #> sd(g_qlogis) 0.04908160 0.3801993 0.7113170 #> #> #> lower est. upper #> a.1 0.67539922 0.87630147 1.07720371 #> b.1 0.06401324 0.07920531 0.09439739 summary(f_saem_dfop_sfo_2, data = TRUE) #> saemix version used for fitting: 3.2 #> mkin version used for pre-fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:19:57 2023 #> Date of summary: Thu Nov 16 04:19:57 2023 #> #> 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: #> 171 observations of 2 variable(s) grouped in 5 datasets #> #> Model predictions using solution type analytical #> #> Fitted in 9.193 s #> Using 300, 100 iterations and 10 chains #> #> Variance model: Two-component variance function #> #> Starting values for degradation parameters: #> parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2 #> 101.65645 -4.05368 -0.94311 -2.35943 -4.07006 #> g_qlogis #> -0.01133 #> #> Fixed degradation parameter values: #> None #> #> Starting values for random effects (square root of initial entries in omega): #> parent_0 log_k_m1 f_parent_qlogis log_k1 log_k2 g_qlogis #> parent_0 6.742 0.0000 0.0000 0.0000 0.0000 0.000 #> log_k_m1 0.000 0.2236 0.0000 0.0000 0.0000 0.000 #> f_parent_qlogis 0.000 0.0000 0.5572 0.0000 0.0000 0.000 #> log_k1 0.000 0.0000 0.0000 0.8031 0.0000 0.000 #> log_k2 0.000 0.0000 0.0000 0.0000 0.2931 0.000 #> g_qlogis 0.000 0.0000 0.0000 0.0000 0.0000 0.807 #> #> Starting values for error model parameters: #> a.1 b.1 #> 1 1 #> #> Results: #> #> Likelihood computed by importance sampling #> AIC BIC logLik #> 806.9 802.2 -391.5 #> #> Optimised parameters: #> est. lower upper #> parent_0 101.09951 98.04247 104.1565 #> log_k_m1 -4.08178 -4.18057 -3.9830 #> f_parent_qlogis -0.94779 -1.35855 -0.5370 #> log_k1 -2.33940 -2.69122 -1.9876 #> log_k2 -4.05027 -4.20262 -3.8979 #> g_qlogis -0.06529 -0.50361 0.3730 #> a.1 0.87630 0.67540 1.0772 #> b.1 0.07921 0.06401 0.0944 #> SD.f_parent_qlogis 0.44483 0.16515 0.7245 #> SD.log_k1 0.34474 0.08982 0.5997 #> SD.log_k2 0.14196 0.02807 0.2558 #> SD.g_qlogis 0.38020 0.04908 0.7113 #> #> Correlation: #> parnt_0 lg_k_m1 f_prnt_ log_k1 log_k2 #> log_k_m1 -0.4716 #> f_parent_qlogis -0.2394 0.2617 #> log_k1 0.1677 -0.1566 -0.0659 #> log_k2 0.0165 0.0638 0.0045 0.2013 #> g_qlogis 0.1118 -0.1118 -0.0340 -0.2324 -0.3419 #> #> Random effects: #> est. lower upper #> SD.f_parent_qlogis 0.4448 0.16515 0.7245 #> SD.log_k1 0.3447 0.08982 0.5997 #> SD.log_k2 0.1420 0.02807 0.2558 #> SD.g_qlogis 0.3802 0.04908 0.7113 #> #> Variance model: #> est. lower upper #> a.1 0.87630 0.67540 1.0772 #> b.1 0.07921 0.06401 0.0944 #> #> Backtransformed parameters: #> est. lower upper #> parent_0 101.09951 98.04247 104.15655 #> k_m1 0.01688 0.01529 0.01863 #> f_parent_to_m1 0.27933 0.20448 0.36888 #> k1 0.09639 0.06780 0.13703 #> k2 0.01742 0.01496 0.02028 #> g 0.48368 0.37669 0.59219 #> #> Resulting formation fractions: #> ff #> parent_m1 0.2793 #> parent_sink 0.7207 #> #> Estimated disappearance times: #> DT50 DT90 DT50back DT50_k1 DT50_k2 #> parent 15.66 94.28 28.38 7.191 39.8 #> m1 41.07 136.43 NA NA NA #> #> Data: #> ds name time observed predicted residual std standardized #> ds 1 parent 0 89.8 1.011e+02 -11.29951 8.0554 -1.402721 #> ds 1 parent 0 104.1 1.011e+02 3.00049 8.0554 0.372481 #> ds 1 parent 1 88.7 9.624e+01 -7.53600 7.6726 -0.982195 #> ds 1 parent 1 95.5 9.624e+01 -0.73600 7.6726 -0.095925 #> ds 1 parent 3 81.8 8.736e+01 -5.55672 6.9744 -0.796732 #> ds 1 parent 3 94.5 8.736e+01 7.14328 6.9744 1.024217 #> ds 1 parent 7 71.5 7.251e+01 -1.00511 5.8093 -0.173019 #> ds 1 parent 7 70.3 7.251e+01 -2.20511 5.8093 -0.379585 #> ds 1 parent 14 54.2 5.356e+01 0.63921 4.3319 0.147560 #> ds 1 parent 14 49.6 5.356e+01 -3.96079 4.3319 -0.914340 #> ds 1 parent 28 31.5 3.175e+01 -0.25429 2.6634 -0.095475 #> ds 1 parent 28 28.8 3.175e+01 -2.95429 2.6634 -1.109218 #> ds 1 parent 60 12.1 1.281e+01 -0.71388 1.3409 -0.532390 #> ds 1 parent 60 13.6 1.281e+01 0.78612 1.3409 0.586271 #> ds 1 parent 90 6.2 6.405e+00 -0.20462 1.0125 -0.202083 #> ds 1 parent 90 8.3 6.405e+00 1.89538 1.0125 1.871910 #> ds 1 parent 120 2.2 3.329e+00 -1.12941 0.9151 -1.234165 #> ds 1 parent 120 2.4 3.329e+00 -0.92941 0.9151 -1.015615 #> ds 1 m1 1 0.3 1.177e+00 -0.87699 0.8812 -0.995168 #> ds 1 m1 1 0.2 1.177e+00 -0.97699 0.8812 -1.108644 #> ds 1 m1 3 2.2 3.268e+00 -1.06821 0.9137 -1.169063 #> ds 1 m1 3 3.0 3.268e+00 -0.26821 0.9137 -0.293536 #> ds 1 m1 7 6.5 6.555e+00 -0.05539 1.0186 -0.054377 #> ds 1 m1 7 5.0 6.555e+00 -1.55539 1.0186 -1.527022 #> ds 1 m1 14 10.2 1.017e+01 0.03108 1.1902 0.026117 #> ds 1 m1 14 9.5 1.017e+01 -0.66892 1.1902 -0.562010 #> ds 1 m1 28 12.2 1.270e+01 -0.50262 1.3342 -0.376708 #> ds 1 m1 28 13.4 1.270e+01 0.69738 1.3342 0.522686 #> ds 1 m1 60 11.8 1.078e+01 1.01734 1.2236 0.831403 #> ds 1 m1 60 13.2 1.078e+01 2.41734 1.2236 1.975530 #> ds 1 m1 90 6.6 7.686e+00 -1.08586 1.0670 -1.017675 #> ds 1 m1 90 9.3 7.686e+00 1.61414 1.0670 1.512779 #> ds 1 m1 120 3.5 5.205e+00 -1.70467 0.9684 -1.760250 #> ds 1 m1 120 5.4 5.205e+00 0.19533 0.9684 0.201701 #> ds 2 parent 0 118.0 1.011e+02 16.90049 8.0554 2.098026 #> ds 2 parent 0 99.8 1.011e+02 -1.29951 8.0554 -0.161321 #> ds 2 parent 1 90.2 9.574e+01 -5.53784 7.6334 -0.725473 #> ds 2 parent 1 94.6 9.574e+01 -1.13784 7.6334 -0.149060 #> ds 2 parent 3 96.1 8.638e+01 9.72233 6.8975 1.409551 #> ds 2 parent 3 78.4 8.638e+01 -7.97767 6.8975 -1.156610 #> ds 2 parent 7 77.9 7.194e+01 5.95854 5.7651 1.033547 #> ds 2 parent 7 77.7 7.194e+01 5.75854 5.7651 0.998856 #> ds 2 parent 14 56.0 5.558e+01 0.42141 4.4885 0.093888 #> ds 2 parent 14 54.7 5.558e+01 -0.87859 4.4885 -0.195742 #> ds 2 parent 28 36.6 3.852e+01 -1.92382 3.1746 -0.605999 #> ds 2 parent 28 36.8 3.852e+01 -1.72382 3.1746 -0.543000 #> ds 2 parent 60 22.1 2.108e+01 1.02043 1.8856 0.541168 #> ds 2 parent 60 24.7 2.108e+01 3.62043 1.8856 1.920034 #> ds 2 parent 90 12.4 1.250e+01 -0.09675 1.3220 -0.073184 #> ds 2 parent 90 10.8 1.250e+01 -1.69675 1.3220 -1.283492 #> ds 2 parent 120 6.8 7.426e+00 -0.62587 1.0554 -0.593027 #> ds 2 parent 120 7.9 7.426e+00 0.47413 1.0554 0.449242 #> ds 2 m1 1 1.3 1.417e+00 -0.11735 0.8835 -0.132825 #> ds 2 m1 3 3.7 3.823e+00 -0.12301 0.9271 -0.132673 #> ds 2 m1 3 4.7 3.823e+00 0.87699 0.9271 0.945909 #> ds 2 m1 7 8.1 7.288e+00 0.81180 1.0494 0.773619 #> ds 2 m1 7 7.9 7.288e+00 0.61180 1.0494 0.583025 #> ds 2 m1 14 10.1 1.057e+01 -0.46957 1.2119 -0.387459 #> ds 2 m1 14 10.3 1.057e+01 -0.26957 1.2119 -0.222432 #> ds 2 m1 28 10.7 1.234e+01 -1.63555 1.3124 -1.246185 #> ds 2 m1 28 12.2 1.234e+01 -0.13555 1.3124 -0.103281 #> ds 2 m1 60 10.7 1.065e+01 0.04641 1.2165 0.038151 #> ds 2 m1 60 12.5 1.065e+01 1.84641 1.2165 1.517773 #> ds 2 m1 90 9.1 8.177e+00 0.92337 1.0896 0.847403 #> ds 2 m1 90 7.4 8.177e+00 -0.77663 1.0896 -0.712734 #> ds 2 m1 120 6.1 5.966e+00 0.13404 0.9956 0.134631 #> ds 2 m1 120 4.5 5.966e+00 -1.46596 0.9956 -1.472460 #> ds 3 parent 0 106.2 1.011e+02 5.10049 8.0554 0.633175 #> ds 3 parent 0 106.9 1.011e+02 5.80049 8.0554 0.720073 #> ds 3 parent 1 107.4 9.365e+01 13.74627 7.4695 1.840332 #> ds 3 parent 1 96.1 9.365e+01 2.44627 7.4695 0.327504 #> ds 3 parent 3 79.4 8.139e+01 -1.99118 6.5059 -0.306058 #> ds 3 parent 3 82.6 8.139e+01 1.20882 6.5059 0.185803 #> ds 3 parent 7 63.9 6.445e+01 -0.54666 5.1792 -0.105549 #> ds 3 parent 7 62.4 6.445e+01 -2.04666 5.1792 -0.395170 #> ds 3 parent 14 51.0 4.830e+01 2.69944 3.9247 0.687800 #> ds 3 parent 14 47.1 4.830e+01 -1.20056 3.9247 -0.305896 #> ds 3 parent 28 36.1 3.426e+01 1.83885 2.8516 0.644839 #> ds 3 parent 28 36.6 3.426e+01 2.33885 2.8516 0.820177 #> ds 3 parent 60 20.1 1.968e+01 0.42208 1.7881 0.236053 #> ds 3 parent 60 19.8 1.968e+01 0.12208 1.7881 0.068273 #> ds 3 parent 90 11.3 1.194e+01 -0.64013 1.2893 -0.496496 #> ds 3 parent 90 10.7 1.194e+01 -1.24013 1.2893 -0.961865 #> ds 3 parent 120 8.2 7.247e+00 0.95264 1.0476 0.909381 #> ds 3 parent 120 7.3 7.247e+00 0.05264 1.0476 0.050254 #> ds 3 m1 0 0.8 -2.956e-12 0.80000 0.8763 0.912928 #> ds 3 m1 1 1.8 1.757e+00 0.04318 0.8873 0.048666 #> ds 3 m1 1 2.3 1.757e+00 0.54318 0.8873 0.612186 #> ds 3 m1 3 4.2 4.566e+00 -0.36607 0.9480 -0.386149 #> ds 3 m1 3 4.1 4.566e+00 -0.46607 0.9480 -0.491634 #> ds 3 m1 7 6.8 8.157e+00 -1.35680 1.0887 -1.246241 #> ds 3 m1 7 10.1 8.157e+00 1.94320 1.0887 1.784855 #> ds 3 m1 14 11.4 1.085e+01 0.55367 1.2272 0.451182 #> ds 3 m1 14 12.8 1.085e+01 1.95367 1.2272 1.592023 #> ds 3 m1 28 11.5 1.149e+01 0.01098 1.2633 0.008689 #> ds 3 m1 28 10.6 1.149e+01 -0.88902 1.2633 -0.703717 #> ds 3 m1 60 7.5 9.295e+00 -1.79500 1.1445 -1.568351 #> ds 3 m1 60 8.6 9.295e+00 -0.69500 1.1445 -0.607245 #> ds 3 m1 90 7.3 7.017e+00 0.28305 1.0377 0.272775 #> ds 3 m1 90 8.1 7.017e+00 1.08305 1.0377 1.043720 #> ds 3 m1 120 5.3 5.087e+00 0.21272 0.9645 0.220547 #> ds 3 m1 120 3.8 5.087e+00 -1.28728 0.9645 -1.334660 #> ds 4 parent 0 104.7 1.011e+02 3.60049 8.0554 0.446965 #> ds 4 parent 0 88.3 1.011e+02 -12.79951 8.0554 -1.588930 #> ds 4 parent 1 94.2 9.755e+01 -3.35176 7.7762 -0.431030 #> ds 4 parent 1 94.6 9.755e+01 -2.95176 7.7762 -0.379591 #> ds 4 parent 3 78.1 9.095e+01 -12.85198 7.2570 -1.770981 #> ds 4 parent 3 96.5 9.095e+01 5.54802 7.2570 0.764508 #> ds 4 parent 7 76.2 7.949e+01 -3.29267 6.3569 -0.517966 #> ds 4 parent 7 77.8 7.949e+01 -1.69267 6.3569 -0.266272 #> ds 4 parent 14 70.8 6.384e+01 6.95621 5.1321 1.355423 #> ds 4 parent 14 67.3 6.384e+01 3.45621 5.1321 0.673445 #> ds 4 parent 28 43.1 4.345e+01 -0.35291 3.5515 -0.099370 #> ds 4 parent 28 45.1 4.345e+01 1.64709 3.5515 0.463771 #> ds 4 parent 60 21.3 2.137e+01 -0.07478 1.9063 -0.039229 #> ds 4 parent 60 23.5 2.137e+01 2.12522 1.9063 1.114813 #> ds 4 parent 90 11.8 1.205e+01 -0.24925 1.2957 -0.192375 #> ds 4 parent 90 12.1 1.205e+01 0.05075 1.2957 0.039168 #> ds 4 parent 120 7.0 6.967e+00 0.03315 1.0356 0.032013 #> ds 4 parent 120 6.2 6.967e+00 -0.76685 1.0356 -0.740510 #> ds 4 m1 0 1.6 1.421e-13 1.60000 0.8763 1.825856 #> ds 4 m1 1 0.9 7.250e-01 0.17503 0.8782 0.199310 #> ds 4 m1 3 3.7 2.038e+00 1.66201 0.8910 1.865236 #> ds 4 m1 3 2.0 2.038e+00 -0.03799 0.8910 -0.042637 #> ds 4 m1 7 3.6 4.186e+00 -0.58623 0.9369 -0.625692 #> ds 4 m1 7 3.8 4.186e+00 -0.38623 0.9369 -0.412230 #> ds 4 m1 14 7.1 6.752e+00 0.34768 1.0266 0.338666 #> ds 4 m1 14 6.6 6.752e+00 -0.15232 1.0266 -0.148372 #> ds 4 m1 28 9.5 9.034e+00 0.46628 1.1313 0.412159 #> ds 4 m1 28 9.3 9.034e+00 0.26628 1.1313 0.235373 #> ds 4 m1 60 8.3 8.634e+00 -0.33359 1.1115 -0.300112 #> ds 4 m1 60 9.0 8.634e+00 0.36641 1.1115 0.329645 #> ds 4 m1 90 6.6 6.671e+00 -0.07091 1.0233 -0.069295 #> ds 4 m1 90 7.7 6.671e+00 1.02909 1.0233 1.005691 #> ds 4 m1 120 3.7 4.823e+00 -1.12301 0.9559 -1.174763 #> ds 4 m1 120 3.5 4.823e+00 -1.32301 0.9559 -1.383979 #> ds 5 parent 0 110.4 1.011e+02 9.30049 8.0554 1.154563 #> ds 5 parent 0 112.1 1.011e+02 11.00049 8.0554 1.365601 #> ds 5 parent 1 93.5 9.440e+01 -0.90098 7.5282 -0.119681 #> ds 5 parent 1 91.0 9.440e+01 -3.40098 7.5282 -0.451764 #> ds 5 parent 3 71.0 8.287e+01 -11.86698 6.6217 -1.792122 #> ds 5 parent 3 89.7 8.287e+01 6.83302 6.6217 1.031907 #> ds 5 parent 7 60.4 6.562e+01 -5.22329 5.2711 -0.990936 #> ds 5 parent 7 59.1 6.562e+01 -6.52329 5.2711 -1.237566 #> ds 5 parent 14 56.5 4.739e+01 9.10588 3.8548 2.362225 #> ds 5 parent 14 47.0 4.739e+01 -0.39412 3.8548 -0.102240 #> ds 5 parent 28 30.2 3.118e+01 -0.98128 2.6206 -0.374451 #> ds 5 parent 28 23.9 3.118e+01 -7.28128 2.6206 -2.778500 #> ds 5 parent 60 17.0 1.804e+01 -1.03959 1.6761 -0.620224 #> ds 5 parent 60 18.7 1.804e+01 0.66041 1.6761 0.394008 #> ds 5 parent 90 11.3 1.165e+01 -0.35248 1.2727 -0.276958 #> ds 5 parent 90 11.9 1.165e+01 0.24752 1.2727 0.194488 #> ds 5 parent 120 9.0 7.556e+00 1.44368 1.0612 1.360449 #> ds 5 parent 120 8.1 7.556e+00 0.54368 1.0612 0.512338 #> ds 5 m1 0 0.7 -1.421e-14 0.70000 0.8763 0.798812 #> ds 5 m1 1 3.0 3.160e+00 -0.15979 0.9113 -0.175340 #> ds 5 m1 1 2.6 3.160e+00 -0.55979 0.9113 -0.614254 #> ds 5 m1 3 5.1 8.448e+00 -3.34789 1.1026 -3.036487 #> ds 5 m1 3 7.5 8.448e+00 -0.94789 1.1026 -0.859720 #> ds 5 m1 7 16.5 1.581e+01 0.68760 1.5286 0.449839 #> ds 5 m1 7 19.0 1.581e+01 3.18760 1.5286 2.085373 #> ds 5 m1 14 22.9 2.218e+01 0.71983 1.9632 0.366658 #> ds 5 m1 14 23.2 2.218e+01 1.01983 1.9632 0.519469 #> ds 5 m1 28 22.2 2.425e+01 -2.05105 2.1113 -0.971479 #> ds 5 m1 28 24.4 2.425e+01 0.14895 2.1113 0.070552 #> ds 5 m1 60 15.5 1.876e+01 -3.25968 1.7250 -1.889646 #> ds 5 m1 60 19.8 1.876e+01 1.04032 1.7250 0.603074 #> ds 5 m1 90 14.9 1.365e+01 1.25477 1.3914 0.901806 #> ds 5 m1 90 14.2 1.365e+01 0.55477 1.3914 0.398714 #> ds 5 m1 120 10.9 9.726e+00 1.17443 1.1667 1.006587 #> ds 5 m1 120 10.4 9.726e+00 0.67443 1.1667 0.578044 # Add a correlation between random effects of g and k2 cov_model_3 <- f_saem_dfop_sfo_2$so@model@covariance.model cov_model_3[\"log_k2\", \"g_qlogis\"] <- 1 cov_model_3[\"g_qlogis\", \"log_k2\"] <- 1 f_saem_dfop_sfo_3 <- update(f_saem_dfop_sfo, covariance.model = cov_model_3) intervals(f_saem_dfop_sfo_3) #> Approximate 95% confidence intervals #> #> Fixed effects: #> lower est. upper #> parent_0 98.42519529 101.51623115 104.60726702 #> k_m1 0.01505059 0.01662123 0.01835577 #> f_parent_to_m1 0.20100222 0.27477835 0.36332008 #> k1 0.07347479 0.10139028 0.13991179 #> k2 0.01469861 0.01771120 0.02134125 #> g 0.35506898 0.46263682 0.57379888 #> #> Random effects: #> lower est. upper #> sd(f_parent_qlogis) 0.3827416 0.4435866 0.5044315 #> sd(log_k1) 0.1226277 0.2981783 0.4737289 #> sd(log_k2) -0.5457764 0.1912531 0.9282825 #> sd(g_qlogis) 0.1483976 0.3997298 0.6510619 #> corr(log_k2,g_qlogis) -0.8537145 -0.5845703 -0.3154261 #> #> #> lower est. upper #> a.1 0.6732869 0.87421677 1.0751467 #> b.1 0.0640392 0.07925135 0.0944635 # The correlation does not improve the fit judged by AIC and BIC, although # the likelihood is higher with the additional parameter anova(f_saem_dfop_sfo, f_saem_dfop_sfo_2, f_saem_dfop_sfo_3) #> Data: 171 observations of 2 variable(s) grouped in 5 datasets #> #> npar AIC BIC Lik #> f_saem_dfop_sfo_2 12 806.91 802.23 -391.46 #> f_saem_dfop_sfo_3 13 807.96 802.88 -390.98 #> f_saem_dfop_sfo 14 810.83 805.36 -391.41 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary_listing.html","id":null,"dir":"Reference","previous_headings":"","what":"Display the output of a summary function according to the output format — summary_listing","title":"Display the output of a summary function according to the output format — summary_listing","text":"function intended use R markdown code chunk chunk option results = \"asis\".","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary_listing.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Display the output of a summary function according to the output format — summary_listing","text":"","code":"summary_listing(object, caption = NULL, label = NULL, clearpage = TRUE) tex_listing(object, caption = NULL, label = NULL, clearpage = TRUE) html_listing(object, caption = NULL)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/summary_listing.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Display the output of a summary function according to the output format — summary_listing","text":"object object summary listed caption optional caption label optional label, ignored html output clearpage new page started listing? Ignored html output","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":null,"dir":"Reference","previous_headings":"","what":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"12 datasets generated using four different models three different variance components. four models either SFO DFOP model either two sequential two parallel metabolites. Variance component '' based normal distribution standard deviation 3, Variance component 'b' also based normal distribution, standard deviation 7. Variance component 'c' based error model Rocke Lorenzato (1995), minimum standard deviation (small y values) 0.5, proportionality constant 0.07 increase standard deviation y. Note simplified version error model proposed Rocke Lorenzato (1995), model error measured values approximates lognormal distribution high values, whereas using normally distributed error components along. Initial concentrations metabolites values adding variance component resulted value assumed limit detection 0.1 set NA. example, first dataset title SFO_lin_a based SFO model two sequential metabolites (linear pathway), added variance component ''. Compare also code example section see degradation models.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"","code":"synthetic_data_for_UBA_2014"},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"list containing twelve datasets R6 class defined mkinds, containing, among others, following components title name dataset, e.g. SFO_lin_a data data frame data form expected mkinfit","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"Ranke (2014) Prüfung und Validierung von Modellierungssoftware als Alternative zu ModelMaker 4.0, Umweltbundesamt Projektnummer 27452 Rocke, David M. und Lorenzato, Stefan (1995) two-component model measurement error analytical chemistry. Technometrics 37(2), 176-184.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Synthetic datasets for one parent compound with two metabolites — synthetic_data_for_UBA_2014","text":"","code":"# \\dontrun{ # The data have been generated using the following kinetic models m_synth_SFO_lin <- mkinmod(parent = list(type = \"SFO\", to = \"M1\"), M1 = list(type = \"SFO\", to = \"M2\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded m_synth_SFO_par <- mkinmod(parent = list(type = \"SFO\", to = c(\"M1\", \"M2\"), sink = FALSE), M1 = list(type = \"SFO\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded m_synth_DFOP_lin <- mkinmod(parent = list(type = \"DFOP\", to = \"M1\"), M1 = list(type = \"SFO\", to = \"M2\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded m_synth_DFOP_par <- mkinmod(parent = list(type = \"DFOP\", to = c(\"M1\", \"M2\"), sink = FALSE), M1 = list(type = \"SFO\"), M2 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded # The model predictions without intentional error were generated as follows sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) d_synth_SFO_lin <- mkinpredict(m_synth_SFO_lin, c(k_parent = 0.7, f_parent_to_M1 = 0.8, k_M1 = 0.3, f_M1_to_M2 = 0.7, k_M2 = 0.02), c(parent = 100, M1 = 0, M2 = 0), sampling_times) d_synth_DFOP_lin <- mkinpredict(m_synth_DFOP_lin, c(k1 = 0.2, k2 = 0.02, g = 0.5, f_parent_to_M1 = 0.5, k_M1 = 0.3, f_M1_to_M2 = 0.7, k_M2 = 0.02), c(parent = 100, M1 = 0, M2 = 0), sampling_times) d_synth_SFO_par <- mkinpredict(m_synth_SFO_par, c(k_parent = 0.2, f_parent_to_M1 = 0.8, k_M1 = 0.01, f_parent_to_M2 = 0.2, k_M2 = 0.02), c(parent = 100, M1 = 0, M2 = 0), sampling_times) d_synth_DFOP_par <- mkinpredict(m_synth_DFOP_par, c(k1 = 0.3, k2 = 0.02, g = 0.7, f_parent_to_M1 = 0.6, k_M1 = 0.04, f_parent_to_M2 = 0.4, k_M2 = 0.01), c(parent = 100, M1 = 0, M2 = 0), sampling_times) # Construct names for datasets with errors d_synth_names = paste0(\"d_synth_\", c(\"SFO_lin\", \"SFO_par\", \"DFOP_lin\", \"DFOP_par\")) # Original function used or adding errors. The add_err function now published # with this package is a slightly generalised version where the names of # secondary compartments that should have an initial value of zero (M1 and M2 # in this case) are not hardcoded any more. # add_err = function(d, sdfunc, LOD = 0.1, reps = 2, seed = 123456789) # { # set.seed(seed) # d_long = mkin_wide_to_long(d, time = \"time\") # d_rep = data.frame(lapply(d_long, rep, each = 2)) # d_rep$value = rnorm(length(d_rep$value), d_rep$value, sdfunc(d_rep$value)) # # d_rep[d_rep$time == 0 & d_rep$name %in% c(\"M1\", \"M2\"), \"value\"] <- 0 # d_NA <- transform(d_rep, value = ifelse(value < LOD, NA, value)) # d_NA$value <- round(d_NA$value, 1) # return(d_NA) # } # The following is the simplified version of the two-component model of Rocke # and Lorenzato (1995) sdfunc_twocomp = function(value, sd_low, rsd_high) { sqrt(sd_low^2 + value^2 * rsd_high^2) } # Add the errors. for (d_synth_name in d_synth_names) { d_synth = get(d_synth_name) assign(paste0(d_synth_name, \"_a\"), add_err(d_synth, function(value) 3)) assign(paste0(d_synth_name, \"_b\"), add_err(d_synth, function(value) 7)) assign(paste0(d_synth_name, \"_c\"), add_err(d_synth, function(value) sdfunc_twocomp(value, 0.5, 0.07))) } d_synth_err_names = c( paste(rep(d_synth_names, each = 3), letters[1:3], sep = \"_\") ) # This is just one example of an evaluation using the kinetic model used for # the generation of the data fit <- mkinfit(m_synth_SFO_lin, synthetic_data_for_UBA_2014[[1]]$data, quiet = TRUE) plot_sep(fit) summary(fit) #> mkin version used for fitting: 1.2.6 #> R version used for fitting: 4.3.2 #> Date of fit: Thu Nov 16 04:20:07 2023 #> Date of summary: Thu Nov 16 04:20:07 2023 #> #> Equations: #> d_parent/dt = - k_parent * parent #> d_M1/dt = + f_parent_to_M1 * k_parent * parent - k_M1 * M1 #> d_M2/dt = + f_M1_to_M2 * k_M1 * M1 - k_M2 * M2 #> #> Model predictions using solution type deSolve #> #> Fitted using 848 model solutions performed in 0.166 s #> #> Error model: Constant variance #> #> Error model algorithm: OLS #> #> Starting values for parameters to be optimised: #> value type #> parent_0 101.3500 state #> k_parent 0.1000 deparm #> k_M1 0.1001 deparm #> k_M2 0.1002 deparm #> f_parent_to_M1 0.5000 deparm #> f_M1_to_M2 0.5000 deparm #> #> Starting values for the transformed parameters actually optimised: #> value lower upper #> parent_0 101.350000 -Inf Inf #> log_k_parent -2.302585 -Inf Inf #> log_k_M1 -2.301586 -Inf Inf #> log_k_M2 -2.300587 -Inf Inf #> f_parent_qlogis 0.000000 -Inf Inf #> f_M1_qlogis 0.000000 -Inf Inf #> #> Fixed parameter values: #> value type #> M1_0 0 state #> M2_0 0 state #> #> Results: #> #> AIC BIC logLik #> 188.7274 200.3723 -87.36368 #> #> Optimised, transformed parameters with symmetric confidence intervals: #> Estimate Std. Error Lower Upper #> parent_0 102.1000 1.57000 98.8600 105.3000 #> log_k_parent -0.3020 0.03885 -0.3812 -0.2229 #> log_k_M1 -1.2070 0.07123 -1.3520 -1.0620 #> log_k_M2 -3.9010 0.06571 -4.0350 -3.7670 #> f_parent_qlogis 1.2010 0.23530 0.7216 1.6800 #> f_M1_qlogis 0.9589 0.24890 0.4520 1.4660 #> sigma 2.2730 0.25740 1.7490 2.7970 #> #> Parameter correlation: #> parent_0 log_k_parent log_k_M1 log_k_M2 f_parent_qlogis #> parent_0 1.000e+00 3.933e-01 -1.605e-01 2.819e-02 -4.624e-01 #> log_k_parent 3.933e-01 1.000e+00 -4.082e-01 7.166e-02 -5.682e-01 #> log_k_M1 -1.605e-01 -4.082e-01 1.000e+00 -3.929e-01 7.478e-01 #> log_k_M2 2.819e-02 7.166e-02 -3.929e-01 1.000e+00 -2.658e-01 #> f_parent_qlogis -4.624e-01 -5.682e-01 7.478e-01 -2.658e-01 1.000e+00 #> f_M1_qlogis 1.614e-01 4.102e-01 -8.109e-01 5.419e-01 -8.605e-01 #> sigma -1.377e-08 7.536e-10 1.089e-08 -4.422e-08 7.124e-09 #> f_M1_qlogis sigma #> parent_0 1.614e-01 -1.377e-08 #> log_k_parent 4.102e-01 7.536e-10 #> log_k_M1 -8.109e-01 1.089e-08 #> log_k_M2 5.419e-01 -4.422e-08 #> f_parent_qlogis -8.605e-01 7.124e-09 #> f_M1_qlogis 1.000e+00 -2.685e-08 #> sigma -2.685e-08 1.000e+00 #> #> 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 102.10000 65.000 7.281e-36 98.86000 105.30000 #> k_parent 0.73930 25.740 2.948e-23 0.68310 0.80020 #> k_M1 0.29920 14.040 1.577e-15 0.25880 0.34590 #> k_M2 0.02023 15.220 1.653e-16 0.01769 0.02312 #> f_parent_to_M1 0.76870 18.370 7.295e-19 0.67300 0.84290 #> f_M1_to_M2 0.72290 14.500 6.418e-16 0.61110 0.81240 #> sigma 2.27300 8.832 2.161e-10 1.74900 2.79700 #> #> FOCUS Chi2 error levels in percent: #> err.min n.optim df #> All data 8.454 6 17 #> parent 8.660 2 6 #> M1 10.583 2 5 #> M2 3.586 2 6 #> #> Resulting formation fractions: #> ff #> parent_M1 0.7687 #> parent_sink 0.2313 #> M1_M2 0.7229 #> M1_sink 0.2771 #> #> Estimated disappearance times: #> DT50 DT90 #> parent 0.9376 3.114 #> M1 2.3170 7.697 #> M2 34.2689 113.839 #> #> Data: #> time variable observed predicted residual #> 0 parent 101.5 1.021e+02 -0.56248 #> 0 parent 101.2 1.021e+02 -0.86248 #> 1 parent 53.9 4.873e+01 5.17118 #> 1 parent 47.5 4.873e+01 -1.22882 #> 3 parent 10.4 1.111e+01 -0.70773 #> 3 parent 7.6 1.111e+01 -3.50773 #> 7 parent 1.1 5.772e-01 0.52283 #> 7 parent 0.3 5.772e-01 -0.27717 #> 14 parent 3.5 3.264e-03 3.49674 #> 28 parent 3.2 1.045e-07 3.20000 #> 90 parent 0.6 9.532e-10 0.60000 #> 120 parent 3.5 -5.940e-10 3.50000 #> 1 M1 36.4 3.479e+01 1.61088 #> 1 M1 37.4 3.479e+01 2.61088 #> 3 M1 34.3 3.937e+01 -5.07027 #> 3 M1 39.8 3.937e+01 0.42973 #> 7 M1 15.1 1.549e+01 -0.38715 #> 7 M1 17.8 1.549e+01 2.31285 #> 14 M1 5.8 1.995e+00 3.80469 #> 14 M1 1.2 1.995e+00 -0.79531 #> 60 M1 0.5 2.111e-06 0.50000 #> 90 M1 3.2 -9.672e-10 3.20000 #> 120 M1 1.5 7.670e-10 1.50000 #> 120 M1 0.6 7.670e-10 0.60000 #> 1 M2 4.8 4.455e+00 0.34517 #> 3 M2 20.9 2.153e+01 -0.62527 #> 3 M2 19.3 2.153e+01 -2.22527 #> 7 M2 42.0 4.192e+01 0.07941 #> 7 M2 43.1 4.192e+01 1.17941 #> 14 M2 49.4 4.557e+01 3.83353 #> 14 M2 44.3 4.557e+01 -1.26647 #> 28 M2 34.6 3.547e+01 -0.87275 #> 28 M2 33.0 3.547e+01 -2.47275 #> 60 M2 18.8 1.858e+01 0.21837 #> 60 M2 17.6 1.858e+01 -0.98163 #> 90 M2 10.6 1.013e+01 0.47130 #> 90 M2 10.8 1.013e+01 0.67130 #> 120 M2 9.8 5.521e+00 4.27893 #> 120 M2 3.3 5.521e+00 -2.22107 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":null,"dir":"Reference","previous_headings":"","what":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"datasets used comparative validation several kinetic evaluation software packages (Ranke, 2014).","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"","code":"test_data_from_UBA_2014"},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"list containing three datasets R6 class defined mkinds. dataset , among others, following components title name dataset, e.g. UBA_2014_WS_river data data frame data form expected mkinfit","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"Ranke (2014) Prüfung und Validierung von Modellierungssoftware als Alternative zu ModelMaker 4.0, Umweltbundesamt Projektnummer 27452","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Three experimental datasets from two water sediment systems and one soil — test_data_from_UBA_2014","text":"","code":"# \\dontrun{ # This is a level P-II evaluation of the dataset according to the FOCUS kinetics # guidance. Due to the strong correlation of the parameter estimates, the # covariance matrix is not returned. Note that level P-II evaluations are # generally considered deprecated due to the frequent occurrence of such # large parameter correlations, among other reasons (e.g. the adequacy of the # model). m_ws <- mkinmod(parent_w = mkinsub(\"SFO\", \"parent_s\"), parent_s = mkinsub(\"SFO\", \"parent_w\")) #> Temporary DLL for differentials generated and loaded f_river <- mkinfit(m_ws, test_data_from_UBA_2014[[1]]$data, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data plot_sep(f_river) summary(f_river)$bpar #> Warning: Could not calculate correlation; no covariance matrix #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_w_0 95.91998118 NA NA NA NA NA #> k_parent_w 0.41145375 NA NA NA NA NA #> k_parent_s 0.04663944 NA NA NA NA NA #> f_parent_w_to_parent_s 0.12467894 NA NA NA NA NA #> f_parent_s_to_parent_w 0.50000000 NA NA NA NA NA #> sigma 3.13612618 NA NA NA NA NA mkinerrmin(f_river) #> err.min n.optim df #> All data 0.1090929 5 6 #> parent_w 0.0817436 3 3 #> parent_s 0.1619965 2 3 # This is the evaluation used for the validation of software packages # in the expertise from 2014 m_soil <- mkinmod(parent = mkinsub(\"SFO\", c(\"M1\", \"M2\")), M1 = mkinsub(\"SFO\", \"M3\"), M2 = mkinsub(\"SFO\", \"M3\"), M3 = mkinsub(\"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded f_soil <- mkinfit(m_soil, test_data_from_UBA_2014[[3]]$data, quiet = TRUE) #> Warning: Observations with value of zero were removed from the data plot_sep(f_soil, lpos = c(\"topright\", \"topright\", \"topright\", \"bottomright\")) summary(f_soil)$bpar #> Estimate se_notrans t value Pr(>t) Lower #> parent_0 76.55425650 0.859186398 89.1008711 1.113861e-26 74.755959420 #> k_parent 0.12081956 0.004601918 26.2541722 1.077359e-16 0.111561575 #> k_M1 0.84258615 0.806159719 1.0451851 1.545266e-01 0.113779564 #> k_M2 0.04210880 0.017083034 2.4649483 1.170188e-02 0.018013857 #> k_M3 0.01122918 0.007245855 1.5497385 6.885051e-02 0.002909431 #> f_parent_to_M1 0.32240200 0.240783878 1.3389684 9.819070e-02 NA #> f_parent_to_M2 0.16099855 0.033691952 4.7785463 6.531136e-05 NA #> f_M1_to_M3 0.27921507 0.269423709 1.0363419 1.565266e-01 0.022978202 #> f_M2_to_M3 0.55641252 0.595119937 0.9349586 1.807707e-01 0.008002509 #> sigma 1.14005399 0.149696423 7.6157731 1.727024e-07 0.826735778 #> Upper #> parent_0 78.35255358 #> k_parent 0.13084582 #> k_M1 6.23970946 #> k_M2 0.09843260 #> k_M3 0.04333992 #> f_parent_to_M1 NA #> f_parent_to_M2 NA #> f_M1_to_M3 0.86450778 #> f_M2_to_M3 0.99489895 #> sigma 1.45337221 mkinerrmin(f_soil) #> err.min n.optim df #> All data 0.09649963 9 20 #> parent 0.04721283 2 6 #> M1 0.26551208 2 5 #> M2 0.20327575 2 5 #> M3 0.05196550 3 4 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":null,"dir":"Reference","previous_headings":"","what":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"transformations intended map parameters take restricted values full scale real numbers. kinetic rate constants parameters can take positive values, simple log transformation used. compositional parameters, formations fractions always sum 1 can negative, ilr transformation used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"","code":"transform_odeparms( parms, mkinmod, transform_rates = TRUE, transform_fractions = TRUE ) backtransform_odeparms( transparms, mkinmod, transform_rates = TRUE, transform_fractions = TRUE )"},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"parms Parameters kinetic models used differential equations. mkinmod kinetic model class mkinmod, containing names model variables needed grouping formation fractions ilr transformation, parameter names information pathway sink included model. transform_rates Boolean specifying kinetic rate constants transformed model specification used fitting better compliance assumption normal distribution estimator. TRUE, also alpha beta parameters FOMC model log-transformed, well k1 k2 rate constants DFOP HS models break point tb HS model. transform_fractions Boolean specifying formation fractions constants transformed model specification used fitting better compliance assumption normal distribution estimator. default (TRUE) transformations. g parameter DFOP model also seen fraction. single fraction transformed (g parameter DFOP single target variable e.g. single metabolite plus pathway sink), logistic transformation used stats::qlogis(). cases, .e. two formation fractions need transformed whose sum exceed one, ilr transformation used. transparms Transformed parameters kinetic models used fitting procedure.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"vector transformed backtransformed parameters","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"transformation sets formation fractions fragile, supposes ordering components forward backward transformation. problem internal use mkinfit.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"Johannes Ranke","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Functions to transform and backtransform kinetic parameters for fitting — transform_odeparms","text":"","code":"SFO_SFO <- mkinmod( parent = list(type = \"SFO\", to = \"m1\", sink = TRUE), m1 = list(type = \"SFO\"), use_of_ff = \"min\") #> Temporary DLL for differentials generated and loaded # Fit the model to the FOCUS example dataset D using defaults FOCUS_D <- subset(FOCUS_2006_D, value != 0) # remove zero values to avoid warning fit <- mkinfit(SFO_SFO, FOCUS_D, quiet = TRUE) fit.s <- summary(fit) # Transformed and backtransformed parameters print(fit.s$par, 3) #> Estimate Std. Error Lower Upper #> parent_0 99.60 1.5702 96.40 102.79 #> log_k_parent_sink -3.04 0.0763 -3.19 -2.88 #> log_k_parent_m1 -2.98 0.0403 -3.06 -2.90 #> log_k_m1_sink -5.25 0.1332 -5.52 -4.98 #> sigma 3.13 0.3585 2.40 3.85 print(fit.s$bpar, 3) #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_0 99.59848 1.57022 63.43 2.30e-36 96.40384 102.7931 #> k_parent_sink 0.04792 0.00365 13.11 6.13e-15 0.04103 0.0560 #> k_parent_m1 0.05078 0.00205 24.80 3.27e-23 0.04678 0.0551 #> k_m1_sink 0.00526 0.00070 7.51 6.16e-09 0.00401 0.0069 #> sigma 3.12550 0.35852 8.72 2.24e-10 2.39609 3.8549 # \\dontrun{ # Compare to the version without transforming rate parameters (does not work # with analytical solution, we get NA values for m1 in predictions) fit.2 <- mkinfit(SFO_SFO, FOCUS_D, transform_rates = FALSE, solution_type = \"deSolve\", quiet = TRUE) fit.2.s <- summary(fit.2) print(fit.2.s$par, 3) #> Estimate Std. Error Lower Upper #> parent_0 99.59848 1.57022 96.40384 1.03e+02 #> k_parent_sink 0.04792 0.00365 0.04049 5.54e-02 #> k_parent_m1 0.05078 0.00205 0.04661 5.49e-02 #> k_m1_sink 0.00526 0.00070 0.00384 6.69e-03 #> sigma 3.12550 0.35852 2.39609 3.85e+00 print(fit.2.s$bpar, 3) #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_0 99.59848 1.57022 63.43 2.30e-36 96.40384 1.03e+02 #> k_parent_sink 0.04792 0.00365 13.11 6.13e-15 0.04049 5.54e-02 #> k_parent_m1 0.05078 0.00205 24.80 3.27e-23 0.04661 5.49e-02 #> k_m1_sink 0.00526 0.00070 7.51 6.16e-09 0.00384 6.69e-03 #> sigma 3.12550 0.35852 8.72 2.24e-10 2.39609 3.85e+00 # } initials <- fit$start$value names(initials) <- rownames(fit$start) transformed <- fit$start_transformed$value names(transformed) <- rownames(fit$start_transformed) transform_odeparms(initials, SFO_SFO) #> parent_0 log_k_parent_sink log_k_parent_m1 log_k_m1_sink #> 100.750000 -2.302585 -2.301586 -2.300587 backtransform_odeparms(transformed, SFO_SFO) #> parent_0 k_parent_sink k_parent_m1 k_m1_sink #> 100.7500 0.1000 0.1001 0.1002 # \\dontrun{ # The case of formation fractions (this is now the default) SFO_SFO.ff <- mkinmod( parent = list(type = \"SFO\", to = \"m1\", sink = TRUE), m1 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded fit.ff <- mkinfit(SFO_SFO.ff, FOCUS_D, quiet = TRUE) fit.ff.s <- summary(fit.ff) print(fit.ff.s$par, 3) #> Estimate Std. Error Lower Upper #> parent_0 99.5985 1.5702 96.404 102.79 #> log_k_parent -2.3157 0.0409 -2.399 -2.23 #> log_k_m1 -5.2475 0.1332 -5.518 -4.98 #> f_parent_qlogis 0.0579 0.0893 -0.124 0.24 #> sigma 3.1255 0.3585 2.396 3.85 print(fit.ff.s$bpar, 3) #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_0 99.59848 1.57022 63.43 2.30e-36 96.40383 102.7931 #> k_parent 0.09870 0.00403 24.47 4.96e-23 0.09082 0.1073 #> k_m1 0.00526 0.00070 7.51 6.16e-09 0.00401 0.0069 #> f_parent_to_m1 0.51448 0.02230 23.07 3.10e-22 0.46912 0.5596 #> sigma 3.12550 0.35852 8.72 2.24e-10 2.39609 3.8549 initials <- c(\"f_parent_to_m1\" = 0.5) transformed <- transform_odeparms(initials, SFO_SFO.ff) backtransform_odeparms(transformed, SFO_SFO.ff) #> f_parent_to_m1 #> 0.5 # And without sink SFO_SFO.ff.2 <- mkinmod( parent = list(type = \"SFO\", to = \"m1\", sink = FALSE), m1 = list(type = \"SFO\"), use_of_ff = \"max\") #> Temporary DLL for differentials generated and loaded fit.ff.2 <- mkinfit(SFO_SFO.ff.2, FOCUS_D, quiet = TRUE) fit.ff.2.s <- summary(fit.ff.2) print(fit.ff.2.s$par, 3) #> Estimate Std. Error Lower Upper #> parent_0 84.79 3.012 78.67 90.91 #> log_k_parent -2.76 0.082 -2.92 -2.59 #> log_k_m1 -4.21 0.123 -4.46 -3.96 #> sigma 8.22 0.943 6.31 10.14 print(fit.ff.2.s$bpar, 3) #> Estimate se_notrans t value Pr(>t) Lower Upper #> parent_0 84.7916 3.01203 28.15 1.92e-25 78.6704 90.913 #> k_parent 0.0635 0.00521 12.19 2.91e-14 0.0538 0.075 #> k_m1 0.0148 0.00182 8.13 8.81e-10 0.0115 0.019 #> sigma 8.2229 0.94323 8.72 1.73e-10 6.3060 10.140 # }"},{"path":"https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html","id":null,"dir":"Reference","previous_headings":"","what":"Update an mkinfit model with different arguments — update.mkinfit","title":"Update an mkinfit model with different arguments — update.mkinfit","text":"function return updated mkinfit object. fitted degradation model parameters old fit used starting values updated fit. Values specified 'parms.ini' /'state.ini' override starting values.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update an mkinfit model with different arguments — update.mkinfit","text":"","code":"# S3 method for mkinfit update(object, ..., evaluate = TRUE)"},{"path":"https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update an mkinfit model with different arguments — update.mkinfit","text":"object mkinfit object updated ... Arguments mkinfit replace arguments original call. Arguments set NULL remove arguments given original call evaluate call evaluated returned call","code":""},{"path":"https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Update an mkinfit model with different arguments — update.mkinfit","text":"","code":"# \\dontrun{ fit <- mkinfit(\"SFO\", subset(FOCUS_2006_D, value != 0), quiet = TRUE) parms(fit) #> parent_0 k_parent sigma #> 99.44423885 0.09793574 3.39632469 plot_err(fit) fit_2 <- update(fit, error_model = \"tc\") parms(fit_2) #> parent_0 k_parent sigma_low rsd_high #> 1.008549e+02 1.005665e-01 3.752222e-03 6.763434e-02 plot_err(fit_2) # }"},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-129","dir":"Changelog","previous_headings":"","what":"mkin 1.2.9","title":"mkin 1.2.9","text":"’R/create_deg_func.R: Make sure reversible reactions specified case two observed variables, supported","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-128-unreleased","dir":"Changelog","previous_headings":"","what":"mkin 1.2.8 (unreleased)","title":"mkin 1.2.8 (unreleased)","text":"‘R/{mhmkin,status}.R’: Deal ‘saem’ fits fail updating ‘mhmkin’ object","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-127-unreleased","dir":"Changelog","previous_headings":"","what":"mkin 1.2.7 (unreleased)","title":"mkin 1.2.7 (unreleased)","text":"‘R/illparms.R’: Fix bug prevented ill-defined random effect found one random effect model. Also add test .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-126-2023-10-14","dir":"Changelog","previous_headings":"","what":"mkin 1.2.6 (2023-10-14)","title":"mkin 1.2.6 (2023-10-14)","text":"‘inst/rmarkdown/templates/hierarchical_kinetics/skeleton/skeleton.Rmd’: Fix erroneous call ‘endpoints()’ function","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-125-2023-08-09","dir":"Changelog","previous_headings":"","what":"mkin 1.2.5 (2023-08-09)","title":"mkin 1.2.5 (2023-08-09)","text":"‘vignettes/mesotrione_parent_2023.rnw’: Prebuilt vignette showing covariate modelling can done relevant parent degradation models. ‘inst/testdata/mesotrione_soil_efsa_2016}.xlsx’: Another example spreadsheets use ‘read_spreadsheet()’, featuring pH dependent degradation R/illparms.R: Fix detection ill-defined slope error model parameters case estimate negative","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-124-2023-05-19","dir":"Changelog","previous_headings":"","what":"mkin 1.2.4 (2023-05-19)","title":"mkin 1.2.4 (2023-05-19)","text":"R/endpoints.R: Fix calculation endpoints user specified covariate values","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-1231-unreleased","dir":"Changelog","previous_headings":"","what":"mkin 1.2.3.1 (unreleased)","title":"mkin 1.2.3.1 (unreleased)","text":"Small fixes get online docs right (example code R/hierarchical_kinetics, cluster setup cyantraniliprole dmta pathway vignettes, graphics model comparison multistart vignette), rebuild online docs","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-123-2023-04-17","dir":"Changelog","previous_headings":"","what":"mkin 1.2.3 (2023-04-17)","title":"mkin 1.2.3 (2023-04-17)","text":"‘R/{endpoints,parms,plot.mixed.mmkin,summary.saem.mmkin}.R’: Calculate parameters endpoints plot population curves specific covariate values, specific percentiles covariate values used saem fits. Depend current deSolve version possibility avoid resolving symbols shared library (compiled models) , thanks Thomas Petzoldt. ‘inst/rmarkdown/templates/hierarchical_kinetics/skeleton/skeleton.Rmd’: Start new cluster creating model stored user specified location, otherwise symbols found worker processes. ‘tests/testthat/test_compiled_symbols.R’: new tests control problems may introduced possibility use pre-resolved symbols. ‘R/mkinerrmin.R’: Fix typo subset (use = instead ==), thanks Sebastian Meyer spotting work R 4.3.0.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-122-unreleased","dir":"Changelog","previous_headings":"","what":"mkin 1.2.2 (unreleased)","title":"mkin 1.2.2 (unreleased)","text":"‘inst/rmarkdown/templates/hierarchical_kinetics’: R markdown template facilitate application hierarchical kinetic models. ‘inst/testdata/{cyantraniliprole_soil_efsa_2014,lambda-cyhalothrin_soil_efsa_2014}.xlsx’: Example spreadsheets use ‘read_spreadsheet()’. ‘R/mhmkin.R’: Allow ‘illparms.mhmkin’ object list suitable dimensions value argument ‘no_random_effects’, making possible exclude random effects ill-defined simpler variants set degradation models. Remove possibility exclude random effects based separate fits, work well. ‘R/summary.saem.mmkin.R’: List initial parameter values summary, including random effects error model parameters. Avoid redundant warnings occurred calculation correlations fixed effects case Fisher information matrix inverted. List correlations random effects specified user covariance model. ‘R/parplot.R’: Possibility select top ‘llquant’ fraction fits parameter plots, improved legend text. ‘R/illparms.R’: Also check confidence intervals slope parameters covariate models include zero. implemented fits obtained saemix backend. ‘R/parplot.R’: Make function work also case multistart runs failed. ‘R/intervals.R’: Include correlations random effects model case .","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-121-2022-11-19","dir":"Changelog","previous_headings":"","what":"mkin 1.2.1 (2022-11-19)","title":"mkin 1.2.1 (2022-11-19)","text":"‘{data,R}/ds_mixed.rda’: Include test data package instead generating ‘tests/testthat/setup_script.R’. Refactor generating code make consistent update tests. ‘tests/testthat/setup_script.R’: Excluded another ill-defined random effect DFOP fit ‘saem’, attempt avoid platform dependence surfaced Fedora systems CRAN check farm ‘tests/testthat/test_mixed.R’: Round parameters found saemix two significant digits printing, also help avoid platform dependence tests ‘R/saem.R’: Fix bug prevented ‘error.ini’ passed ‘saemix_model’, set default c(1, 1) avoid changing test results ‘R/parplot.R’: Show initial values error model parameters ‘R/loglik.mkinfit.R’: Add ‘nobs’ attribute resulting ‘logLik’ object, order make test_AIC.R succeed current R-devel","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-120-2022-11-17","dir":"Changelog","previous_headings":"","what":"mkin 1.2.0 (2022-11-17)","title":"mkin 1.2.0 (2022-11-17)","text":"‘R/saem.R’: ‘logLik’, ‘update’ ‘anova’ methods ‘saem.mmkin’ objects. ‘R/saem.R’: Automatic estimation start parameters random effects case mkin transformations, nicely improving convergence reducing problems iterative ODE solutions. ‘R/status.R’: New generic show status information fit array objects methods ‘mmkin’, ‘mhmkin’ ‘multistart’ objects. ‘R/mhmkin.R’: New method performing multiple hierarchical mkin fits one function call, optionally parallel. ‘R/mhmkin.R’: ‘anova.mhmkin’ conveniently comparing resulting fits. ‘R/illparms.R’: New generic show ill-defined parameters methods ‘mkinfit’, ‘mmkin’, ‘saem.mmkin’ ‘mhmkin’ objects. ‘R/multistart.R’: New method testing multiple start parameters hierarchical model fits, function ‘llhist’ new generic ‘parplot’ diagnostics, new generics ‘.best’ ‘best’ extracting fit highest likelihood ‘R/summary.mmkin.R’: Summary method mmkin objects. ‘R/saem.R’: Implement test saemix transformations FOMC HS. Also, error saemix transformations requested supported. ‘R/read_spreadsheet.R’: Conveniently read data spreadsheet file. ‘R/tex_listings.R’: Conveniently include summaries fit objects R markdown documents compiled LaTeX.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-111-2022-07-12","dir":"Changelog","previous_headings":"","what":"mkin 1.1.1 (2022-07-12)","title":"mkin 1.1.1 (2022-07-12)","text":"’R/{mkinmod,mkinpredict}.R: Store DLL information mkinmod objects use information mkinpredict avoid performance regression brought bugfix R 4.2.x. Thanks Tomas Kalibera analysis problem r-package-devel list suggestion fix . ‘vignettes/FOCUS_L.rmd’: Remove outdated note referring failure calculate covariance matrix DFOP L2 dataset. Since 0.9.45.5 covariance matrix available ‘vignettes/web_only/benchmarks.rmd’: Add first benchmark data using laptop system, therefore add CPU showing benchmark results. ‘dimethenamid_2018’: Update example code use saemix ‘CAKE_export’: Check validity map argument, updates ‘saem()’: Slightly improve speed case analytical solution saemix implemented, activate test respective code ‘mean_degparms’: New argument ‘default_log_parms’ makes possible supply surrogate value (default) log parameters fail t-test ‘plot.mixed.mmkin’: Pass frame argument also residual plots, take ‘default_log_parms’ argument ‘mean_degparms’ used constructing approximate population curves, plot population curve last avoid covered data ‘plot.mkinfit’: Respect argument ‘maxabs’ residual plots, make possible give ylim list, row layouts","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mixed-effects-models-1-1-0","dir":"Changelog","previous_headings":"","what":"Mixed-effects models","title":"mkin 1.1.0 (2022-03-14)","text":"Reintroduce interface saemix version 3.0 (now CRAN), particular generic function ‘saem’ generator ‘saem.mmkin’, currently using ‘saemix_model’ ‘saemix_data’, summary plot methods ‘mean_degparms’: New argument ‘test_log_parms’ makes function consider log-transformed parameters untransformed parameters pass t-test certain confidence level. can used obtain plausible starting parameters different mixed-effects model backends ‘plot.mixed.mmkin’: Gains arguments ‘test_log_parms’ ‘conf.level’ ‘vignettes/web_only/dimethenamid_2018.rmd’: Example evaluations dimethenamid data. ‘intervals’: Provide method nlme function ‘saem.mmkin’ objects.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-105-2021-09-15","dir":"Changelog","previous_headings":"","what":"mkin 1.0.5 (2021-09-15)","title":"mkin 1.0.5 (2021-09-15)","text":"‘dimethenamid_2018’: Correct data Borstel soil. five observations Staudenmaier (2013) previously stored “Borstel 2” actually just subset 16 observations “Borstel 1” now simply “Borstel”","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-104-2021-04-20","dir":"Changelog","previous_headings":"","what":"mkin 1.0.4 (2021-04-20)","title":"mkin 1.0.4 (2021-04-20)","text":"plotting functions setting graphical parameters: Use .exit() resetting graphical parameters ‘plot.mkinfit’: Use xlab xlim residual plot show_residuals TRUE ‘mmkin’: Use cores = 1 per default Windows make easier first time users","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-103-2021-02-15","dir":"Changelog","previous_headings":"","what":"mkin 1.0.3 (2021-02-15)","title":"mkin 1.0.3 (2021-02-15)","text":"Review update README, ‘Introduction mkin’ vignette help pages","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-102-unreleased","dir":"Changelog","previous_headings":"","what":"mkin 1.0.2 (Unreleased)","title":"mkin 1.0.2 (Unreleased)","text":"‘mkinfit’: Keep model names stored ‘mkinmod’ objects, avoiding loss ‘gmkin’","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-101-2021-02-10","dir":"Changelog","previous_headings":"","what":"mkin 1.0.1 (2021-02-10)","title":"mkin 1.0.1 (2021-02-10)","text":"‘confint.mmkin’, ‘nlme.mmkin’, ‘transform_odeparms’: Fix example code dontrun sections failed current defaults ‘logLik.mkinfit’: Improve example code avoid warnings show convenient syntax ‘mkinresplot’: Re-add Katrin Lindenberger coauthor accidentally removed long ago Remove tests relying non-convergence FOMC fit FOCUS dataset platform dependent (revealed new additional tests CRAN, thanks!) Increase test tolerance parameter comparisons also proved platform dependent","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"general-1-0-0","dir":"Changelog","previous_headings":"","what":"General","title":"mkin 1.0.0 (2021-02-03)","text":"‘mkinmod’ models gain arguments ‘name’ ‘dll_dir’ , conjunction current version ‘inline’ package, make possible still use DLL used fast ODE solutions ‘deSolve’ saving restoring ‘mkinmod’ object. ‘mkindsg’ R6 class groups ‘mkinds’ datasets metadata ‘f_norm_temp_focus’ generic function normalise time intervals using FOCUS method, methods numeric vectors ‘mkindsg’ objects ‘D24_2014’ ‘dimethenamid_2018’ datasets ‘focus_soil_moisture’ FOCUS default soil moisture data ‘update’ method ‘mmkin’ objects ‘transform_odeparms’, ‘backtransform_odeparms’: Use logit transformation solitary fractions like g parameter DFOP model, formation fractions pathway one target variable ‘plot.mmkin’: Add ylab argument, making possible customize y axis label panels left without affecting residual plots. Reduce legend size vertical distance panels ‘plot.mkinfit’: Change default ylab “Observed” “Residue”. Pass xlab residual plot show_residuals TRUE.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mixed-effects-models-1-0-0","dir":"Changelog","previous_headings":"","what":"Mixed-effects models","title":"mkin 1.0.0 (2021-02-03)","text":"‘mixed.mmkin’ New container mmkin objects plotting ‘plot.mixed.mmkin’ method ‘plot.mixed.mmkin’ method used ‘nlme.mmkin’ inheriting ‘mixed.mmkin’ (currently virtual) ‘plot’, ‘summary’ ‘print’ methods ‘nlme.mmkin’ objects","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09503-2020-10-08","dir":"Changelog","previous_headings":"","what":"mkin 0.9.50.3 (2020-10-08)","title":"mkin 0.9.50.3 (2020-10-08)","text":"‘parms’: Add method mmkin objects ‘mmkin’ ‘confint(method = ’profile’): Use cores detected parallel::detectCores() per default ‘confint(method = ’profile’): Choose accuracy based ‘rel_tol’ argument, relative bounds obtained quadratic approximation ‘mkinfit’: Make ‘use_of_ff’ = “max” also default models specified using short names like “SFO” “FOMC” ‘mkinfit’: Run ‘stats::shapiro.test()’ standardized residuals warn p < 0.05 ‘mkinfit’: ‘error_model_algorithm’ = ‘d_3’ fail direct fitting fails, reports results threestep algorithm returned ‘mmkin’: fail one fits fails, assign try-error respective position mmkin object ‘mkinfit’: Ignore components state.ini correspond state variables model ‘endpoints’: Back-calculate DT50 value DT90 also biphasic models DFOP, HS SFORB","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09502-2020-05-12","dir":"Changelog","previous_headings":"","what":"mkin 0.9.50.2 (2020-05-12)","title":"mkin 0.9.50.2 (2020-05-12)","text":"Increase tolerance platform specific test results Solaris test machine CRAN Updates corrections (using spelling package) documentation","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09501-2020-05-11","dir":"Changelog","previous_headings":"","what":"mkin 0.9.50.1 (2020-05-11)","title":"mkin 0.9.50.1 (2020-05-11)","text":"Support SFORB formation fractions ‘mkinmod’: Make ‘use_of_ff’ = “max” default Improve performance ) avoiding expensive calls cost function like merge() data.frame(), b) implementing analytical solutions SFO-SFO DFOP-SFO","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-094911-2020-04-20","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.11 (2020-04-20)","title":"mkin 0.9.49.11 (2020-04-20)","text":"Increase test tolerance make pass CRAN check machines","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-094910-2020-04-18","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.10 (2020-04-18)","title":"mkin 0.9.49.10 (2020-04-18)","text":"‘nlme.mmkin’: nlme method mmkin row objects associated S3 class print, plot, anova endpoint methods ‘mean_degparms, nlme_data, nlme_function’: Three new functions facilitate building nlme models mmkin row objects ‘endpoints’: Don’t return SFORB list component ’s empty. reduces distraction complies documentation Article compiled models: Add platform specific code suppress warnings zero values removed FOCUS D dataset ‘plot.mmkin’: Add argument ‘standardized’ avoid warnings occurred passed part additional arguments captured dots (…) ‘summary.mkinfit’: Add AIC, BIC log likelihood summary","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09499-2020-03-31","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.9 (2020-03-31)","title":"mkin 0.9.49.9 (2020-03-31)","text":"‘mkinmod’: Use pkgbuild::has_compiler instead Sys.(‘gcc’), latter often fail even Rtools installed ‘mkinds’: Use roxygen documenting fields methods R6 class","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09498-2020-01-09","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.8 (2020-01-09)","title":"mkin 0.9.49.8 (2020-01-09)","text":"‘aw’: Generic function calculating Akaike weights, methods mkinfit objects mmkin columns ‘loftest’: Add lack--fit test ‘plot_res’, ‘plot_sep’ ‘mkinerrplot’: Add possibility show standardized residuals make default fits error models ‘const’ ‘lrtest.mkinfit’: Improve naming compared fits case fixed parameters ‘confint.mkinfit’: Make quadratic approximation default, likelihood profiling takes lot time, especially fit three parameters","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09497-2019-11-01","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.7 (2019-11-01)","title":"mkin 0.9.49.7 (2019-11-01)","text":"Fix bug introduced 0.9.49.6 occurred direct optimisation yielded higher likelihood three-step optimisation d_3 algorithm, caused fitted parameters three-step optimisation returned instead parameters direct optimisation Add ‘nobs’ method mkinfit objects, enabling default ‘BIC’ method stats package. Also, add ‘BIC’ method mmkin column objects.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09496-2019-10-31","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.6 (2019-10-31)","title":"mkin 0.9.49.6 (2019-10-31)","text":"Implement likelihood ratio test method ‘lrtest’ lmtest package Add ‘update’ method mkinfit objects remembers fitted parameters appropriate Add ‘residuals’ method mkinfit objects supports scaling based error model Fix bug ‘mkinfit’ prevented summaries objects fitted fixed parameters generated Add ‘parms’ ‘confint’ methods mkinfit objects. Confidence intervals based quadratic approximation summary, based profile likelihood Move long-running tests tests/testthat/slow separate test log. currently take around 7 minutes system ‘mkinfit’: Clean code return functions calculate log-likelihood sum squared residuals Vignette ‘twa.html’: Add maximum time weighted average formulas hockey stick model Support frameless plots (‘frame = FALSE’) Support suppress chi2 error level (‘show_errmin = FALSE’) ‘plot.mmkin’ Update README introductory vignette Report ‘OLS’ error_model_algorithm summary case default error_model (‘const’) used Support summarizing ‘mkinfit’ objects generated versions < 0.9.49.5","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09495-2019-07-04","dir":"Changelog","previous_headings":"","what":"mkin 0.9.49.5 (2019-07-04)","title":"mkin 0.9.49.5 (2019-07-04)","text":"Several algorithms minimization negative log-likelihood non-constant error models (two-component variance variable). case error model constant variance, least squares used stable. default algorithm ‘d_3’ tries direct minimization three-step procedure, returns model highest likelihood. argument ‘reweight.method’ mkinfit mmkin now obsolete, use ‘error_model’ ‘error_model_algorithm’ instead Add test checks get best known AIC parent fits 12 test datasets. Add test datasets purpose. New function ‘mkinerrplot’. function also used residual plots ‘plot.mmkin’ argument ‘resplot = “errmod”’ given, ‘plot.mkinfit’ ‘show_errplot’ set TRUE. Remove dependency FME, use nlminb optimisation (‘Port’ algorithm). remember cases one optimisation algorithms preferable, except sometime used Levenberg-Marquardt speed cases expect get trapped local minimum. Use numDeriv package calculate hessians. results slightly different confidence intervals, takes bit longer, apparently robust Add simple benchmark vignette document impact performance. code manual weighting removed. functionality might get added later time. time , please use earlier version, e.g. 0.9.48.1 want manual weighting. fitting time reported summary now includes time used calculation hessians Adapt tests Fix error FOCUS chi2 error level calculations occurred parameters specified parms.ini model. warning already issued, fitting parallel via mmkin go unnoticed. Add example datasets obtained risk assessment reports published European Food Safety Agency.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09481-2019-03-04","dir":"Changelog","previous_headings":"","what":"mkin 0.9.48.1 (2019-03-04)","title":"mkin 0.9.48.1 (2019-03-04)","text":"Add function ‘logLik.mkinfit’ makes possible calculate AIC mkinfit objects Add function ‘AIC.mmkin’ make easy compare columns mmkin objects ‘add_err’: Respect argument giving number replicates synthetic dataset ‘max_twa_parent’: Support maximum time weighted average concentration calculations hockey stick (HS) model ‘mkinpredict’: Make function generic create method mkinfit objects ‘mkinfit’: Improve correctness fitted two component error model fitting mean absolute deviance observation observed values, weighting current two-component error model ‘tests/testthat/test_irls.R’: Test components error model used generate data can reproduced moderate accuracy Add function ‘CAKE_export’ facilitate cross-checking results Implement logistic model (tested parent fits) ‘nafta’: Add evaluations according NAFTA guidance","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09475-2018-09-14","dir":"Changelog","previous_headings":"","what":"mkin 0.9.47.5 (2018-09-14)","title":"mkin 0.9.47.5 (2018-09-14)","text":"Make two-component error model stop cases inadequate avoid nls crashes windows Move two vignettes location built CRAN (avoid NOTES long execution times) Exclude example code testing CRAN avoid NOTES long execution times","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09473","dir":"Changelog","previous_headings":"","what":"mkin 0.9.47.3","title":"mkin 0.9.47.3","text":"‘mkinfit’: Improve fitting error model reweight.method = ‘tc’. Add ‘manual’ possible arguments ‘weight’ Test FOCUS_2006_C can evaluated DFOP reweight.method = ‘tc’","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09472-2018-07-19","dir":"Changelog","previous_headings":"","what":"mkin 0.9.47.2 (2018-07-19)","title":"mkin 0.9.47.2 (2018-07-19)","text":"‘sigma_twocomp’: Rename ‘sigma_rl’ ‘sigma_twocomp’ Rocke Lorenzato model assumes lognormal distribution large y. Correct references Rocke Lorenzato model accordingly. ‘mkinfit’: Use 1.1 starting value N parameter IORE models obtain convergence difficult cases. Show parameter names ‘trace_parms’ ‘TRUE’.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09471-2018-02-06","dir":"Changelog","previous_headings":"","what":"mkin 0.9.47.1 (2018-02-06)","title":"mkin 0.9.47.1 (2018-02-06)","text":"Skip tests CRAN winbuilder avoid timeouts ‘test_data_from_UBA_2014’: Added list datasets containing experimental data used expertise 2014 ‘mkinfit’: Added iterative reweighting method ‘tc’ using two-component error model Rocke Lorenzato. NA values data returned . ‘mkinfit’: Work around bug current FME version prevented convergence message returned case non-convergence. ‘summary.mkinfit’: Improved output regarding weighting method. predictions returned NA values model (see ). ‘summary.mkinfit’: Show versions mkin R used fitting (ones used summary) fit generated mkin >= 0.9.47.1","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09463-2017-11-16","dir":"Changelog","previous_headings":"","what":"mkin 0.9.46.3 (2017-11-16)","title":"mkin 0.9.46.3 (2017-11-16)","text":"README.md, vignettes/mkin.Rmd: URLs updated synthetic_data_for_UBA: Add code used generate data interest reproducibility","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09462-2017-10-10","dir":"Changelog","previous_headings":"","what":"mkin 0.9.46.2 (2017-10-10)","title":"mkin 0.9.46.2 (2017-10-10)","text":"Converted vignette FOCUS_Z tex/pdf markdown/html DESCRIPTION: Add ORCID","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09461-2017-09-14","dir":"Changelog","previous_headings":"","what":"mkin 0.9.46.1 (2017-09-14)","title":"mkin 0.9.46.1 (2017-09-14)","text":"plot.mkinfit: Fix scaling residual plots case separate plots observed variable plot.mkinfit: Use data points fitted curve y axis scaling case separate plots observed variable Documentation updates","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-0946-2017-07-24","dir":"Changelog","previous_headings":"","what":"mkin 0.9.46 (2017-07-24)","title":"mkin 0.9.46 (2017-07-24)","text":"Remove test_FOMC_ill-defined.R platform dependent","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09452-2017-07-24","dir":"Changelog","previous_headings":"","what":"mkin 0.9.45.2 (2017-07-24)","title":"mkin 0.9.45.2 (2017-07-24)","text":"Rename twa max_twa_parent avoid conflict twa pfm package Update URLs documentation Limit test code one core pass windows Switch microbenchmark rbenchmark former supported platforms","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-45-1","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9.45.1 (2016-12-20)","text":"twa function, calculating maximum time weighted average concentrations parent (SFO, FOMC DFOP).","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-45","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9.45 (2016-12-08)","text":"plot.mkinfit plot.mmkin: plotting device tikz, LaTeX markup used chi2 error graphs. Use pkgdown, successor staticdocs generating static HTML documentation. Include example output graphs also dontrun sections. plot.mkinfit: Plotting fail compiled model available, e.g. removed temporary directory. case, uncompiled model now used plotting","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-44","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9.44 (2016-06-29)","text":"test test_FOMC_ill-defined failed several architectures, test now skipped","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-43","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9.43 (2016-06-28)","text":"title changed Kinetic evaluations chemical degradation data plot.mkinfit: Add possibility show fits (residual plots requested) separately observed variables plot.mkinfit: Add possibility show chi2 error levels plot, similar way shown plot.mmkin plot_sep: Add function convenience wrapper plotting observed variables mkinfit objects separately, chi2 error values residual plots. Vignettes: main vignette mkin converted R markdown updated. vignettes also updated show current improved functionality. function add_err added package, making easy generate simulated data using error model based normal distribution","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-43","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9.43 (2016-06-28)","text":"Remove outdated reference inline package compiled_models vignette mkinfit: error cases fit converges, Jacobian untransformed model cost can estimated. Give warning instead return NA t-test results. summary.mkinfit: Give warning message covariance matrix can obtained. test added containing corresponding edge case check warnings correctly issued fit terminate. plot.mmkin: Round chi2 error value three significant digits, instead two decimal digits. mkinfit: Return err values used weighted fits column named err. Also include inverse weights column value observed data used, returned observed data component mkinfit object.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-43","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9.43 (2016-06-28)","text":"endpoints: name substance degrading metabolite (e.g. parent compound) used model formulation ended letter f, rate parameters listed formation fractions mixed names. also appear summary. mkinfit: Check observed variables checking user tried fix formation fractions fitting using ilr transformation. plot.mmkin: Set plot margins correctly, also case single fit plotted, main title placed reasonable way. plot.mkinfit: Correct default values col_obs, pch_obs lty_obs case obs_vars specified.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-42","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9.42 (2016-03-25)","text":"Add argument from_max_mean mkinfit, fitting decline maximum observed value models single observed variable","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-42","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9.42 (2016-03-25)","text":"Add plots compiled_models vignette Give explanatory error message mkinmod fails due missing definition target variable print.mkinmod(): Improve formatting printing mkinmod model definitions","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-41","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-41 (2015-11-09)","text":"Add R6 class mkinds representing datasets printing method Add printing method mkinmod objects Make possible specify arbitrary strings names compounds mkinmod, show plot Use index.r file group help topics static documentation","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-41","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-41 (2015-11-09)","text":"print.summary.mkinfit(): Avoid error occurred printing summaries generated mkin versions 0.9-36","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-40","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-40 (2015-07-21)","text":"endpoints(): DFOP SFORB models, optimize() used, make use fact DT50 must DT50_k1 DT50_k2 (DFOP) DT50_b1 DT50_b2 (SFORB), optimize() sometimes find minimum. Likewise finding DT90 values. Also fit log scale make function efficient.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"internal-changes-0-9-40","dir":"Changelog","previous_headings":"","what":"Internal changes","title":"mkin 0.9-40 (2015-07-21)","text":"DESCRIPTION, NAMESPACE, R/*.R: Import () stats, graphics methods packages, qualify function calls non-base packages installed R avoid NOTES made R CMD check –-cran upcoming R versions.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-39","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9-39 (2015-06-26)","text":"New function mmkin(): function takes character vector model shorthand names, alternatively list mkinmod models, well list dataset main arguments. returns matrix mkinfit objects, row model column dataset. subsetting method single brackets available. Fitting models parallel using parallel package supported. New function plot.mmkin(): Plots single-row single-column mmkin objects including residual plots.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-39","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-39 (2015-06-26)","text":"mkinparplot(): Fix x axis scaling rate constants formation fractions got confused introduction t-values transformed parameters.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-38","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-38 (2015-06-24)","text":"vignettes/compiled_models.html: Show performance improvement factor actually obtained building vignette, well mkin version, system info CPU model used building vignette. GNUMakefile,vignettes/*: Clean vignette generation include table contents HTML vignettes.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-38","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-38 (2015-06-24)","text":"mkinmod(): generating C code derivatives, declare time variable needed remove ‘-W--unused-variable’ compiler flag C compiler used CRAN checks Solaris know .","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-36","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9-36 (2015-06-21)","text":"summary.mkinfit(): one-sided t-test significant difference untransformed parameters zero now always shown, based assumption normal distribution estimators untransformed parameters. Use caution, assumption unrealistic e.g. rate constants nonlinear kinetic models. compiler (gcc) installed, use version differential equation model compiled C code, huge performance boost models deSolve method works. mkinmod(): Create list component $cf (class CFuncList) list returned mkinmod, version can compiled autogenerated C code (see ). mkinfit(): Set default solution_type deSolve compiled version model present, except analytical solution possible.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-36","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-36 (2015-06-21)","text":"Added simple showcase vignette evaluation FOCUS example dataset D","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-35","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9-35 (2015-05-15)","text":"Switch RUnit testthat testing","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-35","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-35 (2015-05-15)","text":"mkinparplot(): Avoid warnings occurred confidence intervals available summary fit print.summary.mkinfit(): Fix printing summary case number iterations available NAMESPACE: export S3 methods plot.mkinfit, summary.mkinfit print.summary.mkinfit satisfy R CMD check R-devel mkinparplot(): Avoid warning R CMD check undeclared global variable Lower","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-35","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-35 (2015-05-15)","text":"mkinfit(): Report successful termination quiet = FALSE. helpful difficult problems fitted reweight.method = obs, progress often indicated reweighting. first test using results established expertise written German Federal Environmental Agency (UBA) added. Add synthetic datasets generated expertise written German Federal Environmental Agency UBA Add tests based datasets","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-34","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-34 (2014-11-22)","text":"Add convenience function mkinsub() creating lists used mkinmod() Add possibility fit indeterminate order rate equation (IORE) models using analytical solution (parent ) numeric solution. Paths IORE compounds metabolites supported using formation fractions (use_of_ff = ‘max’). Note numerical solution (method.ode = ‘deSolve’) IORE differential equations sometimes fails due numerical problems. Switch using Port algorithm (using model/trust region approach) per default. needing iterations Levenberg-Marquardt algorithm previously used per default, less sensitive starting parameters.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-34","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-34 (2014-11-22)","text":"formatting differential equations summary improved Always include 0 y axis plotting fit","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-33","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-33 (2014-10-22)","text":"initial value (state.ini) observed variable highest observed residue set 100 case time zero observation state.ini = \"auto\" basic unit test mkinerrmin() written","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-33","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-33 (2014-10-22)","text":"mkinfit(): internally fitted parameter g named g_ilr even transform_fractions=FALSE mkinfit(): initial value (state.ini) parent compound set parent () variable highest value observed data. mkinerrmin(): checking degrees freedom metabolites, check time zero value fixed instead checking observed value zero. ensures correct calculation degrees freedom also cases metabolite residue time zero greater zero. plot.mkinfit(): Avoid warning message using first component ylim occurred ylim specified explicitly","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-33","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-33 (2014-10-22)","text":"formatting differential equations summary improved wrapping overly long lines FOCUS_Z vignette rebuilt improvement using width 70 avoid output outside grey area print.summary.mkinfit(): Avoid warning occurred gmkin showed summaries initial fits without iterations mkinfit(): Avoid warning occurred summarising fit performed maxitmodFit = 0 done gmkin configuring new fits.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-32","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-32 (2014-07-24)","text":"number degrees freedom difficult define case ilr transformation formation fractions. Now source compartment number ilr parameters (=number optimised parameters) divided number pathways metabolites (=number affected data series) leads fractional degrees freedom cases. default initial value first state value now taken mean observations time zero, available. kinetic model can alternatively specified shorthand name parent degradation models, e.g. SFO, DFOP. Optimisation method, number model evaluations time elapsed optimisation given summary mkinfit objects. maximum number iterations optimisation algorithm can specified using argument maxit.modFit mkinfit function. mkinfit gives warning fit converge (apply SANN method). warning included summary.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-32","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-32 (2014-07-24)","text":"Avoid plotting artificial 0 residual time zero mkinresplot determination degrees freedom mkinerrmin, formation fractions accounted multiple times case parallel formation metabolites. See new feature described solution. transform_rates=FALSE mkinfit now also works FOMC HS models. Initial values formation fractions set cases. warning given fit converge method default Levenberg-Marquardt method Marq used.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-32","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-32 (2014-07-24)","text":"Vignettes rebuilt reflect changes summary method. Algorithm Pseudo excluded needs user-defined parameter limits supported. Algorithm Newton excluded different way specify maximum number iterations appear provide additional benefits.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"bug-fixes-0-9-31","dir":"Changelog","previous_headings":"","what":"Bug fixes","title":"mkin 0.9-31 (2014-07-14)","text":"internal renaming optimised parameters Version 0.9-30 led errors determination degrees freedom chi2 error level calulations mkinerrmin() used summary function.","code":""},{"path":[]},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"new-features-0-9-30","dir":"Changelog","previous_headings":"","what":"New features","title":"mkin 0.9-30 (2014-07-11)","text":"now possible use formation fractions combination turning sink mkinmod().","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"major-changes-0-9-30","dir":"Changelog","previous_headings":"","what":"Major changes","title":"mkin 0.9-30 (2014-07-11)","text":"original transformed parameters now different names (e.g. k_parent log_k_parent. also differ many formation fractions pathway sink. order information blocks print.summary.mkinfit.R() ordered logical way.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"minor-changes-0-9-30","dir":"Changelog","previous_headings":"","what":"Minor changes","title":"mkin 0.9-30 (2014-07-11)","text":"vignette FOCUS_Z simplified use formation fractions turning sink, slightly amended use new versions DT50 values calculated since mkin 0.9-29. vignettes rebuilt reflect changes. ChangeLog renamed NEWS.md entries converted markdown syntax compatible tools::news() function built R. test suite overhauled. Tests DFOP SFORB models dataset FOCUS_2006_A removed, much dependent optimisation algorithm /starting parameters, dataset SFO (compare kinfit vignette). Also, Schaefer complex case can now fitted using formation fractions, ‘Port’ optimisation method also fit A2 way published Piacenza paper. checks introduced mkinfit(), leading warnings stopping execution unsupported combinations methods parameters requested.","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-29-2014-06-27","dir":"Changelog","previous_headings":"","what":"mkin 0.9-29 (2014-06-27)","title":"mkin 0.9-29 (2014-06-27)","text":"R/mkinresplot.R: Make possible specify xlim R/geometric_mean.R, man/geometric_mean.Rd: Add geometric mean function R/endpoints.R, man/endpoints.Rd: Calculate additional (pseudo)-DT50 values FOMC, DFOP, HS SFORB. Avoid calculation formation fractions rate constants directly fitted","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-28-2014-05-20","dir":"Changelog","previous_headings":"","what":"mkin 0.9-28 (2014-05-20)","title":"mkin 0.9-28 (2014-05-20)","text":"backtransform confidence intervals formation fractions one compound formed, parameters define pathways set Add historical remarks background main package vignette Correct ‘isotropic’ ‘isometric’ ilr transformation","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-27-2014-05-10","dir":"Changelog","previous_headings":"","what":"mkin 0.9-27 (2014-05-10)","title":"mkin 0.9-27 (2014-05-10)","text":"Fork GUI separate package gmkin DESCRIPTION, NAMESPACE, TODO: Adapt add copyright information Remove files belonging GUI Possibility fit without parameter transformations, using bounds implemented FME Add McCall 2,4,5-T dataset Enable selection observed variables plotting Add possibility show residual plot plot.mkinfit R/mkinparplot.R, man/mkinparplot.Rd: plot parameters confidence intervals Change vignette format Sweave knitr Split examples vignette FOCUS_L FOCUS_Z Remove warning constant formation fractions mkinmod based misconception Restrict unit test Schaefer data parent primary metabolites formation fraction DT50 A2 highly correlated passing test platform dependent. example, test fails 1 14 platforms CRAN today. Add Eurofins Regulatory AG copyright notices Import FME deSolve instead depending clean startup Add starter function GUI: gmkin() Change format workspace files gmkin can distributed documented package Add gmkin workspace datasets FOCUS_2006_gmkin FOCUS_2006_Z_gmkin","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-24-2013-11-06","dir":"Changelog","previous_headings":"","what":"mkin 0.9-24 (2013-11-06)","title":"mkin 0.9-24 (2013-11-06)","text":"Bugfix re-enabling fixing combination initial values state variables Default values kinetic rate constants 0.1 “salted” small increment avoid numeric artefacts eigenvalue based solutions Backtransform fixed ODE parameters summary","code":""},{"path":"https://pkgdown.jrwb.de/mkin/news/index.html","id":"mkin-09-22-2013-10-26","dir":"Changelog","previous_headings":"","what":"mkin 0.9-22 (2013-10-26)","title":"mkin 0.9-22 (2013-10-26)","text":"Get rid optimisation step mkinerrmin - unnecessary. Thanks KinGUII inspiration - actually equation 6-2 FOCUS kinetics p. 91 overlooked originally Fix plot.mkinfit passed graphical arguments like main solver use plot=TRUE mkinfit() example first successful fits simple GUI Fix iteratively reweighted least squares case many metabolites Unify naming initial values state variables Unify naming dataframes optimised fixed parameters summary Show weighting method residuals summary Correct output data case manual weighting Implement IRLS assuming different variances observed variables use 0 values time zero chi2 error level calculations. way done KinGUII makes sense. impact chi2 error levels output. Generally seem lower metabolites now, presumably mean observed values higher detailed list changes mkin source please consult commit history http://github.com/jranke/mkin","code":""}]
diff --git a/docs/sitemap.xml b/docs/sitemap.xml
index 9a84d4c0..db004a24 100644
--- a/docs/sitemap.xml
+++ b/docs/sitemap.xml
@@ -1,354 +1,117 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/404.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/FOCUS_D.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/index.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/mkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/twa.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/web_only/multistart.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/authors.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/index.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/news/index.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/D24_2014.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/HS.solution.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/add_err.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/aw.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/convergence.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/endpoints.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/get_deg_func.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/illparms.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/ilr.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/index.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/intervals.nlmixr.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/llhist.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/loftest.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/logLik.saem.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mhmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mixed.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinds.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkindsg.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinfit.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinmod.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinplot.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mkinsub.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/multistart.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/nafta.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/nlme.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/nlmixr.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/parms.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/parplot.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/plot.nlme.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/print.mkinds.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/print.mkinmod.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/print.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/reexports.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/saem.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/status.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/summary.nlmixr.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/summary_listing.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/tex_listing.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/tffm0.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html</loc>
- </url>
- <url>
- <loc>https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html</loc>
- </url>
+<urlset xmlns = 'http://www.sitemaps.org/schemas/sitemap/0.9'>
+<url><loc>https://pkgdown.jrwb.de/mkin/404.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/FOCUS_D.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/FOCUS_L.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/index.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/mkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_cyan_pathway.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_parent.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/prebuilt/2022_dmta_pathway.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/prebuilt/2023_mesotrione_parent.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/twa.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/web_only/FOCUS_Z.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/web_only/NAFTA_examples.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/web_only/compiled_models.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/web_only/dimethenamid_2018.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/web_only/multistart.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/articles/web_only/saem_benchmarks.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/authors.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/coverage/coverage.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/index.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/news/index.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/AIC.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/CAKE_export.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/D24_2014.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/DFOP.solution.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/Extract.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_DFOP_ref_A_to_B.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_FOMC_ref_A_to_F.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_HS_ref_A_to_F.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_SFO_ref_A_to_F.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/FOCUS_2006_datasets.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/FOMC.solution.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/HS.solution.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/IORE.solution.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_2015.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/NAFTA_SOP_Attachment.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/SFO.solution.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/SFORB.solution.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/add_err.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/anova.saem.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/aw.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/check_failed.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/confint.mkinfit.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/convergence.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/create_deg_func.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/dimethenamid_2018.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/ds_mixed.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/endpoints.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/experimental_data_for_UBA.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/f_time_norm_focus.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/focus_soil_moisture.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/get_deg_func.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/hierarchical_kinetics.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/illparms.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/ilr.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/index.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/intervals.nlmixr.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/intervals.saem.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/llhist.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/loftest.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/logLik.mkinfit.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/logLik.saem.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/logistic.solution.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/lrtest.mkinfit.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/max_twa_parent.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mccall81_245T.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mean_degparms.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mhmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mixed.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkin_long_to_wide.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkin_wide_to_long.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinds.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkindsg.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinerrmin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinerrplot.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinfit.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinmod.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinparplot.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinplot.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinpredict.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mkinresplot.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/multistart.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/nafta.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/nlme.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/nlme.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/nlmixr.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/nobs.mkinfit.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/parms.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/parplot.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/plot.mixed.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/plot.mkinfit.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/plot.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/plot.nafta.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/plot.nlme.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/read_spreadsheet.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/reexports.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/residuals.mkinfit.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/saem.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/schaefer07_complex_case.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/set_nd_nq.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/sigma_twocomp.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/status.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/summary.mkinfit.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/summary.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/summary.nlme.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/summary.nlmixr.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/summary.saem.mmkin.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/summary_listing.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/synthetic_data_for_UBA_2014.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/test_data_from_UBA_2014.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/tffm0.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/transform_odeparms.html</loc></url>
+<url><loc>https://pkgdown.jrwb.de/mkin/reference/update.mkinfit.html</loc></url>
</urlset>
+

Contact - Imprint