为什么在 R 包 fitode 中拟合一个非常简单的 ODE 会导致“优化”错误?

问题描述 投票:0回答:1

我希望使用R包fitode来拟合肿瘤生长的微分方程模型。按照 fitode vignette,我构建了模型并尝试拟合其参数,但我遇到了如下错误:

Error in optim(par = c(log.r1 = 0, log.X0 = 0), fn = function (p)  : 
  initial value in 'vmmin' is not finite

为了进行诊断,我逐渐降低了模型的复杂性,直到它与插图的第一个示例几乎相同。但是,即使在最简单的情况下,错误仍然存在,如下所示。

首先,我调用fitode包并模拟一些数据。这些数据可以代表 14 天内大量细胞分裂的细胞计数。

library(fitode)
days <- c(1, 3, 6, 8, 9, 11, 13, 14)
data_test <- data.frame(day = days, size = rpois(length(days), exp(days)))

绘制这些数据显示简单的指数增长。

Plot of data alone

接下来,我指定指数增长模型。

model_test <- odemodel(
  name="test",
  model=list(
    X1 ~ r1 * X1
  ),
  observation=list(
    size ~ dpois(lambda=X1)
  ),
  initial=list(
    X1 ~ X0
  ),
  par=c("r1", "X0")
)

因为我模拟了这些数据,所以我知道生长参数是 1,初始细胞计数也是 1。事实上,插入这些参数并模拟模型给出了非常好的拟合。

start_test <- c(r1=1, X0=1)
sim_test <- simulate(model_test, parms = start_test, times = seq(0,14,by=0.1))

Plot of data with model

因为这是一个如此简单的例子,我可以确保我对参数的初步猜测是完美的,所以拟合应该很容易。

fit_test <- fitode(
  model=model_test,
  data=data_test,
  start=start_test
)

然而,我收到:

Fitting ode ... Error in optim(par = c(log.r1 = 0, log.X0 = 0), fn = function (p)  :  initial value in 'vmmin' is not finite

对我来说,此错误通常表明初始猜测错误,可能与模型的链接函数不兼容。然而,在这个模拟的例子中,我最初的猜测是完美的,并且与fitode中使用的默认日志链接完美兼容。更重要的是,这个简单的示例非常接近地反映了插图的第一个示例,只是我正在模拟我自己的小数据集。

这里出了什么问题?

r differential-equations model-fitting mle
1个回答
0
投票

tl;dr 您需要

tcol = "day"
告诉函数在哪里寻找时间变量。

fit_test <- fitode(
  model=model_test,
  data=data_test,
  start=start_test, tcol ="day")

从某种意义上说,这不是你的错——在这种情况下,

fitode
肯定会提供更多信息性的错误消息......

© www.soinside.com 2019 - 2024. All rights reserved.