Last data update: 2014.03.03
R: Running the BayesFit optimisation
runBayesFit R Documentation
Running the BayesFit optimisation
Description
"runBayesFit" defines the prior function and runs the BayesFit estimation
Usage
runBayesFit(opts)
Arguments
opts
list with entries as explained below.
Options set – defines the problem and sets some
parameters to control the MCMC algorithm.
model: List of model parameters - to estimate.
The parameter objects must each have a
'value' attribute containing the parameter's numerical value.
estimate_params: list.
List of parameters to estimate, all of which must also be listed
in 'options$model$parameters'.
initial_values: list of float, optional.
Starting values for parameters to estimate. If omitted, will use
the nominal values from 'options$model$parameters'
step_fn: callable f(output), optional.
User callback, called on every MCMC iteration.
likelihood_fn: callable f(output, position).
User likelihood function.
prior_fn: callable f(output, position), optional.
User prior function. If omitted, a flat prior will be used.
nsteps: int.
Number of MCMC iterations to perform.
use_hessian: logical, optional.
Wheter to use the Hessian to guide the walk. Defaults to FALSE.
rtol: float or list of float, optional.
Relative tolerance for ode solver.
atol: float or list of float, optional.
Absolute tolerance for ode solver.
norm_step_size: float, optional.
MCMC step size. Defaults to a reasonable value.
hessian_period: int, optional.
Number of MCMC steps between Hessian recalculations. Defaults
to a reasonable but fairly large value, as Hessian calculation is expensive.
hessian_scale: float, optional.
Scaling factor used in generating Hessian-guided steps. Defaults to a
reasonable value.
sigma_adj_interval: int, optional.
How often to adjust 'output$sig_value' while annealing to meet
'accept_rate_target'. Defaults to a reasonable value.
anneal_length: int, optional.
Length of initial "burn-in" annealing period. Defaults to 10
'nsteps', or if 'use_hessian' is TRUE, to 'hessian_period' (i.e.
anneal until first hessian is calculated)
T_init: float, optional.
Initial temperature for annealing. Defaults to a resonable value.
accept_rate_target: float, optional.
Desired acceptance rate during annealing. Defaults to a reasonable value.
See also 'sigma_adj_interval' above.
sigma_max: float, optional.
Maximum value for 'output$sig_value'. Defaults to a resonable value.
sigma_min: float, optional.
Minimum value for 'output$sig_value'. Defaults to a resonable value.
sigma_step: float, optional.
Increment for 'output$sig_value' adjustments. Defaults to a resonable
value. To eliminate adaptive step size, set sigma_step to 1.
thermo_temp: float in the range [0,1], optional.
Temperature for thermodynamic integration support. Used to scale
likelihood when calculating the posterior value. Defaults to 1,
i.e. no effect.
Value
The output after the optimisation is finished - a list with entries as explained in 'Arguments'.
Examples
data("simpleExample", package="MEIGOR")
initial_pars = createLBodeContPars(model, LB_n=1, LB_k=0.1, LB_tau=0.01, UB_n=5, UB_k=0.9, UB_tau=10, random=TRUE)
simData = plotLBodeFitness(cnolist, model, initial_pars, reltol=1e-05, atol=1e-03, maxStepSize=0.01)
f_bayesFit <- function(position, params=initial_pars, exp_var=opts$exp_var) {
# convert from log
params$parValues = 10^position
ysim = getLBodeDataSim(cnolist=cnolist, model=model,
ode_parameters=params)
data_as_vec = unlist(cnolist$valueSignals)
sim_as_vec = unlist(ysim)
# set nan (NAs) to 0
sim_as_vec[is.na(sim_as_vec)] = 0
sim_as_vec[is.nan(sim_as_vec)]= 0
return(sum((data_as_vec-sim_as_vec)^2/(2*exp_var^2)))
}
prior_mean = log10(initial_pars$parValues)
prior_var = 10
opts <- list("model"=NULL, "estimate_params"=NULL,"initial_values"=NULL,
"tspan"=NULL, "step_fn"=NULL, "likelihood_fn"=NULL,
"prior_fn"=NULL, "nsteps"=NULL, "use_hessian"=FALSE,
"rtol"=NULL, "atol"=NULL, "norm_step_size"=0.75,
"hessian_period"=25000, "hessian_scale"=0.085,
"sigma_adj_interval"=NULL, "anneal_length"=NULL,
"T_init"=10, "accept_rate_target"=0.3, "sigma_max"=1,
"sigma_min"=0.25, "sigma_step"=0.125, "thermo_temp"=1, "seed"=NULL)
opts$nsteps = 2000
opts$likelihood_fn = f_bayesFit
opts$use_hessian = TRUE
opts$hessian_period = opts$nsteps/10
opts$model = list(parameters=list(name=initial_pars$parNames,
value=initial_pars$parValues))
opts$estimate_params = initial_pars$parValues
opts$exp_var = 0.01
res = runBayesFit(opts)
initial_pars$parValues = cur_params(output=res, options=opts)
Results
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(MEIGOR)
Loading required package: Rsolnp
Loading required package: snowfall
Loading required package: snow
Loading required package: CNORode
Loading required package: CellNOptR
Loading required package: RBGL
Loading required package: graph
Loading required package: BiocGenerics
Loading required package: parallel
Attaching package: 'parallel'
The following objects are masked from 'package:snow':
clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
clusterExport, clusterMap, clusterSplit, makeCluster, parApply,
parCapply, parLapply, parRapply, parSapply, splitIndices,
stopCluster
Attaching package: 'BiocGenerics'
The following objects are masked from 'package:parallel':
clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
clusterExport, clusterMap, parApply, parCapply, parLapply,
parLapplyLB, parRapply, parSapply, parSapplyLB
The following objects are masked from 'package:snow':
clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
clusterExport, clusterMap, parApply, parCapply, parLapply,
parRapply, parSapply
The following objects are masked from 'package:stats':
IQR, mad, xtabs
The following objects are masked from 'package:base':
Filter, Find, Map, Position, Reduce, anyDuplicated, append,
as.data.frame, cbind, colnames, do.call, duplicated, eval, evalq,
get, grep, grepl, intersect, is.unsorted, lapply, lengths, mapply,
match, mget, order, paste, pmax, pmax.int, pmin, pmin.int, rank,
rbind, rownames, sapply, setdiff, sort, table, tapply, union,
unique, unsplit
Loading required package: hash
hash-2.2.6 provided by Decision Patterns
Loading required package: ggplot2
Loading required package: RCurl
Loading required package: bitops
Loading required package: Rgraphviz
Loading required package: grid
Loading required package: XML
Attaching package: 'XML'
The following object is masked from 'package:graph':
addNode
Loading required package: genalg
Attaching package: 'CNORode'
The following object is masked from 'package:stats':
simulate
Loading required package: deSolve
Attaching package: 'deSolve'
The following object is masked from 'package:graphics':
matplot
> png(filename="/home/ddbj/snapshot/RGM3/R_BC/result/MEIGOR/runBayesFit.Rd_%03d_medium.png", width=480, height=480)
> ### Name: runBayesFit
> ### Title: Running the BayesFit optimisation
> ### Aliases: runBayesFit
>
> ### ** Examples
>
>
> data("simpleExample", package="MEIGOR")
> initial_pars = createLBodeContPars(model, LB_n=1, LB_k=0.1, LB_tau=0.01, UB_n=5, UB_k=0.9, UB_tau=10, random=TRUE)
> simData = plotLBodeFitness(cnolist, model, initial_pars, reltol=1e-05, atol=1e-03, maxStepSize=0.01)
>
> f_bayesFit <- function(position, params=initial_pars, exp_var=opts$exp_var) {
+ # convert from log
+ params$parValues = 10^position
+ ysim = getLBodeDataSim(cnolist=cnolist, model=model,
+ ode_parameters=params)
+ data_as_vec = unlist(cnolist$valueSignals)
+ sim_as_vec = unlist(ysim)
+ # set nan (NAs) to 0
+ sim_as_vec[is.na(sim_as_vec)] = 0
+ sim_as_vec[is.nan(sim_as_vec)]= 0
+ return(sum((data_as_vec-sim_as_vec)^2/(2*exp_var^2)))
+ }
>
> prior_mean = log10(initial_pars$parValues)
> prior_var = 10
>
> opts <- list("model"=NULL, "estimate_params"=NULL,"initial_values"=NULL,
+ "tspan"=NULL, "step_fn"=NULL, "likelihood_fn"=NULL,
+ "prior_fn"=NULL, "nsteps"=NULL, "use_hessian"=FALSE,
+ "rtol"=NULL, "atol"=NULL, "norm_step_size"=0.75,
+ "hessian_period"=25000, "hessian_scale"=0.085,
+ "sigma_adj_interval"=NULL, "anneal_length"=NULL,
+ "T_init"=10, "accept_rate_target"=0.3, "sigma_max"=1,
+ "sigma_min"=0.25, "sigma_step"=0.125, "thermo_temp"=1, "seed"=NULL)
> opts$nsteps = 2000
> opts$likelihood_fn = f_bayesFit
> opts$use_hessian = TRUE
> opts$hessian_period = opts$nsteps/10
> opts$model = list(parameters=list(name=initial_pars$parNames,
+ value=initial_pars$parValues))
> opts$estimate_params = initial_pars$parValues
> opts$exp_var = 0.01
>
> res = runBayesFit(opts)
Running BayesFit
=========================
iter=0 sigma=1 T=10 acc=1 lkl=13062.5 prior=0.028 post=13062.53
iter=20 sigma=1 T=5.939305 acc=0.952 lkl=13062.93 prior=0.644 post=13063.58
iter=40 sigma=1 T=3.710748 acc=0.902 lkl=13062.5 prior=0.885 post=13063.39
iter=60 sigma=1 T=2.48769 acc=0.934 lkl=13062.59 prior=0.833 post=13063.43
iter=80 sigma=1 T=1.816462 acc=0.951 lkl=13062.48 prior=2.011 post=13064.49
iter=100 sigma=1 T=1.448084 acc=0.871 lkl=13059.76 prior=1.907 post=13061.66
iter=120 sigma=1 T=1.245914 acc=0.802 lkl=9046.33 prior=2.011 post=9048.34
iter=140 sigma=1 T=1.13496 acc=0.709 lkl=8300.11 prior=2.13 post=8302.24
iter=160 sigma=1 T=1.074068 acc=0.634 lkl=8201.99 prior=2.377 post=8204.37
iter=180 sigma=1 T=1.040649 acc=0.564 lkl=8201.99 prior=2.377 post=8204.37
iter=200 sigma=1 T=1.022988 acc=0.507 lkl=8201.99 prior=2.377 post=8204.37
iter=220 sigma=1 T=1.022988 acc=0.466 lkl=8199.86 prior=2.376 post=8202.23
iter=240 sigma=1 T=1.022988 acc=0.436 lkl=8192.55 prior=2.372 post=8194.92
iter=260 sigma=1 T=1.022988 acc=0.402 lkl=8192.55 prior=2.372 post=8194.92
iter=280 sigma=1 T=1.022988 acc=0.374 lkl=8192.55 prior=2.372 post=8194.92
iter=300 sigma=1 T=1.022988 acc=0.349 lkl=8192.55 prior=2.372 post=8194.92
iter=320 sigma=1 T=1.022988 acc=0.327 lkl=8192.55 prior=2.372 post=8194.92
iter=340 sigma=1 T=1.022988 acc=0.311 lkl=8191.6 prior=2.362 post=8193.96
iter=360 sigma=0.875 T=1.022988 acc=0.294 lkl=8191.6 prior=2.362 post=8193.96
iter=380 sigma=0.75 T=1.022988 acc=0.278 lkl=8191.6 prior=2.362 post=8193.96
iter=400 sigma=0.625 T=1.022988 acc=0.267 lkl=8189.87 prior=2.355 post=8192.22
iter=420 sigma=0.5 T=1.022988 acc=0.257 lkl=8190.76 prior=2.352 post=8193.12
iter=440 sigma=0.375 T=1.022988 acc=0.247 lkl=8188.97 prior=2.276 post=8191.24
iter=460 sigma=0.25 T=1.022988 acc=0.243 lkl=8187.72 prior=2.187 post=8189.91
iter=480 sigma=0.25 T=1.022988 acc=0.239 lkl=8174.36 prior=2.239 post=8176.6
iter=500 sigma=0.25 T=1.022988 acc=0.232 lkl=8151.11 prior=2.253 post=8153.36
iter=520 sigma=0.25 T=1.022988 acc=0.223 lkl=8151.11 prior=2.253 post=8153.36
iter=540 sigma=0.25 T=1.022988 acc=0.214 lkl=8151.11 prior=2.253 post=8153.36
iter=560 sigma=0.25 T=1.022988 acc=0.207 lkl=8151.11 prior=2.253 post=8153.36
iter=580 sigma=0.25 T=1.022988 acc=0.2 lkl=8151.11 prior=2.253 post=8153.36
iter=600 sigma=0.25 T=1.022988 acc=0.193 lkl=8151.11 prior=2.253 post=8153.36
iter=620 sigma=0.25 T=1.022988 acc=0.187 lkl=8151.11 prior=2.253 post=8153.36
iter=640 sigma=0.25 T=1.022988 acc=0.181 lkl=8151.11 prior=2.253 post=8153.36
iter=660 sigma=0.25 T=1.022988 acc=0.177 lkl=8151.33 prior=2.199 post=8153.53
iter=680 sigma=0.25 T=1.022988 acc=0.173 lkl=8151.26 prior=2.126 post=8153.39
iter=700 sigma=0.25 T=1.022988 acc=0.168 lkl=8151.26 prior=2.126 post=8153.39
iter=720 sigma=0.25 T=1.022988 acc=0.165 lkl=8151.58 prior=2.169 post=8153.75
iter=740 sigma=0.25 T=1.022988 acc=0.161 lkl=8151.58 prior=2.169 post=8153.75
iter=760 sigma=0.25 T=1.022988 acc=0.156 lkl=8151.58 prior=2.169 post=8153.75
iter=780 sigma=0.25 T=1.022988 acc=0.152 lkl=8151.58 prior=2.169 post=8153.75
iter=800 sigma=0.25 T=1.022988 acc=0.149 lkl=8151.58 prior=2.169 post=8153.75
iter=820 sigma=0.25 T=1.022988 acc=0.146 lkl=8151.57 prior=2.087 post=8153.66
iter=840 sigma=0.25 T=1.022988 acc=0.143 lkl=8151.57 prior=2.087 post=8153.66
iter=860 sigma=0.25 T=1.022988 acc=0.139 lkl=8151.57 prior=2.087 post=8153.66
iter=880 sigma=0.25 T=1.022988 acc=0.137 lkl=8154.42 prior=2.061 post=8156.48
iter=900 sigma=0.25 T=1.022988 acc=0.134 lkl=8154.42 prior=2.061 post=8156.48
iter=920 sigma=0.25 T=1.022988 acc=0.131 lkl=8154.42 prior=2.061 post=8156.48
iter=940 sigma=0.25 T=1.022988 acc=0.129 lkl=8154.42 prior=2.061 post=8156.48
iter=960 sigma=0.25 T=1.022988 acc=0.127 lkl=8151.22 prior=2.037 post=8153.25
iter=980 sigma=0.25 T=1.022988 acc=0.124 lkl=8151.22 prior=2.037 post=8153.25
iter=1000 sigma=0.25 T=1.022988 acc=0.122 lkl=8151.22 prior=2.037 post=8153.25
iter=1020 sigma=0.25 T=1.022988 acc=0.119 lkl=8151.22 prior=2.037 post=8153.25
iter=1040 sigma=0.25 T=1.022988 acc=0.117 lkl=8151.22 prior=2.037 post=8153.25
iter=1060 sigma=0.25 T=1.022988 acc=0.115 lkl=8151.22 prior=2.037 post=8153.25
iter=1080 sigma=0.25 T=1.022988 acc=0.113 lkl=8151.22 prior=2.037 post=8153.25
iter=1100 sigma=0.25 T=1.022988 acc=0.111 lkl=8151.22 prior=2.037 post=8153.25
iter=1120 sigma=0.25 T=1.022988 acc=0.109 lkl=8151.22 prior=2.037 post=8153.25
iter=1140 sigma=0.25 T=1.022988 acc=0.107 lkl=8151.22 prior=2.037 post=8153.25
iter=1160 sigma=0.25 T=1.022988 acc=0.105 lkl=8151.22 prior=2.037 post=8153.25
iter=1180 sigma=0.25 T=1.022988 acc=0.104 lkl=8151.77 prior=2.164 post=8153.93
iter=1200 sigma=0.25 T=1.022988 acc=0.103 lkl=8154.97 prior=2.071 post=8157.04
iter=1220 sigma=0.25 T=1.022988 acc=0.102 lkl=8154.97 prior=2.071 post=8157.04
iter=1240 sigma=0.25 T=1.022988 acc=0.1 lkl=8154.97 prior=2.071 post=8157.04
iter=1260 sigma=0.25 T=1.022988 acc=0.099 lkl=8152.51 prior=2.015 post=8154.52
iter=1280 sigma=0.25 T=1.022988 acc=0.098 lkl=8152.51 prior=2.015 post=8154.52
iter=1300 sigma=0.25 T=1.022988 acc=0.097 lkl=8153.74 prior=1.916 post=8155.66
iter=1320 sigma=0.25 T=1.022988 acc=0.095 lkl=8153.74 prior=1.916 post=8155.66
iter=1340 sigma=0.25 T=1.022988 acc=0.094 lkl=8153.74 prior=1.916 post=8155.66
iter=1360 sigma=0.25 T=1.022988 acc=0.093 lkl=8153.74 prior=1.916 post=8155.66
iter=1380 sigma=0.25 T=1.022988 acc=0.091 lkl=8153.74 prior=1.916 post=8155.66
iter=1400 sigma=0.25 T=1.022988 acc=0.09 lkl=8153.74 prior=1.916 post=8155.66
iter=1420 sigma=0.25 T=1.022988 acc=0.089 lkl=8153.74 prior=1.916 post=8155.66
iter=1440 sigma=0.25 T=1.022988 acc=0.087 lkl=8153.74 prior=1.916 post=8155.66
iter=1460 sigma=0.25 T=1.022988 acc=0.086 lkl=8153.74 prior=1.916 post=8155.66
iter=1480 sigma=0.25 T=1.022988 acc=0.085 lkl=8153.74 prior=1.916 post=8155.66
iter=1500 sigma=0.25 T=1.022988 acc=0.085 lkl=8153.87 prior=1.938 post=8155.81
iter=1520 sigma=0.25 T=1.022988 acc=0.083 lkl=8153.87 prior=1.938 post=8155.81
iter=1540 sigma=0.25 T=1.022988 acc=0.082 lkl=8153.87 prior=1.938 post=8155.81
iter=1560 sigma=0.25 T=1.022988 acc=0.081 lkl=8153.87 prior=1.938 post=8155.81
iter=1580 sigma=0.25 T=1.022988 acc=0.081 lkl=8153.65 prior=1.913 post=8155.57
iter=1600 sigma=0.25 T=1.022988 acc=0.08 lkl=8153.65 prior=1.913 post=8155.57
iter=1620 sigma=0.25 T=1.022988 acc=0.079 lkl=8153.65 prior=1.913 post=8155.57
iter=1640 sigma=0.25 T=1.022988 acc=0.078 lkl=8153.65 prior=1.913 post=8155.57
iter=1660 sigma=0.25 T=1.022988 acc=0.077 lkl=8153.65 prior=1.913 post=8155.57
iter=1680 sigma=0.25 T=1.022988 acc=0.076 lkl=8153.65 prior=1.913 post=8155.57
iter=1700 sigma=0.25 T=1.022988 acc=0.075 lkl=8153.65 prior=1.913 post=8155.57
iter=1720 sigma=0.25 T=1.022988 acc=0.074 lkl=8153.65 prior=1.913 post=8155.57
iter=1740 sigma=0.25 T=1.022988 acc=0.074 lkl=8153.43 prior=1.912 post=8155.34
iter=1760 sigma=0.25 T=1.022988 acc=0.073 lkl=8153.43 prior=1.912 post=8155.34
iter=1780 sigma=0.25 T=1.022988 acc=0.072 lkl=8153.43 prior=1.912 post=8155.34
iter=1800 sigma=0.25 T=1.022988 acc=0.072 lkl=8153.43 prior=1.912 post=8155.34
iter=1820 sigma=0.25 T=1.022988 acc=0.071 lkl=8153.43 prior=1.912 post=8155.34
iter=1840 sigma=0.25 T=1.022988 acc=0.07 lkl=8153.43 prior=1.912 post=8155.34
iter=1860 sigma=0.25 T=1.022988 acc=0.069 lkl=8153.43 prior=1.912 post=8155.34
iter=1880 sigma=0.25 T=1.022988 acc=0.069 lkl=8153.43 prior=1.912 post=8155.34
iter=1900 sigma=0.25 T=1.022988 acc=0.068 lkl=8153.43 prior=1.912 post=8155.34
iter=1920 sigma=0.25 T=1.022988 acc=0.068 lkl=8146.7 prior=1.953 post=8148.65
iter=1940 sigma=0.25 T=1.022988 acc=0.067 lkl=8146.7 prior=1.953 post=8148.65
iter=1960 sigma=0.25 T=1.022988 acc=0.066 lkl=8146.7 prior=1.953 post=8148.65
iter=1980 sigma=0.25 T=1.022988 acc=0.066 lkl=8146.7 prior=1.953 post=8148.65
param actual fitted % error
A_n_B 3.84 0 200406.15
A_k_B 0.6 0 32859.33
tau_B 5.05 0.03 14778.32
B_n_C 2.33 0.13 1761.73
B_k_C 0.49 0 1402074.75
tau_C 3.66 18.52 80.21
>
> initial_pars$parValues = cur_params(output=res, options=opts)
>
>
>
>
>
>
> dev.off()
null device
1
>