coenocline {coenocliner} | R Documentation |

## Simulate species abundance (counts) or occurrence along one or two gradients

### Description

Simulate species abundance (counts) or occurrence along one or two gradients using well-known ecological response models and random draws from one of a Poisson, negative binomial, Bernoulli, binomial, beta-binomial, zero-inflated Poisson, or zero-inflated neative binomial distribution.

### Usage

```
coenocline(
x,
responseModel = c("gaussian", "beta"),
params,
extraParams = NULL,
countModel = c("poisson", "negbin", "bernoulli", "binary", "binomial",
"betabinomial", "ZIP", "ZINB", "ZIB", "ZIBB"),
countParams = NULL,
expectation = FALSE
)
```

### Arguments

`x` |
one of a numeric vector, a list with two components, each a numeric vector, or a matrix with two columns. The vectors are the locations along the gradient(s) at which species responses are to be simulated. |

`responseModel` |
character; which species response model to use. |

`params` |
a list of vectors each of which are parameters for the response model for each species. Alternatively, a matrix with one column per parameter and a row for each species. |

`extraParams` |
a list containing additional parameters required for the response model. Examples include the correlation between gradients in the bivariate Gaussian response model. Components need to be named. |

`countModel` |
character; if |

`countParams` |
a list of additional parameters required to specify the distribution. An example is the parameter |

`expectation` |
logical; should the expectation (mean) response be returned ( |

### Details

`coenocline()`

is a generic interface to coenocline simulation allowing for easy extension and a consistent interface to a range of species response models and statistical distributions.

Two species response models are currently available; the Gaussian response and the generalized beta response model. Random count or occurrence data can be produced via random draws from a suitable distribution; in which case the values obtained from the specoes response function are used as the expectation of the distribution from which random draws are made.

Parameters for each species in the response model are supplied via argument `params`

and can be provided in one of two ways: i) as a list with named components, each of which is a vector containing values for a single parameter for each species, or ii) as a matrix where each column contains the values for a single parameter and the rows represent species. In each case, the names of the list components or the column names of the matrix must be named for the arguments of the function implementing the species distribution model. See the examples.

Some species response models may require additional parameters not specified at the per species level. An example is the correlation between gradients in the bivariate Gaussian response model. Such parameters are passed via list `extraParams`

and must be named accordingly so that they are passed to the corrct argument in the species response function.

The species response model defines the mean of expected response. (In the case of a species occurrence, the probability of occurrence is the expectation.) These represent paramterterised distributions. Random count or occurence data can be produced from these distributions by simulation from those distributions. In this case, a count or probability of occurence model is used and random draws from the distribution are made. The following distriubutions are available:

Poisson,

Negative binomial,

Bernoulli,

Binomial,

Beta-Binomial,

Zero-inflated Poisson,

Zero-inflated Negative binomial,

Zero-inflated Binomial, and

Zero-inflated Beta-Binomial

Some distributions may need additional parameters beyond the expectation; an example is the `\alpha`

parameter of (one parameterisation of) the negative binomial distribution. These parameters are specied via the list `countParams`

.

### Value

a matrix of simulated count or occurrence data, one row per gradient location, one column per species. The object is of class `"coenocline"`

, which inherits from the `"matrix"`

class.

Additional attributes attached to the matrix are:

`locations`

the gradient locations at which response curves were evaluated or for which counts were simulated.

`expectations`

the passed value of the

`expection`

.`responseModel`

the species response model.

`countModel`

the count distribution used to simulate counts from.

### Author(s)

Gavin L. Simpson

### Examples

