我已经使用dMod软件包在R中编写了一个相当复杂的常微分方程药代动力学/药效学模型。我已经将其转换为ODEsensitivity软件包可以读取的方程式,因此我可以获得速率常数的Sobol灵敏度指数。我可以将速率常数对不同隔室中药物浓度值的贡献返回。但是,我希望得到的读数是隔室中的药物暴露持续时间–这可以通过药物超过有效浓度的时间量或曲线下面积来实现。但是,我不了解如何评估比药物浓度更复杂的指标的Sobol敏感性。如何为不同的输出返回Sobol索引?
我编写了以下简单的玩具版本,以模拟两个不同大小的隔室之间的药物转移,以进行演示。下面的代码在ster_C1和ster_C2的每个时间点返回敏感度数据帧。我宁愿评估ster_C1 / ster_C2的灵敏度,也可以评估某些任意时间点之间ster_C1的曲线下面积。预先感谢!
toymod <- function(Time, State, Pars) {
with(as.list(c(State, Pars)), {
dchem_B <- -1*(k01*chem_B) +1*(k02*chem_C)*(1/10)
dchem_C <- 1*(k01*chem_B)*(10/1) -1*(k02*chem_C)
return(list( c(dchem_B, dchem_C) ))
})
}
toyparams <- c(
chem_B = 1e-10,
chem_C = 0,
k01 = 200,
k02 = 1000
)
toyparnames <- names(toyparams)
toylower <- toyparams/10
toyupper <- toyparams*10
toyinit <- c(chem_B = 1e-10, chem_C = 0)
toytimes <- seq(5e-05, 0.005, len = 100)
set.seed(59281)
toy_sobol <- ODEsobol(mod = toymod, pars = toyparnames,
state_init = toyinit,
times = toytimes,
n = 500,
rfuncs = "runif",
rargs = paste0("min = ", toylower,
", max = ", toyupper),
sobol_method = "Martinez",
ode_method = "lsoda",
parallel_eval = TRUE,
parallel_eval_ncores = 2)