Подавить ошибку от deSolve :: lsoda

Я использую некоторые алгоритмы, которые используют приблизительное байесовское вычисление (например, см. Toni et al., 2009), и они требуют многократного решения системы уравнений Лотки-Вольтерра со случайно созданным набором входных параметров. Я использую lsodaфункцию из try(..., silent = TRUE)пакета .

Иногда эта функция вызывает ошибку, и я надеялся проигнорировать это с помощью options(show.error.messages = FALSE)функции, хотя это, похоже, не работает (см. Пример ниже). Настройка тоже не работает. require(deSolve) # Differential equations defining the system LV <- function(Time, State, Pars){ with(as.list(c(State, Pars)), { dx <- a*x - x*y dy <- b*x*y - y return(list(c(dx, dy))) } ) } # Parameters pars <- c(a = 1.0, b = 1.0) # Initial conditions init <- c(x = 1.0, y = 0.5) # Time steps times <- seq(0, 15, length.out = 100) problem_seeds <- c(7, 241, 361, 365, 468, 473, 649, 704, 724, 745, 838) for (i in problem_seeds){ set.seed(i) # Sample from pi(theta), prior for parameter vector (a, b) theta_star <- runif(2, -10, 10) names(theta_star) <- c("a", "b") # Simulate a dataset using these parameters (at the specified times) try(out <- lsoda(func = LV, y = init, parms = theta_star, times = times), silent = TRUE) dfs <- as.data.frame(out) }

Как отключить печать сообщения об ошибке из deSolve :: lsoda?

deSolve

r,error-handling,ode,differential-equations,

0

Ответов: 1


2

Посмотрите на страницу 44 виньетки deSolve, описанная здесь ошибка .

Вы можете решить эту проблему в уменьшении абсолютного допуска решения. В вашем примере работает следующий подход:

out <- lsoda(func = LV, 
             y = init, 
             parms = theta_star, 
             times = times,
             atol = 1e-3)

Примечание. Ваш файл data.frame dfsбудет перезаписан в каждом цикле, и если вы хотите вывести файл problem_seeds в data.frame, вы можете запустить определение applyсемейства. И теперь вам не нужна tryфункция.

г, обработки ошибок, ода, дифференциальные уравнения-,