knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.height = 6, fig.width = 6 )
if (Sys.info()[["sysname"]] == "Darwin") { knitr::opts_chunk$set( eval = FALSE ) }
This vignette gives a quick example of a simple workflow to produce a single simulation, a stack of simulations, or start from an existing inventory or a previous simulation.
We will use rcontroll
with packages dplyr
and tidyr
for data wrangling and ggplot2
to do figures.
suppressMessages(library(dplyr)) library(tidyr) library(ggplot2) suppressMessages(library(rcontroll))
We load the species data available for French Guiana (TROLLv3_species
), with associated climate data (TROLLv3_climatedaytime12
) and day variation (TROLLv3_daytimevar
).
We also load a previous simulation (TROLLv3_output
).
We generate parameters using generate_parameters
for a simulation per month (iterperyear
= 12) lasting one year (nbiter
= 12) on a 100x100 grid (cols
= 100 and rows
= 100).
We further duplicated parameters with a simulation index using mutate
and unnest
for a stack of simulations using a seedrain
of 5000 (default) and 500 (default/10).
data("TROLLv3_species") data("TROLLv3_climatedaytime12") data("TROLLv3_daytimevar") data("TROLLv3_output") stack_parameters <- generate_parameters( cols = 100, rows = 100, iterperyear = 12, nbiter = 12 * 1 ) %>% mutate(simulation = list(c("seed50000", "seed500"))) %>% unnest(simulation) stack_parameters[62, 2] <- 500 # Cseedrain
We can generate parameters and view them directly as a table with a description of its effect using generate_parameters
and kable
.
generate_parameters(cols = 250, rows = 250, nbiter = 12 * 1) %>% head() %>% knitr::kable()
We run a simple simulation using the troll
function with loaded and generated data.
Set verbose
to TRUE
to see the TROLL log directly in the console.
sim <- troll( name = "test", global = generate_parameters( cols = 100, rows = 100, iterperyear = 12, nbiter = 12 * 1 ), species = TROLLv3_species, climate = TROLLv3_climatedaytime12, daily = TROLLv3_daytimevar, verbose = TRUE )
We can print a simple summary of the simulation.
sim
We can quickly plot simulation outputs using the autoplot
method for three types of outputs defined with the what
parameter:
temporal
trajectories of variables for the whole ecosystem or user-defined species,spatial
patterns of variables, including species labels, at forest initial or final pattern,distribution
of variables at forest initial or final pattern for the whole ecosystem or user-defined species.For instance here we show species temporal trajectories for all available variables using 4 species: Cecropia obtusa, Dicorynia guianensis, Eperua grandiflora, and Vouacapoua americana:
rcontroll::autoplot(sim, what = "temporal", species = c( "Cecropia_obtusa", "Dicorynia_guianensis", "Eperua_grandiflora", "Vouacapoua_americana" ) ) + theme(legend.position = "bottom")
Note that
autoplot
results in aggplot2
object that you can modify with the+
operator and otherggplot2
commands such astheme
used here to change the legend position.
Similarly, we can quickly plot the forest final patterns using autoplot
and what
defined on spatial
:
rcontroll::autoplot(sim, what = "spatial")
Finally, we can quickly plot variables distribution at forest final patterns using autoplot
and what
defined on distribution
:
rcontroll::autoplot(sim, what = "distribution", variables = c("dbh", "height", "LA", "LMA") )
We run a stack of simulations using the stack
function with loaded and generated data.
We can inactivate verbose
to see only the loading bar.
We can define the number of cores used for parallelization.
And we can define a thinning of outputs by giving the number of iterations to be kept to reduce the output size.
sim_stack <- stack( name = "teststack", simulations = c("seed50000", "seed500"), global = stack_parameters, species = TROLLv3_species, climate = TROLLv3_climatedaytime12, daily = TROLLv3_daytimevar, verbose = FALSE, cores = 2, thin = c(1, 5, 10) )
We can print a simple summary of the simulations.
sim_stack
We can quickly plot temporal trajectories for all simulations using autoplot
and what
defined on temporal
, for instance here with basal area (ba) and aboveground biomass (agb):
rcontroll::autoplot(sim_stack, what = "temporal", variables = c("ba", "agb") )
Similarly, we can quickly plot the forest final patterns using autoplot
and what
defined on spatial
:
rcontroll::autoplot(sim_stack, what = "spatial")
We can also run a simple simulation or a stack of simulations starting from an existing inventory or a previous simulation
using the troll
function with the forest
parameter.
We can first have a look to the ecosystem temporal trajectories of the TROLLv3_output
simulation:
rcontroll::autoplot(TROLLv3_output, what = "temporal")
Similarly we can have a look to the the forest final pattern from TROLLv3_output
that we will use to initiate the next simulation:
rcontroll::autoplot(TROLLv3_output, what = "spatial", variables = "age")
To run the simulation we first extracted the forest from TROLLv3_output
, in which we removed unused columns (not mandatory).
Then we extracted the previous simulation parameters to run the new one in similar conditions, we only changed the time length to 12 iterations.
And we finally used the same troll
function adding the previous forest to initiate the simulation with the forest
parameter.
A forest inventory can also be used with at least coordinates and DBH.
sim <- troll( name = "test", global = update_parameters(TROLLv3_output, nbiter = 12 * 1), species = TROLLv3_output@inputs$species, climate = TROLLv3_output@inputs$climate, daily = TROLLv3_output@inputs$daily, forest = get_forest(TROLLv3_output), verbose = FALSE )
We can quickly plot temporal trajectories of both simulations to check that the initialization from TROLLv3_output
worked.
For that we updated the simulation iteration index by adding the number realised in the previous simulation.
Then we simply joined ecosystem outputs with bind_rows
before using ggplot
to show aboveground biomass (agb) temporal trajectory:
sim@ecosystem$iter <- sim@ecosystem$iter + max(TROLLv3_output@ecosystem$iter) list( "TROLLv3_output" = TROLLv3_output@ecosystem, "sim" = sim@ecosystem ) %>% bind_rows(.id = "simulation") %>% ggplot(aes(iter / 12, agb, col = simulation)) + geom_point() + theme_bw() + xlab("Time (years)") + ylab(expression(Abovergound ~ biomass ~ (AGB ~ Kg ~ ha^{ -1 })))
Note how the simulation AGB starts at the end of
TROLLv3_output
's temporal trajectory.
gifs <- autogif( name = "dynamic", variables = "height_ct", global = update_parameters(TROLLv3_output, nbiter = 12 * 100, extent_visual = 100 ), species = TROLLv3_output@inputs$species, climate = TROLLv3_output@inputs$climate, daily = TROLLv3_output@inputs$daily, forest = get_forest(TROLLv3_output), verbose = FALSE ) gifs$height_ct
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.