1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/saemix.R
\name{saem}
\alias{saem}
\alias{saem.mmkin}
\alias{print.saem.mmkin}
\alias{saemix_model}
\alias{saemix_data}
\title{Fit nonlinear mixed models with SAEM}
\usage{
saem(object, control, ...)
\method{saem}{mmkin}(
object,
control = list(displayProgress = FALSE, print = FALSE, save = FALSE, save.graphs =
FALSE),
cores = 1,
verbose = FALSE,
suppressPlot = TRUE,
...
)
\method{print}{saem.mmkin}(x, digits = max(3, getOption("digits") - 3), ...)
saemix_model(object, cores = 1, verbose = FALSE, ...)
saemix_data(object, verbose = FALSE, ...)
}
\arguments{
\item{object}{An \link{mmkin} row object containing several fits of the same
\link{mkinmod} model to different datasets}
\item{control}{Passed to \link[saemix:saemix]{saemix::saemix}}
\item{\dots}{Further parameters passed to \link[saemix:saemixData]{saemix::saemixData}
and \link[saemix:saemixModel]{saemix::saemixModel}.}
\item{cores}{The number of cores to be used for multicore processing using
\code{\link[parallel:mclapply]{parallel::mclapply()}}. Using more than 1 core is experimental and may
lead to uncontrolled forking, apparently depending on the BLAS version
used.}
\item{verbose}{Should we print information about created objects?}
\item{suppressPlot}{Should we suppress any plotting that is done
by the saemix function?}
\item{x}{An saem.mmkin object to print}
\item{digits}{Number of digits to use for printing}
}
\value{
An S3 object of class 'saem.mmkin', containing the fitted
\link[saemix:SaemixObject-class]{saemix::SaemixObject} as a list component named 'so'. The
object also inherits from 'mixed.mmkin'.
An \link[saemix:SaemixModel-class]{saemix::SaemixModel} object.
An \link[saemix:SaemixData-class]{saemix::SaemixData} object.
}
\description{
This function uses \code{\link[saemix:saemix]{saemix::saemix()}} as a backend for fitting nonlinear mixed
effects models created from \link{mmkin} row objects using the Stochastic Approximation
Expectation Maximisation algorithm (SAEM).
}
\details{
An mmkin row object is essentially a list of mkinfit objects that have been
obtained by fitting the same model to a list of datasets using \link{mkinfit}.
Starting values for the fixed effects (population mean parameters, argument
psi0 of \code{\link[saemix:saemixModel]{saemix::saemixModel()}} are the mean values of the parameters found
using \link{mmkin}.
}
\examples{
\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, cores = 1,
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", ])
# The returned saem.mmkin object contains an SaemixObject, therefore we can use
# functions from saemix
library(saemix)
compare.saemix(list(f_saem_sfo$so, f_saem_fomc$so, f_saem_dfop$so))
plot(f_saem_fomc$so, plot.type = "convergence")
plot(f_saem_fomc$so, plot.type = "individual.fit")
plot(f_saem_fomc$so, plot.type = "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", ])
compare.saemix(list(f_saem_fomc$so, f_saem_fomc_tc$so))
sfo_sfo <- mkinmod(parent = mkinsub("SFO", "A1"),
A1 = mkinsub("SFO"))
fomc_sfo <- mkinmod(parent = mkinsub("FOMC", "A1"),
A1 = mkinsub("SFO"))
dfop_sfo <- mkinmod(parent = mkinsub("DFOP", "A1"),
A1 = mkinsub("SFO"))
# The following fit uses analytical solutions for SFO-SFO and DFOP-SFO,
# and compiled ODEs for FOMC, both are fast
f_mmkin <- mmkin(list(
"SFO-SFO" = sfo_sfo, "FOMC-SFO" = fomc_sfo, "DFOP-SFO" = dfop_sfo),
ds, quiet = TRUE)
# These 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)
plot(f_saem_dfop_sfo)
summary(f_saem_dfop_sfo, data = FALSE)
# Using a single core, the following takes about 6 minutes as we do not have an
# analytical solution. Using 10 cores it is slower instead of faster
#f_saem_fomc <- saem(f_mmkin["FOMC-SFO", ], cores = 1)
}
}
\seealso{
\link{summary.saem.mmkin} \link{plot.mixed.mmkin}
}
|