Description Usage Arguments Details Value Note Author(s) See Also Examples
ODEsobol.ODEnetwork performs the variance-based Sobol' sensitivity
analysis for objects of class ODEnetwork. Package
ODEnetwork is required for this function to work.
1 2 3 4 5 |
mod |
[ |
pars |
[ |
times |
[ |
n |
[ |
rfuncs |
[ |
rargs |
[ |
sobol_method |
[ |
ode_method |
[ |
parallel_eval |
[ |
parallel_eval_ncores |
[ |
... |
further arguments passed to or from other methods. |
If the object of class ODEnetwork supplied for mod doesn't
include any events, the solution of the ODE network is determined
analytically using simuNetwork. In the presence
of events, simuNetwork uses
ode to solve the ODE network numerically.
The sensitivity analysis is done for all state variables and all
timepoints simultaneously. If sobol_method = "Jansen",
soboljansen from the package sensitivity
is used to estimate the Sobol' sensitivity indices and if
sobol_method = "Martinez", sobolmartinez
is used (also from the package sensitivity).
List of length 2 * nrow(mod$state) and of class
ODEsobol containing in each element a list of the Sobol' sensitivity
analysis results for the corresponding state variable (i.e. first order
sensitivity indices S and total sensitivity indices T) for
every point of time in the times vector. This list has an extra
attribute "sobol_method" where the value of argument
sobol_method is stored (either "Jansen" or
"Martinez").
In situations where the solution of the ODE model has to be determined
numerically, it might be helpful to try a different type of ODE-solver
(argument ode_method) if the simulation of the model takes too long.
The ode_methods "vode", "bdf", "bdf_d",
"adams", "impAdams" and "impAdams_d"
might be faster than the standard ode_method "lsoda".
If n is too low, the Monte Carlo estimation of the sensitivity
indices might be very bad and even produce first order indices < 0 or
total indices > 1. First order indices in the interval [-0.05, 0) and total
indices in (1, 1.05] are considered as minor deviations and set to 0
resp. 1 without a warning. First order indices < -0.05 or total indices
> 1.05 are considered as major deviations. They remain unchanged and a
warning is thrown. Up to now, first order indices > 1 or total indices < 0
haven't occured yet. If this should be the case, please contact the package
author.
Frank Weber
soboljansen,
sobolmartinez,
plot.ODEsobol
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 | ##### A network of 4 mechanical oscillators connected in a circle #####
# Definition of the network using the package "ODEnetwork":
M_mat <- rep(2, 4)
K_mat <- diag(rep(2 * (2*pi*0.17)^2, 4))
K_mat[1, 2] <- K_mat[2, 3] <-
K_mat[3, 4] <- K_mat[1, 4] <- 2 * (2*pi*0.17)^2 / 10
D_mat <- diag(rep(0.05, 4))
library("ODEnetwork")
lfonet <- ODEnetwork(masses = M_mat, dampers = D_mat, springs = K_mat)
# The parameters to be included in the sensitivity analysis and their lower
# and upper boundaries:
LFOpars <- c("k.1", "k.2", "k.3", "k.4",
"d.1", "d.2", "d.3", "d.4")
LFObinf <- c(rep(0.2, 4), rep(0.01, 4))
LFObsup <- c(rep(20, 4), rep(0.1, 4))
# Setting of the initial values of the state variables:
lfonet <- setState(lfonet, state1 = rep(2, 4), state2 = rep(0, 4))
# The timepoints of interest:
LFOtimes <- seq(25, 150, by = 2.5)
# Sobol' sensitivity analysis (here only with n = 500, but n = 1000 is
# recommended):
set.seed(1739)
# Warning: The following code might take very long! There are warnings
# occurring which might be due to "n" being too low.
suppressWarnings(
LFOres_sobol <- ODEsobol(mod = lfonet,
pars = LFOpars,
times = LFOtimes,
n = 500,
rfuncs = "runif",
rargs = paste0("min = ", LFObinf,
", max = ", LFObsup),
sobol_method = "Martinez",
parallel_eval = TRUE,
parallel_eval_ncores = 2)
)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.