使用deSolve和Approxfun()拟合ODE模型时出现问题,收敛到初始猜测

使用deSolve和Approxfun()拟合ODE模型时出现问题,收敛到初始猜测,r,function,parameters,ode,forcing,R,Function,Parameters,Ode,Forcing,我试图使用deSolve来拟合ODE模型,以提取参数值alpha。我有两个物种的配对实验数据,我想得到一个物种与另一个物种的相互作用强度。我正在使用一个强制函数approxfun()来插值第二个物种的时间序列,并将其传递到模型中。我的问题是,我一直得到的参数值与我最初的猜测相同 t <- c(0,4,5,7,10,12,14,17,19,21,24,26,28,31,33,35,38,40) N1 = c(4.000000,772.727273,4139.175258,3585.63535

我试图使用deSolve来拟合ODE模型,以提取参数值alpha。我有两个物种的配对实验数据,我想得到一个物种与另一个物种的相互作用强度。我正在使用一个强制函数approxfun()来插值第二个物种的时间序列,并将其传递到模型中。我的问题是,我一直得到的参数值与我最初的猜测相同

t <- c(0,4,5,7,10,12,14,17,19,21,24,26,28,31,33,35,38,40)
N1 = c(4.000000,772.727273,4139.175258,3585.635359,22.909507, 0.000000,
       148.936170,45.454545,4.95049,35.353535,131.979695,46.082949,
       61.452514,87.804878,155.778895,80.000000,76.081788,120.418848)
N2 = c(0.00000,0.00000,0.00000,20.61856,97.36541,109.43912,195.74468,
       227.27273,69.30693,116.16162,157.36041,153.60983,195.53073,82.92683,
       50.25126,20.00000,19.02045,109.94764)

N2data <- as.data.frame(list(t, N2))
InterpN2 <- approxfun(N2data, method = "constant", rule = 2)

parms <- c(alpha = 0.9)

state = c(N1 = BTdataT$final.dens[1])
r = 1.5
K = 7000


logistic <- function(t, state, parameters) {
  with(as.list(c(state,parameters)),{

    dNdt = r*N1*(1-(N1/K))-(alpha*N1*InterpN2(t)) 

    list(c(dNdt), InterpN2(t)) 
   }) 
 }

Out <- ode(times = t, func = logistic, y = state, parms = parms)
plot(Out)

 y.obs  <- BTdataT$final.dens

 shootfun <- function(alpha){
  Out <- ode(times = times, func = logistic, y = state, parms = parms)

  y.pred <- Out[,2] 

  sigma  <- sqrt(sum((y.obs-y.pred)^2)/length(y.obs))

  nloglike <- -sum(dnorm(y.obs, mean = y.pred, sd = sigma, log = TRUE))
  return(nloglike)
}

shoot <- mle2(shootfun,start=list(alpha = parms[1]),
              method="Nelder-Mead")
summary(shoot)

t这个代码毫无意义。logistic方程是一个一维方程。为什么导数有两个分量?你期望输出也有二维状态,你取第二个,直观上是
N2
项的累积和,而第一个包含数值
N1
值…慢慢开始。使用固定参数模拟实例是否有效?结果是否显示在您期望的位置?结果图看起来正确吗?如果对参数添加一个微小的变化,并在与输入相同的点对其进行采样,两个积分结果之间的距离是否反映了参数中的距离?等等进行调试和测试。这段代码毫无意义。logistic方程是一个一维方程。为什么导数有两个分量?你期望输出也有二维状态,你取第二个,直观上是
N2
项的累积和,而第一个包含数值
N1
值…慢慢开始。使用固定参数模拟实例是否有效?结果是否显示在您期望的位置?结果图看起来正确吗?如果对参数添加一个微小的变化,并在与输入相同的点对其进行采样,两个积分结果之间的距离是否反映了参数中的距离?等等,进行调试和测试。