From 6476f5f49b373cd4cf05f2e73389df83e437d597 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Thu, 13 Feb 2025 16:30:31 +0100 Subject: Axis legend formatting, update vignettes --- docs/articles/prebuilt/2022_dmta_pathway.html | 1052 ++++++++++++++++--------- 1 file changed, 675 insertions(+), 377 deletions(-) (limited to 'docs/articles/prebuilt/2022_dmta_pathway.html') diff --git a/docs/articles/prebuilt/2022_dmta_pathway.html b/docs/articles/prebuilt/2022_dmta_pathway.html index 9a0e181d..c9f87cd8 100644 --- a/docs/articles/prebuilt/2022_dmta_pathway.html +++ b/docs/articles/prebuilt/2022_dmta_pathway.html @@ -1,114 +1,396 @@ - + + + - - - - - -Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P • mkin - - - - - - - + + + + + + + + + +Testing hierarchical pathway kinetics with residue data on dimethenamid and dimethenamid-P + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Skip to contents - - -
+
-
-
- - -
-

Introduction -

+ + +
+true +
+ +
+

Introduction

The purpose of this document is to test demonstrate how nonlinear hierarchical models (NLHM) based on the parent degradation models SFO, FOMC, DFOP and HS, with parallel formation of two or more metabolites @@ -117,7 +399,7 @@ can be fitted with the mkin package.

173340 (Application of nonlinear hierarchical models to the kinetic evaluation of chemical degradation data) of the German Environment Agency carried out in 2022 and 2023.

-

The mkin package is used in version 1.2.6, which is currently under +

The mkin package is used in version 1.2.9, which is currently under development. It contains the test data, and the functions used in the evaluations. The saemix package is used as a backend for fitting the NLHM, but is also loaded to make the convergence plot @@ -126,28 +408,26 @@ function available.

also provides the kable function that is used to improve the display of tabular data in R markdown documents. For parallel processing, the parallel package is used.

-
-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)
-}
+
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)
+}
-
-

Data -

+
+

Data

The test data are available in the mkin package as an object of class mkindsg (mkin dataset group) under the identifier dimethenamid_2018. The following preprocessing steps are @@ -168,41 +448,41 @@ and Elliot 2) are combined, resulting in dimethenamid (DMTA) data from six soils.

The following commented R code performs this preprocessing.

-
-# 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
+
# 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

The following tables show the 6 datasets.

-
-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")
-}
- +
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")
+}
+
- + + - + + @@ -255,15 +535,17 @@ and Elliot 2) are combined, resulting in dimethenamid
Dataset Calke
time DMTA M23 M27 M31
0
- +
- + + - + + @@ -379,15 +661,17 @@ and Elliot 2) are combined, resulting in dimethenamid
Dataset Borstel
time DMTA M23 M27 M31
0.000000
- +
- + + - + + @@ -643,15 +927,17 @@ and Elliot 2) are combined, resulting in dimethenamid
Dataset Flaach
time DMTA M23 M27 M31
0.0000000
- +
- + + - + + @@ -823,15 +1109,17 @@ and Elliot 2) are combined, resulting in dimethenamid
Dataset BBA 2.2
time DMTA M23 M27 M31
0.0000000
- +
- + + - + + @@ -1003,15 +1291,17 @@ and Elliot 2) are combined, resulting in dimethenamid
Dataset BBA 2.3
time DMTA M23 M27 M31
0.0000000
- +
- + + - + + @@ -1352,9 +1642,8 @@ and Elliot 2) are combined, resulting in dimethenamid
Dataset Elliot
time DMTA M23 M27 M31
0.000000
-
-

Separate evaluations -

+
+

Separate evaluations

As a first step to obtain suitable starting parameters for the NLHM fits, we do separate fits of several variants of the pathway model used previously (Ranke et al. 2021), varying @@ -1362,71 +1651,71 @@ the kinetic model for the parent compound. Because the SFORB model often provides faster convergence than the DFOP model, and can sometimes be fitted where the DFOP model results in errors, it is included in the set of parent models tested here.

-
-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()
- - +
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()
+
+ + @@ -1434,7 +1723,8 @@ of parent models tested here.

- + + @@ -1487,11 +1777,11 @@ of parent models tested here.

constant variance converged (status OK). Most fits with DFOP or SFORB for the parent converged as well. The fits with HS for the parent did not converge with default settings.

-
-sep_1_tc <- update(sep_1_const, error_model = "tc")
-status(sep_1_tc) |> kable()
-
Calke Borstel BBA 2.2 BBA 2.3 Elliot
sfo_path_1
- +
sep_1_tc <- update(sep_1_const, error_model = "tc")
+status(sep_1_tc) |> kable()
+
+ + @@ -1499,7 +1789,8 @@ not converge with default settings.

- + + @@ -1554,25 +1845,24 @@ different data sets when applying the DFOP and SFORB model and some additional convergence problems when using the FOMC model for the parent.