```
## Poisson counts along a single gradient, Gaussian response
## =========================================================
x <- seq(from = 4, to = 6, length = 100)
opt <- c(3.75, 4, 4.55, 5, 5.5) + 0.5
tol <- rep(0.25, 5)
h <- rep(20, 5)
## simulate
set.seed(1)
y <- coenocline(x, responseModel = "gaussian",
params = cbind(opt = opt, tol = tol, h = h),
countModel = "poisson")
head(y)
y <- coenocline(x, responseModel = "gaussian",
params = cbind(opt = opt, tol = tol, h = h),
countModel = "poisson",
expectation = TRUE)
plot(y, type = "l", lty = "solid")
## Bernoulli distribution (occurrence)
## ===================================
h <- c(1,3,5,7,9) / 10
y <- coenocline(x, responseModel = "gaussian",
params = cbind(opt = opt, tol = tol, h = h),
countModel = "bernoulli")
head(y)
## probability of occurrence...
pi <- coenocline(x, responseModel = "gaussian",
params = cbind(opt = opt, tol = tol, h = h),
countModel = "bernoulli", expectation = TRUE)
## plot
plot(y, type = "p", pch = 1) # a random realisation
lines(pi, lty = "solid") # probability of occurrence
## Correlated bivariate Gaussian response, two species
## ===================================================
## gradient locations
x <- seq(3.5, 7, length = 30)
y <- seq(1, 10, length = 30)
xy <- expand.grid(x = x, y = y)
## species parameters on gradients x and y
parx <- list(opt = c(5,6), tol = c(0.5,0.3), h = c(50, 75))
pary <- list(opt = c(5,7), tol = c(1.5, 1.5))
## evaluate response curves at gradient locations
sim <- coenocline(xy, params = list(px = parx, py = pary),
responseModel = "gaussian", expectation = TRUE,
extraParams = list(corr = 0.5))
## Perspective plots the bivariate responses of the two species
## 'sim' is a matrix 1 column per species with prod(length(x), length(y))
## rows. Need to reshape each species (column) vector into a matrix
## with as many rows as length(x) (number of gradient locations) and
## fill *column*-wise (the default)
persp(x, y, matrix(sim[,1], ncol = length(x)), # spp1
theta = 45, phi = 30)
persp(x, y, matrix(sim[,2], ncol = length(x)), # spp2
theta = 45, phi = 30)
## Poisson counts along two correlated gradients, Gaussian response
## ================================================================
set.seed(1)
N <- 100
x1 <- seq(from = 4, to = 6, length = N)
opt1 <- seq(4, 6, length = 5)
tol1 <- rep(0.25, 5)
x2 <- seq(from = 2, to = 20, length = N)
opt2 <- seq(2, 20, length = 5)
tol2 <- rep(1, 5)
h <- rep(30, 5)
xy <- expand.grid(x = x1, y = x2)
set.seed(1)
params <- list(px = list(opt = opt1, tol = tol1, h = h),
py = list(opt = opt2, tol = tol2))
y <- coenocline(xy,
responseModel = "gaussian",
params = params,
extraParams = list(corr = 0.5),
countModel = "poisson")
head(y)
tail(y)
## Visualise one species' bivariate count data
persp(x1, x2, matrix(y[,3], ncol = length(x1)),
ticktype = "detailed", zlab = "Abundance")
## Recreate beta responses in Fig. 2 of Minchin (1987)
## ===================================================
A0 <- c(5,4,7,5,9,8) * 10
m <- c(25,85,10,60,45,60)
r <- c(3,3,4,4,6,5) * 10
alpha <- c(0.1,1,2,4,1.5,1)
gamma <- c(0.1,1,2,4,0.5,4)
x <- 1:100
params <- list(m = m, A0 = A0, r = r, alpha = alpha, gamma = gamma)
## Expectations
set.seed(2)
y <- coenocline(x, responseModel = "beta",
params = params,
countModel = "poisson")
head(y)
plot(y, type = "l", lty = "solid")
y <- coenocline(x, responseModel = "beta",
params = params,
countModel = "poisson", expectation = TRUE)
plot(y, type = "l", lty = "solid")
## Zero-inflated Poisson, constant zero-inflation
## ==============================================
y <- coenocline(x, responseModel = "beta", params = params,
countModel = "ZIP", countParams = list(zprobs = 0.2))
plot(y, type = "l", lty = "solid")
## Zero-inflated Negative binomial, constant zero-inflation
y <- coenocline(x, responseModel = "beta",
params = params,
countModel = "ZINB",
countParams = list(alpha = 0.75, zprobs = 0.2))
plot(y, type = "l", lty = "solid")
## Binomial counts, constant size (m) of 100
## =========================================
## note: A0 must be in range, (0,1)
params[["A0"]] <- c(5,4,7,5,9,8) / 10
y <- coenocline(x, responseModel = "beta",
params = params,
countModel = "binomial",
countParams = list(size = 100))
plot(y, type = "l", lty = "solid")
## Beta-Binomial counts, constant size (m) of 100
## ==============================================
## note: A0 must be in range, (0,1)
params[["A0"]] <- c(5,4,7,5,9,8) / 10
y <- coenocline(x, responseModel = "beta",
params = params,
countModel = "betabinomial",
countParams = list(size = 100, theta = 0.1))
plot(y, type = "l", lty = "solid")
```

*coenocliner*version 0.2-3 Index]