2016-04-27 7 views
0

Я пытаюсь подгонять модель ODE к некоторым данным и решать для значений параметров в модели.Установка ODE в R, с использованием пакета FME

Я знаю, что в R есть пакет под названием FME, который предназначен для решения этой проблемы. Однако, когда я попытался написать код, как в руководстве этого пакета, программа может не работать со следующей отладочной информацией:

Ошибка в lsoda (у, раз, 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 и исправить эту проблему?

ответ

0

Ваш синтаксис кода правильный, и он работает до последней строки.

вы можете проверить свой код с

model_cost(parms) 

Это прекрасно работает, и вы можете увидеть

model_cost(parms)$model 

, что ваше «первоначальное предположение» находится далеко от наблюдаемых данных (сравните «набли» и "мода"). Возможно, здесь произошел сбой, так что процедура подгонки не дойдет до наблюдаемых данных.

Так много на время ... Я также проверил разные методы с параметром «методы = ...», но все равно не работает.

С наилучшими пожеланиями, Johannes

редактировать: Если вы используете:

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

без нижних границ, то вы получите результат (даже есть предупреждения), а затем А112 отрицательна, что вы хотели опустить.

+0

Возможно, мне нужно попробовать разные начальные значения для параметров или просто пересмотреть диапазон параметров. Спасибо за ваш ответ :) –