-
-

Hierarchichal model fits -

+
+

Hierarchichal model fits

The following code fits two sets of the corresponding hierarchical models to the data, one assuming constant variance, and one assuming two-component error.

-
-saem_1 <- mhmkin(list(sep_1_const, sep_1_tc))
+
saem_1 <- mhmkin(list(sep_1_const, sep_1_tc))

The run time for these fits was around two hours on five year old hardware. After a recent hardware upgrade these fits complete in less than twenty minutes.

-
-status(saem_1) |> kable()
-
Calke Borstel BBA 2.2 BBA 2.3 Elliot
sfo_path_1
- +
status(saem_1) |> kable()
+
+ + - + + @@ -1603,16 +1893,17 @@ than twenty minutes.

const tc
sfo_path_1

According to the status function, all fits terminated successfully.

-
-anova(saem_1) |> kable(digits = 1)
- - +
anova(saem_1) |> kable(digits = 1)
+
+ + - + + @@ -1699,22 +1990,22 @@ assume a discontinuity, so the SFORB model is preferable from a mechanistic viewpoint. In addition, the information criteria AIC and BIC are very similar for HS and SFORB. Therefore, the SFORB model is selected here for further refinements.

-
-

Parameter identifiability based on the Fisher Information -Matrix -

+
+

Parameter identifiability based on the Fisher Information +Matrix

Using the illparms function, ill-defined statistical model parameters such as standard deviations of the degradation parameters in the population and error model parameters can be found.

-
-illparms(saem_1) |> kable()
-
npar AIC BIC Lik
sfo_path_1 const
- +
illparms(saem_1) |> kable()
+
+ + - + + @@ -1753,22 +2044,22 @@ two-component error, the random effect for the rate constant from reversibly bound DMTA to the free DMTA (k_DMTA_bound_free) is not well-defined. Therefore, the fit is updated without assuming a random effect for this parameter.

-
-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)
+
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)

As expected, no ill-defined parameters remain. The model comparison below shows that the reduced model is preferable.

-
-anova(saem_1[["sforb_path_1", "tc"]], saem_sforb_path_1_tc_reduced) |> kable(digits = 1)
-
const tc
sfo_path_1
- +
anova(saem_1[["sforb_path_1", "tc"]], saem_sforb_path_1_tc_reduced) |> kable(digits = 1)
+
+ + - + + @@ -1787,9 +2078,8 @@ below shows that the reduced model is preferable.

npar AIC BIC Lik
saem_sforb_path_1_tc_reduced

The convergence plot of the refined fit is shown below.

-
-plot(saem_sforb_path_1_tc_reduced$so, plot.type = "convergence")
-

+
plot(saem_sforb_path_1_tc_reduced$so, plot.type = "convergence")
+

For some parameters, for example for f_DMTA_ilr_1 and f_DMTA_ilr_2, i.e. for two of the parameters determining the formation fractions of the parallel formation of the three @@ -1801,16 +2091,15 @@ the parameter estimates very much, and it is proposed that the fit is acceptable. No numeric convergence criterion is implemented in saemix.

-
-

Alternative check of parameter identifiability -

+
+

Alternative check of parameter identifiability

As an alternative check of parameter identifiability (Duchesne et al. 2021), multistart runs were performed on the basis of the refined fit shown above.

-
-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)
+
saem_sforb_path_1_tc_reduced_multi <- multistart(saem_sforb_path_1_tc_reduced,
+  n = 32, cores = 10)
+
 
+  (subscript) logical subscript too long
+
print(saem_sforb_path_1_tc_reduced_multi)
<multistart> object with 32 fits:
  E OK 
  7 25 
@@ -1823,11 +2112,11 @@ the SAEM algorithm leads to parameter combinations for the degradation
 model that the numerical integration routine cannot cope with. Because
 of this variation of initial parameters, some of the model fits take up
 to two times more time than the original fit.

-
-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)
+
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)
-Parameter boxplots for the multistart runs that succeeded

+Parameter boxplots for the multistart runs that succeeded +

Parameter boxplots for the multistart runs that succeeded

@@ -1837,109 +2126,98 @@ independent of the starting parameters, and there are no remaining ill-defined parameters.

-
-

Plots of selected fits -

+
+

Plots of selected fits

The SFORB pathway fits with full and reduced parameter distribution model are shown below.

-
-plot(saem_1[["sforb_path_1", "tc"]])
+
plot(saem_1[["sforb_path_1", "tc"]])
-SFORB pathway fit with two-component error

+SFORB pathway fit with two-component error +

SFORB pathway fit with two-component error

-
-plot(saem_sforb_path_1_tc_reduced)
+
plot(saem_sforb_path_1_tc_reduced)
-SFORB pathway fit with two-component error, reduced parameter model

+SFORB pathway fit with two-component error, reduced parameter model +

SFORB pathway fit with two-component error, reduced parameter model

