NLMR is a
R package designed to generate neutral landscape models
(NLMs), simulated landscapes used to explore landscape scale ecological
patterns and processes. The NLMR package was designed with
a similar philosophy to the Python package NLMpy (see Etherington et al. 2014), offering a
general numeric framework allowing for a high degree of flexibility.
Most of the common NLMs, as described by the relevant literature, can be
produced using NLMR. Additionally, NLMR allows users to merge multiple
landscapes, classify landscape elements categorically and measure basic
landscape level metrics. All NLMs produced take the form of
two-dimensional raster arrays with specified row and column dimensions
and cell values ranging between 0 and 1. By returning raster arrays,
NLMs are easily integrated into the workflow of many useful spatial
analysis packages, notably the raster package.
For further information on neutral landscape models, the authors goals for this package, and additional use case examples please see the associated publication Sciani, Fritsch, Scherer and Simpkins (2018).
NLMR supplies 16 NLM algorithms. The algorithms differ
from each other in spatial autocorrelation, from no autocorrelation
(random NLM) to a constant gradient (planar gradients) (see Palmer 1992).
The 16 NLM algorithms are:
The basic syntax used to produce a NLM landscape is:
nlm_modeltype(ncol, nrow, resolution, ...)
For example, to produce a simple random neutral landscape one could use the following code:
Multiple NLM rasters can be merged to create new landscape patterns. A single primary or base raster can be merged with any number of additional secondary rasters, with optional scaling factors used to control the influence of the secondary rasters.
# Create secondary landscape rasters
sL1 <- NLMR::nlm_distancegradient(ncol = 100,
nrow = 100,
origin = c(10, 10, 10, 10))
sL2 <- NLMR::nlm_random(ncol = 100,
nrow = 100)
# Merge rasters with scaling factors
mL1 <- pL + (sL1 + sL2 * 0.2)
plot(mL1)Landscape rasters generated by NLMR contain continuous
values between 0 and 1, though these can be converted into categorical
values using util_classify.
nr <- NLMR::nlm_edgegradient(ncol = 100,
nrow = 100)
nr_classified <- util_classify(nr, n = 4)
raster::plot(nr_classified)