[R] How to apply a system of ordinary differential equations to a cell grid?

Marine Regis marine.regis at hotmail.fr
Wed Jun 21 21:48:24 CEST 2017


I am developing an agent-based model to simulate the spread of infectious diseases in heterogeneous landscapes composed of habitat polygons (or clumps of connected cells). To simplify the model, I consider a habitat grid (or raster) containing the polygon ID of each cell. In addition, I have epidemiological parameters associated with each polygon ID. At each time step, the parameter values change in the polygon. Thus, the data frame “landscape” (see below) is updated at each time step. Here is an example at t = 0:

landscape <- data.frame(polygon_ID = seq(1, 10, by = 1),
                        beta = sample(c(100, 200, 400, 600), 10, replace = TRUE),
                        gamma = sample(c(25, 26, 27, 28), 10, replace = TRUE))

To study the disease dynamics, I also am developing a compartmental model based on a system of ordinary differential equations (ODEs). Here is an example to represent the system of ODEs:

solve_sir_model <- function (times, parameters) {

  sir_model <- function (times, states, parameters) {

    with(as.list(c(states, parameters)), {

      dSdt <- -beta*S*I
      dIdt <- beta*S*I-gamma*I
      dRdt <- gamma*I
      dNdt <- dSdt + dIdt + dRdt

      return(list(c(dSdt, dIdt, dRdt, dNdt)))


  states <- c(S = 99, I = 1, R = 0, N = 100)
  return(ode(y = states, times = times, func = sir_model, parms = parameters))

output <- as.data.frame(solve_sir_model(times = seq(0, 5, by = 1), parameters = c(beta = 400, gamma = 28)))

Here is my question: at each time step, is it possible to apply the system of ODEs to each habitat polygon (thus each row) in the data frame “landscape”? I am using lsoda as an ODE solver. Do I need to use another solver to apply the ODEs at each time step?

Thank you very much for your advice.
Have a nice day

	[[alternative HTML version deleted]]

More information about the R-help mailing list