Description Usage Arguments Details Value Author(s) See Also Examples
Dynamic occupancy distribution for use in nimble
models
dDynOcc_**
and rDynOcc_**
provide dynamic occupancy
model distributions that can be used directly from R or in nimble
models.
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  dDynOcc_vvm(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_vsm(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_svm(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_ssm(x, init, probPersist, probColonize, p, start, end, log = 0)
rDynOcc_vvm(n, init, probPersist, probColonize, p, start, end)
rDynOcc_vsm(n, init, probPersist, probColonize, p, start, end)
rDynOcc_svm(n, init, probPersist, probColonize, p, start, end)
rDynOcc_ssm(n, init, probPersist, probColonize, p, start, end)
dDynOcc_vvv(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_vsv(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_svv(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_ssv(x, init, probPersist, probColonize, p, start, end, log = 0)
rDynOcc_vvv(n, init, probPersist, probColonize, p, start, end)
rDynOcc_vsv(n, init, probPersist, probColonize, p, start, end)
rDynOcc_svv(n, init, probPersist, probColonize, p, start, end)
rDynOcc_ssv(n, init, probPersist, probColonize, p, start, end)
dDynOcc_vvs(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_vss(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_svs(x, init, probPersist, probColonize, p, start, end, log = 0)
dDynOcc_sss(x, init, probPersist, probColonize, p, start, end, log = 0)
rDynOcc_vvs(n, init, probPersist, probColonize, p, start, end)
rDynOcc_vss(n, init, probPersist, probColonize, p, start, end)
rDynOcc_svs(n, init, probPersist, probColonize, p, start, end)
rDynOcc_sss(n, init, probPersist, probColonize, p, start, end)

x 
detection/nondetection matrix of 0s (not detected) and 1s (detected). Rows represent primary sampling occasions (e.g. different seasons). Columns are secondary sampling locations (e.g. replicate visits within a season) that may be different for each row 
init 
probability of occupancy in the first sampling period 
probPersist 
persistence probabilityâ€“probability an occupied
cell remains occupied. 1extinction probability. Scalar for

probColonize 
colonization probability. Probability that
an unoccupied cell becomes occupied. Scalar for 
p 
Detection probabilities. Scalar for 
start 
indicates the column number of the first observation in each row of x. A vector of length dim(x)[1]. This allows for different time periods to have different numbers of sampling occasions 
end 
indicates the column number of the last observation in each row of x. A vector of length dim(x)[1]. This allows for different time periods to have different numbers of sampling occasions 
log 
TRUE (return log probability) or FALSE (return probability) 
n 
number of random draws, each returning a matrix of dimension

These nimbleFunctions provide distributions that can be used directly in R or
in nimble
hierarchical models (via nimbleCode
and nimbleModel
).
The probability (or likelihood) of observation x[t, o]
depends on
the occupancy status of the site at time t1, the transitition
probability of persistence (probPersist
or probPersist[t1]
),
colonization (probColonize
or probColonize[t1]
), and a
detection probability (p
, p[t]
, or p[t, o]
).
The first two letters following the 'dDynOcc_' indicate whether the
probabilities of persistence and colonization are a constant scalar (s)
or timeindexed vector (v). For example, dDynOcc_svm
takes scalar
persistence probability probPersist
with a vector of colonization
probabilities probColonize[1:(T1)]
.
When vectors, probColonize
and probPersist
may be of any
length greater than or equal to length(x)  1
. Only the first length(x)  1
indices are used, each corresponding to the transition from time t to t+1
(e.g. probColonize[2]
describes the transition probability from
t = 2 to t = 3). All extra values are ignored. This is to make it easier to
use one distribution for many sites, some requiring probabilities of length 1.
The third letter in the suffix indicates whether the detection probability
is a constant (scalar), timedependent (vector), or both timedependent and
dependent on observation occasion (matrix). For example, dDynOcc_svm
takes a matrix of detection probabilities p[1:T, 1:O]
.
The arguments start
and end
allow different time periods to
contain different numbers of sampling events. Suppose you have observations
for samples in three seasons; in the first two seasons, there are four
observations, but in the third, there are only three. The start
and end
could be provided as start = c(1,1,1)
and
end = c(4,4,3)
. In this case, the value of x[4,4]
would
be ignored.
For more explanation, see package vignette
(vignette("Introduction_to_nimbleEcology")
).
Compared to writing nimble
models with a discrete latent state for
true occupancy status and a separate scalar datum for each observation, use
of these distributions allows one to directly sum (marginalize) over the
discrete latent state and calculate the probability of all observations from
one site jointly.
These are nimbleFunction
s written in the format of userdefined
distributions for NIMBLE's extension of the BUGS model language. More
information can be found in the NIMBLE User Manual at
https://rnimble.org.
When using these distributions in a nimble
model, the lefthand side
will be used as x
, and the user should not provide the log
argument.
For example, in nimble
model code,
detections[1:T, 1:O] ~ dDynOcc_ssm(init,
probPersist = persistence_prob,
probColonize = colonization_prob, p = p[1:T, 1:O],
start = start[1:T], end = end[1:T])
declares that the detections[1:T]
vector follows a dynamic occupancy
model distribution with parameters as indicated, assuming all the parameters
have been declared elsewhere in the model. This
will invoke (something like) the following call to dDynOcc_ssm
when
nimble
uses the model such as for MCMC:
dDynOcc_ssm(detections[1:T, 1:O], init,
probPersist = persistence_prob,
probColonize = colonization_prob, p = p[1:T, 1:O],
start = start[1:T], end = end[1:T], log = TRUE)
If an algorithm using a nimble
model with this declaration
needs to generate a random draw for detections[1:T, 1:O]
, it
will make a similar invocation of rDynOcc_ssm
, with n = 1
.
If the colonization probabilities are timedependent, one would use:
detections[1:T] ~ dDynOcc_svm(nrep, init = init_prob,
probPersist = persistence_prob,
probColonize = colonization_prob[1:(T1)], p = p[1:T, 1:O])
For dDynOcc_***
: the probability (or likelihood) or log probability
of observation vector x
.
For rDynOcc_***
: a simulated detection history, x
.
Ben Goldstein, Perry de Valpine and Lauren Ponisio
For basic occupancy models, see documentation for
dOcc
.
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  # Set up constants and initial values for defining the model
x < matrix(c(0,0,0,0,
1,1,1,0,
0,0,0,0,
0,0,1,0,
0,0,0,0), nrow = 4)
start < c(1,1,2,1,1)
end < c(5,5,5,4,5)
init < 0.7
probPersist < 0.5
probColonize < 0.2
p < matrix(rep(0.5, 20), nrow = 4)
# Define code for a nimbleModel
nc < nimbleCode({
x[1:2, 1:5] ~ dDynOcc_vvm(init,
probPersist[1:2], probColonize[1:2], p[1:2,1:5],
start = start[1:4], end = end[1:4])
init ~ dunif(0,1)
for (i in 1:2) {
probPersist[i] ~ dunif(0,1)
probColonize[i] ~ dunif(0,1)
}
for (i in 1:2) {
for (j in 1:5) {
p[i,j] ~ dunif(0,1)
}
}
})
# Build the model, providing data and initial values
DynOcc_model < nimbleModel(nc, data = list(x = x),
constants = list(start = start, end = end),
inits = list(p = p, probPersist = probPersist,
init = init, probColonize = probColonize))
# Calculate log probability of data from the model
DynOcc_model$calculate("x")
# Use the model for a variety of other purposes...

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.