-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.Rmd
154 lines (121 loc) · 6.92 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
---
output: github_document
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```
# poems: Pattern-oriented ensemble modeling system (for spatially explicit populations) <img src='man/figures/logo.svg' align="right" height="125" />
<!-- badges: start -->
[![Paper_doi](https://img.shields.io/badge/doi-10.1111/2041--210X.13720-orange.svg)](https://doi.org/10.1111/2041-210X.13720)
[![CRAN_version](https://www.r-pkg.org/badges/version/poems)](https://cran.r-project.org/package=poems)
[![Codecov test coverage](https://codecov.io/gh/GlobalEcologyLab/poems/branch/main/graph/badge.svg)](https://app.codecov.io/gh/GlobalEcologyLab/poems?branch=main)
[![Last commit](https://img.shields.io/github/last-commit/GlobalEcologyLab/poems.svg)](https://github.com/GlobalEcologyLab/poems/commits/main)
[![R-CMD-check](https://github.com/GlobalEcologyLab/poems/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/GlobalEcologyLab/poems/actions/workflows/R-CMD-check.yaml)
[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
<!-- badges: end -->
The poems package provides a framework of interoperable *R6* (Chang, 2020) classes
for building ensembles of viable models via the pattern-oriented modeling (POM)
approach (Grimm et al., 2005). Pattern-oriented modeling is a vigorous form of
statistical validation in which simulations and their parameter settings are
summarized using key metrics and converged toward multiple observed patterns,
or targets.
The package provides a process-based population model related to the
functionality of RAMAS or Vortex, but in a free and open source
format, with high customizability. The package includes classes for encapsulating and
generating model parameters, and managing the POM workflow. The workflow includes:
1. Model setup including generated spatial layers and demographic population
model parameters.
1. Generating model parameters via Latin hypercube sampling (Iman & Conover, 1980).
1. Running multiple sampled model simulations.
1. Collating summary results metrics via user-defined functions.
1. Validating and selecting an ensemble of models that best match known patterns.
By default, model validation and selection utilizes an approximate Bayesian computation
(ABC) approach (Beaumont et al., 2002) using the *abc* package (Csillery et al., 2015).
However, alternative user-defined functionality could be employed.
The package includes a spatially explicit demographic population model simulation
engine, which incorporates default functionality for density dependence, correlated
environmental stochasticity, stage-based transitions, and distance-based dispersal.
The user may customize the simulator by defining functionality for translocations,
harvesting, mortality, and other processes, as well as defining the sequence order
for the simulator processes. The framework could also be adapted for use with other
model simulators by utilizing its extendable (inheritable) base classes.
## Installation
You can install poems from the CRAN repository:
``` r
install.packages("poems")
```
Or you can install the development version of poems from [GitHub](https://github.com/) using:
``` r
# install.packages("devtools")
remotes::install_github("GlobalEcologyLab/poems")
```
## The poemsverse
`poems` can do spatial population models on its own, but it also provides the engine behind two extension packages: [paleopop](https://github.com/GlobalEcologyLab/paleopop) and [epizootic](https://github.com/viralemergence/epizootic). `paleopop` is an extension for simulating populations over very long timescales, and `epizootic` is an extension for simulating disease dynamics in wild populations.
## Example
The following simple example demonstrates how to run a single spatially explicit
demographic population model using *poems*:
```{r example, message = FALSE, fig.align = "center"}
library(poems)
# Demonstration example region (U Island) and initial abundance
coordinates <- data.frame(
x = rep(seq(177.01, 177.05, 0.01), 5),
y = rep(seq(-18.01, -18.05, -0.01), each = 5)
)
template_raster <- Region$new(coordinates = coordinates)$region_raster # full extent
template_raster[][-c(7, 9, 12, 14, 17:19)] <- NA # make U Island
region <- Region$new(template_raster = template_raster)
initial_abundance <- seq(0, 300, 50)
raster::plot(region$raster_from_values(initial_abundance),
main = "Initial abundance", xlab = "Longitude (degrees)",
ylab = "Latitude (degrees)", zlim = c(0, 300), colNA = "blue"
)
# Set population model
pop_model <- PopulationModel$new(
region = region,
time_steps = 5,
populations = 7,
initial_abundance = initial_abundance,
stage_matrix = matrix(c(
0, 2.5, # Leslie/Lefkovitch matrix
0.8, 0.5
), nrow = 2, ncol = 2, byrow = TRUE),
carrying_capacity = rep(200, 7),
density_dependence = "logistic",
dispersal = (!diag(nrow = 7, ncol = 7)) * 0.05,
result_stages = c(1, 2)
)
# Run single simulation
results <- population_simulator(pop_model)
results # examine
raster::plot(region$raster_from_values(results$abundance[, 5]),
main = "Final abundance", xlab = "Longitude (degrees)",
ylab = "Latitude (degrees)", zlim = c(0, 300), colNA = "blue"
)
```
Further examples utilizing the POM workflow and more advanced features of *poems*
can be found in the accompanying vignettes.
## Citation
You may cite poems in publications using our software paper in *Methods in Ecology and Evolution*:
Fordham, D. A., Haythorne, S., Brown, S. C., Buettel, J. C., & Brook, B. W. (2021). poems: R package for simulating species' range dynamics using pattern‐oriented validation. *Methods in Ecology and Evolution*, *12*(12), 2364-2371.
## References
Beaumont, M. A., Zhang, W., & Balding, D. J. (2002). 'Approximate Bayesian computation
in population genetics'. *Genetics*, vol. 162, no. 4, pp, 2025–2035.
<doi:10.1093/genetics/162.4.2025>
Chang, W. (2020). 'R6: Encapsulated Classes with Reference Semantics'. *R package version 2.5.0*.
Retrieved from <https://CRAN.R-project.org/package=R6>
Csillery, K., Lemaire L., Francois O., & Blum M. (2015). 'abc: Tools for Approximate
Bayesian Computation (ABC)'. *R package version 2.1*. Retrieved from
<https://CRAN.R-project.org/package=abc>
Grimm, V., Revilla, E., Berger, U., Jeltsch, F., Mooij, W. M., Railsback, S. F.,
Thulke, H. H., Weiner, J., Wiegand, T., DeAngelis, D. L., (2005). 'Pattern-Oriented
Modeling of Agent-Based Complex Systems: Lessons from Ecology'. *Science*
vol. 310, no. 5750, pp. 987–991. <doi:10.1126/science.1116681>
Iman R. L., Conover W. J. (1980). 'Small sample sensitivity analysis techniques for computer
models, with an application to risk assessment'. *Commun Stat Theor Methods* A9, pp. 1749–1842.
<doi:10.1080/03610928008827996>