1 Beyond spades

So far, we have run models with the spades function.

spades() only has a few arguments:

  • debug
  • .plotInitialTime
  • .saveInitialTime
  • progress
  • cache

What if we want to do more stuff?

2 Replication

What if we have a stochastic model and need many independent (Monte Carlo) runs?

The experiment function does this.

?experiment # for details

# Exercise: 
#
# Make the simList using the simInit function in the help
# Explore the simList visually and textually
# Run it

Generally, however, this creates problems because of the computational time required …

3 Replication

The replicates argument

It is as easy as replicates = 2 to do 2 replicates.

?experiment # for details

# See Example 5
#  ... run mySim from top of help file
sims <- experiment(mySim, replicates = 2)
attr(sims, "experiment")$expDesign # shows 2 replicates of same experiment

What does it return? What is the attr?

4 The curse of replication

  • Multiplies the time it takes to run any model
  • Can use parallel processing
  • This is the simplest, yet most effective, parallel processing
  • No communication between individual simulations, until the end
  • So they can be spread across threads on a single computer or among computers
  • The cl argument

5 Parallel

  • SpaDES functions that are parallel aware:

    • experiment, POM, splitRaster
  • In each case, there are 2 ways

raster::beginCluster() # which will make a cluster silently 
                       # in the background

# or
cl <- parallel::makeCluster() # user has to explicitly pass 
                              # the cluster object into 
                              # functions using cl argument

Try it!

6 experiment: Varying parameter values

?experiment
#See example 1
experimentParams <- list(fireSpread = 
                           list(spreadprob = list(0.2, 0.23),
                                nFires = list(20, 10)),
                         caribouMovement = 
                           list(N = list(100, 1000)))
sims <- experiment(mySim, params = experimentParams)
attr(sims, "experiment")

7 experiment: Saving files

Often, a spades call will generate output files. Where do they go when using experiment?

?experiment
#See example 4
sims <- experiment(mySim, 
                   params = experimentParams, 
                   dirPrefix = c("expt", "simNum"))
attr(sims, "experiment")$expVals # shows 8 alternative
               #experiment levels, 24 unique parameter values

dir(outputPath(mySim))

8 Working through other examples of experiment

Exercise:

Pick a few examples and try to understand them. (noting that they get more complicated as you get towards the bottom)

?experiment

9 Running parallel simulations

Clearly, using experiment can take a lot of resources, but there are a few options:

  • Use your own computer, a local cluster, a server, cloud and more;

  • Access Compute Canada for free (though sometimes the queues are long):

10 Pattern Oriented Modeling

11 Estimating unknown parameters

  • Ecological models use equations and functions
  • These have parameters
  • Parameters can be estimated from:

    • directly from data (e.g., regression, machine learning)
    • indirectly using (e.g., pattern oriented modeling) (e.g., Grimm et al. Science 2005, Marucco & McIntire J Appl Ecol 2010)

12 Directly from data

  • (Just a brief discussion of this here)
  • Remember, we are using R!
  • So you can use any statistical method that R has
  • Mixed models, non-linear models, machine learning, bayesian
nTrees <- 50
diamCM <- rlnorm(nTrees, meanlog = 2, sdlog = 0.7)
height <- rnorm(nTrees, sqrt(diamCM)*2 + rnorm(nTrees))
glmObj <- glm(height ~ diamCM)
plot(diamCM, height)
summary(glmObj)

13 Predict method

  • These methods often have predict methods associated with them
  • So, instead of using “fixed” parameters in simulation models
  • We can use these methods which give more accurate prediction:

    • given uncertainty,
    • random effects,
    • covariance matrix
# predict with new data
predVals <- predict(glmObj, newdata = data.frame(
  diamCM = rlnorm(nTrees, meanlog = 2, sdlog = 0.7)
))

14 Using this in simulation models

  • In R, everything is an object
  • The glmObj and predictVals are objects
  • These have many features that can be used in simulations

    • plot methods
    • standard errors, covariance matrices
    • random effects terms
  • For the first 25 years of simulation modeling in ecology, parameters were copied into simulation models and hard coded
  • This made it difficult to update the simulation model if there are new data and the regression needs to be refit
  • Using SpaDES we can now fit the data and use the parameters all inside the simulation

15 Indirectly from data

15.1 Pattern Oriented Modeling (POM)

  • What does this mean?

15.2 Heuristic Optimization

  • Optimization is the process of minimizing some objective function
  • Heuristic optimization is when there is no derivative-based solution
  • Requires simulation-based approaches
  • In R, currently, DEoptim seems to be the best optimization package for heuristic optimization
  • POM function in SpaDES uses this package

15.3 POM

There are several examples in ?POM, which we will go through:

# example 1
# What is exampe 1 doing?
# Run it
# What does the result mean?

15.3.1 More complicated POM

  • What would be next?

15.3.2 More complicated POM - example 2

  • What would be next?
# example 2
# What is example 2 doing?
# Run it
# What does the result mean?

15.3.3 More complicated POM - example 3

  • What would be next?
# example 3 
# What is example 3 doing?
# Run it
# What does the result mean?