使用FME包在R中安装ODE
我试图将ODE模型与一些数据相匹配,并求解模型中参数的值 我知道R中有一个名为FME的包,它旨在解决此类问题。但是,当我试图编写类似此软件包手册的代码时,程序无法使用以下回溯信息运行: lsoda中的错误(y、times、func、parms…):在执行任何集成步骤之前检测到非法输入-请参阅书面消息 代码如下:使用FME包在R中安装ODE,r,ode,model-fitting,R,Ode,Model Fitting,我试图将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,1
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)))
x您的代码语法是正确的,它一直工作到最后一行
您可以使用
model_cost(parms)
这很好用,你可以看到
model_cost(parms)$model
您的“初始猜测”与观测数据相差甚远(比较“obs”和“mod”)。这可能是一个故障,因此拟合程序无法达到观测数据
暂时就这么多。。。我还使用参数“methods=…”检查了不同的方法,但仍然不起作用
致以最良好的祝愿,
约翰尼斯
编辑:如果使用:
model_fit <- modFit(f = model_cost, p = parms)
model\u fit也许我应该尝试不同的参数初始值,或者只是重新考虑参数的范围。感谢您的回复:)