Dear All,
please help with some thoughts on overcoming the following issues, if possible:
#R Code
require(deSolve)
require(FME)
pars <- list(k = 0.06,v=18)
intimes <- c(0,0.5,12,12.5,50)
input <- c(800,0,800,0,0)
forc <- approxfun(intimes, input, method="constant")
model <- function(pars, times=seq(0, 50, by = 1)) {
derivs <- function(t, state, pars) {
with(as.list(c(state, pars)), {
inp <- forc(t)
dy1 <- - k* y[1] + inp/v
return(list(c(dy1)))
})
}
state <- c(y = 0)
return(lsoda(y = state, times = times, func = derivs, parms = pars))
}
observed <- matrix
(nc=2,byrow=2,data=c(0,0,0.5,19.7,3,17.4,5.5,15.3,8,13.5,11.5,11.3,13,29.8,15.5,26.3,16.5,25,18,23.2,24,17.2,30,12.7,40,7.7,49.5,4.8))
colnames(observed) <- c("time", "y")
obj <- function(x, parset = names(x)) {
pars[parset] <- x
tout <- seq(0, 50, by = 1)
out <- model(pars, tout)
return(modCost(obs = observed, model = out))
}
prior <- function(p)
return( sum(((p-c(0.06,18))/c(0.04,6))^2 ))
final <- modMCMC(p = c(k=0.06,v=18), f = obj,
prior=prior,lower=c(0.0001,0.1),jump = NULL, niter = 1000,updatecov=100, wvar0 =
1,var0=NULL,burninlength = 50)
summary(final)
plot(final)
the values for "observed" were generated with k=0.05, v=20, which are
the retunrs I expect from the modMCMC run. Please comment on:
1. is there any way to get modMCMC to run multiple times faster with this data?
2. my accepted number of runs is very low. Is there a way to increase that?
3. any thoughts on improving convergence?
4. at times I only have one or two "observed" data points to work
with, which often results in "suboptimal" outputs from the modMCMC
runs. any thoughts on how to improve identifiability of parameter values with
less "observed" data points being available?
thank you for the help,
Andras
[[alternative HTML version deleted]]