Проблема при подборе модели ODE с использованием deSolve и Approxfun (), сходящаяся к исходному предположению - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь подогнать модель ODE, используя deSolve для извлечения значения параметра, альфа.У меня есть данные о двух видах из парного эксперимента, и я хочу получить силу взаимодействия одного вида со вторым.Я использую функцию принуждения, прибл. (), Чтобы интерполировать временные ряды второго вида и передавать их в модель.Моя проблема в том, что значение параметра, которое я продолжаю получать, совпадает с моим первоначальным предположением.

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)

Моими ожидаемыми результатами будет фактическое альфа-значение, извлеченное из этих данных, а не то, которое сходится к начальному условию,Я новичок в этом и в настоящее время не очень хорошо понимаю это.Большое спасибо за помощь !!

...