simSpatialDS: Simulates data for a basic spatial distance sampling model

sim.spatialDSR Documentation

Simulates data for a basic spatial distance sampling model

Description

Generates data with the following steps:

1. Simulate a spatially correlated habitat covariate (x) over a grid of pixels covering a square.

2. Distribute the population of N individuals over the square with probability of location in a pixel related to the covariate.

3. Decide which individuals are detected using a distance sampling model with an observer at the center of the square, with either a half normal or a logit detection function. (Note that all the individuals in the square can be detected.)

4. If keep.all = FALSE, return the locations of only the individuals detected.

To recreate the data sets used in the book with R 3.6.0 or later, include sample.kind="Rounding" in the call to set.seed. This should only be used for reproduction of old results.

Usage

sim.spatialDS(N = 1000, beta = 1, sigma = 1, keep.all = FALSE, B = 3,
  model=c("logit", "halfnorm"), lambda = B/3, useHabitat, show.plot=TRUE)

Arguments

N

total population size in the square

beta

coefficient for the effect of spatial covariate x on the distribution of individuals

sigma

scale parameter of detection function

keep.all

if TRUE, the data for all individuals are returned; if FALSE, only for individuals detected.

B

distance from the observer to the side of the square. This is usually set so that the probability of detection of individuals outside the square is negligable, eg, B = 3*sigma.

model

The detection function used, can be "logit" or "halfnorm": see Details.

lambda

The scale parameter for the spatially autocorrelated Habitat covariate.

useHabitat

If the output from a previous simulation is provided, the same Habitat covariate will be used (and lambda will be ignored).

show.plot

choose whether to show plots or not. Set to FALSE when using function in simulations.

Details

The "logit" detection function is 2*plogis(-d^2/(2*sigma^2)), which corresponds to the detection model implemented in unmarked::pcount.spHDS.

Value

A list with the values of the input arguments and the following additional elements:

u1

x coordinate of each animal

u2

y coordinate of each animal

d

distance of each animal from the center of the circle

pixel.id

the pixel in which each animal is located, the row number in grid

y

indicator of detection of each animal, a vector of length N

N.real

the number of animals inside the circle of radius B

Habitat

Value of the spatially correlated habitat covariate, a 900 x 1 matrix

grid

Coordinates of the center of each pixel, a dataframe with 900 rows and 2 columns

If keep.all = FALSE (the default), only the animals detected are included in u1, u2, d, pixel.id.

Note

Kéry & Royle (2016, p.535 and discussion p.540) and earlier versions of AHMbook included a hazard rate detection function. This is problematic because the detection probability at distance zero is less than 1 (p(0) < 1) and should not be used. It is replaced here with the logit detection function, which does have p(0) = 1.

Author(s)

Marc Kéry & Andy Royle

References

Kéry, M. & Royle, J.A. (2016) Applied Hierarchical Modeling in Ecology AHM2 - 9.8.3.

Examples

# Generate data with the default arguments and look at the structure:
tmp <- sim.spatialDS()
str(tmp)

# Generate date with model = "logit" and analyse the data with unmarked::pcount.spatialHDS
# RNGkind(sample.kind = "Rounding") # run this for R >= 3.6.0
set.seed(1234)
tmp <- sim.spatialDS(model="logit")
# Plot shows a large area of good habitat west of the observer with many animals detected
str(tmp)  # 272 animals detected out of 850 inside the circle (N.real)

# Fit some models with unmarked
if(require(unmarked)) {
  # Get the count of animals detected in each pixel
  pixel.count <- tabulate(tmp$pixel.id, nbins=nrow(tmp$grid))
  # Centre the Habitat covariate
  Habitat <- tmp$Habitat - mean(tmp$Habitat)
  # Create a detection covariate: distance between observer and pixel center
  dist <- with(tmp, sqrt((grid[,1]-B)^2 + (grid[,2]-B)^2))
  # Construct an unmarkedFrame
  umf <- unmarkedFramePCount(y=cbind(pixel.count),
     siteCovs=data.frame(dist=dist, Habitat=Habitat))
  summary(umf)

  (fm0 <- pcount.spHDS(~ -1 + I(dist^2) ~ 1, umf, K=20))
  (fm1 <- pcount.spHDS(~ -1 + I(dist^2) ~ Habitat, umf, K=20))
  # The model with Habitat has much lower AIC
  # Get an estimate of the total population in the square (true is N = 1000)
  sum(predict(fm1, type='state')[, 1])
}

AHMbook documentation built on Sept. 12, 2024, 6:37 a.m.