2

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,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 パッケージを使用して問題を解決する方法を知っている人はいますか?

4

1 に答える 1

1

あなたのコード構文は正しく、最後の行まで機能します。

あなたのコードをチェックすることができます

model_cost(parms)

これは正常に機能し、次のように表示できます

model_cost(parms)$model

あなたの「最初の推測」が観測されたデータから遠く離れていることを確認してください(「obs」と「mod」を比較してください)。おそらく、フィッティング手順が観測されたデータに到達しないという失敗があります。

しばらくの間...パラメーター「methods = ...」を使用してさまざまなメソッドもチェックしましたが、まだ機能しません。

よろしくお願いします、 ヨハネス

編集:使用する場合:

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

下限がない場合、(警告があっても) 結果は得られますが、a112 は省略したかった負の値です。

于 2016-04-27T10:36:15.947 に答える