【问题标题】:Fitting ODE in R, with the use of the FME package使用 FME 包在 R 中拟合 ODE
【发布时间】:2016-08-21 12:03:44
【问题描述】:

我正在尝试将 ODE 模型拟合到一些数据并求解模型中参数的值。

我知道 R 中有一个名为 FME 的包,旨在解决此类问题。但是,当我尝试像这个包的手册那样编写代码时,程序无法运行,并出现以下回溯信息:

lsoda(y, times, func, parms, ...) 中的错误:在采取任何集成步骤之前检测到非法输入 - 请参阅书面消息

代码如下:

x <- c(0.1257,0.2586,0.5091,0.7826,1.311,1.8636,2.7898,3.8773)
y <- c(11.3573,13.0092,15.1907,17.6093,19.7197,22.4207,24.3998,26.2158)

time <- 0:7

# Initial Values of the Parameters
parms <- c(r = 4, b11 = 1, b12 = 0.2, a111 = 0.5, a112 = 0.1, a122 = 0.1)

# Definition of the Derivative Functions
# Parameters in pars; Initial Values in y
derivs <- function(time, y, pars){
     with(as.list(c(pars, y)),{
         dx <- r + b11*x + b12*y - a111*x^2 - a122*y^2 - a112*x*y
         dy <- r + b12*x + b11*y - a122*x^2 - a111*y^2 - a112*x*y
         list(c(dx,dy))
     })
}

initial <- c(x = x[1], y = y[1])

data <- data.frame(time = time, x = x, y = y)

 # Cost Computation, the Object Function to be Minimized
 model_cost <- function(pars){
     out <- ode(y = initial, time = time, func = derivs, parms = pars)
     cost <- modCost(model = out, obs = data, x = "time")
     return(cost)
 }

 # Model Fitting
 model_fit <- modFit(f = model_cost, p = parms, lower = c(-Inf,rep(0,5)))

有没有人知道如何使用 FME 包并解决问题?

【问题讨论】:

    标签: r ode model-fitting


    【解决方案1】:

    您的代码语法是正确的,它一直有效到最后一行。

    你可以检查你的代码

    model_cost(parms)
    

    这很好,你可以看到

    model_cost(parms)$model
    

    您的“初步猜测”与观察到的数据相差甚远(比较“obs”和“mod”)。也许这是一个失败,因此拟合过程将无法达到观察到的数据。

    暂时这么多……我还用参数“methods = ...”检查了不同的方法,但仍然不起作用。

    最好的祝愿, 约翰内斯

    编辑:如果你使用:

    model_fit <- modFit(f = model_cost, p = parms)
    

    没有任何下限,那么你会得到一个结果(即使有警告),但是 a112 是你想要省略的负数。

    【讨论】:

    • 也许我应该为参数尝试不同的初始值,或者只是重新考虑参数的范围。谢谢你的回复:)
    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多