Plots of the remaining fits and listings for all successful fits are shown in the Appendix.

- +
stopCluster(cl)
-
-

Conclusions -

+
+

Conclusions

Pathway fits with SFO, FOMC, DFOP, SFORB and HS models for the parent compound could be successfully performed.

-
-

Acknowledgements -

+
+

Acknowledgements

The helpful comments by Janina Wöltjen of the German Environment Agency on earlier versions of this document are gratefully acknowledged.

-
-

References -

+
+

References

Duchesne, Ronan, Anissa Guillemin, Olivier Gandrillon, and Fabien Crauste. 2021. “Practical Identifiability in the Frame of Nonlinear Mixed Effects Models: The Example of the in Vitro -Erythropoiesis.” BMC Bioinformatics 22 (478). https://doi.org/10.1186/s12859-021-04373-4. +Erythropoiesis.” BMC Bioinformatics 22 (478). https://doi.org/10.1186/s12859-021-04373-4.
Ranke, Johannes, Janina Wöltjen, Jana Schmidt, and Emmanuelle Comets. 2021. “Taking Kinetic Evaluations of Degradation Data to the Next Level with Nonlinear Mixed-Effects Models.” Environments -8 (8). https://doi.org/10.3390/environments8080071. +8 (8). https://doi.org/10.3390/environments8080071.
-
-

Appendix -

-
-

Plots of hierarchical fits not selected for refinement -

-
-plot(saem_1[["sfo_path_1", "tc"]])
+
+

Appendix

+
+

Plots of hierarchical fits not selected for refinement

+
plot(saem_1[["sfo_path_1", "tc"]])
-SFO pathway fit with two-component error

+SFO pathway fit with two-component error +

SFO pathway fit with two-component error

-
-plot(saem_1[["fomc_path_1", "tc"]])
+
plot(saem_1[["fomc_path_1", "tc"]])
-FOMC pathway fit with two-component error

+FOMC pathway fit with two-component error +

FOMC pathway fit with two-component error

-
-plot(saem_1[["sforb_path_1", "tc"]])
+
plot(saem_1[["sforb_path_1", "tc"]])
-HS pathway fit with two-component error

+HS pathway fit with two-component error +

HS pathway fit with two-component error

-
-

Hierarchical model fit listings -

-
-

Fits with random effects for all degradation parameters -

+
+

Hierarchical model fit listings

+
+

Fits with random effects for all degradation parameters

-
-

Improved fit of the SFORB pathway model with two-component -error -

+
+

Improved fit of the SFORB pathway model with two-component +error

-
-

Session info -

-
R version 4.3.2 (2023-10-31)
-Platform: x86_64-pc-linux-gnu (64-bit)
+
+

Session info

+
R version 4.4.2 (2024-10-31)
+Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 12 (bookworm)
 
 Matrix products: default
@@ -1962,55 +2240,75 @@ attached base packages:
 [8] base     
 
 other attached packages:
-[1] saemix_3.2 npde_3.3   knitr_1.42 mkin_1.2.6
+[1] saemix_3.3      npde_3.5        knitr_1.49      mkin_1.2.9     
+[5] rmarkdown_2.29  nvimcom_0.9-167
 
 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
+ [1] sass_0.4.9 utf8_1.2.4 generics_0.1.3 lattice_0.22-6 + [5] digest_0.6.37 magrittr_2.0.3 evaluate_1.0.1 grid_4.4.2 + [9] fastmap_1.2.0 jsonlite_1.8.9 processx_3.8.4 pkgbuild_1.4.5 +[13] deSolve_1.40 mclust_6.1.1 ps_1.8.1 gridExtra_2.3 +[17] fansi_1.0.6 scales_1.3.0 codetools_0.2-20 jquerylib_0.1.4 +[21] cli_3.6.3 rlang_1.1.4 munsell_0.5.1 cachem_1.1.0 +[25] yaml_2.3.10 tools_4.4.2 inline_0.3.20 colorout_1.3-2 +[29] dplyr_1.1.4 colorspace_2.1-1 ggplot2_3.5.1 vctrs_0.6.5 +[33] R6_2.5.1 zoo_1.8-12 lifecycle_1.0.4 MASS_7.3-61 +[37] pkgconfig_2.0.3 callr_3.7.6 pillar_1.9.0 bslib_0.8.0 +[41] gtable_0.3.6 glue_1.8.0 xfun_0.49 tibble_3.2.1 +[45] lmtest_0.9-40 tidyselect_1.2.1 htmltools_0.5.8.1 nlme_3.1-166 +[49] compiler_4.4.2
-
-

Hardware info -

+
+

Hardware info

CPU model: AMD Ryzen 9 7950X 16-Core Processor
-
MemTotal:       64927712 kB
-
+
MemTotal:       64927788 kB
-
-
- -
-
+ + + + + + + - - + + - + -- cgit v1.2.1